|
66041
|
Personal Website by @lt_882013 | Stardance
|
lt_882013
|
4
|
4.0
|
8
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-10T16:38:34Z", "hours": 1.0, "multiplier": 1.18, "payout": 1, "blessing": "neutral", "text": "Update V4.0 I added a new weather app where you can type in your city and check your temprature, humidity and wind speed!", "repo": "https://github.com/maali666000-ctrl/personal-website", "demo": "http://lightsabersite.org"}, {"ship_num": 2, "ts": "2026-10-02T17:18:09Z", "hours": 1.0, "multiplier": 4.21, "payout": 6, "blessing": "neutral", "text": "Update V3.0 I added the Pong minigame which you can play with friends. I have not yet added mobile support which I will add soon in update 4. I also saw many people complain about the css so I updated it a lot!", "repo": "https://github.com/maali666000-ctrl/personal-website", "demo": "http://lightsabersite.org"}, {"ship_num": 3, "ts": "2026-09-30T16:02:31Z", "hours": 1.0, "multiplier": 1.11, "payout": 1, "blessing": "neutral", "text": "I added a Minigame button on the website including a minigame website section. The minigame i added is flappy bird. a classic game where you are a bird flying trying to dodge pipes and get the most score. Try out the website! https://maali666000-ctrl.github.io/personal-website/", "repo": "https://github.com/maali666000-ctrl/personal-website", "demo": "http://lightsabersite.org"}, {"ship_num": 4, "ts": "2026-09-28T17:36:31Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website about me and my 2 friends and who we are! check out the website! https://maali666000-ctrl.github.io/personal-website/", "repo": "https://github.com/maali666000-ctrl/personal-website", "demo": "http://lightsabersite.org"}]...
|
[{"post_id": 78380, "ts": "202 [{"post_id": 78380, "ts": "2026-10-10T16:37:07Z", "hours": 0.8753, "text": "Update 4.0 My friend gave me the code for the new weather app we just made!"}, {"post_id": 76198, "ts": "2026-10-02T17:17:42Z", "hours": 1.0853, "text": "Update V3.0 I added the Pong minigame which you can play with friends. I have not yet added mobile support which I will add soon in update 4. I also saw many people complain about the css so I updated it a lot!"}, {"post_id": 75911, "ts": "2026-10-01T16:05:01Z", "hours": 0.3503, "text": "Version V2.1 Decided to update the css with my friends code (damn im useless) and i added some more animations to make it more smooth and clean"}, {"post_id": 75620, "ts": "2026-09-30T16:00:05Z", "hours": 1.2561, "text": "I just added a flappy bird minigame (gonna add more in the future). my friend gave me css and js for the flappy bird game but i made the buttons and canvas for the actual game and the minigames section."}, {"post_id": 74947, "ts": "2026-09-28T17:31:11Z", "hours": 0.4203, "text": "Finally finished the website! theres a problem with the image but i dont really mind"}, {"post_id": 74593, "ts": "2026-09-27T18:18:04Z", "hours": 0.4542, "text": "We continued and kind of finished the html! We also finished a bit of the css and added an image about us. I wasn’t able to commit everything onto GitHub though because my friend had to go. I’ll upload everything tomorrow! Oh yea we also added the description of the other member of the team!"}, {"post_id": 74016, "ts": "2026-09-26T15:19:08Z", "hours": 0.5014, "text": "Finished almost half of the website! We are gonna start on the css and js soon"}]...
|
Title: Personal Website by @lt_882013 | Stardance
Title: Personal Website by @lt_882013 | Stardance
Devlogs:
Finished almost half of the website! We are gonna start on the css and js soon
We continued and kind of finished the html! We also finished a bit of the css and added an image about us. I wasn’t able to commit everything onto GitHub though because my friend had to go. I’ll upload everything tomorrow! Oh yea we also added the description of the other member of the team!
Finally finished the website! theres a problem with the image but i dont really mind
I just added a flappy bird minigame (gonna add more in the future). my friend gave me css and js for the flappy bird game but i made the buttons and canvas for the actual game and the minigames section.
Version V2.1 Decided to update the css with my friends code (damn im useless) and i added some more animations to make it more smooth and clean
Update V3.0 I added the Pong minigame which you can play with friends. I have not yet added mobile support which I will add soon in update 4. I also saw many people complain about the css so I updated it a lot!
Update 4.0 My friend gave me the code for the new weather app we just made!
Ships:
I made a website about me and my 2 friends and who we are! check out the website! https://maali666000-ctrl.github.io/personal-website/
I added a Minigame button on the website including a minigame website section. The minigame i added is flappy bird. a classic game where you are a bird flying trying to dodge pipes and get the most score. Try out the website! https://maali666000-ctrl.github.io/personal-website/
Update V3.0 I added the Pong minigame which you can play with friends. I have not yet added mobile support which I will add soon in update 4. I also saw many people complain about the css so I updated it a lot!
Update V4.0 I added a new weather app where you can type in your city and check your temprature, humidity and wind speed!...
|
1792817297.32566
|
1792903697.32566
|
|
68049
|
WebTab by @Siyam | Stardance
|
Siyam
|
4
|
4.0
|
4
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T15:39:45Z", "hours": 0.0, "multiplier": 4.22, "payout": 1, "blessing": "neutral", "text": "That was my old project. its WebTab, Like a tab in website. i updated that, “Refactored the project structure by moving CSS and JS out of the HTML file, and included a polite voter notification asking users to support me as a beginner developer.” Please give me better ratings, i’am begginer.", "repo": "https://github.com/Tanzil-Alam/WebTab", "demo": "https://tanzil-alam.github.io/WebTab/"}, {"ship_num": 2, "ts": "2026-10-10T19:45:09Z", "hours": 1.0, "multiplier": 1.52, "payout": 1, "blessing": "neutral", "text": "Added dynamic background images using the Unsplash API in JavaScript to give the UI a fresh look. The background now updates automatically on every page reload, or manually whenever you click the settings icon. It’s a small touch that makes the app feel much more alive.", "repo": "https://github.com/Tanzil-Alam/WebTab", "demo": "https://tanzil-alam.github.io/WebTab/"}, {"ship_num": 3, "ts": "2026-10-09T09:10:52Z", "hours": 1.0, "multiplier": 1.52, "payout": 2, "blessing": "neutral", "text": "WebTab WebTab is a self-contained browser start page that combines a dark glassmorphism aesthetic with practical daily navigation. Structurally, the HTML separates the display into a fixed background layer holding the wallpaper and an overlay canvas, along with a vertically centered container housing a digital clock, a direct Google search form, and a row of quick-access shortcut buttons. Visually, the CSS color system builds depth by layering translucent white surfaces with varying opacities and backdrop blurs over a deep black canvas, accented by soft border highlights and responsive hover transitions. Under the hood, plain JavaScript powers the experience without external dependencies: it updates the digital clock and localized date every second, parses bookmark domain names to dynamically fetch crisp icons from Google’s favicon service, and drives a lightweight canvas animation loop that renders and continuously cycles drifting star particles across the screen.Also added notes. It also has a settings button, if i click on settings, the background images switch. It has Moon and galaxy based background images. The button uses, css and js to switch the images smoothly.", "repo": "https://github.com/Tanzil-Alam/WebTab", "demo": "https://tanzil-alam.github.io/WebTab/"}, {"ship_num": 4, "ts": "2026-10-05T18:42:39Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "WebTab is a self-contained browser start page that combines a dark glassmorphism aesthetic with practical daily navigation. Structurally, the HTML separates the display into a fixed background layer holding the wallpaper and an overlay canvas, along with a vertically centered container housing a digital clock, a direct Google search form, and a row of quick-access shortcut buttons. Visually, the CSS color system builds depth by layering translucent white surfaces with varying opacities and backdrop blurs over a deep black canvas, accented by soft border highlights and responsive hover transitions. Under the hood, plain JavaScript powers the experience without external dependencies: it updates the digital clock and localized date every second, parses bookmark domain names to dynamically fetch crisp icons from Google’s favicon service, and drives a lightweight canvas animation loop that renders and continuously cycles drifting star particles across the screen.Also added notes.", "repo": "https://github.com/Tanzil-Alam/WebTab", "demo": "https://tanzil-alam.github.io/WebTab/"}]...
|
[{"post_id": 78712, "ts": "202 [{"post_id": 78712, "ts": "2026-10-11T11:51:28Z", "hours": 0.2867, "text": "Refactored the project structure by moving CSS and JS out of the HTML file, and included a polite voter notification asking users to support me as a beginner developer."}, {"post_id": 78428, "ts": "2026-10-10T19:40:11Z", "hours": 0.7178, "text": "Added dynamic background images using the Unsplash API in JavaScript to give the UI a fresh look. The background now updates automatically on every page reload, or manually whenever you click the settings icon. It’s a small touch that makes the app feel much more alive!"}, {"post_id": 78034, "ts": "2026-10-09T09:07:21Z", "hours": 1.0297, "text": "Placed a settings button in the top-right corner (12px offset) that toggles between 3 different background images on click. I also added the live site link to the README so anyone can check out the update."}, {"post_id": 77126, "ts": "2026-10-05T18:40:51Z", "hours": 0.7178, "text": "Built new shortcut controls and a live clock widget into the interface. I’ve also deployed the latest build using GitHub Pages, so feel free to test it out live at WebTab"}, {"post_id": 77111, "ts": "2026-10-05T17:34:36Z", "hours": 1.6825, "text": "Added an interactive moving particle effect to the background and integrated a search engine directly into the interface. It brings a whole new level of polish and utility to the dashboard! Check it out live on WebTab"}]...
|
Title: WebTab by @Siyam | Stardance
Devlogs:
Adde Title: WebTab by @Siyam | Stardance
Devlogs:
Added an interactive moving particle effect to the background and integrated a search engine directly into the interface. It brings a whole new level of polish and utility to the dashboard! Check it out live on WebTab
Built new shortcut controls and a live clock widget into the interface. I’ve also deployed the latest build using GitHub Pages, so feel free to test it out live at WebTab
Placed a settings button in the top-right corner (12px offset) that toggles between 3 different background images on click. I also added the live site link to the README so anyone can check out the update.
Added dynamic background images using the Unsplash API in JavaScript to give the UI a fresh look. The background now updates automatically on every page reload, or manually whenever you click the settings icon. It’s a small touch that makes the app feel much more alive!
Refactored the project structure by moving CSS and JS out of the HTML file, and included a polite voter notification asking users to support me as a beginner developer.
Ships:
WebTab is a self-contained browser start page that combines a dark glassmorphism aesthetic with practical daily navigation. Structurally, the HTML separates the display into a fixed background layer holding the wallpaper and an overlay canvas, along with a vertically centered container housing a digital clock, a direct Google search form, and a row of quick-access shortcut buttons. Visually, the CSS color system builds depth by layering translucent white surfaces with varying opacities and backdrop blurs over a deep black canvas, accented by soft border highlights and responsive hover transitions. Under the hood, plain JavaScript powers the experience without external dependencies: it updates the digital clock and localized date every second, parses bookmark domain names to dynamically fetch crisp icons from Google’s favicon service, and drives a lightweight canvas animation loop that renders and continuously cycles drifting star particles across the screen.Also added notes.
WebTab WebTab is a self-contained browser start page that combines a dark glassmorphism aesthetic with practical daily navigation. Structurally, the HTML separates the display into a fixed background layer holding the wallpaper and an overlay canvas, along with a vertically centered container housing a digital clock, a direct Google search form, and a row of quick-access shortcut buttons. Visually, the CSS color system builds depth by layering translucent white surfaces with varying opacities and backdrop blurs over a deep black canvas, accented by soft border highlights and responsive hover transitions. Under the hood, plain JavaScript powers the experience without external dependencies: it updates the digital clock and localized date every second, parses bookmark domain names to dynamically fetch crisp icons from Google’s favicon service, and drives a lightweight canvas animation loop that renders and continuously cycles drifting star particles across the screen.Also added notes. It also has a settings button, if i click on settings, the background images switch. It has Moon and galaxy based background images. The button uses, css and js to switch the images smoothly.
Added dynamic background images using the Unsplash API in JavaScript to give the UI a fresh look. The background now updates automatically on every page reload, or manually whenever you click the settings icon. It’s a small touch that makes the app feel much more alive.
That was my old project. its WebTab, Like a tab in website. i updated that, “Refactored the project structure by moving CSS and JS out of the HTML file, and included a polite voter notification asking users to support me as a beginner developer.” Please give me better ratings, i’am begginer....
|
1792817450.5913548
|
1792903850.5913548
|
|
69200
|
PDFTools by @itzdeep2 | Stardance
|
itzdeep2
|
4
|
23.0
|
146
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-23T13:57:40Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "🚢 Shipped: PDFTools & OpenDesign (100% Client-Side Privacy Suite) — I just launched PDFTools, a completely offline, browser-based utility suite featuring the OpenDesign Studio for visual canvas editing and document signing, along with local PDF merging, splitting, OCR text extraction, structure compression, and client-side format conversion. The core philosophy here is zero-knowledge privacy: not a single byte ever leaves your machine, ensuring sensitive documents are never uploaded to remote third-party servers. While certain experimental features like large media transcoding and heavy AI background removal push browser memory limits and may not function as seamlessly as they would on dedicated cloud farms, relying strictly on client-side WebAssembly was an intentional, non-negotiable architectural decision to protect your data sovereignty and guarantee absolute privacy.", "repo": "https://github.com/itzdeep2/PDFTools", "demo": "http://itzdeep2.github.io/PDFTools/"}, {"ship_num": 2, "ts": "2026-10-18T17:20:17Z", "hours": 8.0, "multiplier": 15.48, "payout": 123, "blessing": "neutral", "text": "this ship is not a major change but somebody said the most people think about something is the attention to detail/ the small thing and changes..!! still i tried my best to add the details i can add, everything i know that feels missing. some may recomend me that add some images but the actual problem is i want to make the site as light weight as i can so i used emojis instead of images..!! and many more things to add and still processing…!!! still if you have any openion you can give so i can make it better..!! (PLS NOTE this feature not working as intended as its under progress)", "repo": "https://github.com/itzdeep2/PDFTools", "demo": "http://itzdeep2.github.io/PDFTools/"}, {"ship_num": 3, "ts": "2026-10-13T15:36:01Z", "hours": 3.0, "multiplier": 4.22, "payout": 16, "blessing": "neutral", "text": "I made PDFTools to do basic PDF tasks in one place. You can merge and split PDFs, convert them to images, add text, and use OCR to read text from images. The hardest part was getting the different tools to work properly in the browser. I’m proud that the files are processed on the user’s device instead of being uploaded to my server. I also added separate pages and emoji buttons to make it easier to use. You can try it using the project link!", "repo": "https://github.com/itzdeep2/PDFTools", "demo": "http://itzdeep2.github.io/PDFTools/"}, {"ship_num": 4, "ts": "2026-10-12T14:18:16Z", "hours": 2.0, "multiplier": 2.82, "payout": 7, "blessing": "neutral", "text": "Built a simple PDF toolkit that runs entirely in the browser! It can merge PDFs, extract pages, convert them to JPG, add text, read text from images using OCR, and more. I used JavaScript with pdf-lib, PDF.js, and Tesseract.js. No backend or file uploads to a server needed.", "repo": "https://github.com/itzdeep2/PDFTools", "demo": "http://itzdeep2.github.io/PDFTools/"}]...
|
[{"post_id": 82017, "ts": "202 [{"post_id": 82017, "ts": "2026-10-23T13:55:08Z", "hours": 2.3939, "text": "fixed all the errors and things which i could still many thing to go Remember that this is a all offine local tool some of the function is not working as intended (as some of the processing require large servers) { using server would ruin the project as it is made by keeping privacy in mind} still tried to fix…!!"}, {"post_id": 81747, "ts": "2026-10-22T10:30:09Z", "hours": 2.49, "text": "The open design and remove bg has some bugs so its currently not working i am trying to fix it…… and added a new feature rotate pdf and also universal convert only works with images/pdfs files not videos i will implement the video feature soon so stay tuned…!!!!"}, {"post_id": 81508, "ts": "2026-10-21T15:11:08Z", "hours": 2.1814, "text": "added remove background and clean audio (noise remover) but its not working i am trying to fix it but i am not getting much time as i am working somewhere else so pls don’t mind the delay..!!"}, {"post_id": 81427, "ts": "2026-10-21T07:21:04Z", "hours": 0.8461, "text": "Add the universal convert it will auto detect the file uploaded and ask the format accordingly which we want to convert…!!! Still its Pending because the download function is not working so i have to fix it… STAY TUNED…!!!"}, {"post_id": 81221, "ts": "2026-10-20T10:49:54Z", "hours": 1.855, "text": "added different colour themes and also added a universal convert which is currently in progress…!!! stay tuned..!!"}, {"post_id": 80733, "ts": "2026-10-18T17:18:34Z", "hours": 1.5733, "text": "added a opendesign like canva still i dont wanna higlight it as its under construction and many more things to add and still processing…!!! still if you have any openion you can give so i can make it better..!! (PLS NOTE this feature not working as intended as its under progress)"}, {"post_id": 80663, "ts": "2026-10-18T13:05:08Z", "hours": 0.6958, "text": "the most usable thing and the most difficult and challenging thing is to add the all direction resize pull tabs (before it can be done only using the bottom right tab) many things i had to delete and more than 100+ insertation to add and also thanks to AI for sorting out the confusing thing and helping me add the all direction resize tab without confusing the script.js which direction the user is pulling…!!!"}, {"post_id": 80651, "ts": "2026-10-18T12:09:11Z", "hours": 2.2322, "text": "tbh really frustrated with the edit pdf option rest everything didn’t took so much time. but this is causing so much error and i have to add a remove many things thanks to my computer teacher who helped a lot to edit and improve the design like the whitout had a border which i removed and also the delete option disappeared real quick so i had to fix it…!! hope you like it many more changes and features to add i am thinking to add a canva type thing locally so stay tuned…!!!!"}, {"post_id": 80355, "ts": "2026-10-17T11:51:43Z", "hours": 3.4286, "text": "in edit pdf i have added different fonts and,size and colour..!!! also added whiteout which you can whiteout anything you don’t want and also added the image adding but there is some changes to make like image crop option and size option rest everything good…!!! but still sign option is not working so i am trying to add it. REMEMBER THIS IS A LOCAL TOOL (RUNS ON YOUR BROWSER) YOUR DATA NEVER LEAVES YOU DEVICE. everything is processed in your browser so it might have some bugs depending on your device specs i am trying to fix it but i need help if anybody can help pls dm me..!!! if any more suggesstion you have pls comment"}, {"post_id": 79332, "ts": "2026-10-13T15:27:28Z", "hours": 3.0969, "text": "As many of the people in review has told about my flaws and what i can improve, i want to thank them for this honest review. I added the interactive buttons with emoji and also added indivisual pages for every action. some of you also compared my project to ILovePdf for them i want to say that in my project everything stays in your device everything is processed in your browser unlike this companies which upload your pdf to server. it gives some advantages to my project ie. safe, private, secure, fast."}, {"post_id": 78789, "ts": "2026-10-11T16:39:18Z", "hours": 2.0847, "text": "Built a simple PDF toolkit that runs entirely in the browser! It can merge PDFs, extract pages, convert them to JPG, add text, read text from images using OCR, and more. I used JavaScript with pdf-lib, PDF.js, and Tesseract.js. No backend or file uploads to a server needed."}]...
|
Title: PDFTools by @itzdeep2 | Stardance
Devlogs: Title: PDFTools by @itzdeep2 | Stardance
Devlogs:
Built a simple PDF toolkit that runs entirely in the browser! It can merge PDFs, extract pages, convert them to JPG, add text, read text from images using OCR, and more. I used JavaScript with pdf-lib, PDF.js, and Tesseract.js. No backend or file uploads to a server needed.
As many of the people in review has told about my flaws and what i can improve, i want to thank them for this honest review. I added the interactive buttons with emoji and also added indivisual pages for every action. some of you also compared my project to ILovePdf for them i want to say that in my project everything stays in your device everything is processed in your browser unlike this companies which upload your pdf to server. it gives some advantages to my project ie. safe, private, secure, fast.
in edit pdf i have added different fonts and,size and colour..!!! also added whiteout which you can whiteout anything you don’t want and also added the image adding but there is some changes to make like image crop option and size option rest everything good…!!! but still sign option is not working so i am trying to add it. REMEMBER THIS IS A LOCAL TOOL (RUNS ON YOUR BROWSER) YOUR DATA NEVER LEAVES YOU DEVICE. everything is processed in your browser so it might have some bugs depending on your device specs i am trying to fix it but i need help if anybody can help pls dm me..!!! if any more suggesstion you have pls comment
tbh really frustrated with the edit pdf option rest everything didn’t took so much time. but this is causing so much error and i have to add a remove many things thanks to my computer teacher who helped a lot to edit and improve the design like the whitout had a border which i removed and also the delete option disappeared real quick so i had to fix it…!! hope you like it many more changes and features to add i am thinking to add a canva type thing locally so stay tuned…!!!!
the most usable thing and the most difficult and challenging thing is to add the all direction resize pull tabs (before it can be done only using the bottom right tab) many things i had to delete and more than 100+ insertation to add and also thanks to AI for sorting out the confusing thing and helping me add the all direction resize tab without confusing the script.js which direction the user is pulling…!!!
added a opendesign like canva still i dont wanna higlight it as its under construction and many more things to add and still processing…!!! still if you have any openion you can give so i can make it better..!! (PLS NOTE this feature not working as intended as its under progress)
added different colour themes and also added a universal convert which is currently in progress…!!! stay tuned..!!
Add the universal convert it will auto detect the file uploaded and ask the format accordingly which we want to convert…!!! Still its Pending because the download function is not working so i have to fix it… STAY TUNED…!!!
added remove background and clean audio (noise remover) but its not working i am trying to fix it but i am not getting much time as i am working somewhere else so pls don’t mind the delay..!!
The open design and remove bg has some bugs so its currently not working i am trying to fix it…… and added a new feature rotate pdf and also universal convert only works with images/pdfs files not videos i will implement the video feature soon so stay tuned…!!!!
fixed all the errors and things which i could still many thing to go Remember that this is a all offine local tool some of the function is not working as intended (as some of the processing require large servers) { using server would ruin the project as it is made by keeping privacy in mind} still tried to fix…!!
Ships:
Built a simple PDF toolkit that runs entirely in the browser! It can merge PDFs, extract pages, convert them to JPG, add text, read text from images using OCR, and more. I used JavaScript with pdf-lib, PDF.js, and Tesseract.js. No backend or file uploads to a server needed.
I made PDFTools to do basic PDF tasks in one place. You can merge and split PDFs, convert them to images, add text, and use OCR to read text from images. The hardest part was getting the different tools to work properly in the browser. I’m proud that the files are processed on the user’s device instead of being uploaded to my server. I also added separate pages and emoji buttons to make it easier to use. You can try it using the project link!
this ship is not a major change but somebody said the most people think about something is the attention to detail/ the small thing and changes..!! still i tried my best to add the details i can add, everything i know that feels missing. some may recomend me that add some images but the actual problem is i want to make the site as light weight as i can so i used emojis instead of images..!! and many more things to add and still processing…!!! still if you have any openion you can give so i can make it better..!! (PLS NOTE this feature not working as intended as its under progress)
🚢 Shipped: PDFTools & OpenDesign (100% Client-Side Privacy Suite) — I just launched PDFTools, a completely offline, browser-based utility suite featuring the OpenDesign Studio for visual canvas editing and document signing, along with local PDF merging, splitting, OCR text extraction, structure compression, and client-side format conversion. The core philosophy here is zero-knowledge privacy: not a single byte ever leaves your machine, ensuring sensitive documents are never uploaded to remote third-party servers. While certain experimental features like large media transcoding and heavy AI background removal push browser memory limits and may not function as seamlessly as they would on dedicated cloud farms, relying strictly on client-side WebAssembly was an intentional, non-negotiable architectural decision to protect your data sovereignty and guarantee absolute privacy....
|
1792817502.1616526
|
1792903902.1616526
|
|
901
|
Kern by @AntKru | Stardance
|
AntKru
|
3
|
153.98
|
2739
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T16:46:53Z", "hours": 65.0, "multiplier": 19.56, "payout": 1269, "blessing": "neutral", "text": "I have released the next version of my own kernel! The biggest feature I added is multitasking. While it doesn’t look that special, it was actually very difficult to make my kernel switch between different tasks! Here are some notes on how to try the project: If you don’t want/can’t run it, you can look at the video in the readme. If you want to run it on macOS with UTM, you have to force a PS/2 controller: https://docs.getutm.app/settings-qemu/qemu/#force-ps2-controller", "repo": "https://gitlab.com/AntKru/kern", "demo": "https://gitlab.com/AntKru/kern/-/releases/"}, {"ship_num": 2, "ts": "2026-07-24T06:30:43Z", "hours": 48.0, "multiplier": 19.83, "payout": 961, "blessing": "neutral", "text": "I added a CLI the kernel, which was possible, because I finally have a keyboard driver! It only took so long, because it was actually difficult to write it: I thought I have to program the PIC, but it was already disabled so I had to learn the more complicated APIC. There is a demo video in the README if you don’t want to run the kernel. If you want to run it on macOS with UTM, you have to force a PS/2 controller: https://docs.getutm.app/settings-qemu/qemu/#force-ps2-controller", "repo": "https://gitlab.com/AntKru/kern", "demo": "https://gitlab.com/AntKru/kern/-/releases/"}, {"ship_num": 3, "ts": "2026-06-20T14:34:14Z", "hours": 30.0, "multiplier": 17.21, "payout": 509, "blessing": "neutral", "text": "I made an x86_64 kernel using the limine boot protocol. I don’t know what the most difficult thing was, as even most basic things are very complicated for me as a beginner in osdev. I still have to learn much and the kernel will be improved, but I thing it kind of works now. I have a video demo in the readme, if you don’t have qemu . When building, remember to clone the submodules ( git submodule init && git submodule update ). You need xorriso to build the ISO. Sorry for mixing meson and make , but in the README is a guide. Please use clang, gcc is very complicated.", "repo": "https://gitlab.com/AntKru/kern", "demo": "https://gitlab.com/AntKru/kern/-/releases/"}]...
|
[{"post_id": 79283, "ts": "202 [{"post_id": 79283, "ts": "2026-10-13T09:56:47Z", "hours": 4.6628, "text": "Memory management problems… It seems like there was a critical bug sleeping inside my memory manager. It appeared since I started using the PMM in my AHCI driver, but I think the problem is in the virtual memory manager. For this reason I am working currently on the memory manager instead of the AHCI driver. Roadmap As soon as I fix the MM, I will continue on the AHCI driver. It probably won’t be finished until the end of stardance."}, {"post_id": 76791, "ts": "2026-10-04T16:08:54Z", "hours": 2.6242, "text": "AHCI! (SATA) I am jumping a little bit fast form PCI to AHCI, but I think the PCI driver is as good as I need it right now, and if I learn that it isn’t, I will fix it. Anyway, I am starting to work on AHCI! This is really cool, as this allows me to communicate to storage devices! At the moment the kernel just lists connected devices, but that’s just the beginning! Roadmap The AHCI driver is in a very early stage, and it will take me a lot of time to finish, as AHCI is relatively complicated and the documentation isn’t written for beginners like me ;-)"}, {"post_id": 74920, "ts": "2026-09-28T16:27:51Z", "hours": 3.6928, "text": "PCI! I am starting to write a PCI driver, which opens a new world to me! As you can see, the kernel is already able to print some information on boot about connected PCI devices. I also added a function that can search for a specific PCI device by it’s class, which will help me to implement drivers for specific PCI devices. Roadmap The real reason I am implementing PCI is that I need it to find the AHCI controller. The AHCI controller can be used to access connected storage devices, which is my long-term goal."}, {"post_id": 71311, "ts": "2026-09-20T16:38:40Z", "hours": 1.3486, "text": "Release 0.3.0 I finished the release, including the new borders command! The visible bugs that I found are also fixed, please report them if you find some! Roadmap The kernel isn’t finished yet, I will continue to improve it and see how far I will get."}, {"post_id": 70750, "ts": "2026-09-19T18:15:14Z", "hours": 4.075, "text": "Final improvements before the next release Status bar I moved the status bar from the bottom to the top and removed the borders, in my opinion it looks better this way. Framebuffer borders I am already working on a new command which will make it possible to see the borders of the framebuffer in QEMU. This will be useful for debugging while keeping the UI simple. Bugs There are still some obvious bugs: My printf() implementation seems to break with invalid format strings and I have a bug in my memory manager which prevents me from merging the command showing the screen borders into main. Roadmap I will try to fix the bugs, but the features are now complete. I want to release the new version tomorrow."}, {"post_id": 68765, "ts": "2026-09-15T18:23:31Z", "hours": 7.8061, "text": "printf compatability I improved the printf() compatability, so that I can pad numbers with or 0 . This is very useful, for example I now can use it to display time and date properly. Roadmap I don’t know yet what’s the next thing to do, maybe I will ship soon."}, {"post_id": 63678, "ts": "2026-09-07T16:41:58Z", "hours": 4.1103, "text": "Status bar! I added a status bar which show the current time. It is very basic, but makes the OS look way more friendlier in my opinion. Sorry for the weird messages in the main window, I am currently debugging my printf implementation. Roadmap I still have a problem with printing dates: The year 2006 would be printed as 206 , because the RTC has seperate registers for year and century, so if century is 20 and year is 6 it prints 206."}, {"post_id": 58325, "ts": "2026-08-30T18:21:09Z", "hours": 2.6081, "text": "“Windows” I am making it possible to split the framebuffer into multiple views. This should make it more easy to have a more advanced UI than a CLI already inside the kernel. Hopefully there will be user processes at some point, but I want to have a nice looking OS before that. Roadmap I still have to fix some things (as visible on the screenshot). After that, I can try to make use of it and add a status bar or a separate command window."}, {"post_id": 55470, "ts": "2026-08-27T10:27:14Z", "hours": 4.5317, "text": "RTC The kernel can now read the current time from the Computer’s RTC! At the moment, you can’t select the time zone, so the time is probably in UTC, depending on how the computer is configured. Roadmap I am planning to improve the use experience, for example by using multiple “windows”, to maybe even have a status bar."}, {"post_id": 52423, "ts": "2026-08-22T15:29:50Z", "hours": 4.2389, "text": "GCC support I added GCC support, which should (hopefully) make debugging easier for me. I can’t show it really on the screenshot, trust me, it is compiled with gcc! Roadmap I have still bugs in my multitasking system. Currently I get a page fault when compiling with optimization > -O2 with clang, the next step is to test it with GCC."}, {"post_id": 47914, "ts": "2026-08-16T05:50:20Z", "hours": 2.6892, "text": "Mutexes I implemented a simple mutex (which isn’t perfect yet, but it works). As visible on the screenshot, I used it to make it impossible for the test tasks to print at the same time. One problem with it is that it currently runs hlt after releasing a mutex so that a different task has a chance to acquire it, which doesn’t seem like the best solution to me. Roadmap I am making the terminal position atomic, so that I don’t need mutexes for output, which I can not use in interrupt handlers"}, {"post_id": 46418, "ts": "2026-08-13T16:41:17Z", "hours": 5.8897, "text": "Multitasking! I fixed the last bug (that I could find) and multitasking works now! On the screenshot you can see two tasks trying to print the numbers 0-19 at the same time. The CLI even waits until the tasks are finished! Road map The output is still a little bit broken, so I want to implement output buffering and mutexes, so that multiple threads can’t print at the same time."}, {"post_id": 44770, "ts": "2026-08-10T19:26:17Z", "hours": 6.2656, "text": "Multitasking… I am still working on multitasking, but I am stuck currently. I am trying to modify the stack frame so that asm_switch_task is called after iretq , but it doesn’t work. As you can see on the screenshot, I get a page fault as soon as it tries to switch tasks (in the debugging process I had it switch 2-3 times before it crashes, which is not really better) Road map My highest priority is to get task switching to work consistently. After that, I will see what I can polish."}, {"post_id": 43900, "ts": "2026-08-09T10:50:40Z", "hours": 2.4128, "text": "SSE register state switching! The kernel will now switch the SSE register state lazily, but I still have two problems: The Part for the registers in the TCB must be 16 byte aligned, which it currently not guaranteed The interrupt handlers are not allowed to use SSE instructions, but I have no way of verifying this Road map I think it is time to write a version of malloc() which can guarantee a specified alignment. After that, I can try to actually switch tasks automatically with a simple scheduler! I will probably use the PIT interrupt to switch to the next task in a list."}, {"post_id": 42570, "ts": "2026-08-07T11:56:52Z", "hours": 4.5606, "text": "It probably doesn’t sound special, but it is as important as everything else: SSE support SSE is an extension of the CPU which has 16 128-bit registers, but is rarely used. This means, that saving all of these registers every time a task switch occurs would cost some performance. For this reason, the CPU has a bit that can be set to indicate that a task switch occurred. In most cases, nothing happens and the registers are kept in their original state. But if a task needs to use SSE instructions, the CPU generates an interrupt, which manually saves the SSE registers. This is what I am working on currently. Custom ISR wrapper All interrupt handlers use now my custom wrappers, which made possible that I can work on SSE support."}, {"post_id": 40940, "ts": "2026-08-04T19:52:16Z", "hours": 5.0347, "text": "Array optimization (Screenshot 1) I now actually optimized the dynamic array type, which means that it allocates memory in bigger chunks instead of every time an element is added / removed. In the process I added some debug logging, so typing is now very difficult if you don’t know how it works with log level LOG_DEBUG . Custom ISR wrapper (Screenshot 2) I finally decided to implement my own wrapper for ISRs instead of relying on __attribute__((interrupt)) . This should allow me to use floating point math with the FPU in the future. Also, I can now read more registers on interrupt (screenshot). Road map I am currently working on making all ISRs compatible with my wrapper. Then I will continue trying to get multitasking to work."}, {"post_id": 38897, "ts": "2026-08-01T14:03:43Z", "hours": 6.4275, "text": "Multitasking (Screenshot 1) I decided to try to implement multitasking! The kernel can now switch tasks, but only one time. This is the first step in direction of real multitasking, but I still have much to do. It is interesting to see, How I realize how bad my implementations I did earlier are, because I don’t fully understand them. But now I can improve them! Dynamic arrays (Screenshot 2) I made a quick implementation of dynamic arrays for the keyboard driver, but as I realized that I need them to store a list of tasks, I decided to implement one optimized implementation I can use everywhere. I have implemented a very simple version and use it in the keyboard driver, but it isn’t optimized yet. In fact, it’s even worse than the one I had earlier in the keyboard driver, because every modification now requires a reallocation. Road map I am going to optimize dynamic arrays, and then continue with multitasking."}, {"post_id": 36558, "ts": "2026-07-28T19:08:32Z", "hours": 2.8569, "text": "PIT I quickly wrote a simple PIT (Programmable Interval Timer) driver, so that I have a basic sleep function. It isn’t really useful at the moment and not thread safe, but as it was very simple I thought why not? APIC I realized that MADT I/O APIC overrides also override the flags of entries, so I am using these now unless it’s overridden by the user. Road map As I have now a simple keyboard driver, I want to work on something new. Some things I am considering: Multitasking Filesystems ELF loading PCI USB All of this topics are completely new to me, so I will pick the one that looks the most simple and probably fail anyway."}, {"post_id": 33535, "ts": "2026-07-23T15:58:35Z", "hours": 2.3419, "text": "I am shipping soon! Some little improvements in messages I improved some messages, so that the kernel looks more polished to new users. v0.2.0 I released a new version, which is what I am shipping soon (if nothing goes wrong). It includes an interactive CLI, which was made possible with the new keyboard driver. I improved the scrolling performance a lot, which I personally really enjoy! Finally, I fixed a bug when printing numbers, so the printed memory map now has (mostly) correct addresses."}, {"post_id": 32511, "ts": "2026-07-21T18:56:41Z", "hours": 3.1614, "text": "The kernel is now interactive! Demo CLI I added a demo CLI (you can see it on the screenshot) where you can exit properly, run tests or view the old demo! Keyboard driver I had to fix some bugs with the keyboard driver, but now I think it works okay enough that the CLI is stable (previously, it kept parts from the old buffer when reading it again) Road map I want to add more features to the CLI, such as setting the log level. As you can see on the screenshot, the debug output disturbs the CLI."}, {"post_id": 31826, "ts": "2026-07-20T14:47:46Z", "hours": 5.0328, "text": "I FINALLY get interrupts from the keyboard! PS/2 Keyboard driver The problem was, that I mistook the IRQ number for the interrupt vector when calling my own function! Now I can start expanding my keyboard driver. Currently, it already prints the pressed keys to the screen, as you can see on the screen shot. Performance improvements when scrolling After I finished the interrupt stuff, I can focus on improving the TTY in other areas, like the performance. I am using now memset() and memcpy() functions when scrolling the frame buffer, which itself is not an improvement: I optimized the two functions to use copy 8-byte blocks ad uint64_t instead of each byte individually, which made a significant difference. Scrolling with KVM acceleration is now almost instant on my PC, and without it is as fast as it was before with acceleration. Road map I want to improve the TTY with things like buffering, which should improve the performance even more. When I have a solid TTY, I can rework the demo and ship again."}, {"post_id": 30816, "ts": "2026-07-18T19:00:05Z", "hours": 6.3653, "text": "I am still far away from getting interrupts from the keyboard, but I am still learning much and making progress on other parts of the kernel! PMM I added support for mapping pages manually, which means that I can program now the APICs! While debugging this, I also improved my Page Fault handler, which you can see on the screenshot. APIC driver The APIC driver should now be able to configure IRQs on the I/O APIC to get delivered to the local APIC, but I can’t test it as I still don’t know why I can’t get interrupts from the keyboard :-( Road Map I am still working on getting interrupts from the keyboard, which is my main goal before the next ship. I currently suspect that my PS/2 driver is broken."}, {"post_id": 29069, "ts": "2026-07-15T18:32:01Z", "hours": 7.5669, "text": "I prefer this devlog format, so I will stick to it. I/O APIC As I explained earlier, I need to configure the APIC to get interrupts. I think I only need the I/O APIC and not the local APIC, if I understand the limine documentation correctly. But when trying to access it’s registers, I got a page fault. It seems like I need to manually map the registers to virtual memory, which brings me to… Physical Memory Manager I need to do what I already feared when starting to write the PMM, manually editing page tables. I am working on a function which will map pages (Including the I/O APIC registers) to virtual addresses. For this, I need to walk the complete paging structure: PML4 (from cr3) -> PDPT -> PD -> PT I can already parse it until I have the PT’s address, but when accessing the PT I get a page fault, as you can see on the screenshot. Road map I just wanted to post this update so that the next devlog is not too long. I will continue to work on the PMM, until I can access the I/O APIC’s registers."}, {"post_id": 24628, "ts": "2026-07-08T10:52:11Z", "hours": 8.3475, "text": "I did not post for some time, so this devlog will be relatively long. PS/2 driver (Screenshot 1) I wanted to get the PIC to work, but as I had no idea why it didn’t work I thought that the PS/2 Controller might not be in a functioning state. So, I wrote a PS/2 driver which initializes the Controller, and also detects connected devices! PIC -> APIC After that, I finally found out that limine already sets up the APIC, which means that the PIC is no longer functional. So I decided that my next big goal is to learn how ACPI and APIC work… ACPI (Screenshot 2) As you can see on the screenshots, I started working on an ACPI driver, which is already able to find tables like the MADT, which I need to find the APICs UEFI This does not have anything to do with the progress of my project, but I learned how to use UEFI in QEMU, so that I can debug my ACPI driver better. Road map I will have to learn now how APICs work, so that I can get interrupts from the keyboard. Then, I can improve the keyboard driver, which should make the kernel way more fun to use!"}, {"post_id": 20746, "ts": "2026-07-02T13:20:11Z", "hours": 6.0672, "text": "I have finished implementing the memory manager! free() will now call pmm_free() to free unused pages. At the moment it does not make any difference, but if I want to extend the PMM it will have saved me the work. Also, I split the demo from the main function so that it is more maintainable. Log messages with the log level DEBUG will now only appear in debug builds. This made the output much more readable, as you can see in the screenshots."}, {"post_id": 19208, "ts": "2026-06-30T14:00:38Z", "hours": 9.6128, "text": "I have added a simple memory manager to my kernel! It was only possible with the help from kmos , a project I found while voting. I didn’t know how to start writing a physical memory manager, but in that kernel I found that I have to use the limine HHDM request to have simple access to physical addresses. Then I could implement the rest completely myself. The last thing left to do until I’m satisfied with my memory manager, is to free pages in the PMM after using free()"}, {"post_id": 12539, "ts": "2026-06-20T14:12:50Z", "hours": 0.8414, "text": "Now I am actually shipping! I had a bug that occured only when compiling with optimization level 2 or higher (which I used in the release CI). As I am working now on a Debian machine, I made it also compile on Debian stable by not requiring a new objcopy version. On the screenshot you can see the bug."}, {"post_id": 11482, "ts": "2026-06-18T19:17:02Z", "hours": 4.0292, "text": "I will ship the kernel now for the first time! I added a libk (like a libc but for the kernel) and implemented some cool functions like printf(), which I could use for cool error messages with hex numbers like the one on the screenshot."}, {"post_id": 9395, "ts": "2026-06-15T18:55:28Z", "hours": 2.4939, "text": "I sadly don’t have much to say, because I did make almost no progress. I am trying to use the PIC to get interrupts from the keyboard, but it doesn’t work for some reason. Maybe I will try to use APIC instead, but it’s more complicated."}, {"post_id": 8627, "ts": "2026-06-14T10:44:21Z", "hours": 2.2619, "text": "I finally figured out how I can integrate the external library! Now I can skip instructions when an interrupt is executed and continue execution"}, {"post_id": 7621, "ts": "2026-06-12T19:00:11Z", "hours": 1.0647, "text": "I just wanted to implement an interrupt handler specific to divide error, but it turned out to be way more difficult than I thought! To continue execution after the interrupt, I have to manually increment the instruction pointer manually. But to know by which amount, I need to now the size of the whole instruction. To find it I wanted to use a library called Zydis, but I could not get it to compile, because clang generates calls to memset() and memcpy() . As I can not link with the standard library, I will have to find a solution tomorrow."}, {"post_id": 5837, "ts": "2026-06-09T19:37:29Z", "hours": 3.1153, "text": "I added a demo to show the features of my kernel. The kernel is almost ready for the first ship!"}, {"post_id": 4373, "ts": "2026-06-07T18:00:51Z", "hours": 3.2469, "text": "After giving up on the memory manager, I added logging and very basic interrupt handling. I will ship the project when I have a demo of all the features and published ISOs."}, {"post_id": 3530, "ts": "2026-06-06T14:47:32Z", "hours": 2.2575, "text": "As I have now a very basic way to interact with the kernel, I will try to move on to more complex topics. At the moment I try to understand how memory management exactly works (specifically, how to write a physical memory manager), but it’s difficult to find information about it. Until now, I have requested a memory map from limine and can display it in a table."}, {"post_id": 3364, "ts": "2026-06-06T07:57:08Z", "hours": 1.7286, "text": "I implemented enter key press detection before doing anything else, so that I can interact somehow with the kernel. I did it with IO Ports instead of interrupts for now (because I don’t know how to set up interrupts), which means it only works with PS/2 Keyboards. Luckily, qemu shows the keyboard as a PS/2 Keyboard."}, {"post_id": 2308, "ts": "2026-06-04T18:38:28Z", "hours": 2.5331, "text": "I have added a normal font which makes things way simpler. I also improved the general tty: scrolling, new lines and tabs work now!"}, {"post_id": 1458, "ts": "2026-06-03T14:42:11Z", "hours": 1.7617, "text": "I spend so much time to fix a stupid bug (taking the address of a pointer instead of the address stored in the pointer), but know I can display characters from my ugly psf2 font! At least I learned more about gdb."}, {"post_id": 957, "ts": "2026-06-02T18:43:29Z", "hours": 3.0825, "text": "I implemented a set_pixel function, so that I can set specific pixels on the framebuffer. The next step will probably be to display text, maybe with a font made with psfedit, my project for flavortown. I also published my code on GitLab, which means I will try to build ISOs with gitlab CI at some point."}, {"post_id": 294, "ts": "2026-06-01T15:23:58Z", "hours": 1.1658, "text": "I have started to work on my kernel! I just set up my project structure but it does not work as you can see on the screenshot. I will look at it tomorrow. I have already tried to write a kernel earlier this week, but it was an i686 kernel with multiboot 2. Also, I had to copy much code from the limine template, but I will go beyond that when the kernel runs. This means, that I have a weird mix of makefile and meson, as the example uses make but I prefer meson. As I do not want to set up long mode myself, my new kernel uses limine instead of multiboot. My current plan is to get it to run and then publish the source code. Later, I might try to remove make completely and only rely on meson for building the iso."}]...
|
Title: Kern by @AntKru | Stardance
Devlogs:
I hav Title: Kern by @AntKru | Stardance
Devlogs:
I have started to work on my kernel! I just set up my project structure but it does not work as you can see on the screenshot. I will look at it tomorrow. I have already tried to write a kernel earlier this week, but it was an i686 kernel with multiboot 2. Also, I had to copy much code from the limine template, but I will go beyond that when the kernel runs. This means, that I have a weird mix of makefile and meson, as the example uses make but I prefer meson. As I do not want to set up long mode myself, my new kernel uses limine instead of multiboot. My current plan is to get it to run and then publish the source code. Later, I might try to remove make completely and only rely on meson for building the iso.
I implemented a set_pixel function, so that I can set specific pixels on the framebuffer. The next step will probably be to display text, maybe with a font made with psfedit, my project for flavortown. I also published my code on GitLab, which means I will try to build ISOs with gitlab CI at some point.
I spend so much time to fix a stupid bug (taking the address of a pointer instead of the address stored in the pointer), but know I can display characters from my ugly psf2 font! At least I learned more about gdb.
I have added a normal font which makes things way simpler. I also improved the general tty: scrolling, new lines and tabs work now!
I implemented enter key press detection before doing anything else, so that I can interact somehow with the kernel. I did it with IO Ports instead of interrupts for now (because I don’t know how to set up interrupts), which means it only works with PS/2 Keyboards. Luckily, qemu shows the keyboard as a PS/2 Keyboard.
As I have now a very basic way to interact with the kernel, I will try to move on to more complex topics. At the moment I try to understand how memory management exactly works (specifically, how to write a physical memory manager), but it’s difficult to find information about it. Until now, I have requested a memory map from limine and can display it in a table.
After giving up on the memory manager, I added logging and very basic interrupt handling. I will ship the project when I have a demo of all the features and published ISOs.
I added a demo to show the features of my kernel. The kernel is almost ready for the first ship!
I just wanted to implement an interrupt handler specific to divide error, but it turned out to be way more difficult than I thought! To continue execution after the interrupt, I have to manually increment the instruction pointer manually. But to know by which amount, I need to now the size of the whole instruction. To find it I wanted to use a library called Zydis, but I could not get it to compile, because clang generates calls to memset() and memcpy() . As I can not link with the standard library, I will have to find a solution tomorrow.
I finally figured out how I can integrate the external library! Now I can skip instructions when an interrupt is executed and continue execution
I sadly don’t have much to say, because I did make almost no progress. I am trying to use the PIC to get interrupts from the keyboard, but it doesn’t work for some reason. Maybe I will try to use APIC instead, but it’s more complicated.
I will ship the kernel now for the first time! I added a libk (like a libc but for the kernel) and implemented some cool functions like printf(), which I could use for cool error messages with hex numbers like the one on the screenshot.
Now I am actually shipping! I had a bug that occured only when compiling with optimization level 2 or higher (which I used in the release CI). As I am working now on a Debian machine, I made it also compile on Debian stable by not requiring a new objcopy version. On the screenshot you can see the bug.
I have added a simple memory manager to my kernel! It was only possible with the help from kmos , a project I found while voting. I didn’t know how to start writing a physical memory manager, but in that kernel I found that I have to use the limine HHDM request to have simple access to physical addresses. Then I could implement the rest completely myself. The last thing left to do until I’m satisfied with my memory manager, is to free pages in the PMM after using free()
I have finished implementing the memory manager! free() will now call pmm_free() to free unused pages. At the moment it does not make any difference, but if I want to extend the PMM it will have saved me the work. Also, I split the demo from the main function so that it is more maintainable. Log messages with the log level DEBUG will now only appear in debug builds. This made the output much more readable, as you can see in the screenshots.
I did not post for some time, so this devlog will be relatively long. PS/2 driver (Screenshot 1) I wanted to get the PIC to work, but as I had no idea why it didn’t work I thought that the PS/2 Controller might not be in a functioning state. So, I wrote a PS/2 driver which initializes the Controller, and also detects connected devices! PIC -> APIC After that, I finally found out that limine already sets up the APIC, which means that the PIC is no longer functional. So I decided that my next big goal is to learn how ACPI and APIC work… ACPI (Screenshot 2) As you can see on the screenshots, I started working on an ACPI driver, which is already able to find tables like the MADT, which I need to find the APICs UEFI This does not have anything to do with the progress of my project, but I learned how to use UEFI in QEMU, so that I can debug my ACPI driver better. Road map I will have to learn now how APICs work, so that I can get interrupts from the keyboard. Then, I can improve the keyboard driver, which should make the kernel way more fun to use!
I prefer this devlog format, so I will stick to it. I/O APIC As I explained earlier, I need to configure the APIC to get interrupts. I think I only need the I/O APIC and not the local APIC, if I understand the limine documentation correctly. But when trying to access it’s registers, I got a page fault. It seems like I need to manually map the registers to virtual memory, which brings me to… Physical Memory Manager I need to do what I already feared when starting to write the PMM, manually editing page tables. I am working on a function which will map pages (Including the I/O APIC registers) to virtual addresses. For this, I need to walk the complete paging structure: PML4 (from cr3) -> PDPT -> PD -> PT I can already parse it until I have the PT’s address, but when accessing the PT I get a page fault, as you can see on the screenshot. Road map I just wanted to post this update so that the next devlog is not too long. I will continue to work on the PMM, until I can access the I/O APIC’s registers.
I am still far away from getting interrupts from the keyboard, but I am still learning much and making progress on other parts of the kernel! PMM I added support for mapping pages manually, which means that I can program now the APICs! While debugging this, I also improved my Page Fault handler, which you can see on the screenshot. APIC driver The APIC driver should now be able to configure IRQs on the I/O APIC to get delivered to the local APIC, but I can’t test it as I still don’t know why I can’t get interrupts from the keyboard :-( Road Map I am still working on getting interrupts from the keyboard, which is my main goal before the next ship. I currently suspect that my PS/2 driver is broken.
I FINALLY get interrupts from the keyboard! PS/2 Keyboard driver The problem was, that I mistook the IRQ number for the interrupt vector when calling my own function! Now I can start expanding my keyboard driver. Currently, it already prints the pressed keys to the screen, as you can see on the screen shot. Performance improvements when scrolling After I finished the interrupt stuff, I can focus on improving the TTY in other areas, like the performance. I am using now memset() and memcpy() functions when scrolling the frame buffer, which itself is not an improvement: I optimized the two functions to use copy 8-byte blocks ad uint64_t instead of each byte individually, which made a significant difference. Scrolling with KVM acceleration is now almost instant on my PC, and without it is as fast as it was before with acceleration. Road map I want to improve the TTY with things like buffering, which should improve the performance even more. When I have a solid TTY, I can rework the demo and ship again.
The kernel is now interactive! Demo CLI I added a demo CLI (you can see it on the screenshot) where you can exit properly, run tests or view the old demo! Keyboard driver I had to fix some bugs with the keyboard driver, but now I think it works okay enough that the CLI is stable (previously, it kept parts from the old buffer when reading it again) Road map I want to add more features to the CLI, such as setting the log level. As you can see on the screenshot, the debug output disturbs the CLI.
I am shipping soon! Some little improvements in messages I improved some messages, so that the kernel looks more polished to new users. v0.2.0 I released a new version, which is what I am shipping soon (if nothing goes wrong). It includes an interactive CLI, which was made possible with the new keyboard driver. I improved the scrolling performance a lot, which I personally really enjoy! Finally, I fixed a bug when printing numbers, so the printed memory map now has (mostly) correct addresses.
PIT I quickly wrote a simple PIT (Programmable Interval Timer) driver, so that I have a basic sleep function. It isn’t really useful at the moment and not thread safe, but as it was very simple I thought why not? APIC I realized that MADT I/O APIC overrides also override the flags of entries, so I am using these now unless it’s overridden by the user. Road map As I have now a simple keyboard driver, I want to work on something new. Some things I am considering: Multitasking Filesystems ELF loading PCI USB All of this topics are completely new to me, so I will pick the one that looks the most simple and probably fail anyway.
Multitasking (Screenshot 1) I decided to try to implement multitasking! The kernel can now switch tasks, but only one time. This is the first step in direction of real multitasking, but I still have much to do. It is interesting to see, How I realize how bad my implementations I did earlier are, because I don’t fully understand them. But now I can improve them! Dynamic arrays (Screenshot 2) I made a quick implementation of dynamic arrays for the keyboard driver, but as I realized that I need them to store a list of tasks, I decided to implement one optimized implementation I can use everywhere. I have implemented a very simple version and use it in the keyboard driver, but it isn’t optimized yet. In fact, it’s even worse than the one I had earlier in the keyboard driver, because every modification now requires a reallocation. Road map I am going to optimize dynamic arrays, and then continue with multitasking.
Array optimization (Screenshot 1) I now actually optimized the dynamic array type, which means that it allocates memory in bigger chunks instead of every time an element is added / removed. In the process I added some debug logging, so typing is now very difficult if you don’t know how it works with log level LOG_DEBUG . Custom ISR wrapper (Screenshot 2) I finally decided to implement my own wrapper for ISRs instead of relying on __attribute__((interrupt)) . This should allow me to use floating point math with the FPU in the future. Also, I can now read more registers on interrupt (screenshot). Road map I am currently working on making all ISRs compatible with my wrapper. Then I will continue trying to get multitasking to work.
It probably doesn’t sound special, but it is as important as everything else: SSE support SSE is an extension of the CPU which has 16 128-bit registers, but is rarely used. This means, that saving all of these registers every time a task switch occurs would cost some performance. For this reason, the CPU has a bit that can be set to indicate that a task switch occurred. In most cases, nothing happens and the registers are kept in their original state. But if a task needs to use SSE instructions, the CPU generates an interrupt, which manually saves the SSE registers. This is what I am working on currently. Custom ISR wrapper All interrupt handlers use now my custom wrappers, which made possible that I can work on SSE support.
SSE register state switching! The kernel will now switch the SSE register state lazily, but I still have two problems: The Part for the registers in the TCB must be 16 byte aligned, which it currently not guaranteed The interrupt handlers are not allowed to use SSE instructions, but I have no way of verifying this Road map I think it is time to write a version of malloc() which can guarantee a specified alignment. After that, I can try to actually switch tasks automatically with a simple scheduler! I will probably use the PIT interrupt to switch to the next task in a list.
Multitasking… I am still working on multitasking, but I am stuck currently. I am trying to modify the stack frame so that asm_switch_task is called after iretq , but it doesn’t work. As you can see on the screenshot, I get a page fault as soon as it tries to switch tasks (in the debugging process I had it switch 2-3 times before it crashes, which is not really better) Road map My highest priority is to get task switching to work consistently. After that, I will see what I can polish.
Multitasking! I fixed the last bug (that I could find) and multitasking works now! On the screenshot you can see two tasks trying to print the numbers 0-19 at the same time. The CLI even waits until the tasks are finished! Road map The output is still a little bit broken, so I want to implement output buffering and mutexes, so that multiple threads can’t print at the same time.
Mutexes I implemented a simple mutex (which isn’t perfect yet, but it works). As visible on the screenshot, I used it to make it impossible for the test tasks to print at the same time. One problem with it is that it currently runs hlt after releasing a mutex so that a different task has a chance to acquire it, which doesn’t seem like the best solution to me. Roadmap I am making the terminal position atomic, so that I don’t need mutexes for output, which I can not use in interrupt handlers
GCC support I added GCC support, which should (hopefully) make debugging easier for me. I can’t show it really on the screenshot, trust me, it is compiled with gcc! Roadmap I have still bugs in my multitasking system. Currently I get a page fault when compiling with optimization > -O2 with clang, the next step is to test it with GCC.
RTC The kernel can now read the current time from the Computer’s RTC! At the moment, you can’t select the time zone, so the time is probably in UTC, depending on how the computer is configured. Roadmap I am planning to improve the use experience, for example by using multiple “windows”, to maybe even have a status bar.
“Windows” I am making it possible to split the framebuffer into multiple views. This should make it more easy to have a more advanced UI than a CLI already inside the kernel. Hopefully there will be user processes at some point, but I want to have a nice looking OS before that. Roadmap I still have to fix some things (as visible on the screenshot). After that, I can try to make use of it and add a status bar or a separate command window.
Status bar! I added a status bar which show the current time. It is very basic, but makes the OS look way more friendlier in my opinion. Sorry for the weird messages in the main window, I am currently debugging my printf implementation. Roadmap I still have a problem with printing dates: The year 2006 would be printed as 206 , because the RTC has seperate registers for year and century, so if century is 20 and year is 6 it prints 206.
printf compatability I improved the printf() compatability, so that I can pad numbers with or 0 . This is very useful, for example I now can use it to display time and date properly. Roadmap I don’t know yet what’s the next thing to do, maybe I will ship soon.
Final improvements before the next release Status bar I moved the status bar from the bottom to the top and removed the borders, in my opinion it looks better this way. Framebuffer borders I am already working on a new command which will make it possible to see the borders of the framebuffer in QEMU. This will be useful for debugging while keeping the UI simple. Bugs There are still some obvious bugs: My printf() implementation seems to break with invalid format strings and I have a bug in my memory manager which prevents me from merging the command showing the screen borders into main. Roadmap I will try to fix the bugs, but the features are now complete. I want to release the new version tomorrow.
Release 0.3.0 I finished the release, including the new borders command! The visible bugs that I found are also fixed, please report them if you find some! Roadmap The kernel isn’t finished yet, I will continue to improve it and see how far I will get.
PCI! I am starting to write a PCI driver, which opens a new world to me! As you can see, the kernel is already able to print some information on boot about connected PCI devices. I also added a function that can search for a specific PCI device by it’s class, which will help me to implement drivers for specific PCI devices. Roadmap The real reason I am implementing PCI is that I need it to find the AHCI controller. The AHCI controller can be used to access connected storage devices, which is my long-term goal.
AHCI! (SATA) I am jumping a little bit fast form PCI to AHCI, but I think the PCI driver is as good as I need it right now, and if I learn that it isn’t, I will fix it. Anyway, I am starting to work on AHCI! This is really cool, as this allows me to communicate to storage devices! At the moment the kernel just lists connected devices, but that’s just the beginning! Roadmap The AHCI driver is in a very early stage, and it will take me a lot of time to finish, as AHCI is relatively complicated and the documentation isn’t written for beginners like me ;-)
Memory management problems… It seems like there was a critical bug sleeping inside my memory manager. It appeared since I started using the PMM in my AHCI driver, but I think the problem is in the virtual memory manager. For this reason I am working currently on the memory manager instead of the AHCI driver. Roadmap As soon as I fix the MM, I will continue on the AHCI driver. It probably won’t be finished until the end of stardance.
Ships:
I made an x86_64 kernel using the limine boot protocol. I don’t know what the most difficult thing was, as even most basic things are very complicated for me as a beginner in osdev. I still have to learn much and the kernel will be improved, but I thing it kind of works now. I have a video demo in the readme, if you don’t have qemu . When building, remember to clone the submodules ( git submodule init && git submodule update ). You need xorriso to build the ISO. Sorry for mixing meson and make , but in the README is a guide. Please use clang, gcc is very complicated.
I added a CLI the kernel, which was possible, because I finally have a keyboard driver! It only took so long, because it was actually difficult to write it: I thought I have to program the PIC, but it was already disabled so I had to learn the more complicated APIC. There is a demo video in the README if you don’t want to run the kernel. If you want to run it on macOS with UTM, you have to force a PS/2 controller: https://docs.getutm.app/settings-qemu/qemu/#force-ps2-controller
I have released the next version of my own kernel! The biggest feature I added is multitasking. While it doesn’t look that special, it was actually very difficult to make my kernel switch between different tasks! Here are some notes on how to try the project: If you don’t want/can’t run it, you can look at the video in the readme. If you want to run it on macOS with UTM, you have to force a PS/2 controller: https://docs.getutm.app/settings-qemu/qemu/#force-ps2-controller...
|
1792842658.7836795
|
1792929058.7836795
|
|
927
|
Squirrel by @Koei | Stardance
|
Koei
|
3
|
104.0
|
1915
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T13:34:37Z", "hours": 29.0, "multiplier": 17.36, "payout": 598, "blessing": "neutral", "text": "v1.0.0 Squirrel is a clipboard manager for Windows and X11 Linux that is meant to be simple and intuitive. This major release overhauls the data storage schema to be more efficient, faster, and reliable. There are significant performance improvements. This release also adds configurability to Squirrel, allowing basic but much needed customization, and polishes up the overall app. Check the README for more information.", "repo": "https://github.com/Koei32/squirrel", "demo": "https://github.com/Koei32/squirrel/releases/latest"}, {"ship_num": 2, "ts": "2026-07-26T14:30:06Z", "hours": 30.0, "multiplier": 13.88, "payout": 499, "blessing": "neutral", "text": "v0.3.0 Squirrel is a clipboard manager that is meant to be simple and intuitive. 2 new features in this version, namely pinning and image support. There are performance improvements as well as slight visual tweaks. Read the README for more info.", "repo": "https://github.com/Koei32/squirrel", "demo": "https://github.com/Koei32/squirrel/releases/latest"}, {"ship_num": 3, "ts": "2026-06-23T16:48:48Z", "hours": 45.0, "multiplier": 18.23, "payout": 818, "blessing": "neutral", "text": "v0.1.0 Squirrel is a clipboard manager that is meant to be simple and intuitive. It remembers all the text you copy allowing you to paste whatever into wherever. You can also quickly search through your history. Squirrel is meant to be cross-platform, but for this release, Linux support on Wayland is very iffy (X11 is fine for the most part). I would highly recommend using Windows for testing this ship, sorry for the inconvenience. Expect potentially better support next ship.", "repo": "https://github.com/Koei32/squirrel", "demo": "https://github.com/Koei32/squirrel/releases/latest"}]...
|
[{"post_id": 63114, "ts": "202 [{"post_id": 63114, "ts": "2026-09-06T18:50:53Z", "hours": 4.0806, "text": "v1.0.0 It’s official. Squirrel is now v1. devlog time is adding logging, updating readme, fixing some small tidbits and polishing up some areas of the app. Squirrel now prints pretty logs to console when running in development mode and writes logs to a file if running in release. Project status i realistically can not get a GUI settings panel done due to me needing to divert my attention to more important life stuff. this right here is probably going to be the extent of work done on Squirrel in stardance. i definitely do plan on working on this in the long term. for example, im not entirely happy and satisfied with the current UI, and global hotkey still does not work on wayland. but right now, more pressing issues are at hand and i cannot give it my all on this project. that said, i do believe that Squirrel is in a very usable 1.0 state, which was my goal. i might push minor updates if the reviews call for fixes/improvements, but definitely no major features. thanks for reading if you made it here."}, {"post_id": 54719, "ts": "2026-08-25T19:56:34Z", "hours": 3.9647, "text": "History persistence configuration now works. setting it to false means history is not retained between sessions. comes with true as default. pinned entries always persist. attachment shows the behavior when persistence is off. Implementation i ended up deciding not to do the in memory database method for this since it was a bit too much added complexity which could be avoided by just adding an additional is_persistent column to the db. im not the happiest about how i’ve implemented this right now but im willing to take that hit right now if it means i dont have to deal with databases. Next all of the config options are now implemented. we are very close to v1.0. expect progress to be rather slow from here on out. i’ve had to divert my attention towards other things and haven’t been able to spend a lot of time working on my projects. maybe i will work on a settings panel. depends on how much work it requires. it’s a maybe. i may just ship it as it stands right now."}, {"post_id": 51853, "ts": "2026-08-21T18:35:09Z", "hours": 0.8633, "text": "Item expiry and pin-preservation expired items are now automatically deleted on program startup. an entry is considered expired when the current time is more than its expires_at value. when pinned, the expires_at attribute is nulled, meaning this entry will never expire. the “Clear all” shortcut Ctrl+Shift+Del now respects pinned entries. it clears everything but leaves pinned entries untouched. Next the ephemeral db shenanigans. also, i have decided that Squirrel needs a settings panel in the frontend for easier config modification. that may or may not happen but it is tempting to do it."}, {"post_id": 51243, "ts": "2026-08-20T19:36:27Z", "hours": 5.9658, "text": "(i genuinely have no idea what to show in the devlog attachment, nothing’s changed visually. so have this stupid ass screenshot.) Massive refactor, breaking changes now that i’ve given myself the liberty to rethink and redesign Squirrel’s data models and storage in a breaking fashion for v1, we have managed to make a good amount of improvements across the board. database schema has been modified to better suit current needs and make it possible to implement the features I desire for v1. it has been a very satisfying refactor. What’s new: use UNIX microsecond timestamp for event ids instead of relying on sqlite autoincrement. this allows us to immediately send a captured event to the frontend without having to await a db write to obtain the event id. this also eliminates the timestamp column for events since the id is also the timestamp. a dedicated BLOB column for image entries to store raw image bytes instead of b64 encoded strings. this makes images weigh about ~33% lighter. decent perf boost. new expires_at column to store when an entry expires. pinned entries have an expiry of NULL . provides the base to actually implement expiring entries. get rid of ClipboardEventNotice since we no longer do the notify frontend -> write to db -> send data to frontend dance. it is now simply send whole event to frontend -> write to db . we enjoy simplifications. (!) as it stands now, old data (if it exists) would immediately be wiped when launching Squirrel v1. i could write some migration code but we’ll see. maybe clipboard data isn’t important enough to bother with migration. Next: actually implement entry expiration: should be trivial, just delete expired entries on launch. ephemeral/persistent toggle: this one is a bit tricky, and will involve some in memory database shenanigans. more details in the devlog when i implement this."}, {"post_id": 47102, "ts": "2026-08-14T19:04:13Z", "hours": 0.8614, "text": "Ignore programs you can specify programs in which Squirrel should not listen to clipboard events. this is useful when you’re working in a program wherein you need to use copy and paste a bunch. ignoring that program would keep your Squirrel history clean. also useful to ignore a program that you regularly copy secrets from. example of notepad being ignored:"}, {"post_id": 46488, "ts": "2026-08-13T18:43:57Z", "hours": 3.6642, "text": "devlog attachment obligation: here is me pasting some files i copied a couple minutes ago after i copied stuff on top of that. that out of the way, devlog. Several things app theme is now configurable from config, so you are not stuck with the system theme if you want to change it. cleanup across the backend; comments, TODOs, error handling, and stuff of the sort. performance enhancement in the clipboard event emitter loop. bugfix in the same loop where the thread panicked if you copied something while the app was launching. merged the config branch. the remaining config options would be better to implement in their own branches. dependabot updates"}, {"post_id": 46172, "ts": "2026-08-13T06:19:26Z", "hours": 3.2672, "text": "Configuration (wip) Squirrel now has a configuration file. squirrel.toml is created in the config directory of your OS (i.e. %appdata%/Squirrel on windows and /home/username/.config/Squirrel on linux), finally allowing some amount of customization support. right now, only the types and the max_image_size config options work. types allows you to choose which kind of clipboard items are captured/ignored. max_image_size is self explanatory. attached is the full config file. the remaining options require a bit of work to implement."}, {"post_id": 44184, "ts": "2026-08-09T19:34:47Z", "hours": 0.5053, "text": "Turns out, copy and paste support for files was a one line diff. also, Squirrel is now v0.4.0, yippee. anyways, moving swiftly on. Planning for a v1.0 Squirrel is now in a state where we have most of the major features i wanted it to have: support for essential clipboard data types, pinning and search. however, it is not quite in a v1.0 state. there are a bunch of things i want to add to polish up the program and make it feel sort of “complete”, which is mainly focusing on some basic configuration ability. since sensible defaults are hard to figure out, i’d rather let the user break things instead of being stuck with my arbitrary decisions. thus, i present the current planned feature list for v1: Configuration : enabling basic behavior customization through a config file (TOML most likely) Program exceptions : dont capture clipboard data on certain programs Auto delete/never store : ability to specify a “shelf life” for items, or whether to store them persistently at all. Disable specific types : ability to pick which kind of clipboard events to capture, i.e. only text or text and images, etc. Configurable image size threshold : currently locked to 5mb, this would allow to specify a custom value. (?) Custom data storage format : still torn on this, but there may be performance to be gained by moving to a data store more geared for our purposes. this list ofcourse, might change. implementing these features would make Squirrel much more flexible, and make it v1 worthy."}, {"post_id": 43522, "ts": "2026-08-08T20:50:19Z", "hours": 5.0344, "text": "Rudimentary file support we now have the most basic kind of file support there could be. which is just storing the path to the file. we then provide a link to the file in the frontend, clicking on which reveals the file in your explorer. we also now have tiny little icons on the entries which indicate the entry type. all icons thanks to https://lucide.dev/ files ofcourse, need a bit more work. right now, you cant really do much except revealing in explorer. i will work on adding copy and paste support for files next, as well as maybe improve the overall performance a bit."}, {"post_id": 40907, "ts": "2026-08-04T18:49:27Z", "hours": 0.4922, "text": "Acting on feedback a shipwright recommended i change my banner to include a screenshot of the program. so we now have a shiny new banner that should look good everywhere on the site. this required me to figure out what dimensions the banner is shown at across the site. i’ve attached a rough template for banners. fitting everything inside the marked areas should make sure your banner isn’t cut off anywhere that matters. one reviewer rightfully couldn’t figure out how to quick paste items. this is a miss on my part because i didn’t really have a list of shortcuts anywhere and kind of just mentioned them in passing in the README. that has been rectified by adding a Shortcuts section to the readme."}, {"post_id": 35201, "ts": "2026-07-26T13:57:06Z", "hours": 0.8461, "text": "Set for ship release is made, README updated. should be good to go."}, {"post_id": 33659, "ts": "2026-07-23T19:06:47Z", "hours": 0.9039, "text": "Basic image cache we now cache the last 32 images, fetching from the backend when required and updating the cache. made the image re-rendering issue instantly better. attached is the demo video i forgot to upload in the second to last devlog showing images in action. Performance images are a difficult thing to handle, especially when dealing with the system clipboard. i’ve made Squirrel as performant as i could to the best of my abilities, which is to say, it’s not the best. it isn’t as rich as i would like it to be, so i might return to this feature to improve it in the future. one restriction i’ve put on images to control some of the chaos is limiting the size to 5 megabytes, meaning any image above 5 megs isn’t registered. i could push that to 10, which is still practically instant. but Squirrel is intended to be a quick clipboard, and not dropbox. so this is my cheaty little escape. maybe i’ll relax the limit in the future if 5mb is really restrictive. Next? i’ll probably bump the minor version and ship (i wouldn’t dare a v1.0 currently). i’d say pinning and image support is enough to warrant a second ship. beyond that though, stands file(s) support, so a lot of decision making on how i want it to work to have a good balance of performance and usefulness. a bit of a lengthy devlog this one, and i appreciate if you read all that. but i wanted to clear up some things for myself and just have a frame of reference where Squirrel stands right now after returning from a development break."}, {"post_id": 33376, "ts": "2026-07-23T08:11:18Z", "hours": 0.3458, "text": "Image branch is merged yay, yippee even. next i need to implement a frontend cache to store the last X entries’ contents, particularly for images. the way it works right now, every time the images are re-rendered (due to being filtered by search, for example), content is fetched from the backend. this ofcourse, is less than ideal. but shouldnt be a lot of trouble to fix."}, {"post_id": 32539, "ts": "2026-07-21T19:47:15Z", "hours": 4.9058, "text": "Bunch of things Image Improvements some performance enhancements with images. made the clipboard image data fetching happen in Tauri’s dedicated thread pool, effectively parallelizing the operation. this made image copying a lot faster. image support should be merged into master soon enough. Lazy loading we now have lazy loading for images. image data isn’t loaded until it is scrolled into view. makes startup quick. CI enabled Dependabot updates and optimized the lint workflows for PRs. previously, all of the project was lint+checked on PR when changing anything. now it only checks the part that’s changed (i.e. frontend or backend)"}, {"post_id": 31397, "ts": "2026-07-19T18:47:59Z", "hours": 4.4964, "text": "Progress on images we finally have some form of working image support in Squirrel. This required even more sweeping refactoring changes to the codebase, which was a bit painful and im sure the new code isn’t the best quality either and will bite me later, but we’ll deal with it when we deal with it. getting images is a bit slow however, as right now we’re storing the image as base64 encoded PNGs. i plan to use the SQLite blob type to just store the raw bytes and pass that back and forth to improve the performance a bit (maybe some sort of caching as well?). there are also other areas where that are to be improved but i wanted to get a somewhat working prototype as fast as i can. explaining the silence i’ve been distracted by some life stuff, making me neglect my projects a bit. i also got distracted by the ESP32, fun little device. that is where the 9 days went. but, expect me to work semi-regularly again. thanks for reading."}, {"post_id": 26042, "ts": "2026-07-10T16:57:23Z", "hours": 3.0411, "text": "Lots of refactoring (apologies for the uneventful devlog attachment, i have nothing interesting to show except just code) to make it a bit more manageable when adding image support, a bunch of refactoring and reorganizing has been done in the backend. like i’ve previously mentioned, the codebase leaned too hard into only supporting text events. this fixes that. today’s changes also make the internal communication a bit more efficient. there are a couple more places where performance can be improved. and we will need every bit of performance we can get when dealing with image data. Changelog (shoutout @Hridya for stardance utils, just discovered this) 5b3f285 refactor: move clipboard structures into separate file b3ab1c8 perf: only get required data from db when copying an item 69dc003 refactor: modify data types to enable addition of image support Release CI (wip) currently writing the Release workflow for Squirrel. i have to figure out how to upload the artifacts to a github release with proper versioning and all that. the strategy is to run the workflow whenever something is pushed to the release branch. that is all for today."}, {"post_id": 25496, "ts": "2026-07-09T20:07:22Z", "hours": 0.7936, "text": "Version bump and docs bumped the minor version. Squirrel is officially v0.2.0, yippi. plus, updated the README, adding more explanation about the Wayland issue. also showcased the pin feature. i’ll try to whip up a release workflow to add to my CI tomorrow. I’m debating whether i should ship v0.2.0. the only major change from 0.1.0 is the addition of pinning. i might wait until i have image support and ship later, or i might change my mind, im unsure."}, {"post_id": 24896, "ts": "2026-07-08T19:03:24Z", "hours": 1.2706, "text": "Closed 1 (one) issue moved the global launch hotkey logic from the frontend to the backend. it didn’t behave well in certain situations, failing to activate and bringing up the Squirrel window. Starting work on images we’re experimenting with images. the current functionality is very much caveman and needs a lot of attention to make it actually usable. i’ve decided to stick with clipboard_rs for now, we’ll see how that pans out."}, {"post_id": 24277, "ts": "2026-07-07T18:55:23Z", "hours": 4.1067, "text": "Sadness so i just found out that Tauri’s global shortcut plugin does not yet support Wayland, which is sad to discover this deep into development. but, there is an active PR addressing this issue , which is nice. what this means for Squirrel is that proper Wayland support will unfortunately have to wait until this is merged. the joys of using a not-yet-completely-matured framework i suppose. though it does make me feel a bit guilty for calling Squirrel “cross-platform”. in other news (changelog): Squirrel now has a --silent launch flag that makes it start with the window hidden. useful when the app is set to launch on system startup. Squirrel now makes sure there is only one instance of it running. The shortcut Ctrl+Shift+Del will clear history permanently. (i forgot about clear history functionality in the first ship even though the code for it existed, there just wasnt a button in the frontend to call it)"}, {"post_id": 22186, "ts": "2026-07-04T14:50:25Z", "hours": 4.1014, "text": "CI dipped my toes into github workflows, messed around, an got check&lint workflows working on pull requests. will make a release workflow some time later. this change however, was only a part of this devlog’s time. Bad decisions catching up turns out, using clipboard_rs might’ve been the subpar choice for interfacing with the system clipboard. while clipboard_rs provides a easy way to listen to clipboard changes and get text from it, fetching raw clipboard data is buggy and inconvenient. when i sat down to work on image support, i was immediately brick-walled by how messy it is to just get raw data first. it would’ve been simple if i was building for just one target os but considering both windows and linux, it’s less than ideal. on top of this, the documentation for the crate is very lackluster. all this to say, i am very much debating migrating my clipboard stuff to using arboard . arboard doesnt provide direct functionality to listen to clipboard changes so i will have to implement that myself. but, it does have first class support for wayland. a very enticing choice, but we will see."}, {"post_id": 18315, "ts": "2026-06-29T12:51:11Z", "hours": 2.7625, "text": "Navigation improvements slight refactoring and bugfixes for frontend navigation. the navigation was kinda wonky before this and sometimes wouldn’t highlight the entry that was actually selected in the background. most of this devlog’s work was to make it so that what you see is what you get. also, a touch of color has been added to pinned entries (tentative)."}, {"post_id": 17064, "ts": "2026-06-27T18:22:53Z", "hours": 2.5814, "text": "Pins we now have basic entry pinning support. this was a bit less difficult than i thought it was going to be. but now you can pin an item and it always stays at the top of the list (unless you’re searching). anyways, that is one item ticked off the todo list. apart from that, i had to do some minor backend refactoring and reorganizing so that it is easier to build more upon. next? image and/or file copy support. this is one monumental task. i think the way we’ll approach this is by storing the entire file if it’s smaller than, say 5mb, and if it is larger, we just store the path to the file. we dont want to store the user’s 5gb video file they just copied. for images, i think the play is to generate a low quality thumbnail of the image to display in the app. for files, if it is a text file, we can show just the first 5 or so lines with a link to the file, other wise we’ll just give a link. until now, the code i’ve written sadly relies too much on the fact that every event is a text copy as we ignore everything else. it’s going to be a rather painstaking experience refactoring the codebase. the challenge is going to be keeping Squirrel quick and responsive while supporting all of this additional functionality."}, {"post_id": 14387, "ts": "2026-06-23T14:34:01Z", "hours": 2.1467, "text": "even more bugfixes ofcourse critical bugs pop up when im trying to release. the system tray icon wouldnt show up when running the single-file executable on any platform. that is now fixed. plus a couple more things have been done to make Squirrel behave like a good cross platform app, like storing the data in the OS’s appdata directory. there are some more things i would like to do but i think the app is in a releasable state and i’ve wanted to ship it for a while. I’ve set up the GitHub release and all the relevant instructions in the README. might be last devlog before ship #1."}, {"post_id": 11396, "ts": "2026-06-18T17:34:03Z", "hours": 1.2267, "text": "more polish and minor fixes more readme refining, linux support clarity, and installation instructions. also, i completely forgot about the tray icon actually needing an image icon, so until now it was just blank. anyways, we now have an icon. next, we put out releases on github and ship, hopefully. unfortunately we have to wait until tomorrow for linux builds."}, {"post_id": 10100, "ts": "2026-06-16T18:11:51Z", "hours": 1.3953, "text": "readme and polishing preparing to ship, writing docs, recording demos and stuff. there are a couple other things i want to sort out but i might ship in a few days."}, {"post_id": 9339, "ts": "2026-06-15T17:46:59Z", "hours": 2.4394, "text": "Dark theme! just glorious there isn’t a theme toggle button yet, it just goes off of your system’s theme for now. now that the colors are roughly standardized across the ui, tweaking the contrast and palette is a much more pleasant experience."}, {"post_id": 8830, "ts": "2026-06-14T18:02:58Z", "hours": 0.6531, "text": "wip dark theme support i want squirrel to use whatever theme the system is set to. currently it’s forced light mode but dark mode is something i’d be crucified for not adding. unfortunately, I in my infinite wisdom didn’t have the foresight to have consistent colors across even the light theme itself. there’s just random #aaa , #666 , etc colors everywhere where i went with what looked good. so work needs to be done to standardize the colors with css variables. then just modify the variables for dark theme accordingly. yes, i’m aware this is standard practice."}, {"post_id": 8047, "ts": "2026-06-13T12:50:39Z", "hours": 1.6972, "text": "Ticked a couple of items off the todo list: Squirrel now loads the history on launch. doing this was easier than i expected, but it’s a very naive way to do it (literally just send all of the history on launch). we also now have a logo. im no graphic designer by any means so this is the best i could do. shows in the titlebar and when your history is empty. check the project banner for a larger version if you feel like it. i might change the logo in the future, i just wanted an icon. todo pinning items test on linux"}, {"post_id": 7571, "ts": "2026-06-12T17:36:06Z", "hours": 1.2175, "text": "nothing significant. just docs and comments and cleanup. slowly making progress planning wise into loading the history at launch. the idea is to use a custom Tauri IPC Channel for incrementally streaming data to the frontend on app start. channels are supposedly faster for this and are meant for continuous messages like this in comparison to events. from the Tauri docs: Channels are designed to be fast and deliver ordered data. They are used internally for streaming operations such as download progress, child process output and WebSocket messages. i may implement a lazy loading system if i feel like it. i have nothing interesting to show so have a squirrel again"}, {"post_id": 6978, "ts": "2026-06-11T18:27:06Z", "hours": 4.3067, "text": "Item search i’ve wanted to add this for a long time but it needed a lot of refactoring in the frontend so i put it off for later. it is now later. we have instant search. press / or any of the non shortcut keys to start searching. frontend logic has had a big refactor making navigation and other operations more predictable and less wonky. it took a bit of battling with the specifics of Svelte’s each loop and bind:this directive but it was worth it. there is still some cleanup that can be done, the code is not idiomatic by a long shot, but im happy we have a very essential feature complete. changelog: add search fix broken arrow navigation and copy/delete operations applying to wrong entries. make window size a bit bigger by default (might change later) make copy icon turn into a green checkmark so that there is some visual feedback on copying make the database file always save at the executable’s location. todo ! still need to test linux ! load history on launch app icon and branding"}, {"post_id": 6358, "ts": "2026-06-10T18:17:34Z", "hours": 5.3111, "text": "Frontend improvements we now have buttons on the clipboard entries so you can also use the mouse to perform the basic functions like copy, delete, etc. (pins wip). there have also been a bunch of UI improvements and tweaks in general. deleting feels instant. navigation is fixed (for the most part). Backend slight optimization in the pasting operation, plus a couple of fixes and doc comments."}, {"post_id": 5833, "ts": "2026-06-09T19:30:37Z", "hours": 0.4139, "text": "custom scroll bar that is it, enjoy."}, {"post_id": 5013, "ts": "2026-06-08T17:39:05Z", "hours": 2.1789, "text": "UI tweaks as i mentioned before, im in the process of simplifying the UI. i hid the native titlebar and made a custom one. also tweaked the shape of the window to feel more like a clipboard. that is all that’s changed significantly this devlog. development will probably slow down a little bit in the coming days because i have irl stuff to deal with."}, {"post_id": 4379, "ts": "2026-06-07T18:13:01Z", "hours": 4.3942, "text": "more backend there isnt any significant change in the frontend but there’s a ton of backend refactoring and bugfixes. performance should be slightly better now with large copy/pastes. changelog: associate IDs with clipboard events so that we only have to pass IDs between the frontend and backend instead of the whole content. make paste operation more efficient ignore clipboard events caused by Squirrel itself (a bit hacky to achieve this but good enough) Quit button in tray icon menu so Squirrel can actually be closed (there was no way to close it before except killing it) make the shortcut to bring up Squirrel work in almost all situations refactor AppState + some other things more cleanup and comments anyways, attached image is the tentative color palette i might implement. i have no idea how to do this and which colors to use where or if it would even look good so i might just ditch it in the future. we’ll see. todo still have to test on linux and load history on app launch. probably will work on that next."}, {"post_id": 3711, "ts": "2026-06-06T19:20:52Z", "hours": 3.0414, "text": "we got shortcuts we now have Ctrl+Shift+V as the shortcut to bring up Squirrel. (i know it’s used for “Paste as plain text” in some programs and used for “Paste in place” in photoshop but whatever). once up, you can select items from your history using arrow keys. pressing Return pastes the selected item into your last window. we’re having some issues with permissions but i’ll look into it. i’m now slowly simplifying the UI to be geared more towards improving user ergonomics and make it something that is not cluttered and easy to use. apart from this, i’ve cleaned up the code a bit removing stray debug prints and random commented code, it was getting out of hand. will write proper doc comments soon. todo i have to make the app load the user’s past clipboard history on startup lmao i totally forgot i have to start testing on linux, urgently. i feel i should make devlogs more often. even if nothing’s changed in the actual project, detailing plans helps me keep track of things personally. that’s pretty much it, stay tuned. edit: please ignore the VC_UNDEFINED keys in the input overlay in the attached video, it’s Enigo inputs not translating well."}, {"post_id": 2305, "ts": "2026-06-04T18:30:06Z", "hours": 4.1042, "text": "a bunch of backend improvements: store timestamps for copy events more efficient message passing between frontend and backend Clear History functionality system tray (!) (pls ignore the missing icon in the tray, we don’t have an icon for the app yet) slightly better UI on the topic of UI, i’m getting around to deciding a color palette for the app. i will probably work more on the UI for a bit before switching gears to add more functionality (like image support). if i decide i want to ship early, v0.1 will probably go without image support and just get a lot of polish with text only functionality."}, {"post_id": 1590, "ts": "2026-06-03T18:26:51Z", "hours": 3.9078, "text": "frontend improvements! spent some time battling css for this relatively simple UI but it’s atleast somewhat pleasant to look at. will work on either image support or making it the app run in the background next."}, {"post_id": 922, "ts": "2026-06-02T17:41:08Z", "hours": 4.1017, "text": "nothing much has changed visually, but we now have a database to store the user’s clipboard actions. plus some refactoring changes and a bunch of minor improvements here and there. i have nothing to show for it except code so instead have an image of a squirrel"}, {"post_id": 261, "ts": "2026-06-01T13:38:29Z", "hours": 2.5611, "text": "init. figuring out Tauri’s emit/invoke mechanism and capturing clipboard copy events. slow start. we’ll do the color palette and icon and all the frontend pleasantries at a later date."}]...
|
Title: Squirrel by @Koei | Stardance
Devlogs:
ini Title: Squirrel by @Koei | Stardance
Devlogs:
init. figuring out Tauri’s emit/invoke mechanism and capturing clipboard copy events. slow start. we’ll do the color palette and icon and all the frontend pleasantries at a later date.
nothing much has changed visually, but we now have a database to store the user’s clipboard actions. plus some refactoring changes and a bunch of minor improvements here and there. i have nothing to show for it except code so instead have an image of a squirrel
frontend improvements! spent some time battling css for this relatively simple UI but it’s atleast somewhat pleasant to look at. will work on either image support or making it the app run in the background next.
a bunch of backend improvements: store timestamps for copy events more efficient message passing between frontend and backend Clear History functionality system tray (!) (pls ignore the missing icon in the tray, we don’t have an icon for the app yet) slightly better UI on the topic of UI, i’m getting around to deciding a color palette for the app. i will probably work more on the UI for a bit before switching gears to add more functionality (like image support). if i decide i want to ship early, v0.1 will probably go without image support and just get a lot of polish with text only functionality.
we got shortcuts we now have Ctrl+Shift+V as the shortcut to bring up Squirrel. (i know it’s used for “Paste as plain text” in some programs and used for “Paste in place” in photoshop but whatever). once up, you can select items from your history using arrow keys. pressing Return pastes the selected item into your last window. we’re having some issues with permissions but i’ll look into it. i’m now slowly simplifying the UI to be geared more towards improving user ergonomics and make it something that is not cluttered and easy to use. apart from this, i’ve cleaned up the code a bit removing stray debug prints and random commented code, it was getting out of hand. will write proper doc comments soon. todo i have to make the app load the user’s past clipboard history on startup lmao i totally forgot i have to start testing on linux, urgently. i feel i should make devlogs more often. even if nothing’s changed in the actual project, detailing plans helps me keep track of things personally. that’s pretty much it, stay tuned. edit: please ignore the VC_UNDEFINED keys in the input overlay in the attached video, it’s Enigo inputs not translating well.
more backend there isnt any significant change in the frontend but there’s a ton of backend refactoring and bugfixes. performance should be slightly better now with large copy/pastes. changelog: associate IDs with clipboard events so that we only have to pass IDs between the frontend and backend instead of the whole content. make paste operation more efficient ignore clipboard events caused by Squirrel itself (a bit hacky to achieve this but good enough) Quit button in tray icon menu so Squirrel can actually be closed (there was no way to close it before except killing it) make the shortcut to bring up Squirrel work in almost all situations refactor AppState + some other things more cleanup and comments anyways, attached image is the tentative color palette i might implement. i have no idea how to do this and which colors to use where or if it would even look good so i might just ditch it in the future. we’ll see. todo still have to test on linux and load history on app launch. probably will work on that next.
UI tweaks as i mentioned before, im in the process of simplifying the UI. i hid the native titlebar and made a custom one. also tweaked the shape of the window to feel more like a clipboard. that is all that’s changed significantly this devlog. development will probably slow down a little bit in the coming days because i have irl stuff to deal with.
custom scroll bar that is it, enjoy.
Frontend improvements we now have buttons on the clipboard entries so you can also use the mouse to perform the basic functions like copy, delete, etc. (pins wip). there have also been a bunch of UI improvements and tweaks in general. deleting feels instant. navigation is fixed (for the most part). Backend slight optimization in the pasting operation, plus a couple of fixes and doc comments.
Item search i’ve wanted to add this for a long time but it needed a lot of refactoring in the frontend so i put it off for later. it is now later. we have instant search. press / or any of the non shortcut keys to start searching. frontend logic has had a big refactor making navigation and other operations more predictable and less wonky. it took a bit of battling with the specifics of Svelte’s each loop and bind:this directive but it was worth it. there is still some cleanup that can be done, the code is not idiomatic by a long shot, but im happy we have a very essential feature complete. changelog: add search fix broken arrow navigation and copy/delete operations applying to wrong entries. make window size a bit bigger by default (might change later) make copy icon turn into a green checkmark so that there is some visual feedback on copying make the database file always save at the executable’s location. todo ! still need to test linux ! load history on launch app icon and branding
nothing significant. just docs and comments and cleanup. slowly making progress planning wise into loading the history at launch. the idea is to use a custom Tauri IPC Channel for incrementally streaming data to the frontend on app start. channels are supposedly faster for this and are meant for continuous messages like this in comparison to events. from the Tauri docs: Channels are designed to be fast and deliver ordered data. They are used internally for streaming operations such as download progress, child process output and WebSocket messages. i may implement a lazy loading system if i feel like it. i have nothing interesting to show so have a squirrel again
Ticked a couple of items off the todo list: Squirrel now loads the history on launch. doing this was easier than i expected, but it’s a very naive way to do it (literally just send all of the history on launch). we also now have a logo. im no graphic designer by any means so this is the best i could do. shows in the titlebar and when your history is empty. check the project banner for a larger version if you feel like it. i might change the logo in the future, i just wanted an icon. todo pinning items test on linux
wip dark theme support i want squirrel to use whatever theme the system is set to. currently it’s forced light mode but dark mode is something i’d be crucified for not adding. unfortunately, I in my infinite wisdom didn’t have the foresight to have consistent colors across even the light theme itself. there’s just random #aaa , #666 , etc colors everywhere where i went with what looked good. so work needs to be done to standardize the colors with css variables. then just modify the variables for dark theme accordingly. yes, i’m aware this is standard practice.
Dark theme! just glorious there isn’t a theme toggle button yet, it just goes off of your system’s theme for now. now that the colors are roughly standardized across the ui, tweaking the contrast and palette is a much more pleasant experience.
readme and polishing preparing to ship, writing docs, recording demos and stuff. there are a couple other things i want to sort out but i might ship in a few days.
more polish and minor fixes more readme refining, linux support clarity, and installation instructions. also, i completely forgot about the tray icon actually needing an image icon, so until now it was just blank. anyways, we now have an icon. next, we put out releases on github and ship, hopefully. unfortunately we have to wait until tomorrow for linux builds.
even more bugfixes ofcourse critical bugs pop up when im trying to release. the system tray icon wouldnt show up when running the single-file executable on any platform. that is now fixed. plus a couple more things have been done to make Squirrel behave like a good cross platform app, like storing the data in the OS’s appdata directory. there are some more things i would like to do but i think the app is in a releasable state and i’ve wanted to ship it for a while. I’ve set up the GitHub release and all the relevant instructions in the README. might be last devlog before ship #1.
Pins we now have basic entry pinning support. this was a bit less difficult than i thought it was going to be. but now you can pin an item and it always stays at the top of the list (unless you’re searching). anyways, that is one item ticked off the todo list. apart from that, i had to do some minor backend refactoring and reorganizing so that it is easier to build more upon. next? image and/or file copy support. this is one monumental task. i think the way we’ll approach this is by storing the entire file if it’s smaller than, say 5mb, and if it is larger, we just store the path to the file. we dont want to store the user’s 5gb video file they just copied. for images, i think the play is to generate a low quality thumbnail of the image to display in the app. for files, if it is a text file, we can show just the first 5 or so lines with a link to the file, other wise we’ll just give a link. until now, the code i’ve written sadly relies too much on the fact that every event is a text copy as we ignore everything else. it’s going to be a rather painstaking experience refactoring the codebase. the challenge is going to be keeping Squirrel quick and responsive while supporting all of this additional functionality.
Navigation improvements slight refactoring and bugfixes for frontend navigation. the navigation was kinda wonky before this and sometimes wouldn’t highlight the entry that was actually selected in the background. most of this devlog’s work was to make it so that what you see is what you get. also, a touch of color has been added to pinned entries (tentative).
CI dipped my toes into github workflows, messed around, an got check&lint workflows working on pull requests. will make a release workflow some time later. this change however, was only a part of this devlog’s time. Bad decisions catching up turns out, using clipboard_rs might’ve been the subpar choice for interfacing with the system clipboard. while clipboard_rs provides a easy way to listen to clipboard changes and get text from it, fetching raw clipboard data is buggy and inconvenient. when i sat down to work on image support, i was immediately brick-walled by how messy it is to just get raw data first. it would’ve been simple if i was building for just one target os but considering both windows and linux, it’s less than ideal. on top of this, the documentation for the crate is very lackluster. all this to say, i am very much debating migrating my clipboard stuff to using arboard . arboard doesnt provide direct functionality to listen to clipboard changes so i will have to implement that myself. but, it does have first class support for wayland. a very enticing choice, but we will see.
Sadness so i just found out that Tauri’s global shortcut plugin does not yet support Wayland, which is sad to discover this deep into development. but, there is an active PR addressing this issue , which is nice. what this means for Squirrel is that proper Wayland support will unfortunately have to wait until this is merged. the joys of using a not-yet-completely-matured framework i suppose. though it does make me feel a bit guilty for calling Squirrel “cross-platform”. in other news (changelog): Squirrel now has a --silent launch flag that makes it start with the window hidden. useful when the app is set to launch on system startup. Squirrel now makes sure there is only one instance of it running. The shortcut Ctrl+Shift+Del will clear history permanently. (i forgot about clear history functionality in the first ship even though the code for it existed, there just wasnt a button in the frontend to call it)
Closed 1 (one) issue moved the global launch hotkey logic from the frontend to the backend. it didn’t behave well in certain situations, failing to activate and bringing up the Squirrel window. Starting work on images we’re experimenting with images. the current functionality is very much caveman and needs a lot of attention to make it actually usable. i’ve decided to stick with clipboard_rs for now, we’ll see how that pans out.
Version bump and docs bumped the minor version. Squirrel is officially v0.2.0, yippi. plus, updated the README, adding more explanation about the Wayland issue. also showcased the pin feature. i’ll try to whip up a release workflow to add to my CI tomorrow. I’m debating whether i should ship v0.2.0. the only major change from 0.1.0 is the addition of pinning. i might wait until i have image support and ship later, or i might change my mind, im unsure.
Lots of refactoring (apologies for the uneventful devlog attachment, i have nothing interesting to show except just code) to make it a bit more manageable when adding image support, a bunch of refactoring and reorganizing has been done in the backend. like i’ve previously mentioned, the codebase leaned too hard into only supporting text events. this fixes that. today’s changes also make the internal communication a bit more efficient. there are a couple more places where performance can be improved. and we will need every bit of performance we can get when dealing with image data. Changelog (shoutout @Hridya for stardance utils, just discovered this) 5b3f285 refactor: move clipboard structures into separate file b3ab1c8 perf: only get required data from db when copying an item 69dc003 refactor: modify data types to enable addition of image support Release CI (wip) currently writing the Release workflow for Squirrel. i have to figure out how to upload the artifacts to a github release with proper versioning and all that. the strategy is to run the workflow whenever something is pushed to the release branch. that is all for today.
Progress on images we finally have some form of working image support in Squirrel. This required even more sweeping refactoring changes to the codebase, which was a bit painful and im sure the new code isn’t the best quality either and will bite me later, but we’ll deal with it when we deal with it. getting images is a bit slow however, as right now we’re storing the image as base64 encoded PNGs. i plan to use the SQLite blob type to just store the raw bytes and pass that back and forth to improve the performance a bit (maybe some sort of caching as well?). there are also other areas where that are to be improved but i wanted to get a somewhat working prototype as fast as i can. explaining the silence i’ve been distracted by some life stuff, making me neglect my projects a bit. i also got distracted by the ESP32, fun little device. that is where the 9 days went. but, expect me to work semi-regularly again. thanks for reading.
Bunch of things Image Improvements some performance enhancements with images. made the clipboard image data fetching happen in Tauri’s dedicated thread pool, effectively parallelizing the operation. this made image copying a lot faster. image support should be merged into master soon enough. Lazy loading we now have lazy loading for images. image data isn’t loaded until it is scrolled into view. makes startup quick. CI enabled Dependabot updates and optimized the lint workflows for PRs. previously, all of the project was lint+checked on PR when changing anything. now it only checks the part that’s changed (i.e. frontend or backend)
Image branch is merged yay, yippee even. next i need to implement a frontend cache to store the last X entries’ contents, particularly for images. the way it works right now, every time the images are re-rendered (due to being filtered by search, for example), content is fetched from the backend. this ofcourse, is less than ideal. but shouldnt be a lot of trouble to fix.
Basic image cache we now cache the last 32 images, fetching from the backend when required and updating the cache. made the image re-rendering issue instantly better. attached is the demo video i forgot to upload in the second to last devlog showing images in action. Performance images are a difficult thing to handle, especially when dealing with the system clipboard. i’ve made Squirrel as performant as i could to the best of my abilities, which is to say, it’s not the best. it isn’t as rich as i would like it to be, so i might return to this feature to improve it in the future. one restriction i’ve put on images to control some of the chaos is limiting the size to 5 megabytes, meaning any image above 5 megs isn’t registered. i could push that to 10, which is still practically instant. but Squirrel is intended to be a quick clipboard, and not dropbox. so this is my cheaty little escape. maybe i’ll relax the limit in the future if 5mb is really restrictive. Next? i’ll probably bump the minor version and ship (i wouldn’t dare a v1.0 currently). i’d say pinning and image support is enough to warrant a second ship. beyond that though, stands file(s) support, so a lot of decision making on how i want it to work to have a good balance of performance and usefulness. a bit of a lengthy devlog this one, and i appreciate if you read all that. but i wanted to clear up some things for myself and just have a frame of reference where Squirrel stands right now after returning from a development break.
Set for ship release is made, README updated. should be good to go.
Acting on feedback a shipwright recommended i change my banner to include a screenshot of the program. so we now have a shiny new banner that should look good everywhere on the site. this required me to figure out what dimensions the banner is shown at across the site. i’ve attached a rough template for banners. fitting everything inside the marked areas should make sure your banner isn’t cut off anywhere that matters. one reviewer rightfully couldn’t figure out how to quick paste items. this is a miss on my part because i didn’t really have a list of shortcuts anywhere and kind of just mentioned them in passing in the README. that has been rectified by adding a Shortcuts section to the readme.
Rudimentary file support we now have the most basic kind of file support there could be. which is just storing the path to the file. we then provide a link to the file in the frontend, clicking on which reveals the file in your explorer. we also now have tiny little icons on the entries which indicate the entry type. all icons thanks to https://lucide.dev/ files ofcourse, need a bit more work. right now, you cant really do much except revealing in explorer. i will work on adding copy and paste support for files next, as well as maybe improve the overall performance a bit.
Turns out, copy and paste support for files was a one line diff. also, Squirrel is now v0.4.0, yippee. anyways, moving swiftly on. Planning for a v1.0 Squirrel is now in a state where we have most of the major features i wanted it to have: support for essential clipboard data types, pinning and search. however, it is not quite in a v1.0 state. there are a bunch of things i want to add to polish up the program and make it feel sort of “complete”, which is mainly focusing on some basic configuration ability. since sensible defaults are hard to figure out, i’d rather let the user break things instead of being stuck with my arbitrary decisions. thus, i present the current planned feature list for v1: Configuration : enabling basic behavior customization through a config file (TOML most likely) Program exceptions : dont capture clipboard data on certain programs Auto delete/never store : ability to specify a “shelf life” for items, or whether to store them persistently at all. Disable specific types : ability to pick which kind of clipboard events to capture, i.e. only text or text and images, etc. Configurable image size threshold : currently locked to 5mb, this would allow to specify a custom value. (?) Custom data storage format : still torn on this, but there may be performance to be gained by moving to a data store more geared for our purposes. this list ofcourse, might change. implementing these features would make Squirrel much more flexible, and make it v1 worthy.
Configuration (wip) Squirrel now has a configuration file. squirrel.toml is created in the config directory of your OS (i.e. %appdata%/Squirrel on windows and /home/username/.config/Squirrel on linux), finally allowing some amount of customization support. right now, only the types and the max_image_size config options work. types allows you to choose which kind of clipboard items are captured/ignored. max_image_size is self explanatory. attached is the full config file. the remaining options require a bit of work to implement.
devlog attachment obligation: here is me pasting some files i copied a couple minutes ago after i copied stuff on top of that. that out of the way, devlog. Several things app theme is now configurable from config, so you are not stuck with the system theme if you want to change it. cleanup across the backend; comments, TODOs, error handling, and stuff of the sort. performance enhancement in the clipboard event emitter loop. bugfix in the same loop where the thread panicked if you copied something while the app was launching. merged the config branch. the remaining config options would be better to implement in their own branches. dependabot updates
Ignore programs you can specify programs in which Squirrel should not listen to clipboard events. this is useful when you’re working in a program wherein you need to use copy and paste a bunch. ignoring that program would keep your Squirrel history clean. also useful to ignore a program that you regularly copy secrets from. example of notepad being ignored:
(i genuinely have no idea what to show in the devlog attachment, nothing’s changed visually. so have this stupid ass screenshot.) Massive refactor, breaking changes now that i’ve given myself the liberty to rethink and redesign Squirrel’s data models and storage in a breaking fashion for v1, we have managed to make a good amount of improvements across the board. database schema has been modified to better suit current needs and make it possible to implement the features I desire for v1. it has been a very satisfying refactor. What’s new: use UNIX microsecond timestamp for event ids instead of relying on sqlite autoincrement. this allows us to immediately send a captured event to the frontend without having to await a db write to obtain the event id. this also eliminates the timestamp column for events since the id is also the timestamp. a dedicated BLOB column for image entries to store raw image bytes instead of b64 encoded strings. this makes images weigh about ~33% lighter. decent perf boost. new expires_at column to store when an entry expires. pinned entries have an expiry of NULL . provides the base to actually implement expiring entries. get rid of ClipboardEventNotice since we no longer do the notify frontend -> write to db -> send data to frontend dance. it is now simply send whole event to frontend -> write to db . we enjoy simplifications. (!) as it stands now, old data (if it exists) would immediately be wiped when launching Squirrel v1. i could write some migration code but we’ll see. maybe clipboard data isn’t important enough to bother with migration. Next: actually implement entry expiration: should be trivial, just delete expired entries on launch. ephemeral/persistent toggle: this one is a bit tricky, and will involve some in memory database shenanigans. more details in the devlog when i implement this.
Item expiry and pin-preservation expired items are now automatically deleted on program startup. an entry is considered expired when the current time is more than its expires_at value. when pinned, the expires_at attribute is nulled, meaning this entry will never expire. the “Clear all” shortcut Ctrl+Shift+Del now respects pinned entries. it clears everything but leaves pinned entries untouched. Next the ephemeral db shenanigans. also, i have decided that Squirrel needs a settings panel in the frontend for easier config modification. that may or may not happen but it is tempting to do it.
History persistence configuration now works. setting it to false means history is not retained between sessions. comes with true as default. pinned entries always persist. attachment shows the behavior when persistence is off. Implementation i ended up deciding not to do the in memory database method for this since it was a bit too much added complexity which could be avoided by just adding an additional is_persistent column to the db. im not the happiest about how i’ve implemented this right now but im willing to take that hit right now if it means i dont have to deal with databases. Next all of the config options are now implemented. we are very close to v1.0. expect progress to be rather slow from here on out. i’ve had to divert my attention towards other things and haven’t been able to spend a lot of time working on my projects. maybe i will work on a settings panel. depends on how much work it requires. it’s a maybe. i may just ship it as it stands right now.
v1.0.0 It’s official. Squirrel is now v1. devlog time is adding logging, updating readme, fixing some small tidbits and polishing up some areas of the app. Squirrel now prints pretty logs to console when running in development mode and writes logs to a file if running in release. Project status i realistically can not get a GUI settings panel done due to me needing to divert my attention to more important life stuff. this right here is probably going to be the extent of work done on Squirrel in stardance. i definitely do plan on working on this in the long term. for example, im not entirely happy and satisfied with the current UI, and global hotkey still does not work on wayland. but right now, more pressing issues are at hand and i cannot give it my all on this project. that said, i do believe that Squirrel is in a very usable 1.0 state, which was my goal. i might push minor updates if the reviews call for fixes/improvements, but definitely no major features. thanks for reading if you made it here.
Ships:
v0.1.0 Squirrel is a clipboard manager that is meant to be simple and intuitive. It remembers all the text you copy allowing you to paste whatever into wherever. You can also quickly search through your history. Squirrel is meant to be cross-platform, but for this release, Linux support on Wayland is very iffy (X11 is fine for the most part). I would highly recommend using Windows for testing this ship, sorry for the inconvenience. Expect potentially better support next ship.
v0.3.0 Squirrel is a clipboard manager that is meant to be simple and intuitive. 2 new features in this version, namely pinning and image support. There are performance improvements as well as slight visual tweaks. Read the README for more info.
v1.0.0 Squirrel is a clipboard manager for Windows and X11 Linux that is meant to be simple and intuitive. This major release overhauls the data storage schema to be more efficient, faster, and reliable. There are significant performance improvements. This release also adds configurability to Squirrel, allowing basic but much needed customization, and polishes up the overall app. Check the README for more information....
|
1792835603.7713623
|
1792922003.7713623
|
|
2910
|
3d game engine by @rajaryan1492007 | Stardance
|
rajaryan1492007
|
3
|
110.5
|
1561
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T19:17:52Z", "hours": 14.0, "multiplier": 16.69, "payout": 232, "blessing": "neutral", "text": "i just finally done all thing like stable etc . and search of all libs etc so can really work making really good engine i add milestone etc . u can still test project tho but it will just artitacture doc change and some sync bug fix . other then that i add milestone so i can work on that now but i 19 now today so my hackclub will get end so i just ship to info that . devlog is end but i will continue to work on this engine bcuz it been like year since i st working on it already so anyway . and anything u wanna know u can check my project issues and roadmap", "repo": "https://github.com/rajaryan2007/UNHUMAN", "demo": "https://github.com/rajaryan2007/UNHUMAN/releases/tag/test"}, {"ship_num": 2, "ts": "2026-08-26T21:35:30Z", "hours": 71.0, "multiplier": 14.89, "payout": 1056, "blessing": "neutral", "text": "-> I built the Unhuman Engine (UHE) a high-performance, custom 3D game engine written entirely from scratch in C++. It features a custom Vulkan rendering pipeline, Jolt Physics integration, and a 3D spatial audio system using miniaudio. Alongside the engine, I built a fully playable “Aim Lab” style 3D shooter game to showcase its capabilities, complete with skeletal animations, recoil mechanics, and a robust entity component system (ECS). -> Building a Vulkan renderer from the ground up is notoriously difficult due to how explicit the API is. Getting the Vulkan swapchains, descriptors, and framebuffers perfectly synchronized was a massive hurdle. Beyond rendering, building the virtual file system (VFS) to correctly resolve asset paths across different platforms (Linux native and Windows via Wine) required a lot of trial and error, as did managing multithreaded memory cleanup for the audio subsystem to prevent Because of the custom Vulkan architecture and strict C++ optimizations, the game hits 900+ FPS in release builds, even on integrated graphics! the custom pixel-perfect 3D entity picking system we built using Vulkan framebuffers (instead of relying on standard physics raycasting). Finally, the engine architecture is scalable enough that it’s not just for games—it’s designed to handle heavy robotics and autonomous vehicle simulations in the engine . -> The engine supports both Linux and Windows to play the game, just run the UHEGAME executable inside the bin folder. Important: Make sure the assets folder (which contains the 3D models and audio files) is sitting right next to the executable in the same directory, otherwise the game will fall back to a safe mode. Controls: Use your mouse to aim, Left Click to shoot the targets, and press ‘R’ to reload the animated 3D pistol also i write it too big bcuz last time many people said they don’t understand what i did . about running it u can run it in windows and linux both see window build and linux build there to work able excutable file one is uhegame.exe and uhe_editor.exe one is game and other is editor https://github.com/rajaryan2007/UNHUMAN/releases/tag/alpha i will improve the game as time goes i just st with vulkan and other if u have any problem u can ask here https://github.com/rajaryan2007/UNHUMAN/issues if still don’t understand don’t rate down read or search or just read devlog and understand instead of low rating thankyou :)", "repo": "https://github.com/rajaryan2007/UNHUMAN", "demo": "https://github.com/rajaryan2007/UNHUMAN/releases/tag/test"}, {"ship_num": 3, "ts": "2026-06-09T19:02:56Z", "hours": 21.0, "multiplier": 14.37, "payout": 273, "blessing": "neutral", "text": "This project has been a daily labor of love for over a year. Over the last 4 to 5 months, I completely rewrote the entire rendering backend, moving away from a legacy OpenGL state machine to an explicit Vulkan pipeline. Along the way, I completely redesigned the Rendering Hardware Interface (RHI) to align with modern graphics architectures. Welcome to UNHUMAN! You are completely free to clone and compile this engine, but please read this first: ->The 50/50 Rule: This is a custom, explicitly defined Vulkan engine currently tailored to a Ryzen/Vega Windows environment. Because Vulkan does not hide driver-level differences (NVIDIA vs. AMD vs. Intel), there is roughly a 50/50 chance it will compile flawlessly or completely explode on your specific GPU setup. ->The Easy Way Out: If you attempt to build the project and hit Vulkan validation errors, device-lost crashes, or strict compilation failures, please do not waste your time trying to debug my RHI! * Visual Verification: If the build fails on your hardware, simply watch the YouTube Walkthrough Video linked below. It contains the full visual proof of the engine running, rendering, and functioning on the native development machine. link -> https://youtu.be/CHDIU61auYo", "repo": "https://github.com/rajaryan2007/UNHUMAN", "demo": "https://github.com/rajaryan2007/UNHUMAN/releases/tag/test"}]...
|
[{"post_id": 70209, "ts": "202 [{"post_id": 70209, "ts": "2026-09-18T18:21:31Z", "hours": 4.5, "text": "reading source code of o3de and make my engine barrier better"}, {"post_id": 67555, "ts": "2026-09-13T18:10:01Z", "hours": 1.8844, "text": "just make milestone bar for realase"}, {"post_id": 66844, "ts": "2026-09-12T19:21:25Z", "hours": 2.6544, "text": "make better job system"}, {"post_id": 62020, "ts": "2026-09-05T07:13:01Z", "hours": 4.5067, "text": "add multithreading and better sync"}, {"post_id": 59175, "ts": "2026-08-31T20:15:59Z", "hours": 4.8814, "text": "added text rendering"}, {"post_id": 54512, "ts": "2026-08-25T15:19:38Z", "hours": 2.1939, "text": "added audio and animation"}, {"post_id": 52892, "ts": "2026-08-23T08:38:37Z", "hours": 1.9892, "text": "St making game in my game engine"}, {"post_id": 51531, "ts": "2026-08-21T09:17:58Z", "hours": 3.6897, "text": "added a ci/cd test For engine with lavapipe"}, {"post_id": 45963, "ts": "2026-08-12T19:45:40Z", "hours": 8.6658, "text": "Add descriptor Set fallback and Contribution guidelines"}, {"post_id": 39452, "ts": "2026-08-02T12:29:11Z", "hours": 8.3283, "text": "implemented many fallback feature no less crash add fallback of dynamic_rendering other are pending"}, {"post_id": 30001, "ts": "2026-07-17T07:25:22Z", "hours": 9.0811, "text": "all setup done just have to write fallback now :)"}, {"post_id": 25765, "ts": "2026-07-10T06:41:34Z", "hours": 3.7094, "text": "implementing old renderpass and Framebuffer and other thing to run old hardware"}, {"post_id": 23311, "ts": "2026-07-06T05:53:37Z", "hours": 3.5711, "text": "add more file more function just fallback for Vulkan Engine so it can run in more device"}, {"post_id": 22767, "ts": "2026-07-05T10:54:14Z", "hours": 3.7322, "text": "add support for extension check in Vulkan"}, {"post_id": 21133, "ts": "2026-07-02T22:43:28Z", "hours": 0.9317, "text": "so from now not developing any feature in Game engine for some weeks and Adding fallback to 1.1 to 1.4 vulkan bcuz lot of problem andriod don’t support 1.3 mostly and many gpu like intel have bug in bindless so just adding other to fallback bcuz other are also not good nvidia and amd also have some problem add buildbot that will test like github don’t support gpu to test most probably i will test in software cpu and build system so user can compile and run thing without having any problem so at last only problem left is gpu vendor specific that i will cover through blender o3de engine that how engine can run in most gpus i give better doc or reference next time to show it but it very hard and take month to search so that it"}, {"post_id": 20716, "ts": "2026-07-02T11:47:34Z", "hours": 1.1572, "text": "while working on my engine i take refernce from blender also contributed in blender one issues even got merged other are pending"}, {"post_id": 17338, "ts": "2026-06-28T02:42:07Z", "hours": 7.2022, "text": "jolt physics implementation in vulkan engine and some other bug fix"}, {"post_id": 11434, "ts": "2026-06-18T18:19:47Z", "hours": 1.8758, "text": "PBR light implementation done in my engine"}, {"post_id": 11050, "ts": "2026-06-18T02:35:35Z", "hours": 1.8658, "text": "reimplemented tracy profiler for my engine and working in PBR"}, {"post_id": 10211, "ts": "2026-06-16T20:38:31Z", "hours": 2.0136, "text": "one of the hardest bug to solve i did it now there no texture overlap"}, {"post_id": 9830, "ts": "2026-06-16T08:46:40Z", "hours": 4.2797, "text": "linux and window both support for vulkan engine tested in wine"}, {"post_id": 8004, "ts": "2026-06-13T11:03:28Z", "hours": 6.6514, "text": "model loading done in my engine"}, {"post_id": 5794, "ts": "2026-06-09T18:32:13Z", "hours": 0.28, "text": "update everything now moving toward 3d work and cleanup"}, {"post_id": 5693, "ts": "2026-06-09T16:07:36Z", "hours": 1.7525, "text": "finally port complete in vulkan with RHI and Linux support"}, {"post_id": 5390, "ts": "2026-06-09T04:27:45Z", "hours": 10.2675, "text": "finally rhi and wrapper test is done in vulkan"}, {"post_id": 3458, "ts": "2026-06-06T12:22:17Z", "hours": 8.22, "text": "almost write backend vulkan may i can see something in screen next week after 3 month 😵💫"}, {"post_id": 1715, "ts": "2026-06-03T21:36:09Z", "hours": 0.5761, "text": "rewriting my game engine backend in vulkan and adding support for linux"}]...
|
Title: 3d game engine by @rajaryan1492007 | Starda Title: 3d game engine by @rajaryan1492007 | Stardance
Devlogs:
rewriting my game engine backend in vulkan and adding support for linux
almost write backend vulkan may i can see something in screen next week after 3 month 😵💫
finally rhi and wrapper test is done in vulkan
finally port complete in vulkan with RHI and Linux support
update everything now moving toward 3d work and cleanup
model loading done in my engine
linux and window both support for vulkan engine tested in wine
one of the hardest bug to solve i did it now there no texture overlap
reimplemented tracy profiler for my engine and working in PBR
PBR light implementation done in my engine
jolt physics implementation in vulkan engine and some other bug fix
while working on my engine i take refernce from blender also contributed in blender one issues even got merged other are pending
so from now not developing any feature in Game engine for some weeks and Adding fallback to 1.1 to 1.4 vulkan bcuz lot of problem andriod don’t support 1.3 mostly and many gpu like intel have bug in bindless so just adding other to fallback bcuz other are also not good nvidia and amd also have some problem add buildbot that will test like github don’t support gpu to test most probably i will test in software cpu and build system so user can compile and run thing without having any problem so at last only problem left is gpu vendor specific that i will cover through blender o3de engine that how engine can run in most gpus i give better doc or reference next time to show it but it very hard and take month to search so that it
add support for extension check in Vulkan
add more file more function just fallback for Vulkan Engine so it can run in more device
implementing old renderpass and Framebuffer and other thing to run old hardware
all setup done just have to write fallback now :)
implemented many fallback feature no less crash add fallback of dynamic_rendering other are pending
Add descriptor Set fallback and Contribution guidelines
added a ci/cd test For engine with lavapipe
St making game in my game engine
added audio and animation
added text rendering
add multithreading and better sync
make better job system
just make milestone bar for realase
reading source code of o3de and make my engine barrier better
Ships:
This project has been a daily labor of love for over a year. Over the last 4 to 5 months, I completely rewrote the entire rendering backend, moving away from a legacy OpenGL state machine to an explicit Vulkan pipeline. Along the way, I completely redesigned the Rendering Hardware Interface (RHI) to align with modern graphics architectures. Welcome to UNHUMAN! You are completely free to clone and compile this engine, but please read this first: ->The 50/50 Rule: This is a custom, explicitly defined Vulkan engine currently tailored to a Ryzen/Vega Windows environment. Because Vulkan does not hide driver-level differences (NVIDIA vs. AMD vs. Intel), there is roughly a 50/50 chance it will compile flawlessly or completely explode on your specific GPU setup. ->The Easy Way Out: If you attempt to build the project and hit Vulkan validation errors, device-lost crashes, or strict compilation failures, please do not waste your time trying to debug my RHI! * Visual Verification: If the build fails on your hardware, simply watch the YouTube Walkthrough Video linked below. It contains the full visual proof of the engine running, rendering, and functioning on the native development machine. link -> https://youtu.be/CHDIU61auYo
-> I built the Unhuman Engine (UHE) a high-performance, custom 3D game engine written entirely from scratch in C++. It features a custom Vulkan rendering pipeline, Jolt Physics integration, and a 3D spatial audio system using miniaudio. Alongside the engine, I built a fully playable “Aim Lab” style 3D shooter game to showcase its capabilities, complete with skeletal animations, recoil mechanics, and a robust entity component system (ECS). -> Building a Vulkan renderer from the ground up is notoriously difficult due to how explicit the API is. Getting the Vulkan swapchains, descriptors, and framebuffers perfectly synchronized was a massive hurdle. Beyond rendering, building the virtual file system (VFS) to correctly resolve asset paths across different platforms (Linux native and Windows via Wine) required a lot of trial and error, as did managing multithreaded memory cleanup for the audio subsystem to prevent Because of the custom Vulkan architecture and strict C++ optimizations, the game hits 900+ FPS in release builds, even on integrated graphics! the custom pixel-perfect 3D entity picking system we built using Vulkan framebuffers (instead of relying on standard physics raycasting). Finally, the engine architecture is scalable enough that it’s not just for games—it’s designed to handle heavy robotics and autonomous vehicle simulations in the engine . -> The engine supports both Linux and Windows to play the game, just run the UHEGAME executable inside the bin folder. Important: Make sure the assets folder (which contains the 3D models and audio files) is sitting right next to the executable in the same directory, otherwise the game will fall back to a safe mode. Controls: Use your mouse to aim, Left Click to shoot the targets, and press ‘R’ to reload the animated 3D pistol also i write it too big bcuz last time many people said they don’t understand what i did . about running it u can run it in windows and linux both see window build and linux build there to work able excutable file one is uhegame.exe and uhe_editor.exe one is game and other is editor https://github.com/rajaryan2007/UNHUMAN/releases/tag/alpha i will improve the game as time goes i just st with vulkan and other if u have any problem u can ask here https://github.com/rajaryan2007/UNHUMAN/issues if still don’t understand don’t rate down read or search or just read devlog and understand instead of low rating thankyou :)
i just finally done all thing like stable etc . and search of all libs etc so can really work making really good engine i add milestone etc . u can still test project tho but it will just artitacture doc change and some sync bug fix . other then that i add milestone so i can work on that now but i 19 now today so my hackclub will get end so i just ship to info that . devlog is end but i will continue to work on this engine bcuz it been like year since i st working on it already so anyway . and anything u wanna know u can check my project issues and roadmap...
|
1792835790.571338
|
1792922190.571338
|
|
4470
|
Edge-AI Home Monitoring System by @Greg_ios | Star Edge-AI Home Monitoring System by @Greg_ios | Stardance...
|
Greg_ios
|
3
|
38.0
|
612
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T08:49:56Z", "hours": 18.0, "multiplier": 17.56, "payout": 308, "blessing": "neutral", "text": "Most smart homes are leased, not owned. Every command you send travels to a cloud you don’t control, owned by a company with interests misaligned to yours. This system proves that meaningful control of your physical space doesn’t require surrendering it to a vendor. Edge-AI Home Monitoring is a locally-governed, vendor-independent home automation platform designed to answer: can a household be sovereign over its own infrastructure?", "repo": "https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System", "demo": "https://edgeaihomemonitoringsystem.carrd.co/"}, {"ship_num": 2, "ts": "2026-06-30T20:49:56Z", "hours": 11.0, "multiplier": 16.61, "payout": 175, "blessing": "neutral", "text": "Over the past few weeks, Edge-AI Home Monitoring System has evolved from a basic smart home controller into a much more capable home automation platform. New Features Added YOLO-based security monitoring Integrated Telegram bot for remote alerts and device control Added support for Tapo Smart Bulbs Added support for Tapo Smart Plugs Added support for Philips Hue devices Added support for Yeelight devices Added support for LG Smart TVs Added Remote PC Control & Monitoring Infrastructure Improvements Built a full Flask server backend Added a responsive Web Dashboard Improved setup process with automated setup scripts Reworked documentation and README Reliability Improvements Refactored multiple modules with structured exception handling Added better logging and debugging tools Improved API responses and backend stability Enhanced scalability for future device integrations The project is now much closer to becoming a complete privacy-first edge AI smart home hub capable of controlling multiple device ecosystems from a single interface.", "repo": "https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System", "demo": "https://edgeaihomemonitoringsystem.carrd.co/"}, {"ship_num": 3, "ts": "2026-06-03T14:57:54Z", "hours": 9.0, "multiplier": 15.16, "payout": 129, "blessing": "neutral", "text": "I have made an Edge-AI Home Monitoring System. It is a privacy-first, edge-AI home automation hub using Linux, Flask, and real-time control to orchestrate smart devices.", "repo": "https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System", "demo": "https://edgeaihomemonitoringsystem.carrd.co/"}]...
|
[{"post_id": 30918, "ts": "202 [{"post_id": 30918, "ts": "2026-07-18T22:06:31Z", "hours": 2.7133, "text": "🧪 Reliability & CI Improvements This update also focuses on improving the project’s reliability and development workflow. What’s New Added 20 Pytest test cases covering the core functionality of the system, helping verify that critical components behave correctly and reducing the risk of regressions. Configured GitHub Actions to automatically execute the entire test suite after every commit and pull request, ensuring new changes don’t break existing functionality. Why It Matters Automated testing and Continuous Integration (CI) make the project more robust, maintainable, and production-ready. Every code change is now automatically validated before it becomes part of the project, providing faster feedback during development and increasing confidence in future updates."}, {"post_id": 29426, "ts": "2026-07-16T11:26:44Z", "hours": 2.9903, "text": "🐳 Docker Setup: 100% Functional Docker support for the Edge-AI Home Monitoring System is now fully working end-to-end. What’s New First-Run Setup via HTML : Instead of manual configuration steps, the very first launch now opens a lightweight HTML setup page that walks through the initial configuration once (credentials, device registration basics, etc.). After this one-time run, it’s never needed again — the container remembers everything through the persisted config volumes. One Command to Rule Them All : The whole system — Flask backend, Docker container, and now the first-run setup — is launched with a single script: Windows: start.bat Linux: start.sh No more manually running docker compose , checking dependencies, or following multi-step instructions. Just run the script for your OS and the entire stack comes up ready to use. Why It Matters This closes the loop on the Docker migration from a few devlogs ago. Before, Docker removed the Python/venv/dependency headaches but still required knowing the right compose commands. Now the onboarding experience is genuinely “clone → run one script → done,” with the HTML first-run page handling the last bit of manual setup that used to require touching config files by hand."}, {"post_id": 27850, "ts": "2026-07-13T18:59:41Z", "hours": 1.8536, "text": "🚀 One of the Biggest Updates: Docker-Based Setup & Minimal Installation The Edge-AI Home Monitoring System has just received its most significant infrastructure overhaul yet! We have completely re-engineered the deployment workflow. Instead of dealing with manual environment configurations, matching Python versions, and tracking down dependency conflicts, the entire ecosystem can now be spun up instantly with a single command. 🐳 What’s New: Containerized Architecture By migrating the platform to a fully containerized backend , we’ve moved away from fragile local setups closer to a production-grade deployment. Key Improvements: Isolated Environment: The Flask backend and all its core libraries run inside an isolated Docker container, completely immune to host-system configuration drifts. Automated Dependency Management: All heavy-lifting dependencies are resolved and cached automatically inside the image. State & Configuration Persistence: Your custom devices_config.json , automation rules, and local database models are securely mapped via Docker volumes, meaning they persist perfectly across container restarts and updates. High Portability: Moving the hub from a development PC to a dedicated home server (like a Fedora Linux box or a Raspberry Pi) is now completely seamless. ⚡ Setup: Before vs. After The difference in onboarding friction is night and day. Look at how the installation footprint has shrunk: Old Manual Setup New Docker Workflow ❌ Install Python manually & match versions 📦 Pre-configured runtime environment ❌ Create virtual environments ( venv ) 📦 Isolated container filesystems ❌ Debug pip dependency conflicts 📦 One-time automated image build ❌ Manually set environment variables 📦 Declarative configuration via Compose ❌ Run background scripts step-by-step 📦 Single-command multi-service launch The New Minimal Installation Path: Now, launching your privacy-first smart home hub requires nothing more than standard container tools: # Clone the repository git clone https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System # Navigate to the project root cd Edge-AI-Home-Monitoring-System # Spin up the entire system in detached mode docker compose up -d"}, {"post_id": 27230, "ts": "2026-07-12T16:46:07Z", "hours": 0.7819, "text": "UI Modernization & Native Sonos Integration 🎵🎨 A massive structural and visual update has landed! The Edge-AI Home Monitoring System dashboard has been rewritten into a production-grade, single-page interface using the modern Inter typeface family. Alongside this visual overhaul, we are introducing native, local-only support for Sonos Smart Audio Devices . What’s New 1. High-End Minimalist UI & CSS Token Architecture The new interface shifts away from crowded layouts to a highly scannable, component-driven architecture featuring a strict color and spacing utility system built directly into :root . Unified Palette System: Built entirely on minimal token foundations: light-mode canvas backgrounds ( #fafafa ), precise surface modules ( #ffffff ), and structural crisp border outlines ( #e7e7e7 / #d9d9d9 ). Blur-Effects Navigation Header ( .topbar ): A sticky system header utilizing backdrop-filter: blur(8px) that embeds the new brand mark ( A Home ) alongside a live status strip displaying the total device count, registered automations, and an immediate visual green heartbeat indicator ( .live-dot ). Decoupled Grid Control ( .grid ): Devices are rendered dynamically using a responsive auto-fill layout ( minmax(240px, 1fr) ) with explicit styling classes for device actions ( .btn.on for soft green feedback, .btn.off for soft red, and .btn.accent for special triggers). Asynchronous AI Assistant Component ( .ai-panel ): A dedicated section housing the local LLM interaction logic, optimized with a smooth CSS-animated text typing loop ( @keyframes dotfade ) to indicate processing states without blocking UI interactions. 2. Native Sonos Smart Audio Core Integration Audio control joins our local device tree. The system now natively communicates with Sonos devices over the local network via unified backend hooks, matching our privacy-first design patterns. The control grid maps the specific target API endpoints directly to native UI inputs, enabling immediate transmission of core execution parameters: play — Resumes audio streaming ( .btn.on ) pause — Pauses current media layout tracking stop — Breaks audio buffering completely ( .btn.off ) volume_up & volume_down — Alters hardware volume steps Real-Time “Now Playing” UI Subview Sonos control cards now dynamically build and inject an interactive media HUD element ( .now-playing ). Dynamic Media Binding: Communicates with the new /api/music/current endpoint via explicit POST JSON payloads ( { room, type, number, command: 'get', device } ). Visual Playback Flags: Implements dynamic active toggles ( .now-playing.playing ) that shift asset opacity states depending on network audio feedback. Non-Blocking Control Pulls: The inline manual update button ( .np-refresh ) relies on an isolated asynchronous CSS loop wrapper ( @keyframes spin ) allowing updates without triggering full dashboard asset re-renders."}, {"post_id": 27152, "ts": "2026-07-12T13:36:12Z", "hours": 0.6378, "text": "Samsung Smart TV Support Added 📺 The Edge-AI Home Monitoring System now includes full support for Samsung Smart TVs running Tizen OS, expanding the platform’s smart device ecosystem with another major TV manufacturer. This integration uses the Samsung TV WebSocket API, allowing the system to communicate directly with compatible TVs over the local network without requiring additional hardware such as IR blasters. What’s New Added a new Samsung TV backend integration using the samsungtvws Python library. Implemented support for: Power control (ON/OFF) Remote key commands Volume control Device information retrieval Samsung TVs are now registered as a native device type inside the system, following the same architecture used by other integrations such as LG WebOS, Daikin, Tapo, Hue, Yeelight, Shelly, and Broadlink. Why It Matters Until now, TV support was mainly focused on LG Smart TVs and IR-controlled televisions through Broadlink. With Samsung Smart TV support, the system can now directly control another major smart TV ecosystem using its official network interface. This improves: Response time compared to IR control Local-only communication (no cloud dependency) Compatibility with more homes Technical Details The integration communicates with Samsung TVs through: Samsung Tizen WebSocket API Local network TCP communication Device authentication pairing The system keeps the same device abstraction model used by the rest of the project, making Samsung TVs behave like any other controllable smart device. Challenges Some challenges during implementation: Handling Samsung’s first-time pairing approval system Managing WebSocket connections reliably Ensuring compatibility between different Tizen TV models Mapping Samsung remote key codes into the existing device command structure Next Steps Future improvements: Add automatic Samsung TV discovery Add real-time TV status feedback (power state, current app, volume) Add voice assistant commands for Samsung TVs - Add more controls Samsung Smart TVs are now another fully supported platform in the Edge-AI Home Monitoring System, bringing the project closer to becoming a complete privacy-first smart home hub."}, {"post_id": 26718, "ts": "2026-07-11T17:52:05Z", "hours": 0.8892, "text": "Full Broadlink Universal Remote Support The Edge-AI Home Monitoring System now includes complete support for Broadlink Universal Remotes , allowing the platform not only to learn IR commands but also to transmit them directly to infrared-controlled devices. What’s New Added a dedicated Broadlink backend integration for sending stored IR commands. Implemented a new /api/broadlink endpoint for controlling Broadlink devices from the dashboard and automation engine. Added a Broadlink device class responsible for: Connecting and authenticating with Broadlink RM-series devices. Reading learned IR codes from broadlink_codes.json . Sending IR packets using device.send_data() . Full support for controlling: TVs Air Conditioners TV Decoders / Set-Top Boxes Broadlink devices are now treated like any other supported smart device and can be used throughout the entire system. Why It Matters This is a major milestone because the system is no longer limited to devices with official APIs. Thousands of legacy appliances—including older televisions, air conditioners, and cable/satellite decoders—can now be integrated into the smart home ecosystem using only their existing infrared remote controls. Users can control these devices from: The Web Dashboard Automation Rules Future Voice Assistant integrations Any API client connected to the system This significantly expands compatibility while maintaining the project’s privacy-first, local-control philosophy. Challenges IR packets must be converted back into raw byte format before transmission. Maintaining synchronization between learned codes and registered Broadlink devices remains important as the number of supported devices grows. Multiple Broadlink hubs on the same network still require a device selection mechanism, which will be addressed in a future update. Next Steps Add automatic Broadlink hub discovery and selection. Integrate Broadlink commands into the Rule Engine as event triggers. Add support for macro commands (multiple IR signals with delays). Improve the dashboard with command management and testing tools."}, {"post_id": 26187, "ts": "2026-07-10T20:47:59Z", "hours": 1.8417, "text": "Broadlink IR Learning App + Voice Guidance in Setup The Edge-AI Home Monitoring System now has its own tool for learning IR signals, as well as voice guidance throughout the setup process. What’s Added Broadlink IR Learning App New desktop application (customtkinter) that connects to a Broadlink device (RM-series) via broadlink.discover() and authenticates automatically. Device type selection (TV / AC / Decoder) with dynamic list of commands depending on the type (on/off, channel up/down, volume, direction, menu, etc.). “Learn & Save” function: Broadlink enters learning mode, waits for the signal from the real remote control and saves the hex packet. The signals are stored in two places: broadlink_codes.json — file-library of all codes per room/device/command. devices_config.json — so that the device is automatically registered as an entry in the system’s main config, with flag is_broadlink_device: true . Voice Guidance in Setup Wizard Added text-to-speech (via pyttsx4 , in a separate thread so as not to block the UI) to each step of the setup wizard: installing dependencies, downloading AI model, creating password, setting Tailscale, Telegram token/chat ID, and registering devices. Each device type during registration (Tapo, Philips Hue, Shelly, Broadlink, etc.) now “explains” vocally which fields need to be filled in, making the process more accessible for someone who is setting up the system for the first time without reading documentation. Also added broadlink as a new device type in the setup wizard dropdown, which opens the Learning App directly when selected. Why It Matters Until now, the system only supported devices with official APIs (Tapo, Hue, Yeelight, LG WebOS, Daikin). Many “dumb” devices at home (old ACs, decoders, TVs without smart features) are controlled only via IR remote — the Broadlink learning app paves the way to integrate virtually any device with an IR remote into the ecosystem, without the need for a special library per brand. Voice guidance also makes setup more accessible — less need to read README step by step, the system tells you what to do live. Challenges async_connect of the Kasa class has incorrect syntax ( await self.device = ... instead of self.device = await ... ) — same problem as previous devlog, still pending. In the Learning App, the device data is temporarily stored in two separate files ( broadlink_codes.json and devices_config.json ) — care must be taken to ensure that they do not become out of sync if a write fails in the middle. The Broadlink device is always identified as devices[0] by broadlink.discover() — if there are multiple Broadlink devices on the network, the app will always connect to the first one found, without selection. TTS requires CoInitialize / CoUninitialize on each thread (Windows-specific), which makes the code less portable to other OSes. Next Steps Full support for sending signals via Broadlink devices (not just learning) — i.e. new /api/broadlink endpoint and Broadlink class in the backend that will read the stored hex codes from broadlink_codes.json and send them via device.send_data() . Integrate Broadlink devices as actions in the Rule Engine, so they can be used in automations like any other device. Wiring emit_device_event to Broadlink sends, so they can also be trigger sources. Fix bug in Kasa.async_connect before any other work on Kasa progresses."}, {"post_id": 25929, "ts": "2026-07-10T12:59:31Z", "hours": 0.6778, "text": "Kasa (TP-Link) Support Added The Edge-AI Home Monitoring System now supports TP-Link Kasa smart plugs/switches, using the python-kasa library’s async Discover API for device communication. What’s New New Kasa class that discovers a device by IP via Discover.discover_single() (with optional username/password for cloud-authenticated devices) and wraps turn_on / turn_off / execute_command behind the same asyncio.run() pattern already used for Daikin and the Tapo devices. New /api/kasa endpoint, gated behind @auth.login_required like the rest of the device APIs. Registered kasa in DEVICE_ENDPOINTS and wired it into create_device_action , so Kasa devices can already be used as automation actions from day one. Added send_kasa and send_daikin helper functions alongside the other device senders, for consistency across the codebase. Why This Matters Kasa is one of the most common smart plug ecosystems out there, so this adds another affordable device family to the system without needing a proprietary hub — anything plugged into a Kasa switch can now be turned on/off from the dashboard or from an automation rule, the same way Tapo and Shelly devices already are. Challenges Ran into a syntax issue in async_connect : await self.device = Discover.discover_single(...) isn’t valid — assignment has to come first, i.e. self.device = await Discover.discover_single(...) . Needs fixing before this can actually run. handle_kasa currently points at a config path ( /config/device_config.json ) that doesn’t match the filename ( devices_config.json ) or the relative-path convention used by every other handler — needs to be corrected to \"config/devices_config.json\" . Same route also references data[\"Room\"][room][dev_type][number][ip] with ip unquoted (a variable reference instead of the string key \"ip\" ), which will throw a NameError rather than the intended KeyError . emit_device_event still isn’t wired into the Kasa (or Shelly) handler, so — same as the other non-TV devices — Kasa state changes can’t yet act as automation triggers. Next Steps Fix the await /assignment order bug in Kasa.async_connect , the config path, and the unquoted \"ip\" key in /api/kasa before testing against a real device. Wire emit_device_event into Kasa, Shelly, and the remaining handlers so any device can act as both an action and a trigger. Once event emission is consistent across all device types, move on to energy monitoring for the Tapo smart plugs."}, {"post_id": 25885, "ts": "2026-07-10T11:31:06Z", "hours": 0.695, "text": "Shelly Support Added The Edge-AI Home Monitoring System now supports Shelly smart relays, using the ShellyPy library to control relay-based devices (plugs, switches, etc.) over the local network. What’s New New Shelly class wrapping ShellyPy.Shelly , with turn_on_relay / turn_off_relay methods and an execute_command dispatcher for on / off commands. New /api/shelly endpoint that reads the device’s IP and relay_number from devices_config.json and forwards the command to the relay. Registered shelly in DEVICE_ENDPOINTS and wired it into create_device_action , so Shelly devices can already be used as automation actions (schedule or event triggered), same as every other device type. Why This Matters Shelly relays are a common, cheap way to add “dumb” appliances into the automation system — a fan, a boiler, anything behind a relay can now be toggled from the dashboard or from a rule, without needing a dedicated smart-device ecosystem. Challenges Noticed /api/shelly is currently missing the @auth.login_required decorator that every other device endpoint has — since authentication was added, this is the one route that slipped through. Needs to be fixed before this ships anywhere network-exposed. Shelly relays are addressed by relay_number rather than an id /model like the other integrations, so the config schema needed a small variation ( relay_number field) instead of reusing the existing device pattern exactly. emit_device_event isn’t wired into the Shelly handler yet, so — like the other non-TV devices — a Shelly state change can’t currently act as a trigger for other automations. Next Steps Add the missing @auth.login_required to /api/shelly . Wire emit_device_event into the Shelly (and remaining) handlers so any device can be both an action and a trigger source. Once event emission is consistent across all device types, move on to energy monitoring for the Tapo smart plugs."}, {"post_id": 25861, "ts": "2026-07-10T10:45:47Z", "hours": 0.7478, "text": "Device-Triggered Chaining: Automations Now React to Device State Changes The Rule Engine already supported schedule triggers and one hardcoded event source (the YOLO “person_detected” signal). This update adds a much more general capability: automations can now trigger off of any device state change , not just security events. What’s New Added emit_device_event(room, dev_type, command), a helper that builds an event name in the form {room} {dev_type} {command} (e.g. living_room_lg_tv_on) and forwards it to AutomationManager.trigger_event. Wired this into the /api/tv endpoint: every time a TV command succeeds, the system now emits an event describing exactly what just happened. This means a rule can be created like “when the Living Room TV turns on → turn on the Living Room lights” without any new trigger type — it reuses the same event-rule machinery already built for the security pipeline. Event names are deterministic and human-readable, so building new automations from the dashboard just means picking the right device + command combo as the trigger. Why This Matters Until now, “smart” behavior meant either a fixed schedule or a single special-cased sensor event. This generalizes the pattern: any device action can become a trigger for any other device action, which is the actual foundation of “automation chaining” (TV on → lights on, plug on → AC on, etc.) rather than a one-off integration. Challenges emit_device_event is currently only called from the TV handler. The Tapo, Philips Hue, Yeelight, and Daikin handlers don’t emit events yet, so right now only TV state changes can kick off a chain — everything else is still a dead end as a trigger source. This is the next thing to close. Needed to be careful that emitting the event happens after the command actually succeeds, not just after it’s requested, so a failed TV command doesn’t fire a chain based on a state change that never happened. Next Steps Add emit_device_event calls to the remaining device handlers (Tapo light/LED strip, Hue, Yeelight, Daikin) so any device can act as a trigger, not just TVs. Once persistence for automation actions is fully solid across restarts, move on to energy monitoring for the Tapo smart plugs."}, {"post_id": 23760, "ts": "2026-07-06T21:49:22Z", "hours": 0.7892, "text": "Automations are Live: Schedules & Event Triggers The Rule Engine I mentioned as “next steps” in the last few devlogs is now fully working. The Edge-AI Home Monitoring System can now react on its own, without me touching the dashboard. What’s New New AutomationManager class that manages rules independently of the Flask request lifecycle, running on its own background thread Schedule triggers : fire any device action at a specific time of day (cron-based under the hood, e.g. “turn off all lights at 23:30”) Event triggers : fire actions the moment something happens in the system — currently wired up to the YOLO security pipeline, so a rule can say “when a person is detected, turn on the living room lights” Automations are managed straight from the dashboard: add a rule (pick a device, a command, and either a time or an event), see the active list, delete on demand — no need to touch the config files by hand Rules persist to disk, so they survive a server restart Challenges The trickiest part wasn’t the scheduling logic itself — it was making sure automation actions don’t accidentally go through the same path as normal API requests. Since every device endpoint is gated behind session-based login, having the automation thread call itself over HTTP triggered 401s (a background thread has no browser session, obviously). Fixed by having automation actions call the device classes directly instead of looping back through HTTP — cleaner and faster anyway, since it skips a full request round-trip for something that’s technically internal. Next Steps Energy monitoring for the Tapo smart plugs, so automations can eventually be built around actual consumption data too."}, {"post_id": 23432, "ts": "2026-07-06T12:12:20Z", "hours": 0.7306, "text": "Create Autoation Manager class"}, {"post_id": 23410, "ts": "2026-07-06T10:52:32Z", "hours": 0.8403, "text": "Added Daikin AC Support The Edge-AI Home Monitoring System now extends into climate control. I’ve added full support for Daikin air conditioners, using the pydaikin library for asynchronous communication with the device over the network. What’s New New DaikinAC class with full control: on/off, increase/decrease temperature, and mode switching (auto, cool, heat, dry, fan) New /api/daikin endpoint for device communication Integrated into the same authentication pattern used across the whole system ( @auth.login_required ), so no new device ecosystem opens a security gap Dashboard controls for Daikin devices, including a mode selection dropdown Challenges Since pydaikin is fully asynchronous (async context managers), each client call had to be wrapped with asyncio.run() to fit into the rest of the synchronous Flask backend — the same approach used for the Tapo devices. Next Steps Rule Engine / Automations system, followed by energy monitoring for the Tapo smart plugs."}, {"post_id": 23380, "ts": "2026-07-06T09:40:25Z", "hours": 0.3508, "text": "Improving the Project Structure One of the biggest challenges in the project was the lack of organization. As the codebase grew, it became harder to navigate and maintain. Today I reorganized the project into a much cleaner structure, making the code easier to understand, extend, and maintain. While there’s still room for improvement, this is a solid step toward a more scalable architecture. What’s Next? Add automation features. Implement energy consumption monitoring for Tapo devices."}, {"post_id": 23116, "ts": "2026-07-05T21:29:56Z", "hours": 0.9906, "text": "Added Authentication System Up until now, the dashboard and all API endpoints were completely open to anyone on the network — a serious problem for a system that controls cameras, smart devices, and even has Remote PC Control capabilities. I implemented a single-admin authentication layer using Flask sessions and password hashing (werkzeug), gating access behind a login page. Key changes: Added a /login route with session-based authentication Passwords are hashed (never stored in plain text) using pbkdf2:sha256 Wrapped every sensitive route with a @login_required decorator — dashboard, device control APIs, camera toggle, and system/remote-PC endpoints API routes return a clean 401 Unauthorized instead of redirecting, so the frontend can handle it gracefully Sessions auto-expire, requiring re-login after a set period This closes the biggest security gap in the project — previously, anyone with access to the local network or Tailscale IP could control devices or the PC without any barrier. Now, all of that is locked behind credentials only I know. Next steps: Rule engine for automations (trigger-based actions), followed by energy monitoring for Tapo smart plugs."}, {"post_id": 15904, "ts": "2026-06-25T21:00:48Z", "hours": 1.1647, "text": "One of the biggest improvements in this update is the error handling system. Originally, the project had very minimal error management, which could lead to unstable behavior and unclear debugging. I refactored multiple modules to introduce structured exception handling, improved logging, and more consistent API responses. This makes the system significantly more stable and easier to debug in real-world usage."}, {"post_id": 15616, "ts": "2026-06-25T12:18:35Z", "hours": 0.5661, "text": "Integration of Remote PC Control & Monitoring into Edge-AI Home Monitoring System. This way the user can control the system remotely. There is a problem with the management of Processes due to an error in the backend."}, {"post_id": 7988, "ts": "2026-06-13T10:14:41Z", "hours": 0.3117, "text": "I added support for Yeelight. It may have only taken me 15 minutes but that was because the Yeelight library I used was very simple. Also because the system is easily extensible I managed to do it in a very short time."}, {"post_id": 7979, "ts": "2026-06-13T09:46:03Z", "hours": 0.7483, "text": "Add fully suppourt for phue devices"}, {"post_id": 7959, "ts": "2026-06-13T08:58:51Z", "hours": 0.2869, "text": "Make the main class and logic for the Philips Hue lights"}, {"post_id": 4423, "ts": "2026-06-07T19:02:12Z", "hours": 0.5789, "text": "Add suppourt for Tapo Smart Plugs"}, {"post_id": 2743, "ts": "2026-06-05T14:46:14Z", "hours": 0.3408, "text": "Add model selection for tapo led strip and tapo light bulbs and make a more clear README.md"}, {"post_id": 2730, "ts": "2026-06-05T14:17:19Z", "hours": 0.6944, "text": "Setup the server! The project will be fully ready soon!!!"}, {"post_id": 2703, "ts": "2026-06-05T12:30:07Z", "hours": 0.5861, "text": "A better setup and run for servers and a more clear README.md"}, {"post_id": 2689, "ts": "2026-06-05T11:33:31Z", "hours": 1.47, "text": "Make a functional server App"}, {"post_id": 2100, "ts": "2026-06-04T13:04:12Z", "hours": 0.7119, "text": "LG TVs in Edge AI Home Monitoring System from now!!!!!!"}, {"post_id": 2071, "ts": "2026-06-04T11:56:50Z", "hours": 0.5139, "text": "Working on LG TV suppourt"}, {"post_id": 2060, "ts": "2026-06-04T11:23:24Z", "hours": 1.1203, "text": "From now Edge-AI Home Monitoring System suppourt tapo smart bulbs!!!!"}, {"post_id": 1538, "ts": "2026-06-03T16:50:58Z", "hours": 0.5186, "text": "Make a telegram bot for easily security and device control"}, {"post_id": 1509, "ts": "2026-06-03T16:05:24Z", "hours": 0.9681, "text": "Making a sequrity system using YOLO and Telegram"}, {"post_id": 1467, "ts": "2026-06-03T14:56:45Z", "hours": 0.5039, "text": "Make a better README.md file and finalize the setup proccess"}, {"post_id": 1426, "ts": "2026-06-03T13:37:14Z", "hours": 0.7961, "text": "Make better readme"}, {"post_id": 1394, "ts": "2026-06-03T12:31:57Z", "hours": 1.1769, "text": "Make a setup script"}, {"post_id": 1370, "ts": "2026-06-03T11:15:13Z", "hours": 1.5264, "text": "Make an app for easy use of AI and also ad functional control for the L900 tapo ledstrip"}, {"post_id": 1343, "ts": "2026-06-03T09:16:06Z", "hours": 1.48, "text": "A new modern dashboard and more devices"}, {"post_id": 757, "ts": "2026-06-02T12:08:30Z", "hours": 1.3436, "text": "Performance Optimization & Frontend Integration After intensive testing, the communication system with Android TV devices has been fully upgraded. The latency observed in command execution has been eliminated, and the project now features its own Web Dashboard. Key Achievements: ADB Server Persistence: Resolved the critical issue regarding the continuous restart of the ADB server. By adopting the Registry Pattern, connections are now maintained (persistent), drastically reducing response time from 5+ seconds to near-zero (real-time). Scalability: The backend has been developed to support the simultaneous control of multiple Android TVs. The system now dynamically manages connections via a central dictionary, allowing for the addition of unlimited devices through devices.json. Frontend Dashboard: Developed a minimal and responsive interface (HTML/JS) that provides full device control. Communication with the server is now handled via the Fetch API with proper CORS and JSON payload handling. Robust Error Handling: Upgraded the error reporting mechanism. The server now actively monitors module status and allows for automatic reset in case of connection restoration. Next Steps: Integration of real-time status feedback to monitor whether a TV is ON/OFF directly on the dashboard. Further optimization of utils.py for more secure inter-module communication."}, {"post_id": 723, "ts": "2026-06-02T09:50:03Z", "hours": 1.6753, "text": "Establishing the Backend Infrastructure for Edge AI Home Monitoring System Today, I successfully built the core communication layer for my Edge AI Home Monitoring System. I focused on creating a robust backend using Flask, enabling the system to act as a central hub for my home devices. Key Achievements: API Orchestration: Developed Flask endpoints (/api/light and /api/tv) to handle state management and device control requests efficiently. Hardware Integration: Implemented an abstraction layer for AndroidTV control, allowing the server to issue commands like power toggles, volume adjustment, and channel navigation over the network. Dynamic Configuration: Built a utility module to handle JSON-based device mapping, ensuring the system can scale easily by reading device IPs and types from a central devices.json configuration file. Logging System: Integrated a custom logger to monitor command execution in real-time, which is essential for debugging my edge-computing setup. Next Steps: Now that the server is successfully running and handling commands, the next phase is to add more devices and create the frontend dashboard."}]...
|
Title: Edge-AI Home Monitoring System by @Greg_ios Title: Edge-AI Home Monitoring System by @Greg_ios | Stardance
Devlogs:
Establishing the Backend Infrastructure for Edge AI Home Monitoring System Today, I successfully built the core communication layer for my Edge AI Home Monitoring System. I focused on creating a robust backend using Flask, enabling the system to act as a central hub for my home devices. Key Achievements: API Orchestration: Developed Flask endpoints (/api/light and /api/tv) to handle state management and device control requests efficiently. Hardware Integration: Implemented an abstraction layer for AndroidTV control, allowing the server to issue commands like power toggles, volume adjustment, and channel navigation over the network. Dynamic Configuration: Built a utility module to handle JSON-based device mapping, ensuring the system can scale easily by reading device IPs and types from a central devices.json configuration file. Logging System: Integrated a custom logger to monitor command execution in real-time, which is essential for debugging my edge-computing setup. Next Steps: Now that the server is successfully running and handling commands, the next phase is to add more devices and create the frontend dashboard.
Performance Optimization & Frontend Integration After intensive testing, the communication system with Android TV devices has been fully upgraded. The latency observed in command execution has been eliminated, and the project now features its own Web Dashboard. Key Achievements: ADB Server Persistence: Resolved the critical issue regarding the continuous restart of the ADB server. By adopting the Registry Pattern, connections are now maintained (persistent), drastically reducing response time from 5+ seconds to near-zero (real-time). Scalability: The backend has been developed to support the simultaneous control of multiple Android TVs. The system now dynamically manages connections via a central dictionary, allowing for the addition of unlimited devices through devices.json. Frontend Dashboard: Developed a minimal and responsive interface (HTML/JS) that provides full device control. Communication with the server is now handled via the Fetch API with proper CORS and JSON payload handling. Robust Error Handling: Upgraded the error reporting mechanism. The server now actively monitors module status and allows for automatic reset in case of connection restoration. Next Steps: Integration of real-time status feedback to monitor whether a TV is ON/OFF directly on the dashboard. Further optimization of utils.py for more secure inter-module communication.
A new modern dashboard and more devices
Make an app for easy use of AI and also ad functional control for the L900 tapo ledstrip
Make a setup script
Make better readme
Make a better README.md file and finalize the setup proccess
Making a sequrity system using YOLO and Telegram
Make a telegram bot for easily security and device control
From now Edge-AI Home Monitoring System suppourt tapo smart bulbs!!!!
Working on LG TV suppourt
LG TVs in Edge AI Home Monitoring System from now!!!!!!
Make a functional server App
A better setup and run for servers and a more clear README.md
Setup the server! The project will be fully ready soon!!!
Add model selection for tapo led strip and tapo light bulbs and make a more clear README.md
Add suppourt for Tapo Smart Plugs
Make the main class and logic for the Philips Hue lights
Add fully suppourt for phue devices
I added support for Yeelight. It may have only taken me 15 minutes but that was because the Yeelight library I used was very simple. Also because the system is easily extensible I managed to do it in a very short time.
Integration of Remote PC Control & Monitoring into Edge-AI Home Monitoring System. This way the user can control the system remotely. There is a problem with the management of Processes due to an error in the backend.
One of the biggest improvements in this update is the error handling system. Originally, the project had very minimal error management, which could lead to unstable behavior and unclear debugging. I refactored multiple modules to introduce structured exception handling, improved logging, and more consistent API responses. This makes the system significantly more stable and easier to debug in real-world usage.
Added Authentication System Up until now, the dashboard and all API endpoints were completely open to anyone on the network — a serious problem for a system that controls cameras, smart devices, and even has Remote PC Control capabilities. I implemented a single-admin authentication layer using Flask sessions and password hashing (werkzeug), gating access behind a login page. Key changes: Added a /login route with session-based authentication Passwords are hashed (never stored in plain text) using pbkdf2:sha256 Wrapped every sensitive route with a @login_required decorator — dashboard, device control APIs, camera toggle, and system/remote-PC endpoints API routes return a clean 401 Unauthorized instead of redirecting, so the frontend can handle it gracefully Sessions auto-expire, requiring re-login after a set period This closes the biggest security gap in the project — previously, anyone with access to the local network or Tailscale IP could control devices or the PC without any barrier. Now, all of that is locked behind credentials only I know. Next steps: Rule engine for automations (trigger-based actions), followed by energy monitoring for Tapo smart plugs.
Improving the Project Structure One of the biggest challenges in the project was the lack of organization. As the codebase grew, it became harder to navigate and maintain. Today I reorganized the project into a much cleaner structure, making the code easier to understand, extend, and maintain. While there’s still room for improvement, this is a solid step toward a more scalable architecture. What’s Next? Add automation features. Implement energy consumption monitoring for Tapo devices.
Added Daikin AC Support The Edge-AI Home Monitoring System now extends into climate control. I’ve added full support for Daikin air conditioners, using the pydaikin library for asynchronous communication with the device over the network. What’s New New DaikinAC class with full control: on/off, increase/decrease temperature, and mode switching (auto, cool, heat, dry, fan) New /api/daikin endpoint for device communication Integrated into the same authentication pattern used across the whole system ( @auth.login_required ), so no new device ecosystem opens a security gap Dashboard controls for Daikin devices, including a mode selection dropdown Challenges Since pydaikin is fully asynchronous (async context managers), each client call had to be wrapped with asyncio.run() to fit into the rest of the synchronous Flask backend — the same approach used for the Tapo devices. Next Steps Rule Engine / Automations system, followed by energy monitoring for the Tapo smart plugs.
Create Autoation Manager class
Automations are Live: Schedules & Event Triggers The Rule Engine I mentioned as “next steps” in the last few devlogs is now fully working. The Edge-AI Home Monitoring System can now react on its own, without me touching the dashboard. What’s New New AutomationManager class that manages rules independently of the Flask request lifecycle, running on its own background thread Schedule triggers : fire any device action at a specific time of day (cron-based under the hood, e.g. “turn off all lights at 23:30”) Event triggers : fire actions the moment something happens in the system — currently wired up to the YOLO security pipeline, so a rule can say “when a person is detected, turn on the living room lights” Automations are managed straight from the dashboard: add a rule (pick a device, a command, and either a time or an event), see the active list, delete on demand — no need to touch the config files by hand Rules persist to disk, so they survive a server restart Challenges The trickiest part wasn’t the scheduling logic itself — it was making sure automation actions don’t accidentally go through the same path as normal API requests. Since every device endpoint is gated behind session-based login, having the automation thread call itself over HTTP triggered 401s (a background thread has no browser session, obviously). Fixed by having automation actions call the device classes directly instead of looping back through HTTP — cleaner and faster anyway, since it skips a full request round-trip for something that’s technically internal. Next Steps Energy monitoring for the Tapo smart plugs, so automations can eventually be built around actual consumption data too.
Device-Triggered Chaining: Automations Now React to Device State Changes The Rule Engine already supported schedule triggers and one hardcoded event source (the YOLO “person_detected” signal). This update adds a much more general capability: automations can now trigger off of any device state change , not just security events. What’s New Added emit_device_event(room, dev_type, command), a helper that builds an event name in the form {room} {dev_type} {command} (e.g. living_room_lg_tv_on) and forwards it to AutomationManager.trigger_event. Wired this into the /api/tv endpoint: every time a TV command succeeds, the system now emits an event describing exactly what just happened. This means a rule can be created like “when the Living Room TV turns on → turn on the Living Room lights” without any new trigger type — it reuses the same event-rule machinery already built for the security pipeline. Event names are deterministic and human-readable, so building new automations from the dashboard just means picking the right device + command combo as the trigger. Why This Matters Until now, “smart” behavior meant either a fixed schedule or a single special-cased sensor event. This generalizes the pattern: any device action can become a trigger for any other device action, which is the actual foundation of “automation chaining” (TV on → lights on, plug on → AC on, etc.) rather than a one-off integration. Challenges emit_device_event is currently only called from the TV handler. The Tapo, Philips Hue, Yeelight, and Daikin handlers don’t emit events yet, so right now only TV state changes can kick off a chain — everything else is still a dead end as a trigger source. This is the next thing to close. Needed to be careful that emitting the event happens after the command actually succeeds, not just after it’s requested, so a failed TV command doesn’t fire a chain based on a state change that never happened. Next Steps Add emit_device_event calls to the remaining device handlers (Tapo light/LED strip, Hue, Yeelight, Daikin) so any device can act as a trigger, not just TVs. Once persistence for automation actions is fully solid across restarts, move on to energy monitoring for the Tapo smart plugs.
Shelly Support Added The Edge-AI Home Monitoring System now supports Shelly smart relays, using the ShellyPy library to control relay-based devices (plugs, switches, etc.) over the local network. What’s New New Shelly class wrapping ShellyPy.Shelly , with turn_on_relay / turn_off_relay methods and an execute_command dispatcher for on / off commands. New /api/shelly endpoint that reads the device’s IP and relay_number from devices_config.json and forwards the command to the relay. Registered shelly in DEVICE_ENDPOINTS and wired it into create_device_action , so Shelly devices can already be used as automation actions (schedule or event triggered), same as every other device type. Why This Matters Shelly relays are a common, cheap way to add “dumb” appliances into the automation system — a fan, a boiler, anything behind a relay can now be toggled from the dashboard or from a rule, without needing a dedicated smart-device ecosystem. Challenges Noticed /api/shelly is currently missing the @auth.login_required decorator that every other device endpoint has — since authentication was added, this is the one route that slipped through. Needs to be fixed before this ships anywhere network-exposed. Shelly relays are addressed by relay_number rather than an id /model like the other integrations, so the config schema needed a small variation ( relay_number field) instead of reusing the existing device pattern exactly. emit_device_event isn’t wired into the Shelly handler yet, so — like the other non-TV devices — a Shelly state change can’t currently act as a trigger for other automations. Next Steps Add the missing @auth.login_required to /api/shelly . Wire emit_device_event into the Shelly (and remaining) handlers so any device can be both an action and a trigger source. Once event emission is consistent across all device types, move on to energy monitoring for the Tapo smart plugs.
Kasa (TP-Link) Support Added The Edge-AI Home Monitoring System now supports TP-Link Kasa smart plugs/switches, using the python-kasa library’s async Discover API for device communication. What’s New New Kasa class that discovers a device by IP via Discover.discover_single() (with optional username/password for cloud-authenticated devices) and wraps turn_on / turn_off / execute_command behind the same asyncio.run() pattern already used for Daikin and the Tapo devices. New /api/kasa endpoint, gated behind @auth.login_required like the rest of the device APIs. Registered kasa in DEVICE_ENDPOINTS and wired it into create_device_action , so Kasa devices can already be used as automation actions from day one. Added send_kasa and send_daikin helper functions alongside the other device senders, for consistency across the codebase. Why This Matters Kasa is one of the most common smart plug ecosystems out there, so this adds another affordable device family to the system without needing a proprietary hub — anything plugged into a Kasa switch can now be turned on/off from the dashboard or from an automation rule, the same way Tapo and Shelly devices already are. Challenges Ran into a syntax issue in async_connect : await self.device = Discover.discover_single(...) isn’t valid — assignment has to come first, i.e. self.device = await Discover.discover_single(...) . Needs fixing before this can actually run. handle_kasa currently points at a config path ( /config/device_config.json ) that doesn’t match the filename ( devices_config.json ) or the relative-path convention used by every other handler — needs to be corrected to "config/devices_config.json" . Same route also references data["Room"][room][dev_type][number][ip] with ip unquoted (a variable reference instead of the string key "ip" ), which will throw a NameError rather than the intended KeyError . emit_device_event still isn’t wired into the Kasa (or Shelly) handler, so — same as the other non-TV devices — Kasa state changes can’t yet act as automation triggers. Next Steps Fix the await /assignment order bug in Kasa.async_connect , the config path, and the unquoted "ip" key in /api/kasa before testing against a real device. Wire emit_device_event into Kasa, Shelly, and the remaining handlers so any device can act as both an action and a trigger. Once event emission is consistent across all device types, move on to energy monitoring for the Tapo smart plugs.
Broadlink IR Learning App + Voice Guidance in Setup The Edge-AI Home Monitoring System now has its own tool for learning IR signals, as well as voice guidance throughout the setup process. What’s Added Broadlink IR Learning App New desktop application (customtkinter) that connects to a Broadlink device (RM-series) via broadlink.discover() and authenticates automatically. Device type selection (TV / AC / Decoder) with dynamic list of commands depending on the type (on/off, channel up/down, volume, direction, menu, etc.). “Learn & Save” function: Broadlink enters learning mode, waits for the signal from the real remote control and saves the hex packet. The signals are stored in two places: broadlink_codes.json — file-library of all codes per room/device/command. devices_config.json — so that the device is automatically registered as an entry in the system’s main config, with flag is_broadlink_device: true . Voice Guidance in Setup Wizard Added text-to-speech (via pyttsx4 , in a separate thread so as not to block the UI) to each step of the setup wizard: installing dependencies, downloading AI model, creating password, setting Tailscale, Telegram token/chat ID, and registering devices. Each device type during registration (Tapo, Philips Hue, Shelly, Broadlink, etc.) now “explains” vocally which fields need to be filled in, making the process more accessible for someone who is setting up the system for the first time without reading documentation. Also added broadlink as a new device type in the setup wizard dropdown, which opens the Learning App directly when selected. Why It Matters Until now, the system only supported devices with official APIs (Tapo, Hue, Yeelight, LG WebOS, Daikin). Many “dumb” devices at home (old ACs, decoders, TVs without smart features) are controlled only via IR remote — the Broadlink learning app paves the way to integrate virtually any device with an IR remote into the ecosystem, without the need for a special library per brand. Voice guidance also makes setup more accessible — less need to read README step by step, the system tells you what to do live. Challenges async_connect of the Kasa class has incorrect syntax ( await self.device = ... instead of self.device = await ... ) — same problem as previous devlog, still pending. In the Learning App, the device data is temporarily stored in two separate files ( broadlink_codes.json and devices_config.json ) — care must be taken to ensure that they do not become out of sync if a write fails in the middle. The Broadlink device is always identified as devices[0] by broadlink.discover() — if there are multiple Broadlink devices on the network, the app will always connect to the first one found, without selection. TTS requires CoInitialize / CoUninitialize on each thread (Windows-specific), which makes the code less portable to other OSes. Next Steps Full support for sending signals via Broadlink devices (not just learning) — i.e. new /api/broadlink endpoint and Broadlink class in the backend that will read the stored hex codes from broadlink_codes.json and send them via device.send_data() . Integrate Broadlink devices as actions in the Rule Engine, so they can be used in automations like any other device. Wiring emit_device_event to Broadlink sends, so they can also be trigger sources. Fix bug in Kasa.async_connect before any other work on Kasa progresses.
Full Broadlink Universal Remote Support The Edge-AI Home Monitoring System now includes complete support for Broadlink Universal Remotes , allowing the platform not only to learn IR commands but also to transmit them directly to infrared-controlled devices. What’s New Added a dedicated Broadlink backend integration for sending stored IR commands. Implemented a new /api/broadlink endpoint for controlling Broadlink devices from the dashboard and automation engine. Added a Broadlink device class responsible for: Connecting and authenticating with Broadlink RM-series devices. Reading learned IR codes from broadlink_codes.json . Sending IR packets using device.send_data() . Full support for controlling: TVs Air Conditioners TV Decoders / Set-Top Boxes Broadlink devices are now treated like any other supported smart device and can be used throughout the entire system. Why It Matters This is a major milestone because the system is no longer limited to devices with official APIs. Thousands of legacy appliances—including older televisions, air conditioners, and cable/satellite decoders—can now be integrated into the smart home ecosystem using only their existing infrared remote controls. Users can control these devices from: The Web Dashboard Automation Rules Future Voice Assistant integrations Any API client connected to the system This significantly expands compatibility while maintaining the project’s privacy-first, local-control philosophy. Challenges IR packets must be converted back into raw byte format before transmission. Maintaining synchronization between learned codes and registered Broadlink devices remains important as the number of supported devices grows. Multiple Broadlink hubs on the same network still require a device selection mechanism, which will be addressed in a future update. Next Steps Add automatic Broadlink hub discovery and selection. Integrate Broadlink commands into the Rule Engine as event triggers. Add support for macro commands (multiple IR signals with delays). Improve the dashboard with command management and testing tools.
Samsung Smart TV Support Added 📺 The Edge-AI Home Monitoring System now includes full support for Samsung Smart TVs running Tizen OS, expanding the platform’s smart device ecosystem with another major TV manufacturer. This integration uses the Samsung TV WebSocket API, allowing the system to communicate directly with compatible TVs over the local network without requiring additional hardware such as IR blasters. What’s New Added a new Samsung TV backend integration using the samsungtvws Python library. Implemented support for: Power control (ON/OFF) Remote key commands Volume control Device information retrieval Samsung TVs are now registered as a native device type inside the system, following the same architecture used by other integrations such as LG WebOS, Daikin, Tapo, Hue, Yeelight, Shelly, and Broadlink. Why It Matters Until now, TV support was mainly focused on LG Smart TVs and IR-controlled televisions through Broadlink. With Samsung Smart TV support, the system can now directly control another major smart TV ecosystem using its official network interface. This improves: Response time compared to IR control Local-only communication (no cloud dependency) Compatibility with more homes Technical Details The integration communicates with Samsung TVs through: Samsung Tizen WebSocket API Local network TCP communication Device authentication pairing The system keeps the same device abstraction model used by the rest of the project, making Samsung TVs behave like any other controllable smart device. Challenges Some challenges during implementation: Handling Samsung’s first-time pairing approval system Managing WebSocket connections reliably Ensuring compatibility between different Tizen TV models Mapping Samsung remote key codes into the existing device command structure Next Steps Future improvements: Add automatic Samsung TV discovery Add real-time TV status feedback (power state, current app, volume) Add voice assistant commands for Samsung TVs - Add more controls Samsung Smart TVs are now another fully supported platform in the Edge-AI Home Monitoring System, bringing the project closer to becoming a complete privacy-first smart home hub.
UI Modernization & Native Sonos Integration 🎵🎨 A massive structural and visual update has landed! The Edge-AI Home Monitoring System dashboard has been rewritten into a production-grade, single-page interface using the modern Inter typeface family. Alongside this visual overhaul, we are introducing native, local-only support for Sonos Smart Audio Devices . What’s New 1. High-End Minimalist UI & CSS Token Architecture The new interface shifts away from crowded layouts to a highly scannable, component-driven architecture featuring a strict color and spacing utility system built directly into :root . Unified Palette System: Built entirely on minimal token foundations: light-mode canvas backgrounds ( #fafafa ), precise surface modules ( #ffffff ), and structural crisp border outlines ( #e7e7e7 / #d9d9d9 ). Blur-Effects Navigation Header ( .topbar ): A sticky system header utilizing backdrop-filter: blur(8px) that embeds the new brand mark ( A Home ) alongside a live status strip displaying the total device count, registered automations, and an immediate visual green heartbeat indicator ( .live-dot ). Decoupled Grid Control ( .grid ): Devices are rendered dynamically using a responsive auto-fill layout ( minmax(240px, 1fr) ) with explicit styling classes for device actions ( .btn.on for soft green feedback, .btn.off for soft red, and .btn.accent for special triggers). Asynchronous AI Assistant Component ( .ai-panel ): A dedicated section housing the local LLM interaction logic, optimized with a smooth CSS-animated text typing loop ( @keyframes dotfade ) to indicate processing states without blocking UI interactions. 2. Native Sonos Smart Audio Core Integration Audio control joins our local device tree. The system now natively communicates with Sonos devices over the local network via unified backend hooks, matching our privacy-first design patterns. The control grid maps the specific target API endpoints directly to native UI inputs, enabling immediate transmission of core execution parameters: play — Resumes audio streaming ( .btn.on ) pause — Pauses current media layout tracking stop — Breaks audio buffering completely ( .btn.off ) volume_up & volume_down — Alters hardware volume steps Real-Time “Now Playing” UI Subview Sonos control cards now dynamically build and inject an interactive media HUD element ( .now-playing ). Dynamic Media Binding: Communicates with the new /api/music/current endpoint via explicit POST JSON payloads ( { room, type, number, command: 'get', device } ). Visual Playback Flags: Implements dynamic active toggles ( .now-playing.playing ) that shift asset opacity states depending on network audio feedback. Non-Blocking Control Pulls: The inline manual update button ( .np-refresh ) relies on an isolated asynchronous CSS loop wrapper ( @keyframes spin ) allowing updates without triggering full dashboard asset re-renders.
🚀 One of the Biggest Updates: Docker-Based Setup & Minimal Installation The Edge-AI Home Monitoring System has just received its most significant infrastructure overhaul yet! We have completely re-engineered the deployment workflow. Instead of dealing with manual environment configurations, matching Python versions, and tracking down dependency conflicts, the entire ecosystem can now be spun up instantly with a single command. 🐳 What’s New: Containerized Architecture By migrating the platform to a fully containerized backend , we’ve moved away from fragile local setups closer to a production-grade deployment. Key Improvements: Isolated Environment: The Flask backend and all its core libraries run inside an isolated Docker container, completely immune to host-system configuration drifts. Automated Dependency Management: All heavy-lifting dependencies are resolved and cached automatically inside the image. State & Configuration Persistence: Your custom devices_config.json , automation rules, and local database models are securely mapped via Docker volumes, meaning they persist perfectly across container restarts and updates. High Portability: Moving the hub from a development PC to a dedicated home server (like a Fedora Linux box or a Raspberry Pi) is now completely seamless. ⚡ Setup: Before vs. After The difference in onboarding friction is night and day. Look at how the installation footprint has shrunk: Old Manual Setup New Docker Workflow ❌ Install Python manually & match versions 📦 Pre-configured runtime environment ❌ Create virtual environments ( venv ) 📦 Isolated container filesystems ❌ Debug pip dependency conflicts 📦 One-time automated image build ❌ Manually set environment variables 📦 Declarative configuration via Compose ❌ Run background scripts step-by-step 📦 Single-command multi-service launch The New Minimal Installation Path: Now, launching your privacy-first smart home hub requires nothing more than standard container tools: # Clone the repository git clone https://github.com/travletothefurureprogramming/Edge-AI-Home-Monitoring-System # Navigate to the project root cd Edge-AI-Home-Monitoring-System # Spin up the entire system in detached mode docker compose up -d
🐳 Docker Setup: 100% Functional Docker support for the Edge-AI Home Monitoring System is now fully working end-to-end. What’s New First-Run Setup via HTML : Instead of manual configuration steps, the very first launch now opens a lightweight HTML setup page that walks through the initial configuration once (credentials, device registration basics, etc.). After this one-time run, it’s never needed again — the container remembers everything through the persisted config volumes. One Command to Rule Them All : The whole system — Flask backend, Docker container, and now the first-run setup — is launched with a single script: Windows: start.bat Linux: start.sh No more manually running docker compose , checking dependencies, or following multi-step instructions. Just run the script for your OS and the entire stack comes up ready to use. Why It Matters This closes the loop on the Docker migration from a few devlogs ago. Before, Docker removed the Python/venv/dependency headaches but still required knowing the right compose commands. Now the onboarding experience is genuinely “clone → run one script → done,” with the HTML first-run page handling the last bit of manual setup that used to require touching config files by hand.
🧪 Reliability & CI Improvements This update also focuses on improving the project’s reliability and development workflow. What’s New Added 20 Pytest test cases covering the core functionality of the system, helping verify that critical components behave correctly and reducing the risk of regressions. Configured GitHub Actions to automatically execute the entire test suite after every commit and pull request, ensuring new changes don’t break existing functionality. Why It Matters Automated testing and Continuous Integration (CI) make the project more robust, maintainable, and production-ready. Every code change is now automatically validated before it becomes part of the project, providing faster feedback during development and increasing confidence in future updates.
Ships:
I have made an Edge-AI Home Monitoring System. It is a privacy-first, edge-AI home automation hub using Linux, Flask, and real-time control to orchestrate smart devices.
Over the past few weeks, Edge-AI Home Monitoring System has evolved from a basic smart home controller into a much more capable home automation platform. New Features Added YOLO-based security monitoring Integrated Telegram bot for remote alerts and device control Added support for Tapo Smart Bulbs Added support for Tapo Smart Plugs Added support for Philips Hue devices Added support for Yeelight devices Added support for LG Smart TVs Added Remote PC Control & Monitoring Infrastructure Improvements Built a full Flask server backend Added a responsive Web Dashboard Improved setup process with automated setup scripts Reworked documentation and README Reliability Improvements Refactored multiple modules with structured exception handling Added better logging and debugging tools Improved API responses and backend stability Enhanced scalability for future device integrations The project is now much closer to becoming a complete privacy-first edge AI smart home hub capable of controlling multiple device ecosystems from a single interface.
Most smart homes are leased, not owned. Every command you send travels to a cloud you don’t control, owned by a company with interests misaligned to yours. This system proves that meaningful control of your physical space doesn’t require surrendering it to a vendor. Edge-AI Home Monitoring is a locally-governed, vendor-independent home automation platform designed to answer: can a household be sovereign over its own infrastructure?...
|
1792846560.9764569
|
1792932960.9764569
|
|
4513
|
My new personal website! by @jonasvanleeuwen19 | S My new personal website! by @jonasvanleeuwen19 | Stardance...
|
jonasvanleeuwen19
|
3
|
24.0
|
321
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-01T09:13:21Z", "hours": 5.0, "multiplier": 14.43, "payout": 71, "blessing": "neutral", "text": "Added some updates to my website, small css and content updates, new badges section with 88x31 badges! (so cool!) I also added pages for projects and made a docker container to monitor my recent playing game on steam, to show it on a widget in the “What am I doing right now?” section!", "repo": "https://git.tuxworld.nl/jonas/site-redesign", "demo": "https://jonas.yixboost.dev"}, {"ship_num": 2, "ts": "2026-07-16T03:03:47Z", "hours": 12.0, "multiplier": 13.83, "payout": 163, "blessing": "neutral", "text": "This is my second ship on this project! The goal of this project is to create an personal site about me that isn’t boring and is made without AI. It’s already live on my domain (jonas.yixboost.dev). All the assets used like the background, the drawings for section borders, lines, the navbar, cards and buttons are made by me with GIMP and Inkscape, because it makes my site more special and I want to get better with these programs. Even the font used for headings (MyDamnFont) is my own hand writing (; Hope you all like it!", "repo": "https://git.tuxworld.nl/jonas/site-redesign", "demo": "https://jonas.yixboost.dev"}, {"ship_num": 3, "ts": "2026-06-17T16:18:05Z", "hours": 7.0, "multiplier": 13.41, "payout": 87, "blessing": "neutral", "text": "I made a redesign of my personal website, it’s a complete rebuild from scratch, I wanted to replace my personal website with one I completely made myself without AI. I have added some nice cards for my projects, Hackatime stats and an animated section about myself. I finally published it on https://jonas.yixboost.dev The background image is self-made with GIMP to improve my GIMP skills (that time is not logged, rip)", "repo": "https://git.tuxworld.nl/jonas/site-redesign", "demo": "https://jonas.yixboost.dev"}]...
|
[{"post_id": 70139, "ts": "202 [{"post_id": 70139, "ts": "2026-09-18T15:24:10Z", "hours": 0.8519, "text": "Added steam currently playing game to the “What am I doing right now?” section. It uses an API proxy for current playing games I made with python running in docker: https://git.tuxworld.nl/jonas/steam-now-playing"}, {"post_id": 66208, "ts": "2026-09-11T21:51:35Z", "hours": 1.4586, "text": "Added project information page with automatic loading from my JSON projects list. Also made some CSS and html changes to clean up like removing tags and better css positioning."}, {"post_id": 35427, "ts": "2026-07-26T20:38:36Z", "hours": 0.6267, "text": "Small CSS fixes, better README and updated screenshot"}, {"post_id": 29747, "ts": "2026-07-16T20:48:20Z", "hours": 1.9881, "text": "Added badges section Added some cool 88x31 badges to a section on my website! Including badges about the site, my favorite software, games and more!"}, {"post_id": 29278, "ts": "2026-07-16T02:54:55Z", "hours": 4.6006, "text": "Massive update today! To start with, I didn’t really like the morph sidebar I made last time, so I made the hard choice to remove it. I looked at some Hack Club event websites, and found out many of them are using custom image assets for things like container borders and buttons, I like that idea, it’s cool to make hand drawn assets and use them on your website, it gives your website something special. So of course I tried it myself, First I did some research on how it works and how you can make custom section borders, I found this guide: https://css-tricks.com/revisiting-css-border-image/ This guide explains very well how custom borders work and how you can use it Of course I saved it to my personal Readeck ;) I started with just drawing a simple square in GIMP (just because I already know how to use GIMP) and then I applied it with CSS to my sections like in the guide, this worked, but I didn’t look that good, so I removed the CSS blur effect from earlier and used image opacity in GIMP to create a blue semi-transparent section, and I added a thin extra line to the border to make it look better. I wanted to use this on my LastFM music widget as well, but that didn’t work because the background needs to be applied with CSS with colors from the currently playing songs cover image, so there I can’t use the same border image as background. The problem here is that the background is then going outside of the border lines, after MANY ways of trying to fix this I found the solution, I made a black and white version of the image and updated my javascript to replace the black and white with the correct colors and then inject THAT image. This works extremely good, it’s looks so good now! When that was finally done, I did some last changes, made assets for buttons, lines, the navbar, the other cards, etc, all the components do now have a custom drawn border. I ended with adding new fonts, all the normal text is now Jetbrains Mono Regular (cause why not, I use that everywhere) and the headings are my own handwriting! I used an online tool to make a hand drawn font and used that font on my site! (MyDamnFont)"}, {"post_id": 23702, "ts": "2026-07-06T20:13:08Z", "hours": 3.2211, "text": "Today is my longest devlog! (I needed time for centering a with CSS, lol) But now serious, I worked really long on my new desktop sidebar, first it’s the same navbar as earlier but if you scroll the navbar is first decreasing it’s width and then increasing it’s height until it’s a sidebar. It has fade animations for the content inside of it and on mobile it stays a navbar but with a hamburger menu. There are also some small changes, the links in the nav/sidebar are now buttons so it’s more clear you can click on them (thanks for the suggestion you random person from ship #1 rating) The site is also more mobile friendly, as I said, there’s nwo a better hamburger menu exclusive for mobile devices, and the links in the about section are big buttons on your phone. The allignment for the whole about section is fixed for mobile devices. Lastly, in many of the feedbacks people said that the hackatime widgets where going out of the section, that’s now fixed (;"}, {"post_id": 20677, "ts": "2026-07-02T10:29:24Z", "hours": 1.8083, "text": "I added an ‘What am I doing right now?’ section with a music widget that displays my now playing music, it auto-updates the background gradient and badge colors by getting the main colors from the songs cover image, it gets the now playing song from the Last.fm API, and my Last.fm profile is connected to my JellyFin server. I also added two extra projects to the carousel, “This website” and “The Jump 3000”"}, {"post_id": 12619, "ts": "2026-06-20T16:47:47Z", "hours": 1.3639, "text": "Today I added an animated pacman with ghost and pacman made with css animations, and I redesigned the Hackatime section widgets by looking at the documentation for the widgets"}, {"post_id": 12527, "ts": "2026-06-20T13:30:24Z", "hours": 0.8478, "text": "Made the Hackclub guy transparent and outline-only, made javascript to load projects from projects.json and I used swiper.js to put the project cards inside a 3D carousel"}, {"post_id": 10690, "ts": "2026-06-17T15:37:23Z", "hours": 1.2806, "text": "Today i added animations, typing effect, moving images, small content updates, and i added a better README, and most important! I published it on jonas.yixboost.dev!"}, {"post_id": 10017, "ts": "2026-06-16T15:44:39Z", "hours": 1.0206, "text": "Today I added some cool stuff! I started with designing a new background image with nicer colors, it’s self made in GIMP, the .xcf file is in the /assets/images folder Then I wanted to add something happy to the startpage, so i got an image of this Hack Club guy with a flag and added it to the right of the ‘Who am I?’ section (terrible positioning a div is not so fun to do), by the way, I renamed that, it was called the ‘About’ section, but that’s boring…. To make the ‘Who am I?’ section even nicer, I added an CSS shimmer effect to my name, I can use this effect everywhere now by adding the “shimmer” class to an html tag. In the top right corner of the ’’My Projects” section (renamed from “Projects”) I added a link to all my repositories, to put it in the corner I needed to use the bootstrap “d-flex” class. Because of the new background the scroll to top button was less visible, so i made it light gray Lastly, I edited some text content."}, {"post_id": 6397, "ts": "2026-06-10T19:15:23Z", "hours": 0.6267, "text": "Today I did not have that much time, but I gave the navbar a nice blurred glass effect, added an scroll to top button that appears when you scroll down (Credits: https://github.com/mdbootstrap/bootstrap-back-to-top-button ), I also made the buttons inside the project cards nicer. Some small changes everywhere, but every minute counts!"}, {"post_id": 5568, "ts": "2026-06-09T12:13:38Z", "hours": 1.4839, "text": "Today added many small changes! To start I added a Favicon (simple but needed) I did some content changes, and I added a brand new “Hackatime Stats” section, because i think it’s cool if you can see real time data, this works perfect, I added programming language stats, 356 day activity and a button to my Hackatime profile, another thing I did was making the project section nice, I added real content, the right images, hand-written descriptions and buttons and links, I added Yixboost Games, ChessOverAPI and JustTitanium."}, {"post_id": 5124, "ts": "2026-06-08T20:14:47Z", "hours": 0.555, "text": "I added an logo to the navbar and made the beginning of my Projects section, i’m completing that section later."}, {"post_id": 887, "ts": "2026-06-02T16:40:35Z", "hours": 1.0392, "text": "I made the allignment better, made the navbar dark and I made the about section a real (visible) container and gave it a blur effect, next I added a cool background"}, {"post_id": 807, "ts": "2026-06-02T14:09:13Z", "hours": 0.5267, "text": "I started the project by making a simple bootstrap structure"}]...
|
Title: My new personal website! by @jonasvanleeuwe Title: My new personal website! by @jonasvanleeuwen19 | Stardance
Devlogs:
I started the project by making a simple bootstrap structure
I made the allignment better, made the navbar dark and I made the about section a real (visible) container and gave it a blur effect, next I added a cool background
I added an logo to the navbar and made the beginning of my Projects section, i’m completing that section later.
Today added many small changes! To start I added a Favicon (simple but needed) I did some content changes, and I added a brand new “Hackatime Stats” section, because i think it’s cool if you can see real time data, this works perfect, I added programming language stats, 356 day activity and a button to my Hackatime profile, another thing I did was making the project section nice, I added real content, the right images, hand-written descriptions and buttons and links, I added Yixboost Games, ChessOverAPI and JustTitanium.
Today I did not have that much time, but I gave the navbar a nice blurred glass effect, added an scroll to top button that appears when you scroll down (Credits: https://github.com/mdbootstrap/bootstrap-back-to-top-button ), I also made the buttons inside the project cards nicer. Some small changes everywhere, but every minute counts!
Today I added some cool stuff! I started with designing a new background image with nicer colors, it’s self made in GIMP, the .xcf file is in the /assets/images folder Then I wanted to add something happy to the startpage, so i got an image of this Hack Club guy with a flag and added it to the right of the ‘Who am I?’ section (terrible positioning a div is not so fun to do), by the way, I renamed that, it was called the ‘About’ section, but that’s boring…. To make the ‘Who am I?’ section even nicer, I added an CSS shimmer effect to my name, I can use this effect everywhere now by adding the “shimmer” class to an html tag. In the top right corner of the ’’My Projects” section (renamed from “Projects”) I added a link to all my repositories, to put it in the corner I needed to use the bootstrap “d-flex” class. Because of the new background the scroll to top button was less visible, so i made it light gray Lastly, I edited some text content.
Today i added animations, typing effect, moving images, small content updates, and i added a better README, and most important! I published it on jonas.yixboost.dev!
Made the Hackclub guy transparent and outline-only, made javascript to load projects from projects.json and I used swiper.js to put the project cards inside a 3D carousel
Today I added an animated pacman with ghost and pacman made with css animations, and I redesigned the Hackatime section widgets by looking at the documentation for the widgets
I added an ‘What am I doing right now?’ section with a music widget that displays my now playing music, it auto-updates the background gradient and badge colors by getting the main colors from the songs cover image, it gets the now playing song from the Last.fm API, and my Last.fm profile is connected to my JellyFin server. I also added two extra projects to the carousel, “This website” and “The Jump 3000”
Today is my longest devlog! (I needed time for centering a with CSS, lol) But now serious, I worked really long on my new desktop sidebar, first it’s the same navbar as earlier but if you scroll the navbar is first decreasing it’s width and then increasing it’s height until it’s a sidebar. It has fade animations for the content inside of it and on mobile it stays a navbar but with a hamburger menu. There are also some small changes, the links in the nav/sidebar are now buttons so it’s more clear you can click on them (thanks for the suggestion you random person from ship #1 rating) The site is also more mobile friendly, as I said, there’s nwo a better hamburger menu exclusive for mobile devices, and the links in the about section are big buttons on your phone. The allignment for the whole about section is fixed for mobile devices. Lastly, in many of the feedbacks people said that the hackatime widgets where going out of the section, that’s now fixed (;
Massive update today! To start with, I didn’t really like the morph sidebar I made last time, so I made the hard choice to remove it. I looked at some Hack Club event websites, and found out many of them are using custom image assets for things like container borders and buttons, I like that idea, it’s cool to make hand drawn assets and use them on your website, it gives your website something special. So of course I tried it myself, First I did some research on how it works and how you can make custom section borders, I found this guide: https://css-tricks.com/revisiting-css-border-image/ This guide explains very well how custom borders work and how you can use it Of course I saved it to my personal Readeck ;) I started with just drawing a simple square in GIMP (just because I already know how to use GIMP) and then I applied it with CSS to my sections like in the guide, this worked, but I didn’t look that good, so I removed the CSS blur effect from earlier and used image opacity in GIMP to create a blue semi-transparent section, and I added a thin extra line to the border to make it look better. I wanted to use this on my LastFM music widget as well, but that didn’t work because the background needs to be applied with CSS with colors from the currently playing songs cover image, so there I can’t use the same border image as background. The problem here is that the background is then going outside of the border lines, after MANY ways of trying to fix this I found the solution, I made a black and white version of the image and updated my javascript to replace the black and white with the correct colors and then inject THAT image. This works extremely good, it’s looks so good now! When that was finally done, I did some last changes, made assets for buttons, lines, the navbar, the other cards, etc, all the components do now have a custom drawn border. I ended with adding new fonts, all the normal text is now Jetbrains Mono Regular (cause why not, I use that everywhere) and the headings are my own handwriting! I used an online tool to make a hand drawn font and used that font on my site! (MyDamnFont)
Added badges section Added some cool 88x31 badges to a section on my website! Including badges about the site, my favorite software, games and more!
Small CSS fixes, better README and updated screenshot
Added project information page with automatic loading from my JSON projects list. Also made some CSS and html changes to clean up like removing tags and better css positioning.
Added steam currently playing game to the “What am I doing right now?” section. It uses an API proxy for current playing games I made with python running in docker: https://git.tuxworld.nl/jonas/steam-now-playing
Ships:
I made a redesign of my personal website, it’s a complete rebuild from scratch, I wanted to replace my personal website with one I completely made myself without AI. I have added some nice cards for my projects, Hackatime stats and an animated section about myself. I finally published it on https://jonas.yixboost.dev The background image is self-made with GIMP to improve my GIMP skills (that time is not logged, rip)
This is my second ship on this project! The goal of this project is to create an personal site about me that isn’t boring and is made without AI. It’s already live on my domain (jonas.yixboost.dev). All the assets used like the background, the drawings for section borders, lines, the navbar, cards and buttons are made by me with GIMP and Inkscape, because it makes my site more special and I want to get better with these programs. Even the font used for headings (MyDamnFont) is my own hand writing (; Hope you all like it!
Added some updates to my website, small css and content updates, new badges section with 88x31 badges! (so cool!) I also added pages for projects and made a docker container to monitor my recent playing game on steam, to show it on a widget in the “What am I doing right now?” section!...
|
1792835477.0878017
|
1792921877.0878017
|
|
4726
|
Alex's Desk by @AloneAlex | Stardance
|
AloneAlex
|
3
|
12.48
|
119
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T21:21:08Z", "hours": 4.0, "multiplier": 12.9, "payout": 49, "blessing": "neutral", "text": "This ship fixes all the hover animation issues the previous version of the website had, adds a completely separate mobile version and features a much better written and enriched readme. Plus some QOL stuff people asked for like a back button on certain pages to make the site easier to navigate", "repo": "https://github.com/thealonealex/alexs-desk", "demo": "https://thealonealex.dev"}, {"ship_num": 2, "ts": "2026-07-30T09:03:29Z", "hours": 7.0, "multiplier": 10.02, "payout": 70, "blessing": "neutral", "text": "It’s my personal website, a digital recreation of my desk where you can interact with objects :)", "repo": "https://github.com/thealonealex/alexs-desk", "demo": "https://thealonealex.dev"}, {"ship_num": 3, "ts": "2026-07-04T16:31:33Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A base outline of what I want to include to my personal site, with some testing around of css and html", "repo": "https://github.com/thealonealex/alexs-desk", "demo": "https://thealonealex.dev"}]...
|
[{"post_id": 62853, "ts": "202 [{"post_id": 62853, "ts": "2026-09-06T11:54:32Z", "hours": 0.4797, "text": "Fixed a display issue in safari. For some reason, having both width: and height: just made webkit freak out? Forgot to get a screenshot so here’s my Mii instead"}, {"post_id": 49898, "ts": "2026-08-18T21:15:40Z", "hours": 0.9536, "text": "Finally got my domain grant! Edited the bluesky link since my handle changed and updated the Readme to be more extensive on some stuff like mobile vs desktop differences & added screenshots. Plus, I added a creative commons license to the project!"}, {"post_id": 42109, "ts": "2026-08-06T17:51:51Z", "hours": 1.0022, "text": "The mobile version of the site is working! It’s just a basic phone-like UI, but I feel like it fits the vibe of the desktop site. There’s no text, just stuff to click and explore"}, {"post_id": 41875, "ts": "2026-08-06T11:03:07Z", "hours": 0.7308, "text": "Began working on the design for a mobile version of the site. It could look like a phone home screen? If I figure out how to do grids properly that is"}, {"post_id": 40785, "ts": "2026-08-04T15:18:54Z", "hours": 1.1175, "text": "The website had some issues with hover animations, so I wrapped all animated objects inside divs that don’t themselves move. I also added a back button the the gallery and games page, since many people wanted that from the previous ship’s reviews!"}, {"post_id": 29607, "ts": "2026-07-16T17:27:49Z", "hours": 1.0125, "text": "Designed and implemented a nice social media embed for the website!"}, {"post_id": 28999, "ts": "2026-07-15T17:21:06Z", "hours": 1.4358, "text": "Recreated the games page design with html and css, and renamed the project to Alex’s Desk. Also, the photos page was actually this extremely large (20mb) vector file, so I instead I exported it as png and compressed it, which resulted into a neat 1,4mb file instead!"}, {"post_id": 25542, "ts": "2026-07-09T21:15:47Z", "hours": 0.7489, "text": "Designed a game page that showcases the games I’ve made that I’m the most proud of as gameb- uhhh I meant Poteto ALEX BOY™ cartridges!"}, {"post_id": 24702, "ts": "2026-07-08T13:54:10Z", "hours": 0.6192, "text": "Designed and implemented the album page! It’s basically “my wall” showcasing some of my favorite photos I’ve taken. Will probably update with new ones in the feature, too. Also, I added some fade in to make page loading look nicer!"}, {"post_id": 23987, "ts": "2026-07-07T07:58:08Z", "hours": 0.44, "text": "Did some important minor changes, like making images non-draggable (instead you drag the link that you’d get redirected to if you clicked them) and adding a favicon. Also I think I’ll be renaming the project to Alex’s Desk, so I guess that’s what I’ll be doing next!"}, {"post_id": 23687, "ts": "2026-07-06T19:54:18Z", "hours": 1.8911, "text": "Recreated the design with html and css! It took me quite a while to get the div centered correctly and for objects to not jump around and stay on the desk no matter the viewport size, but I managed to do it at the end! Added some simple hover animations and redirects for clicking each object on the desk. Next up, I’ll add some tooltips, maybe some better animations, and see what I’ll do with the photos page. I want it to be a custom page with my photos. Also maybe it should be a different website altogether for mobile?"}, {"post_id": 23467, "ts": "2026-07-06T13:43:03Z", "hours": 0.8572, "text": "I already had a rough outline of how I wanted my website to look, but I designed a couple more things in Sketch. They’re subject to change, ofc, but this is what I want my website to have!"}, {"post_id": 22229, "ts": "2026-07-04T16:21:13Z", "hours": 1.1953, "text": "Finished the personal website mission tutorial! Some basic stuff for now, just 3 segments (about me, projects ✨more✨) but i have big plans!"}]...
|
Title: Alex's Desk by @AloneAlex | Stardance
Title: Alex's Desk by @AloneAlex | Stardance
Devlogs:
Finished the personal website mission tutorial! Some basic stuff for now, just 3 segments (about me, projects ✨more✨) but i have big plans!
I already had a rough outline of how I wanted my website to look, but I designed a couple more things in Sketch. They’re subject to change, ofc, but this is what I want my website to have!
Recreated the design with html and css! It took me quite a while to get the div centered correctly and for objects to not jump around and stay on the desk no matter the viewport size, but I managed to do it at the end! Added some simple hover animations and redirects for clicking each object on the desk. Next up, I’ll add some tooltips, maybe some better animations, and see what I’ll do with the photos page. I want it to be a custom page with my photos. Also maybe it should be a different website altogether for mobile?
Did some important minor changes, like making images non-draggable (instead you drag the link that you’d get redirected to if you clicked them) and adding a favicon. Also I think I’ll be renaming the project to Alex’s Desk, so I guess that’s what I’ll be doing next!
Designed and implemented the album page! It’s basically “my wall” showcasing some of my favorite photos I’ve taken. Will probably update with new ones in the feature, too. Also, I added some fade in to make page loading look nicer!
Designed a game page that showcases the games I’ve made that I’m the most proud of as gameb- uhhh I meant Poteto ALEX BOY™ cartridges!
Recreated the games page design with html and css, and renamed the project to Alex’s Desk. Also, the photos page was actually this extremely large (20mb) vector file, so I instead I exported it as png and compressed it, which resulted into a neat 1,4mb file instead!
Designed and implemented a nice social media embed for the website!
The website had some issues with hover animations, so I wrapped all animated objects inside divs that don’t themselves move. I also added a back button the the gallery and games page, since many people wanted that from the previous ship’s reviews!
Began working on the design for a mobile version of the site. It could look like a phone home screen? If I figure out how to do grids properly that is
The mobile version of the site is working! It’s just a basic phone-like UI, but I feel like it fits the vibe of the desktop site. There’s no text, just stuff to click and explore
Finally got my domain grant! Edited the bluesky link since my handle changed and updated the Readme to be more extensive on some stuff like mobile vs desktop differences & added screenshots. Plus, I added a creative commons license to the project!
Fixed a display issue in safari. For some reason, having both width: and height: just made webkit freak out? Forgot to get a screenshot so here’s my Mii instead
Ships:
A base outline of what I want to include to my personal site, with some testing around of css and html
It’s my personal website, a digital recreation of my desk where you can interact with objects :)
This ship fixes all the hover animation issues the previous version of the website had, adds a completely separate mobile version and features a much better written and enriched readme. Plus some QOL stuff people asked for like a back button on certain pages to make the site easier to navigate...
|
1792842733.2291815
|
1792929133.2291815
|
|
5061
|
Novara - Learning Website by @Cassetu | Stardance
|
Cassetu
|
3
|
68.14
|
325
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-10T03:00:54Z", "hours": 19.0, "multiplier": 12.44, "payout": 121, "blessing": "neutral", "text": "Novara v1.04.67 Novara is a free learning website, It has multiple courses with varying lesson types, so information is presented and tested in many ways. Our Goal: Build a library of curriculums so users can get the same learning opportunities of school, with more ways to learn than reading and note-taking, and at no cost to the users. (Verbatim from homepage) ##New Features from Previous Ship include: NEW UI: Earlier versions were apparently too “ai” so I created a new version that hopefully doesn’t look like ai. Since if people think that any part of the website is ai, the website in the whole is low quality rubbish, which Novara is NOT and will NOT allow itself to be. Inline css has been replaced with classes and seperate css files. Those css files are soon to be further seperated into smaller css files to make css navigation easier. Enhanced Privacy Policy: Now includes direct links allowing users to do self-study as well as a profit section. New Syllabus Flow: Now uses a sidebar with the section names and # of lessons. Clicking on the section opens up the lesson on the right side workspace. Mayor Bob: THE MASCOT TO GUIDE ALL!! He hopefully has more character. (I feel like hes better now but idk) Paced Mode!!!: Lessons lock until you reach the current day’s target, missing a day triggers a review quiz scaled to how long you were gone, and every 7 completed lessons triggers a module exam gate (80% to pass, locks further progress until you clear it). Because it matches the real school format of teaching, and i feel like the information will be better retained by ppl if its taught over several days instead of all being shoved down ur throught. AI Courses: ALL GONE!! Looking for proffesionals in single subjects to assist in new proper course creation. Ai work will never replace us!! URL Routing: You can share links and bookmark pages and since its all the same html file, it wouldn’t work, but now it does bc we have the “?=###” things that work now. ##Difficulties: Forever the bane of my existence, the typos an missing semicolons or braces. Also working through the css to ensure that the content is structured how i like it. Also did a fix where my previous thing would break if a course file was missing when the catalog json had it listed, now it just skips over it. The bonus question was fiting weirdly so i js removed it entirely. At some point i made the dialogue boxes have the typing animation, but i forgot about new lines and whitespaces also have to be considered in that logic, so at some point the dialogue would just trail off the end of the text box lol, without any spaces or new lines. Css bugs also. I js realized i also forgot to style the scrollbars, but ill work on that later. side note: i figured out how to sign my commits using a SHA encryption service so every commit will say “Verified” (ONLY REMAINS ONE AI COURSE THAT IS NOW PROPERLY ATTRIBUTED IN ITS DETAILS MENU, THE AI DISCLAIMER IS DISCONTINUED) README + More Details here: https://github.com/Cassetu/Novara#table-of-contents PRIVACY POLICY: https://cassetu.github.io/Novara/html/privacy.html TRY IT HERE!: https://cassetu.github.io/Novara/index.html (To access full content you must sign in/register, u can trust Novara, and if you don’t, read the Privacy Policy!)", "repo": "https://github.com/Cassetu/Novara", "demo": "https://github.com/Cassetu/Novara#website-usage"}, {"ship_num": 2, "ts": "2026-07-28T04:01:17Z", "hours": 11.0, "multiplier": 9.98, "payout": 105, "blessing": "neutral", "text": "Novara v1.03.97 Novara is a free learning website, It has multiple courses with varying lesson types, so information is presented and tested in many ways. New Features from Previous Ship include: Architecture Simulation: A new lesson type where the user can design an simple floor plan, complete with an accurate scale, rectangle tool, and eraser. Privacy Policy: Users can understand how their data is stored within Novara, and feel safer using the relativly unknown website. New Lesson Flow: Topbar no longer uses Opacity, and instead has a back button neatly placed at the top instead of the usual navigation buttons. Alerts: Almost all of the alerts have been moved to custom inline boxes to be more user intuitive and welcoming. I think i missed a few somewhere here and there tho. AI USAGE DISCLAIMER AI is used in the generation of our courses. We have not yet received assistance from subject-matter experts in developing our curricula. (I’m working on finding people, hopefully soon) To maintain quality, the AI is guided by strict instructions designed to reduce low-quality content (“slop lessons”) and encourage materials that engage students in critical thinking and active learning. Despite these safeguards, mistakes and errors may still occur. If you find an issue, please report it by emailing: [email protected] (Responses take 3-5 business days). Thank you for helping us improve. README + More Details here: https://github.com/Cassetu/Novara#table-of-contents PRIVACY POLICY: https://cassetu.github.io/Novara/html/privacy.html TRY IT HERE!: https://cassetu.github.io/Novara/index.html (To access full content you must sign in/register)", "repo": "https://github.com/Cassetu/Novara", "demo": "https://github.com/Cassetu/Novara#website-usage"}, {"ship_num": 3, "ts": "2026-06-18T15:21:19Z", "hours": 7.0, "multiplier": 14.37, "payout": 99, "blessing": "neutral", "text": "Novara v1.03.56 Novara is a free learning website, It has multiple courses with varying lesson types, so information is presented and tested in many ways. Features include: Focused Learning : Enrollment is limited to a maximum of 3 curriculums at a time to encourage focus and prevent overwhelm. Structured Content : Curriculums contain courses, and courses contain modular lessons. Knowledge Checks : Built-in quizzes to test your knowledge at the end of courses. Progress Tracking : Visual indicators to show completed lessons and remaining coursework. The main architecture is designed using HTML, CSS and JS. Designed to be modular, so adding another course/curriculum is easily done by writing one single json data file. AI USAGE DISCLAIMER AI is used in the generation of our courses. We have not yet received assistance from subject-matter experts in developing our curricula. To maintain quality, the AI is guided by strict instructions designed to reduce low-quality content (“slop lessons”) and encourage materials that engage students in critical thinking and active learning. Despite these safeguards, mistakes and errors may still occur. If you find an issue, please report it by emailing: [email protected] (Responses take 3-5 business days). Thank you for helping us improve. README + More Details here: https://github.com/Cassetu/Novara#table-of-contents TRY IT HERE!: https://cassetu.github.io/Novara/index.html (To access full content you must sign in/register)", "repo": "https://github.com/Cassetu/Novara", "demo": "https://github.com/Cassetu/Novara#website-usage"}]...
|
[{"post_id": 74744, "ts": "202 [{"post_id": 74744, "ts": "2026-09-28T03:47:35Z", "hours": 8.6992, "text": "v1.05.77 Site is becoming more usable!! Changes: Has a working branch vs a master branch, so in progress updates will not effect the current version on the web. made image label block logic cleared old logic for renderers did a whole lot of SEO things fix sw.js with real file paths (not the ancient ones) more styling in css node.js to automatically create html things for web crawlers ( auto-generate-curriculum-pages ) update homepage to look wayyy better fully rebuilt practice/exam system for block-based lessons logical fallicies notes lesson end screen with nature Problems Encountered: Incorrect formatting (always happens when u type fast) Bad css Difficult logic with complicated storage format (e.g., looking through .sections, .lessons, etc) check out the latest build: novaraedu.org"}, {"post_id": 70975, "ts": "2026-09-20T04:33:45Z", "hours": 7.0331, "text": "v1.05.26 Site is still somewhat unusable currently Changes: fixed getAllQuestionsForEntry build render functions for all the different block types: renderSubmitBlock , renderMultipleChoiceBLock , etc purged a few bugs yayy moved the workspace thing so it has a new sidebar and is familiar to the course syllabus view. did a whole buncha formatting troubleshooting bought a domain!!!! go to novaraedu.org . which means you can find it on search enginges now (i think)"}, {"post_id": 58235, "ts": "2026-08-30T16:19:55Z", "hours": 2.3939, "text": "v1.04.98 Site is still unusable currently *Continuing the data refactoring, I fixed some of the references in openSyllabus. I also completly removed the faulty references to isBundle() , i accidentaly messed up the case of loadIndex to LoadIndex but luckily a simple glance at the console pinpointed it for me :D (Thank god for descriptive error messages) Added the hackatime lapse links to the notes (since i want to use nice formatting without ai accusations i lowkey need to do that) Started doing notes on “The Science of Logical Reasoning specifically for: Jerome Bruner Theory of Cognitive Development.” Its for building good curriculums and proper teaching, they have this cool thing called a “spiral curriculum” that you should search up. (I’m also trying out a recording timelapse system, that should be better than lapse since lapse only takes like a picture every minute and stiches it together, this takes a picture every second and then compresses it) the video is only of v1.04.97 -> v1.04.98 editing portion Thanks for your support! :D"}, {"post_id": 51423, "ts": "2026-08-21T03:48:03Z", "hours": 3.8747, "text": "v1.04.91 Celebrating my 250th commit!! :D fully deleted the curriculum tool since its frustrating and too hard rn and i’m going to do it later after i do my data refactor removed the ai detector thing, the link still works for now, but I don’t think i want to use it because its too unreliable, and is too much of a project in its own right than a small tool I’m doing a major refactor of my data structure. Previously, my curriculum information all sat in one MASSIVE json. but now i have a complex folder network. Each curriculum will have an index.json file, so the catalog.json routes to the index.json that leads into the courses, then to the sections, and down to the individual lessons. Its kinda like a phonebook… i think. Every lesson will be its own json with its own list of “blocks” that are pieces that i can take apart or put together to make lessons unique! Kinda like its own mini programming language lol. Currently the site is unusable since the course.js isn’t fully complete to understand the new data structure. :P"}, {"post_id": 49323, "ts": "2026-08-18T02:26:42Z", "hours": 2.2892, "text": "v1.04.76 Taking a break from psychology notes to do some coding again. began working on a curriculum tool so educators can easily build em without having to work through the complicated json structure. its a bit hard since i want to export a zip, and im not entirely sure how that would work, and also i need to double check how my course.js processes the json so i can get exactly all the information to put into it. ai detector thing. examines github repositories and find all comments and flags exessive amounts, or exessive explanations in them (classic ai fingerprints) as well as flagging verbose function names and shows the time it would take to make the project at 70 wpm and detects inconsistencies in commit times (eg 1000 new code typed after 2 minutes of another commit that would be flagged) then gives a % of confidence. 0-30% is prob human, 30-50% is mixed unsure, 50-100% is definetly full ai. Before you accuse someone, make sure to do througouh like questioning and interviews and such because this tool is imperfect. This way i can easily identify projects that have disgenuine work and report them to stardance to take care of. ( https://cassetu.github.io/Novara/html/aisubTool.html ) I got gemini to help reformat the code since it was a bit of a mess, dw i had a full disclaimer. (ai vibe coders take notes.) It was a big challenge getting the github token to work, but it functions now and doesn’t steal your information!! :D also i ran my own project through it once, it was clear, and then i ran it again after commiting it, and now it thinks my project is ai, because the code scans for these specific traces, that are present in the code itself, meaning that if it scans itself, it will find everything its looking for. T - T (false positive in the first image) leave a comment to help! thx!"}, {"post_id": 47623, "ts": "2026-08-15T17:08:58Z", "hours": 2.7478, "text": "v1.04.74 EVEN MORE PSYCHOLOGY Covered more things for my next course: “Attachment, Love & Social Dynamics” John Bowlby’s Attachment Theory Internal Working Model (IWM) Adult Attachment Styles (Secure vs. Insecure) (Look at the image) Sternberg’s Triangular Theory of Love Social Exchange Theory (SET) Read the notes!: https://github.com/Cassetu/Novara/blob/master/journal/relationship/notesTheScienceOfRelationships.md#attachment-love--social-dynamics Timelapse: https://lapse.hackclub.com/timelapse/PppFJPZGUgEp https://lapse.hackclub.com/timelapse/YqlfYCCx08j7"}, {"post_id": 46561, "ts": "2026-08-13T21:40:14Z", "hours": 2.5925, "text": "v1.04.72 More psychology hooray Covered more things for my next course: “Stage Models & Communication” Knapp’s Relationship Model Social Penetration Theory Evolutionary Explanation for Physical Attractiveness Johari Window Uncertainty Reduction Theory (URT) Read the notes!: https://github.com/Cassetu/Novara/blob/master/journal/relationship/notesTheScienceOfRelationships.md#stage-models--communication Timelapse: https://lapse.hackclub.com/timelapse/1LwshB7x8AEr https://lapse.hackclub.com/timelapse/ir_E9ROtKHUr I can actually use nice formatting without getting ai accusations cuz i got timelapses lol"}, {"post_id": 45862, "ts": "2026-08-12T16:18:00Z", "hours": 1.5094, "text": "v1.04.69 Yes, i really am studying “The Science of Relationships” to create a curriculum on it. I researched on the Halo Effect, Mere Exposure Effect, Propinquity Effect, and Social Exchange Theory. These are for the first course in the curriculum: Human Attraction & Opportunity. Read the notes: https://github.com/Cassetu/Novara/blob/master/journal/relationship/notesTheScienceOfRelationships.md And Timelapse: https://lapse.hackclub.com/timelapse/cPdZpEF6u5YJ"}, {"post_id": 44035, "ts": "2026-08-09T15:21:36Z", "hours": 3.5253, "text": "v1.04.66 to v1.04.67 | 8-8-26 Moved the return button, description link, and progress bar into the syllabus sidebar instead of a separate meta block up top. Added a course description modal you can open from the sidebar. Reworked the syllabus layout to fill the viewport height properly, cleaned up border and shadow inconsistencies, and shrunk the details modal width. v1.04.65 | 8-8-26 Big CSS pass across course.css , landing.css , and style.css . Reworked the syllabus sidebar to include a course title, progress bar, and a dedicated test button styled with the accent color. v1.04.63 to v1.04.64 | 8-8-26 Removed the old Godot scene renderer, its CSS, and the leftover import in course.js . Not used anymore. (It was made with ai help) v1.04.62 | 8-7-26 Added a line to the landing page footer noting no generative AI was used in building the site. (just need to remove the last ai curriculum.) v1.04.61 | 8-6-26 Cleaned up mainpage CSS spacing and rewrote the landing copy. Turned the trust badge area into a short blurb on why Novara exists, moved the Hackatime badge inline with the time spent text, and added a dedicated trust button linking to the privacy page. Thanks for reading this! Have a good day yall!"}, {"post_id": 42986, "ts": "2026-08-08T00:16:05Z", "hours": 4.3114, "text": "v1.04.56 to v1.04.60 | 8-6-26 Rebuilt the public course catalog page and gave the about page its own CSS file instead of riding on landing styles, plus a new brand lockup (logo + NOVARA wordmark) in the nav headers across pages. Added a goals section to the about page. Added a “don’t trust us, go check yourself” section and a profit disclaimer to the privacy policy. Swapped “we” language for “I” across the README and privacy policy since it’s a solo project and someone got confused. Small homepage copy tweak too, swapped the trust blurb for a direction to the privacy policy and added a “Time Spent” label above the hackatime badge. v1.04.44 to v1.04.55 | 8-5-26 Kept moving inline styles into real CSS classes across course.js (loading states, lesson complete screens, onboarding highlight, dialogue boxes, 404 page). Pulled the privacy policy’s inline style block out into its own privacy.css file. Rebuilt the homepage hero into a two column layout with trust info on one side and quick action buttons on the other, replacing the old split image hero. Changed the footer message, revised the README copy, swapped a few README screenshots, and bumped the hackatime badge color. Now that the inline is gone, it will be easier to adjust the ui. v1.04.36 to v1.04.43 | 8-4-26 Kept clearing inline CSS out of course.js , this round hitting the explorer cards, syllabus sidebar, section buttons, and the course details modal. Added a null check so progress calculation doesn’t break when a course file is missing. Fixed a syntax typo (stray brace) in the syllabus section click handler. Removed the old Godot core AI generated course from the catalog. Added a small watermark comment to files generated by the theme tool, and created a dialog-btn-container class to clean up some remaining inline button styling. I also figured out how to sign my commits using a SHA encryption service so every commit will say “Verified”"}, {"post_id": 41050, "ts": "2026-08-05T00:21:07Z", "hours": 1.8708, "text": "I’ve been testing out some different ui’s, since yall keep saying mine is AI, which I’ll have you know, is not, its called modern. (i have screenshot of testing out an like windows 98 kinda retro ish ui idk what its called.) I do want to know this though, What does a NOT AI ui look like? If my project looks like AI, people will not be keen to trusting my courses, much less learning about them. If you have any ideas, PLEASE WRITE A COMMENT!! :D (Also on progress with Novara: v1.04.29, fix for course.js v1.04.30, adjust length for the standard practice since if you only do one lesson, and then try to do the practice, you’ll answer 30 questions about that one lesson, mostly repeating the same questions. v1.04.31, new mastery icon cuz i forgot to do it earlier v1.04.32, better cover progress with padlock v1.04.33, remove bonus questions, since they kinda fit weirdly and dont really help even if the science is behind it v1.04.33, give Mayor Bob more character cuz he sounds like a robot. v1.04.34, move style.css into css/style.css v1.04.35, new layout for lessons and sections view.)"}, {"post_id": 39205, "ts": "2026-08-02T00:29:05Z", "hours": 4.7878, "text": "v1.04.27 to v1.04.28 | 8-1-26 Merged the practice hub into one combined view across all enrolled curriculums instead of a separate card per course, so standard and survival practice now pull questions from everything you’re enrolled in at once. Added a countdown banner showing when paced mode lessons renew, and cleaned up the settings label wording twice. (cuz i didn’t like how it sounded) v1.04.24 to v1.04.26 | 8-1-26 Paced mode is now fully wired in. Lessons lock until you reach the current day’s target, missing a day triggers a review quiz scaled to how long you were gone, and every 7 completed lessons triggers a module exam gate (80% to pass, locks further progress until you clear it). Also fixed the dialogue box to support multiline text properly and fixed the onboarding highlight so it targets dropdown menus correctly instead of the wrong element. (check image to see how it failed lol) v1.04.19 to v1.04.23 | 8-1-26 Added the paced mode toggle itself (1 lesson a day). Onboarding got swapped from static tooltip cards over to the new dialogue box system, then the dialogue box was made to type itself out letter by letter instead of dumping all the text at once. Along the way: fixed onboarding skipping missing elements, handled rapid clicking through steps, fixed a broken const reference, and fixed reset behavior when onboarding reopens. v1.04.17 to v1.04.18 | 7-31-26 Deleted a pile of AI-generated lesson bundles that were just cluttering the catalog (architecture, conlang-mythology, html-mastery), keeping only a couple test lessons around. Added question pooling so a lesson can define a questionCount and pull a random shuffled slice instead of showing every question every time. v1.04.14 to v1.04.16 | 7-30-26 Rebuilt the about page into proper sectioned content instead of one big hero block, swapped in a new header image, fixed a dumb black border bug on the landing page from a leftover CSS class, and moved the difficulty badge over next to the details button. If you read all this, consider reposting so I can get more attention, thanks!! :D"}, {"post_id": 37956, "ts": "2026-07-31T00:31:16Z", "hours": 4.8406, "text": "v1.04.11 to v1.04.13 | 7-29-26 New course card layout with a proper title/kicker header block and reworked filter buttons, ditching the old boxed style for underline tabs cuz its more dense. Added an orange accent color filled progress bar for anything not enrolled yet. Added a dev time badge to the hero using Hackatime in the main thing. Ripped out the entire theme system, one look only now cuz its better. v1.04.09 to v1.04.10 | 7-29-26 Full hero section overhaul. New copy, new photo instead of the old doorway SVG, new grid layout instead of flexbox, added a soft noise texture to the landing background. (tryina copy like concrete) Fixed a wrong journal link pointing at the wrong repo path. v1.04.06 to v1.04.08 | 7-29-26 Pulled a markdown course entry out of the catalog for good, both the JSON data and the catalog listing. (its not good) Small dropdown structure fix in the topbar CSS. v1.04.04 to v1.04.05 | 7-29-26 Added a course details overlay with author, published/updated dates, and sources. Fixed a typo where the close button ID didn’t match, so the overlay wouldn’t close. (SLOPPY CODDEE FREE MEE FROM ITT AAAAAA) v1.04.03 | 7-29-26 Added URL routing for logged out users. Course catalog and sign in views now update the URL with pushState and respond correctly on refresh, instead of only working for logged in users. Same stuf. v1.03.98 to v1.04.02 | 7-28-26 Reorganized assets into an img subfolder and added minibit sprites. Built a reusable dialogue box component with a typewriter-style next button flow, wired it into the landing page as a mayor NPC introduction, then cleaned up its sizing and added a completion message. Updated INFO.txt to match the actual lesson type naming convention and added entries for architectureSim and cookingSim . Looking for coding profesionalls to help build a curriculum, email me or create an issue on my github!"}, {"post_id": 36128, "ts": "2026-07-28T00:34:46Z", "hours": 7.4111, "text": "Novara Devlog: Architecture Sim Notice, the sim is very sloppy and is most definetly gonna be subject to more additions later. v1.03.97 | 7-25-26 Reworked drawDimension so tick marks always offset perpendicular to the wall, instead of one shared calc for both axes. Room labels now use two separate font scales instead of one. (definetly subject to change) Started tracking a global bounding box so each room draws its own outer footprint dimensions, not just per wall. v1.03.96 | 7-9-26 Added a Rectangle tool (R key) next to the draw tool, so you can drag out four walls at once. Split drawMeasuredLine into drawWall (just the line) and drawDimension (offset line, ticks, label). Added a live HUD showing length and angle in draw mode, or width and height in rect mode, while dragging. v1.03.95 | 7-8-26 Built a real toolbar with pen and eraser buttons with my new assets. Eraser uses point to line distance to find and remove walls. Added a confirm modal before doing the full clearing canvas, and replaced the old gradient fade label background with a plain rect. v1.03.90 to v1.03.94 | 7-7-26 Rewrote room detection as extractRooms using a proper planar graph traversal: build an adjacency list, sort each node’s neighbors by angle, then walk faces with the right hand rule to pull out every enclosed room as its own polygon. This finally supports multiple separate rooms on one canvas. Also fixed a null vs empty array bug, scaled room labels by area, reorganized brand assets, and added eraser, house, and trash icons. (from: https://game-icons.net ) v1.03.87 to v1.03.89 | 7-5-26 First pass at room detection using an adjacency graph, assuming a single closed loop. Fixed several bugs in the adjacency keys and neighbor tracking, added shoelace formula area calculation, and split wall segments at T-intersections so room boundaries follow them correctly. (everything boils down to math and calculations) v1.03.84 to v1.03.86 | 7-3-26 to 7-4-26 Pulled measurement drawing into its own function so every wall, not just the active drag, shows its length. (very crucial) Bumped the grid scale for easier snapping and more detail when i later add features such as chairs and tables that you can drag in. Added a gradient fade behind dimension labels, then small tick marks at each wall end. (visual aids) v1.03.82 to v1.03.83 | 7-1-26 to 7-2-26 Wired the sim into the real course system. added a lesson entry so i can properly test it now, imported the renderer into course.js , and fixed leftover syntax typos. (my work has been a bit sloppy recently) Built the actual studio layout with a brief panel and drafting canvas, then added the mouse listeners for drawing walls, with Shift locking to cardinal directions for more percise drawing. v1.03.79 to v1.03.81 | 6-30-26 Scaffolded the drafting canvas: pixels to feet scale, snap to grid, and the first working render loop with simple grid and stuf. Fixed a small topbar CSS bug where button heights jumped on hover. If you read all this, thanks :D"}, {"post_id": 17391, "ts": "2026-06-28T04:45:21Z", "hours": 1.51, "text": "v1.03.78 | 6-27-26 Refactored how navigation flows when a user enters an active lesson block. Previously, I had the topbar fade down to opacity: 0.5 via a body class state, and a separate, clunky #lesson-back-btn floating fixed at the top-left of the viewport. It wasn’t great, and I thought i could do way better. So instead i cleaned it up, removed the fade, and pretty much “hijacked” the main elements. The standard topbar elements were set to display:none; with the user profile button getting set to half opacity and non-clickable. changed existing #nav-explorer slot by transforming its text to ← Return and changing its weight. also changed the if (!confirm()) basic alert for my better error alert box. duplicated the old alert box and made another for this one, fit with a cancel button and all. The main obstacle was handling the application’s default click-routing initialization handlers. Simply changing the .onclick property didn’t work because hidden layout listeners attached via .addEventListener() were catching the event bubbles and dumping the user back to the main curriculum selector immediately anyway. (because remember were hijacking the explore btn) Fixed it by utilizing Event Capturing: topNavBtn.addEventListener(\"click\", window.activeTopbarGate, true); by passing true, the browser catches the user’s click at the absolute top of the DOM tree before the default routers can see it. Inside the wrapper, i ran e.stopPropagation() to stalls the execution chain while the custom gate logic processes. standard browser alerts freeze javascript synchronously, but custom DOM boxes are asynchronous so a normal return gate wouldn’t cut it. i solved it by wrapping all my navigation cleanup loops inside a functional callback and passing it straight into the dialog box. hit OK, the callback fires and drops you out of the lesson; hit cancel, it just clears the overlay div out of the DOM tree so you can keep working. its like weaving a thread in a spiderweb (T - T) also wut u guys feel about the better formatting lemme know, i don’t want it to sound like i just copy pasted chatgpt but i want to explain it better so im a bit conflicted"}, {"post_id": 12602, "ts": "2026-06-20T16:18:52Z", "hours": 1.6108, "text": "v1.03.65 | 6-20-26 Refactored URL routing logic so it sits in one function routeFromURL making it easier to reuse. Before I just had the code duplicated in two places as a quick implementation, and also the back/forward buttons didn’t do anything because there wasn’t a popstate listener yet. Now i have window.addEventListener(\"popstate\", routeFromURL) to fix that issue. Added a Privacy Policy page matching the Journal Layout, now users can trust Novara (little more than before at least) to keep their information safe when they sign in. Started a test cooking curriculum, using the cookingSim and HeatControl additions. Also added an Abstract0, Abstract1, Abstract2 assets to be used later. Abstract2 already implemented into an 404 page and the practice panel when the user isn’t enrolled in any curriculums. fetchCourseData now wraps its fetch in a try/catch and calls show404() on failure."}, {"post_id": 10280, "ts": "2026-06-16T22:26:00Z", "hours": 2.0617, "text": "v1.03.55 | 6-16-26 I added a new lesson type, “cookingSim”, it currently only has one simulation “heatControl”. Its a simple minigame for monitoring heat. Later I will have several cooking simulations, and use them in a cooking curriculum. The reason for creating special simulations, is because cooking is a visual and hands on thing, you can’t learn to cook by simply reading and answering questions about it. I’m also working on wiring together a way for the url to reflect the current view, that way you can bookmark specific courses or share specific curriculums. The main focus of it is: history.pushState() and window.addEventListener(\"popstate\") . Another important part is this: const params = new URLSearchParams(window.location.search); const view = params.get(“view”); const id = params.get(“id”); so on page load, you can get the right viewport, eg: ?view=syllabus&id=js-course , would show \"syllabus\" and \"js-course\". Since its on page load the code is primarly residing in window.firebaseAuth.onAuthStateChanged since that part automatically signs in the user and skips over the authentication and homepage process if the user has signed in before."}, {"post_id": 8237, "ts": "2026-06-13T18:17:39Z", "hours": 2.1694, "text": "Added a custom theme tool, automatically generates the code so users can easily build a unique & polished ui. Easy access in topbar for signed in users and non-signed in users. Test it out here: https://cassetu.github.io/Novara/html/themeTool.html (STOP CONSOLTING AI FOR THEMES: Too generic Awful “Extreme Glassy Gloss” style Always weirdly rounded corners )"}, {"post_id": 7187, "ts": "2026-06-12T00:15:17Z", "hours": 0.3694, "text": "fixed some bugs as the focus for today (v1.03.37) error overlays were stacking in the DOM, so i made a showError() function instead of copy pasting the same code everywhere also fixed activeCourseRef being stale after practice sessions, was sending users to the wrong place"}, {"post_id": 6562, "ts": "2026-06-11T00:48:52Z", "hours": 1.0597, "text": "Onboarding, 4 cards, teaches user to enroll in curriculums, and navigate the topbar"}, {"post_id": 5754, "ts": "2026-06-09T17:33:47Z", "hours": 0.5056, "text": "Added README.md (And related images) https://github.com/Cassetu/Novara/blob/master/README.md"}, {"post_id": 5716, "ts": "2026-06-09T16:44:04Z", "hours": 0.7136, "text": "Novara is actually a project of mine that I’ve been working on for a while. (Since May 6th) I just got back into it and added an inline alert box, since the native alert box is shown to be less intuitive and more hostile to users. Most Devlogs here will be some form of iteration of my onsite Journal, but more in depth, and more focused."}]...
|
Title: Novara - Learning Website by @Cassetu | Sta Title: Novara - Learning Website by @Cassetu | Stardance
Devlogs:
Novara is actually a project of mine that I’ve been working on for a while. (Since May 6th) I just got back into it and added an inline alert box, since the native alert box is shown to be less intuitive and more hostile to users. Most Devlogs here will be some form of iteration of my onsite Journal, but more in depth, and more focused.
Added README.md (And related images) https://github.com/Cassetu/Novara/blob/master/README.md
Onboarding, 4 cards, teaches user to enroll in curriculums, and navigate the topbar
fixed some bugs as the focus for today (v1.03.37) error overlays were stacking in the DOM, so i made a showError() function instead of copy pasting the same code everywhere also fixed activeCourseRef being stale after practice sessions, was sending users to the wrong place
Added a custom theme tool, automatically generates the code so users can easily build a unique & polished ui. Easy access in topbar for signed in users and non-signed in users. Test it out here: https://cassetu.github.io/Novara/html/themeTool.html (STOP CONSOLTING AI FOR THEMES: Too generic Awful “Extreme Glassy Gloss” style Always weirdly rounded corners )
v1.03.55 | 6-16-26 I added a new lesson type, “cookingSim”, it currently only has one simulation “heatControl”. Its a simple minigame for monitoring heat. Later I will have several cooking simulations, and use them in a cooking curriculum. The reason for creating special simulations, is because cooking is a visual and hands on thing, you can’t learn to cook by simply reading and answering questions about it. I’m also working on wiring together a way for the url to reflect the current view, that way you can bookmark specific courses or share specific curriculums. The main focus of it is: history.pushState() and window.addEventListener("popstate") . Another important part is this: const params = new URLSearchParams(window.location.search); const view = params.get(“view”); const id = params.get(“id”); so on page load, you can get the right viewport, eg: ?view=syllabus&id=js-course , would show "syllabus" and "js-course". Since its on page load the code is primarly residing in window.firebaseAuth.onAuthStateChanged since that part automatically signs in the user and skips over the authentication and homepage process if the user has signed in before.
v1.03.65 | 6-20-26 Refactored URL routing logic so it sits in one function routeFromURL making it easier to reuse. Before I just had the code duplicated in two places as a quick implementation, and also the back/forward buttons didn’t do anything because there wasn’t a popstate listener yet. Now i have window.addEventListener("popstate", routeFromURL) to fix that issue. Added a Privacy Policy page matching the Journal Layout, now users can trust Novara (little more than before at least) to keep their information safe when they sign in. Started a test cooking curriculum, using the cookingSim and HeatControl additions. Also added an Abstract0, Abstract1, Abstract2 assets to be used later. Abstract2 already implemented into an 404 page and the practice panel when the user isn’t enrolled in any curriculums. fetchCourseData now wraps its fetch in a try/catch and calls show404() on failure.
v1.03.78 | 6-27-26 Refactored how navigation flows when a user enters an active lesson block. Previously, I had the topbar fade down to opacity: 0.5 via a body class state, and a separate, clunky #lesson-back-btn floating fixed at the top-left of the viewport. It wasn’t great, and I thought i could do way better. So instead i cleaned it up, removed the fade, and pretty much “hijacked” the main elements. The standard topbar elements were set to display:none; with the user profile button getting set to half opacity and non-clickable. changed existing #nav-explorer slot by transforming its text to ← Return and changing its weight. also changed the if (!confirm()) basic alert for my better error alert box. duplicated the old alert box and made another for this one, fit with a cancel button and all. The main obstacle was handling the application’s default click-routing initialization handlers. Simply changing the .onclick property didn’t work because hidden layout listeners attached via .addEventListener() were catching the event bubbles and dumping the user back to the main curriculum selector immediately anyway. (because remember were hijacking the explore btn) Fixed it by utilizing Event Capturing: topNavBtn.addEventListener("click", window.activeTopbarGate, true); by passing true, the browser catches the user’s click at the absolute top of the DOM tree before the default routers can see it. Inside the wrapper, i ran e.stopPropagation() to stalls the execution chain while the custom gate logic processes. standard browser alerts freeze javascript synchronously, but custom DOM boxes are asynchronous so a normal return gate wouldn’t cut it. i solved it by wrapping all my navigation cleanup loops inside a functional callback and passing it straight into the dialog box. hit OK, the callback fires and drops you out of the lesson; hit cancel, it just clears the overlay div out of the DOM tree so you can keep working. its like weaving a thread in a spiderweb (T - T) also wut u guys feel about the better formatting lemme know, i don’t want it to sound like i just copy pasted chatgpt but i want to explain it better so im a bit conflicted
Novara Devlog: Architecture Sim Notice, the sim is very sloppy and is most definetly gonna be subject to more additions later. v1.03.97 | 7-25-26 Reworked drawDimension so tick marks always offset perpendicular to the wall, instead of one shared calc for both axes. Room labels now use two separate font scales instead of one. (definetly subject to change) Started tracking a global bounding box so each room draws its own outer footprint dimensions, not just per wall. v1.03.96 | 7-9-26 Added a Rectangle tool (R key) next to the draw tool, so you can drag out four walls at once. Split drawMeasuredLine into drawWall (just the line) and drawDimension (offset line, ticks, label). Added a live HUD showing length and angle in draw mode, or width and height in rect mode, while dragging. v1.03.95 | 7-8-26 Built a real toolbar with pen and eraser buttons with my new assets. Eraser uses point to line distance to find and remove walls. Added a confirm modal before doing the full clearing canvas, and replaced the old gradient fade label background with a plain rect. v1.03.90 to v1.03.94 | 7-7-26 Rewrote room detection as extractRooms using a proper planar graph traversal: build an adjacency list, sort each node’s neighbors by angle, then walk faces with the right hand rule to pull out every enclosed room as its own polygon. This finally supports multiple separate rooms on one canvas. Also fixed a null vs empty array bug, scaled room labels by area, reorganized brand assets, and added eraser, house, and trash icons. (from: https://game-icons.net ) v1.03.87 to v1.03.89 | 7-5-26 First pass at room detection using an adjacency graph, assuming a single closed loop. Fixed several bugs in the adjacency keys and neighbor tracking, added shoelace formula area calculation, and split wall segments at T-intersections so room boundaries follow them correctly. (everything boils down to math and calculations) v1.03.84 to v1.03.86 | 7-3-26 to 7-4-26 Pulled measurement drawing into its own function so every wall, not just the active drag, shows its length. (very crucial) Bumped the grid scale for easier snapping and more detail when i later add features such as chairs and tables that you can drag in. Added a gradient fade behind dimension labels, then small tick marks at each wall end. (visual aids) v1.03.82 to v1.03.83 | 7-1-26 to 7-2-26 Wired the sim into the real course system. added a lesson entry so i can properly test it now, imported the renderer into course.js , and fixed leftover syntax typos. (my work has been a bit sloppy recently) Built the actual studio layout with a brief panel and drafting canvas, then added the mouse listeners for drawing walls, with Shift locking to cardinal directions for more percise drawing. v1.03.79 to v1.03.81 | 6-30-26 Scaffolded the drafting canvas: pixels to feet scale, snap to grid, and the first working render loop with simple grid and stuf. Fixed a small topbar CSS bug where button heights jumped on hover. If you read all this, thanks :D
v1.04.11 to v1.04.13 | 7-29-26 New course card layout with a proper title/kicker header block and reworked filter buttons, ditching the old boxed style for underline tabs cuz its more dense. Added an orange accent color filled progress bar for anything not enrolled yet. Added a dev time badge to the hero using Hackatime in the main thing. Ripped out the entire theme system, one look only now cuz its better. v1.04.09 to v1.04.10 | 7-29-26 Full hero section overhaul. New copy, new photo instead of the old doorway SVG, new grid layout instead of flexbox, added a soft noise texture to the landing background. (tryina copy like concrete) Fixed a wrong journal link pointing at the wrong repo path. v1.04.06 to v1.04.08 | 7-29-26 Pulled a markdown course entry out of the catalog for good, both the JSON data and the catalog listing. (its not good) Small dropdown structure fix in the topbar CSS. v1.04.04 to v1.04.05 | 7-29-26 Added a course details overlay with author, published/updated dates, and sources. Fixed a typo where the close button ID didn’t match, so the overlay wouldn’t close. (SLOPPY CODDEE FREE MEE FROM ITT AAAAAA) v1.04.03 | 7-29-26 Added URL routing for logged out users. Course catalog and sign in views now update the URL with pushState and respond correctly on refresh, instead of only working for logged in users. Same stuf. v1.03.98 to v1.04.02 | 7-28-26 Reorganized assets into an img subfolder and added minibit sprites. Built a reusable dialogue box component with a typewriter-style next button flow, wired it into the landing page as a mayor NPC introduction, then cleaned up its sizing and added a completion message. Updated INFO.txt to match the actual lesson type naming convention and added entries for architectureSim and cookingSim . Looking for coding profesionalls to help build a curriculum, email me or create an issue on my github!
v1.04.27 to v1.04.28 | 8-1-26 Merged the practice hub into one combined view across all enrolled curriculums instead of a separate card per course, so standard and survival practice now pull questions from everything you’re enrolled in at once. Added a countdown banner showing when paced mode lessons renew, and cleaned up the settings label wording twice. (cuz i didn’t like how it sounded) v1.04.24 to v1.04.26 | 8-1-26 Paced mode is now fully wired in. Lessons lock until you reach the current day’s target, missing a day triggers a review quiz scaled to how long you were gone, and every 7 completed lessons triggers a module exam gate (80% to pass, locks further progress until you clear it). Also fixed the dialogue box to support multiline text properly and fixed the onboarding highlight so it targets dropdown menus correctly instead of the wrong element. (check image to see how it failed lol) v1.04.19 to v1.04.23 | 8-1-26 Added the paced mode toggle itself (1 lesson a day). Onboarding got swapped from static tooltip cards over to the new dialogue box system, then the dialogue box was made to type itself out letter by letter instead of dumping all the text at once. Along the way: fixed onboarding skipping missing elements, handled rapid clicking through steps, fixed a broken const reference, and fixed reset behavior when onboarding reopens. v1.04.17 to v1.04.18 | 7-31-26 Deleted a pile of AI-generated lesson bundles that were just cluttering the catalog (architecture, conlang-mythology, html-mastery), keeping only a couple test lessons around. Added question pooling so a lesson can define a questionCount and pull a random shuffled slice instead of showing every question every time. v1.04.14 to v1.04.16 | 7-30-26 Rebuilt the about page into proper sectioned content instead of one big hero block, swapped in a new header image, fixed a dumb black border bug on the landing page from a leftover CSS class, and moved the difficulty badge over next to the details button. If you read all this, consider reposting so I can get more attention, thanks!! :D
I’ve been testing out some different ui’s, since yall keep saying mine is AI, which I’ll have you know, is not, its called modern. (i have screenshot of testing out an like windows 98 kinda retro ish ui idk what its called.) I do want to know this though, What does a NOT AI ui look like? If my project looks like AI, people will not be keen to trusting my courses, much less learning about them. If you have any ideas, PLEASE WRITE A COMMENT!! :D (Also on progress with Novara: v1.04.29, fix for course.js v1.04.30, adjust length for the standard practice since if you only do one lesson, and then try to do the practice, you’ll answer 30 questions about that one lesson, mostly repeating the same questions. v1.04.31, new mastery icon cuz i forgot to do it earlier v1.04.32, better cover progress with padlock v1.04.33, remove bonus questions, since they kinda fit weirdly and dont really help even if the science is behind it v1.04.33, give Mayor Bob more character cuz he sounds like a robot. v1.04.34, move style.css into css/style.css v1.04.35, new layout for lessons and sections view.)
v1.04.56 to v1.04.60 | 8-6-26 Rebuilt the public course catalog page and gave the about page its own CSS file instead of riding on landing styles, plus a new brand lockup (logo + NOVARA wordmark) in the nav headers across pages. Added a goals section to the about page. Added a “don’t trust us, go check yourself” section and a profit disclaimer to the privacy policy. Swapped “we” language for “I” across the README and privacy policy since it’s a solo project and someone got confused. Small homepage copy tweak too, swapped the trust blurb for a direction to the privacy policy and added a “Time Spent” label above the hackatime badge. v1.04.44 to v1.04.55 | 8-5-26 Kept moving inline styles into real CSS classes across course.js (loading states, lesson complete screens, onboarding highlight, dialogue boxes, 404 page). Pulled the privacy policy’s inline style block out into its own privacy.css file. Rebuilt the homepage hero into a two column layout with trust info on one side and quick action buttons on the other, replacing the old split image hero. Changed the footer message, revised the README copy, swapped a few README screenshots, and bumped the hackatime badge color. Now that the inline is gone, it will be easier to adjust the ui. v1.04.36 to v1.04.43 | 8-4-26 Kept clearing inline CSS out of course.js , this round hitting the explorer cards, syllabus sidebar, section buttons, and the course details modal. Added a null check so progress calculation doesn’t break when a course file is missing. Fixed a syntax typo (stray brace) in the syllabus section click handler. Removed the old Godot core AI generated course from the catalog. Added a small watermark comment to files generated by the theme tool, and created a dialog-btn-container class to clean up some remaining inline button styling. I also figured out how to sign my commits using a SHA encryption service so every commit will say “Verified”
v1.04.66 to v1.04.67 | 8-8-26 Moved the return button, description link, and progress bar into the syllabus sidebar instead of a separate meta block up top. Added a course description modal you can open from the sidebar. Reworked the syllabus layout to fill the viewport height properly, cleaned up border and shadow inconsistencies, and shrunk the details modal width. v1.04.65 | 8-8-26 Big CSS pass across course.css , landing.css , and style.css . Reworked the syllabus sidebar to include a course title, progress bar, and a dedicated test button styled with the accent color. v1.04.63 to v1.04.64 | 8-8-26 Removed the old Godot scene renderer, its CSS, and the leftover import in course.js . Not used anymore. (It was made with ai help) v1.04.62 | 8-7-26 Added a line to the landing page footer noting no generative AI was used in building the site. (just need to remove the last ai curriculum.) v1.04.61 | 8-6-26 Cleaned up mainpage CSS spacing and rewrote the landing copy. Turned the trust badge area into a short blurb on why Novara exists, moved the Hackatime badge inline with the time spent text, and added a dedicated trust button linking to the privacy page. Thanks for reading this! Have a good day yall!
v1.04.69 Yes, i really am studying “The Science of Relationships” to create a curriculum on it. I researched on the Halo Effect, Mere Exposure Effect, Propinquity Effect, and Social Exchange Theory. These are for the first course in the curriculum: Human Attraction & Opportunity. Read the notes: https://github.com/Cassetu/Novara/blob/master/journal/relationship/notesTheScienceOfRelationships.md And Timelapse: https://lapse.hackclub.com/timelapse/cPdZpEF6u5YJ
v1.04.72 More psychology hooray Covered more things for my next course: “Stage Models & Communication” Knapp’s Relationship Model Social Penetration Theory Evolutionary Explanation for Physical Attractiveness Johari Window Uncertainty Reduction Theory (URT) Read the notes!: https://github.com/Cassetu/Novara/blob/master/journal/relationship/notesTheScienceOfRelationships.md#stage-models--communication Timelapse: https://lapse.hackclub.com/timelapse/1LwshB7x8AEr https://lapse.hackclub.com/timelapse/ir_E9ROtKHUr I can actually use nice formatting without getting ai accusations cuz i got timelapses lol
v1.04.74 EVEN MORE PSYCHOLOGY Covered more things for my next course: “Attachment, Love & Social Dynamics” John Bowlby’s Attachment Theory Internal Working Model (IWM) Adult Attachment Styles (Secure vs. Insecure) (Look at the image) Sternberg’s Triangular Theory of Love Social Exchange Theory (SET) Read the notes!: https://github.com/Cassetu/Novara/blob/master/journal/relationship/notesTheScienceOfRelationships.md#attachment-love--social-dynamics Timelapse: https://lapse.hackclub.com/timelapse/PppFJPZGUgEp https://lapse.hackclub.com/timelapse/YqlfYCCx08j7
v1.04.76 Taking a break from psychology notes to do some coding again. began working on a curriculum tool so educators can easily build em without having to work through the complicated json structure. its a bit hard since i want to export a zip, and im not entirely sure how that would work, and also i need to double check how my course.js processes the json so i can get exactly all the information to put into it. ai detector thing. examines github repositories and find all comments and flags exessive amounts, or exessive explanations in them (classic ai fingerprints) as well as flagging verbose function names and shows the time it would take to make the project at 70 wpm and detects inconsistencies in commit times (eg 1000 new code typed after 2 minutes of another commit that would be flagged) then gives a % of confidence. 0-30% is prob human, 30-50% is mixed unsure, 50-100% is definetly full ai. Before you accuse someone, make sure to do througouh like questioning and interviews and such because this tool is imperfect. This way i can easily identify projects that have disgenuine work and report them to stardance to take care of. ( https://cassetu.github.io/Novara/html/aisubTool.html ) I got gemini to help reformat the code since it was a bit of a mess, dw i had a full disclaimer. (ai vibe coders take notes.) It was a big challenge getting the github token to work, but it functions now and doesn’t steal your information!! :D also i ran my own project through it once, it was clear, and then i ran it again after commiting it, and now it thinks my project is ai, because the code scans for these specific traces, that are present in the code itself, meaning that if it scans itself, it will find everything its looking for. T - T (false positive in the first image) leave a comment to help! thx!
v1.04.91 Celebrating my 250th commit!! :D fully deleted the curriculum tool since its frustrating and too hard rn and i’m going to do it later after i do my data refactor removed the ai detector thing, the link still works for now, but I don’t think i want to use it because its too unreliable, and is too much of a project in its own right than a small tool I’m doing a major refactor of my data structure. Previously, my curriculum information all sat in one MASSIVE json. but now i have a complex folder network. Each curriculum will have an index.json file, so the catalog.json routes to the index.json that leads into the courses, then to the sections, and down to the individual lessons. Its kinda like a phonebook… i think. Every lesson will be its own json with its own list of “blocks” that are pieces that i can take apart or put together to make lessons unique! Kinda like its own mini programming language lol. Currently the site is unusable since the course.js isn’t fully complete to understand the new data structure. :P
v1.04.98 Site is still unusable currently *Continuing the data refactoring, I fixed some of the references in openSyllabus. I also completly removed the faulty references to isBundle() , i accidentaly messed up the case of loadIndex to LoadIndex but luckily a simple glance at the console pinpointed it for me :D (Thank god for descriptive error messages) Added the hackatime lapse links to the notes (since i want to use nice formatting without ai accusations i lowkey need to do that) Started doing notes on “The Science of Logical Reasoning specifically for: Jerome Bruner Theory of Cognitive Development.” Its for building good curriculums and proper teaching, they have this cool thing called a “spiral curriculum” that you should search up. (I’m also trying out a recording timelapse system, that should be better than lapse since lapse only takes like a picture every minute and stiches it together, this takes a picture every second and then compresses it) the video is only of v1.04.97 -> v1.04.98 editing portion Thanks for your support! :D
v1.05.26 Site is still somewhat unusable currently Changes: fixed getAllQuestionsForEntry build render functions for all the different block types: renderSubmitBlock , renderMultipleChoiceBLock , etc purged a few bugs yayy moved the workspace thing so it has a new sidebar and is familiar to the course syllabus view. did a whole buncha formatting troubleshooting bought a domain!!!! go to novaraedu.org . which means you can find it on search enginges now (i think)
v1.05.77 Site is becoming more usable!! Changes: Has a working branch vs a master branch, so in progress updates will not effect the current version on the web. made image label block logic cleared old logic for renderers did a whole lot of SEO things fix sw.js with real file paths (not the ancient ones) more styling in css node.js to automatically create html things for web crawlers ( auto-generate-curriculum-pages ) update homepage to look wayyy better fully rebuilt practice/exam system for block-based lessons logical fallicies notes lesson end screen with nature Problems Encountered: Incorrect formatting (always happens when u type fast) Bad css Difficult logic with complicated storage format (e.g., looking through .sections, .lessons, etc) check out the latest build: novaraedu.org
Ships:
Novara v1.03.56 Novara is a free learning website, It has multiple courses with varying lesson types, so information is presented and tested in many ways. Features include: Focused Learning : Enrollment is limited to a maximum of 3 curriculums at a time to encourage focus and prevent overwhelm. Structured Content : Curriculums contain courses, and courses contain modular lessons. Knowledge Checks : Built-in quizzes to test your knowledge at the end of courses. Progress Tracking : Visual indicators to show completed lessons and remaining coursework. The main architecture is designed using HTML, CSS and JS. Designed to be modular, so adding another course/curriculum is easily done by writing one single json data file. AI USAGE DISCLAIMER AI is used in the generation of our courses. We have not yet received assistance from subject-matter experts in developing our curricula. To maintain quality, the AI is guided by strict instructions designed to reduce low-quality content (“slop lessons”) and encourage materials that engage students in critical thinking and active learning. Despite these safeguards, mistakes and errors may still occur. If you find an issue, please report it by emailing: [email protected] (Responses take 3-5 business days). Thank you for helping us improve. README + More Details here: https://github.com/Cassetu/Novara#table-of-contents TRY IT HERE!: https://cassetu.github.io/Novara/index.html (To access full content you must sign in/register)
Novara v1.03.97 Novara is a free learning website, It has multiple courses with varying lesson types, so information is presented and tested in many ways. New Features from Previous Ship include: Architecture Simulation: A new lesson type where the user can design an simple floor plan, complete with an accurate scale, rectangle tool, and eraser. Privacy Policy: Users can understand how their data is stored within Novara, and feel safer using the relativly unknown website. New Lesson Flow: Topbar no longer uses Opacity, and instead has a back button neatly placed at the top instead of the usual navigation buttons. Alerts: Almost all of the alerts have been moved to custom inline boxes to be more user intuitive and welcoming. I think i missed a few somewhere here and there tho. AI USAGE DISCLAIMER AI is used in the generation of our courses. We have not yet received assistance from subject-matter experts in developing our curricula. (I’m working on finding people, hopefully soon) To maintain quality, the AI is guided by strict instructions designed to reduce low-quality content (“slop lessons”) and encourage materials that engage students in critical thinking and active learning. Despite these safeguards, mistakes and errors may still occur. If you find an issue, please report it by emailing: [email protected] (Responses take 3-5 business days). Thank you for helping us improve. README + More Details here: https://github.com/Cassetu/Novara#table-of-contents PRIVACY POLICY: https://cassetu.github.io/Novara/html/privacy.html TRY IT HERE!: https://cassetu.github.io/Novara/index.html (To access full content you must sign in/register)
Novara v1.04.67 Novara is a free learning website, It has multiple courses with varying lesson types, so information is presented and tested in many ways. Our Goal: Build a library of curriculums so users can get the same learning opportunities of school, with more ways to learn than reading and note-taking, and at no cost to the users. (Verbatim from homepage) ##New Features from Previous Ship include: NEW UI: Earlier versions were apparently too “ai” so I created a new version that hopefully doesn’t look like ai. Since if people think that any part of the website is ai, the website in the whole is low quality rubbish, which Novara is NOT and will NOT allow itself to be. Inline css has been replaced with classes and seperate css files. Those css files are soon to be further seperated into smaller css files to make css navigation easier. Enhanced Privacy Policy: Now includes direct links allowing users to do self-study as well as a profit section. New Syllabus Flow: Now uses a sidebar with the section names and # of lessons. Clicking on the section opens up the lesson on the right side workspace. Mayor Bob: THE MASCOT TO GUIDE ALL!! He hopefully has more character. (I feel like hes better now but idk) Paced Mode!!!: Lessons lock until you reach the current day’s target, missing a day triggers a review quiz scaled to how long you were gone, and every 7 completed lessons triggers a module exam gate (80% to pass, locks further progress until you clear it). Because it matches the real school format of teaching, and i feel like the information will be better retained by ppl if its taught over several days instead of all being shoved down ur throught. AI Courses: ALL GONE!! Looking for proffesionals in single subjects to assist in new proper course creation. Ai work will never replace us!! URL Routing: You can share links and bookmark pages and since its all the same html file, it wouldn’t work, but now it does bc we have the “?=###” things that work now. ##Difficulties: Forever the bane of my existence, the typos an missing semicolons or braces. Also working through the css to ensure that the content is structured how i like it. Also did a fix where my previous thing would break if a course file was missing when the catalog json had it listed, now it just skips over it. The bonus question was fiting weirdly so i js removed it entirely. At some point i made the dialogue boxes have the typing animation, but i forgot about new lines and whitespaces also have to be considered in that logic, so at some point the dialogue would just trail off the end of the text box lol, without any spaces or new lines. Css bugs also. I js realized i also forgot to style the scrollbars, but ill work on that later. side note: i figured out how to sign my commits using a SHA encryption service so every commit will say “Verified” (ONLY REMAINS ONE AI COURSE THAT IS NOW PROPERLY ATTRIBUTED IN ITS DETAILS MENU, THE AI DISCLAIMER IS DISCONTINUED) README + More Details here: https://github.com/Cassetu/Novara#table-of-contents PRIVACY POLICY: https://cassetu.github.io/Novara/html/privacy.html TRY IT HERE!: https://cassetu.github.io/Novara/index.html (To access full content you must sign in/register, u can trust Novara, and if you don’t, read the Privacy Policy!)...
|
1792828341.502139
|
1792914741.502139
|
|
6490
|
Metroid Mania YSWS by @Acidicts | Stardance
|
Acidicts
|
3
|
36.0
|
455
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T14:21:29Z", "hours": 21.0, "multiplier": 17.49, "payout": 362, "blessing": "neutral", "text": "Metroid Mania - Ship Summary The project this ship has been focused on order management, admin controls, and user systems. New Key features include: Order & Form Refactoring : The order page was overhauled to use a single dynamic form ( 0e820f21 ), streamlining UI validation and charm slot linking ( f35b58a9 ). Prize order deletion now clears FK references cleanly ( 9b44cb46 ). Admin Enhancements : Admin workflows gained action grouping, force product deletion, and an overlay with legal/NDAs ( eacd0880 ). Superadmin detection was decoupled from environments ( 8dc20948 ). User Systems : A username system was added, alongside approved_seconds for precise credit calculations ( 6db7a580 ). Address management was introduced (then simplified) for physical orders ( c4d89a16 ). UI/UX Polishes : Demo link validation and a .btn-retro-noanim class improved consistency ( 72ce7806 , 1ba61a4f ). Like-button interactions were partially decoupled into partials ( 62203e0e ). Current Status : The project is streamlining legacy code (e.g., removing program keys a03bc008 , test addresses f4c6969d ) while hardening admin workflows. Redis integration and DB schema updates are live ( 783b67c4 ), and form state management remains a focus. Learned : Dynamic form reduction simplifies order handling, but requires careful validation. Admin overlays centralize critical actions, though over-NDAs complicate UX. Dropping the address model highlighted the cost of premature data-collection where you can outsource it to an existing system. The ship is trimming fat, tightening permissions.", "repo": "https://github.com/Acidicts/Metroid-Mania", "demo": "https://metroidmania.bing-bong.uk?demo=true"}, {"ship_num": 2, "ts": "2026-07-17T17:01:54Z", "hours": 5.0, "multiplier": 11.4, "payout": 53, "blessing": "neutral", "text": "Added settings that enabled address collection on start (default: false) Prizes which require a address (physical) ask for you to choose out of your addresses Added a way to manage user addresses (admins cannot see addresses) Added Ship request queue placement so you know how many things have to be reviewed ahead of time", "repo": "https://github.com/Acidicts/Metroid-Mania", "demo": "https://metroidmania.bing-bong.uk?demo=true"}, {"ship_num": 3, "ts": "2026-06-27T11:01:32Z", "hours": 10.0, "multiplier": 3.99, "payout": 40, "blessing": "neutral", "text": "Set Up - Setup my code-server environment, with ruby lsp Added Redis Caching to decrease load time for admin/users and other menus Made new mobile UI, and added Addresses, and changed the Comments to be polymorphic to enable easier adding to other things (devlogs, ships, orders) Added admin changeable messages for when not running and rsvp is enabled", "repo": "https://github.com/Acidicts/Metroid-Mania", "demo": "https://metroidmania.bing-bong.uk?demo=true"}]...
|
[{"post_id": 48183, "ts": "202 [{"post_id": 48183, "ts": "2026-08-16T14:08:31Z", "hours": 5.5617, "text": "Metroid Mania Devlog Key Milestones & Features Username System & Legal Compliance : Added user username tracking, NDA setting to prevent address viewing, and an admin overlay displaying legal info(name) (eacd088). This enhances user pii protection by requiring a separate proccess to be done too. Dynamic Order Page : Refactored the order page into a single, dynamic form that adds/removes elements as needed (0e820f2), simplifying user interaction and reducing UI complexity. Encapsulated Connection Logic : Made the connection method a private instance method (0e86db0), improving code modularity and reducing unintended side effects. Admin System Overhaul : Removed environment-based superadmin detection (8dc2094), streamlining admin permissions for better security and maintainability. ** Current Main Focus ** To ensure user data is safe and leaning more on hca for sensitive info (legal_names, phone_number, and addresses)"}, {"post_id": 46317, "ts": "2026-08-13T13:46:11Z", "hours": 3.5772, "text": "Whole lot of reading api docs whilst coding: Removed Addresses from database to use access tokens to fetch from hackclub auth to maintain more up to date info and remove address pii from local database"}, {"post_id": 44253, "ts": "2026-08-09T21:42:29Z", "hours": 0.8358, "text": "Improved styling and added demo link so adding to unified db is easier (all data is on site)"}, {"post_id": 43953, "ts": "2026-08-09T12:27:12Z", "hours": 2.9561, "text": "Devlog: Admin Approved Time Override## SummaryAdded approved_seconds to Ship model, allowing admins to approve a different duration than what was devlogged lets the ysws stay in a budget by removing charm_notches for time that won’t contribute to budget. This enables scenarios where a user logs 4h but admin only approves 2h for credit/charm calculations.## Changes### Database- Added approved_seconds integer column to ships table (defaults to devlogged_seconds if not explicitly set)### Models- Ship : New approved_seconds attribute with default, set_approved_seconds callback (copies from devlogged_seconds on create), and recalculate_charm_notches! method for manual sync- Project : ship_and_award_credits! now uses approved_seconds for credit/notch calculation; removed ship_total_notches validation- ShipRequest : approve! accepts and passes approved_seconds ; reject! now destroys associated charm notches- User : reconcile_charm_notches! uses approved_seconds instead of devlogged_seconds for carryover calculations### Controllers- Admin ProjectsController : Pass approved_seconds param through approve/ship/force_ship actions- Admin ShipRequestsController : Pass approved_seconds param through approve action### Views- Ship request approval form: Added “Approved Time” field (number input, max = devlogged_seconds)- Ship cards: Display “Approved Hours” alongside devlogged hours### Tests- Comprehensive coverage for: - approved_seconds determining notch awards - Devlogged seconds copied to approved seconds when not set - Explicit approved_seconds overriding devlogged_seconds - Carryover hours across multiple ships - Multiplier application on approved_seconds - recalculate_charm_notches! syncing, removing excess, preserving admin_granted - reject! destroying charm notches (owner and recipient) - Controller test: approve respects approved_seconds for notch calculation## Backward CompatibilityThe set_approved_seconds callback defaults to devlogged_seconds when not explicitly set, so existing ships and flows without the new param continue working unchanged."}, {"post_id": 43547, "ts": "2026-08-08T21:34:57Z", "hours": 4.7067, "text": "Add sessions association and related methods, update tests and models- Added has_many :sessions with dependent destroy to User Added del_sessions method and invoked in destroy Updated test suites (created a buncha them) and model validations for sessions, addresses, admin actions, and other features Added base_cost to product for better checkout workflow Fixed issue where you couldn’t get free charm (if charm was set to free it wouldn’t let you redeem it) Fixed product delete and added force delete button Refactor prize order deletion to clear charm slot FK references Refactor charm slot reuse, add Redis service and DB name updatesRename Postgres DB to metroid_mania_test, add Redis container, adjust environment variables, refactor Order model to reuse existing empty charm slots with capacity limits, simplify loadout view logic, and add tests for slot reuse and header loadout. Fix Guide Styling"}, {"post_id": 37819, "ts": "2026-07-30T19:27:40Z", "hours": 2.3794, "text": "Enhanced UI & UX : The like button system now uses a new .btn-retro-noanim class for buttons that you want styled without the hover bob animation, ensuring visual consistency while reducing unnecessary animations commit . A major refactor extracted a reusable button partial and improved flash UI feedback for like/unlike actions, streamlining code and user experience commit . Simplified Admin Flows : Removed redundant User.credits and corrected logic error in views/devlogs/_ships.html.erb Currency recalculation logic was streamlined to reduce redundancy, with UI updates synchronized across admin sections for reliability and performance commit . Backend Normalization : Repository URLs are now consistently formatted, and GitHub identifier handling was improved to reduce errors in integration and dependency management commit . User Experience Polish : Comment form labels were updated, and the comment field was made optional to improve accessibility and reduce friction commit . Current Status : The project is hitting key milestones in user-facing polish and admin tooling, with a strong emphasis on maintainability. Core features like commenting and liking are now more robust, while backend consistency sets the stage for scalable integrations."}, {"post_id": 34656, "ts": "2026-07-25T15:41:20Z", "hours": 0.6544, "text": "Refactor like/unlike actions, extract button partial, improve flash UISkip ensure_user_setup for like and unlike actions, replace redirect with turbo_stream and fallback HTML, extract the like button into a partial, and rewrite the flash partial with a fixed position, close button and fade‑out animation."}, {"post_id": 28577, "ts": "2026-07-14T22:16:45Z", "hours": 0.5161, "text": "Key Milestones & Features The project has introduced a foundational system for managing ship deployments with the implementation of a queue placement for ship requests . This feature ensures organized handling of ship allocation, likely addressing scenarios where players or systems request ships (e.g., resource management, combat, or exploration mechanics). The queue system likely prevents overlaps or conflicts, enabling smoother gameplay and logical progression. Current Status The core queue logic is now part of the codebase (commit: 2bc9e46 by Acidicts). While this marks a critical step in structuring backend mechanics, the project remains in early development. No UI or full integration details are visible yet, suggesting future work will tie this system into gameplay loops, player actions, or event triggers. Things Learnt This iteration highlights the importance of asynchronous request handling in game systems, especially for resource-heavy actions like deploying ships. Implementing a queue likely involved balancing performance, fairness, and user expectations. The team may have explored patterns for prioritization, delay handling, or concurrency, which will be key as complexity scales."}, {"post_id": 23640, "ts": "2026-07-06T18:34:48Z", "hours": 3.75, "text": "feat(address): add address management system for physical products- create Address model with country enum and has_many :orders association add AddressController with CRUD operations supporting JSON and HTML formats add AddressesController with create, update, destroy actions and reload parameter add address association to Order model (belongs_to :address, required: false) add physical attribute to Product model with physical? helper method update User model to use has_many :address association with nested attributes add migrations for addresses table and order address reference (address_id) add address modal UI with form for creating addresses (HTML/JS) add address picker and delete functionality in user edit view add address selection dropdown for physical product orders in order forms add address display in order details view add CSS styles for address modal, form elements, and utility classes add JavaScript for modal interactions, address deletion, and form submission add trash-bin.svg icon for delete button update routes to include destroy action for addresses refactor(order): improve address handling in order creation fix conditional logic for accessory cost calculation (separate if blocks) add address assignment for physical products during order creation update product form to include physical item checkbox fix(validation): improve form field warning animations add fade-out transition for field validation warnings via fade-out class add timer-based warning auto-clear functionality (3s delay, 400ms fade) add transition properties for border-color and box-shadow on field-invalid style(application): add CSS utility classes and address styling add transition properties for field-invalid class (border-color, box-shadow) add fade-out animation for field-validation-warning (opacity transition) add .apf-section-darken, .address-trigger-btn, .del-btn utility classes add .inline, .jsb, .w100p, .g2r layout utility classes"}, {"post_id": 20343, "ts": "2026-07-01T22:23:24Z", "hours": 0.4053, "text": "Added toggle to disable the address page in the guide/ popup thing, this allows admins to disable collecting addresses immediately and lets people do it later on, eg when ordering a physical prize"}, {"post_id": 16561, "ts": "2026-06-26T22:39:51Z", "hours": 0.55, "text": "Added admin changable messages, allows admins to change the rsvp message"}, {"post_id": 15339, "ts": "2026-06-24T22:26:53Z", "hours": 6.4028, "text": "Made new mobile UI, and added Addresses, and changed the Comments to be polymorphic to enable easier adding to other things (devlogs, ships, orders) - (allows many different models to have comments)"}, {"post_id": 5933, "ts": "2026-06-09T22:20:17Z", "hours": 0.4317, "text": "Making Ruby-lsp work on my code-server setup"}, {"post_id": 5910, "ts": "2026-06-09T21:46:45Z", "hours": 1.2281, "text": "Continue on caching for faster mass user loading"}, {"post_id": 5188, "ts": "2026-06-08T21:40:53Z", "hours": 0.3869, "text": "Added Redis Caching to enable rapid user loading"}, {"post_id": 4982, "ts": "2026-06-08T17:04:50Z", "hours": 1.4683, "text": "Setting up coder enviroment"}]...
|
Title: Metroid Mania YSWS by @Acidicts | Stardance Title: Metroid Mania YSWS by @Acidicts | Stardance
Devlogs:
Setting up coder enviroment
Added Redis Caching to enable rapid user loading
Continue on caching for faster mass user loading
Making Ruby-lsp work on my code-server setup
Made new mobile UI, and added Addresses, and changed the Comments to be polymorphic to enable easier adding to other things (devlogs, ships, orders) - (allows many different models to have comments)
Added admin changable messages, allows admins to change the rsvp message
Added toggle to disable the address page in the guide/ popup thing, this allows admins to disable collecting addresses immediately and lets people do it later on, eg when ordering a physical prize
feat(address): add address management system for physical products- create Address model with country enum and has_many :orders association add AddressController with CRUD operations supporting JSON and HTML formats add AddressesController with create, update, destroy actions and reload parameter add address association to Order model (belongs_to :address, required: false) add physical attribute to Product model with physical? helper method update User model to use has_many :address association with nested attributes add migrations for addresses table and order address reference (address_id) add address modal UI with form for creating addresses (HTML/JS) add address picker and delete functionality in user edit view add address selection dropdown for physical product orders in order forms add address display in order details view add CSS styles for address modal, form elements, and utility classes add JavaScript for modal interactions, address deletion, and form submission add trash-bin.svg icon for delete button update routes to include destroy action for addresses refactor(order): improve address handling in order creation fix conditional logic for accessory cost calculation (separate if blocks) add address assignment for physical products during order creation update product form to include physical item checkbox fix(validation): improve form field warning animations add fade-out transition for field validation warnings via fade-out class add timer-based warning auto-clear functionality (3s delay, 400ms fade) add transition properties for border-color and box-shadow on field-invalid style(application): add CSS utility classes and address styling add transition properties for field-invalid class (border-color, box-shadow) add fade-out animation for field-validation-warning (opacity transition) add .apf-section-darken, .address-trigger-btn, .del-btn utility classes add .inline, .jsb, .w100p, .g2r layout utility classes
Key Milestones & Features The project has introduced a foundational system for managing ship deployments with the implementation of a queue placement for ship requests . This feature ensures organized handling of ship allocation, likely addressing scenarios where players or systems request ships (e.g., resource management, combat, or exploration mechanics). The queue system likely prevents overlaps or conflicts, enabling smoother gameplay and logical progression. Current Status The core queue logic is now part of the codebase (commit: 2bc9e46 by Acidicts). While this marks a critical step in structuring backend mechanics, the project remains in early development. No UI or full integration details are visible yet, suggesting future work will tie this system into gameplay loops, player actions, or event triggers. Things Learnt This iteration highlights the importance of asynchronous request handling in game systems, especially for resource-heavy actions like deploying ships. Implementing a queue likely involved balancing performance, fairness, and user expectations. The team may have explored patterns for prioritization, delay handling, or concurrency, which will be key as complexity scales.
Refactor like/unlike actions, extract button partial, improve flash UISkip ensure_user_setup for like and unlike actions, replace redirect with turbo_stream and fallback HTML, extract the like button into a partial, and rewrite the flash partial with a fixed position, close button and fade‑out animation.
Enhanced UI & UX : The like button system now uses a new .btn-retro-noanim class for buttons that you want styled without the hover bob animation, ensuring visual consistency while reducing unnecessary animations commit . A major refactor extracted a reusable button partial and improved flash UI feedback for like/unlike actions, streamlining code and user experience commit . Simplified Admin Flows : Removed redundant User.credits and corrected logic error in views/devlogs/_ships.html.erb Currency recalculation logic was streamlined to reduce redundancy, with UI updates synchronized across admin sections for reliability and performance commit . Backend Normalization : Repository URLs are now consistently formatted, and GitHub identifier handling was improved to reduce errors in integration and dependency management commit . User Experience Polish : Comment form labels were updated, and the comment field was made optional to improve accessibility and reduce friction commit . Current Status : The project is hitting key milestones in user-facing polish and admin tooling, with a strong emphasis on maintainability. Core features like commenting and liking are now more robust, while backend consistency sets the stage for scalable integrations.
Add sessions association and related methods, update tests and models- Added has_many :sessions with dependent destroy to User Added del_sessions method and invoked in destroy Updated test suites (created a buncha them) and model validations for sessions, addresses, admin actions, and other features Added base_cost to product for better checkout workflow Fixed issue where you couldn’t get free charm (if charm was set to free it wouldn’t let you redeem it) Fixed product delete and added force delete button Refactor prize order deletion to clear charm slot FK references Refactor charm slot reuse, add Redis service and DB name updatesRename Postgres DB to metroid_mania_test, add Redis container, adjust environment variables, refactor Order model to reuse existing empty charm slots with capacity limits, simplify loadout view logic, and add tests for slot reuse and header loadout. Fix Guide Styling
Devlog: Admin Approved Time Override## SummaryAdded approved_seconds to Ship model, allowing admins to approve a different duration than what was devlogged lets the ysws stay in a budget by removing charm_notches for time that won’t contribute to budget. This enables scenarios where a user logs 4h but admin only approves 2h for credit/charm calculations.## Changes### Database- Added approved_seconds integer column to ships table (defaults to devlogged_seconds if not explicitly set)### Models- Ship : New approved_seconds attribute with default, set_approved_seconds callback (copies from devlogged_seconds on create), and recalculate_charm_notches! method for manual sync- Project : ship_and_award_credits! now uses approved_seconds for credit/notch calculation; removed ship_total_notches validation- ShipRequest : approve! accepts and passes approved_seconds ; reject! now destroys associated charm notches- User : reconcile_charm_notches! uses approved_seconds instead of devlogged_seconds for carryover calculations### Controllers- Admin ProjectsController : Pass approved_seconds param through approve/ship/force_ship actions- Admin ShipRequestsController : Pass approved_seconds param through approve action### Views- Ship request approval form: Added “Approved Time” field (number input, max = devlogged_seconds)- Ship cards: Display “Approved Hours” alongside devlogged hours### Tests- Comprehensive coverage for: - approved_seconds determining notch awards - Devlogged seconds copied to approved seconds when not set - Explicit approved_seconds overriding devlogged_seconds - Carryover hours across multiple ships - Multiplier application on approved_seconds - recalculate_charm_notches! syncing, removing excess, preserving admin_granted - reject! destroying charm notches (owner and recipient) - Controller test: approve respects approved_seconds for notch calculation## Backward CompatibilityThe set_approved_seconds callback defaults to devlogged_seconds when not explicitly set, so existing ships and flows without the new param continue working unchanged.
Improved styling and added demo link so adding to unified db is easier (all data is on site)
Whole lot of reading api docs whilst coding: Removed Addresses from database to use access tokens to fetch from hackclub auth to maintain more up to date info and remove address pii from local database
Metroid Mania Devlog Key Milestones & Features Username System & Legal Compliance : Added user username tracking, NDA setting to prevent address viewing, and an admin overlay displaying legal info(name) (eacd088). This enhances user pii protection by requiring a separate proccess to be done too. Dynamic Order Page : Refactored the order page into a single, dynamic form that adds/removes elements as needed (0e820f2), simplifying user interaction and reducing UI complexity. Encapsulated Connection Logic : Made the connection method a private instance method (0e86db0), improving code modularity and reducing unintended side effects. Admin System Overhaul : Removed environment-based superadmin detection (8dc2094), streamlining admin permissions for better security and maintainability. ** Current Main Focus ** To ensure user data is safe and leaning more on hca for sensitive info (legal_names, phone_number, and addresses)
Ships:
Set Up - Setup my code-server environment, with ruby lsp Added Redis Caching to decrease load time for admin/users and other menus Made new mobile UI, and added Addresses, and changed the Comments to be polymorphic to enable easier adding to other things (devlogs, ships, orders) Added admin changeable messages for when not running and rsvp is enabled
Added settings that enabled address collection on start (default: false) Prizes which require a address (physical) ask for you to choose out of your addresses Added a way to manage user addresses (admins cannot see addresses) Added Ship request queue placement so you know how many things have to be reviewed ahead of time
Metroid Mania - Ship Summary The project this ship has been focused on order management, admin controls, and user systems. New Key features include: Order & Form Refactoring : The order page was overhauled to use a single dynamic form ( 0e820f21 ), streamlining UI validation and charm slot linking ( f35b58a9 ). Prize order deletion now clears FK references cleanly ( 9b44cb46 ). Admin Enhancements : Admin workflows gained action grouping, force product deletion, and an overlay with legal/NDAs ( eacd0880 ). Superadmin detection was decoupled from environments ( 8dc20948 ). User Systems : A username system was added, alongside approved_seconds for precise credit calculations ( 6db7a580 ). Address management was introduced (then simplified) for physical orders ( c4d89a16 ). UI/UX Polishes : Demo link validation and a .btn-retro-noanim class improved consistency ( 72ce7806 , 1ba61a4f ). Like-button interactions were partially decoupled into partials ( 62203e0e ). Current Status : The project is streamlining legacy code (e.g., removing program keys a03bc008 , test addresses f4c6969d ) while hardening admin workflows. Redis integration and DB schema updates are live ( 783b67c4 ), and form state management remains a focus. Learned : Dynamic form reduction simplifies order handling, but requires careful validation. Admin overlays centralize critical actions, though over-NDAs complicate UX. Dropping the address model highlighted the cost of premature data-collection where you can outsource it to an existing system. The ship is trimming fat, tightening permissions....
|
1792831948.3697894
|
1792918348.3697894
|
|
8100
|
Crawssembly by @The_Craw | Stardance
|
The_Craw
|
3
|
310.71
|
5664
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T09:56:51Z", "hours": 137.0, "multiplier": 19.59, "payout": 2622, "blessing": "neutral", "text": "CRAWSSEMBLY - New and Improved! “Programming languages are a lie!” This is Crawssembly, the number 1 project on all of stardance! It’s a project that’s been in production for over a year. It is an educational assembly-like programming language that teaches users how computers actually work. Programming languages like Python, Ruby, and Java pull the wool over your eyes by abstraction and simplification. Crawssembly is the first step to seeing clearly. What is new? INTERNET SOCKETS! CRAWOS COMMAND LINES! DYNAMIC LABEL JUMPING! IMPROVED DEVICES! DEDICATED PACKAGE SHARING WEBSITE! AND MORE! Check it out for yourself! (Shipped early due to Fraud Squad limitations, Crawssembly is too powerful for Hack Club)", "repo": "https://github.com/Jonah-Crawford/Crawssembly", "demo": "https://crawssembly.ultimatecraw.xyz/"}, {"ship_num": 2, "ts": "2026-07-02T17:49:35Z", "hours": 33.0, "multiplier": 19.65, "payout": 633, "blessing": "neutral", "text": "Crawssembly v1.1.0 ready to ship! “Programming languages are a lie!” This is Crawssembly, a project that’s been in production for almost a year. It is an educational assembly-like programming language that teaches users how computers actually work. Programming languages like Python, Ruby, and Java pull the wool over your eyes by abstraction and simplification. Crawssembly is the first step to seeing clearly.", "repo": "https://github.com/Jonah-Crawford/Crawssembly", "demo": "https://crawssembly.ultimatecraw.xyz/"}, {"ship_num": 3, "ts": "2026-06-26T21:15:26Z", "hours": 134.0, "multiplier": 19.78, "payout": 2409, "blessing": "neutral", "text": "Crawssembly: The beginner’s gateway to low-level thinking. \"Programming languages are a lie!\" This is Crawssembly, a project that’s been in production for almost a year. It is an educational assembly-like programming language that teaches users how computers actually work. Programming languages like Python, Ruby, and Java pull the wool over your eyes by abstraction and simplification. Crawssembly is the first step to seeing clearly.", "repo": "https://github.com/Jonah-Crawford/Crawssembly", "demo": "https://crawssembly.ultimatecraw.xyz/"}]...
|
[{"post_id": 79047, "ts": "202 [{"post_id": 79047, "ts": "2026-10-12T14:17:02Z", "hours": 5.8211, "text": "idk where these extra hours are coming from, but as long as I don’t ship them, they won’t count towards stardust so I’ll be fine. In the meantime, enjoy craw slop"}, {"post_id": 73135, "ts": "2026-09-24T13:36:27Z", "hours": 0.8872, "text": "It has come to my attention that not everyone who has followed Crawssembly has starred it on GitHub! Please, if you like my project, star it on GitHub at https://github.com/Jonah-Crawford/Crawssembly Thank you."}, {"post_id": 62476, "ts": "2026-09-05T20:43:32Z", "hours": 1.1861, "text": "I’m back! Fraud Squad unbanned me so WE are all having a party at my house Although I can’t use nano apparently anymore… so Crawssembly will be having it’s final ship very very soon"}, {"post_id": 53379, "ts": "2026-08-23T22:12:14Z", "hours": 4.7478, "text": "I’ve been doing much more testing and implementing the network device. Specifically testing the following commands: io net ip , io net addr , io net connect , io net socket , io net port , io net listen , io net accept , io net send , io net protocol , io net block , and io net recv ."}, {"post_id": 52283, "ts": "2026-08-22T12:07:09Z", "hours": 0.5569, "text": "HTTP requests working 🔥 ts is so peak icl"}, {"post_id": 51913, "ts": "2026-08-21T20:28:29Z", "hours": 4.2456, "text": "I’VE ACTUALLY DONE IT 🔥 Networking is now officially part of Crawssembly. Alpha tests on localhost have all passed"}, {"post_id": 51556, "ts": "2026-08-21T10:23:09Z", "hours": 0.3189, "text": "I’ve brought run back from the dead. You can now use run rXX to run a binary value inside the input register as a Crawssembly instruction"}, {"post_id": 51201, "ts": "2026-08-20T18:32:01Z", "hours": 0.4944, "text": "stardance"}, {"post_id": 50613, "ts": "2026-08-19T20:41:05Z", "hours": 1.6864, "text": "I’m finally getting somewhere with the editor, however I’m now having issues with character deletion, and adding characters inside empty newlines"}, {"post_id": 49579, "ts": "2026-08-18T13:50:02Z", "hours": 4.3281, "text": "Still no clue why characters aren’t being saved to memory in my free heap block Slow day today fr"}, {"post_id": 48745, "ts": "2026-08-17T08:45:08Z", "hours": 2.36, "text": "For some reason, I’ve been banned on slack. I don’t know why, since no one will tell me. This is not good news, but luckily it doesn’t seem to be a stardance-wide ban, so I can still do the hackathon."}, {"post_id": 48355, "ts": "2026-08-16T17:45:02Z", "hours": 8.0639, "text": "Lots of work today, sorry for the . I’ve been struggling with the text editor, heap buffers, cursor allocation, character addresses, etc etc… ad infinitum. However, I’m getting close. Rendering is outputting something, although I don’t know why typing doesn’t seem to add anything…"}, {"post_id": 47504, "ts": "2026-08-15T13:39:53Z", "hours": 4.2456, "text": "I’ve added io keyboard mod to create a bitfield of modification key presses for the keyboard device, so now keys like CTRL and TAB can be handled, which lays the foundation for my next project which is making a basic file editor in casm"}, {"post_id": 46783, "ts": "2026-08-14T09:10:12Z", "hours": 4.3825, "text": "Sorry for the but it’s been a hectic couple of days. I got into University! I’ve also been busy taking a look at a CGOL implementation, truly amazing stuff! Go check it out: https://github.com/srxcode/game-of-life-crawssembly"}, {"post_id": 45634, "ts": "2026-08-12T08:01:02Z", "hours": 1.1425, "text": "I’ve separated the old sleep command into sleepms for millisecond waits and sleepus for microsecond waits. Although, microsecond precision is highly dependent on the OS, so it won’t be as accurate as sleepms for smaller values (Say, n<50)"}, {"post_id": 45230, "ts": "2026-08-11T15:52:21Z", "hours": 1.3411, "text": "I’ve merged the new fgo rules to the project, so now fgo points to labels similar to jmp , but fgo 0 now jumps to the label defined in r01 I was having some issues with using git but I got them sorted"}, {"post_id": 45046, "ts": "2026-08-11T09:08:16Z", "hours": 0.8819, "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": 40794, "ts": "2026-08-04T15:32:01Z", "hours": 1.0728, "text": "I’ve been working with @BetterClient to inprove the program counter and bringing back fgo from casm beta. This is also a reminder that I’ll be OOO until next Monday."}, {"post_id": 40209, "ts": "2026-08-03T16:48:57Z", "hours": 1.4692, "text": "I’ve made publishing packages super easy now, all you need to do is craw init to create the package, and then craw pkg publish . As long as you’re signed into CPM and gh, it’ll just work"}, {"post_id": 40094, "ts": "2026-08-03T14:12:19Z", "hours": 1.1475, "text": "I’ve added Markdown support for CPM packages 🔥"}, {"post_id": 40004, "ts": "2026-08-03T11:00:47Z", "hours": 2.5797, "text": "@imakebloatedcode Thank you for your pr for CPM to include OpenAPI scemata, another great addition from the Craw Systems community Most of my time has been reviewing it and making small edits to include the security auth headers for API keys Official Announcement I’m not going to be online through the 5th August to the 10th August, I’ll be camping for those 5* days in a very low-data spot, and I’m almost certainly not taking my laptop. I might be able to get a tiny amount of code on my phone to keep my streak but certainly not enough to engage in my normal conversation on slack or post devlogs"}, {"post_id": 39500, "ts": "2026-08-02T14:31:42Z", "hours": 1.0703, "text": "Package creation and accounts are now working (theoretically) from the command line 🔥"}, {"post_id": 38989, "ts": "2026-08-01T16:48:04Z", "hours": 2.2369, "text": "The account page is looking better, and it’s survived some user testing 🙏 I need to add some boring stuff though like API key listing and said key management"}, {"post_id": 38863, "ts": "2026-08-01T12:58:59Z", "hours": 3.1425, "text": "I’ve been back working on CPM, focused on user accounts."}, {"post_id": 38130, "ts": "2026-07-31T10:56:08Z", "hours": 1.39, "text": "The Crawssembly community is real 🙏 I’ve been reviewing a PR on the GitHub to improve the multiplication script in the CSL ( std/math/multiply.craw )"}, {"post_id": 37274, "ts": "2026-07-29T21:10:18Z", "hours": 0.7014, "text": "I’ve been messing around with --input tag which seems to mess around a bit in the rust vm, but I think I’m getting closer to the cause"}, {"post_id": 36468, "ts": "2026-07-28T16:32:48Z", "hours": 1.0483, "text": "Hack Club seems to have updated the rules on banner images, claiming it has to be an image of your project working. This is no issue for Crawssembly. The new banner is now the output of one of my programs, creating the banner pixel for pixel. This both compiles with the new rule, as it demonstrates Crawssembly functioning, while maintaining its identity."}, {"post_id": 36310, "ts": "2026-07-28T10:47:11Z", "hours": 2.2539, "text": "I’ve discovered that the input file mechanism is broken, so that’s great. I’ve also been adding more commands to CrawOS"}, {"post_id": 35823, "ts": "2026-07-27T14:42:16Z", "hours": 1.9103, "text": "I’ve been adding some very basic commands, such as exit , help , and clear"}, {"post_id": 34854, "ts": "2026-07-25T21:54:23Z", "hours": 2.7158, "text": "Once you get 1 command working, many more will follow! That’s right, a command line written 100% in Crawssembly code 🔥"}, {"post_id": 34296, "ts": "2026-07-24T21:36:54Z", "hours": 0.505, "text": "icl I’ve not done much today, mostly testing the allocation code and it looks up to spec tbh, not much to say"}, {"post_id": 33496, "ts": "2026-07-23T14:28:32Z", "hours": 1.4308, "text": "Stack allocation and freeing appear to work, but I need to do more testing to prove it"}, {"post_id": 32893, "ts": "2026-07-22T10:59:17Z", "hours": 4.3922, "text": "I’m still working on stack allocation, the complex parts are walking the stack properly to get the headers, along with making sure I don’t corrupt any data. The image attached shows the maximum heap block size in blue, with the data taken up by the header of that block in red (top corner)"}, {"post_id": 32353, "ts": "2026-07-21T13:52:27Z", "hours": 1.4989, "text": "I’m going ahead with this schema for heap blocks, the reserved bits can be used for extra features that I might want to add in later versions"}, {"post_id": 32254, "ts": "2026-07-21T09:37:22Z", "hours": 12.9831, "text": "Staff, please remove the time on this devlog, I accidentally left nano open all night. Sorry!"}, {"post_id": 31982, "ts": "2026-07-20T20:21:19Z", "hours": 1.13, "text": "Reading user input isn’t that easy compared to a language like Python, where you can just do input() . Each character has to be processed as soon as the keyboard records a press, and then saved to memory. I’m currently working on a block method that takes every 16 character you type, and allocates a small block on the heap for each press. This is going to be used for my big project"}, {"post_id": 31817, "ts": "2026-07-20T14:36:29Z", "hours": 1.2011, "text": "I’ve decided to add a heap library to complement the stack library. Doing this should make my next idea easier"}, {"post_id": 31759, "ts": "2026-07-20T12:24:31Z", "hours": 0.7053, "text": "Please also star my actual github page! It’s more important than stardance followers 😤😤 https://github.com/Jonah-Crawford/Crawssembly"}, {"post_id": 31691, "ts": "2026-07-20T09:37:05Z", "hours": 1.4242, "text": "Since IEEE 754 single precision can encode much larger numbers than a standard 32-bit binary number, you can use the library to approximate much larger values for computation"}, {"post_id": 31320, "ts": "2026-07-19T16:50:46Z", "hours": 3.3533, "text": "I’ve been working on a IEEE 754 single precision 32-bit floating point number library for CSL, it turns out it’s more difficult than I expected!"}, {"post_id": 31143, "ts": "2026-07-19T09:51:00Z", "hours": 0.7642, "text": "I realised that my documentation had some issues and unfinished sections, so I touched them up"}, {"post_id": 30931, "ts": "2026-07-18T22:37:22Z", "hours": 0.9317, "text": "Added a simple stack library for function calls and other uses, along with some smaller graphics programs such as screen/rectangle_fill.craw This is also my official announcement that I’ll be doing much less programming, due to summer holiday starting now. This is because I can’t program during family time, camping weeks, and other events. In addition, I have University after summer holidays, so this reduced productivity will continue throughout the rest of Stardance. Thank you all for making Crawssembly the number 1 project on stardance!"}, {"post_id": 29811, "ts": "2026-07-16T23:06:00Z", "hours": 0.5503, "text": "67 followers"}, {"post_id": 29415, "ts": "2026-07-16T11:01:49Z", "hours": 0.8972, "text": "I’m currently focusing on adding new functions to the screen library, such as rectangles, using the line program as a primitive"}, {"post_id": 28832, "ts": "2026-07-15T10:34:49Z", "hours": 2.9103, "text": "The initial line algo only works for the 0-octant, but now my new and improved version works for every line angle!"}, {"post_id": 27711, "ts": "2026-07-13T14:37:24Z", "hours": 1.2111, "text": "We have proper line segments working 🔥"}, {"post_id": 27105, "ts": "2026-07-12T11:30:09Z", "hours": 2.2058, "text": "I’ve been adding line functions at the moment, to be honest it’s harder than the circle! Getting the angles right is the hardest"}, {"post_id": 26637, "ts": "2026-07-11T15:56:48Z", "hours": 1.8617, "text": "Circle made 🔥"}, {"post_id": 26568, "ts": "2026-07-11T14:04:16Z", "hours": 2.7844, "text": "Taking a break from CPM to work on some graphics libraries, drawing lines, circles etc…"}, {"post_id": 25954, "ts": "2026-07-10T14:03:02Z", "hours": 2.3158, "text": "Accounts are going to be tricky, more front-end stuff and some complex security back-end is going to make this tricky"}, {"post_id": 25201, "ts": "2026-07-09T09:27:17Z", "hours": 0.7178, "text": "Thinking about user login for the CPM, might implement this soon"}, {"post_id": 24627, "ts": "2026-07-08T10:43:46Z", "hours": 0.66, "text": "Thanks to @Keyboard1000n17 for making the CPM website!"}, {"post_id": 24593, "ts": "2026-07-08T09:25:31Z", "hours": 0.6333, "text": "I won’t be as active over the next couple of days so don’t expect many updates"}, {"post_id": 24123, "ts": "2026-07-07T14:18:16Z", "hours": 3.4186, "text": "I’m not good at css, but I’m trying to make the CPM website simple and easy to use. It’ll take a while but it’s slowly coming together"}, {"post_id": 23750, "ts": "2026-07-06T21:31:52Z", "hours": 0.2561, "text": "It turns out I was way closer than I thought! Publishing your own Crawssembly projects is now out of alpha, into beta (Because only I have an API key atm!)"}, {"post_id": 23730, "ts": "2026-07-06T20:59:27Z", "hours": 1.5481, "text": "Still not too much progress on CPM, but I’m still confident I can get it working"}, {"post_id": 23656, "ts": "2026-07-06T19:20:07Z", "hours": 4.075, "text": "CPM is being difficult, I’ve gone through multiple iterations now of the craw pkg publish command, but I feel like I’m getting close."}, {"post_id": 23514, "ts": "2026-07-06T15:13:35Z", "hours": 1.2278, "text": "I’ve been fighting with my server for a while now, the connection keeps on interrupting. As votes are currently coming in for Crawssembly v1.1.0, I suspect my score will be lower than expected due to the demo and doc websites coming offline randomly."}, {"post_id": 23449, "ts": "2026-07-06T13:09:35Z", "hours": 2.1969, "text": "My issues at the moment are about getting a command, craw pkg pack to create a CPM ready tarball of your project from the command line. That and my server is having a couple of internet issues at the moment which are hindering my progress. This devlog is also an official announcement that I won’t be as active as normal over the next week. I have family coming around so my time programming will be limited. In addition, when summer holiday starts this will continue, which is why most of my time programming is in the June and early July, the rest of stardance will have fewer updates and less time spent on casm."}, {"post_id": 23401, "ts": "2026-07-06T10:39:43Z", "hours": 2.2703, "text": "CPM officially works! The pipeline of Crawssembly Source -> Tarball -> Github -> CPM -> craw pkg install -> executestd functions!"}, {"post_id": 22937, "ts": "2026-07-05T16:19:57Z", "hours": 0.6922, "text": "I forgot to add on the hackatime projects of my time spent on the CPM and tests, mb"}, {"post_id": 22902, "ts": "2026-07-05T15:21:06Z", "hours": 4.3764, "text": "I’ve registered the Crawssembly Package Manager website, some SQLite problems caused some issues but I’m getting there."}, {"post_id": 22103, "ts": "2026-07-04T11:47:12Z", "hours": 0.8486, "text": "I’ve been having some internet issues with my server recently, so my productivity has slowed. However I’m at the final testing stages of linking github repos to get craw install <package> to work. The test is done on a simple repo but it should be enough to see if it works"}, {"post_id": 22080, "ts": "2026-07-04T10:27:02Z", "hours": 1.33, "text": "Compiling from a local tarball works! I’ll be working on the database soon so users can search and download. My plan is that the program is stored as a github repo, similar to cargo ."}, {"post_id": 21459, "ts": "2026-07-03T12:44:46Z", "hours": 2.6692, "text": "Package manager is coming along… slowly. I’m still working on getting a local package to install into the global executestd file inside the home folder, but it’s taking it’s time!"}, {"post_id": 21375, "ts": "2026-07-03T08:43:14Z", "hours": 2.1081, "text": "v1.2.0 is already underway! I’ve spent some time constructing a cargo crate for Crawssembly to allow other rust programs to use Crawssembly’s logic. So now YOU can add Crawssembly to your programs!"}, {"post_id": 20935, "ts": "2026-07-02T17:47:58Z", "hours": 4.0467, "text": "After helping figure out the Stardance bug with projects, Crawssembly v1.1.0 is ready to ship!"}, {"post_id": 20147, "ts": "2026-07-01T18:08:54Z", "hours": 1.3117, "text": "I’ve added the compare branch, for number checks. == , != , > , >= , < , and <= all included"}, {"post_id": 20079, "ts": "2026-07-01T16:25:10Z", "hours": 1.3397, "text": "I’ve added more CSL files, such as math/power.craw , math/abs.craw , and math/modulo.craw"}, {"post_id": 19299, "ts": "2026-06-30T15:54:10Z", "hours": 1.4808, "text": "Basic multiplication and division are the first to enter the CSL! I focused on making them memory efficient rather than time efficient, because using fewer registers makes it easier for beginners to use them in normal programs. And because Crawssembly is very very quick (Almost C level speeds) a couple extra thousand ticks won’t be missed for these first programs"}, {"post_id": 19219, "ts": "2026-06-30T14:16:39Z", "hours": 1.9419, "text": "File execution is now working! You can insert programs using execute path/to/program.craw , this leads to the Crawssembly Standard Library, a collection of useful programs that can be accessed using executestd program.craw , such as multiply or division code."}, {"post_id": 19106, "ts": "2026-06-30T10:40:13Z", "hours": 1.1736, "text": "I’m going to confess here, I was a bit lazy. I decided that, because I could create the time program, I rewarded myself by adding a native ISO 8601 time output command io text iso rXX . Elegant? Yes. Low-Level? Not as much as I would like. But the choice was either make a single line of code to simplify programs like this massively, or wire in a tediously made, messy 350 line program that doesn’t fully account for the 400 leap year rule or leap seconds. Hmm… TLDR; I caved to simplicity. But CrawFS file listing from boot now display file genesis time!"}, {"post_id": 18658, "ts": "2026-06-29T20:58:53Z", "hours": 1.0361, "text": "The time program finally works! I wrapped it in a loop so it reloads every 200ms to make a real-time clock. Soon I’ll port it to the CrawFS system to read file creation dates"}, {"post_id": 18592, "ts": "2026-06-29T19:40:11Z", "hours": 4.485, "text": "It turns out that time resolution is much harder than I thought! It’s taken me a while but I’ve got the program working for CCYY-MM-DD"}, {"post_id": 18335, "ts": "2026-06-29T13:20:35Z", "hours": 3.6708, "text": "CrawFS reading is almost done, but I need to program a way to take a raw Unix timestamp and convert it into a nice iso 8601 format ( CCYY-MM-DD HH:MM:SS ) for the ‘Time created’ field"}, {"post_id": 17965, "ts": "2026-06-28T22:33:13Z", "hours": 1.9408, "text": "Reading a specific file is clearly much harder than reading the boot sector. It turns out that parsing user input is a devious task itself!"}, {"post_id": 17863, "ts": "2026-06-28T20:03:06Z", "hours": 6.4758, "text": "Did someone say boot sectors? That’s right, Crawssembly can now read CrawFS boot sectors and output the file table data! This took a surprisingly long time, as the binary boot sector is very delicate."}, {"post_id": 17529, "ts": "2026-06-28T10:56:52Z", "hours": 2.0917, "text": "I’ve been working on a basic file system, CrawFS , used as a stepping stone towards real ones like FAT16 , FAT32 , and NTFS ."}, {"post_id": 16918, "ts": "2026-06-27T14:08:58Z", "hours": 1.6475, "text": "No time to waste after v1.0.0 is released! I’ve added raw disk sector editing for Crawssembly; an opt-in way of reading and writing to your real disk, rather than a VM. ! THIS COULD DESTROY YOUR COMPUTER ! So only do it if you know what you’re doing, as a single bit change will probably brick your entire machine if you use the --raw-disk option"}, {"post_id": 16497, "ts": "2026-06-26T20:53:01Z", "hours": 0.2767, "text": "The final updates have been made, the github is ready to ship!"}, {"post_id": 16387, "ts": "2026-06-26T17:43:02Z", "hours": 0.4742, "text": "THIS IS IT! The moment I’ve been waiting for almost a year, the first stable release of Crawssembly v1.0.0 ! And what fortune that I get to share it with you people on Stardance!"}, {"post_id": 16247, "ts": "2026-06-26T11:58:09Z", "hours": 2.7383, "text": "Crawssembly is soon to be shipped on version 1.0.0 ! A massive milestone for a project I started ~11 months ago. The raffle discs have been burned, and final preparations are underway for release."}, {"post_id": 15925, "ts": "2026-06-25T21:28:53Z", "hours": 2.8969, "text": "Basic syntax highlighting for nano ! Simply run craw install-nano to gain access to these beautiful new colours when editing .craw files."}, {"post_id": 15761, "ts": "2026-06-25T17:09:48Z", "hours": 3.3403, "text": "RAFFLE UPDATE! The 3 discs have been completed. Soon, Crawssembly will be shipped on it’s first release! Remember to follow Crawssembly before the 1st July 00:00 UTC for your chance to win one of these beautiful pieces of computing history!"}, {"post_id": 15622, "ts": "2026-06-25T12:32:33Z", "hours": 2.0561, "text": "I’ve been working on fixing up the activities in the README.md, and providing possible solutions for each. The image below is a possible output of the activity “Smiling Screen”"}, {"post_id": 15555, "ts": "2026-06-25T09:06:54Z", "hours": 0.6672, "text": "Adding the last features for pong was quite simple, making the computer lag behind a random amount utilises the current millisecond UNIX timestamp, with the least significant 2 bits being used as the ‘reaction time’, along with a per-frame flag to increase this reaction time to solve for repeating loops. The scoring system at this point is just the number of pixels in the top corner, unlike the real pong which used numbers. Perhaps for a later version?"}, {"post_id": 15542, "ts": "2026-06-25T08:21:44Z", "hours": 6.6775, "text": "PONG is very almost finished, all that needs to be done is to fine-tune the computer movement and finish displaying the score."}, {"post_id": 15086, "ts": "2026-06-24T14:51:07Z", "hours": 1.7008, "text": "I’m now moving onto some game examples. I’m working on a basic version of the popular game PONG, the hardest part is going to be the graphics syncing up with the mathematical logic"}, {"post_id": 14404, "ts": "2026-06-23T14:59:26Z", "hours": 1.9525, "text": "The structure of the compiler is complete, but getting it to work is another beast of debugging. I think this is the first program of its kind; the first program where no one, not even me, can understand it fully. A true milestone for Crawssembly"}, {"post_id": 14331, "ts": "2026-06-23T12:57:06Z", "hours": 3.1389, "text": "Integer parsing requires multiplication by 10, which in Base-10 is easy as you can just add a zero at the end. But in binary you can’t do this, as that would be multiplying by 2. So you need to get a bit more creative when multiplying by a known amount in binary. The code below shows how a number, ‘abc’ can be expressed as 100a + 10b + c. This is real code from my Crawssembly compiler written in Crawssembly."}, {"post_id": 13936, "ts": "2026-06-22T21:21:17Z", "hours": 2.0808, "text": "I’ve done a little experiment with a reduced branch of Crawssembly made for tiny ISA’s, with instructions only a single byte wide! An image of what the CPU’s core might look like is shown below."}, {"post_id": 13603, "ts": "2026-06-22T09:14:02Z", "hours": 5.5197, "text": "The trie is complete! Although I’ve still much to do for the compiler, such as per-character parsing, storage of label elements, calculation of register codes, etc…"}, {"post_id": 12777, "ts": "2026-06-20T21:47:41Z", "hours": 1.7731, "text": "7/24 trie branches have been added to the compiler, totalling just under 1000 lines of Crawssembly code, the longest hand-written .craw program ever made!"}, {"post_id": 12486, "ts": "2026-06-20T12:09:00Z", "hours": 6.3061, "text": "Adding branches still takes a while, but it’s much more efficient than testing every character for every instruction. So far I’ve mapped 17 out of ~64 command strings."}, {"post_id": 12022, "ts": "2026-06-19T16:40:42Z", "hours": 7.6139, "text": "I’ll be taking a break over the weekend, as I’ve just completed my final exams and I’m celebrating. I’ll be back proper on Monday. Today I worked on creating a trie for Crawssembly’s commands, which can be used to increase efficiency in my compiler to parse instructions faster. Rather than checking every char for every instruction like cal add -65 r01 ; if r01 = 65, this will be 0 ifz 10 ; continue if 0 cal add -70 r02 ; if r02 = 65, this will be 0 ifz 20 ; continue if 0 etc... I can split each branch into separate instructions, reducing line count and time-to-compile"}, {"post_id": 11550, "ts": "2026-06-18T20:54:02Z", "hours": 1.8203, "text": "Basic structures are coming together for the compiler"}, {"post_id": 11465, "ts": "2026-06-18T18:55:47Z", "hours": 3.2833, "text": "The C emitter function now works to the same standard as Crawssembly Online! In other news, I’m starting to write a Crawssembly compiler in Crawssembly ! This is a big step and proves that Crawssembly’s language is comprehensive enough to take on this task."}, {"post_id": 11201, "ts": "2026-06-18T10:23:03Z", "hours": 4.2258, "text": "I’m working on a way to convert Crawssembly into native ASM language, by writing to a C file and compiling that output."}, {"post_id": 9958, "ts": "2026-06-16T14:20:14Z", "hours": 0.7653, "text": "ATTENTION! The moment has arrived; The CRAWSSEMBLY Raffle! Get the chance to win a LIMITED-EDITION installer and collectable Crawssembly Disc! The disc contains the official compiler, virtual machine, and documentation. Also included are un-released legacy files from development. Simply follow Crawssembly on Stardance to enter your name! Shipping may vary depending on the UK Postal service. There are 3 physical First Edition discs available worldwide. If you’re outside the UK, I may ask you to contribute towards postage if shipping costs are high. The 3 winners will be announced on the 1st of July! So get your entry in before 23:59 UTC 30th June! Don’t miss this opportunity! Follow Crawssembly today and support open-source learning!"}, {"post_id": 9903, "ts": "2026-06-16T12:33:41Z", "hours": 0.4594, "text": "I want to thank the Stardance devs for my Super Star tag! Peak staff fr"}, {"post_id": 9210, "ts": "2026-06-15T13:50:37Z", "hours": 1.9831, "text": "Random number generator has been added to the example group, I used XOR and bit shifts with the new command io time milli , which extracts the current UNIX timestamp in milliseconds, as the seed. Basic, but quite random from a human perspective."}, {"post_id": 9153, "ts": "2026-06-15T10:18:06Z", "hours": 5.0008, "text": "I’ve been working on some examples, the biggest one being a simple calculator."}, {"post_id": 8769, "ts": "2026-06-14T16:05:49Z", "hours": 2.1869, "text": "Graphics bug fixed! Crawssembly for macOS is officially working!"}, {"post_id": 8694, "ts": "2026-06-14T13:21:09Z", "hours": 0.2944, "text": "File input now works for macOS Crawssembly! Run craw myprogram.craw --file myinputs.file to run! (The image is from Linux, not from my Mac because it’s too old for me to log in to stardance and post a ss from it, but I can assure you it works!)"}, {"post_id": 8685, "ts": "2026-06-14T13:00:13Z", "hours": 1.8931, "text": "macOS can now do everything windows can except use the speakers, scan-line free graphics, and access files. These will be the largest source of my time."}, {"post_id": 8634, "ts": "2026-06-14T11:02:36Z", "hours": 1.2475, "text": "I’m currently working on getting macOS support running. At the moment, macOS is only confirmed to work to the same level as Crawssembly Online. Hopefully I can get it to the same standard as Linux and Dos systems!"}, {"post_id": 8214, "ts": "2026-06-13T17:40:18Z", "hours": 1.2083, "text": "My respect to real CPU designers, this is tricky work! The most difficult thing is working with the 256 different registers, that’s lots of wiring to get done."}, {"post_id": 8022, "ts": "2026-06-13T11:56:22Z", "hours": 0.4569, "text": "Dedicated documentation website created, and the new demo is live at https://crawssembly.ultimatecraw.xyz/"}, {"post_id": 8011, "ts": "2026-06-13T11:23:53Z", "hours": 0.9736, "text": "Demo and README in working order, for real this time! The final things to do before shipping: Full macOS functionality: Maybe Add documentation to demo: Yes Add syntax highlighting to demo: Maybe Final Cleanup: Yes"}, {"post_id": 7748, "ts": "2026-06-12T22:53:22Z", "hours": 0.7378, "text": "I don’t usually work with frontend, so the demo won’t look anywhere near as nice as some of the other projects on Stardance, but as long as it’s usable then I’m happy."}, {"post_id": 7722, "ts": "2026-06-12T21:43:33Z", "hours": 0.8628, "text": "Crawssembly demo now working! Luckily it wasn’t as hard as I expected. I’ve tied it to an old URL for now, and it’s basic, but it works. https://demo.ultimatecraw.xyz/"}, {"post_id": 7681, "ts": "2026-06-12T20:38:11Z", "hours": 4.555, "text": "README.md Complete! The final steps is creating the demo! (And maybe getting MacOS working)"}, {"post_id": 7517, "ts": "2026-06-12T15:35:42Z", "hours": 2.0622, "text": "Many thanks to Koy Camerini-Yachdav , who tested Crawssembly on Mac OS! Their efforts go towards helping more people understand how computers actually work. ❤️ In other news, Crawssembly is soon ready for the first official release. I estimate <2 weeks before a ship fully working on both Linux and Windows systems will be made!"}, {"post_id": 7381, "ts": "2026-06-12T09:39:51Z", "hours": 0.5978, "text": "File inputs are finally ready, I think craw now has all it needs for the first release. Exciting times!"}, {"post_id": 7124, "ts": "2026-06-11T22:07:29Z", "hours": 2.2083, "text": "README.md now has documentation about all commands that will be in the first release. I’m yet to make the live demo and the documentation about machine codes though!"}, {"post_id": 7034, "ts": "2026-06-11T19:54:59Z", "hours": 3.0742, "text": "Crawssembly Programs can now be force-quit by pressing CRTL+C. I should have added this long ago, but I added it in the end."}, {"post_id": 6771, "ts": "2026-06-11T10:45:07Z", "hours": 5.2019, "text": "I’ve been doing some user testing, and have made changes to the documentation and program, such as adding craw myfile.craw --dump-decoded and craw myfile.craw --tui commands easy to use and run."}, {"post_id": 6180, "ts": "2026-06-10T11:48:41Z", "hours": 21.6656, "text": "Dynamic graphic size achieved! You can now set the screen size of the Crawssembly program by running craw myfile.craw --screen WIDTHxHEIGHT using the –screen argument."}, {"post_id": 5582, "ts": "2026-06-09T13:09:25Z", "hours": 4.1789, "text": "README.md now contains enough information about Crawssembly to make it Turing Complete. The rest involves storage, input devices, and output service commands."}, {"post_id": 5471, "ts": "2026-06-09T08:19:39Z", "hours": 0.3619, "text": "Crawssembly is officially clear for Windows & Linux OS releases! Mac OS support will hopefully come soon. There may be some linux distros that are special and cause some weird and wonderful problems, but for the generic versions (Think Ubuntu) I’m confident that Crawssembly is compatible."}, {"post_id": 5456, "ts": "2026-06-09T07:45:58Z", "hours": 4.5339, "text": "Never understood what binary actually is? Why is it important, and why are binary skills becoming less important? All this, and more, is revealed in the Crawssembly Project; the ultimate guide to learning the fundamentals of real computer design, and assembly-like languages."}, {"post_id": 4930, "ts": "2026-06-08T15:11:03Z", "hours": 3.2828, "text": "More work done on the docs today. I’m assuming near-zero knowledge about computing to allow all to access the Crawssembly Project"}, {"post_id": 4319, "ts": "2026-06-07T16:05:58Z", "hours": 3.4303, "text": "Most of my efforts today are going to the README.md file, helping beginners get their heads around Assembly-like languages"}, {"post_id": 3567, "ts": "2026-06-06T15:47:13Z", "hours": 1.5453, "text": "Currently working on adding logical branching (‘if’ statements) to CRISP, my high-level language to compile into Crawssembly"}, {"post_id": 2869, "ts": "2026-06-05T18:56:50Z", "hours": 0.5139, "text": "Crawssembly - Initial Post"}]...
|
Title: Crawssembly by @The_Craw | Stardance
Devlo Title: Crawssembly by @The_Craw | Stardance
Devlogs:
Crawssembly - Initial Post
Currently working on adding logical branching (‘if’ statements) to CRISP, my high-level language to compile into Crawssembly
Most of my efforts today are going to the README.md file, helping beginners get their heads around Assembly-like languages
More work done on the docs today. I’m assuming near-zero knowledge about computing to allow all to access the Crawssembly Project
Never understood what binary actually is? Why is it important, and why are binary skills becoming less important? All this, and more, is revealed in the Crawssembly Project; the ultimate guide to learning the fundamentals of real computer design, and assembly-like languages.
Crawssembly is officially clear for Windows & Linux OS releases! Mac OS support will hopefully come soon. There may be some linux distros that are special and cause some weird and wonderful problems, but for the generic versions (Think Ubuntu) I’m confident that Crawssembly is compatible.
README.md now contains enough information about Crawssembly to make it Turing Complete. The rest involves storage, input devices, and output service commands.
Dynamic graphic size achieved! You can now set the screen size of the Crawssembly program by running craw myfile.craw --screen WIDTHxHEIGHT using the –screen argument.
I’ve been doing some user testing, and have made changes to the documentation and program, such as adding craw myfile.craw --dump-decoded and craw myfile.craw --tui commands easy to use and run.
Crawssembly Programs can now be force-quit by pressing CRTL+C. I should have added this long ago, but I added it in the end.
README.md now has documentation about all commands that will be in the first release. I’m yet to make the live demo and the documentation about machine codes though!
File inputs are finally ready, I think craw now has all it needs for the first release. Exciting times!
Many thanks to Koy Camerini-Yachdav , who tested Crawssembly on Mac OS! Their efforts go towards helping more people understand how computers actually work. ❤️ In other news, Crawssembly is soon ready for the first official release. I estimate <2 weeks before a ship fully working on both Linux and Windows systems will be made!
README.md Complete! The final steps is creating the demo! (And maybe getting MacOS working)
Crawssembly demo now working! Luckily it wasn’t as hard as I expected. I’ve tied it to an old URL for now, and it’s basic, but it works. https://demo.ultimatecraw.xyz/
I don’t usually work with frontend, so the demo won’t look anywhere near as nice as some of the other projects on Stardance, but as long as it’s usable then I’m happy.
Demo and README in working order, for real this time! The final things to do before shipping: Full macOS functionality: Maybe Add documentation to demo: Yes Add syntax highlighting to demo: Maybe Final Cleanup: Yes
Dedicated documentation website created, and the new demo is live at https://crawssembly.ultimatecraw.xyz/
My respect to real CPU designers, this is tricky work! The most difficult thing is working with the 256 different registers, that’s lots of wiring to get done.
I’m currently working on getting macOS support running. At the moment, macOS is only confirmed to work to the same level as Crawssembly Online. Hopefully I can get it to the same standard as Linux and Dos systems!
macOS can now do everything windows can except use the speakers, scan-line free graphics, and access files. These will be the largest source of my time.
File input now works for macOS Crawssembly! Run craw myprogram.craw --file myinputs.file to run! (The image is from Linux, not from my Mac because it’s too old for me to log in to stardance and post a ss from it, but I can assure you it works!)
Graphics bug fixed! Crawssembly for macOS is officially working!
I’ve been working on some examples, the biggest one being a simple calculator.
Random number generator has been added to the example group, I used XOR and bit shifts with the new command io time milli , which extracts the current UNIX timestamp in milliseconds, as the seed. Basic, but quite random from a human perspective.
I want to thank the Stardance devs for my Super Star tag! Peak staff fr
ATTENTION! The moment has arrived; The CRAWSSEMBLY Raffle! Get the chance to win a LIMITED-EDITION installer and collectable Crawssembly Disc! The disc contains the official compiler, virtual machine, and documentation. Also included are un-released legacy files from development. Simply follow Crawssembly on Stardance to enter your name! Shipping may vary depending on the UK Postal service. There are 3 physical First Edition discs available worldwide. If you’re outside the UK, I may ask you to contribute towards postage if shipping costs are high. The 3 winners will be announced on the 1st of July! So get your entry in before 23:59 UTC 30th June! Don’t miss this opportunity! Follow Crawssembly today and support open-source learning!
I’m working on a way to convert Crawssembly into native ASM language, by writing to a C file and compiling that output.
The C emitter function now works to the same standard as Crawssembly Online! In other news, I’m starting to write a Crawssembly compiler in Crawssembly ! This is a big step and proves that Crawssembly’s language is comprehensive enough to take on this task.
Basic structures are coming together for the compiler
I’ll be taking a break over the weekend, as I’ve just completed my final exams and I’m celebrating. I’ll be back proper on Monday. Today I worked on creating a trie for Crawssembly’s commands, which can be used to increase efficiency in my compiler to parse instructions faster. Rather than checking every char for every instruction like cal add -65 r01 ; if r01 = 65, this will be 0 ifz 10 ; continue if 0 cal add -70 r02 ; if r02 = 65, this will be 0 ifz 20 ; continue if 0 etc... I can split each branch into separate instructions, reducing line count and time-to-compile
Adding branches still takes a while, but it’s much more efficient than testing every character for every instruction. So far I’ve mapped 17 out of ~64 command strings.
7/24 trie branches have been added to the compiler, totalling just under 1000 lines of Crawssembly code, the longest hand-written .craw program ever made!
The trie is complete! Although I’ve still much to do for the compiler, such as per-character parsing, storage of label elements, calculation of register codes, etc…
I’ve done a little experiment with a reduced branch of Crawssembly made for tiny ISA’s, with instructions only a single byte wide! An image of what the CPU’s core might look like is shown below.
Integer parsing requires multiplication by 10, which in Base-10 is easy as you can just add a zero at the end. But in binary you can’t do this, as that would be multiplying by 2. So you need to get a bit more creative when multiplying by a known amount in binary. The code below shows how a number, ‘abc’ can be expressed as 100a + 10b + c. This is real code from my Crawssembly compiler written in Crawssembly.
The structure of the compiler is complete, but getting it to work is another beast of debugging. I think this is the first program of its kind; the first program where no one, not even me, can understand it fully. A true milestone for Crawssembly
I’m now moving onto some game examples. I’m working on a basic version of the popular game PONG, the hardest part is going to be the graphics syncing up with the mathematical logic
PONG is very almost finished, all that needs to be done is to fine-tune the computer movement and finish displaying the score.
Adding the last features for pong was quite simple, making the computer lag behind a random amount utilises the current millisecond UNIX timestamp, with the least significant 2 bits being used as the ‘reaction time’, along with a per-frame flag to increase this reaction time to solve for repeating loops. The scoring system at this point is just the number of pixels in the top corner, unlike the real pong which used numbers. Perhaps for a later version?
I’ve been working on fixing up the activities in the README.md, and providing possible solutions for each. The image below is a possible output of the activity “Smiling Screen”
RAFFLE UPDATE! The 3 discs have been completed. Soon, Crawssembly will be shipped on it’s first release! Remember to follow Crawssembly before the 1st July 00:00 UTC for your chance to win one of these beautiful pieces of computing history!
Basic syntax highlighting for nano ! Simply run craw install-nano to gain access to these beautiful new colours when editing .craw files.
Crawssembly is soon to be shipped on version 1.0.0 ! A massive milestone for a project I started ~11 months ago. The raffle discs have been burned, and final preparations are underway for release.
THIS IS IT! The moment I’ve been waiting for almost a year, the first stable release of Crawssembly v1.0.0 ! And what fortune that I get to share it with you people on Stardance!
The final updates have been made, the github is ready to ship!
No time to waste after v1.0.0 is released! I’ve added raw disk sector editing for Crawssembly; an opt-in way of reading and writing to your real disk, rather than a VM. ! THIS COULD DESTROY YOUR COMPUTER ! So only do it if you know what you’re doing, as a single bit change will probably brick your entire machine if you use the --raw-disk option
I’ve been working on a basic file system, CrawFS , used as a stepping stone towards real ones like FAT16 , FAT32 , and NTFS .
Did someone say boot sectors? That’s right, Crawssembly can now read CrawFS boot sectors and output the file table data! This took a surprisingly long time, as the binary boot sector is very delicate.
Reading a specific file is clearly much harder than reading the boot sector. It turns out that parsing user input is a devious task itself!
CrawFS reading is almost done, but I need to program a way to take a raw Unix timestamp and convert it into a nice iso 8601 format ( CCYY-MM-DD HH:MM:SS ) for the ‘Time created’ field
It turns out that time resolution is much harder than I thought! It’s taken me a while but I’ve got the program working for CCYY-MM-DD
The time program finally works! I wrapped it in a loop so it reloads every 200ms to make a real-time clock. Soon I’ll port it to the CrawFS system to read file creation dates
I’m going to confess here, I was a bit lazy. I decided that, because I could create the time program, I rewarded myself by adding a native ISO 8601 time output command io text iso rXX . Elegant? Yes. Low-Level? Not as much as I would like. But the choice was either make a single line of code to simplify programs like this massively, or wire in a tediously made, messy 350 line program that doesn’t fully account for the 400 leap year rule or leap seconds. Hmm… TLDR; I caved to simplicity. But CrawFS file listing from boot now display file genesis time!
File execution is now working! You can insert programs using execute path/to/program.craw , this leads to the Crawssembly Standard Library, a collection of useful programs that can be accessed using executestd program.craw , such as multiply or division code.
Basic multiplication and division are the first to enter the CSL! I focused on making them memory efficient rather than time efficient, because using fewer registers makes it easier for beginners to use them in normal programs. And because Crawssembly is very very quick (Almost C level speeds) a couple extra thousand ticks won’t be missed for these first programs
I’ve added more CSL files, such as math/power.craw , math/abs.craw , and math/modulo.craw
I’ve added the compare branch, for number checks. == , != , > , >= , < , and <= all included
After helping figure out the Stardance bug with projects, Crawssembly v1.1.0 is ready to ship!
v1.2.0 is already underway! I’ve spent some time constructing a cargo crate for Crawssembly to allow other rust programs to use Crawssembly’s logic. So now YOU can add Crawssembly to your programs!
Package manager is coming along… slowly. I’m still working on getting a local package to install into the global executestd file inside the home folder, but it’s taking it’s time!
Compiling from a local tarball works! I’ll be working on the database soon so users can search and download. My plan is that the program is stored as a github repo, similar to cargo .
I’ve been having some internet issues with my server recently, so my productivity has slowed. However I’m at the final testing stages of linking github repos to get craw install <package> to work. The test is done on a simple repo but it should be enough to see if it works
I’ve registered the Crawssembly Package Manager website, some SQLite problems caused some issues but I’m getting there.
I forgot to add on the hackatime projects of my time spent on the CPM and tests, mb
CPM officially works! The pipeline of Crawssembly Source -> Tarball -> Github -> CPM -> craw pkg install -> executestd functions!
My issues at the moment are about getting a command, craw pkg pack to create a CPM ready tarball of your project from the command line. That and my server is having a couple of internet issues at the moment which are hindering my progress. This devlog is also an official announcement that I won’t be as active as normal over the next week. I have family coming around so my time programming will be limited. In addition, when summer holiday starts this will continue, which is why most of my time programming is in the June and early July, the rest of stardance will have fewer updates and less time spent on casm.
I’ve been fighting with my server for a while now, the connection keeps on interrupting. As votes are currently coming in for Crawssembly v1.1.0, I suspect my score will be lower than expected due to the demo and doc websites coming offline randomly.
CPM is being difficult, I’ve gone through multiple iterations now of the craw pkg publish command, but I feel like I’m getting close.
Still not too much progress on CPM, but I’m still confident I can get it working
It turns out I was way closer than I thought! Publishing your own Crawssembly projects is now out of alpha, into beta (Because only I have an API key atm!)
I’m not good at css, but I’m trying to make the CPM website simple and easy to use. It’ll take a while but it’s slowly coming together
I won’t be as active over the next couple of days so don’t expect many updates
Thanks to @Keyboard1000n17 for making the CPM website!
Thinking about user login for the CPM, might implement this soon
Accounts are going to be tricky, more front-end stuff and some complex security back-end is going to make this tricky
Taking a break from CPM to work on some graphics libraries, drawing lines, circles etc…
Circle made 🔥
I’ve been adding line functions at the moment, to be honest it’s harder than the circle! Getting the angles right is the hardest
We have proper line segments working 🔥
The initial line algo only works for the 0-octant, but now my new and improved version works for every line angle!
I’m currently focusing on adding new functions to the screen library, such as rectangles, using the line program as a primitive
67 followers
Added a simple stack library for function calls and other uses, along with some smaller graphics programs such as screen/rectangle_fill.craw This is also my official announcement that I’ll be doing much less programming, due to summer holiday starting now. This is because I can’t program during family time, camping weeks, and other events. In addition, I have University after summer holidays, so this reduced productivity will continue throughout the rest of Stardance. Thank you all for making Crawssembly the number 1 project on stardance!
I realised that my documentation had some issues and unfinished sections, so I touched them up
I’ve been working on a IEEE 754 single precision 32-bit floating point number library for CSL, it turns out it’s more difficult than I expected!
Since IEEE 754 single precision can encode much larger numbers than a standard 32-bit binary number, you can use the library to approximate much larger values for computation
Please also star my actual github page! It’s more important than stardance followers 😤😤 https://github.com/Jonah-Crawford/Crawssembly
I’ve decided to add a heap library to complement the stack library. Doing this should make my next idea easier
Reading user input isn’t that easy compared to a language like Python, where you can just do input() . Each character has to be processed as soon as the keyboard records a press, and then saved to memory. I’m currently working on a block method that takes every 16 character you type, and allocates a small block on the heap for each press. This is going to be used for my big project
Staff, please remove the time on this devlog, I accidentally left nano open all night. Sorry!
I’m going ahead with this schema for heap blocks, the reserved bits can be used for extra features that I might want to add in later versions
I’m still working on stack allocation, the complex parts are walking the stack properly to get the headers, along with making sure I don’t corrupt any data. The image attached shows the maximum heap block size in blue, with the data taken up by the header of that block in red (top corner)
Stack allocation and freeing appear to work, but I need to do more testing to prove it
icl I’ve not done much today, mostly testing the allocation code and it looks up to spec tbh, not much to say
Once you get 1 command working, many more will follow! That’s right, a command line written 100% in Crawssembly code 🔥
I’ve been adding some very basic commands, such as exit , help , and clear
I’ve discovered that the input file mechanism is broken, so that’s great. I’ve also been adding more commands to CrawOS
Hack Club seems to have updated the rules on banner images, claiming it has to be an image of your project working. This is no issue for Crawssembly. The new banner is now the output of one of my programs, creating the banner pixel for pixel. This both compiles with the new rule, as it demonstrates Crawssembly functioning, while maintaining its identity.
I’ve been messing around with --input tag which seems to mess around a bit in the rust vm, but I think I’m getting closer to the cause
The Crawssembly community is real 🙏 I’ve been reviewing a PR on the GitHub to improve the multiplication script in the CSL ( std/math/multiply.craw )
I’ve been back working on CPM, focused on user accounts.
The account page is looking better, and it’s survived some user testing 🙏 I need to add some boring stuff though like API key listing and said key management
Package creation and accounts are now working (theoretically) from the command line 🔥
@imakebloatedcode Thank you for your pr for CPM to include OpenAPI scemata, another great addition from the Craw Systems community Most of my time has been reviewing it and making small edits to include the security auth headers for API keys Official Announcement I’m not going to be online through the 5th August to the 10th August, I’ll be camping for those 5* days in a very low-data spot, and I’m almost certainly not taking my laptop. I might be able to get a tiny amount of code on my phone to keep my streak but certainly not enough to engage in my normal conversation on slack or post devlogs
I’ve added Markdown support for CPM packages 🔥
I’ve made publishing packages super easy now, all you need to do is craw init to create the package, and then craw pkg publish . As long as you’re signed into CPM and gh, it’ll just work
I’ve been working with @BetterClient to inprove the program counter and bringing back fgo from casm beta. This is also a reminder that I’ll be OOO until next Monday.
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)
I’ve merged the new fgo rules to the project, so now fgo points to labels similar to jmp , but fgo 0 now jumps to the label defined in r01 I was having some issues with using git but I got them sorted
I’ve separated the old sleep command into sleepms for millisecond waits and sleepus for microsecond waits. Although, microsecond precision is highly dependent on the OS, so it won’t be as accurate as sleepms for smaller values (Say, n<50)
Sorry for the but it’s been a hectic couple of days. I got into University! I’ve also been busy taking a look at a CGOL implementation, truly amazing stuff! Go check it out: https://github.com/srxcode/game-of-life-crawssembly
I’ve added io keyboard mod to create a bitfield of modification key presses for the keyboard device, so now keys like CTRL and TAB can be handled, which lays the foundation for my next project which is making a basic file editor in casm
Lots of work today, sorry for the . I’ve been struggling with the text editor, heap buffers, cursor allocation, character addresses, etc etc… ad infinitum. However, I’m getting close. Rendering is outputting something, although I don’t know why typing doesn’t seem to add anything…
For some reason, I’ve been banned on slack. I don’t know why, since no one will tell me. This is not good news, but luckily it doesn’t seem to be a stardance-wide ban, so I can still do the hackathon.
Still no clue why characters aren’t being saved to memory in my free heap block Slow day today fr
I’m finally getting somewhere with the editor, however I’m now having issues with character deletion, and adding characters inside empty newlines
stardance
I’ve brought run back from the dead. You can now use run rXX to run a binary value inside the input register as a Crawssembly instruction
I’VE ACTUALLY DONE IT 🔥 Networking is now officially part of Crawssembly. Alpha tests on localhost have all passed
HTTP requests working 🔥 ts is so peak icl
I’ve been doing much more testing and implementing the network device. Specifically testing the following commands: io net ip , io net addr , io net connect , io net socket , io net port , io net listen , io net accept , io net send , io net protocol , io net block , and io net recv .
I’m back! Fraud Squad unbanned me so WE are all having a party at my house Although I can’t use nano apparently anymore… so Crawssembly will be having it’s final ship very very soon
It has come to my attention that not everyone who has followed Crawssembly has starred it on GitHub! Please, if you like my project, star it on GitHub at https://github.com/Jonah-Crawford/Crawssembly Thank you.
idk where these extra hours are coming from, but as long as I don’t ship them, they won’t count towards stardust so I’ll be fine. In the meantime, enjoy craw slop
Ships:
Crawssembly: The beginner’s gateway to low-level thinking. "Programming languages are a lie!" This is Crawssembly, a project that’s been in production for almost a year. It is an educational assembly-like programming language that teaches users how computers actually work. Programming languages like Python, Ruby, and Java pull the wool over your eyes by abstraction and simplification. Crawssembly is the first step to seeing clearly.
Crawssembly v1.1.0 ready to ship! “Programming languages are a lie!” This is Crawssembly, a project that’s been in production for almost a year. It is an educational assembly-like programming language that teaches users how computers actually work. Programming languages like Python, Ruby, and Java pull the wool over your eyes by abstraction and simplification. Crawssembly is the first step to seeing clearly.
CRAWSSEMBLY - New and Improved! “Programming languages are a lie!” This is Crawssembly, the number 1 project on all of stardance! It’s a project that’s been in production for over a year. It is an educational assembly-like programming language that teaches users how computers actually work. Programming languages like Python, Ruby, and Java pull the wool over your eyes by abstraction and simplification. Crawssembly is the first step to seeing clearly. What is new? INTERNET SOCKETS! CRAWOS COMMAND LINES! DYNAMIC LABEL JUMPING! IMPROVED DEVICES! DEDICATED PACKAGE SHARING WEBSITE! AND MORE! Check it out for yourself! (Shipped early due to Fraud Squad limitations, Crawssembly is too powerful for Hack Club)...
|
1792839280.3425412
|
1792925680.3425412
|
|
8111
|
Poorup.io by @jeremy | Stardance
|
jeremy
|
3
|
179.0
|
2137
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-06T17:48:41Z", "hours": 135.0, "multiplier": 18.44, "payout": 1778, "blessing": "neutral", "text": "Poorup — Biggest Update to date I’ve given the project a major overhaul, from its visual identity and everything else. This is geninuly one of the best projects i have created and iam proud to announce it I first started Poorup 3 and 1/2 months ago as a project to get introcude into webdesing and since then i have created 4 more website and revesiting it really shows my growth. Of course Ai was used by even then I could really feel my growth What was challening i decide to stay on CSS, html, and js instead of transferring it into another language for a simple reason i wanted to test how far i can push these 3 languages( i was just to lazy to learn a new language) How I used AI AI WAS USED IN THIS PROJECT for debugging and coding no UI or art generation. AI was a substantial coding and debugging tool, especially for backend work, bot logic, and tricky multiplayer edge cases. I used CodeScene to identify code-health hotspots. I wrote many page-specific backend features myself, then used GPT/Codex to help debug or split some larger hotspot files into smaller modules. Ai was also used to fix bugs in the Ipad Ui I created Poorup’s frontend UI and its SVG and art assets myself. AI helped in coding but never touched art. I didn’t compose the soundtrack. I selected open-source and other openly licensed tracks; their sources and license details are in the audio credits . I also rewrote the Git history to make the repository cleaner, so the current commit log isn’t a complete record of the project’s development. Also after around the 6th or 7th devlog i turned ai traccking of as to not fraud myself hours So if needed deplete hours. What’s new in this patch UI Full ui rework of everything nothing was left out every single Ui elemt was redone by scratch, with upto 6 themse each with their own custom soundtrack and background, this was the largest wish people had wished for when they reviewed my game and iam so proud of the UI. Boards and multiplayer New 40 and Metro-52 boards, with custom visual themes. Public rooms and private rooms with shareable codes; people can join as guests. Configurable rules, including double rent, vacation cash, even building, and randomized turn order. A deeper economy system Bank loans, player-to-player loans, equity deals, and hybrid contracts, with collateral and default consequences. Sponsored purchases: one player can fund another player’s property purchase in exchange for an agreed share. Negotiating now youre able to negotiate all offers you get instead of accepting or declining on the spot you can also keep them on hold An optional stock market for all the quant bros(gamblers) casino so now youre able to gamble Social I also added a full social systems with achievements, friends inviting people to lobbys seeing match history and more, also added the option to create your own 16x16 user icon Events one of the biggest features I decided to add global events which appear under certain conditions like to many houses standing which should reference the 2008 housing crises i also added stock market crash and alot more. Also global events can also combine to create seacil ones Parlor patrol this was supposed to be a cool minigame while waiting for your friends but it doesnt work and i cant fix the bug for the life of me so you can test it out but it doesnt work correclty all svg assets for it exist", "repo": "https://github.com/jeremy341/Poorup/", "demo": "https://poorup.jeremy-d.hackclub.app/"}, {"ship_num": 2, "ts": "2026-08-11T21:30:56Z", "hours": 7.0, "multiplier": 15.34, "payout": 115, "blessing": "neutral", "text": "Project Update I didnt even notice but all the changes i did i the last patches never got shipped so this one is about the last to changes which were adding modals, creating new UI and removing AI code check it out https://poorup.jeremy-d.hackclub.app/", "repo": "https://github.com/jeremy341/Poorup/", "demo": "https://poorup.jeremy-d.hackclub.app/"}, {"ship_num": 3, "ts": "2026-06-17T14:42:48Z", "hours": 17.0, "multiplier": 14.39, "payout": 244, "blessing": "neutral", "text": "Poorup Poorup is a real-time multiplayer board game inspired by Richup(Monopoly), playable entirely in the browser What did I make? A full multiplayer board game running on a Node.js server with Socket.IO for real-time communication. The client is pure HTML, CSS, and JavaScript, no frameworks which is stupid if I look back on it . Features include: Room-based lobbies with a shareable room code Full Monopoly-style rules: buying, renting, building houses and hotels, mortgaging, and trading Live auctions with a countdown timer when a property is declined Configurable game rules per room (double rent, vacation cash, even build, auction, mortgage, randomized turn order, no rent in jail) Reconnect support — if you disconnect mid-turn, you can rejoin and resume In-game chat Automatic room cleanup when everyone leaves What was challenging? Shared states across multiple clients. Every player action, rolling dice, buying a property, placing a bid, has to be read server-side, broadcast to everyone, and reflected correctly on each client without race conditions or desync. Getting that right, especially during edge cases, took a lot of work. Edge cases in disconnects. A player disconnecting mid-auction is a different problem than disconnecting on their turn, which is different from the host disconnecting entirely. Each case needed its own handling: timers need to be cleared, pending actions need to be resolved, and remaining players need to stay in a valid game state. and i need alot of time and a bit of AI to fix that for me. Building a complete game UI with vanilla CSS. No component library, no utility framework — every modal, toggle, property card, and animation is hand-written. Honestly needed a lot of AI help here. Probally should have used a libary if I look back at it but it was fun to do it in plain CSS also for anyone wondering why the favicon is the one from vite i never deleted it and i wasnt in the mode to redesign a new one and tried to use the board map but that didnt work for some reason. What am I proud of? The architecture. The game logic lives entirely in gameLogic.js and has no knowledge of sockets or HTTP. The server in server.js wires events to logic calls and broadcasts the results. That separation made the codebase much easier to debug than it would have been otherwise but i needed AI to implement the idea i had the idea but wasnt quite able to do it. How to test it git clone https://github.com/jeremy341/Poorup.git cd Poorup npm install npm start Then open http://localhost:8080 in two separate tabs or browser windows.", "repo": "https://github.com/jeremy341/Poorup/", "demo": "https://poorup.jeremy-d.hackclub.app/"}]...
|
[{"post_id": 81740, "ts": "202 [{"post_id": 81740, "ts": "2026-10-22T09:55:56Z", "hours": 9.6928, "text": "Rework #1 Now you could be asking yourself? What have i done in the last 8 days to not post? Well Iam nearly finished with the full rework off all UI, Bug fixing and introducing new features, Chart Engine So i redid the whole system for charts and decided to build my own, because though i had one which worked it looked horrendous and really didnt fit poorup, you can see the new chart engine in the screenshot Game history I redid the whole entire game history system, because to be honest it was heavily vibed including its Ui and while cheking it, it looked like trash so I sat myself down and worked tiresly to fully redo it, and I even implemented the new chart system into it, Modals, Modals, Modals So I REDID NEARLY EVERY SINGLE MODAL IN THE GAME to provide a better User experience this took hella long and while doing it i noticed i had hackatime tracking off, because i had been working on some personal projects, hence the reason I only posted now because I lost so many hours, #Next Features Well to be honest there really arent anymore features i can add, the only thing left is fixing bugs and preparing it for the release and advertising it on reddit"}, {"post_id": 79607, "ts": "2026-10-14T18:07:25Z", "hours": 10.3072, "text": "Devlog after ship So after getting hella positive feedback regarding poorup which i highly appreciate my aim is to now make it have an even better user experience and etc. why? cause from the feedback i got, there are 3 areas I need to tackle, UI, game logic which is to complex and the User experience including rules and etc, Full redesign of the ingame lobby So after getting feedback that the board was to smallwhich was kinda expected and that the whole game is just clutered which i also assumed would happen cause all the features dont fit into the game i have done the following. I have redesigned the full ingame lobby with a new layout further inspired by richup(didnt want to do this but they have the most optimial layout) I have also redone the whole entire admin window cause to be honest it was horrondous and hard to use, and also just some small changes all around full redesign of modals so after doing the lobby i have now decided to fully redo a lot of the modal to have a better layout and etc so they are way more user friendly and acttually easy to understand, this also included cutting alot of features from certain modals because they just made them to complex and hard to use Cards and airpots this was something i was orrignally planning to release in the last ship but i just decided to ship it with this one i have finnaly added the option to buy new bank cards which you can use to get benefits like cashback of 10% on purchsees like rent payment suprise cards and other stuff, and I also added the option to use airpots to fly from one point to another and allow players to set the prices, Bots After reflecting a bit on my ai usage for the bots i decided to fully plug the whole programm into a repo which visualises it to see if it checks out with my mental map and I noticed so much slop which I would have never noticed before, this includes the whole Bot logic which i have probally never looked at cause i knew i wouldnt be able to code them. Though i probally should have cause this is the biggest slop i have ever seen and It introduced so many bugs which the ai couldnt find Next steps Right now all these changes are locally and not on github which are around +17000 lines of code and my aim is to further clean this up and fully push it with a new domain which is alredy online but will be kept hidden. here are soem before and afters, the more clutterd ones are the befores and the simplifyed ones after"}, {"post_id": 75006, "ts": "2026-09-28T20:36:43Z", "hours": 10.8294, "text": "Poorup Redesign - Devlog #11 (FUCK MY LIFE) I am geniunly so tired of this project and my life in general i was so busy in the last few days cause of school and after shool clubs. This phase was mainly about recoding the Bot engine by hand, and updating the stock market modal inside the game also added New Ui for theme chooser and music and also added more sound tracks. I also redid statistics tabs in profile by hand and added better match history tracking Bot engine To be honest to Bot engine was so much AI stuff that i genuinly didnt understand what it was build on and how that is why I decided to take some time to read and research all the papers its build on and how it works. I then rewrote large parts of it to improve it and also found mutipile bugs in the logic of how it works and how it assigns values New account and preferences tab I fully redid some parts of the accounts and prefences tab to now allow for easier choosing of themes and also worked on the music engine so the music loops and youre able to choose different music depending on the theme. #Statsics tab I redid the whole tab as I found it quite stacked with 12 boxes for statsics and decicd to now add internal tabs to make it look cleaner this was a quick 30 minute changes as I didnt change logic but just frontend Next Steps Hopefully shipping adding HCAI and testing the AI bots and further UI refinement on tablet UI and 1440px desktop cause these are 2 of the most weirdest sizes https://poorup.jeremy-d.hackclub.app/ also if anybody wants to check it our but it is nowhere near finished so dont expect anything"}, {"post_id": 73301, "ts": "2026-09-24T20:06:52Z", "hours": 28.7353, "text": "Poorup Redesign - Devlog #10 Iam aware this phase is 30 hours this is just cause i used hella AI and didnt want to count it towards my payout. this phase mainly about finishing touches running mutipile tests suits playing some games and finishing some things also fixing Ui and redoing the Ui of the Music First of all I added music for each of the 6 theme with a secondary theme which you can select under account and preferences I also made it easier to spot the different themes as they were hella hidden to be honest. Deactivation of palor patrol Though i didnt want to this I needed to deactivate palor patrol as it was simply impossible to use I checked m code in detail used and really did everything but I couldnt find the bug which makes it unplayablle so as long as I cant manage to fix it I have to deacitvate it. Next Phase pushing everything on nest setting up a piepleine so nest automatticaly pulls everything I push onto main in my repo and finnaly realsing it with thhe bots for players to use."}, {"post_id": 70576, "ts": "2026-09-19T11:55:06Z", "hours": 11.6328, "text": "Poorup Redesign - Devlog #9 this phase was mainly about adding some missing things fully balancing everything also used the new model jev from typesafe as it was a perfect fit for the task. Admin Dashboard I now added a section in the admin Dashboard fully centered around the Bots which allows for dropping in any provider and choosing the model and see the request if theyre failing or not and etc this took quite a while as I coded this myself again as I wanted to practice a bit though I still needed Ai help as Iam so trash at js Removing TOS pages As i mentioned in the last devlog i have now decided to remove the TOS pages as they were jst not good looking and not complete and not needed. Music system I decided to remove the music player and rather make it so 1 music track is there for each theme and my next step ix expanding the profile page to allow choosing another music track as 12 are available in total but only 6 are used rn. I also decided that I am going to move the Theme chooser somewhere else as people get no indicator rn to find it New Idea for the Future Also I had a great Idea which i can incoperate into this but after the next ship. Its training a custom ml model on all the matches played by people and then incoperating it in the game. Because essentialy it would be a custom AI/Bot that is able to play monopoly as good as possible new features I also added the option to download all the data cause i noticed its saved on the server and maybe smb wants to download it will then be in a json. I also added the option to add an recovery email, because my plan is to allow people to sign up without email but they still need an option to recover data if needed I also added the option to rovoke all otehr session tokens then the onnes youre logged into rn, so essentially log out of all other devices and server sessions Next steps Cleaning up Ai code and reading through it all, 1 or 2 adjustments in Ui for example the global event banner needs to be relocated or the graphs for match history need to remade. Also the ranking page needs a little redesing. The next one will be the LAST ONE cause i cant deal with stardance anymore all my projects are getting rejected for dumb reasons, so this will be the last devlog and if it does not get accepted iam relocating somewhere else."}, {"post_id": 68664, "ts": "2026-09-15T14:29:22Z", "hours": 15.3047, "text": "Poorup Redesign - Devlog #8 this phase mainly about consolidating the backend and adding a New admin only dashboard which will allow to analyze things easier for balane patches and etc in the future. This Phase was written only by hand hence the long time, normally I would use AI to speed up the process but I wanted to get some practice in. Also added legal and TOS pages Backend I found mutipile bugs such as simple Game bugs to not so simple leackage problems and other stuff which took quite some time to fix by hand and this really shows how I will probally pause using AI for coding after this project for a while Admin Dashboard I created this Dashboard so I would be allowed to pracitally analyze everything from how certain things affect the game and for example analyze them to see if they need fixes, balances or even remove them entirly. I also added things like seeing a rough strucutre of where my player base is from. If anybody is abusing the game somehow or bot traffic. Tos Pages These took quite long and were quite the hassle but I did it. though i am debating jus tdeleting them as I couldnt fill them out entirley as certain information is needed which would then make them 100% fool proof I forgot I also updated the Snow Theme and added music for each theme with a small music player in the bottom left though I just noticed I placed the icons wrong should be a quick 2 line fix Next Steps do the last fixes finnaly test the AI bots as they are fully setup but not setup do some balancing and realese it The next post should really be the last. Hopefully."}, {"post_id": 66650, "ts": "2026-09-12T14:36:54Z", "hours": 16.8883, "text": "Poorup Redesign - Devlog #7 This phase was mainly about doing a full audit over the game, fixing bugs which were still hidden inside the server and UI, and making the whole project easier to trust before the next merge. Finalising Bots, adding, themes adding new suprise features and more. Themes I decided to create 5 more themes which will fully change the look of the game, for the 5 i decided on 5 directions first of light mode, and then the 4 seasons so summer,autumm, winter, and spring. These took quite some time to create but I think they came out quite decent though they still need cleaning up Ranking Seasons I have now added ranking seasons which are 1 month each if you manage to rank on the leaderbaord at the end of the season you get a special cosmetic(newly added system) and a special Title Cosmetics I added a full cosmetics system and the ranking system so you can now get cosmetics from 2 places, either by getting them at the end of the season form the leaderboard or by getting them from achievements Card Upgrade I also now added the features to upgrade your bank account, if you pay enough money you can upgrade your card for 1000$ this gives you a card with 5% cashback which is the Spaarkasse karte(german Bank) and the nex level is the amex black card wich give you 10$ cashback and amex points which you can use for flying. Gambling UI I also decided to now give the gambling UI an animation it now has the same kind of case opening animation as CS2 so the roulette which goes form right to left. Plane station card Also made it so that you can now use the airplanes to skip things so you can fly to another station but of course you will have to pay alot and you have to pay a landing fee. If a player owns an Airpot he can decide the flying fee himeslf and the landing fee which means he could extort people if he is smart enough Quick Table I did some changes to Quick Table as it used to create a new public room every time. It now checks the live public room directory first, joins the most suitable open table, retries if somebody fills it during the join, and only creates a new Standard-40 room when no table can be joined. Private room codes are never exposed and the server still makes the final decision. Favicon I also designed a quick little favicon which is Just a P with a box around it but it looks quite good Music Candidates I am now searching for new Music for each theme so music changes with the theme Next Steps Cleaning up the UI one final time trying everything out and finally realsing the Beta and promoting it on reddit."}, {"post_id": 63820, "ts": "2026-09-07T19:51:24Z", "hours": 5.0128, "text": "Poorup Redesign - Devlog #6 This phase was mainly about adding more depth to the player interactions, improving the bot system, and making the rankings feel more alive. Deal Negotiation I redesigned the deal flow so trades, loans, equity, and hybrid deals all work in the same way. When you receive a deal, a modal appears with accept and negotiate. If you close it, the deal does not get declined and stays inside the Finance rail. Both players can now see the same deal collapsed in Finance. The receiver can negotiate, while the sender can adjust or cancel the deal. You can open a full read-only view, change the parameters, and send the new version back. The server also checks old deal IDs so an outdated modal cannot change a newer deal. Sponsored Purchases I also added sponsored purchases. If a player cannot afford a property, they can ask the table for help. Other players can reserve contributions, and once the full amount is available, the buyer accepts and is forced to buy that exact property. The money is automatically returned if the request is canceled, the property changes owner, or a player disconnects. It is not a loan and does not create equity. Bots I continued improving the AI and no-AI bots. The bots now receive more context about the board, current obligations, loans, events, opponents, future rent risk, expected cash flow, and their own previous decisions.AI bots can now also counter trades, negotiate player contracts, choose debt rescue actions, and make auction decisions. If the AI provider runs out of credits or fails, the no api key AI takes over Rankings I added recent trend indicators to the ranking rows, so you can see if a player is moving up, down, or staying flat. I also added a seasonal ranking scope based on the current calendar season. Rules Fixes I also fixed the Double GO setting so landing exactly on GO now pays the boosted amount, while simply passing GO still pays the normal amount.TestingI expanded the tests and ran long bot campaigns with auctions, loans, casino, market, global events, sponsorships, and negotiations. The latest regression suite passes and the longer 2,500-game campaign had zero stalled games. Next Steps The next major step is making the bots simulate several complete future turns and improving long-term negotiation behavior. After that I want to add deeper browser testing and seasonal ranking rewards. Also to lazy to do screenshots of new UI so you will get everything in the next devpost"}, {"post_id": 63109, "ts": "2026-09-06T18:42:52Z", "hours": 11.5353, "text": "Poorup Redesign - Devlog #5 This phase was mainly about fixing all bugs still exisitng, refactoring further with codescene and letting AI run over my code, also fixed some small missing features and simple bugs myself. Choosing Icon I noticed a bug in which because of logic I made before setting up custom icons the programm mapped custom icons people created onto persets and blocked them so for example your icon had red in it, the game decided to map it onto the red preset in the backend blocking it but showing yours in game, this came because I never rewrote this section after introducing custom icons. Ownership icon Before this change owenship on board was only shown with a simple like quadrat in the top right corner of the tile in the color you picked this is also something left over from the old preset logic. I decided to make it so It shows a smaller version of the face of the player which makes it look a lot cleaner. Missing Buttons This was mainly because I let AI write to much of my code, the finical trading tab which is centered around equity and everything missed a dropdown to choose who you send the trade to and even the button to send the trade which was a dumb oversight on my end. I also added a simple backend system for the dropdown inside that modal to only show the propertys a person owns. Bots I also continued working on the bot system though this was mainly watching tutorials and brainstorming further Next Steps Fix last bugs, fully add bot system and make sure UI looks good to release the first beta test hopefully the next post will be the last"}, {"post_id": 62110, "ts": "2026-09-05T11:15:14Z", "hours": 13.0397, "text": "Poorup Redesign - Devlog #4 This phase was mainly about setting up codescene doing a full restructuing with the help of AI and fixing bugs and adding missing features. I also added a simple, gambling and stock market system. Bots I first started with setting up the initial idea of bots so to the UI and a bit of the backend logic for bots and how they will interact with the game iam nowhere finished and I havent tried it out yet. Codescene After checking out the github studentpack again after a while I saw codescene, which is a code reviewer similar to coderabbit. I struggled a bit with the Setup but after running an analysisi I noticed how abysmall my codebase really is and how its missing structure, archtiectuer and etc, for example sepearting certain getures from game logic.js and creating their own thread for it. I also setup a full pr pipieline which I can use with my AI agents which aim will be fixing my architecture, and finding bugs before i push them. bugs I ran Qwen 3.8 flash on my pr pipileine with codescene and let it work indepnedlty to full restructer my codebase so the results are better and I have better architectural design I also let it fix any bugs it found. Bugs I found While trying out the game i found mutipile BUGS one of them affecting my secret minigame palor patrol. For some reason I was losing hearts for no appearent reason. The reason behind it was that even though UI was hidden the helicopters were still flying through. For some reason the heart bug still exists afterwards and even the AI isnt able to find out what it is so Iam completating making architecture changes to it. #Gambling I added a smile gambling system where you can bet money on a roulete on red, black, and green I didnt add any animation for it as I found it unecessary and I also made sure iam legally clear to make sth like this Stock market I created a simple stock market tab and backend which allows people to buy indexes of a property and made sure to connect it with global events so global events can affect the stock market but that is nowhere near usable. Next Steps Iam going to let my AI continue improving my codebase with codescene and continue the Stock market and afterwards add the bots."}, {"post_id": 60301, "ts": "2026-09-02T16:03:55Z", "hours": 10.9608, "text": "Poorup Redesign – Devlog #3 This phase was about expanding the social side of Poorup, adding more depth to the game, and planning future systems that make every round feel more alive. Social, Rankings, Achievements I added a complete friend system. Players can search for unique usernames, send and accept friend requests, remove or block players, report users, invite friends to rooms, and view public profiles without leaving the lobby. Profiles now include statistics such as wins, win rate, games played, average money, bankruptcies, achievements, and match history. I also added global rankings for wins, win rate, games played, achievements, and other statistics. Rankings and Social are now independent tabs instead of modals, with wider layouts that use the available screen space more effectively. Achievements now have custom pixel-art and SVG icons, rarity levels from Common to Mythical, filters, dates, categories, and clickable detail modals. Mythical achievements are extremely rare and can trigger a server-wide announcement for every player. Easter Egg I added the hidden Parlor Patrol minigame. Pressing CTRL + P on the home screen opens a secret mode where you shoot down police helicopters, planes, and drones. It includes custom explosions, animations, sounds, score tracking, and a secret achievement. Global Events Global Events are rare events that affect every player instead of only the person who landed on a tile. They can be triggered by round conditions or Surprise cards and can last several rounds. Ideas include: Housing Bubble Pop Credit Freeze Inflation Spiral Bank Run Interest Rate Shock Airport Strike Energy Crisis Tax Scandal City Election Rent Control Tourism Boom Supply Chain Breakdown Events can combine with each other, create unexpected situations, and unlock secret achievements. I also want a global-event setting that is simply on or off, while event strength and duration scale with the round length. Rules Page I added a complete Rules tab designed like a pixel-art game manual. It explains the board, movement, properties, loans, cards, achievements, global events, social features, and settings. It uses an internal book-style scroll so the main application does not become a long scrolling page. Future Systems I am also planning a casino system using virtual money, with red, black, and green bets where the odds are not equal. Another planned feature is a fictional stock market connected to properties, countries, airports, utilities, and global events. Events could crash markets, increase rent values, affect airports, or create temporary investment opportunities. I also want to add unethical and outrages bank loans with high interest, strict repayment rules, and serious consequences. Music/sound icons I also added simple music and sound icons for the buttons instead of having the music on/off text Next Steps The next phase will be making these systems work together while keeping the game balanced, and also adding AI bots which utilise AI like deepseek v4 and so on so they able to actually judge the situation and think of possible ways for them to win. The aim is to use hcai to power them. I will also add normal BOTS as a fallback if my usage runs out"}, {"post_id": 58798, "ts": "2026-08-31T11:42:39Z", "hours": 9.8108, "text": "Poorup Redesign – Devlog #2 This phase was about continuing the complete redesign of the website, deciding on a UI theme, and implementing a new feature that I had wanted from the start but was not advanced enough to create before. New UI I am very proud to announce a complete redesign of the application. I decided to fully embrace a pixelated theme, and I personally think it looks great. It is genuinely one of the best UI systems I have ever designed. New Feature I decided to expand the trading system. You can now give out loans in exchange for premiums, equity, money, and more. This allows you to create fully customizable loans, such as: I give you $200 for 30% permanent equity in this spot. This means that you have to pay 30% less rent when you land on it and gain 30% of all rent paid on that plot. This is a system I have never seen in a Monopoly game, and I wanted to implement it from the start when I first had the idea for Poorup. New Feature #2 I have also decided to take the advice I was given and implement a room system. This allows players to join and create rooms, as well as make them public or private. I also added a quick-table feature that matches you with other people who have pressed the button, allowing you to play a quick round with random players. New Feature #3 I have created a complete profile system. You can now create a profile, view your statistics, win percentage, average money, and more. You are also able to create custom 32×32 icons to use while playing the game. New Feature #4 I also decided to add sounds and an open-source soundtrack I found called Pondering the Cosmos . which i think fits my new theme perfectly but maybe iam going to change it Next Step AI Bots The next Step will be adding bots but normal bots are boring they are just glofired search engines why i want to be a bit creative. I will use hackclub ai provider and give the bot a brain by combinging them with an AI like deepseek v4 flash this means the bot will be able to check how is he performing what are the most logical steps sell buy properties and trade and if wanted even chat with the user to make a deal would anybody like that?"}, {"post_id": 57234, "ts": "2026-08-29T10:31:03Z", "hours": 1.5744, "text": "Poorup Redesign So after my last ship i read through all the reviews and have decided to continue this project even though i really didnt plan for that. So there were 3 addition people wanted. A new UI, being able to join random people, better Animations and a Dev mode to test in solo player possibly with mods. What did i do? So i first started with thinking of a new design route so i asked chatgpt for some references of a good design. I decided on making the Whole Ui pixellated similar to the Arcade style and fully redesingen the SVG witth and now iam going to go over it and adjust it to fit ours. Of course this took like around 6 hours but I use figma on desktop and the browser tracking of hackatime doesnt seem to work how do you like the new svg? Next Steps Next Steps i redesignen the Full Ui to fit this pexelated style and making sure it looks good"}, {"post_id": 14594, "ts": "2026-06-23T19:20:12Z", "hours": 5.6261, "text": "Project Update: Bug Fixes Overview This phase was all about polishing the user experience, squashing gameplay bugs, and adding new repository documentation. After getting feedback I decided to change The whole UI Dynamic Theming & UI Improvements One of the major frontend improvements in this sprint was fixing the player icon chooser button functionality in the web interface. Fully redesignen the Front-End and more. I first of all started with replacing my .root with some new colors which are greenish. I also added some simple fade in/out animations to all Popups. Another bug was that it couldn’t quite fit in a screen of the size 1980 x 1080. I fixed that by making it possible to scroll down so everything you need for the game is shown on your screen. The way i tested it is by local hosting it and then pressin F12 in the browser and then you could adjust the size of the Window which was pretty neat. Also fixed a lot more of UI bugs such as weird buttons and more but this was the important stuff. Squashing Gameplay Bugs I knocked out two major bugs in this update: Trading System Fix: There was a bug where it wasnt possible for people to only request something without giving anything or make only money transactions so I fixed this. Special Property Popups: I resolved a rendering issue with the popups for special properties, specifically the Airports and Companies (Utilities). Now, when a player interacts with these tiles, the modal correctly pulls the specific data object and displays the unique rent calculations and purchase prices. Documentation Revamp I updated the README.md to ensure the decumentation was on point for anyone cloning the repo. I refactored and renamed SHOWCASE.md to Instructions.md . This provides a much clearer, step-by-step guide on how the game operates and how to get the local server running instead of just showcasing the Repo more. Conclusion The feedback was essential and really showed me how sloppy I worked it should now work perfectly even though i couldnt test it for 4 people"}, {"post_id": 11340, "ts": "2026-06-18T15:32:39Z", "hours": 1.8406, "text": "Update: UI/UX Fixes, Auction System Fixes, and Property Manager Integration FInal This update focused on providing a better user experience and just making it less buggy Key Changes 1. UI/UX Improvements Refactored layout components to improve visual consistency. Updated navigation paths so it makes more sense for the User and is just more logical Adjusted CSS rules to improve the game across different screen sizes. 2. Auction System Fixes Addressed synchronization issues with the auction state. Fixed logical errors in bid processing and countdown timers. 3. Property Manager Integration Fixed the Property Manager feature, allowing users to track and organize their properties. Integrated the property database schema with the existing auction mechanisms. Created user views for listing and editing properties. So just new UI 4. General Bug Fixes & Stability Cleaned up left over parts of old system"}, {"post_id": 10630, "ts": "2026-06-17T14:13:23Z", "hours": 2.5769, "text": "Poorup — Production Ready Over the past few days I’ve been doing a full production-readiness pass on Poorup . Here’s what I worked on: Bug fixes — Fixed auction edge cases where a disconnecting player would leave a ghost bid, locking the game Memory leak prevention — Added a garbage collector on the server to clean up empty rooms after 10 minutes UI polish — Fixed text cut-off in buttons and settings toggles, improved layout consistency across screen sizes Layout centering — The game board is now properly centered vertically and horizontally in the viewport Accessibility — Added focus-visible styles for keyboard navigation New setting — Exposed the “Double rent” toggle in the UI (the rule already existed in the engine) Code quality — Added JSDoc comments to core server classes, removed dead code The game is now polished and stable. Im shipping it"}, {"post_id": 8803, "ts": "2026-06-14T16:57:35Z", "hours": 0.465, "text": "Overview Today I worked on the front end an am basically finished with the easy stuff Iam now going to add the player icon and etc Front End I designed my front end and i think i can say that I am pretty good at basic JS/HTML/CSS and this project teached me alot Iam probally going to wrap it up in the next 2 post and focus on smth else. Monopoly repo After resarching a bit i found another open source monopoly game and my plan is now to copy some backend logic from it but i need to adjust it because his game is made to be playable localy and mine online so it will take same adjustment #Backend I added a Room system with the help of mutipile videos in which a random room code is generated and the server saves the generated room code making it possible for another use to insert it. The code will be if the round was ended."}, {"post_id": 8249, "ts": "2026-06-13T18:30:59Z", "hours": 2.8419, "text": "Overview Over the last few days, I’ve been triying to refactor my project, but i realised something I killed it i refactored it so often that i lost sight of the real goal and will proablly start from scratch restarting it from 0 i designed and svg file but just couldnt implement the right way. Cleaning the SVG My biggest headache was the game board. I designed a beautiful, detailed map in Figma, but exporting it as an SVG just made things difficult i tried making i clickable but i didnt know how to and i found no totorials regarding this so i will probally just create a board using html and css or maybe look for solution using ai Current System Status At the moment i have decided to refractor to vue by advice of some friends and ai because it makes the backend easier but i will proablly change back, because iam realising Iam making the project more complex than it has to be also. Conclusion I just wasted time trying to learn new stuff an refractoring and trying to not use ai. I would like for some adivice which ai I should use and if I should stick with vue or stay with or change back to default also this made me reflect on what kind of perfectionist iam an I will probally wrap up this project in the next few days because I realised front end is not for me I will continue learning it but will soon work on either python or C project after. I will just add the missing features with Ai"}, {"post_id": 6430, "ts": "2026-06-10T20:16:01Z", "hours": 0.6117, "text": "#Overview So today i didnt really code just refactored again and went back to css and decided to design all design elements in figma. It was pretty easy and II am now qustoning why i didnt do that instead also i only copied these 2. I will make my own streets afterwards and i also decided to redesign the website because it realy just a copy and i dont want to be sued but the board will probally look the same just different countries and maybe prices need to look for balancing and how it is normally in monopoly. But this probally going to take 2 to 3 days cause i really dont got any time in the next few days."}, {"post_id": 5789, "ts": "2026-06-09T18:22:00Z", "hours": 0.7531, "text": "Project Update: The Great Refactor & React Integration 📋 Overview Damn this looks trash just a small update and i jsut noticed tailwind actaully looks like trash are there any alternatives because i didnt expect it to look this bad in comparison to before and yes i do know its looks aigenrerated but i did myslef also tailwind is pretty easy if you get the hang of it just looks trash maybe going to watch some tuts cause i cant upload the final product like this."}, {"post_id": 5743, "ts": "2026-06-09T17:20:02Z", "hours": 1.3414, "text": "Overview This phase was a major point for the project. After successfully implementing the lobby chat and the 11x11 Monopoly board using Vanilla JS and CSS Grid, I realized that managing the game states (turns, money, properties, transactions) in Vanilla JS was going to lead to unmanageable spaghetti code and was way to hard. To keep the project clean and professional, I decided to perform a complete “hard reset” and refactor the entire frontend into a modern React Single Page Application (SPA) utilizing Tailwind CSS v4 [1.1.1, 1.1.8]. I always though about using it but found it weird and dififult for a beginer The Great Redesign Instead of keeping duplicate file structures or nesting my React app in a subfolder, I decided to do a complete wipe of the repository and initialize Vite directly at the root of my Poorup folder [1.1.1]. My backend directory ( server/ ) with the working Socket.io logic stays at the root level, sitting side-by-side with my brand-new React source directory ( src/ ).Because i didnt want to rewrite that all Tailwind v4 & Vite Setup (React Redesign - Lab 1) I verified that the setup is 100% correct by creating a basic functional component in src/App.jsx and rendering a test heading styled in large, bold, violet text using Tailwind v4 utility classes [1.1.8]. It compiled instantly and loaded perfectly in the browser. Next Steps Now that the modern React + Tailwind ecosystem is up and running at the root, I am starting Lab Challenge 2 (React Redesign) . I’ll be creating a dedicated <LandingScreen /> component, managing the nickname input using React useState hooks, and connecting Socket.io to React to emit player connection data back to the server [1.1.1, 1.2.6]. You know lab challenges for this i will watch some more videos leanr more js and learn react if possible Conclusion Deciding to start over from a blank folder was tough, but it was absolutely necessary. The codebase feels incredibly clean and changing to React will save me massive amounts of time as I start building out the actual Monopoly gameplay. But i now learned alot in the time i decided to atleast built the lobby and board in vanilla js,css and html. Also anybody knows an ki which is good in front end because i just realised iam trash in front end and ki is too"}, {"post_id": 5131, "ts": "2026-06-08T20:23:58Z", "hours": 1.7286, "text": "Overview This phase was important even though it was short. I transitioned from basic static mockups to building a fully functional, real-time multiplayer lobby system. I resolved tricky logical bugs and fought port conflicts, I also expanded my knowledge on js and am probally going to need to take a break to really learn all of js and will soon watch a 22 hour tut. Fixing the SPA Screen Switch (Lab 9) I started by tackling the dynamic transition from the login screen ( #landing-screen ) to the lobby screen ( #lobby-screen ). Space in HTML ID: I accidentally wrote id=\"landing screen\" (with a space) in my HTML, which broke my JavaScript’s querySelector because IDs cannot have spaces. Once I replaced the space with a dash ( id=\"landing-screen\" ) Now it works perfectly fine. Port Conflicts Right after getting the transitions working, my local server crashed on Port 3000. My terminal crashed and restored its history, leaving a Node process running in the background and locking the port i still dont know why it does that just looked on reddit and youtube. To easily bypass this without fighting Windows process managers, I updated my server.js and local client connection to run on Port 3005 . It started up instantly. Designing the 3-Column Lobby (Lab 10) With the screen switching working, I redesigned the lobby HTML to match the responsive 3-column layout of Richup.io [1]. I used Flexbox ( flex: 1 and flex: 2 for the center) to align: Left Column: A placeholder invite link input and a scrollable chat area [1]. Center Column: The player greeting, token color picker, and “Join Game” button [1]. Right Column: Game settings (dropdowns for starting cash) [1]. Structuring this required a bit of tweaking but not to hard. Interactive Color Picker & Socket Events (Lab 11) Next, I tackled the token selection grid [1]. I styled four distinct color circles (Red, Blue, Green, Yellow) in CSS and set up a .selected class that applies a thick white border and a glowing shadow. In client.js , I wrote a forEach loop that listens for clicks on each circle, removes the .selected class from all others, adds it to the active circle, and stores the selection in a global variable. On the server side, I set up a 'join-room' socket listener. Now, when a player selects a color and clicks “Join Game”, the client emits the color choice, and the backend successfully receives and logs it in the terminal [1]. Server-Side Multiplayer Sync (Lab 12) The most exciting part and hard part today was implementing real-time state synchronization. I declared a global activePlayers dictionary on the server to keep track of active sessions. When a user logs in, they are registered in the dictionary. When they choose a color and click “Join Game”, their color is updated, and the server broadcasts the entire updated list to all active clients via io.emit(\"update-players\") [1]. On the client side, I wrote a listener that clears out the #player-list and dynamically rebuilds it, coloring each player’s username text to match their selected token color. I also handled the 'disconnect' socket event to delete players from the dictionary when they close it. You can see the messaged in the terminal and yes it is antigravity but i dont use the ai and have only used it to refractor my notes, so i dont even have tokens anymore cause of the amount of notes i had. So i also decided i probally need to expand my file directory and iam thinking of using tailwind css or just using css and making custom icons using favicons and etc by using figma also i got approved for the Student github :)."}, {"post_id": 4397, "ts": "2026-06-07T18:32:25Z", "hours": 3.6853, "text": "Overview Today was massive for Poorup. I officially made the first steps into the website, creating the backend for the hompage and creating the CSS.. Transitioning From HTML to CSS I officially finished the basic HTML path on freeCodeCamp! It feels great to have the basic foundation down. I am still missing a lot of depth in semantic HTML and more advanced stuff, but I have enough of experienc to now build on it. I just need to learn some more js and CSS. I then watched some video regarding CSS and worked on it. I realised that CSS is really simple but involes alot of googling to find certain functions . I did one rooky mistake which was having the css file not in the right folder so it wasnt loading correctly and i was quite suprised Backend & Real-Time Socket.io Integration This is where the real engineering started today. Since Poorup is a real-time multiplayer board game, I can’t just use standard HTTP requests where the browser has to reload every time a player moves. I needed a permanent, open connection between the browser and the server. I set up a Node.js server with Express in server/server.js to serve my static folder. Then, I integrated Socket.io: Express Server: Serving the public folder on http://localhost:3000 . Socket.io Setup: Wrapped the Express app in an HTTP server and configured the connection listeners. Client-Side JS: Wrote client.js to capture input data and handle form events. The Struggle: I ran into a bug where clicking “Play” triggered the server connection even when the username field was completely empty, which bypassed my HTML required attribute. After digging into my event listeners, I realized I was listening to the click event on the button instead of the submit event on the form . Since the browser’s native validation only checks fields during a form submission, the click listener was bypassing it. Switching my listener to form.addEventListener(\"submit\") fixed the empty-name validation instantly. When I run node server/server.js now and type a name in the browser, the server terminal immediately logs the connection and prints the player’s name in real-time. Next Steps & Screen Switching Now that the backend is running and successfully communicating with the client, my next step is handling the UI transitions. Since we don’t want a full page reload (which would kill the WebSocket connection), I am working on setting up a Single Page Application (SPA) structure ,aksed ki what to do next by usign my earlier stated Lab approach in which i dont get code but how to do stuff and have to implement it. I am currently working on Lab Challenge 9 , where I will be wrapping the login screen in a #landing-screen div and the lobby in a #lobby-screen div. I’ll use JS to dynamically swap the .hidden class as soon as the server acknowledges that a player has successfully joined. Conclusion Overall, this phase was a huge step up from just writing static tags. I’m taking active notes on everything which you will later find in a second repo so you can build it your own with all the Lab challenges. I find it to be quite rewarding but now i have to lock in for school cause i got a vocabulary test in 2 days. I will probally upload a demo soon an do some major changes to color, theme, name and etc for copyright reasons"}, {"post_id": 3686, "ts": "2026-06-06T18:51:12Z", "hours": 2.2747, "text": "Stardance Progress Log: Poorup Development Current Progress Learning Path: Almost completed the Basic HTML section on freeCodeCamp. Note-taking: Iam taking personal notes on semantic HTML, document structures, tags, and form elements. My Learning Methodology (AI as a Mentor) To make sure I actually understand every line of code I write, I am using a strict, self-guided approach to learning: First of all i have strictly said to the ai to never write code for me and never give me the answer and just show me how i could achieve it. Also the ai acts strictly as a mentor. It analyzes my goals and designs custom “Lab Challenges” formatted exactly like freeCodeCamp exercises (with Objectives, User Stories, and Test suites). Because i found this to be quite efective. Also i decided to install the live preview extenstion to see my code in person and debug it easiear. What I’ve Built So Far Landing Page Structure: Created a solid textual game menu and lobby framework in public/index.html using headings ( h1 , h2 ), paragraphs, an unordered list for features, and an ordered list for instructions. Interactive Elements: Added call-to-action buttons for joining and creating lobbies. Next Steps Currently working on Lab Challenge 2 given by the ai: The Player Registration Form to practice form validation, input types (text, radio, checkbox), and connecting labels with inputs via attributes. Once HTML basics are solid, I will start exploring basic CSS styling."}, {"post_id": 2926, "ts": "2026-06-05T20:35:05Z", "hours": 0.7811, "text": "I have now started with creating the Github and also learning some HTML with free Code Camp. I also decided to take some notes in a md file reading through the guides"}]...
|
Title: Poorup.io by @jeremy | Stardance
Devlogs:
Title: Poorup.io by @jeremy | Stardance
Devlogs:
I have now started with creating the Github and also learning some HTML with free Code Camp. I also decided to take some notes in a md file reading through the guides
Stardance Progress Log: Poorup Development Current Progress Learning Path: Almost completed the Basic HTML section on freeCodeCamp. Note-taking: Iam taking personal notes on semantic HTML, document structures, tags, and form elements. My Learning Methodology (AI as a Mentor) To make sure I actually understand every line of code I write, I am using a strict, self-guided approach to learning: First of all i have strictly said to the ai to never write code for me and never give me the answer and just show me how i could achieve it. Also the ai acts strictly as a mentor. It analyzes my goals and designs custom “Lab Challenges” formatted exactly like freeCodeCamp exercises (with Objectives, User Stories, and Test suites). Because i found this to be quite efective. Also i decided to install the live preview extenstion to see my code in person and debug it easiear. What I’ve Built So Far Landing Page Structure: Created a solid textual game menu and lobby framework in public/index.html using headings ( h1 , h2 ), paragraphs, an unordered list for features, and an ordered list for instructions. Interactive Elements: Added call-to-action buttons for joining and creating lobbies. Next Steps Currently working on Lab Challenge 2 given by the ai: The Player Registration Form to practice form validation, input types (text, radio, checkbox), and connecting labels with inputs via attributes. Once HTML basics are solid, I will start exploring basic CSS styling.
Overview Today was massive for Poorup. I officially made the first steps into the website, creating the backend for the hompage and creating the CSS.. Transitioning From HTML to CSS I officially finished the basic HTML path on freeCodeCamp! It feels great to have the basic foundation down. I am still missing a lot of depth in semantic HTML and more advanced stuff, but I have enough of experienc to now build on it. I just need to learn some more js and CSS. I then watched some video regarding CSS and worked on it. I realised that CSS is really simple but involes alot of googling to find certain functions . I did one rooky mistake which was having the css file not in the right folder so it wasnt loading correctly and i was quite suprised Backend & Real-Time Socket.io Integration This is where the real engineering started today. Since Poorup is a real-time multiplayer board game, I can’t just use standard HTTP requests where the browser has to reload every time a player moves. I needed a permanent, open connection between the browser and the server. I set up a Node.js server with Express in server/server.js to serve my static folder. Then, I integrated Socket.io: Express Server: Serving the public folder on http://localhost:3000 . Socket.io Setup: Wrapped the Express app in an HTTP server and configured the connection listeners. Client-Side JS: Wrote client.js to capture input data and handle form events. The Struggle: I ran into a bug where clicking “Play” triggered the server connection even when the username field was completely empty, which bypassed my HTML required attribute. After digging into my event listeners, I realized I was listening to the click event on the button instead of the submit event on the form . Since the browser’s native validation only checks fields during a form submission, the click listener was bypassing it. Switching my listener to form.addEventListener("submit") fixed the empty-name validation instantly. When I run node server/server.js now and type a name in the browser, the server terminal immediately logs the connection and prints the player’s name in real-time. Next Steps & Screen Switching Now that the backend is running and successfully communicating with the client, my next step is handling the UI transitions. Since we don’t want a full page reload (which would kill the WebSocket connection), I am working on setting up a Single Page Application (SPA) structure ,aksed ki what to do next by usign my earlier stated Lab approach in which i dont get code but how to do stuff and have to implement it. I am currently working on Lab Challenge 9 , where I will be wrapping the login screen in a #landing-screen div and the lobby in a #lobby-screen div. I’ll use JS to dynamically swap the .hidden class as soon as the server acknowledges that a player has successfully joined. Conclusion Overall, this phase was a huge step up from just writing static tags. I’m taking active notes on everything which you will later find in a second repo so you can build it your own with all the Lab challenges. I find it to be quite rewarding but now i have to lock in for school cause i got a vocabulary test in 2 days. I will probally upload a demo soon an do some major changes to color, theme, name and etc for copyright reasons
Overview This phase was important even though it was short. I transitioned from basic static mockups to building a fully functional, real-time multiplayer lobby system. I resolved tricky logical bugs and fought port conflicts, I also expanded my knowledge on js and am probally going to need to take a break to really learn all of js and will soon watch a 22 hour tut. Fixing the SPA Screen Switch (Lab 9) I started by tackling the dynamic transition from the login screen ( #landing-screen ) to the lobby screen ( #lobby-screen ). Space in HTML ID: I accidentally wrote id="landing screen" (with a space) in my HTML, which broke my JavaScript’s querySelector because IDs cannot have spaces. Once I replaced the space with a dash ( id="landing-screen" ) Now it works perfectly fine. Port Conflicts Right after getting the transitions working, my local server crashed on Port 3000. My terminal crashed and restored its history, leaving a Node process running in the background and locking the port i still dont know why it does that just looked on reddit and youtube. To easily bypass this without fighting Windows process managers, I updated my server.js and local client connection to run on Port 3005 . It started up instantly. Designing the 3-Column Lobby (Lab 10) With the screen switching working, I redesigned the lobby HTML to match the responsive 3-column layout of Richup.io [1]. I used Flexbox ( flex: 1 and flex: 2 for the center) to align: Left Column: A placeholder invite link input and a scrollable chat area [1]. Center Column: The player greeting, token color picker, and “Join Game” button [1]. Right Column: Game settings (dropdowns for starting cash) [1]. Structuring this required a bit of tweaking but not to hard. Interactive Color Picker & Socket Events (Lab 11) Next, I tackled the token selection grid [1]. I styled four distinct color circles (Red, Blue, Green, Yellow) in CSS and set up a .selected class that applies a thick white border and a glowing shadow. In client.js , I wrote a forEach loop that listens for clicks on each circle, removes the .selected class from all others, adds it to the active circle, and stores the selection in a global variable. On the server side, I set up a 'join-room' socket listener. Now, when a player selects a color and clicks “Join Game”, the client emits the color choice, and the backend successfully receives and logs it in the terminal [1]. Server-Side Multiplayer Sync (Lab 12) The most exciting part and hard part today was implementing real-time state synchronization. I declared a global activePlayers dictionary on the server to keep track of active sessions. When a user logs in, they are registered in the dictionary. When they choose a color and click “Join Game”, their color is updated, and the server broadcasts the entire updated list to all active clients via io.emit("update-players") [1]. On the client side, I wrote a listener that clears out the #player-list and dynamically rebuilds it, coloring each player’s username text to match their selected token color. I also handled the 'disconnect' socket event to delete players from the dictionary when they close it. You can see the messaged in the terminal and yes it is antigravity but i dont use the ai and have only used it to refractor my notes, so i dont even have tokens anymore cause of the amount of notes i had. So i also decided i probally need to expand my file directory and iam thinking of using tailwind css or just using css and making custom icons using favicons and etc by using figma also i got approved for the Student github :).
Overview This phase was a major point for the project. After successfully implementing the lobby chat and the 11x11 Monopoly board using Vanilla JS and CSS Grid, I realized that managing the game states (turns, money, properties, transactions) in Vanilla JS was going to lead to unmanageable spaghetti code and was way to hard. To keep the project clean and professional, I decided to perform a complete “hard reset” and refactor the entire frontend into a modern React Single Page Application (SPA) utilizing Tailwind CSS v4 [1.1.1, 1.1.8]. I always though about using it but found it weird and dififult for a beginer The Great Redesign Instead of keeping duplicate file structures or nesting my React app in a subfolder, I decided to do a complete wipe of the repository and initialize Vite directly at the root of my Poorup folder [1.1.1]. My backend directory ( server/ ) with the working Socket.io logic stays at the root level, sitting side-by-side with my brand-new React source directory ( src/ ).Because i didnt want to rewrite that all Tailwind v4 & Vite Setup (React Redesign - Lab 1) I verified that the setup is 100% correct by creating a basic functional component in src/App.jsx and rendering a test heading styled in large, bold, violet text using Tailwind v4 utility classes [1.1.8]. It compiled instantly and loaded perfectly in the browser. Next Steps Now that the modern React + Tailwind ecosystem is up and running at the root, I am starting Lab Challenge 2 (React Redesign) . I’ll be creating a dedicated <LandingScreen /> component, managing the nickname input using React useState hooks, and connecting Socket.io to React to emit player connection data back to the server [1.1.1, 1.2.6]. You know lab challenges for this i will watch some more videos leanr more js and learn react if possible Conclusion Deciding to start over from a blank folder was tough, but it was absolutely necessary. The codebase feels incredibly clean and changing to React will save me massive amounts of time as I start building out the actual Monopoly gameplay. But i now learned alot in the time i decided to atleast built the lobby and board in vanilla js,css and html. Also anybody knows an ki which is good in front end because i just realised iam trash in front end and ki is too
Project Update: The Great Refactor & React Integration 📋 Overview Damn this looks trash just a small update and i jsut noticed tailwind actaully looks like trash are there any alternatives because i didnt expect it to look this bad in comparison to before and yes i do know its looks aigenrerated but i did myslef also tailwind is pretty easy if you get the hang of it just looks trash maybe going to watch some tuts cause i cant upload the final product like this.
#Overview So today i didnt really code just refactored again and went back to css and decided to design all design elements in figma. It was pretty easy and II am now qustoning why i didnt do that instead also i only copied these 2. I will make my own streets afterwards and i also decided to redesign the website because it realy just a copy and i dont want to be sued but the board will probally look the same just different countries and maybe prices need to look for balancing and how it is normally in monopoly. But this probally going to take 2 to 3 days cause i really dont got any time in the next few days.
Overview Over the last few days, I’ve been triying to refactor my project, but i realised something I killed it i refactored it so often that i lost sight of the real goal and will proablly start from scratch restarting it from 0 i designed and svg file but just couldnt implement the right way. Cleaning the SVG My biggest headache was the game board. I designed a beautiful, detailed map in Figma, but exporting it as an SVG just made things difficult i tried making i clickable but i didnt know how to and i found no totorials regarding this so i will probally just create a board using html and css or maybe look for solution using ai Current System Status At the moment i have decided to refractor to vue by advice of some friends and ai because it makes the backend easier but i will proablly change back, because iam realising Iam making the project more complex than it has to be also. Conclusion I just wasted time trying to learn new stuff an refractoring and trying to not use ai. I would like for some adivice which ai I should use and if I should stick with vue or stay with or change back to default also this made me reflect on what kind of perfectionist iam an I will probally wrap up this project in the next few days because I realised front end is not for me I will continue learning it but will soon work on either python or C project after. I will just add the missing features with Ai
Overview Today I worked on the front end an am basically finished with the easy stuff Iam now going to add the player icon and etc Front End I designed my front end and i think i can say that I am pretty good at basic JS/HTML/CSS and this project teached me alot Iam probally going to wrap it up in the next 2 post and focus on smth else. Monopoly repo After resarching a bit i found another open source monopoly game and my plan is now to copy some backend logic from it but i need to adjust it because his game is made to be playable localy and mine online so it will take same adjustment #Backend I added a Room system with the help of mutipile videos in which a random room code is generated and the server saves the generated room code making it possible for another use to insert it. The code will be if the round was ended.
Poorup — Production Ready Over the past few days I’ve been doing a full production-readiness pass on Poorup . Here’s what I worked on: Bug fixes — Fixed auction edge cases where a disconnecting player would leave a ghost bid, locking the game Memory leak prevention — Added a garbage collector on the server to clean up empty rooms after 10 minutes UI polish — Fixed text cut-off in buttons and settings toggles, improved layout consistency across screen sizes Layout centering — The game board is now properly centered vertically and horizontally in the viewport Accessibility — Added focus-visible styles for keyboard navigation New setting — Exposed the “Double rent” toggle in the UI (the rule already existed in the engine) Code quality — Added JSDoc comments to core server classes, removed dead code The game is now polished and stable. Im shipping it
Update: UI/UX Fixes, Auction System Fixes, and Property Manager Integration FInal This update focused on providing a better user experience and just making it less buggy Key Changes 1. UI/UX Improvements Refactored layout components to improve visual consistency. Updated navigation paths so it makes more sense for the User and is just more logical Adjusted CSS rules to improve the game across different screen sizes. 2. Auction System Fixes Addressed synchronization issues with the auction state. Fixed logical errors in bid processing and countdown timers. 3. Property Manager Integration Fixed the Property Manager feature, allowing users to track and organize their properties. Integrated the property database schema with the existing auction mechanisms. Created user views for listing and editing properties. So just new UI 4. General Bug Fixes & Stability Cleaned up left over parts of old system
Project Update: Bug Fixes Overview This phase was all about polishing the user experience, squashing gameplay bugs, and adding new repository documentation. After getting feedback I decided to change The whole UI Dynamic Theming & UI Improvements One of the major frontend improvements in this sprint was fixing the player icon chooser button functionality in the web interface. Fully redesignen the Front-End and more. I first of all started with replacing my .root with some new colors which are greenish. I also added some simple fade in/out animations to all Popups. Another bug was that it couldn’t quite fit in a screen of the size 1980 x 1080. I fixed that by making it possible to scroll down so everything you need for the game is shown on your screen. The way i tested it is by local hosting it and then pressin F12 in the browser and then you could adjust the size of the Window which was pretty neat. Also fixed a lot more of UI bugs such as weird buttons and more but this was the important stuff. Squashing Gameplay Bugs I knocked out two major bugs in this update: Trading System Fix: There was a bug where it wasnt possible for people to only request something without giving anything or make only money transactions so I fixed this. Special Property Popups: I resolved a rendering issue with the popups for special properties, specifically the Airports and Companies (Utilities). Now, when a player interacts with these tiles, the modal correctly pulls the specific data object and displays the unique rent calculations and purchase prices. Documentation Revamp I updated the README.md to ensure the decumentation was on point for anyone cloning the repo. I refactored and renamed SHOWCASE.md to Instructions.md . This provides a much clearer, step-by-step guide on how the game operates and how to get the local server running instead of just showcasing the Repo more. Conclusion The feedback was essential and really showed me how sloppy I worked it should now work perfectly even though i couldnt test it for 4 people
Poorup Redesign So after my last ship i read through all the reviews and have decided to continue this project even though i really didnt plan for that. So there were 3 addition people wanted. A new UI, being able to join random people, better Animations and a Dev mode to test in solo player possibly with mods. What did i do? So i first started with thinking of a new design route so i asked chatgpt for some references of a good design. I decided on making the Whole Ui pixellated similar to the Arcade style and fully redesingen the SVG witth and now iam going to go over it and adjust it to fit ours. Of course this took like around 6 hours but I use figma on desktop and the browser tracking of hackatime doesnt seem to work how do you like the new svg? Next Steps Next Steps i redesignen the Full Ui to fit this pexelated style and making sure it looks good
Poorup Redesign – Devlog #2 This phase was about continuing the complete redesign of the website, deciding on a UI theme, and implementing a new feature that I had wanted from the start but was not advanced enough to create before. New UI I am very proud to announce a complete redesign of the application. I decided to fully embrace a pixelated theme, and I personally think it looks great. It is genuinely one of the best UI systems I have ever designed. New Feature I decided to expand the trading system. You can now give out loans in exchange for premiums, equity, money, and more. This allows you to create fully customizable loans, such as: I give you $200 for 30% permanent equity in this spot. This means that you have to pay 30% less rent when you land on it and gain 30% of all rent paid on that plot. This is a system I have never seen in a Monopoly game, and I wanted to implement it from the start when I first had the idea for Poorup. New Feature #2 I have also decided to take the advice I was given and implement a room system. This allows players to join and create rooms, as well as make them public or private. I also added a quick-table feature that matches you with other people who have pressed the button, allowing you to play a quick round with random players. New Feature #3 I have created a complete profile system. You can now create a profile, view your statistics, win percentage, average money, and more. You are also able to create custom 32×32 icons to use while playing the game. New Feature #4 I also decided to add sounds and an open-source soundtrack I found called Pondering the Cosmos . which i think fits my new theme perfectly but maybe iam going to change it Next Step AI Bots The next Step will be adding bots but normal bots are boring they are just glofired search engines why i want to be a bit creative. I will use hackclub ai provider and give the bot a brain by combinging them with an AI like deepseek v4 flash this means the bot will be able to check how is he performing what are the most logical steps sell buy properties and trade and if wanted even chat with the user to make a deal would anybody like that?
Poorup Redesign – Devlog #3 This phase was about expanding the social side of Poorup, adding more depth to the game, and planning future systems that make every round feel more alive. Social, Rankings, Achievements I added a complete friend system. Players can search for unique usernames, send and accept friend requests, remove or block players, report users, invite friends to rooms, and view public profiles without leaving the lobby. Profiles now include statistics such as wins, win rate, games played, average money, bankruptcies, achievements, and match history. I also added global rankings for wins, win rate, games played, achievements, and other statistics. Rankings and Social are now independent tabs instead of modals, with wider layouts that use the available screen space more effectively. Achievements now have custom pixel-art and SVG icons, rarity levels from Common to Mythical, filters, dates, categories, and clickable detail modals. Mythical achievements are extremely rare and can trigger a server-wide announcement for every player. Easter Egg I added the hidden Parlor Patrol minigame. Pressing CTRL + P on the home screen opens a secret mode where you shoot down police helicopters, planes, and drones. It includes custom explosions, animations, sounds, score tracking, and a secret achievement. Global Events Global Events are rare events that affect every player instead of only the person who landed on a tile. They can be triggered by round conditions or Surprise cards and can last several rounds. Ideas include: Housing Bubble Pop Credit Freeze Inflation Spiral Bank Run Interest Rate Shock Airport Strike Energy Crisis Tax Scandal City Election Rent Control Tourism Boom Supply Chain Breakdown Events can combine with each other, create unexpected situations, and unlock secret achievements. I also want a global-event setting that is simply on or off, while event strength and duration scale with the round length. Rules Page I added a complete Rules tab designed like a pixel-art game manual. It explains the board, movement, properties, loans, cards, achievements, global events, social features, and settings. It uses an internal book-style scroll so the main application does not become a long scrolling page. Future Systems I am also planning a casino system using virtual money, with red, black, and green bets where the odds are not equal. Another planned feature is a fictional stock market connected to properties, countries, airports, utilities, and global events. Events could crash markets, increase rent values, affect airports, or create temporary investment opportunities. I also want to add unethical and outrages bank loans with high interest, strict repayment rules, and serious consequences. Music/sound icons I also added simple music and sound icons for the buttons instead of having the music on/off text Next Steps The next phase will be making these systems work together while keeping the game balanced, and also adding AI bots which utilise AI like deepseek v4 and so on so they able to actually judge the situation and think of possible ways for them to win. The aim is to use hcai to power them. I will also add normal BOTS as a fallback if my usage runs out
Poorup Redesign - Devlog #4 This phase was mainly about setting up codescene doing a full restructuing with the help of AI and fixing bugs and adding missing features. I also added a simple, gambling and stock market system. Bots I first started with setting up the initial idea of bots so to the UI and a bit of the backend logic for bots and how they will interact with the game iam nowhere finished and I havent tried it out yet. Codescene After checking out the github studentpack again after a while I saw codescene, which is a code reviewer similar to coderabbit. I struggled a bit with the Setup but after running an analysisi I noticed how abysmall my codebase really is and how its missing structure, archtiectuer and etc, for example sepearting certain getures from game logic.js and creating their own thread for it. I also setup a full pr pipieline which I can use with my AI agents which aim will be fixing my architecture, and finding bugs before i push them. bugs I ran Qwen 3.8 flash on my pr pipileine with codescene and let it work indepnedlty to full restructer my codebase so the results are better and I have better architectural design I also let it fix any bugs it found. Bugs I found While trying out the game i found mutipile BUGS one of them affecting my secret minigame palor patrol. For some reason I was losing hearts for no appearent reason. The reason behind it was that even though UI was hidden the helicopters were still flying through. For some reason the heart bug still exists afterwards and even the AI isnt able to find out what it is so Iam completating making architecture changes to it. #Gambling I added a smile gambling system where you can bet money on a roulete on red, black, and green I didnt add any animation for it as I found it unecessary and I also made sure iam legally clear to make sth like this Stock market I created a simple stock market tab and backend which allows people to buy indexes of a property and made sure to connect it with global events so global events can affect the stock market but that is nowhere near usable. Next Steps Iam going to let my AI continue improving my codebase with codescene and continue the Stock market and afterwards add the bots.
Poorup Redesign - Devlog #5 This phase was mainly about fixing all bugs still exisitng, refactoring further with codescene and letting AI run over my code, also fixed some small missing features and simple bugs myself. Choosing Icon I noticed a bug in which because of logic I made before setting up custom icons the programm mapped custom icons people created onto persets and blocked them so for example your icon had red in it, the game decided to map it onto the red preset in the backend blocking it but showing yours in game, this came because I never rewrote this section after introducing custom icons. Ownership icon Before this change owenship on board was only shown with a simple like quadrat in the top right corner of the tile in the color you picked this is also something left over from the old preset logic. I decided to make it so It shows a smaller version of the face of the player which makes it look a lot cleaner. Missing Buttons This was mainly because I let AI write to much of my code, the finical trading tab which is centered around equity and everything missed a dropdown to choose who you send the trade to and even the button to send the trade which was a dumb oversight on my end. I also added a simple backend system for the dropdown inside that modal to only show the propertys a person owns. Bots I also continued working on the bot system though this was mainly watching tutorials and brainstorming further Next Steps Fix last bugs, fully add bot system and make sure UI looks good to release the first beta test hopefully the next post will be the last
Poorup Redesign - Devlog #6 This phase was mainly about adding more depth to the player interactions, improving the bot system, and making the rankings feel more alive. Deal Negotiation I redesigned the deal flow so trades, loans, equity, and hybrid deals all work in the same way. When you receive a deal, a modal appears with accept and negotiate. If you close it, the deal does not get declined and stays inside the Finance rail. Both players can now see the same deal collapsed in Finance. The receiver can negotiate, while the sender can adjust or cancel the deal. You can open a full read-only view, change the parameters, and send the new version back. The server also checks old deal IDs so an outdated modal cannot change a newer deal. Sponsored Purchases I also added sponsored purchases. If a player cannot afford a property, they can ask the table for help. Other players can reserve contributions, and once the full amount is available, the buyer accepts and is forced to buy that exact property. The money is automatically returned if the request is canceled, the property changes owner, or a player disconnects. It is not a loan and does not create equity. Bots I continued improving the AI and no-AI bots. The bots now receive more context about the board, current obligations, loans, events, opponents, future rent risk, expected cash flow, and their own previous decisions.AI bots can now also counter trades, negotiate player contracts, choose debt rescue actions, and make auction decisions. If the AI provider runs out of credits or fails, the no api key AI takes over Rankings I added recent trend indicators to the ranking rows, so you can see if a player is moving up, down, or staying flat. I also added a seasonal ranking scope based on the current calendar season. Rules Fixes I also fixed the Double GO setting so landing exactly on GO now pays the boosted amount, while simply passing GO still pays the normal amount.TestingI expanded the tests and ran long bot campaigns with auctions, loans, casino, market, global events, sponsorships, and negotiations. The latest regression suite passes and the longer 2,500-game campaign had zero stalled games. Next Steps The next major step is making the bots simulate several complete future turns and improving long-term negotiation behavior. After that I want to add deeper browser testing and seasonal ranking rewards. Also to lazy to do screenshots of new UI so you will get everything in the next devpost
Poorup Redesign - Devlog #7 This phase was mainly about doing a full audit over the game, fixing bugs which were still hidden inside the server and UI, and making the whole project easier to trust before the next merge. Finalising Bots, adding, themes adding new suprise features and more. Themes I decided to create 5 more themes which will fully change the look of the game, for the 5 i decided on 5 directions first of light mode, and then the 4 seasons so summer,autumm, winter, and spring. These took quite some time to create but I think they came out quite decent though they still need cleaning up Ranking Seasons I have now added ranking seasons which are 1 month each if you manage to rank on the leaderbaord at the end of the season you get a special cosmetic(newly added system) and a special Title Cosmetics I added a full cosmetics system and the ranking system so you can now get cosmetics from 2 places, either by getting them at the end of the season form the leaderboard or by getting them from achievements Card Upgrade I also now added the features to upgrade your bank account, if you pay enough money you can upgrade your card for 1000$ this gives you a card with 5% cashback which is the Spaarkasse karte(german Bank) and the nex level is the amex black card wich give you 10$ cashback and amex points which you can use for flying. Gambling UI I also decided to now give the gambling UI an animation it now has the same kind of case opening animation as CS2 so the roulette which goes form right to left. Plane station card Also made it so that you can now use the airplanes to skip things so you can fly to another station but of course you will have to pay alot and you have to pay a landing fee. If a player owns an Airpot he can decide the flying fee himeslf and the landing fee which means he could extort people if he is smart enough Quick Table I did some changes to Quick Table as it used to create a new public room every time. It now checks the live public room directory first, joins the most suitable open table, retries if somebody fills it during the join, and only creates a new Standard-40 room when no table can be joined. Private room codes are never exposed and the server still makes the final decision. Favicon I also designed a quick little favicon which is Just a P with a box around it but it looks quite good Music Candidates I am now searching for new Music for each theme so music changes with the theme Next Steps Cleaning up the UI one final time trying everything out and finally realsing the Beta and promoting it on reddit.
Poorup Redesign - Devlog #8 this phase mainly about consolidating the backend and adding a New admin only dashboard which will allow to analyze things easier for balane patches and etc in the future. This Phase was written only by hand hence the long time, normally I would use AI to speed up the process but I wanted to get some practice in. Also added legal and TOS pages Backend I found mutipile bugs such as simple Game bugs to not so simple leackage problems and other stuff which took quite some time to fix by hand and this really shows how I will probally pause using AI for coding after this project for a while Admin Dashboard I created this Dashboard so I would be allowed to pracitally analyze everything from how certain things affect the game and for example analyze them to see if they need fixes, balances or even remove them entirly. I also added things like seeing a rough strucutre of where my player base is from. If anybody is abusing the game somehow or bot traffic. Tos Pages These took quite long and were quite the hassle but I did it. though i am debating jus tdeleting them as I couldnt fill them out entirley as certain information is needed which would then make them 100% fool proof I forgot I also updated the Snow Theme and added music for each theme with a small music player in the bottom left though I just noticed I placed the icons wrong should be a quick 2 line fix Next Steps do the last fixes finnaly test the AI bots as they are fully setup but not setup do some balancing and realese it The next post should really be the last. Hopefully.
Poorup Redesign - Devlog #9 this phase was mainly about adding some missing things fully balancing everything also used the new model jev from typesafe as it was a perfect fit for the task. Admin Dashboard I now added a section in the admin Dashboard fully centered around the Bots which allows for dropping in any provider and choosing the model and see the request if theyre failing or not and etc this took quite a while as I coded this myself again as I wanted to practice a bit though I still needed Ai help as Iam so trash at js Removing TOS pages As i mentioned in the last devlog i have now decided to remove the TOS pages as they were jst not good looking and not complete and not needed. Music system I decided to remove the music player and rather make it so 1 music track is there for each theme and my next step ix expanding the profile page to allow choosing another music track as 12 are available in total but only 6 are used rn. I also decided that I am going to move the Theme chooser somewhere else as people get no indicator rn to find it New Idea for the Future Also I had a great Idea which i can incoperate into this but after the next ship. Its training a custom ml model on all the matches played by people and then incoperating it in the game. Because essentialy it would be a custom AI/Bot that is able to play monopoly as good as possible new features I also added the option to download all the data cause i noticed its saved on the server and maybe smb wants to download it will then be in a json. I also added the option to add an recovery email, because my plan is to allow people to sign up without email but they still need an option to recover data if needed I also added the option to rovoke all otehr session tokens then the onnes youre logged into rn, so essentially log out of all other devices and server sessions Next steps Cleaning up Ai code and reading through it all, 1 or 2 adjustments in Ui for example the global event banner needs to be relocated or the graphs for match history need to remade. Also the ranking page needs a little redesing. The next one will be the LAST ONE cause i cant deal with stardance anymore all my projects are getting rejected for dumb reasons, so this will be the last devlog and if it does not get accepted iam relocating somewhere else.
Poorup Redesign - Devlog #10 Iam aware this phase is 30 hours this is just cause i used hella AI and didnt want to count it towards my payout. this phase mainly about finishing touches running mutipile tests suits playing some games and finishing some things also fixing Ui and redoing the Ui of the Music First of all I added music for each of the 6 theme with a secondary theme which you can select under account and preferences I also made it easier to spot the different themes as they were hella hidden to be honest. Deactivation of palor patrol Though i didnt want to this I needed to deactivate palor patrol as it was simply impossible to use I checked m code in detail used and really did everything but I couldnt find the bug which makes it unplayablle so as long as I cant manage to fix it I have to deacitvate it. Next Phase pushing everything on nest setting up a piepleine so nest automatticaly pulls everything I push onto main in my repo and finnaly realsing it with thhe bots for players to use.
Poorup Redesign - Devlog #11 (FUCK MY LIFE) I am geniunly so tired of this project and my life in general i was so busy in the last few days cause of school and after shool clubs. This phase was mainly about recoding the Bot engine by hand, and updating the stock market modal inside the game also added New Ui for theme chooser and music and also added more sound tracks. I also redid statistics tabs in profile by hand and added better match history tracking Bot engine To be honest to Bot engine was so much AI stuff that i genuinly didnt understand what it was build on and how that is why I decided to take some time to read and research all the papers its build on and how it works. I then rewrote large parts of it to improve it and also found mutipile bugs in the logic of how it works and how it assigns values New account and preferences tab I fully redid some parts of the accounts and prefences tab to now allow for easier choosing of themes and also worked on the music engine so the music loops and youre able to choose different music depending on the theme. #Statsics tab I redid the whole tab as I found it quite stacked with 12 boxes for statsics and decicd to now add internal tabs to make it look cleaner this was a quick 30 minute changes as I didnt change logic but just frontend Next Steps Hopefully shipping adding HCAI and testing the AI bots and further UI refinement on tablet UI and 1440px desktop cause these are 2 of the most weirdest sizes https://poorup.jeremy-d.hackclub.app/ also if anybody wants to check it our but it is nowhere near finished so dont expect anything
Devlog after ship So after getting hella positive feedback regarding poorup which i highly appreciate my aim is to now make it have an even better user experience and etc. why? cause from the feedback i got, there are 3 areas I need to tackle, UI, game logic which is to complex and the User experience including rules and etc, Full redesign of the ingame lobby So after getting feedback that the board was to smallwhich was kinda expected and that the whole game is just clutered which i also assumed would happen cause all the features dont fit into the game i have done the following. I have redesigned the full ingame lobby with a new layout further inspired by richup(didnt want to do this but they have the most optimial layout) I have also redone the whole entire admin window cause to be honest it was horrondous and hard to use, and also just some small changes all around full redesign of modals so after doing the lobby i have now decided to fully redo a lot of the modal to have a better layout and etc so they are way more user friendly and acttually easy to understand, this also included cutting alot of features from certain modals because they just made them to complex and hard to use Cards and airpots this was something i was orrignally planning to release in the last ship but i just decided to ship it with this one i have finnaly added the option to buy new bank cards which you can use to get benefits like cashback of 10% on purchsees like rent payment suprise cards and other stuff, and I also added the option to use airpots to fly from one point to another and allow players to set the prices, Bots After reflecting a bit on my ai usage for the bots i decided to fully plug the whole programm into a repo which visualises it to see if it checks out with my mental map and I noticed so much slop which I would have never noticed before, this includes the whole Bot logic which i have probally never looked at cause i knew i wouldnt be able to code them. Though i probally should have cause this is the biggest slop i have ever seen and It introduced so many bugs which the ai couldnt find Next steps Right now all these changes are locally and not on github which are around +17000 lines of code and my aim is to further clean this up and fully push it with a new domain which is alredy online but will be kept hidden. here are soem before and afters, the more clutterd ones are the befores and the simplifyed ones after
Rework #1 Now you could be asking yourself? What have i done in the last 8 days to not post? Well Iam nearly finished with the full rework off all UI, Bug fixing and introducing new features, Chart Engine So i redid the whole system for charts and decided to build my own, because though i had one which worked it looked horrendous and really didnt fit poorup, you can see the new chart engine in the screenshot Game history I redid the whole entire game history system, because to be honest it was heavily vibed including its Ui and while cheking it, it looked like trash so I sat myself down and worked tiresly to fully redo it, and I even implemented the new chart system into it, Modals, Modals, Modals So I REDID NEARLY EVERY SINGLE MODAL IN THE GAME to provide a better User experience this took hella long and while doing it i noticed i had hackatime tracking off, because i had been working on some personal projects, hence the reason I only posted now because I lost so many hours, #Next Features Well to be honest there really arent anymore features i can add, the only thing left is fixing bugs and preparing it for the release and advertising it on reddit
Ships:
Poorup Poorup is a real-time multiplayer board game inspired by Richup(Monopoly), playable entirely in the browser What did I make? A full multiplayer board game running on a Node.js server with Socket.IO for real-time communication. The client is pure HTML, CSS, and JavaScript, no frameworks which is stupid if I look back on it . Features include: Room-based lobbies with a shareable room code Full Monopoly-style rules: buying, renting, building houses and hotels, mortgaging, and trading Live auctions with a countdown timer when a property is declined Configurable game rules per room (double rent, vacation cash, even build, auction, mortgage, randomized turn order, no rent in jail) Reconnect support — if you disconnect mid-turn, you can rejoin and resume In-game chat Automatic room cleanup when everyone leaves What was challenging? Shared states across multiple clients. Every player action, rolling dice, buying a property, placing a bid, has to be read server-side, broadcast to everyone, and reflected correctly on each client without race conditions or desync. Getting that right, especially during edge cases, took a lot of work. Edge cases in disconnects. A player disconnecting mid-auction is a different problem than disconnecting on their turn, which is different from the host disconnecting entirely. Each case needed its own handling: timers need to be cleared, pending actions need to be resolved, and remaining players need to stay in a valid game state. and i need alot of time and a bit of AI to fix that for me. Building a complete game UI with vanilla CSS. No component library, no utility framework — every modal, toggle, property card, and animation is hand-written. Honestly needed a lot of AI help here. Probally should have used a libary if I look back at it but it was fun to do it in plain CSS also for anyone wondering why the favicon is the one from vite i never deleted it and i wasnt in the mode to redesign a new one and tried to use the board map but that didnt work for some reason. What am I proud of? The architecture. The game logic lives entirely in gameLogic.js and has no knowledge of sockets or HTTP. The server in server.js wires events to logic calls and broadcasts the results. That separation made the codebase much easier to debug than it would have been otherwise but i needed AI to implement the idea i had the idea but wasnt quite able to do it. How to test it git clone https://github.com/jeremy341/Poorup.git cd Poorup npm install npm start Then open http://localhost:8080 in two separate tabs or browser windows.
Project Update I didnt even notice but all the changes i did i the last patches never got shipped so this one is about the last to changes which were adding modals, creating new UI and removing AI code check it out https://poorup.jeremy-d.hackclub.app/
Poorup — Biggest Update to date I’ve given the project a major overhaul, from its visual identity and everything else. This is geninuly one of the best projects i have created and iam proud to announce it I first started Poorup 3 and 1/2 months ago as a project to get introcude into webdesing and since then i have created 4 more website and revesiting it really shows my growth. Of course Ai was used by even then I could really feel my growth What was challening i decide to stay on CSS, html, and js instead of transferring it into another language for a simple reason i wanted to test how far i can push these 3 languages( i was just to lazy to learn a new language) How I used AI AI WAS USED IN THIS PROJECT for debugging and coding no UI or art generation. AI was a substantial coding and debugging tool, especially for backend work, bot logic, and tricky multiplayer edge cases. I used CodeScene to identify code-health hotspots. I wrote many page-specific backend features myself, then used GPT/Codex to help debug or split some larger hotspot files into smaller modules. Ai was also used to fix bugs in the Ipad Ui I created Poorup’s frontend UI and its SVG and art assets myself. AI helped in coding but never touched art. I didn’t compose the soundtrack. I selected open-source and other openly licensed tracks; their sources and license details are in the audio credits . I also rewrote the Git history to make the repository cleaner, so the current commit log isn’t a complete record of the project’s development. Also after around the 6th or 7th devlog i turned ai traccking of as to not fraud myself hours So if needed deplete hours. What’s new in this patch UI Full ui rework of everything nothing was left out every single Ui elemt was redone by scratch, with upto 6 themse each with their own custom soundtrack and background, this was the largest wish people had wished for when they reviewed my game and iam so proud of the UI. Boards and multiplayer New 40 and Metro-52 boards, with custom visual themes. Public rooms and private rooms with shareable codes; people can join as guests. Configurable rules, including double rent, vacation cash, even building, and randomized turn order. A deeper economy system Bank loans, player-to-player loans, equity deals, and hybrid contracts, with collateral and default consequences. Sponsored purchases: one player can fund another player’s property purchase in exchange for an agreed share. Negotiating now youre able to negotiate all offers you get instead of accepting or declining on the spot you can also keep them on hold An optional stock market for all the quant bros(gamblers) casino so now youre able to gamble Social I also added a full social systems with achievements, friends inviting people to lobbys seeing match history and more, also added the option to create your own 16x16 user icon Events one of the biggest features I decided to add global events which appear under certain conditions like to many houses standing which should reference the 2008 housing crises i also added stock market crash and alot more. Also global events can also combine to create seacil ones Parlor patrol this was supposed to be a cool minigame while waiting for your friends but it doesnt work and i cant fix the bug for the life of me so you can test it out but it doesnt work correclty all svg assets for it exist...
|
1792849780.3860598
|
1792936180.3860598
|
|
8128
|
Realm Panel by @Stijn | Stardance
|
Stijn
|
3
|
65.0
|
565
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T01:12:05Z", "hours": 4.0, "multiplier": 17.09, "payout": 68, "blessing": "neutral", "text": "Just a beautiful panel", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}, {"ship_num": 2, "ts": "2026-07-07T16:03:10Z", "hours": 48.0, "multiplier": 15.55, "payout": 318, "blessing": "neutral", "text": "Realm is a modern, ground-up reimagining of the Pterodactyl Panel, rebuilt from scratch with a focus on performance, maintainability, automation, and developer experience. Instead of patching an existing codebase, Realm introduces a cleaner architecture designed for the future of game server hosting. During Stardance, Realm evolved from a prototype into a much more complete server management platform. What was built Complete server panel redesign Reworked dashboards, tables, modals, and workflows for a more consistent UI. Converted old card-based interfaces into faster, cleaner table-based views. Added improved server information displays, resource indicators, and public IP lookup. Advanced file management Replaced the old tree-based explorer with a modern row-based file browser. Added faster navigation, bulk actions, improved context menus, breadcrumbs, and cleaner dialogs. Removed outdated components and simplified the architecture. Plugin management Added a built-in plugin manager so users can install and manage server plugins directly from the panel instead of manually uploading files. Automation & infrastructure Added Cloudflare integration for automatic subdomain provisioning. Improved server lifecycle management and reliability. Added support for deduplicated and encrypted backups using rustic, reducing storage usage while improving backup capabilities. AI integration Built a flexible AI provider system supporting providers such as OpenAI, Anthropic, Google Gemini, DeepSeek, OpenRouter, and custom OpenAI-compatible APIs. Added AI-powered console log summaries. Permissions & collaboration Added reusable permission templates for teams. Users can create custom roles and quickly apply them when managing server access. Engineering improvements A major focus was not only adding features, but improving the foundation: Large backend refactors for better maintainability. Shared service architecture for integrations. Improved validation and configuration handling. Fixed hidden infrastructure issues affecting settings persistence and backups. Removed thousands of lines of outdated code while simplifying the codebase. Results In roughly 42 hours of development during Stardance, Realm grew into a significantly more complete game server management platform: Modernized user experience Faster file operations Automated server provisioning Better backups AI-assisted management Team collaboration features Cleaner, more scalable architecture Realm’s goal is simple: make managing game servers feel less like operating infrastructure and more like using a modern developer platform.", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}, {"ship_num": 3, "ts": "2026-06-05T20:16:58Z", "hours": 13.0, "multiplier": 15.92, "payout": 179, "blessing": "neutral", "text": "Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}]...
|
[{"post_id": 32091, "ts": "202 [{"post_id": 32091, "ts": "2026-07-21T00:39:37Z", "hours": 4.0272, "text": "Spent today mostly cleaning up how the panel actually looks instead of adding new stuff. Started because the Activity Log page just looked off next to Settings, turned out it was using its own hardcoded hex colors instead of the actual design tokens, so I went through and fixed that. Then I noticed the whole Account section (API keys, SSH keys, permission templates, all of it) had the exact same problem, every page had basically copy pasted the same fake card styling by hand instead of using the real component. Fixed all five pages while I was at it. Also turned Permission Templates into its own little “Environment” section with a sidebar, mostly so I have somewhere to dump future account wide settings later without having to rebuild the page again. Got told the permission checkboxes looked bad (fair, they did, gray boxes that didn’t match anything) so rewrote those too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while. ✻ Brewed for 6s · 3 shells still running ❯ can u now implement a demo mode on a new branch…. just that the instance resets every hour. so the node and the panel reset every 1 hour. accounts get reset back. players get admin but they cant ruin everything because panel gets resetted each hour too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while."}, {"post_id": 24174, "ts": "2026-07-07T16:00:55Z", "hours": 2.4944, "text": "Today’s pass on Realm’s server panel was all file manager: ripped out the old tree-sidebar explorer and replaced it with a flat table-row browser, matching the same table-ification sweep the rest of the panel got this week (allocations, databases, backups). The old file manager was built around FileManagerTreeSidebar (643 lines), a persistent expandable tree on the side, drag-and-drop context (ExplorerDragContext, 261 lines), a separate context-menu component (FileTreeContextMenu, 401 lines), and its own icon/media/upload util files. All of that’s gone now. In its place: FileObjectRow — one row per file/folder in a 12-col grid: checkbox + icon + name, size, relative modified time, and a dropdown menu on the right. Right-click still works, it just dispatches a custom event to open the row’s own dropdown instead of mounting a separate tree context-menu component. FileDropdownMenu — replaces FileTreeContextMenu. Same actions (rename, copy, archive/extract, download, chmod, delete) but scoped per-row instead of per-tree-node. FileManagerBreadcrumbs — simple path breadcrumb bar, replacing the always-visible tree for navigation. SelectFileCheckbox — per-row selection, feeding the existing MassActionsBar for bulk delete/move. FileManagerContainer — rewritten around the new row list (585 lines touched, net smaller). Also folded PullFileButton into NewDirectoryButton (renamed file, kept git history via rename-detection) and moved NewDirectoryButton + SftpDetailsButton off the old Dialog/asDialog HOC pattern onto the shared Modal component — same one now used by all the wizard modals across the panel, so file manager dialogs finally look consistent with everything else instead of being the last holdout on the old dialog system. Net effect: 38 files touched, ~1,150 lines added, ~4,250 removed. Deleted six now-dead util files outright (archivePathUtils, fileExplorerDrag, fileMediaUtils, fileTreeIcons, fileUploadUtils, useFileEditingPresence) along with their routes in routes.ts. No behavior loss — same actions available, just row-based instead of tree-based, and finally matching the modal/table conventions the rest of the panel converged on this week."}, {"post_id": 22483, "ts": "2026-07-04T23:27:18Z", "hours": 5.8878, "text": "Today was a full pass on Realm’s server panel: three feature threads (dashboard, AI, DNS) and a long UI-consistency sweep, capped off by one infra bug that had been silently breaking every dynamic setting in the panel. Started with the dashboard: replaced the old card-style ServerRow list with a proper ServerTable — sortable by name and game type, with circular progress indicators for resource usage instead of flat bars. Added a public IP lookup service and a ServerInfoCard for the console page showing location, IP, and domain info at a glance. Then built an AI provider helper: admin picks one provider (Claude, OpenAI, DeepSeek, Gemini, OpenRouter, or a custom OpenAI-compatible endpoint), drops in an API key, done. No multi-provider list to manage — one row in the DB, one config screen under Settings → Advanced. Wrote three concrete provider adapters behind a shared interface (AnthropicProvider talks the native /v1/messages API, GoogleProvider handles Gemini’s role mapping, OpenAiCompatibleProvider covers everything that speaks the OpenAI wire format) so future features can just call AiService::complete() without caring which backend is configured. Also wired up Cloudflare zone management for subdomains, and gave the Console a log-upload + AI-summarize action. What I built: ServerTable (sortable dashboard) + circular resource indicators, IP lookup + ServerInfoCard Single-provider AI helper: model, factory, three adapters, admin UI, wired into Console’s summarize feature Cloudflare integration for subdomain zone/record management A full step-wizard treatment (sidebar steps, numbered circles, review step) rolled out to every creation modal that used to be a plain form: Change Version, Invite Subuser, Allocation Firewall, Create Subdomain, Create Database, Create Backup Converted Allocations, Databases, and Backups from card grids to proper tables (header row, divide-y rows, right-click context menu on allocations instead of a button pile), with the “create new” action moved to plain text + hyperlink below each table instead of a header-bar button Restyled the base Modal component itself — dropped the floating X close icon, added consistent border/radius, gave it an optional title/footer API so simple confirm dialogs get the same content-pane-plus-footer-bar layout as the wizards Footer now shows the git commit hash + panel version with a fork icon instead of a static copyright line The interesting part was two bugs that had nothing to do with what I was actively building. First: Settings → Advanced looked like it saved, but nothing actually persisted — not the AI config, not the allocation port range. Chased it through three layers: my own save logic, then a native HTML required attribute silently blocking the shared form submit, and finally the real one — SettingsServiceProvider, the class responsible for merging DB-stored settings back into Laravel’s config() on every request, was never registered in config/app.php. Every dynamic setting in the entire panel — mail, OAuth, allocations, all of it — had silently never worked, completely unrelated to anything I’d touched that day. Second: tried to delete a backup in the dev environment and got a 500. Wings was shelling out to a rustic binary that straight-up didn’t exist in the container — the Dockerfile never installed it, so every backup on this dev box had been failing since day one without anyone noticing (because dev servers don’t usually need backups). Added the install step to build/wings/Dockerfile, rebuilt the image, and the failed backup’s leftover DB row still needed a manual delete since its rustic repo was never initialized in the first place. Neither of those two bugs was flashy, but both had been quietly breaking things for a while — the kind of thing you only find when you actually click through the feature end-to-end instead of trusting that tsc passing means it works."}, {"post_id": 21640, "ts": "2026-07-03T18:09:16Z", "hours": 1.1011, "text": "Today I added deduplicated, encrypted backups to Realm, my game server panel. Previously every backup was a full .tar.gz archive — so backing up a 125MB server ten times ate over a gigabyte of disk, even though almost nothing changed between backups. Painful if you want frequent backups. Now backups can run through rustic, a Rust backup tool that deduplicates and encrypts data. Ten backups of that same server now cost a fraction of the disk, because identical blocks are stored once and shared across every snapshot. You can turn it on per node, or set it as the panel-wide default — one dropdown in the node settings. What I built: A new rustic backup adapter in Wings (the Go daemon), covering the full lifecycle: init the repository, back up on delete. Since rustic hasno Go bindings I shell out to the binary, with a per-repository lock so concurrent backups on a shared node repgo through env vars, neverthe process args, and the repo is daemon-owned so game containers never see the path or password. A backup_adapter column on nodes (plus migration) and the panel-side logic to pick the adapter, with a per-nodes a global backupdestination. A “Backup adapter” dropdowd hiding the Download buttonfor rustic backups since they live in a shared repo instead of as one downloadable file. A production Docker image that bundles the rustic binary, plus docs: a full setup guide and a config reference The interesting part was tesd TypeScript was happy, but I spun up the whole dev stack and ran it against a real rustic binary and a real game server anyway — and immediatiler couldn’t see. My deletecommand was missing a flag and crashed every time, my snapshot filter was silently returning nothing (which broxpected the wrong outputshape, and the Dockerfile pinned a rustic version that didn’t exist. Two of those would have shipped a featureothing. After fixing them, Iwatched the full create → restore → delete flow run clean through the real panel-to-daemon path: a snapestored from it, and deleting it cleared the snapshot and reclaimed the space. Not a flashy feature, but it means you can now keep way more backups for way less disk — and it was a good remindere near “it works.”"}, {"post_id": 21432, "ts": "2026-07-03T11:43:08Z", "hours": 18.1886, "text": "Today I added permission templates to Realm, my game server panel. Previously, when you wanted to give someone limited access to your server, you had to manually check off permissions one by one from a list of 60+ options every single time — annoying if you’re managing several servers with a team. Now you can save a named template (like “Moderator” or “Console Operator”) with a specific set of permissions once, and apply it with a single click whenever you invite or edit a subuser. It shows up right alongside the built-in presets in the invite/edit UI. What I built: A new subuser_permission_templates table, scoped per-account so each user manages their own templates A small Laravel API (create/list/update/delete) that validates permissions against the real whitelist so templates can never smuggle in a permission you’re not allowed to grant A new “Permission Templates” page under Account settings — pick a name, check the permissions you want, save Wired the templates into the existing subuser invite/edit forms so they appear as one-click buttons next to “View only”, “Operator”, “Manager”, etc. Tested it end-to-end in the browser: created a “Console Operator” template with console+start permissions, confirmed it landed in the database correctly, then applied it while inviting a user and watched it auto-select the right 2 permissions instantly. Small feature, but it’s the kind of thing that saves real time once you’re managing more than one or two servers with a team."}, {"post_id": 5577, "ts": "2026-06-09T12:51:30Z", "hours": 20.0064, "text": "Spent the last few days deep in the parts of Realm that people actually touch every day, and honestly it’s the stuff I’m most proud of so far. The file manager got a real overhaul. The old flow felt clunky. too many round trips, slow loads on big directories, and editing a config meant fighting the UI more than the file. I rebuilt how the panel talks to the daemon for file operations so listing, uploading, and editing all feel instant now. Dragging files around, renaming, moving things between folders. it just works the way you’d expect it to, without the lag that used to make me wince. The plugin manager is the other big one. Instead of telling people to SSH in and drop jars into a folder by hand, you can now browse, install, and manage plugins straight from the panel. It pulls the right versions, handles the install, and keeps track of what’s actually running on the server. Watching a plugin install from a button click the first time it worked end to end was a genuinely good moment. There’s also been a lot of quieter work under the hood. subdomain provisioning is wired in now so spinning up a server gives you something reachable without manual DNS fiddling, and I cleaned up a pile of reliability issues in the server management layer that were causing weird edge-case failures. More to come. Still a lot I want to ship."}, {"post_id": 2909, "ts": "2026-06-05T20:16:05Z", "hours": 1.4078, "text": "Devlog — 2026-06-05 — VersionChangerController Fix An issue was identified in VersionChangerController where the install process attempted to reuse the getDownloadUrl() route method by creating a standard Laravel Request object and passing it directly to the method. The getDownloadUrl() method is designed as a route action and expects a GetDownloadUrlRequest instance. Because a regular Illuminate\\Http\\Request was passed instead, Laravel could not satisfy the method’s type requirements, resulting in a TypeError during execution. To resolve this, the download URL resolution logic was separated from the request handling layer. A new protected helper method, resolveDownloadUrl(?string $type, ?string $version): array, was introduced to contain the shared business logic. The getDownloadUrl() endpoint now reads the validated request parameters and delegates the actual resolution work to the helper method, preserving route validation behavior. The install() method was updated to call resolveDownloadUrl() directly, eliminating the need to construct or fake request objects internally. As part of the cleanup, the unused Illuminate\\Http\\Request import was removed. Modified file: panel/app/Http/Controllers/Api/Client/Servers/VersionChangerController.php For future development, any controller methods that require the same resolution logic should call the helper directly rather than attempting to reuse route actions with manually constructed Request instances."}, {"post_id": 2813, "ts": "2026-06-05T17:14:08Z", "hours": 12.0089, "text": "Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features."}]...
|
Title: Realm Panel by @Stijn | Stardance
Devlogs: Title: Realm Panel by @Stijn | Stardance
Devlogs:
Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.
Devlog — 2026-06-05 — VersionChangerController Fix An issue was identified in VersionChangerController where the install process attempted to reuse the getDownloadUrl() route method by creating a standard Laravel Request object and passing it directly to the method. The getDownloadUrl() method is designed as a route action and expects a GetDownloadUrlRequest instance. Because a regular Illuminate\Http\Request was passed instead, Laravel could not satisfy the method’s type requirements, resulting in a TypeError during execution. To resolve this, the download URL resolution logic was separated from the request handling layer. A new protected helper method, resolveDownloadUrl(?string $type, ?string $version): array, was introduced to contain the shared business logic. The getDownloadUrl() endpoint now reads the validated request parameters and delegates the actual resolution work to the helper method, preserving route validation behavior. The install() method was updated to call resolveDownloadUrl() directly, eliminating the need to construct or fake request objects internally. As part of the cleanup, the unused Illuminate\Http\Request import was removed. Modified file: panel/app/Http/Controllers/Api/Client/Servers/VersionChangerController.php For future development, any controller methods that require the same resolution logic should call the helper directly rather than attempting to reuse route actions with manually constructed Request instances.
Spent the last few days deep in the parts of Realm that people actually touch every day, and honestly it’s the stuff I’m most proud of so far. The file manager got a real overhaul. The old flow felt clunky. too many round trips, slow loads on big directories, and editing a config meant fighting the UI more than the file. I rebuilt how the panel talks to the daemon for file operations so listing, uploading, and editing all feel instant now. Dragging files around, renaming, moving things between folders. it just works the way you’d expect it to, without the lag that used to make me wince. The plugin manager is the other big one. Instead of telling people to SSH in and drop jars into a folder by hand, you can now browse, install, and manage plugins straight from the panel. It pulls the right versions, handles the install, and keeps track of what’s actually running on the server. Watching a plugin install from a button click the first time it worked end to end was a genuinely good moment. There’s also been a lot of quieter work under the hood. subdomain provisioning is wired in now so spinning up a server gives you something reachable without manual DNS fiddling, and I cleaned up a pile of reliability issues in the server management layer that were causing weird edge-case failures. More to come. Still a lot I want to ship.
Today I added permission templates to Realm, my game server panel. Previously, when you wanted to give someone limited access to your server, you had to manually check off permissions one by one from a list of 60+ options every single time — annoying if you’re managing several servers with a team. Now you can save a named template (like “Moderator” or “Console Operator”) with a specific set of permissions once, and apply it with a single click whenever you invite or edit a subuser. It shows up right alongside the built-in presets in the invite/edit UI. What I built: A new subuser_permission_templates table, scoped per-account so each user manages their own templates A small Laravel API (create/list/update/delete) that validates permissions against the real whitelist so templates can never smuggle in a permission you’re not allowed to grant A new “Permission Templates” page under Account settings — pick a name, check the permissions you want, save Wired the templates into the existing subuser invite/edit forms so they appear as one-click buttons next to “View only”, “Operator”, “Manager”, etc. Tested it end-to-end in the browser: created a “Console Operator” template with console+start permissions, confirmed it landed in the database correctly, then applied it while inviting a user and watched it auto-select the right 2 permissions instantly. Small feature, but it’s the kind of thing that saves real time once you’re managing more than one or two servers with a team.
Today I added deduplicated, encrypted backups to Realm, my game server panel. Previously every backup was a full .tar.gz archive — so backing up a 125MB server ten times ate over a gigabyte of disk, even though almost nothing changed between backups. Painful if you want frequent backups. Now backups can run through rustic, a Rust backup tool that deduplicates and encrypts data. Ten backups of that same server now cost a fraction of the disk, because identical blocks are stored once and shared across every snapshot. You can turn it on per node, or set it as the panel-wide default — one dropdown in the node settings. What I built: A new rustic backup adapter in Wings (the Go daemon), covering the full lifecycle: init the repository, back up on delete. Since rustic hasno Go bindings I shell out to the binary, with a per-repository lock so concurrent backups on a shared node repgo through env vars, neverthe process args, and the repo is daemon-owned so game containers never see the path or password. A backup_adapter column on nodes (plus migration) and the panel-side logic to pick the adapter, with a per-nodes a global backupdestination. A “Backup adapter” dropdowd hiding the Download buttonfor rustic backups since they live in a shared repo instead of as one downloadable file. A production Docker image that bundles the rustic binary, plus docs: a full setup guide and a config reference The interesting part was tesd TypeScript was happy, but I spun up the whole dev stack and ran it against a real rustic binary and a real game server anyway — and immediatiler couldn’t see. My deletecommand was missing a flag and crashed every time, my snapshot filter was silently returning nothing (which broxpected the wrong outputshape, and the Dockerfile pinned a rustic version that didn’t exist. Two of those would have shipped a featureothing. After fixing them, Iwatched the full create → restore → delete flow run clean through the real panel-to-daemon path: a snapestored from it, and deleting it cleared the snapshot and reclaimed the space. Not a flashy feature, but it means you can now keep way more backups for way less disk — and it was a good remindere near “it works.”
Today was a full pass on Realm’s server panel: three feature threads (dashboard, AI, DNS) and a long UI-consistency sweep, capped off by one infra bug that had been silently breaking every dynamic setting in the panel. Started with the dashboard: replaced the old card-style ServerRow list with a proper ServerTable — sortable by name and game type, with circular progress indicators for resource usage instead of flat bars. Added a public IP lookup service and a ServerInfoCard for the console page showing location, IP, and domain info at a glance. Then built an AI provider helper: admin picks one provider (Claude, OpenAI, DeepSeek, Gemini, OpenRouter, or a custom OpenAI-compatible endpoint), drops in an API key, done. No multi-provider list to manage — one row in the DB, one config screen under Settings → Advanced. Wrote three concrete provider adapters behind a shared interface (AnthropicProvider talks the native /v1/messages API, GoogleProvider handles Gemini’s role mapping, OpenAiCompatibleProvider covers everything that speaks the OpenAI wire format) so future features can just call AiService::complete() without caring which backend is configured. Also wired up Cloudflare zone management for subdomains, and gave the Console a log-upload + AI-summarize action. What I built: ServerTable (sortable dashboard) + circular resource indicators, IP lookup + ServerInfoCard Single-provider AI helper: model, factory, three adapters, admin UI, wired into Console’s summarize feature Cloudflare integration for subdomain zone/record management A full step-wizard treatment (sidebar steps, numbered circles, review step) rolled out to every creation modal that used to be a plain form: Change Version, Invite Subuser, Allocation Firewall, Create Subdomain, Create Database, Create Backup Converted Allocations, Databases, and Backups from card grids to proper tables (header row, divide-y rows, right-click context menu on allocations instead of a button pile), with the “create new” action moved to plain text + hyperlink below each table instead of a header-bar button Restyled the base Modal component itself — dropped the floating X close icon, added consistent border/radius, gave it an optional title/footer API so simple confirm dialogs get the same content-pane-plus-footer-bar layout as the wizards Footer now shows the git commit hash + panel version with a fork icon instead of a static copyright line The interesting part was two bugs that had nothing to do with what I was actively building. First: Settings → Advanced looked like it saved, but nothing actually persisted — not the AI config, not the allocation port range. Chased it through three layers: my own save logic, then a native HTML required attribute silently blocking the shared form submit, and finally the real one — SettingsServiceProvider, the class responsible for merging DB-stored settings back into Laravel’s config() on every request, was never registered in config/app.php. Every dynamic setting in the entire panel — mail, OAuth, allocations, all of it — had silently never worked, completely unrelated to anything I’d touched that day. Second: tried to delete a backup in the dev environment and got a 500. Wings was shelling out to a rustic binary that straight-up didn’t exist in the container — the Dockerfile never installed it, so every backup on this dev box had been failing since day one without anyone noticing (because dev servers don’t usually need backups). Added the install step to build/wings/Dockerfile, rebuilt the image, and the failed backup’s leftover DB row still needed a manual delete since its rustic repo was never initialized in the first place. Neither of those two bugs was flashy, but both had been quietly breaking things for a while — the kind of thing you only find when you actually click through the feature end-to-end instead of trusting that tsc passing means it works.
Today’s pass on Realm’s server panel was all file manager: ripped out the old tree-sidebar explorer and replaced it with a flat table-row browser, matching the same table-ification sweep the rest of the panel got this week (allocations, databases, backups). The old file manager was built around FileManagerTreeSidebar (643 lines), a persistent expandable tree on the side, drag-and-drop context (ExplorerDragContext, 261 lines), a separate context-menu component (FileTreeContextMenu, 401 lines), and its own icon/media/upload util files. All of that’s gone now. In its place: FileObjectRow — one row per file/folder in a 12-col grid: checkbox + icon + name, size, relative modified time, and a dropdown menu on the right. Right-click still works, it just dispatches a custom event to open the row’s own dropdown instead of mounting a separate tree context-menu component. FileDropdownMenu — replaces FileTreeContextMenu. Same actions (rename, copy, archive/extract, download, chmod, delete) but scoped per-row instead of per-tree-node. FileManagerBreadcrumbs — simple path breadcrumb bar, replacing the always-visible tree for navigation. SelectFileCheckbox — per-row selection, feeding the existing MassActionsBar for bulk delete/move. FileManagerContainer — rewritten around the new row list (585 lines touched, net smaller). Also folded PullFileButton into NewDirectoryButton (renamed file, kept git history via rename-detection) and moved NewDirectoryButton + SftpDetailsButton off the old Dialog/asDialog HOC pattern onto the shared Modal component — same one now used by all the wizard modals across the panel, so file manager dialogs finally look consistent with everything else instead of being the last holdout on the old dialog system. Net effect: 38 files touched, ~1,150 lines added, ~4,250 removed. Deleted six now-dead util files outright (archivePathUtils, fileExplorerDrag, fileMediaUtils, fileTreeIcons, fileUploadUtils, useFileEditingPresence) along with their routes in routes.ts. No behavior loss — same actions available, just row-based instead of tree-based, and finally matching the modal/table conventions the rest of the panel converged on this week.
Spent today mostly cleaning up how the panel actually looks instead of adding new stuff. Started because the Activity Log page just looked off next to Settings, turned out it was using its own hardcoded hex colors instead of the actual design tokens, so I went through and fixed that. Then I noticed the whole Account section (API keys, SSH keys, permission templates, all of it) had the exact same problem, every page had basically copy pasted the same fake card styling by hand instead of using the real component. Fixed all five pages while I was at it. Also turned Permission Templates into its own little “Environment” section with a sidebar, mostly so I have somewhere to dump future account wide settings later without having to rebuild the page again. Got told the permission checkboxes looked bad (fair, they did, gray boxes that didn’t match anything) so rewrote those too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while. ✻ Brewed for 6s · 3 shells still running ❯ can u now implement a demo mode on a new branch…. just that the instance resets every hour. so the node and the panel reset every 1 hour. accounts get reset back. players get admin but they cant ruin everything because panel gets resetted each hour too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while.
Ships:
Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.
Realm is a modern, ground-up reimagining of the Pterodactyl Panel, rebuilt from scratch with a focus on performance, maintainability, automation, and developer experience. Instead of patching an existing codebase, Realm introduces a cleaner architecture designed for the future of game server hosting. During Stardance, Realm evolved from a prototype into a much more complete server management platform. What was built Complete server panel redesign Reworked dashboards, tables, modals, and workflows for a more consistent UI. Converted old card-based interfaces into faster, cleaner table-based views. Added improved server information displays, resource indicators, and public IP lookup. Advanced file management Replaced the old tree-based explorer with a modern row-based file browser. Added faster navigation, bulk actions, improved context menus, breadcrumbs, and cleaner dialogs. Removed outdated components and simplified the architecture. Plugin management Added a built-in plugin manager so users can install and manage server plugins directly from the panel instead of manually uploading files. Automation & infrastructure Added Cloudflare integration for automatic subdomain provisioning. Improved server lifecycle management and reliability. Added support for deduplicated and encrypted backups using rustic, reducing storage usage while improving backup capabilities. AI integration Built a flexible AI provider system supporting providers such as OpenAI, Anthropic, Google Gemini, DeepSeek, OpenRouter, and custom OpenAI-compatible APIs. Added AI-powered console log summaries. Permissions & collaboration Added reusable permission templates for teams. Users can create custom roles and quickly apply them when managing server access. Engineering improvements A major focus was not only adding features, but improving the foundation: Large backend refactors for better maintainability. Shared service architecture for integrations. Improved validation and configuration handling. Fixed hidden infrastructure issues affecting settings persistence and backups. Removed thousands of lines of outdated code while simplifying the codebase. Results In roughly 42 hours of development during Stardance, Realm grew into a significantly more complete game server management platform: Modernized user experience Faster file operations Automated server provisioning Better backups AI-assisted management Team collaboration features Cleaner, more scalable architecture Realm’s goal is simple: make managing game servers feel less like operating infrastructure and more like using a modern developer platform.
Just a beautiful panel...
|
1792831980.4357834
|
1792918380.4357834
|
|
9711
|
HackOS by @Dasher2801 | Stardance
|
|
3
|
10.0
|
21
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-20T08:43:57Z", "hours": 3.0, "multiplier": 1.75, "payout": 5, "blessing": "neutral", "text": "I built my own operating system, which features a unique look and includes six different apps—such as a calculator, a terminal, and a project workspace. By far the most difficult part was programming in JavaScript; it was completely new to me, so I did need a little help from AI along the way.", "repo": "https://github.com/Dasher2801/HackOS", "demo": "https://dasher2801.github.io/HackOS/"}, {"ship_num": 2, "ts": "2026-06-29T08:30:13Z", "hours": 3.0, "multiplier": 5.83, "payout": 16, "blessing": "neutral", "text": "💻 HackOS HackOS ist ein webbasiertes Pseudo-Betriebssystem im Dark-Hacker-Look[cite: 11, 12]. Es bietet eine interaktive Desktop-Umgebung mit flexibler Taskbar und einer permanenten Topbar-Uhr[cite: 11, 12, 14]. 🛠️ Integrierte Apps Welcome: Startfenster mit Slack-Bot-Anbindung[cite: 11, 12]. Hackspace: Live-GitHub-API-Dashboard für Repo-Status und Commits[cite: 11, 13]. Hackterm: CLI-Terminal mit Custom-Befehlen ( help , clear , neofetch ) und Matrix-Code-Simulation[cite: 11, 13]. Taschenrechner: Grid-Rechner für mathematische Operationen[cite: 11, 12]. Hacknotes: Kompakter Texteditor für schnelle Notizen[cite: 11]. Hackclock: Zeitzentrale mit Sekundenuhr und Countdown-Timer (Start/Pause/Reset)[cite: 11]. 👑 System-Highlights Fenster-Management: Alle Apps öffnen in verschiebbaren Fenstern (Drag & Drop) mit automatischer Z-Index-Vordergrundsteuerung[cite: 11, 13, 14].", "repo": "https://github.com/Dasher2801/HackOS", "demo": "https://dasher2801.github.io/HackOS/"}, {"ship_num": 3, "ts": "2026-06-15T19:00:14Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Ich habe ein komplett Webbasiertes Betriebssystem gebaut, mit Taskleist und Topbar, in der Taskleiste lassen sich die drei Apps öffnen(Welcome, Hackspace und Taschenrechner) die Apps kann man über das X oder über die Taskleiste schließen.", "repo": "https://github.com/Dasher2801/HackOS", "demo": "https://dasher2801.github.io/HackOS/"}]...
|
[{"post_id": 31671, "ts": "202 [{"post_id": 31671, "ts": "2026-07-20T08:40:21Z", "hours": 3.1408, "text": "I have translated the entire operating system into English. I added a button to maximize the window and an arrow in the bottom right corner that allows you to manually resize the window."}, {"post_id": 18200, "ts": "2026-06-29T08:20:56Z", "hours": 1.6336, "text": "I’ve given HackOS a massive upgrade! Along with two brand-new core applications, I’ve fixed critical infrastructure bugs that had previously caused the system to freeze up completely. New Features: Hacknotes (v1.0.0): A minimalist text editor for quick notes right within the workspace. The text area now uses resize: none; and box-sizing: border-box; to prevent it from breaking out of the app window uncontrollably. Hackclock (v1.0.0): HackOS’s new timekeeping hub. While the top bar only shows the approximate time, Hackclock offers a retro-style live clock with second-by-second precision. It also includes an interactive countdown timer featuring full start, pause, and reset logic, plus automatic input locking while the timer is running. Bug Squashing & System Stability: The “Vanishing Taskbar” Incident: An unclosed </div> tag in the Hacknotes HTML structure caused the taskbar to be mistakenly interpreted as a child element of the invisible window and hidden from view; the DOM structure has been repaired. Header Focus Blockage: The note field was originally placed inside the .windowheader by mistake, causing the drag-and-drop script to intercept all clicks; the field has been successfully moved to the .window-content area. The Matrix Syntax Crash: An orphaned closing brace } inside the startMatrix() function within the terminal script triggered a fatal syntax error that blocked all JavaScript execution. The startMatrix() and stopMatrix() functions have been cleanly separated, and the render interval optimized. The system is running smoothly again—100% glitch-free!"}, {"post_id": 16276, "ts": "2026-06-26T13:47:46Z", "hours": 1.2044, "text": "For my latest milestone, I wanted to inject some classic sci-fi hacker vibes. I designed and integrated a custom Terminal Simulator called hackterm. It processes standard commands like help, clear, whoami, and neofetch (complete with stylized ASCII system art).But the absolute highlight is the new matrix command. Typing it triggers an HTML5 overlay that fills the terminal window with a dynamic, glowing green digital rain effect—exactly like the iconic code streams from The Matrix. Clicking anywhere inside the window instantly safely stops the animation loop and drops you back into the standard command line.What’s Next?Up next, I’m planning to implement a Markdown notepad (“HackPad”) using localStorage so notes actually persist between sessions. Stay tuned for more updates!"}, {"post_id": 6874, "ts": "2026-06-11T15:01:18Z", "hours": 0.5061, "text": "As the third and final app, I’ve added the calculator; it works like a standard calculator but features a stunning design."}, {"post_id": 6755, "ts": "2026-06-11T09:43:35Z", "hours": 0.885, "text": "There is now a project workspace that displays all current information about one of my projects."}, {"post_id": 6372, "ts": "2026-06-10T18:46:11Z", "hours": 0.7314, "text": "The window can now be moved across the entire screen; it can be closed and even reopened. The current time is also displayed in the top right corner."}, {"post_id": 5802, "ts": "2026-06-09T18:43:02Z", "hours": 0.9722, "text": "HackOS is going to be a really beautiful operating system."}, {"post_id": 5751, "ts": "2026-06-09T17:30:48Z", "hours": 1.0328, "text": "I am working on my own operating system."}]...
|
Title: HackOS by @Dasher2801 | Stardance
Devlogs: Title: HackOS by @Dasher2801 | Stardance
Devlogs:
I am working on my own operating system.
HackOS is going to be a really beautiful operating system.
The window can now be moved across the entire screen; it can be closed and even reopened. The current time is also displayed in the top right corner.
There is now a project workspace that displays all current information about one of my projects.
As the third and final app, I’ve added the calculator; it works like a standard calculator but features a stunning design.
For my latest milestone, I wanted to inject some classic sci-fi hacker vibes. I designed and integrated a custom Terminal Simulator called hackterm. It processes standard commands like help, clear, whoami, and neofetch (complete with stylized ASCII system art).But the absolute highlight is the new matrix command. Typing it triggers an HTML5 overlay that fills the terminal window with a dynamic, glowing green digital rain effect—exactly like the iconic code streams from The Matrix. Clicking anywhere inside the window instantly safely stops the animation loop and drops you back into the standard command line.What’s Next?Up next, I’m planning to implement a Markdown notepad (“HackPad”) using localStorage so notes actually persist between sessions. Stay tuned for more updates!
I’ve given HackOS a massive upgrade! Along with two brand-new core applications, I’ve fixed critical infrastructure bugs that had previously caused the system to freeze up completely. New Features: Hacknotes (v1.0.0): A minimalist text editor for quick notes right within the workspace. The text area now uses resize: none; and box-sizing: border-box; to prevent it from breaking out of the app window uncontrollably. Hackclock (v1.0.0): HackOS’s new timekeeping hub. While the top bar only shows the approximate time, Hackclock offers a retro-style live clock with second-by-second precision. It also includes an interactive countdown timer featuring full start, pause, and reset logic, plus automatic input locking while the timer is running. Bug Squashing & System Stability: The “Vanishing Taskbar” Incident: An unclosed </div> tag in the Hacknotes HTML structure caused the taskbar to be mistakenly interpreted as a child element of the invisible window and hidden from view; the DOM structure has been repaired. Header Focus Blockage: The note field was originally placed inside the .windowheader by mistake, causing the drag-and-drop script to intercept all clicks; the field has been successfully moved to the .window-content area. The Matrix Syntax Crash: An orphaned closing brace } inside the startMatrix() function within the terminal script triggered a fatal syntax error that blocked all JavaScript execution. The startMatrix() and stopMatrix() functions have been cleanly separated, and the render interval optimized. The system is running smoothly again—100% glitch-free!
I have translated the entire operating system into English. I added a button to maximize the window and an arrow in the bottom right corner that allows you to manually resize the window.
Ships:
Ich habe ein komplett Webbasiertes Betriebssystem gebaut, mit Taskleist und Topbar, in der Taskleiste lassen sich die drei Apps öffnen(Welcome, Hackspace und Taschenrechner) die Apps kann man über das X oder über die Taskleiste schließen.
💻 HackOS HackOS ist ein webbasiertes Pseudo-Betriebssystem im Dark-Hacker-Look[cite: 11, 12]. Es bietet eine interaktive Desktop-Umgebung mit flexibler Taskbar und einer permanenten Topbar-Uhr[cite: 11, 12, 14]. 🛠️ Integrierte Apps Welcome: Startfenster mit Slack-Bot-Anbindung[cite: 11, 12]. Hackspace: Live-GitHub-API-Dashboard für Repo-Status und Commits[cite: 11, 13]. Hackterm: CLI-Terminal mit Custom-Befehlen ( help , clear , neofetch ) und Matrix-Code-Simulation[cite: 11, 13]. Taschenrechner: Grid-Rechner für mathematische Operationen[cite: 11, 12]. Hacknotes: Kompakter Texteditor für schnelle Notizen[cite: 11]. Hackclock: Zeitzentrale mit Sekundenuhr und Countdown-Timer (Start/Pause/Reset)[cite: 11]. 👑 System-Highlights Fenster-Management: Alle Apps öffnen in verschiebbaren Fenstern (Drag & Drop) mit automatischer Z-Index-Vordergrundsteuerung[cite: 11, 13, 14].
I built my own operating system, which features a unique look and includes six different apps—such as a calculator, a terminal, and a project workspace. By far the most difficult part was programming in JavaScript; it was completely new to me, so I did need a little help from AI along the way....
|
1792824538.9658377
|
1792910938.9658377
|
|
10008
|
London Underground Journey Planner by @tramcrazy | London Underground Journey Planner by @tramcrazy | Stardance...
|
tramcrazy
|
3
|
7.0
|
83
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-10T12:25:46Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "[The journey planner uses London Underground stations - if you don’t know any, why not try searching for King’s Cross St Pancras, Waterloo, Tottenham Court Road or Victoria? As you type, lots of suggestions will appear anyway.] In this ship I have redesigned part of the database logic to provide users with improved information on disruptions across the London Underground network. This was based on feedback from a user on my last ship - “One thing that could be improved is clarity on Disruptions and more details about them.” I decided to use a Java HashMap to pass the data about disruptions between different parts of my code, as this meant it was easier to add information on multiple disruptions affecting the same line whilst ensuring all this information was kept in the same place. I then implemented the Bootstrap tooltip system to dynamically generate tooltips for disrupted lines based on the data from the database. You can test this new feature by hovering over (on desktop) or tapping (on mobile) the names of any disrupted London Underground lines, in the top right corner of the page (on desktop) or in the menu (on mobile). You should see a bit of detail about each disruption e.g. “Minor Delays” or “Part Suspended”. I’m considering adding more detail to these but need to decide on a way to include more text in the UI in a way that looks nice! I also need to make more progress on how the line colours look in dark mode - the whole system is still much more usable in light mode! More updates coming soon. This is my London Underground Journey Planner, for planning journeys on the London Underground network! It uses a custom-built HTTP server, custom templating engine, and my own implementation of the A* pathfinding algorithm which took a while to get right! Just head to the website at https://journeyplanner.tramcrazy.com to give it a test! Much of the work for this project was done before Stardance, but since it started I have added a new file handling system, the recent journeys feature, improved line disruption information for users, and written more documentation.", "repo": "https://github.com/tramcrazy/JourneyPlanner-Public", "demo": "https://journeyplanner.tramcrazy.com"}, {"ship_num": 2, "ts": "2026-07-05T16:00:29Z", "hours": 4.0, "multiplier": 17.4, "payout": 70, "blessing": "neutral", "text": "To try the project go to the link (Try project button). The planner uses London Underground stations - if you don’t know any, why not try searching for King’s Cross St Pancras, Waterloo, Tottenham Court Road or Victoria? As you type, lots of suggestions will appear anyway. The homepage now shows your 5 most recent searches - this data is stored locally in your browser! In this ship I have built a ‘recent journeys’ feature which saves a user’s 5 most recent journeys in their browser (preserving user privacy) and allows them to easily access journeys they’ve taken before. This feature involved improving the database logic to improve multi-client functionality, and required a whole new client-side database system (using JavaScript’s IndexedDB) to store journey data, which meant I had to get familiar with more complicated asynchronous structures I hadn’t used before! To show users when they last took a journey, I saved the Unix timestamp of the journey request time in the local database and then compared this with the current time, using human-readable descriptions! This is the new version of my London Underground Journey Planner, for planning journeys on the London Underground network! It uses a custom-built HTTP server, custom templating engine, and my own implementation of the A* pathfinding algorithm which took a while to get right! Just head to the website at https://journeyplanner.tramcrazy.com to give it a test! Much of the work for this project was done before Stardance, but since it started I have added a new file handling system, the recent journeys feature and written more documentation.", "repo": "https://github.com/tramcrazy/JourneyPlanner-Public", "demo": "https://journeyplanner.tramcrazy.com"}, {"ship_num": 3, "ts": "2026-06-20T18:50:40Z", "hours": 2.0, "multiplier": 8.18, "payout": 13, "blessing": "neutral", "text": "This is the first public version of my London Underground Journey Planner, for planning journeys on the London Underground network! It uses a custom-built HTTP server, custom templating engine, and my own implementation of the A* pathfinding algorithm which took a while to get right! Just head to the website at https://journeyplanner.tramcrazy.com to give it a test! The dark theme still needs a bit of work as the colour contrast isn’t great - colour mode is done based on system theme. Note - there are only 2 hours of Hackatime because I have been working on this project for many months and only the more recent parts have been done during Stardance.", "repo": "https://github.com/tramcrazy/JourneyPlanner-Public", "demo": "https://journeyplanner.tramcrazy.com"}]...
|
[{"post_id": 44534, "ts": "202 [{"post_id": 44534, "ts": "2026-08-10T11:14:30Z", "hours": 1.2456, "text": "I am currently working on a range of updates based on your feedback in previous ships! The first new feature is more detailed information on disruptions on London Underground lines - I have decided to implement a tooltip feature so that you can find out what type of disruption is occurring by hovering over a line name in the disruptions area. This has turned out to be quite complicated to implement as I need to change the way I get data from the database - to start with I have built a new method for getting disruption data so that it provides specific information, and have formatted this as a Java HashMap so that it can be easily accessed by the methods which will eventually rely on it. Next I need to rewrite the logic for generating the actual HTML which forms the disruption section, and adding the tooltip functionality in the process."}, {"post_id": 22915, "ts": "2026-07-05T15:42:49Z", "hours": 0.3303, "text": "I have deployed the new version of the app to the server and cleared Cloudflare caches so that the new feature should be fully functional on all browsers!"}, {"post_id": 22884, "ts": "2026-07-05T14:46:31Z", "hours": 0.5536, "text": "I’ve finished the recent journeys feature and improved the database code so that it handles multiple clients properly! I used some custom logic to decide how to tell the user the time since they took a journey, based on how long ago it was."}, {"post_id": 22385, "ts": "2026-07-04T20:41:07Z", "hours": 0.8658, "text": "I’ve now (almost) fully implemented the first version of the recent journeys feature! The time you took the journey is still shown as a Unix timestamp - I just need to add some switch-case logic for choosing how to display the time in a human-friendly format! I had to implement a new API endpoint, /api/stationName , on the server so that I could get station names from the database but this is working now, and the client-side JavaScript reads from the locally stored database whenever the homepage loads, before grabbing the station names from the server and displaying everything in the table! The screenshot is the real app, not test data! I haven’t deployed it to the main server yet because I need to make the database handler a bit more robust to deal with the increased simultaneous requests, and I want to make the time element more user-friendly. Watch this space for more!"}, {"post_id": 22337, "ts": "2026-07-04T19:13:49Z", "hours": 0.3431, "text": "I’ve now fixed the logic for deleting old journeys, so a local IndexedDB stores the user’s five most recent journeys on their device, with the origin, destination and timestamp. Once the database table reaches five entries, the oldest one (based on the incrementing primary key) is automatically deleted so that we don’t clog up users’ storage space! Now I need to implement a backend lookup to find station names based on their IDs, so that I can implement the recent journeys UI component!"}, {"post_id": 21688, "ts": "2026-07-03T19:37:19Z", "hours": 1.935, "text": "I’ve been working on the frontend of the app as previously most of the effort had been on the backend! First of all I am adding a ‘recent journeys’ feature which will let users easily access journeys they’ve previously searched for. So that I don’t have to implement a login system, and to increase user privacy, I am storing the recent journey data in IndexedDB on the client side, so I have had to start implementing the logic for that. So far, I have managed to store the journey data but now need to fix the logic for deleting old journeys and filling the recent journeys UI component. Below is a prototype (with dummy data) of the recent journeys UI, let me know what you think! Based on rater feedback, it seems a bit tricky to use for people who aren’t familiar with London! The project uses Underground stations and not landmarks, so try typing a few letters to start searching… if you don’t know any, how about Liverpool Street or Paddington to get you started?"}, {"post_id": 12691, "ts": "2026-06-20T18:47:03Z", "hours": 0.6867, "text": "In this session I’ve been writing the README so that people who come to the GitHub repository have a better idea of how the project works and how all the code fits together, as well as how to compile it for themselves!"}, {"post_id": 12605, "ts": "2026-06-20T16:22:08Z", "hours": 0.8775, "text": "In this first session I have redesigned the file handling logic for my template HTML files and static assets! Previously I was using a standard Java file handler to open these and serve them to users over the TCP socket, but I have now used Java’s resource functionality so that I can bundle the templates and static files into an artefact for deployment to the server! I have also been working on configuring the server ready for deployment and have deployed my project on Hack Club Nest so that others can try out the system! Still lots of work to do on improving the database system and making the journey planning algorithm itself a bit more sensible, but I have improved search times by fixing the journey planning algorithm so that it functions as a full A* pathfinding algorithm. Note that before Stardance, I had already developed most of the code in the project and my aims are to improve the project and make it work better as an online service!"}]...
|
Title: London Underground Journey Planner by @tram Title: London Underground Journey Planner by @tramcrazy | Stardance
Devlogs:
In this first session I have redesigned the file handling logic for my template HTML files and static assets! Previously I was using a standard Java file handler to open these and serve them to users over the TCP socket, but I have now used Java’s resource functionality so that I can bundle the templates and static files into an artefact for deployment to the server! I have also been working on configuring the server ready for deployment and have deployed my project on Hack Club Nest so that others can try out the system! Still lots of work to do on improving the database system and making the journey planning algorithm itself a bit more sensible, but I have improved search times by fixing the journey planning algorithm so that it functions as a full A* pathfinding algorithm. Note that before Stardance, I had already developed most of the code in the project and my aims are to improve the project and make it work better as an online service!
In this session I’ve been writing the README so that people who come to the GitHub repository have a better idea of how the project works and how all the code fits together, as well as how to compile it for themselves!
I’ve been working on the frontend of the app as previously most of the effort had been on the backend! First of all I am adding a ‘recent journeys’ feature which will let users easily access journeys they’ve previously searched for. So that I don’t have to implement a login system, and to increase user privacy, I am storing the recent journey data in IndexedDB on the client side, so I have had to start implementing the logic for that. So far, I have managed to store the journey data but now need to fix the logic for deleting old journeys and filling the recent journeys UI component. Below is a prototype (with dummy data) of the recent journeys UI, let me know what you think! Based on rater feedback, it seems a bit tricky to use for people who aren’t familiar with London! The project uses Underground stations and not landmarks, so try typing a few letters to start searching… if you don’t know any, how about Liverpool Street or Paddington to get you started?
I’ve now fixed the logic for deleting old journeys, so a local IndexedDB stores the user’s five most recent journeys on their device, with the origin, destination and timestamp. Once the database table reaches five entries, the oldest one (based on the incrementing primary key) is automatically deleted so that we don’t clog up users’ storage space! Now I need to implement a backend lookup to find station names based on their IDs, so that I can implement the recent journeys UI component!
I’ve now (almost) fully implemented the first version of the recent journeys feature! The time you took the journey is still shown as a Unix timestamp - I just need to add some switch-case logic for choosing how to display the time in a human-friendly format! I had to implement a new API endpoint, /api/stationName , on the server so that I could get station names from the database but this is working now, and the client-side JavaScript reads from the locally stored database whenever the homepage loads, before grabbing the station names from the server and displaying everything in the table! The screenshot is the real app, not test data! I haven’t deployed it to the main server yet because I need to make the database handler a bit more robust to deal with the increased simultaneous requests, and I want to make the time element more user-friendly. Watch this space for more!
I’ve finished the recent journeys feature and improved the database code so that it handles multiple clients properly! I used some custom logic to decide how to tell the user the time since they took a journey, based on how long ago it was.
I have deployed the new version of the app to the server and cleared Cloudflare caches so that the new feature should be fully functional on all browsers!
I am currently working on a range of updates based on your feedback in previous ships! The first new feature is more detailed information on disruptions on London Underground lines - I have decided to implement a tooltip feature so that you can find out what type of disruption is occurring by hovering over a line name in the disruptions area. This has turned out to be quite complicated to implement as I need to change the way I get data from the database - to start with I have built a new method for getting disruption data so that it provides specific information, and have formatted this as a Java HashMap so that it can be easily accessed by the methods which will eventually rely on it. Next I need to rewrite the logic for generating the actual HTML which forms the disruption section, and adding the tooltip functionality in the process.
Ships:
This is the first public version of my London Underground Journey Planner, for planning journeys on the London Underground network! It uses a custom-built HTTP server, custom templating engine, and my own implementation of the A* pathfinding algorithm which took a while to get right! Just head to the website at https://journeyplanner.tramcrazy.com to give it a test! The dark theme still needs a bit of work as the colour contrast isn’t great - colour mode is done based on system theme. Note - there are only 2 hours of Hackatime because I have been working on this project for many months and only the more recent parts have been done during Stardance.
To try the project go to the link (Try project button). The planner uses London Underground stations - if you don’t know any, why not try searching for King’s Cross St Pancras, Waterloo, Tottenham Court Road or Victoria? As you type, lots of suggestions will appear anyway. The homepage now shows your 5 most recent searches - this data is stored locally in your browser! In this ship I have built a ‘recent journeys’ feature which saves a user’s 5 most recent journeys in their browser (preserving user privacy) and allows them to easily access journeys they’ve taken before. This feature involved improving the database logic to improve multi-client functionality, and required a whole new client-side database system (using JavaScript’s IndexedDB) to store journey data, which meant I had to get familiar with more complicated asynchronous structures I hadn’t used before! To show users when they last took a journey, I saved the Unix timestamp of the journey request time in the local database and then compared this with the current time, using human-readable descriptions! This is the new version of my London Underground Journey Planner, for planning journeys on the London Underground network! It uses a custom-built HTTP server, custom templating engine, and my own implementation of the A* pathfinding algorithm which took a while to get right! Just head to the website at https://journeyplanner.tramcrazy.com to give it a test! Much of the work for this project was done before Stardance, but since it started I have added a new file handling system, the recent journeys feature and written more documentation.
[The journey planner uses London Underground stations - if you don’t know any, why not try searching for King’s Cross St Pancras, Waterloo, Tottenham Court Road or Victoria? As you type, lots of suggestions will appear anyway.] In this ship I have redesigned part of the database logic to provide users with improved information on disruptions across the London Underground network. This was based on feedback from a user on my last ship - “One thing that could be improved is clarity on Disruptions and more details about them.” I decided to use a Java HashMap to pass the data about disruptions between different parts of my code, as this meant it was easier to add information on multiple disruptions affecting the same line whilst ensuring all this information was kept in the same place. I then implemented the Bootstrap tooltip system to dynamically generate tooltips for disrupted lines based on the data from the database. You can test this new feature by hovering over (on desktop) or tapping (on mobile) the names of any disrupted London Underground lines, in the top right corner of the page (on desktop) or in the menu (on mobile). You should see a bit of detail about each disruption e.g. “Minor Delays” or “Part Suspended”. I’m considering adding more detail to these but need to decide on a way to include more text in the UI in a way that looks nice! I also need to make more progress on how the line colours look in dark mode - the whole system is still much more usable in light mode! More updates coming soon. This is my London Underground Journey Planner, for planning journeys on the London Underground network! It uses a custom-built HTTP server, custom templating engine, and my own implementation of the A* pathfinding algorithm which took a while to get right! Just head to the website at https://journeyplanner.tramcrazy.com to give it a test! Much of the work for this project was done before Stardance, but since it started I have added a new file handling system, the recent journeys feature, improved line disruption information for users, and written more documentation....
|
1792828470.522549
|
1792914870.522549
|
|
10673
|
DimeTrack by @d3monas | Stardance
|
d3monas
|
3
|
325.0
|
2960
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T21:44:49Z", "hours": 123.0, "multiplier": 16.88, "payout": 1039, "blessing": "neutral", "text": "DimeTrack is an open-source personal finance manager that helps people manage their money entirely in a browser. There are no accounts or subscriptions required and your data is stored locally on your device, with an OPTIONAL cloud sync if you want to access it across devices. Since my second shipment, the project has grown even further. I read every single review and Implemented all the suggestions that were provided. Made an optional cloud syncing feature that allows users to access and use the app across multiple devices. Made a small tutorial/guide that provides a bit more information on how to use DimeTrack. Replaced the Calendar tab with a new Timeline, that shows all your recurring transactions in your selected time interval, your projected balance and an ability to add a safety net and see if your projected balance falls below it in the coming months. Added an ability to manually track your Investments. Even more customization options and many other things. Similar to my previous shipments, the biggest challenge was to keep everything synced. One feature depends on another, so adding new functionality means that I have to update existing systems to ensure that everything stays working. I’ve somehow spent 325 hrs on this project and this will probably be my final shipment. I’ve had a lot of fun working on it and hope to maybe sometime later. For the v3 you should try to: Complete the tutorial (If you have used DimeTrack previously, go to settings -> data -> clear all data or just use incognito window) Add some recurring transactions and test out the Timeline to see your projected balance Explore the new subscriptions tab Set up cloud sync Add some Investments, update their price so see how your portfolio value goes up or down Check out the new financial insights in the Overview tab Use the Command Bar at top middle, you can find some quick actions there, search for any transaction or even create a quick transaction by typing in the search bar - Amount, Description, Existing Category (for example: 5 Coffee Food (must have a category called Food)) Explore the keyboard shortcuts Do a few achievements Create a few transactions and test out the bulk editing options", "repo": "https://github.com/d3monas/DimeTrack", "demo": "https://dime-track.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-24T18:06:38Z", "hours": 174.0, "multiplier": 18.83, "payout": 1539, "blessing": "neutral", "text": "DimeTrack is an open-source personal finance manager that helps people manage their money entirely in a browser. There are no accounts, subscriptions, servers - everything is stored locally on device. Since my first shipment, the project has grown significantly. It now supports accounts, transfers between them, split purchases, multiple savings goals with contribution history and target dates, budget limits, auto-categorization rules, cash flow calendar with forecasting, monthly spending reports, net worth tracking, customizable categories and accounts, JSON backups, CSV import & export and many other quality of life improvements were made during the many hours spent on this project. The biggest challenge was keeping every feature synced as the project grew. Transactions can affect accounts, budgets, savings goals, recurring payments, reports, charts and basically everything. Adding new functionality means that I have to update existing systems to ensure that everything stays working as intended. But I’m proud to see how much my project has evolved and grown. You should try to: Create multiple accounts and transfer money between them Add income & expense transactions, try the split transaction function Set up a few savings goals with target dates and see how the contribution suggestion feature works Customize categories & accounts with icons and colors Configure budget limits and see the warnings that It gives you when nearing the limits Create an auto-categorization rule Explore the cash flow calendar Try exporting your data to JSON", "repo": "https://github.com/d3monas/DimeTrack", "demo": "https://dime-track.vercel.app/"}, {"ship_num": 3, "ts": "2026-06-18T11:37:29Z", "hours": 28.0, "multiplier": 13.41, "payout": 382, "blessing": "neutral", "text": "I built DimeTrack, a personal finance & budgeting web app that helps users to track their income, expenses, manage custom spending categories, create budgets & save toward their set goals. The application store data locally, allowing users to use it without creating an account. One of the biggest challenges was managing the app as it grew. Features such as recurring transactions, savings goal contributions, budget tracking & categories all interact with each other. Ensuring that data remained synced required lots of testing. I’m proud that I built DimeTrack to have so many features, I’ve never built anything quite like this. To test DimeTrack: Try to create some categories through the settings menu Add income & expenses Create a savings goal and try to contribute to it Set budget limits Try recurring transactions Search & filter your transactions (transcations can be searched by description, amount or category) Export your transaction data using the CSV export feature (if you only want data from let’s say todays transactions, apply a filter) Refresh the page with all the data, to confirm that everything is saved. No accounts needed!", "repo": "https://github.com/d3monas/DimeTrack", "demo": "https://dime-track.vercel.app/"}]...
|
[{"post_id": 49906, "ts": "202 [{"post_id": 49906, "ts": "2026-08-18T21:22:02Z", "hours": 5.8847, "text": "Worked on a custom date picker for the Timeline, so now instead of being locked into 7-day, 1 or 3 month views, users can now view any custom date they want. Created a financial safety net, where users can set a minimum balance and if your projected balance drops below it, a warning banner appears. Updated the auto-sync feature and made it truly auto, all users now need to do, is just enter a password once. Finally, did a final test of the app, fixed bugs, updated the landing page and the GitHub readme"}, {"post_id": 48713, "ts": "2026-08-17T07:13:40Z", "hours": 5.0786, "text": "Today, I worked on more Quality of Life features for my app, first of all - Introduced Keyboard Shortcuts, you can open the Command Bar with CTRL + K, add new transactions with ALT + N and switch tabs with ALT + 1 through 6. Created a small dialog that shows all the keyboard shortcuts available. Another feature - Transaction Presets. You can now create a preset for your most used transactions, just fill out the add transaction form as usual and instead of pressing “Save Transaction” just press the new Bookmark icon, then at the top your preset will appear, next time just press on the preset and everything will be filled out for you. Fixed a few tiny UI details, optimized mobile design, fixed a bug where the quick-add suggestion bar hardcoded a $ sign regardless of your selected currency. Finally, when creating a new transaction through the quick-add feature, you must now include a valid category otherwise the app won’t recognize that you are trying to add a transaction."}, {"post_id": 48036, "ts": "2026-08-16T10:16:00Z", "hours": 7.9572, "text": "Today, I Improved the “Smart Stats” feature with a new “Insights” tab. I didn’t want to create a new tab just for the Insights, so I decided to Implement the new feature in to an already existing one. Insights display your spending pace, give budget warnings, alerts you If your Net Worth & Savings are trending up or down and gives your Goal Projections without you having to navigate to the Goals tab. Also, replaced the default browser confirmation dialogs with custom ones, updated the tabs list design to a bit more modern one and made the tabs list stick so when you are scrolling down, your tabs list will always be accessible. Finally, fixed a few small bugs and a major budget rollover bug that would instantly roll over your budget without checking, if you even had a budget limit previously."}, {"post_id": 46940, "ts": "2026-08-14T14:40:05Z", "hours": 7.0375, "text": "Today, I’ve updated the command bar navigation to include the new Timeline and Investment tabs and with that also created a quicker way to add transactions - To create a transaction quicker, In the command bar all you need to do is type the amount, description and optionally category and account (for example: 9 Breakfast Food Checking). Also, reworked the transaction list and added abilities to select multiple or all transactions and bulk change account, categories, type or bulk delete transactions. Added ability to restore your transaction, if deleted accidentally. Finally, added an ability to duplicate transactions If needed."}, {"post_id": 45842, "ts": "2026-08-12T15:51:41Z", "hours": 9.6678, "text": "Today, I created a fun new achievement system which currently features 12 achievements. In the achievements page you can see all of them + progress tracker towards them. Upon unlocking an achievement, you will receive a notification in the bottom right corner of your screen. All achievements are saved locally, included in JSON backups and sync seamlessly. Also, fixed some localstorage and JSON backup issues and fixed a bug that when clearing your data, your investments would not clear."}, {"post_id": 45096, "ts": "2026-08-11T11:17:58Z", "hours": 6.7625, "text": "For todays update, I’ve worked on customization more. In settings, added an ability to turn off selected widgets that you do not care about. Turned off widgets will not be shown in the Overview tab. Also, I’ve done some more work to the Timeline tab, after each recurring transaction - your projected balance will show now, added an overdraft warning, so if your projected balance dips below 0 on a specific day, the chart will show a red zero-line and a warning banner will appear. Made the 3-month view sorted into groups by month, so Its easier to differentiate by month. Finally, I updated the exporting/importing and cloud syncing to make sure that everything is properly synced and no errors occur."}, {"post_id": 44522, "ts": "2026-08-10T10:42:39Z", "hours": 6.9944, "text": "Made some small improvements to the Investments tab and added a “Portfolio Performance” chart, which tracks how much you invested vs how much your portfolio is worth currently. Other than that, I completely reworked the Calendar, which is now called - Timeline. Instead of a Calendar it now shows your 7 day, 30 day and 3 month timeline with a projected balance, a projected balance chart and upcoming recurring transactions. It it somewhat similar to the calendar, however the whole UX is much more simpler and cleaner. Finally, I fixed some math calculations."}, {"post_id": 43894, "ts": "2026-08-09T10:37:55Z", "hours": 6.7469, "text": "Reworked the Investments Tab. Now you can properly buy/sell/update your investments to keep track of your Profit & Loss. When creating a new Investment, first of all, you will be able to select what kind of asset this is (It can be Stock, Crypto, ETF or Other). After creating an asset, you can buy/sell/update your asset. When buying, enter the quantity, price per date and set a date when bought. After buying you will instantly see your new updated portfolio value & how much you have invested. If you want to see your Total Profit & Loss, update your asset prices."}, {"post_id": 42550, "ts": "2026-08-07T11:27:13Z", "hours": 7.3378, "text": "Another requested feature was cloud syncing or login so It was easier to use DimeTrack between multiple devices. I built a cloud syncing feature with Upstash. Basically, your data is still encryped and nobody except you can see it. Also built an auto-sync feature so any time you add a transaction, update a budget, create a goal or do anything, the application waits 3 seconds and pushes your updated data to the cloud. Finally, did some minor settings UI changes to the tabs are less cluttered, especially on mobile screens. How to set up syncing? Open Settings and navigate to the new Sync tab Under “Start New Sync” create your password and enable syncing The app will generate a unique Sync ID, save this ID On your secondary device: Open Settings and navigate to the Sync tab Under “Connect to Existing Sync”, paste your Sync ID and enter your password Click Pull Data & Connect and your data will be downloaded. Auto-Sync is now active on both. Auto-Sync is only active until you refresh your browser. After you refresh your browser, you will see a banner saying that Auto-sync is paused. To unpause - enter your password again. *This sync feature is completely optional"}, {"post_id": 41530, "ts": "2026-08-05T19:59:50Z", "hours": 9.8156, "text": "Since the last devlog, I created a new Investments tab, where users can manually log their assets, mark them as Recurring Investments and update their values. Also, the total asset value is automatically added to the user’s Net Worth. For now, this investment tracker is very simple and I will be expanding on this feature a bit later. Most of my time during these few days was spent, trying to figure out how to connect Upstash to my app, so users can sync their data between devices, while I still keep DimeTrack fully serverless."}, {"post_id": 40251, "ts": "2026-08-03T17:32:22Z", "hours": 9.4694, "text": "I’ve read the reviews of my previous ship and a few users suggested that I create a tutorial. So that’s what I have done. When a brand new user opens the app (or an existing user clears their data), they will receive this welcome popup and will be given 2 choices - “Start Fresh” or “Start Demo Tour”. If the user chooses the Demo Tour, the app will instantly fill with realistic sample data (transactions, categories, accounts, recurring transactions, savings goals & more). On top of that, a quick 12 step tutorial will appear. During the tutorial, users will create a transaction, a new category, setup an auto categorization rule & create a savings goal. Once the tutorial is finished, the sample data will be wiped and the user will be able to use the app with their own data."}, {"post_id": 39370, "ts": "2026-08-02T09:43:02Z", "hours": 8.1022, "text": "Upgraded the budgeting side and added support for category rollover. So basically, If you underspend your limit this month, the remainder rolls over to the next month. But If you overspend, it will carry over as debt and your limit next month will be lower. Also worked on some smaller features, such as: added a clear filters button in transaction list whenever active filters are applied. Added small colored dots next to category names in the transaction list, the color of the dot matches your category color. If no recurring expenses are present, you will see a button, that will help you to create one. Finally, started working on a proper tutorial which is probably going to be in the next devlog."}, {"post_id": 38100, "ts": "2026-07-31T09:53:36Z", "hours": 6.8269, "text": "Added a new chart to the overview tab that projects your accounts balance 12 months in to the future based on your active recurring income & expenses. It features a red line at 0$ to warn you of potential overdrafts. Other than that, I’ve made a few code refactors, extracted formatting logic into a shared component and worked on mobile UI for this chart."}, {"post_id": 36954, "ts": "2026-07-29T11:29:37Z", "hours": 6.8278, "text": "Since the last update, I’ve made some small QOL improvements. Created ability to edit assigned accounts when editing a transaction. Also, you can now sort transactions by date (newest/oldest) or amount (highest/lowest). Added ability to filter and search transactions by tags. Reorganized the filter & search toolbar to fit everything smoothly, especially for mobiles. Lastly, upgraded empty states, so if you have no transactions, you’ll see not only the empty state but also an “Add Transaction” button. The change applies to Savings Goals"}, {"post_id": 35845, "ts": "2026-07-27T15:23:08Z", "hours": 9.1947, "text": "Today I spent a lot of time making a command menu, basically you can press Ctrl+K anywhere or click the new search bar in the header to open the Command Menu. It allows you to instantly search all transactions, jump to any tab, or trigger actions like adding a transaction or goal. Also, I created a new tags feature, you can add tags when creating or editing transactions for cross-category tracking. Finally, slightly redesigned the header so It now fully functions and fits on mobile."}, {"post_id": 35147, "ts": "2026-07-26T11:57:54Z", "hours": 9.3906, "text": "Continuing to work on DimeTrack, I made a dedicated “Subscriptions” tab, where It scans your recurring expenses, displays how much you spend on subscriptions monthly & annually and allows to toggle subscriptions between “Active” and “Cancelled” without deleting past transaction history. Also upgraded the main dashboard tabs to support 5 categories, added Icons to the tabs and on mobile tabs switch to icon-only layout to prevent text squishing. Finally, added a native browser confirmation prompts to all delete actions (deleting goals, accounts, categories & recurring transactions)"}, {"post_id": 34160, "ts": "2026-07-24T17:48:20Z", "hours": 7.9261, "text": "Created a “Monthly Report” dialog that generates a breakdown of the current months total income & expenses, net savings & savings rate, daily average spending, top spending category, largest single purchase & a trend comparison of expenses versus the previous month. Also fixed chart tool tip clipping om mobile screens, optimized the main header layout by hiding button text on small screens, preventing the “Settings” & “View Monthly Report” buttons from going out of bounds. Updated the landing page with new features and screenshots & updated the github readme."}, {"post_id": 33454, "ts": "2026-07-23T13:04:07Z", "hours": 9.5942, "text": "Added a new Net Worth History chart to the overview tab, which tracks your all-time balance over the last 6 months. Also upgraded the 6-month Income vs Expenses visualization from a Bar chart to a Line chart to match the Net Worth History chart design. Both charts now feature a smart Y-axis formatting for large numbers, shared tooltip styles."}, {"post_id": 32937, "ts": "2026-07-22T12:42:22Z", "hours": 7.5039, "text": "Today I made a guided setup checklist to help new users configure their dashboard with ease. Instead of an empty app, now a “Get Started” button appears at the top right corner, which opens a 5 step tutorial (Create Account, Category, Set a budget limit, a savings goal & Add a transaction). The checklist automatically detects completed steps and also allows users to skip the guide. Onboarding is fully linked with localStorage and JSON backups, so It doesn’t appear to users who already have everything setup."}, {"post_id": 31958, "ts": "2026-07-20T19:40:38Z", "hours": 9.7931, "text": "Created 2 new features: Net Worth - replaced the “current balance” card on the overview tab which a dynamic Net Worth widget which calculates your all-time balance and compares it to your balance at the end of last month, displaying a green or red trend arrow to show how much your net worth has grown or shrunk this month. Custom color theming - created a new settings tab called “appearance” & custom color picker which allows users to instantly re-theme buttons, active tabs, calendar selections, focused inputs. The color picker here is powered by react-colorful and color change is being handled by colord. Also implemented a localColor state so the app only commits the CSS when the user releases the color picker drag."}, {"post_id": 31210, "ts": "2026-07-19T12:56:00Z", "hours": 9.5264, "text": "Created a new Smart Stats widget to Overview tab that calculates your Daily Average spending and projects your End Of Month spending based on your current Daily Average spending. Then after that, I looked through every file and did some refactors, bug fixes & UI polishing (especially on mobile). Bug fixes: Excluded “Starting Balance” transactions from calculateIncome & getMonthlyTrends so adding an account with starting balance doesn’t inflate income stats or trend charts. Fixed deleteCategory to clean up everything (including transaction splits, auto-categorization rules and category customization). Added a transfer account validation to Add Transaction dialog to prevent saving a transfer with empty “From/To” accounts or transferring money to the same account. Fixed the “Will exceed budget” warning showing when adding Income. Added defaultAccountId to JSON export/import handlers so the user’s default account setting survives JSON backups. Refactors: Extracted the duplicated color/icon Popover UI from settingsUI & accountManager in to a single colorIconPicker component. Extracted duplicated Recharts tooltip styling into a shared chartStyles.ts constant. UI Polish: Made the calendar mobile-friendly by showing colored dots on small screens and full text & balances on larger ones. Hid the default calendar navigation arrows that appeared at the top of the screen and adjusted button heights to match. Adjusted TabsList to use text-xs on mobile to prevent text overlapping on small screens. Added offset, z-index & allowEscapeViewBox to chart styles to prevent hover tooltips from being hidden behind chart graphics. Removed dead props, fixed a few typos and replaced hardcoded values with consts."}, {"post_id": 30620, "ts": "2026-07-18T10:38:01Z", "hours": 9.6939, "text": "Final part of the Accounts update: Worked on visual customization for the accounts system. Users can now edit account names without losing their transaction history. Also introduced a color and icon picker for accounts (just like with categories), so It’s easier for users to differentiate between accounts. Created a new “Total Balance” card that quickly shows your balance between all accounts. Finally, added a new filter for the transaction list - “Transfer”, colored transfers in a gray color so they don’t look like expenses, hidden the “Starting Balance” system transactions to reduce the visual clutter of the transaction list & updated the default account badge design."}, {"post_id": 29478, "ts": "2026-07-16T13:32:53Z", "hours": 10.1997, "text": "Part 2 of the Accounts update: Created a new ‘account balance’ widget that displays all your accounts & their balances. The transaction list now features a badge with the account name that the transaction was assigned to. Spent a lot of time fixing CSV exports/imports to properly support accounts & transfers between accounts. Finally, introduced a ‘starting balance’ feature for users can instantly input their balance when creating a new account without typing months of history and a ‘default account’ setting that auto selects their primary account when creating a new transaction"}, {"post_id": 28548, "ts": "2026-07-14T21:22:16Z", "hours": 9.845, "text": "Part 1 of the Accounts update: I finally built the whole architecture for multi-account management. Users can now create accounts (like checking or savings) and assign transactions to them. Also Introduced “transfers” which allow users to move money between accounts without adding fake data to income or expenses. The add and edit transaction dialogs now feature a dynamic UI that swaps out categories & split transaction functionalities for “From/to” account selectors. Finally, updated localStorage & JSON data exports to make sure that accounts are included."}, {"post_id": 27124, "ts": "2026-07-12T12:16:03Z", "hours": 7.7758, "text": "Improved the spending pie chart by adding a legend below the chart, displaying currency symbols when hovering & vastly improving tooltip readability on hover. Also expanded the Recent Transactions page with even more filters. Now you can filter transactions by income, expenses and categories. Finally, fixed some design inconsistencies."}, {"post_id": 26471, "ts": "2026-07-11T09:01:46Z", "hours": 9.3356, "text": "Added category customization, allowing users to personalize categories with custom icons & colors. Updated the spending chart and budget overview to use the new customization system, so select icons and colors are consistent throughout the whole application. Refactored the application to use default icon & color when none are selected."}, {"post_id": 25000, "ts": "2026-07-08T22:05:19Z", "hours": 11.4794, "text": "Added auto-categorization rules, which allows transactions to be automatically assigned to categories based on custom keywords. When you type the set keyword in description, a category will be auto chosen based on the rule. Built a rules manager in the Settings page to manage auto-categorization rules. Also expanded CSV & JSON import/export functionality to include notes & auto-categorization rules. Fixed several issues with CSV importing, when imported descriptions, notes were missing & incorrect amounts were assigned. Finally, redesigned the Settings UI and assigned each category to its own tab & cleaned up various design inconsistencies."}, {"post_id": 24022, "ts": "2026-07-07T09:34:59Z", "hours": 13.2997, "text": "Introduced the ability to split a single transaction across multiple categories. Also improved the transaction list to clearly display split categories and their amounts. Now, creating new categories is much easier, as they can be added directly when creating a transaction. Finally, I added warnings that notify users when a savings goal contribution would exceed its target or when a new expense would push a category over Its budget limit."}, {"post_id": 21802, "ts": "2026-07-03T22:35:42Z", "hours": 11.8697, "text": "I spent 12 hours on this 😭😭😭. It’s a cash flow calendar which uses historical and current transactions & puts them in a calendar. This feature projects your upcoming recurring transactions & income, automatically calculating your daily running balance. It highlights your balance red, if there is a potential overdraft. It’s pretty easy to navigate through past & future months to analyze your spending."}, {"post_id": 19107, "ts": "2026-06-30T10:41:35Z", "hours": 12.7331, "text": "Created an optional selection when creating a savings goal - Target Date. If Target Date is selected, when contributing to a goal, you will get a suggested amount based on your goal & target date. Created a notification system and replaced all alert() functions with notifications. When creating & editing transactions, users can now enter additional notes that they may have about the transaction. Also fixed CSV importing bugs & a few small UI inconsistencies."}, {"post_id": 17223, "ts": "2026-06-27T22:43:14Z", "hours": 8.6589, "text": "Today most of my time was dedicated to a UI rearrangement. I split the whole dashboard into 3 main tabs. Also created a section that shows your upcoming recurring transactions in the next 7 days. Finally, made a setting that allows users to wipe all their data."}, {"post_id": 15987, "ts": "2026-06-25T23:18:41Z", "hours": 10.7472, "text": "Mostly worked on the new Import CSV, Export & Import backups features. With Import CSV, you can import your existing transactions & categories while with Import backup you can import everything that your app has, this is great if user is switching browsers or devices. The other feature is a 6 month expenses vs income TrendChart that allows you to visually see how much you are making, spending & compare."}, {"post_id": 14707, "ts": "2026-06-23T22:10:13Z", "hours": 8.1892, "text": "DEV #7 Well first of all, It took me an hour to find a simple shadow class that needed to be removed so the landing page picture looks better. The rest of the time was spent figuring out how to & actually making the ability to create multiple goals at once."}, {"post_id": 13351, "ts": "2026-06-21T21:23:45Z", "hours": 5.655, "text": "DEV #6 Since shipping I worked on a small landing page which presents the core features of dimetrack. Fixed some issues with recurring transactions & implemented the ability to use custom values for recurring transactions instead of using the preset ones. Lastly, created loading skeletons & worked on some small design improvements (inconsistent gaps, settings dialog not being scrollable when too many elements are present, added small animations to progress bars.)"}, {"post_id": 11219, "ts": "2026-06-18T11:22:15Z", "hours": 5.0586, "text": "DEV #5 Polished the application more (especially mobile design) and finished the remaining features that I had planned. Users can now search their transactions by description, category or amount Added a separate goal contribution history for easier tracking Added budget limit warnings at: 50%, 80% & 100% Users can export their data in a .csv file"}, {"post_id": 10249, "ts": "2026-06-16T21:45:47Z", "hours": 6.6958, "text": "DEV #4 Added recurring transactions support. Users can select recurring transactions every day, week, month or year. Users can see all their recurring transactions & delete them in settings Added transaction filtering, same as recurring transactions, users can filter their recent transactions by day, week, month, year or lifetime Created field errors Many bug fixes"}, {"post_id": 8385, "ts": "2026-06-13T22:57:24Z", "hours": 8.8989, "text": "DEV #3 New features: Currency selector New settings page Ability to contribute to goal Ability to delete categories Ability to edit budget limits Lots of bug fixes Huge code cleanup, refactors & +99 more bugs to fix"}, {"post_id": 5190, "ts": "2026-06-08T21:42:35Z", "hours": 4.8833, "text": "Day 2 Created: Categories Spending by category & spending breakdown pie-chart Ability to edit goals Mostly worked on optimization today, moved most components into separate files. Fixed some bugs (hopefully). Designed a quick (was not quick) logo & favicon."}, {"post_id": 4518, "ts": "2026-06-07T21:11:11Z", "hours": 2.9533, "text": "Created the first working version of the transaction system. Income and expenses are now accepted, and actual data rather than hardcoded amounts are used to update balance, income, and spending in real time. Also created transaction saving to localStorage. Discovered a bug early on where an invalid input broke all calculations, so I added a better validation in the form to (hopefully) prevent these types of errors in the future. For now, I’ll keep working on the UX part and create more features and then move on to UI."}]...
|
Title: DimeTrack by @d3monas | Stardance
Devlogs: Title: DimeTrack by @d3monas | Stardance
Devlogs:
Created the first working version of the transaction system. Income and expenses are now accepted, and actual data rather than hardcoded amounts are used to update balance, income, and spending in real time. Also created transaction saving to localStorage. Discovered a bug early on where an invalid input broke all calculations, so I added a better validation in the form to (hopefully) prevent these types of errors in the future. For now, I’ll keep working on the UX part and create more features and then move on to UI.
Day 2 Created: Categories Spending by category & spending breakdown pie-chart Ability to edit goals Mostly worked on optimization today, moved most components into separate files. Fixed some bugs (hopefully). Designed a quick (was not quick) logo & favicon.
DEV #3 New features: Currency selector New settings page Ability to contribute to goal Ability to delete categories Ability to edit budget limits Lots of bug fixes Huge code cleanup, refactors & +99 more bugs to fix
DEV #4 Added recurring transactions support. Users can select recurring transactions every day, week, month or year. Users can see all their recurring transactions & delete them in settings Added transaction filtering, same as recurring transactions, users can filter their recent transactions by day, week, month, year or lifetime Created field errors Many bug fixes
DEV #5 Polished the application more (especially mobile design) and finished the remaining features that I had planned. Users can now search their transactions by description, category or amount Added a separate goal contribution history for easier tracking Added budget limit warnings at: 50%, 80% & 100% Users can export their data in a .csv file
DEV #6 Since shipping I worked on a small landing page which presents the core features of dimetrack. Fixed some issues with recurring transactions & implemented the ability to use custom values for recurring transactions instead of using the preset ones. Lastly, created loading skeletons & worked on some small design improvements (inconsistent gaps, settings dialog not being scrollable when too many elements are present, added small animations to progress bars.)
DEV #7 Well first of all, It took me an hour to find a simple shadow class that needed to be removed so the landing page picture looks better. The rest of the time was spent figuring out how to & actually making the ability to create multiple goals at once.
Mostly worked on the new Import CSV, Export & Import backups features. With Import CSV, you can import your existing transactions & categories while with Import backup you can import everything that your app has, this is great if user is switching browsers or devices. The other feature is a 6 month expenses vs income TrendChart that allows you to visually see how much you are making, spending & compare.
Today most of my time was dedicated to a UI rearrangement. I split the whole dashboard into 3 main tabs. Also created a section that shows your upcoming recurring transactions in the next 7 days. Finally, made a setting that allows users to wipe all their data.
Created an optional selection when creating a savings goal - Target Date. If Target Date is selected, when contributing to a goal, you will get a suggested amount based on your goal & target date. Created a notification system and replaced all alert() functions with notifications. When creating & editing transactions, users can now enter additional notes that they may have about the transaction. Also fixed CSV importing bugs & a few small UI inconsistencies.
I spent 12 hours on this 😭😭😭. It’s a cash flow calendar which uses historical and current transactions & puts them in a calendar. This feature projects your upcoming recurring transactions & income, automatically calculating your daily running balance. It highlights your balance red, if there is a potential overdraft. It’s pretty easy to navigate through past & future months to analyze your spending.
Introduced the ability to split a single transaction across multiple categories. Also improved the transaction list to clearly display split categories and their amounts. Now, creating new categories is much easier, as they can be added directly when creating a transaction. Finally, I added warnings that notify users when a savings goal contribution would exceed its target or when a new expense would push a category over Its budget limit.
Added auto-categorization rules, which allows transactions to be automatically assigned to categories based on custom keywords. When you type the set keyword in description, a category will be auto chosen based on the rule. Built a rules manager in the Settings page to manage auto-categorization rules. Also expanded CSV & JSON import/export functionality to include notes & auto-categorization rules. Fixed several issues with CSV importing, when imported descriptions, notes were missing & incorrect amounts were assigned. Finally, redesigned the Settings UI and assigned each category to its own tab & cleaned up various design inconsistencies.
Added category customization, allowing users to personalize categories with custom icons & colors. Updated the spending chart and budget overview to use the new customization system, so select icons and colors are consistent throughout the whole application. Refactored the application to use default icon & color when none are selected.
Improved the spending pie chart by adding a legend below the chart, displaying currency symbols when hovering & vastly improving tooltip readability on hover. Also expanded the Recent Transactions page with even more filters. Now you can filter transactions by income, expenses and categories. Finally, fixed some design inconsistencies.
Part 1 of the Accounts update: I finally built the whole architecture for multi-account management. Users can now create accounts (like checking or savings) and assign transactions to them. Also Introduced “transfers” which allow users to move money between accounts without adding fake data to income or expenses. The add and edit transaction dialogs now feature a dynamic UI that swaps out categories & split transaction functionalities for “From/to” account selectors. Finally, updated localStorage & JSON data exports to make sure that accounts are included.
Part 2 of the Accounts update: Created a new ‘account balance’ widget that displays all your accounts & their balances. The transaction list now features a badge with the account name that the transaction was assigned to. Spent a lot of time fixing CSV exports/imports to properly support accounts & transfers between accounts. Finally, introduced a ‘starting balance’ feature for users can instantly input their balance when creating a new account without typing months of history and a ‘default account’ setting that auto selects their primary account when creating a new transaction
Final part of the Accounts update: Worked on visual customization for the accounts system. Users can now edit account names without losing their transaction history. Also introduced a color and icon picker for accounts (just like with categories), so It’s easier for users to differentiate between accounts. Created a new “Total Balance” card that quickly shows your balance between all accounts. Finally, added a new filter for the transaction list - “Transfer”, colored transfers in a gray color so they don’t look like expenses, hidden the “Starting Balance” system transactions to reduce the visual clutter of the transaction list & updated the default account badge design.
Created a new Smart Stats widget to Overview tab that calculates your Daily Average spending and projects your End Of Month spending based on your current Daily Average spending. Then after that, I looked through every file and did some refactors, bug fixes & UI polishing (especially on mobile). Bug fixes: Excluded “Starting Balance” transactions from calculateIncome & getMonthlyTrends so adding an account with starting balance doesn’t inflate income stats or trend charts. Fixed deleteCategory to clean up everything (including transaction splits, auto-categorization rules and category customization). Added a transfer account validation to Add Transaction dialog to prevent saving a transfer with empty “From/To” accounts or transferring money to the same account. Fixed the “Will exceed budget” warning showing when adding Income. Added defaultAccountId to JSON export/import handlers so the user’s default account setting survives JSON backups. Refactors: Extracted the duplicated color/icon Popover UI from settingsUI & accountManager in to a single colorIconPicker component. Extracted duplicated Recharts tooltip styling into a shared chartStyles.ts constant. UI Polish: Made the calendar mobile-friendly by showing colored dots on small screens and full text & balances on larger ones. Hid the default calendar navigation arrows that appeared at the top of the screen and adjusted button heights to match. Adjusted TabsList to use text-xs on mobile to prevent text overlapping on small screens. Added offset, z-index & allowEscapeViewBox to chart styles to prevent hover tooltips from being hidden behind chart graphics. Removed dead props, fixed a few typos and replaced hardcoded values with consts.
Created 2 new features: Net Worth - replaced the “current balance” card on the overview tab which a dynamic Net Worth widget which calculates your all-time balance and compares it to your balance at the end of last month, displaying a green or red trend arrow to show how much your net worth has grown or shrunk this month. Custom color theming - created a new settings tab called “appearance” & custom color picker which allows users to instantly re-theme buttons, active tabs, calendar selections, focused inputs. The color picker here is powered by react-colorful and color change is being handled by colord. Also implemented a localColor state so the app only commits the CSS when the user releases the color picker drag.
Today I made a guided setup checklist to help new users configure their dashboard with ease. Instead of an empty app, now a “Get Started” button appears at the top right corner, which opens a 5 step tutorial (Create Account, Category, Set a budget limit, a savings goal & Add a transaction). The checklist automatically detects completed steps and also allows users to skip the guide. Onboarding is fully linked with localStorage and JSON backups, so It doesn’t appear to users who already have everything setup.
Added a new Net Worth History chart to the overview tab, which tracks your all-time balance over the last 6 months. Also upgraded the 6-month Income vs Expenses visualization from a Bar chart to a Line chart to match the Net Worth History chart design. Both charts now feature a smart Y-axis formatting for large numbers, shared tooltip styles.
Created a “Monthly Report” dialog that generates a breakdown of the current months total income & expenses, net savings & savings rate, daily average spending, top spending category, largest single purchase & a trend comparison of expenses versus the previous month. Also fixed chart tool tip clipping om mobile screens, optimized the main header layout by hiding button text on small screens, preventing the “Settings” & “View Monthly Report” buttons from going out of bounds. Updated the landing page with new features and screenshots & updated the github readme.
Continuing to work on DimeTrack, I made a dedicated “Subscriptions” tab, where It scans your recurring expenses, displays how much you spend on subscriptions monthly & annually and allows to toggle subscriptions between “Active” and “Cancelled” without deleting past transaction history. Also upgraded the main dashboard tabs to support 5 categories, added Icons to the tabs and on mobile tabs switch to icon-only layout to prevent text squishing. Finally, added a native browser confirmation prompts to all delete actions (deleting goals, accounts, categories & recurring transactions)
Today I spent a lot of time making a command menu, basically you can press Ctrl+K anywhere or click the new search bar in the header to open the Command Menu. It allows you to instantly search all transactions, jump to any tab, or trigger actions like adding a transaction or goal. Also, I created a new tags feature, you can add tags when creating or editing transactions for cross-category tracking. Finally, slightly redesigned the header so It now fully functions and fits on mobile.
Since the last update, I’ve made some small QOL improvements. Created ability to edit assigned accounts when editing a transaction. Also, you can now sort transactions by date (newest/oldest) or amount (highest/lowest). Added ability to filter and search transactions by tags. Reorganized the filter & search toolbar to fit everything smoothly, especially for mobiles. Lastly, upgraded empty states, so if you have no transactions, you’ll see not only the empty state but also an “Add Transaction” button. The change applies to Savings Goals
Added a new chart to the overview tab that projects your accounts balance 12 months in to the future based on your active recurring income & expenses. It features a red line at 0$ to warn you of potential overdrafts. Other than that, I’ve made a few code refactors, extracted formatting logic into a shared component and worked on mobile UI for this chart.
Upgraded the budgeting side and added support for category rollover. So basically, If you underspend your limit this month, the remainder rolls over to the next month. But If you overspend, it will carry over as debt and your limit next month will be lower. Also worked on some smaller features, such as: added a clear filters button in transaction list whenever active filters are applied. Added small colored dots next to category names in the transaction list, the color of the dot matches your category color. If no recurring expenses are present, you will see a button, that will help you to create one. Finally, started working on a proper tutorial which is probably going to be in the next devlog.
I’ve read the reviews of my previous ship and a few users suggested that I create a tutorial. So that’s what I have done. When a brand new user opens the app (or an existing user clears their data), they will receive this welcome popup and will be given 2 choices - “Start Fresh” or “Start Demo Tour”. If the user chooses the Demo Tour, the app will instantly fill with realistic sample data (transactions, categories, accounts, recurring transactions, savings goals & more). On top of that, a quick 12 step tutorial will appear. During the tutorial, users will create a transaction, a new category, setup an auto categorization rule & create a savings goal. Once the tutorial is finished, the sample data will be wiped and the user will be able to use the app with their own data.
Since the last devlog, I created a new Investments tab, where users can manually log their assets, mark them as Recurring Investments and update their values. Also, the total asset value is automatically added to the user’s Net Worth. For now, this investment tracker is very simple and I will be expanding on this feature a bit later. Most of my time during these few days was spent, trying to figure out how to connect Upstash to my app, so users can sync their data between devices, while I still keep DimeTrack fully serverless.
Another requested feature was cloud syncing or login so It was easier to use DimeTrack between multiple devices. I built a cloud syncing feature with Upstash. Basically, your data is still encryped and nobody except you can see it. Also built an auto-sync feature so any time you add a transaction, update a budget, create a goal or do anything, the application waits 3 seconds and pushes your updated data to the cloud. Finally, did some minor settings UI changes to the tabs are less cluttered, especially on mobile screens. How to set up syncing? Open Settings and navigate to the new Sync tab Under “Start New Sync” create your password and enable syncing The app will generate a unique Sync ID, save this ID On your secondary device: Open Settings and navigate to the Sync tab Under “Connect to Existing Sync”, paste your Sync ID and enter your password Click Pull Data & Connect and your data will be downloaded. Auto-Sync is now active on both. Auto-Sync is only active until you refresh your browser. After you refresh your browser, you will see a banner saying that Auto-sync is paused. To unpause - enter your password again. *This sync feature is completely optional
Reworked the Investments Tab. Now you can properly buy/sell/update your investments to keep track of your Profit & Loss. When creating a new Investment, first of all, you will be able to select what kind of asset this is (It can be Stock, Crypto, ETF or Other). After creating an asset, you can buy/sell/update your asset. When buying, enter the quantity, price per date and set a date when bought. After buying you will instantly see your new updated portfolio value & how much you have invested. If you want to see your Total Profit & Loss, update your asset prices.
Made some small improvements to the Investments tab and added a “Portfolio Performance” chart, which tracks how much you invested vs how much your portfolio is worth currently. Other than that, I completely reworked the Calendar, which is now called - Timeline. Instead of a Calendar it now shows your 7 day, 30 day and 3 month timeline with a projected balance, a projected balance chart and upcoming recurring transactions. It it somewhat similar to the calendar, however the whole UX is much more simpler and cleaner. Finally, I fixed some math calculations.
For todays update, I’ve worked on customization more. In settings, added an ability to turn off selected widgets that you do not care about. Turned off widgets will not be shown in the Overview tab. Also, I’ve done some more work to the Timeline tab, after each recurring transaction - your projected balance will show now, added an overdraft warning, so if your projected balance dips below 0 on a specific day, the chart will show a red zero-line and a warning banner will appear. Made the 3-month view sorted into groups by month, so Its easier to differentiate by month. Finally, I updated the exporting/importing and cloud syncing to make sure that everything is properly synced and no errors occur.
Today, I created a fun new achievement system which currently features 12 achievements. In the achievements page you can see all of them + progress tracker towards them. Upon unlocking an achievement, you will receive a notification in the bottom right corner of your screen. All achievements are saved locally, included in JSON backups and sync seamlessly. Also, fixed some localstorage and JSON backup issues and fixed a bug that when clearing your data, your investments would not clear.
Today, I’ve updated the command bar navigation to include the new Timeline and Investment tabs and with that also created a quicker way to add transactions - To create a transaction quicker, In the command bar all you need to do is type the amount, description and optionally category and account (for example: 9 Breakfast Food Checking). Also, reworked the transaction list and added abilities to select multiple or all transactions and bulk change account, categories, type or bulk delete transactions. Added ability to restore your transaction, if deleted accidentally. Finally, added an ability to duplicate transactions If needed.
Today, I Improved the “Smart Stats” feature with a new “Insights” tab. I didn’t want to create a new tab just for the Insights, so I decided to Implement the new feature in to an already existing one. Insights display your spending pace, give budget warnings, alerts you If your Net Worth & Savings are trending up or down and gives your Goal Projections without you having to navigate to the Goals tab. Also, replaced the default browser confirmation dialogs with custom ones, updated the tabs list design to a bit more modern one and made the tabs list stick so when you are scrolling down, your tabs list will always be accessible. Finally, fixed a few small bugs and a major budget rollover bug that would instantly roll over your budget without checking, if you even had a budget limit previously.
Today, I worked on more Quality of Life features for my app, first of all - Introduced Keyboard Shortcuts, you can open the Command Bar with CTRL + K, add new transactions with ALT + N and switch tabs with ALT + 1 through 6. Created a small dialog that shows all the keyboard shortcuts available. Another feature - Transaction Presets. You can now create a preset for your most used transactions, just fill out the add transaction form as usual and instead of pressing “Save Transaction” just press the new Bookmark icon, then at the top your preset will appear, next time just press on the preset and everything will be filled out for you. Fixed a few tiny UI details, optimized mobile design, fixed a bug where the quick-add suggestion bar hardcoded a $ sign regardless of your selected currency. Finally, when creating a new transaction through the quick-add feature, you must now include a valid category otherwise the app won’t recognize that you are trying to add a transaction.
Worked on a custom date picker for the Timeline, so now instead of being locked into 7-day, 1 or 3 month views, users can now view any custom date they want. Created a financial safety net, where users can set a minimum balance and if your projected balance drops below it, a warning banner appears. Updated the auto-sync feature and made it truly auto, all users now need to do, is just enter a password once. Finally, did a final test of the app, fixed bugs, updated the landing page and the GitHub readme
Ships:
I built DimeTrack, a personal finance & budgeting web app that helps users to track their income, expenses, manage custom spending categories, create budgets & save toward their set goals. The application store data locally, allowing users to use it without creating an account. One of the biggest challenges was managing the app as it grew. Features such as recurring transactions, savings goal contributions, budget tracking & categories all interact with each other. Ensuring that data remained synced required lots of testing. I’m proud that I built DimeTrack to have so many features, I’ve never built anything quite like this. To test DimeTrack: Try to create some categories through the settings menu Add income & expenses Create a savings goal and try to contribute to it Set budget limits Try recurring transactions Search & filter your transactions (transcations can be searched by description, amount or category) Export your transaction data using the CSV export feature (if you only want data from let’s say todays transactions, apply a filter) Refresh the page with all the data, to confirm that everything is saved. No accounts needed!
DimeTrack is an open-source personal finance manager that helps people manage their money entirely in a browser. There are no accounts, subscriptions, servers - everything is stored locally on device. Since my first shipment, the project has grown significantly. It now supports accounts, transfers between them, split purchases, multiple savings goals with contribution history and target dates, budget limits, auto-categorization rules, cash flow calendar with forecasting, monthly spending reports, net worth tracking, customizable categories and accounts, JSON backups, CSV import & export and many other quality of life improvements were made during the many hours spent on this project. The biggest challenge was keeping every feature synced as the project grew. Transactions can affect accounts, budgets, savings goals, recurring payments, reports, charts and basically everything. Adding new functionality means that I have to update existing systems to ensure that everything stays working as intended. But I’m proud to see how much my project has evolved and grown. You should try to: Create multiple accounts and transfer money between them Add income & expense transactions, try the split transaction function Set up a few savings goals with target dates and see how the contribution suggestion feature works Customize categories & accounts with icons and colors Configure budget limits and see the warnings that It gives you when nearing the limits Create an auto-categorization rule Explore the cash flow calendar Try exporting your data to JSON
DimeTrack is an open-source personal finance manager that helps people manage their money entirely in a browser. There are no accounts or subscriptions required and your data is stored locally on your device, with an OPTIONAL cloud sync if you want to access it across devices. Since my second shipment, the project has grown even further. I read every single review and Implemented all the suggestions that were provided. Made an optional cloud syncing feature that allows users to access and use the app across multiple devices. Made a small tutorial/guide that provides a bit more information on how to use DimeTrack. Replaced the Calendar tab with a new Timeline, that shows all your recurring transactions in your selected time interval, your projected balance and an ability to add a safety net and see if your projected balance falls below it in the coming months. Added an ability to manually track your Investments. Even more customization options and many other things. Similar to my previous shipments, the biggest challenge was to keep everything synced. One feature depends on another, so adding new functionality means that I have to update existing systems to ensure that everything stays working. I’ve somehow spent 325 hrs on this project and this will probably be my final shipment. I’ve had a lot of fun working on it and hope to maybe sometime later. For the v3 you should try to: Complete the tutorial (If you have used DimeTrack previously, go to settings -> data -> clear all data or just use incognito window) Add some recurring transactions and test out the Timeline to see your projected balance Explore the new subscriptions tab Set up cloud sync Add some Investments, update their price so see how your portfolio value goes up or down Check out the new financial insights in the Overview tab Use the Command Bar at top middle, you can find some quick actions there, search for any transaction or even create a quick transaction by typing in the search bar - Amount, Description, Existing Category (for example: 5 Coffee Food (must have a category called Food)) Explore the keyboard shortcuts Do a few achievements Create a few transactions and test out the bulk editing options...
|
1792860521.7037585
|
1793724521.7037585
|
|
12008
|
Ace of Sharks Grappler Combat Robot by @Abracadabr Ace of Sharks Grappler Combat Robot by @Abracadabra3 | Stardance...
|
Abracadabra3
|
3
|
25.0
|
129
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-10T20:15:08Z", "hours": 0.0, "multiplier": 5.0, "payout": 2, "blessing": "neutral", "text": "Ace of Sharks 3.1-2 is a grappler style combat robot that grabs and lifts other combat robots into the air and flips them over. Ace of Sharks competes in the Plastic Antweight (1lb) division. Ace of Sharks continues to get better and better after each event. Since the last ship, I have tried to fix the weight issue from last event by reducing the thickness of the wheel guards since they did not take much damage. This ship is because of the new stardust bonus for hardware projects shipped with a new video. I have shipped Ace of Sharks before, but this is the first since the announcement that said you can re-ship with a new video to get your stardust topped up if you leave a note for your reviewer. I have edited a new video and poster for this ship. Thanks! :)", "repo": "https://GitHub.com/abracadabra3/ace_of_sharks", "demo": ""}, {"ship_num": 2, "ts": "2026-08-25T00:19:53Z", "hours": 3.0, "multiplier": 5.0, "payout": 16, "blessing": "neutral", "text": "Ace of Sharks 3.2 is a grappler style 1lb plastic antweight combat robot! It uses a compound grab-and-lift motion powered by a single servo to lift opponents into the air and flip them over. Since the last ship, I have added wheel guards and strengthened the weapon assembly because both of those kept falling off in the last event. I also added more traction, or grip, to the wheels by coating them in rubber cement. A challenge was staying under weight with the additions, but using a lighter plastic for some parts got it to work. The demo video is a highlight video from the tournament, so enjoy watching!", "repo": "https://GitHub.com/abracadabra3/ace_of_sharks", "demo": ""}, {"ship_num": 3, "ts": "2026-07-23T20:52:07Z", "hours": 22.0, "multiplier": 5.0, "payout": 111, "blessing": "neutral", "text": "Ace of Sharks is a grappler combat robot in the 1 lb plastic antweight division. A grappler combat robot is designed to grab and then lift opponents into the air, like Claw Viper from the TV show and YouTube channel BattleBots. Haven’t heard of combat robotics before? It’s basically custom RC cars with custom saws fighting each other to the death. A challenging part of designing this version of Ace of Sharks was having an idea in my head of what I wanted it to look like and figuring out how to create that idea. This is the first time I have done that, so getting this version of Ace of Sharks designed and working is something I am proud of accomplishing. Getting to see it do lift opponents at a tournament was definitely a moment I was proud of as well. The demo video is a highlight video from my first tournament, so enjoy watching!", "repo": "https://GitHub.com/abracadabra3/ace_of_sharks", "demo": ""}]...
|
[{"post_id": 76914, "ts": "202 [{"post_id": 76914, "ts": "2026-10-05T02:22:46Z", "hours": 0.3647, "text": "Shipping again! With the new hardware rules, I can ship Ace of Sharks again with a new video and get more than the (previously) fixed rate of 5 stardust/hour! (Thanks, Hack Club staff! ) While I don’t have another tournament before Stardance ends, I have some changes in mind to make version 3.3. So far, I have decreased the thickness of the wheel guards to reduce weight because I was very close to the limit and the wheel guards didn’t really take any damage. They will still be able to protect the wheels from at least one hit, which could still be enough to save a fight. I will also be looking into liquid latex coatings for the foam wheels, which is something other builders mentioned for traction on wood floor arenas."}, {"post_id": 53311, "ts": "2026-08-23T19:41:46Z", "hours": 0.6167, "text": "It doesn’t break anymore! I brought Ace of Sharks to a tournament and it held up way better than last time. I made the nubs a separate piece so that it won’t break along layer lines anymore, and the weapon assembly never fell of! The wheel guards worked and I broke 0 motors. The rubber cement coating on the wheels worked decent with a new coat after every match. I asked other builders and liquid latex over rubber cement is common. I tied four other robots for 5th place and had a great time talking with and learning from other builders :)"}, {"post_id": 48371, "ts": "2026-08-16T18:06:19Z", "hours": 0.585, "text": "Wheel guards! I added new wheel guards to Ace of Sharks (don’t mind the bright red, it’s just a test with random filament) and tested a bunch of wheel combos. The wheel guard print worked the first time (!), and seems ready. In the Duramic PLA+ filament, Ace of Sharks should be underweight and ready for a possible tournament next week! I tried rubber cement coated wheels to try to improve traction, and it worked really well. I also added rubber bands wrapped around the rubber cement, and that improves traction as well. That is probably what I will do in the tournament, and we will see how it works in a fight. Rubber cement does pick up dust, but a damp cloth will wipe it off and not significantly reduce stickiness. (I forgot to lapse the testing and chassis swap during the Stardance huddle, oops… )"}, {"post_id": 36521, "ts": "2026-07-28T18:04:53Z", "hours": 1.9308, "text": "Next iteration: Ace of Sharks 3.2 So far, I have: Strengthened the weapon assembly Added wheel guards Changed the shape of the shark arm to hopefully reach over drum spinners I also decided I want to improve wheel traction (the grippiness of the wheel) to hopefully get more pushing power. I don’t have time to get funding, design, and iterate a cast polyurethane wheel for this tournament, so I decided I will get rubber cement and experiment with gluing rubber bands, electrical tape (sticky side out), and latex balloons to the foam wheels and see what works best."}, {"post_id": 33692, "ts": "2026-07-23T20:20:22Z", "hours": 1.7231, "text": "Ace of Sharks 3.1 Tournament! Shipwrights, please read the note at the end of this devlog. I brought Ace of Sharks 3.1 to a tournament and it went pretty well! I defiantly found some bugs that need fixed (like the whole weapon assembly falling off) but I was still able to lift other robots and the concept worked great. There was no four wheel drive for this iteration, but that will come soon as well as wheel guards and a stronger attachment point for the lifter assembly. I am ready to ship, with the tournament highlight video as the demo video for Ace of Sharks. Stay tuned to Ace of Sharks as I will continue to improve Ace of Sharks 3.2 to prepare for another tournament before Stardance is over! Edit for shipwrights because I can’t edit the ship post: I hope bonuses will retroactively apply as well as payout increases. I have a logo I make into stickers to give out a tournaments (a new one for v3 and I have three other Ace of Sharks logos I wish I could show you but I can’t add more pictures to a devlog), I edited a highlight video myself (that’s the demo video) and I designed the poster myself. I worked really hard on making this project do well in voting, so I am disappointed at the fixed 5 stardust an hour payout rate. The fixed payout makes sense with the way Stardance is formatted; it’s just disappointing because of how hard I worked on this project, trying to get 15-20 stardust an hour."}, {"post_id": 26932, "ts": "2026-07-12T00:31:25Z", "hours": 6.8061, "text": "4wd with belts is hard. I think most if not all of the time here was spent working on trying to get 4wd to work. The first belt I tried had gear teeth as the belt tooth and they did not mesh around the turn, as well as being way to small. The second one had self-designed timing belt teeth on it (following a tutorial) and it still did not mesh. Then I changed the design and it didn’t fit again, but the new belt and the old pulley DID mesh! So then I had a belt that did mesh but was too tight; I could barely get it on and the motors didn’t turn when the belt was on. Then I made it larger and it turned only when going fast, but not slow. After that, I asked in the combat-robotics Slack channel and got an idea to cut out milk jug caps for friction reducing washers. That made it work when going slow but not when going fast. (Yes, this is opposite of what it did before.) My conclusion is that the regular bolts make too much friction and when the shoulder bolts get here (AFTER the tournament) hopefully the belts will work. Sigh."}, {"post_id": 21118, "ts": "2026-07-02T22:20:02Z", "hours": 1.3506, "text": "I did the first drive test of Ace of Sharks 3.1 and had some fun throwing beanie babies around! The drive works amazing. With previous 2wd versions, driving backwards would not work well at all. This 4wd version fixes that issue, and backwards works just as well as forwards. I also began redesigning a logo for stickers to hand out at the tournament! I like having one with an image of my robot on it, so I got that one redesigned from v2 Ace of Sharks. I had to use some regular M3 bolts instead of the shoulder bolts for the wheel axels, but I think it will be good enough for the tournament!"}, {"post_id": 19285, "ts": "2026-06-30T15:37:28Z", "hours": 3.5619, "text": "So when I went to order the shoulder bolts off Amazon, shipping takes a couple weeks and they will not get here in time for the tournament. Sigh. I did find a listing on Home Depot for regular bolts that might work (or at least be good enough for now). Hopefully I can find something that works for the tournament. I also began making the GitHub repository for Ace of Sharks and wrote a README."}, {"post_id": 14533, "ts": "2026-06-23T17:56:39Z", "hours": 1.9039, "text": "It works! (Mostly!) There are a few silly bugs (like putting the screw pass through hole on the part it should screw into and vise versa) but it is assembled and can lift an old chassis iteration! I fixed the bugs in the CAD file and added some more decorations to the top plate. I was surprised at how few bugs there were in the first iteration. I have not tested the 4wd part yet because I don’t have the shoulder bolts yet, but that will come soon."}, {"post_id": 12865, "ts": "2026-06-21T02:11:39Z", "hours": 0.3283, "text": "Before I started the 3D printing the first robot parts, I discovered three four important things I forgot to add in the CAD. 1. I forgot screw holes to attach the top plate to the chassis! 2. I discovered that the gear on the shark arm was intersecting with the top plate. 3. There should be a wall around the gear inside the chassis to keep wires out of it. While writing this, I realized that I need a slot in the wall to have room for the servo wire."}, {"post_id": 12278, "ts": "2026-06-20T01:40:08Z", "hours": 3.1042, "text": "Five weeks before the next tournament, I decided to start over from scratch and completely redesign Ace of Sharks. Why? Since Ace of Sharks is now four wheel drive, it doesn’t matter whether the drive motors are in the front or the back of the robot. According to the RioBotz book , you want the center of mass as far back on the robot as possible. Reversing the position of all the electronics will move the heavy servo to the back of the robot and do just that. Instead of trying to do this and fix all the stuff that will break in the current Fusion design, it was easier to just start over from scratch. Next up: 3D print the parts and see what obvious problems I missed! — Thank you @IvyMycelia for telling be about Markdown!"}, {"post_id": 7182, "ts": "2026-06-12T00:02:15Z", "hours": 1.9036, "text": "I made Ace of Sharks a four wheel drive robot! I modified a wheel hub from Printables to have a pulley for a belt on it, but Fusion did not like working with a mesh converted to a solid and I could not finish it. So I had to start over with Fingertech twist hubs (files free on their website) and added the pulley to the twist part of the twist hubs. When I was making the belt, I was doing a bunch of math to get the size and it turned out way too big. Then I realized the number I calculated was the circumference and I was using it as the diameter. That fixed it! Next, I will need to print out the parts and see what problems I missed in the CAD."}, {"post_id": 6473, "ts": "2026-06-10T21:48:34Z", "hours": 1.6478, "text": "I made more room in the back of the robot for pinewood derby car weights (to make the robot drive better on two wheels) then changed the robot to have four wheels (which eliminates the need for the weights). I modified the washer part of a wheel hub on Printables to have a pulley for a belt to drive the front wheels from the back wheels. The file imported into Fusion way bigger than it should have been, which made me do it over twice when I realized. Found an Amazon listing for shoulder bolts which will be axels for the front wheels. I also modified the front attachments to touch the floor with the new wheels."}]...
|
Title: Ace of Sharks Grappler Combat Robot by @Abr Title: Ace of Sharks Grappler Combat Robot by @Abracadabra3 | Stardance
Devlogs:
I made more room in the back of the robot for pinewood derby car weights (to make the robot drive better on two wheels) then changed the robot to have four wheels (which eliminates the need for the weights). I modified the washer part of a wheel hub on Printables to have a pulley for a belt to drive the front wheels from the back wheels. The file imported into Fusion way bigger than it should have been, which made me do it over twice when I realized. Found an Amazon listing for shoulder bolts which will be axels for the front wheels. I also modified the front attachments to touch the floor with the new wheels.
I made Ace of Sharks a four wheel drive robot! I modified a wheel hub from Printables to have a pulley for a belt on it, but Fusion did not like working with a mesh converted to a solid and I could not finish it. So I had to start over with Fingertech twist hubs (files free on their website) and added the pulley to the twist part of the twist hubs. When I was making the belt, I was doing a bunch of math to get the size and it turned out way too big. Then I realized the number I calculated was the circumference and I was using it as the diameter. That fixed it! Next, I will need to print out the parts and see what problems I missed in the CAD.
Five weeks before the next tournament, I decided to start over from scratch and completely redesign Ace of Sharks. Why? Since Ace of Sharks is now four wheel drive, it doesn’t matter whether the drive motors are in the front or the back of the robot. According to the RioBotz book , you want the center of mass as far back on the robot as possible. Reversing the position of all the electronics will move the heavy servo to the back of the robot and do just that. Instead of trying to do this and fix all the stuff that will break in the current Fusion design, it was easier to just start over from scratch. Next up: 3D print the parts and see what obvious problems I missed! — Thank you @IvyMycelia for telling be about Markdown!
Before I started the 3D printing the first robot parts, I discovered three four important things I forgot to add in the CAD. 1. I forgot screw holes to attach the top plate to the chassis! 2. I discovered that the gear on the shark arm was intersecting with the top plate. 3. There should be a wall around the gear inside the chassis to keep wires out of it. While writing this, I realized that I need a slot in the wall to have room for the servo wire.
It works! (Mostly!) There are a few silly bugs (like putting the screw pass through hole on the part it should screw into and vise versa) but it is assembled and can lift an old chassis iteration! I fixed the bugs in the CAD file and added some more decorations to the top plate. I was surprised at how few bugs there were in the first iteration. I have not tested the 4wd part yet because I don’t have the shoulder bolts yet, but that will come soon.
So when I went to order the shoulder bolts off Amazon, shipping takes a couple weeks and they will not get here in time for the tournament. Sigh. I did find a listing on Home Depot for regular bolts that might work (or at least be good enough for now). Hopefully I can find something that works for the tournament. I also began making the GitHub repository for Ace of Sharks and wrote a README.
I did the first drive test of Ace of Sharks 3.1 and had some fun throwing beanie babies around! The drive works amazing. With previous 2wd versions, driving backwards would not work well at all. This 4wd version fixes that issue, and backwards works just as well as forwards. I also began redesigning a logo for stickers to hand out at the tournament! I like having one with an image of my robot on it, so I got that one redesigned from v2 Ace of Sharks. I had to use some regular M3 bolts instead of the shoulder bolts for the wheel axels, but I think it will be good enough for the tournament!
4wd with belts is hard. I think most if not all of the time here was spent working on trying to get 4wd to work. The first belt I tried had gear teeth as the belt tooth and they did not mesh around the turn, as well as being way to small. The second one had self-designed timing belt teeth on it (following a tutorial) and it still did not mesh. Then I changed the design and it didn’t fit again, but the new belt and the old pulley DID mesh! So then I had a belt that did mesh but was too tight; I could barely get it on and the motors didn’t turn when the belt was on. Then I made it larger and it turned only when going fast, but not slow. After that, I asked in the combat-robotics Slack channel and got an idea to cut out milk jug caps for friction reducing washers. That made it work when going slow but not when going fast. (Yes, this is opposite of what it did before.) My conclusion is that the regular bolts make too much friction and when the shoulder bolts get here (AFTER the tournament) hopefully the belts will work. Sigh.
Ace of Sharks 3.1 Tournament! Shipwrights, please read the note at the end of this devlog. I brought Ace of Sharks 3.1 to a tournament and it went pretty well! I defiantly found some bugs that need fixed (like the whole weapon assembly falling off) but I was still able to lift other robots and the concept worked great. There was no four wheel drive for this iteration, but that will come soon as well as wheel guards and a stronger attachment point for the lifter assembly. I am ready to ship, with the tournament highlight video as the demo video for Ace of Sharks. Stay tuned to Ace of Sharks as I will continue to improve Ace of Sharks 3.2 to prepare for another tournament before Stardance is over! Edit for shipwrights because I can’t edit the ship post: I hope bonuses will retroactively apply as well as payout increases. I have a logo I make into stickers to give out a tournaments (a new one for v3 and I have three other Ace of Sharks logos I wish I could show you but I can’t add more pictures to a devlog), I edited a highlight video myself (that’s the demo video) and I designed the poster myself. I worked really hard on making this project do well in voting, so I am disappointed at the fixed 5 stardust an hour payout rate. The fixed payout makes sense with the way Stardance is formatted; it’s just disappointing because of how hard I worked on this project, trying to get 15-20 stardust an hour.
Next iteration: Ace of Sharks 3.2 So far, I have: Strengthened the weapon assembly Added wheel guards Changed the shape of the shark arm to hopefully reach over drum spinners I also decided I want to improve wheel traction (the grippiness of the wheel) to hopefully get more pushing power. I don’t have time to get funding, design, and iterate a cast polyurethane wheel for this tournament, so I decided I will get rubber cement and experiment with gluing rubber bands, electrical tape (sticky side out), and latex balloons to the foam wheels and see what works best.
Wheel guards! I added new wheel guards to Ace of Sharks (don’t mind the bright red, it’s just a test with random filament) and tested a bunch of wheel combos. The wheel guard print worked the first time (!), and seems ready. In the Duramic PLA+ filament, Ace of Sharks should be underweight and ready for a possible tournament next week! I tried rubber cement coated wheels to try to improve traction, and it worked really well. I also added rubber bands wrapped around the rubber cement, and that improves traction as well. That is probably what I will do in the tournament, and we will see how it works in a fight. Rubber cement does pick up dust, but a damp cloth will wipe it off and not significantly reduce stickiness. (I forgot to lapse the testing and chassis swap during the Stardance huddle, oops… )
It doesn’t break anymore! I brought Ace of Sharks to a tournament and it held up way better than last time. I made the nubs a separate piece so that it won’t break along layer lines anymore, and the weapon assembly never fell of! The wheel guards worked and I broke 0 motors. The rubber cement coating on the wheels worked decent with a new coat after every match. I asked other builders and liquid latex over rubber cement is common. I tied four other robots for 5th place and had a great time talking with and learning from other builders :)
Shipping again! With the new hardware rules, I can ship Ace of Sharks again with a new video and get more than the (previously) fixed rate of 5 stardust/hour! (Thanks, Hack Club staff! ) While I don’t have another tournament before Stardance ends, I have some changes in mind to make version 3.3. So far, I have decreased the thickness of the wheel guards to reduce weight because I was very close to the limit and the wheel guards didn’t really take any damage. They will still be able to protect the wheels from at least one hit, which could still be enough to save a fight. I will also be looking into liquid latex coatings for the foam wheels, which is something other builders mentioned for traction on wood floor arenas.
Ships:
Ace of Sharks is a grappler combat robot in the 1 lb plastic antweight division. A grappler combat robot is designed to grab and then lift opponents into the air, like Claw Viper from the TV show and YouTube channel BattleBots. Haven’t heard of combat robotics before? It’s basically custom RC cars with custom saws fighting each other to the death. A challenging part of designing this version of Ace of Sharks was having an idea in my head of what I wanted it to look like and figuring out how to create that idea. This is the first time I have done that, so getting this version of Ace of Sharks designed and working is something I am proud of accomplishing. Getting to see it do lift opponents at a tournament was definitely a moment I was proud of as well. The demo video is a highlight video from my first tournament, so enjoy watching!
Ace of Sharks 3.2 is a grappler style 1lb plastic antweight combat robot! It uses a compound grab-and-lift motion powered by a single servo to lift opponents into the air and flip them over. Since the last ship, I have added wheel guards and strengthened the weapon assembly because both of those kept falling off in the last event. I also added more traction, or grip, to the wheels by coating them in rubber cement. A challenge was staying under weight with the additions, but using a lighter plastic for some parts got it to work. The demo video is a highlight video from the tournament, so enjoy watching!
Ace of Sharks 3.1-2 is a grappler style combat robot that grabs and lifts other combat robots into the air and flips them over. Ace of Sharks competes in the Plastic Antweight (1lb) division. Ace of Sharks continues to get better and better after each event. Since the last ship, I have tried to fix the weight issue from last event by reducing the thickness of the wheel guards since they did not take much damage. This ship is because of the new stardust bonus for hardware projects shipped with a new video. I have shipped Ace of Sharks before, but this is the first since the announcement that said you can re-ship with a new video to get your stardust topped up if you leave a note for your reviewer. I have edited a new video and poster for this ship. Thanks! :)...
|
1792828391.4858363
|
1792914791.4858363
|
|
12570
|
CucumberOS by @JoonHyuk | Stardance
|
JoonHyuk
|
3
|
26.0
|
176
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T13:43:33Z", "hours": 9.0, "multiplier": 4.54, "payout": 42, "blessing": "neutral", "text": "Hello! and welcome to my long-term project……. CUCUMBEROS!!! Right now CucumberOS has fascinating possibilities, and I want to share them with them! You will see that I have a total of 3 ships, including this one, so I wanted to show you what I made along the way. For the first ship, I made a Advanced NoteTaker app, and a simple clicker game! The NoteTaker app was advanced since it had a functional sidebar, has functional color changes for each note, and has the ability to add a new note, but with the information pre-chosen (user input), obviously you can pre-chose the name, and I added the clicker game to just increase the fun and give users more entertainment and fun. Moving on to my second ship, I added cursor changer, background settings, a terminal called Cucumber Terminal, and a screentime app to track your screentime. The cursor changer hides your cursor, and then it shows custom cursors and you can change the cursors with the cursor changer app (it also has different image for dragging the window)! Then comes the background settings app, you can change your background settings, which adds fun customizability to the OS (sound short and that is all it does, but trust me, background customizability is a huge thing)! The terminal, Cucumber Terminal, helps you try commands and performs actions that you couldn’t do without the terminal! Type /help to see the commands! The screentime app is literally for tracking your screentime on every app and for the whole OS itself. The coding that went into this thing is HUGE even though it sounds easy, like you have to track the start time, end time, whole time, and stuff like that. Now for my current ship, the third one, you will see that there is one app, and you might think that I am shipping just trying to get easy stardust or something, although I WOULD LIKE A GREAT RATING 😊😊😊,but YOU ARE WRONG! The total hours I spent in this app and the functions that go around this is 9 hours, 8 minutes, and 22 seconds!!! This is 45.70% of the time I spent inside of this project! So why did it take this long? Well, it is a long story but I added folders to the OS, although you can’t store anything in the folders YET, you can go in there directory, you can customize them and add them to the desktop using the standard right click method. You can add folders by clicking on the blank spots anywhere in your background, and you can edit the folders icon and the name by right clicking the folder to see the menu! The link is direct, so it changes right away in Pickle Jar so it is highly reliable. Also, I linked the NoteTaker save files to Pickle Jar, so the red text that says .NoteTaker, contains folders that is linked with the NoteTaker app (although it is only linked to the save folder right now named with .saves)! The Pickle Jar window is even resizable! There is a Fast finder to top all this, if you click the space bar two times fast, you get to open the fast finder and type the app name, and the Fast finder will open it right away for you! Enjoy!", "repo": "https://github.com/coder1529/CucumberOS", "demo": "https://coder1529.github.io/CucumberOS/"}, {"ship_num": 2, "ts": "2026-06-27T03:24:07Z", "hours": 12.0, "multiplier": 11.69, "payout": 134, "blessing": "neutral", "text": "I made a custom web OS named CucumberOS, and it contains a lot of custom features! First it has an advanced note taker app that is able to store, divide, so that you can organize them as you like! Also, there is a custom clicker game, to add the entertainment named Cucumber clicker! There is a custom cursor changer to change the cursor to the ones you like (p.s. I added a new DRAG CURSOR so that you could see that you are dragging the window(this is new))! Now comes the NEW FEATURES!!!!! One of the new features is a background settings. Background settings allows you to be able to customize your background to the image you upload to the screen! Next is the terminal. It let’s you perform actions that were no available in the before OS. Type /help for the commands. Finally the screentime app! The screentime app let’s you monitor all the time you spent on the os total, and the individual time for each of the apps! Enjoy!", "repo": "https://github.com/coder1529/CucumberOS", "demo": "https://coder1529.github.io/CucumberOS/"}, {"ship_num": 3, "ts": "2026-06-10T12:44:36Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built CucumberOS, an interactive web operating system running entirely inside the browser. It replaces a standard website format with a full desktop environment, including an absolute-positioned workspace, a system top bar with a real-time digital clock, and desktop icons. It features a custom window manager that handles window spawning, closing, and dynamic depth reordering (z-index focus management). To meet the advanced app criteria, I built a two-app ecosystem: an advanced NoteTaker featuring a dynamic sidebar list controller, and Cucumber Clicker, an incremental idle tycoon game with a multi-tier upgrade shop driven by an asynchronous automated calculation engine.", "repo": "https://github.com/coder1529/CucumberOS", "demo": "https://coder1529.github.io/CucumberOS/"}]...
|
[{"post_id": 26553, "ts": "202 [{"post_id": 26553, "ts": "2026-07-11T13:12:08Z", "hours": 5.5319, "text": "Whats up guys! Pickle JAR IS ALIVE!!! I’m back with the biggest CucumberOS update YET!!!!! This is going to be our THIRD ship!!!!! Remember how pickle jar was JUST A BLANK CANVAS??? WELL NOT ANY MORE!!! Pickle Jar now features a DIRECT LINK with the files in the NoteTaker app! Mentioning that, Pickle Jar has all the applications that are in the desktop in the desktops tab! The only folder that is dangerous to touch is the red named ones, but it might change in future ships! Also, if you add a folder, you get that folder in the desktop folders in Pickle Jar. Also, I added more customizability to the added folders! You can now change the ICON of the folders and the NAME of the folders! And for the cherry on the cake, it is DIRECTLY LINKED WITH PICKLE JAR meaning that it will change right away! By my next ship, I will improve Pickle Jar, and actually make it able to store something in the folders! Or make it move around! OR IT MIGHT ACTUALLY BE TURNED INTO A REAL OS (BY A LOW PERCENT)! SEE YOU UNTIL THEN! (Sorry that I posted this devlog so late, I had no time to post after every day…) ALSO I HAVE THIS REALLY COOL HOT BAR TYPE OF THING IF YOU DOUBLE TAP SPACEBAR TWO TIMES, SO TRY IT OUT IN MY GITHUB DEPLOYMENY!!! :) GITHUB DEPLOYMENT: https://coder1529.github.io/CucumberOS/"}, {"post_id": 24098, "ts": "2026-07-07T13:41:20Z", "hours": 2.4506, "text": "Whats up guys! This might be the most positive devlog yet… If you see below, you will see that there is a new kind of folder attached to this devlog! This is the first ever screen recording! YAYYY! I ran through the whole code today and finally fixed the error. The error was so easy that I could see that I have a long way to go as a web developer. The problem was the operating signs… (like what is this, a joke? NO IT IS NOT :( ) But on the bright side I fixed it!!!!! :) Also, if you see, you will see that I have a new app! Something called a pickle jar. This is a blank canvas right now, and is going to work as a finder app, file explorer in windows, later on! I made the finder app size changeable, maybe I would use this in other apps but no guarantee, and the vertical bar in the middle changes size due to the vertical size of the app. You can also add files now, although there is nothing to do with yet. But this was huge progress and I really like what I have done today. PLUS I REALLY LIKE THE TRANSITION BETWEEN THE NOT CLICKED AND CLICKED VERSION OF THE DESKTOP IN PICKLE JAR!!!!!! :):):):):):):):):):):):) Same as always, play around in my github deployment!!! (Sorry that I didn’t erase the pickle jar app from the start and there is no way to exit. I had no time to do this. Sorry again.) GITHUB DEPLOYMENT: https://coder1529.github.io/CucumberOS/"}, {"post_id": 23440, "ts": "2026-07-06T12:37:23Z", "hours": 1.2072, "text": "Whats up guys! I’m back with cucumberOS! ANDD a new problem strikes… I came back to cucumberOS thinking to actually making a OS like precise ones. SOOO I just came back to it again. I want to add something called a Pickle Jar. Pickle Jar is a custom finder for CucumberOS, and first I wanted to try adding files to the background, so I started writing the right click logic, but!!!! the problem struck. You know how when you do the right click in any OS, you need to be able to click on the menus when the pop up appears right? But when I clicked on the right click popup… you guessed it it disappeared. That was my first problem. I worked on it for one hour, and fixed it. BUUUUUTTT then the new problem came and it was that it was possible to right click on NORMAL APPS! so then it would ruin the whole feature! I just became so mad at this and will come back next time with a solution. By then you can play around in my github deployment!!! :) GITHUB DEPLOYMENT: https://coder1529.github.io/CucumberOS/"}, {"post_id": 16672, "ts": "2026-06-27T03:16:59Z", "hours": 1.0472, "text": "Beat the terminal error! AND… I finally won the war against the terminal error! I put the terminal in a that has the ability to be able to be scrolled and put that below the header!!! I also added a CUSTOM DRAG CURSOR to each of the CUSTOM CURSORS! So yeah, play around in my github deployment! :) GITHUB DEPLOYMENT: https://coder1529.github.io/CucumberOS/"}, {"post_id": 16329, "ts": "2026-06-26T15:54:39Z", "hours": 3.6481, "text": "Finally Finished my 3 features! BUT I finally finished my 3 features and was testing out the whole thing, BUT I found out that the terminal’s heading overflows! This was my first time hitting problems like this in this project so I spent 1 hour fixing this. The winner? You guessed it, it was the error. I still can’t fix this! I will come back with the fixed version of CucumberOS in the next devlog. Thanks for reading!"}, {"post_id": 15633, "ts": "2026-06-25T12:55:42Z", "hours": 1.0225, "text": "Made a new background settings app! Now you can set backgrounds! ( I used my stardance picture as a background image rn :) )"}, {"post_id": 9109, "ts": "2026-06-15T07:23:35Z", "hours": 1.5272, "text": "FINISHED CURSOR CHANGER! Now you can change the cursors!"}, {"post_id": 8574, "ts": "2026-06-14T08:10:43Z", "hours": 1.1978, "text": "FIXED ALL THE LOGIC! :)"}, {"post_id": 8076, "ts": "2026-06-13T14:14:53Z", "hours": 1.0514, "text": "Rewrote JS file but now it doesn’t work IT DOESNT CLICK!!! ㅠㅠㅠㅠㅠㅠ"}, {"post_id": 7315, "ts": "2026-06-12T06:04:59Z", "hours": 2.0231, "text": "REWRITING CODE ㅠㅠ"}, {"post_id": 6202, "ts": "2026-06-10T12:41:17Z", "hours": 0.2611, "text": "FINISHED THE CUCUMBER OS Finished up the Cucumber Clicker and added more shop items!"}, {"post_id": 6173, "ts": "2026-06-10T11:41:15Z", "hours": 0.7869, "text": "Finished the CucumberOS up and is Done: ##added Cucumber clicker ##Enhanced Note Taker app a lot with the help of Gemini"}, {"post_id": 5569, "ts": "2026-06-09T12:14:24Z", "hours": 4.2903, "text": "🥒 CucumberOS: Devlog #1 (4 Hours Logged) Status: Around 50% done! The desktop ecosystem is live and looking clean. What I accomplished in these 4 hours: The OS UI & Theme: I designed a sleek top navigation bar displaying the OS name (“CucumberOS”), active window title, custom branding (“CUCUMBERSI”), and a live system clock. I paired it with an epic space/planet background. Welcome Modal: Programmed the initial greeting window (“Welcome to CucumberOS! Introduction”) with smooth, modern rounded corners and a clean typography layout. Desktop App Shortcuts: Created and positioned the custom-themed “NoteTaker” desktop icon in the top left corner, complete with a personalized cucumber-orange/green icon design. The Notepad App Logic: Spent the last hour building out the functional core of the NoteTaker app. The container structure is ready; I’m currently hooking up the finishing touches so users can launch it and write notes seamlessly.The biggest roadblock:Getting the absolute positioning of the desktop icon layout to cooperate with the upper navigation bar padding took way longer than expected. Had some annoying overlap bugs where the icons would slide under the top bar, but managed to fix the CSS grid/flex bounds. Next steps:Polishing up the final internal text-editor logic for the NoteTaker app, mapping the double-click event listener to the icon so the window spawns dynamically, and getting the drag-and-drop window positioning completely flawless.Check out the current state of CucumberOS below! 👇"}]...
|
Title: CucumberOS by @JoonHyuk | Stardance
Devlog Title: CucumberOS by @JoonHyuk | Stardance
Devlogs:
🥒 CucumberOS: Devlog #1 (4 Hours Logged) Status: Around 50% done! The desktop ecosystem is live and looking clean. What I accomplished in these 4 hours: The OS UI & Theme: I designed a sleek top navigation bar displaying the OS name (“CucumberOS”), active window title, custom branding (“CUCUMBERSI”), and a live system clock. I paired it with an epic space/planet background. Welcome Modal: Programmed the initial greeting window (“Welcome to CucumberOS! Introduction”) with smooth, modern rounded corners and a clean typography layout. Desktop App Shortcuts: Created and positioned the custom-themed “NoteTaker” desktop icon in the top left corner, complete with a personalized cucumber-orange/green icon design. The Notepad App Logic: Spent the last hour building out the functional core of the NoteTaker app. The container structure is ready; I’m currently hooking up the finishing touches so users can launch it and write notes seamlessly.The biggest roadblock:Getting the absolute positioning of the desktop icon layout to cooperate with the upper navigation bar padding took way longer than expected. Had some annoying overlap bugs where the icons would slide under the top bar, but managed to fix the CSS grid/flex bounds. Next steps:Polishing up the final internal text-editor logic for the NoteTaker app, mapping the double-click event listener to the icon so the window spawns dynamically, and getting the drag-and-drop window positioning completely flawless.Check out the current state of CucumberOS below! 👇
Finished the CucumberOS up and is Done: ##added Cucumber clicker ##Enhanced Note Taker app a lot with the help of Gemini
FINISHED THE CUCUMBER OS Finished up the Cucumber Clicker and added more shop items!
REWRITING CODE ㅠㅠ
Rewrote JS file but now it doesn’t work IT DOESNT CLICK!!! ㅠㅠㅠㅠㅠㅠ
FIXED ALL THE LOGIC! :)
FINISHED CURSOR CHANGER! Now you can change the cursors!
Made a new background settings app! Now you can set backgrounds! ( I used my stardance picture as a background image rn :) )
Finally Finished my 3 features! BUT I finally finished my 3 features and was testing out the whole thing, BUT I found out that the terminal’s heading overflows! This was my first time hitting problems like this in this project so I spent 1 hour fixing this. The winner? You guessed it, it was the error. I still can’t fix this! I will come back with the fixed version of CucumberOS in the next devlog. Thanks for reading!
Beat the terminal error! AND… I finally won the war against the terminal error! I put the terminal in a that has the ability to be able to be scrolled and put that below the header!!! I also added a CUSTOM DRAG CURSOR to each of the CUSTOM CURSORS! So yeah, play around in my github deployment! :) GITHUB DEPLOYMENT: https://coder1529.github.io/CucumberOS/
Whats up guys! I’m back with cucumberOS! ANDD a new problem strikes… I came back to cucumberOS thinking to actually making a OS like precise ones. SOOO I just came back to it again. I want to add something called a Pickle Jar. Pickle Jar is a custom finder for CucumberOS, and first I wanted to try adding files to the background, so I started writing the right click logic, but!!!! the problem struck. You know how when you do the right click in any OS, you need to be able to click on the menus when the pop up appears right? But when I clicked on the right click popup… you guessed it it disappeared. That was my first problem. I worked on it for one hour, and fixed it. BUUUUUTTT then the new problem came and it was that it was possible to right click on NORMAL APPS! so then it would ruin the whole feature! I just became so mad at this and will come back next time with a solution. By then you can play around in my github deployment!!! :) GITHUB DEPLOYMENT: https://coder1529.github.io/CucumberOS/
Whats up guys! This might be the most positive devlog yet… If you see below, you will see that there is a new kind of folder attached to this devlog! This is the first ever screen recording! YAYYY! I ran through the whole code today and finally fixed the error. The error was so easy that I could see that I have a long way to go as a web developer. The problem was the operating signs… (like what is this, a joke? NO IT IS NOT :( ) But on the bright side I fixed it!!!!! :) Also, if you see, you will see that I have a new app! Something called a pickle jar. This is a blank canvas right now, and is going to work as a finder app, file explorer in windows, later on! I made the finder app size changeable, maybe I would use this in other apps but no guarantee, and the vertical bar in the middle changes size due to the vertical size of the app. You can also add files now, although there is nothing to do with yet. But this was huge progress and I really like what I have done today. PLUS I REALLY LIKE THE TRANSITION BETWEEN THE NOT CLICKED AND CLICKED VERSION OF THE DESKTOP IN PICKLE JAR!!!!!! :):):):):):):):):):):):) Same as always, play around in my github deployment!!! (Sorry that I didn’t erase the pickle jar app from the start and there is no way to exit. I had no time to do this. Sorry again.) GITHUB DEPLOYMENT: https://coder1529.github.io/CucumberOS/
Whats up guys! Pickle JAR IS ALIVE!!! I’m back with the biggest CucumberOS update YET!!!!! This is going to be our THIRD ship!!!!! Remember how pickle jar was JUST A BLANK CANVAS??? WELL NOT ANY MORE!!! Pickle Jar now features a DIRECT LINK with the files in the NoteTaker app! Mentioning that, Pickle Jar has all the applications that are in the desktop in the desktops tab! The only folder that is dangerous to touch is the red named ones, but it might change in future ships! Also, if you add a folder, you get that folder in the desktop folders in Pickle Jar. Also, I added more customizability to the added folders! You can now change the ICON of the folders and the NAME of the folders! And for the cherry on the cake, it is DIRECTLY LINKED WITH PICKLE JAR meaning that it will change right away! By my next ship, I will improve Pickle Jar, and actually make it able to store something in the folders! Or make it move around! OR IT MIGHT ACTUALLY BE TURNED INTO A REAL OS (BY A LOW PERCENT)! SEE YOU UNTIL THEN! (Sorry that I posted this devlog so late, I had no time to post after every day…) ALSO I HAVE THIS REALLY COOL HOT BAR TYPE OF THING IF YOU DOUBLE TAP SPACEBAR TWO TIMES, SO TRY IT OUT IN MY GITHUB DEPLOYMENY!!! :) GITHUB DEPLOYMENT: https://coder1529.github.io/CucumberOS/
Ships:
I built CucumberOS, an interactive web operating system running entirely inside the browser. It replaces a standard website format with a full desktop environment, including an absolute-positioned workspace, a system top bar with a real-time digital clock, and desktop icons. It features a custom window manager that handles window spawning, closing, and dynamic depth reordering (z-index focus management). To meet the advanced app criteria, I built a two-app ecosystem: an advanced NoteTaker featuring a dynamic sidebar list controller, and Cucumber Clicker, an incremental idle tycoon game with a multi-tier upgrade shop driven by an asynchronous automated calculation engine.
I made a custom web OS named CucumberOS, and it contains a lot of custom features! First it has an advanced note taker app that is able to store, divide, so that you can organize them as you like! Also, there is a custom clicker game, to add the entertainment named Cucumber clicker! There is a custom cursor changer to change the cursor to the ones you like (p.s. I added a new DRAG CURSOR so that you could see that you are dragging the window(this is new))! Now comes the NEW FEATURES!!!!! One of the new features is a background settings. Background settings allows you to be able to customize your background to the image you upload to the screen! Next is the terminal. It let’s you perform actions that were no available in the before OS. Type /help for the commands. Finally the screentime app! The screentime app let’s you monitor all the time you spent on the os total, and the individual time for each of the apps! Enjoy!
Hello! and welcome to my long-term project……. CUCUMBEROS!!! Right now CucumberOS has fascinating possibilities, and I want to share them with them! You will see that I have a total of 3 ships, including this one, so I wanted to show you what I made along the way. For the first ship, I made a Advanced NoteTaker app, and a simple clicker game! The NoteTaker app was advanced since it had a functional sidebar, has functional color changes for each note, and has the ability to add a new note, but with the information pre-chosen (user input), obviously you can pre-chose the name, and I added the clicker game to just increase the fun and give users more entertainment and fun. Moving on to my second ship, I added cursor changer, background settings, a terminal called Cucumber Terminal, and a screentime app to track your screentime. The cursor changer hides your cursor, and then it shows custom cursors and you can change the cursors with the cursor changer app (it also has different image for dragging the window)! Then comes the background settings app, you can change your background settings, which adds fun customizability to the OS (sound short and that is all it does, but trust me, background customizability is a huge thing)! The terminal, Cucumber Terminal, helps you try commands and performs actions that you couldn’t do without the terminal! Type /help to see the commands! The screentime app is literally for tracking your screentime on every app and for the whole OS itself. The coding that went into this thing is HUGE even though it sounds easy, like you have to track the start time, end time, whole time, and stuff like that. Now for my current ship, the third one, you will see that there is one app, and you might think that I am shipping just trying to get easy stardust or something, although I WOULD LIKE A GREAT RATING 😊😊😊,but YOU ARE WRONG! The total hours I spent in this app and the functions that go around this is 9 hours, 8 minutes, and 22 seconds!!! This is 45.70% of the time I spent inside of this project! So why did it take this long? Well, it is a long story but I added folders to the OS, although you can’t store anything in the folders YET, you can go in there directory, you can customize them and add them to the desktop using the standard right click method. You can add folders by clicking on the blank spots anywhere in your background, and you can edit the folders icon and the name by right clicking the folder to see the menu! The link is direct, so it changes right away in Pickle Jar so it is highly reliable. Also, I linked the NoteTaker save files to Pickle Jar, so the red text that says .NoteTaker, contains folders that is linked with the NoteTaker app (although it is only linked to the save folder right now named with .saves)! The Pickle Jar window is even resizable! There is a Fast finder to top all this, if you click the space bar two times fast, you get to open the fast finder and type the app name, and the Fast finder will open it right away for you! Enjoy!...
|
1792821408.8944502
|
1792907808.8944502
|
|
13560
|
Biggy OS by @LoginlikeLogan | Stardance
|
LoginlikeLogan
|
3
|
66.97
|
330
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T02:50:14Z", "hours": 20.0, "multiplier": 8.97, "payout": 180, "blessing": "neutral", "text": "So guys, Ive updated the os with mutiple new apps like the weather, music, calculator, paint, browser, and minecraft apps! Test it out!", "repo": "https://github.com/Logdegret/Biggy-Cheese-OS/", "demo": "https://logdegret.github.io/Biggy-Cheese-OS"}, {"ship_num": 2, "ts": "2026-08-23T13:58:23Z", "hours": 14.0, "multiplier": 10.42, "payout": 150, "blessing": "neutral", "text": "I finally finished my webos and I am happy with what ive made! There was lots that i struggled with. Hopefully this can earn a super star!", "repo": "https://github.com/Logdegret/Biggy-Cheese-OS/", "demo": "https://logdegret.github.io/Biggy-Cheese-OS"}, {"ship_num": 3, "ts": "2026-07-30T07:28:58Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a webos based on the biggy cheese meme. I found the video player extra hard. Hopefully it meets the requirements?", "repo": "https://github.com/Logdegret/Biggy-Cheese-OS/", "demo": "https://logdegret.github.io/Biggy-Cheese-OS"}]...
|
[{"post_id": 65124, "ts": "202 [{"post_id": 65124, "ts": "2026-09-10T01:25:38Z", "hours": 4.1136, "text": "Working Up to the Big Leagues… So ive made a new window called finder and It’s pretty basic so far. It was about 330 lines of js.. I will probably replace the standby/placeholder emojis with svgs so it doesn’t look out of theme!"}, {"post_id": 64469, "ts": "2026-09-08T21:47:57Z", "hours": 0.6869, "text": "A sad devlog… so I couldn’t fix it and I had to use a bit of AI to fully debug. it turns out, the calculator app was hijacking keystrokes and I had a single broken line of code in app.js. But now it works!"}, {"post_id": 64436, "ts": "2026-09-08T20:12:51Z", "hours": 14.1656, "text": "I have been working super hard and trying to fix bugs and heavily avoiding ai. But for some reason the website is breaking apart and no longer loading."}, {"post_id": 62618, "ts": "2026-09-06T02:46:53Z", "hours": 1.0931, "text": "Final Additions! Ive added a modified file of eaglercraft into the biggy os and it is now called Biggy OS"}, {"post_id": 61193, "ts": "2026-09-04T00:26:40Z", "hours": 8.1094, "text": "Ive added 3 new apps!! A working browser, calculator, and paint app!!! windows were not working properly so I had to make some ajustments and fix it. Took me some time.. haha"}, {"post_id": 59859, "ts": "2026-09-01T20:41:46Z", "hours": 9.2781, "text": "Tutorial has been added! Guys Guess what? Ive made a tutorial on how to get started on the os and i have made backgrounds gif possible. The tutorial kinda gave me a bit of trouble with bugs so i took lots of time debugging. Im also working on something big…."}, {"post_id": 59012, "ts": "2026-08-31T16:23:19Z", "hours": 1.5581, "text": "Guys I am BACK!! So far ive been tweaking a few things like the location bug, it was supposed to popup when you clicked download for the weather app. But I guess i didn’t catch that.. Anyways Here are some new backgrounds, they’re 4k!!"}, {"post_id": 53063, "ts": "2026-08-23T13:55:30Z", "hours": 1.5417, "text": "MY LAST DEVLOG!!! Hey guys, its been a great run! ive added a music app and a few customizable widgets but which can only be found by something you need to explore. Thank you guys so much for support!"}, {"post_id": 52333, "ts": "2026-08-22T13:19:21Z", "hours": 0.5256, "text": "Ive added a new app that you can download! i am currently thinking of stopping this project although it has been a blast making this project."}, {"post_id": 51796, "ts": "2026-08-21T17:09:52Z", "hours": 2.1492, "text": "LOT OF NEW BIG THINGS Ive added two new windows, notes and the store. nothing can be donwloaded yet but i am currently working on that. Ive added resizing!! follow allong and this shall be a super star project!"}, {"post_id": 50661, "ts": "2026-08-19T22:48:17Z", "hours": 0.3942, "text": "A fun cinematic opening!!! I’ve ai coded me a simple opening while i added the sound for it. I hate to say but i was a little lazy on this one since i don’t really know much on animation in websites."}, {"post_id": 50640, "ts": "2026-08-19T22:01:17Z", "hours": 2.5006, "text": "A super Annoying Terminal This Terminal is super annoying, spacing, css and divs are driving me crazy! Everytime i clicked on this terminal it used to break the screen… Not anymore! Finally the spacing and terminal is close to perfect. I will now be focusing on a cinematic loading screen."}, {"post_id": 48209, "ts": "2026-08-16T14:40:19Z", "hours": 2.4889, "text": "LOTS OF STUFF ive added a to do list with a check box so you can remind yourself what to do. Ive also added a terminal! its a work in progress but im getting there! i really want this to be a super star project so im putting in all my effort!"}, {"post_id": 46924, "ts": "2026-08-14T14:16:12Z", "hours": 0.3458, "text": "Ive tuned up the meme window to filter them and frame them"}, {"post_id": 45943, "ts": "2026-08-12T19:11:29Z", "hours": 2.4656, "text": "I added a lot so far, i added a meme tab and a to do tab. meme tab is done but not the todo."}, {"post_id": 41329, "ts": "2026-08-05T14:04:58Z", "hours": 0.4178, "text": "Ive finnaly fixed this stupid window that did not want to cooperate. I actaully suffered through this. Well, hope that some of you will like it. Also heres the progress so far: Im going to be changing meme generator to daily meme. I will be coding in python for it. Also If anyone wants to work with me to make a biggy cheeze type game, please feel free to reach out to me"}, {"post_id": 39719, "ts": "2026-08-02T21:11:11Z", "hours": 0.635, "text": "I drew a new icon for a daily meme. How do yall like it? also my game window is soooooo broken. it stretches so weird… I need someone to design a game for me since idk how to make game. Anyone?"}, {"post_id": 38749, "ts": "2026-08-01T09:37:58Z", "hours": 0.9711, "text": "added fullscreen and a game that is animal themed. NOT MY GAME"}, {"post_id": 37450, "ts": "2026-07-30T06:23:48Z", "hours": 1.0489, "text": "Made A new window / app for an about me! This is probably the final devlog until the first ship. Thank you guys so much for the support and hopefully i can get to the next OS mission.."}, {"post_id": 36272, "ts": "2026-07-28T08:23:05Z", "hours": 0.8856, "text": "I added another modular window that can change backgrounds"}, {"post_id": 34540, "ts": "2026-07-25T10:38:04Z", "hours": 0.8489, "text": "added apps!"}, {"post_id": 34517, "ts": "2026-07-25T09:34:34Z", "hours": 0.3906, "text": "I added a custom cheese cursor that I drew!"}, {"post_id": 34502, "ts": "2026-07-25T08:38:58Z", "hours": 2.3539, "text": "I scrapped the ugly background and added a physical clock with a rotating joke/statement. Also added a fun loading screen"}, {"post_id": 33948, "ts": "2026-07-24T09:02:04Z", "hours": 2.0789, "text": "Many Things Have Been Added! Ive added a rotating joke/statement that changes everytime you reload, a clock(that will be improved), and a clock widget/window that I want to be a permenant widget. Wish me luck! here are some pictures and the progress so far!"}, {"post_id": 31251, "ts": "2026-07-19T14:44:53Z", "hours": 3.2208, "text": "I have added a draggable window for the biggy cheeze moment with a custom player"}, {"post_id": 30562, "ts": "2026-07-18T07:29:12Z", "hours": 1.0281, "text": "We have went back to biggy cheeze Sorry for changing it! I am going to restart from scratch"}, {"post_id": 8723, "ts": "2026-06-14T14:20:53Z", "hours": 0.7217, "text": "I change my theme Lets Go Knicks"}, {"post_id": 7172, "ts": "2026-06-11T23:47:16Z", "hours": 1.2631, "text": "added stardance link, fixed image, and more text. Im struggling with this… lol"}, {"post_id": 5276, "ts": "2026-06-09T00:07:01Z", "hours": 0.5161, "text": "Started my own webos via guide(idk why image doesn’t work) help?? it works on index.html locally…"}]...
|
Title: Biggy OS by @LoginlikeLogan | Stardance
De Title: Biggy OS by @LoginlikeLogan | Stardance
Devlogs:
Started my own webos via guide(idk why image doesn’t work) help?? it works on index.html locally…
added stardance link, fixed image, and more text. Im struggling with this… lol
I change my theme Lets Go Knicks
We have went back to biggy cheeze Sorry for changing it! I am going to restart from scratch
I have added a draggable window for the biggy cheeze moment with a custom player
Many Things Have Been Added! Ive added a rotating joke/statement that changes everytime you reload, a clock(that will be improved), and a clock widget/window that I want to be a permenant widget. Wish me luck! here are some pictures and the progress so far!
I scrapped the ugly background and added a physical clock with a rotating joke/statement. Also added a fun loading screen
I added a custom cheese cursor that I drew!
added apps!
I added another modular window that can change backgrounds
Made A new window / app for an about me! This is probably the final devlog until the first ship. Thank you guys so much for the support and hopefully i can get to the next OS mission..
added fullscreen and a game that is animal themed. NOT MY GAME
I drew a new icon for a daily meme. How do yall like it? also my game window is soooooo broken. it stretches so weird… I need someone to design a game for me since idk how to make game. Anyone?
Ive finnaly fixed this stupid window that did not want to cooperate. I actaully suffered through this. Well, hope that some of you will like it. Also heres the progress so far: Im going to be changing meme generator to daily meme. I will be coding in python for it. Also If anyone wants to work with me to make a biggy cheeze type game, please feel free to reach out to me
I added a lot so far, i added a meme tab and a to do tab. meme tab is done but not the todo.
Ive tuned up the meme window to filter them and frame them
LOTS OF STUFF ive added a to do list with a check box so you can remind yourself what to do. Ive also added a terminal! its a work in progress but im getting there! i really want this to be a super star project so im putting in all my effort!
A super Annoying Terminal This Terminal is super annoying, spacing, css and divs are driving me crazy! Everytime i clicked on this terminal it used to break the screen… Not anymore! Finally the spacing and terminal is close to perfect. I will now be focusing on a cinematic loading screen.
A fun cinematic opening!!! I’ve ai coded me a simple opening while i added the sound for it. I hate to say but i was a little lazy on this one since i don’t really know much on animation in websites.
LOT OF NEW BIG THINGS Ive added two new windows, notes and the store. nothing can be donwloaded yet but i am currently working on that. Ive added resizing!! follow allong and this shall be a super star project!
Ive added a new app that you can download! i am currently thinking of stopping this project although it has been a blast making this project.
MY LAST DEVLOG!!! Hey guys, its been a great run! ive added a music app and a few customizable widgets but which can only be found by something you need to explore. Thank you guys so much for support!
Guys I am BACK!! So far ive been tweaking a few things like the location bug, it was supposed to popup when you clicked download for the weather app. But I guess i didn’t catch that.. Anyways Here are some new backgrounds, they’re 4k!!
Tutorial has been added! Guys Guess what? Ive made a tutorial on how to get started on the os and i have made backgrounds gif possible. The tutorial kinda gave me a bit of trouble with bugs so i took lots of time debugging. Im also working on something big….
Ive added 3 new apps!! A working browser, calculator, and paint app!!! windows were not working properly so I had to make some ajustments and fix it. Took me some time.. haha
Final Additions! Ive added a modified file of eaglercraft into the biggy os and it is now called Biggy OS
I have been working super hard and trying to fix bugs and heavily avoiding ai. But for some reason the website is breaking apart and no longer loading.
A sad devlog… so I couldn’t fix it and I had to use a bit of AI to fully debug. it turns out, the calculator app was hijacking keystrokes and I had a single broken line of code in app.js. But now it works!
Working Up to the Big Leagues… So ive made a new window called finder and It’s pretty basic so far. It was about 330 lines of js.. I will probably replace the standby/placeholder emojis with svgs so it doesn’t look out of theme!
Ships:
I made a webos based on the biggy cheese meme. I found the video player extra hard. Hopefully it meets the requirements?
I finally finished my webos and I am happy with what ive made! There was lots that i struggled with. Hopefully this can earn a super star!
So guys, Ive updated the os with mutiple new apps like the weather, music, calculator, paint, browser, and minecraft apps! Test it out!...
|
1792878595.6829658
|
1793742595.6829658
|
|
13925
|
J.A.R.V.I.S. by @sarveshwaran_k2008 | Stardance
|
sarveshwaran_k2008
|
3
|
6.0
|
52
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T08:24:25Z", "hours": 2.0, "multiplier": 14.91, "payout": 31, "blessing": "neutral", "text": "What’s New in v7.0? Modular System Payload Added: Implemented four high-demand operational tools directly into the desktop environment framework: Tactical Countdown Timer: A clean standalone execution utility supporting instant state shifts ([ ENGAGE ] / [ ABORT ]). Live Diagnostics: Connected tracking routines directly to network speed streams and live client hardware battery capacity readouts. Initiate Audio Link: A client-side disk reader that mounts and handles local tracks seamlessly without remote validation barriers. Sys Calculator: A mathematical parsing utility utilizing a grid layout matching our main system shell design. Taskbar & Dock Optimization: Reworked icon layout properties, introducing unified square containers featuring neon-pink borders and hover state tracking. Malware Spirit Calibration: Relocated the pet system away from absolute percentage positions to relative alignment metrics. The companion now anchors right above the centered dock layout safely to stop layout overlap glitches completely.", "repo": "https://github.com/Sarveshwaran20/StarkOS-v1.0", "demo": "https://sarveshwaran20.github.io/StarkOS-v1.0/"}, {"ship_num": 2, "ts": "2026-06-21T10:21:23Z", "hours": 1.0, "multiplier": 15.23, "payout": 21, "blessing": "neutral", "text": "I built StarkOS, a fully functional, browser-based simulated operating system engineered entirely from scratch without frameworks using vanilla HTML, CSS, and JavaScript. Originally themed around a clean Iron Man HUD, I recently overhauled the project into a gritty “Cyberpunk Damaged” aesthetic complete with CRT monitor flickers, scanlines, and a macOS-style floating bottom dock with dynamic hover animations. The OS features a custom window manager with draggable, glassmorphic interfaces and a J.A.R.V.I.S. command terminal that controls integrated apps like a Schematics analyzer with holographic filters, a System Logs editor that exports real text files directly to a local drive, and a newly added HTML5 Canvas “Neural Snake” arcade game. Developing this native desktop experience presented unique mathematical and UI challenges, particularly calculating smooth window drag coordinates, programming boundary-detection geometry for the custom right-click menu, and bypassing Canvas color-rendering quirks for the game loop, but overcoming these technical hurdles as a solo developer is what I am most proud of. To test it out, users simply open the index.html file, grant location access to initialize the OpenWeather API satellite link, and can immediately use the dock’s global web search or type terminal commands like play snake, protocol 84 to trigger a screen-shaking self-destruct sequence, or avengers assemble to uncover hidden ASCII Easter eggs.", "repo": "https://github.com/Sarveshwaran20/StarkOS-v1.0", "demo": "https://sarveshwaran20.github.io/StarkOS-v1.0/"}, {"ship_num": 3, "ts": "2026-06-11T06:51:39Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built StarkOS, a fully functional, browser-based simulated operating system themed around an Iron Man HUD, engineered entirely from scratch without frameworks using vanilla HTML, CSS, and JavaScript. The project features a custom window manager with draggable, glassmorphic interfaces and a J.A.R.V.I.S. command terminal that controls integrated apps like a Schematics analyzer with holographic filters and clickable coordinate pins, as well as a System Logs editor that utilizes JavaScript Blobs to export real text files directly to a user’s local drive. Developing this native desktop experience inside a browser presented unique mathematical and UI challenges, particularly calculating smooth window drag coordinates, programming boundary-detection geometry for the custom right-click menu to keep it on-screen, and handling persistent local file generation, but overcoming these technical hurdles as a solo developer is what I am most proud of. To test it out, users simply open the index.html file, grant location access to initialize the OpenWeather API satellite link and personalized city-detecting terminal greeting, type commands like help or open schematics in the mainframe, and test out the interactive UI and file export features.", "repo": "https://github.com/Sarveshwaran20/StarkOS-v1.0", "demo": "https://sarveshwaran20.github.io/StarkOS-v1.0/"}]...
|
[{"post_id": 22700, "ts": "202 [{"post_id": 22700, "ts": "2026-07-05T08:23:07Z", "hours": 2.0608, "text": "What’s New in v7.0?Modular System Payload Added: Implemented four high-demand operational tools directly into the desktop environment framework:Tactical Countdown Timer: A clean standalone execution utility supporting instant state shifts ([ ENGAGE ] / [ ABORT ]).Live Diagnostics: Connected tracking routines directly to network speed streams and live client hardware battery capacity readouts.Initiate Audio Link: A client-side disk reader that mounts and handles local tracks seamlessly without remote validation barriers.Sys Calculator: A mathematical parsing utility utilizing a grid layout matching our main system shell design.Taskbar & Dock Optimization: Reworked icon layout properties, introducing unified square containers featuring neon-pink borders and hover state tracking.Malware Spirit Calibration: Relocated the pet system away from absolute percentage positions to relative alignment metrics. The companion now anchors right above the centered dock layout safely to stop layout overlap glitches completely."}, {"post_id": 11245, "ts": "2026-06-18T12:15:28Z", "hours": 1.3897, "text": "In this latest sprint, I completely overhauled the StarkOS interface to address feedback that it looked too generic, pivoting from a clean corporate HUD to a highly customized “Cyberpunk Damaged” aesthetic complete with a CRT flicker, scanlines, and a neon color palette. I stripped out the old side-navigation and engineered a macOS-style floating bottom dock featuring bounding hover animations and a functional Spotlight-style global web search. To inject more personality into the OS, I integrated several custom interactive features: a fully playable HTML5 Canvas “Neural Snake” arcade game with a dynamic restart UI, a cinematic screen-shaking “Protocol 84” self-destruct sequence, and a hidden Avengers ASCII Easter egg triggered via the mainframe. Wrapping up the session, I squashed layout caching issues, widened the terminal for better readability, and refactored the game loop to bypass Canvas color rendering bugs, resulting in a gritty, native-feeling desktop environment ready for re-certification."}, {"post_id": 6693, "ts": "2026-06-11T06:46:02Z", "hours": 0.4719, "text": "Today’s session focused on bridging the gap between the offline sandbox and real-world data. I integrated the HTML5 Geolocation API to ping coordinates upon system boot, feeding that exact latitude and longitude directly into a live OpenWeather API fetch request. This allowed me to project real-time local temperature, meteorological conditions, and the current city directly into the central Arc Reactor HUD overlay. To tie the entire ecosystem together and enhance the immersive J.A.R.V.I.S. experience, I engineered an automated welcome protocol within the terminal mainframe. This sequence triggers instantly upon a successful location lock, outputting a dynamic security clearance message customized for the detected city. The entire OS now feels significantly more alive, perfectly complementing the rock-solid local storage and offline blueprint capabilities established in earlier sprints."}, {"post_id": 6109, "ts": "2026-06-10T08:41:07Z", "hours": 1.3014, "text": "Today’s developmental sprint successfully overhauled the system’s data architecture, transforming temporary network processes into permanent local workflows. In the Schematics layout, I pruned the tactical archives database to focus exclusively on Counter-Strike and Call of Duty: Mobile, transitioning all map arrays from temporary web placeholders to absolute local routing path links for optimized, offline tactical data processing. Concurrently, I upgraded the System Logs engine by engineering a local file-export mechanism utilizing JavaScript Blobs and modifying the window interface with a direct action button, enabling users to physically save and download encrypted text data directly to a local drive as a standardized document to secure data persistence beyond temporary browser memory cache.Yet to add the feature to track weather."}, {"post_id": 5656, "ts": "2026-06-09T15:11:18Z", "hours": 1.6036, "text": "Just pushed StarkOS v4.0. The whole thing is really coming together as a fully functional, client-side web OS. I built out a central Arc Reactor HUD clock and solid glassmorphic windows with a reliable drag-and-drop system. The J.A.R.V.I.S. terminal is the core router now—typing commands actually launches apps like a persistent local-storage notes app, a media player with a permissive YouTube embed, and a schematics gallery that reads local files and opens them in a custom lightbox modal. I also added some native OS feel by writing a terminal boot-up sequence on page load and overriding the browser’s default right-click with a custom Stark-themed context menu. It’s stable, the UI is locked in, and it actually feels like a real desktop environment now. Next up, I might build a calculator or wire in a live weather API."}]...
|
Title: J.A.R.V.I.S. by @sarveshwaran_k2008 | Stard Title: J.A.R.V.I.S. by @sarveshwaran_k2008 | Stardance
Devlogs:
Just pushed StarkOS v4.0. The whole thing is really coming together as a fully functional, client-side web OS. I built out a central Arc Reactor HUD clock and solid glassmorphic windows with a reliable drag-and-drop system. The J.A.R.V.I.S. terminal is the core router now—typing commands actually launches apps like a persistent local-storage notes app, a media player with a permissive YouTube embed, and a schematics gallery that reads local files and opens them in a custom lightbox modal. I also added some native OS feel by writing a terminal boot-up sequence on page load and overriding the browser’s default right-click with a custom Stark-themed context menu. It’s stable, the UI is locked in, and it actually feels like a real desktop environment now. Next up, I might build a calculator or wire in a live weather API.
Today’s developmental sprint successfully overhauled the system’s data architecture, transforming temporary network processes into permanent local workflows. In the Schematics layout, I pruned the tactical archives database to focus exclusively on Counter-Strike and Call of Duty: Mobile, transitioning all map arrays from temporary web placeholders to absolute local routing path links for optimized, offline tactical data processing. Concurrently, I upgraded the System Logs engine by engineering a local file-export mechanism utilizing JavaScript Blobs and modifying the window interface with a direct action button, enabling users to physically save and download encrypted text data directly to a local drive as a standardized document to secure data persistence beyond temporary browser memory cache.Yet to add the feature to track weather.
Today’s session focused on bridging the gap between the offline sandbox and real-world data. I integrated the HTML5 Geolocation API to ping coordinates upon system boot, feeding that exact latitude and longitude directly into a live OpenWeather API fetch request. This allowed me to project real-time local temperature, meteorological conditions, and the current city directly into the central Arc Reactor HUD overlay. To tie the entire ecosystem together and enhance the immersive J.A.R.V.I.S. experience, I engineered an automated welcome protocol within the terminal mainframe. This sequence triggers instantly upon a successful location lock, outputting a dynamic security clearance message customized for the detected city. The entire OS now feels significantly more alive, perfectly complementing the rock-solid local storage and offline blueprint capabilities established in earlier sprints.
In this latest sprint, I completely overhauled the StarkOS interface to address feedback that it looked too generic, pivoting from a clean corporate HUD to a highly customized “Cyberpunk Damaged” aesthetic complete with a CRT flicker, scanlines, and a neon color palette. I stripped out the old side-navigation and engineered a macOS-style floating bottom dock featuring bounding hover animations and a functional Spotlight-style global web search. To inject more personality into the OS, I integrated several custom interactive features: a fully playable HTML5 Canvas “Neural Snake” arcade game with a dynamic restart UI, a cinematic screen-shaking “Protocol 84” self-destruct sequence, and a hidden Avengers ASCII Easter egg triggered via the mainframe. Wrapping up the session, I squashed layout caching issues, widened the terminal for better readability, and refactored the game loop to bypass Canvas color rendering bugs, resulting in a gritty, native-feeling desktop environment ready for re-certification.
What’s New in v7.0?Modular System Payload Added: Implemented four high-demand operational tools directly into the desktop environment framework:Tactical Countdown Timer: A clean standalone execution utility supporting instant state shifts ([ ENGAGE ] / [ ABORT ]).Live Diagnostics: Connected tracking routines directly to network speed streams and live client hardware battery capacity readouts.Initiate Audio Link: A client-side disk reader that mounts and handles local tracks seamlessly without remote validation barriers.Sys Calculator: A mathematical parsing utility utilizing a grid layout matching our main system shell design.Taskbar & Dock Optimization: Reworked icon layout properties, introducing unified square containers featuring neon-pink borders and hover state tracking.Malware Spirit Calibration: Relocated the pet system away from absolute percentage positions to relative alignment metrics. The companion now anchors right above the centered dock layout safely to stop layout overlap glitches completely.
Ships:
I built StarkOS, a fully functional, browser-based simulated operating system themed around an Iron Man HUD, engineered entirely from scratch without frameworks using vanilla HTML, CSS, and JavaScript. The project features a custom window manager with draggable, glassmorphic interfaces and a J.A.R.V.I.S. command terminal that controls integrated apps like a Schematics analyzer with holographic filters and clickable coordinate pins, as well as a System Logs editor that utilizes JavaScript Blobs to export real text files directly to a user’s local drive. Developing this native desktop experience inside a browser presented unique mathematical and UI challenges, particularly calculating smooth window drag coordinates, programming boundary-detection geometry for the custom right-click menu to keep it on-screen, and handling persistent local file generation, but overcoming these technical hurdles as a solo developer is what I am most proud of. To test it out, users simply open the index.html file, grant location access to initialize the OpenWeather API satellite link and personalized city-detecting terminal greeting, type commands like help or open schematics in the mainframe, and test out the interactive UI and file export features.
I built StarkOS, a fully functional, browser-based simulated operating system engineered entirely from scratch without frameworks using vanilla HTML, CSS, and JavaScript. Originally themed around a clean Iron Man HUD, I recently overhauled the project into a gritty “Cyberpunk Damaged” aesthetic complete with CRT monitor flickers, scanlines, and a macOS-style floating bottom dock with dynamic hover animations. The OS features a custom window manager with draggable, glassmorphic interfaces and a J.A.R.V.I.S. command terminal that controls integrated apps like a Schematics analyzer with holographic filters, a System Logs editor that exports real text files directly to a local drive, and a newly added HTML5 Canvas “Neural Snake” arcade game. Developing this native desktop experience presented unique mathematical and UI challenges, particularly calculating smooth window drag coordinates, programming boundary-detection geometry for the custom right-click menu, and bypassing Canvas color-rendering quirks for the game loop, but overcoming these technical hurdles as a solo developer is what I am most proud of. To test it out, users simply open the index.html file, grant location access to initialize the OpenWeather API satellite link, and can immediately use the dock’s global web search or type terminal commands like play snake, protocol 84 to trigger a screen-shaking self-destruct sequence, or avengers assemble to uncover hidden ASCII Easter eggs.
What’s New in v7.0? Modular System Payload Added: Implemented four high-demand operational tools directly into the desktop environment framework: Tactical Countdown Timer: A clean standalone execution utility supporting instant state shifts ([ ENGAGE ] / [ ABORT ]). Live Diagnostics: Connected tracking routines directly to network speed streams and live client hardware battery capacity readouts. Initiate Audio Link: A client-side disk reader that mounts and handles local tracks seamlessly without remote validation barriers. Sys Calculator: A mathematical parsing utility utilizing a grid layout matching our main system shell design. Taskbar & Dock Optimization: Reworked icon layout properties, introducing unified square containers featuring neon-pink borders and hover state tracking. Malware Spirit Calibration: Relocated the pet system away from absolute percentage positions to relative alignment metrics. The companion now anchors right above the centered dock layout safely to stop layout overlap glitches completely....
|
1792846526.3443325
|
1792932926.3443325
|
|
15301
|
AuriaOS by @AidenHammy | Stardance
|
AidenHammy
|
3
|
33.0
|
123
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-02T09:26:41Z", "hours": 8.0, "multiplier": 12.28, "payout": 94, "blessing": "neutral", "text": "This ship finishes off every placeholder app and adds two real interface upgrades. Calculator does immediate-execution arithmetic with full keyboard support. Mood Lamp applies a real ambient color wash across the whole desktop and not just its own window (fortunately). Fortune Cookie cracks open into an actual paper slip with a fortune and six lucky numbers. The Browser now has a working address bar with back/forward/reload and typed URLs load inline. Searches open in a new tab since search engines block being framed no matter what you do. Right-click also does something everywhere now including titlebars, taskbar and desktop and also including a new “Always on Top” pin. And the taskbar clock isn’t static anymore! Click it for a small calendar with today marked and leap years are handled correctly without any special-case code. Current apps → Fully functional: Settings, Notepad, Terminal, Calculator, Mood Lamp, Browser, Fortune Cookie Placeholder apps → None remaining!", "repo": "https://github.com/AidenHammy/auria-os", "demo": "https://aidenhammy.github.io/auria-os/"}, {"ship_num": 2, "ts": "2026-07-04T04:21:36Z", "hours": 3.0, "multiplier": 9.22, "payout": 29, "blessing": "neutral", "text": "AuriaOS is a browser-based desktop environment built entirely with vanilla HTML, CSS and JavaScript. It features a complete window manager with dragging, resizing, edge snapping, maximizing and minimizing alongside a Start Menu with live search, pinning, recent apps and full keyboard navigation. It also includes a functional Terminal where commands like theme, pin, darkmode and shutdown interact with the operating system itself. Settings, notes, pinned apps and recent activity are all persisted using localStorage. The biggest challenge wasn’t adding features. It was making them work together reliably. I spent a lot of time debugging Javascript, tracing unexpected behaviour and reworking functions until interactions felt consistent across the entire desktop. I also kept the scope manageable by building the OS incrementally. I treated each subsystem as its own milestone instead of trying to create everything at once. One of the parts I’m happiest with is that AuriaOS behaves like a single, connected system rather than a collection of isolated apps. The Start Menu, Settings and Terminal all share the same state so changes made in one place are reflected everywhere else. The terminal is fully functional too! It isn’t just a visual prop. Current apps -> Fully functional (Mentioned below) Window Manager, Start Menu, Settings, Notepad, Terminal Placeholder apps Browser, Calculator, Mood Lamp, Fortune Cookie", "repo": "https://github.com/AidenHammy/auria-os", "demo": "https://aidenhammy.github.io/auria-os/"}, {"ship_num": 3, "ts": "2026-06-28T18:44:15Z", "hours": 22.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "AuriaOS is a browser-based web OS built entirely with vanilla HTML, CSS and JavaScript. It includes a full window manager (drag, resize, edge snapping, maximize), a Start Menu with live search, pinning, recent apps and keyboard navigation, plus a Terminal where commands like theme, pin, darkmode and shutdown actually control the OS. Settings, notes, pinned apps and recent activity all persist through localStorage. The hardest part wasn’t writing new features. It was debugging them. The JavaScript logic itself was just as challenging. I spent a lot of time debugging, reworking functions and figuring out why seemingly correct code behaved unexpectedly. I got stuck plenty of times but I decided to stick with it until everything finally clicked. Keeping the project’s scope under control was another challenge so I broke large features into smaller phases instead of trying to build an entire desktop at once. I’m proud that AuriaOS feels like one coherent system instead of separate features glued together. The Start Menu, Settings and Terminal all share the same underlying state so changing something in one place updates the rest of the desktop automatically. I’m also proud that the Terminal is genuinely functional rather than decorative. The window manager, Start Menu, Settings, Notepad and Terminal are fully functional. Browser, Calculator, Mood Lamp and Fortune Cookie are still placeholder apps. Things worth trying: Drag a window to a screen edge to snap it Open the Start Menu and use “/” to search or navigate entirely with the keyboard Right-click an app to pin or unpin it Open Terminal and run help then try pin calculator or theme #4ecdc4 Refresh the page to verify that settings, notes and pinned apps persist", "repo": "https://github.com/AidenHammy/auria-os", "demo": "https://aidenhammy.github.io/auria-os/"}]...
|
[{"post_id": 76071, "ts": "202 [{"post_id": 76071, "ts": "2026-10-02T07:43:42Z", "hours": 1.5942, "text": "Devlog: building the browser interface Every other app in AuriaOS gave me something real and had bugs that behaved normally. The browser gave me two completely different problems, each one hiding behind the last. Problem one: search engines don’t want to be embedded With the real browser wired up, the address bar, back/forward/reload/home and an actual iframe, it looked done. Typing a URL worked but typing a search term did not. Every search just sat there, blank. I got to know why that was very soon from the console: textFraming 'https://html.duckduckgo.com/' violates the following ContentSecurity Policy directive: \"frame-ancestors 'self'\". The request hasbeen blocked. DuckDuckGo sends a header that basically says “don’t let anyone put me inside another page” but that’s not just a DuckDuckGo thing though, it’s standard for basically every search engine because a framed search results page is a classic clickjacking setup. No amount of JavaScript on my end changes an HTTP header the other server is sending. Well, this can’t be considered a bug, it was like a wall and every search engine has the same one. So the fix wasn’t really a fix, it was about rethinking the whole situation. I had to stop trying to show search results inside the embedded view and just open them in a real new tab instead where framing rules don’t apply. Direct URLs still load inside the app like before since plenty of ordinary sites don’t block framing, it’s the search engines specifically. Problem two: it worked but it didn’t feel like it worked Search now actually functioned since New tab pops open with real results every time. And the very next thing I thought of was “it acts like a separate window opener instead of being part of the browser app” and it was a fair thought. What I really wanted was to show search results inside the iframe which loops straight back to problem one. I didn’t have much choice. I pushed back on that hard. Everything else in AuriaOS does what it claims to do. The terminal runs real commands, the calculator does real math and I didn’t want the browser to be the one app quietly faking it. But I eventually decided to keep the new tab. Added a small toast inside the browser window itself. “Opened search in a new tab” that fades in for about two seconds and back out. Doesn’t change where the search happens it just closes the feedback gap. Something visibly happens inside the app the moment you hit Go instead of the window just sitting there while a tab opens somewhere else on screen"}, {"post_id": 69933, "ts": "2026-09-18T02:56:22Z", "hours": 3.8267, "text": "Devlog: Right-clicks, calendars and… a fortune cookie?! Fresh update to AuriaOS. Two new interface features, one new app and a bug that crashed the entire desktop before it got fixed. Right-clicking finally does something! Before this, right-clicking almost anything in AuriaOS just opened the browser’s own menu (“Reload / Inspect”) which ruined the illusion of a real little operating system. Now right-clicking gives you a proper menu where it should: A window’s title bar -> Minimize, Maximize/Restore, Always on Top, Close An app in the taskbar -> Restore/Minimize, Close Empty taskbar space -> Show Desktop, Close All Windows, Settings Empty desktop space -> Personalize, Open a Terminal, Refresh A desktop icon -> Open The genuinely new trick is “Always on Top”. Pin a window and it stays above every other window, no matter what else you click instead of getting buried like normal windows. The clock finally does something! The taskbar clock used to just show the time. Now you can click it and get a small calendar for the current month just like on a real computer. The calendar handles the fiddly stuff automatically. It knows how many days are in each month, accounts for February 29 in leap years and always lines up with Sunday as the start of the week. The faded days at the beginning and end fill out the grid so it doesn’t have awkward gaps. And if you leave the calendar open when midnight hits, it updates itself and moves the highlight to the new day without needing to be closed and reopened. Actually building the Fortune Cookie App It’s basically what it sounds like. A fortune cookie that you click to crack open. It shrinks and fades as if it’s actually being cracked,then a little paper slip slides into view with a fortune and six “lucky numbers” underneath just like a real fortune cookie. The bug that broke everything This was the messy part. It wasn’t really one bug but two bugs back to back both caused by the same basic mistake. Bug one: the crash. To make the calendar auto-update, the clock code runs every second and checks whether the calendar popup is open. The problem was an ordering mistake. That check ran before the calendar popup had actually been set up. Because the error happened near the top of the file, everything after it never got initialized including the taskbar and Start Menu click handlers. From the outside, the whole desktop looked dead. Frozen clock, dead Start Menu and an unresponsive taskbar. Bug two: After fixing the crash, the calendar still wouldn’t open. Turns out I’d written all the code for the popup but forgotten to actually add the popup to the page. Most of the code quietly ignored the missing element but one part wasn’t so forgiving and could throw an error on every click anywhere in the app. Adding the missing element fixed it and I added safety checks around similar code so missing elements can’t cause the same mess again"}, {"post_id": 64213, "ts": "2026-09-08T13:28:36Z", "hours": 2.2125, "text": "Devlog: giving AuriaOS two real apps (and finding out neither of them worked) Calculator and Mood Lamp had been placeholders since day one. A folder icon and a div that said “🧮 Calculator app” and nothing else. A window opened, technically. Nothing else did. For the second submission I finally built them for real. Building them Calculator got a real display and button grid, doing immediate-execution math on purpose: 6 + 3 × 2 = gives 18 not 12 because that’s how an actual physical calculator behaves and a proper order-of-operations parser felt like solving a problem nobody asked for. Divide by zero gives Error like it should. Keyboard input works too but only while the calculator window is actually focused so it can’t hijack typing elsewhere. Mood Lamp got more ambition! Instead of a “click a button, see a color” toy, it’s a global ambient tint over the whole desktop not just its own window. Four presets pulled from the existing accent palette, plus a real color picker and intensity slider for anyone who wants to go off-menu. Wrote the CSS, wrote the JS, wired both in, called it done. It was not done. The buttons that did nothing. Time for the First bug! Mood Lamp’s buttons didn’t work. No errors, no visual change, just silence..which is a specific kind of bug since broken JS usually throws. Silence like that means the code never actually ran. That’s exactly what happened. wireCalculator() and wireMoodLamp() were both fully written and correct and never called from anywhere. openWindow() still had the old dispatch list from before either app existed so every button in both apps existed in the DOM with zero listeners attached. Not a typo, just two lines I never wrote. The command that lied about itself From the previous reviews, I got to know that typing lightmode on in the terminal printed darkmode turned on . The Dark Mode → Light Mode rename happened everywhere except one spot. The shared toggleBooleanSetting() helper used the internal state key (darkmode, which still has to exist since the actual effect is a literal CSS invert) for the confirmation message too. I split those apart so the message reflects what you actually typed not the plumbing underneath it. The mood lamp that had no mood Once the wiring was fixed, buttons visibly responded but the desktop itself looked exactly the same. Sampling the actual rendered pixel before/after at max intensity confirmed it. The shift was small enough to round to nothing. The overlay used mix-blend-mode: soft-light which was picked for subtlety. Except soft-light scales toward zero as the base color approaches black and AuriaOS’s desktop is about as close to black as a color gets (almost). The mode I chose for subtlety was almost mathematically guaranteed to do nothing on this exact theme. I switched it to screen, which always adds light regardless of how dark the base is. Same 30% intensity setting, suddenly an actual visible wash instead of a rounding error. The actual lesson? None of these three were exotic bugs. A missing function call, a copy mismatch, a blend mode never checked against the theme it’d run on. All three shipped unnoticed because each one failed quietly instead of throwing. Worth remembering “it’s not doing anything” isn’t a shrug, it’s a symptom!"}, {"post_id": 21937, "ts": "2026-07-04T04:10:49Z", "hours": 3.1672, "text": "Devlog: Reworking AuriaOS’s Visual Identity I thought AuriaOS was ready to ship. The window manager was working, apps launched, windows could be dragged, resized, minimized and restored. And the logic was solid. Then the project got flagged as AI-generated, well I wouldn’t say AI-generated but maybe traits similar to that of one. It wasn’t because of the code but because of the UI. Looking back, I understood why. The dark navy background, teal accents, frosted glass, soft glows and identical rounded corners looked a lot like the visual style that’s become common in AI-generated interface concepts. Those chosen elements together, they unintentionally resembled that aesthetic. So I decided to redesign the visual system without touching the underlying functionality! Redesigning the UI The HTML and Javascript mostly stayed the same but most of the CSS was reworked. Replaced the glassy navy and teal theme with a warmer ink and brass palette Split the single border radius into multiple sizes so controls, windows and tiles each have their own geometry Removed glow-heavy styling in favor of flat panels, subtle borders and offset shadows Simplified typography by using JetBrains Mono for the interface with Fraunces reserved for the Start menu greeting Replaced decorative gradients with a subtle SVG grain texture Added small details like a window seal, custom text selection and distinct hover treatments across different UI regions Swapped macOS-style traffic-light controls for simpler outlined window buttons My goal was simple, it wasn’t to make the UI less polished, it was to give it a clearer identity. Bugs I Found Along the Way Rewriting and going through every CSS rule also uncovered a few real bugs Broken resize handles Some resize handle selectors accidentally used descendant selectors instead of grouped selectors so several resize directions silently stopped working Invisible desktop Adding overflow: hidden exposed another issue: #desktop never had an explicit height. Because every child was absolutely positioned, the container collapsed to zero height and clipped everything inside it. Restoring width: 100% and height: 100% fixed it immediately A backwards theme toggle The old “Dark Mode” toggle now made the already-dark interface lighter so i renamed the user-facing option to Light Mode while keeping the internal setting unchanged Looking Back Getting the project flagged was frustrating but it pushed me to reconsider the design instead of just accepting my first version. The redesign gave AuriaOS a stronger visual identity and the careful review of the stylesheet ended up revealing several bugs that had gone unnoticed during the rewrite. In the end, the project became better both visually and technically"}, {"post_id": 17634, "ts": "2026-06-28T14:49:11Z", "hours": 2.1547, "text": "Devlog 5 Picked up right where Devlog 4 left off. It was finally time to touch something nobody had looked at since day one, the Terminal. Before any of that though, I had a genuinely interesting detour into why I can’t just load real websites in an iframe . It turns out most sites send headers specifically designed to stop other pages from embedding them. That’s also the real secret behind those slick “browser inside a browser” demos we sometimes see online. They’re either fully staged or quietly running an actual browser on a server somewhere and just streaming a picture of it back to you, good to know. Also good to know I’m not building a server anytime soon. Future Aiden can deal with that one… if he ever does. The Terminal ended up being the most satisfying thing I’ve built so far. Real command parsing, arrow keys cycling through history and commands that genuinely do things instead of just printing text back at you. The command pin calculator actually pins an app. theme #ff6b6b actually repaints the whole OS live. It’s one of those features that finally makes the desktop feel interactive rather than just clickable And then, almost immediately, the most expected yet unexpected bug. I’d spent all that time getting the commands working, the history system behaving and everything feeling right.. only to forget the single line that actually connects the Terminal to its window when it opens. Fully built but completely silent because of one missing function call I closed it out by fixing a bug that’s been sitting in plain sight since the very first day of this project. Maximizing a window always left a thin strip of empty space hovering just above the taskbar because the math was quietly subtracting the taskbar’s height twice instead of once Hopefully my last devlog before shipping… ..for now sigh…"}, {"post_id": 17074, "ts": "2026-06-27T18:37:22Z", "hours": 8.1842, "text": "Devlog 4 - The Start Menu Ate My Week I js wanted to give the start menu some real attention instead of leaving it as a sad little list forever. I did NOT expect that to become the biggest sprint of the whole project but here we are… Built a proper pin/unpin system. My first version was a bit problematic so I sat with it for a while then rebuilt it the right way with an actual right-click context menu and everything. It felt genuinely satisfying once it finally clicked. Then I somehow convinced myself to add six more features to give the start menu a new life: greeting header, search bar, pinned grid, recent activity, system widgets and a whole user profile footer. Small moments of panic…? Definitely.. then I broke it into phases so I didn’t drown trying to build an entire desktop in one sitting. What nobody tells you about “just redesign the start menu” is how many times you’ll open the same file and stare at the same fifteen lines wondering why they look right and behave wrong. Trial and error ate most of my time which is fair enough. I also gave every icon its own little color badge, wired up a real “/” keyboard shortcut to match the hint I’d put in the search bar then made the whole thing Tab-and-Enter navigable since none of it was there before. Every “small fix” somehow turned into reopening three different files and rechecking things I was already convinced were correct which… more often than not, they weren’t. But that part actually felt rewarding. Little by little, the menu finally started feeling alive. And then, the bugs… I found out my own Start button was secretly broken, well… not heartbroken like me, at least. Clicking it did nothing at all because an old line of code was quietly fighting a newer one inside the same click handler. THAT took way TOO long to spot. The sneakiest ones weren’t even logic bugs.. a single missing dash in a CSS variable. A class name one word off from the real HTML. Completely invisible unless you go hunting line by line, just quietly doing nothing the whole time. The JavaScript is by far the most nerve-wracking, head-splitting experience ever. Absolute horror. I don’t wanna touch that file ever again. My eyes are bloodshot. The amount of time I spent just staring at the code, hunting down errors one by one is honestly concerning.. The menu actually works now, start to finish. Search, pinning, keyboard navigation and all. It cost way more blood than a start menu has any right to. Genuinely proud of this one precisely because of how much it fought back. Terminal’s turn next. And it should be VERY afraid. Note: Snuck localStorage into the project too! Turns out users generally prefer their settings, notes and pinned apps to exist for longer than five seconds. Weird bunch."}, {"post_id": 14623, "ts": "2026-06-23T20:05:40Z", "hours": 2.3447, "text": "Devlog 3 - Window Manager Upgrade Came back to the window manager because it was bugging me. Windows could be dragged anywhere including straight off the edge of the screen with no way to get them back short of refreshing. No resizing at all. No snapping. All the stuff that makes an OS feel like an OS instead of a box you can shove around. So this was the sprint where I tried to fix that and it took way longer than I thought, mostly because of bugs I caused myself. First up was resize handles, eight invisible strips around each window’s edges and corners so you can grab any side and resize from there. First try did nothing. Not an error, just nothing. Turned out my windows have overflow: hidden for the rounded corners and I’d put the handles slightly outside the window’s box so the browser was just clipping them out of existence along with their mouse events. Moved them inside the edge instead and they worked. Then, while retyping some of it by hand, I wrote .querySelectorAll(\".resize-handle\".forEach(...)) instead of .querySelectorAll(\".resize-handle\").forEach(...) . One parenthesis in the wrong spot and I was calling .forEach on a plain string instead of on the actual list of elements. Broke resizing AND window-opening at the same time since the error happened before the window even got added to the page. Bounds clamping was a smaller fix but it’s the one I’m most relieved about. Windows can hang halfway off an edge now but they physically can’t disappear off-screen anymore, there’s always a grabbable strip of titlebar left no matter how far you drag. And then snapping, the one I was most excited for. Drag a window to the left or right edge and a ghost preview shows up where it’ll land, let go and it snaps into half the screen. Drag to the top and it maximizes. I almost skipped the detail where dragging a snapped window away from the edge pops it back to its old size first instead of just dragging the half-screen shape around looking weird but glad I didn’t, that’s the part that actually sells it. Then dragging itself went completely haywire right after snapping started working, windows flying way faster than my mouse was moving, snapping in the wrong spots, clamping not holding. Assumed snapping broke it. It hadn’t. Found a line where I was adding the drag delta twice, once to calculate the clamped position and then again by accident when actually setting it. Double-clicking a titlebar now maximizes/restores too, it felt wrong not having that once snapping existed. Window manager finally feels solid instead of held together with tape. Small wins matter! even the ones that take an embarrassingly long time to find."}, {"post_id": 13865, "ts": "2026-06-22T18:39:18Z", "hours": 3.0808, "text": "Devlog 2 — Things Finally Started Moving Picked this back up today and this was basically the point where I started adding JavaScript and making things actually work. Up until now everything was just static UI. At first, I was building app content directly inside JavaScript strings… which worked but got messy really fast. The big breakthrough was moving all of that into proper HTML <template> tags instead. Sounds small but it made the code way easier to manage. Don’t have to squint at quotation marks trying to understand layout and styles. Got the window manager fully working! open, close, minimize, maximize, drag around. Each window now gets a taskbar button that reflects its state. Clicking a minimized window restores it, clicking an active one minimizes it. The Start menu can launch apps now and desktop icons work too. You can double-click an icon to open an app which is a small thing but makes it feel a lot more real. Also wired up the Settings panel. Toggles switch between ON/OFF, accent colors update the theme live and dark mode works (kind of a hack using CSS filters but it works). The Apps folder opens in its own window and can launch other apps from inside it. It’s all small features but they’re finally connected. Spent way too long debugging why desktop icons weren’t responding. Turned out to be a typo in a template ID (“windows-template” vs “window-template”) combined with the script running before the DOM loaded. Very classic… huh? Wrapped everything in DOMContentLoaded and double-checked all IDs after that. Most of the apps (Browser, Terminal, Calculator, Mood Lamp, Fortune Cookie) are still just placeholders with static content. But the system around them feels solid now. Next step is making at least one of them actually do something interesting.. probably either a fake-command Terminal or a Mood Lamp with real color interaction. Also: the Start button didn’t even have an icon before. Just an empty button sitting there. Fixed that. Small wins matter!"}, {"post_id": 12694, "ts": "2026-06-20T18:48:08Z", "hours": 5.7383, "text": "Devlog 1 — Starting Somewhere Started working on AuriaOS today. Honestly, it’s pretty rough right now. I didn’t really try to build anything complex yet. Mostly just figuring out how to structure everything. Got a basic desktop layout in place with some icons (browser, terminal, notes, etc.), a taskbar and a start menu. None of it actually does much yet. Spent a lot more time than expected just on CSS. Things like spacing, colors, trying to make it not look completely off. I set up a dark theme with variables so I don’t have to keep rewriting stuff later, which feels like it’ll help. Also added a window template system so I can reuse it when I actually start making apps. Right now it’s just sitting there but I think it’ll make things easier later. There’s a settings page UI and an apps folder too but they’re basically just placeholders. Buttons don’t really do anything yet. Overall, it doesn’t look like much for a full day but I guess this is just the setup phase. Still trying to understand how everything should fit together."}]...
|
Title: AuriaOS by @AidenHammy | Stardance
Devlogs Title: AuriaOS by @AidenHammy | Stardance
Devlogs:
Devlog 1 — Starting Somewhere Started working on AuriaOS today. Honestly, it’s pretty rough right now. I didn’t really try to build anything complex yet. Mostly just figuring out how to structure everything. Got a basic desktop layout in place with some icons (browser, terminal, notes, etc.), a taskbar and a start menu. None of it actually does much yet. Spent a lot more time than expected just on CSS. Things like spacing, colors, trying to make it not look completely off. I set up a dark theme with variables so I don’t have to keep rewriting stuff later, which feels like it’ll help. Also added a window template system so I can reuse it when I actually start making apps. Right now it’s just sitting there but I think it’ll make things easier later. There’s a settings page UI and an apps folder too but they’re basically just placeholders. Buttons don’t really do anything yet. Overall, it doesn’t look like much for a full day but I guess this is just the setup phase. Still trying to understand how everything should fit together.
Devlog 2 — Things Finally Started Moving Picked this back up today and this was basically the point where I started adding JavaScript and making things actually work. Up until now everything was just static UI. At first, I was building app content directly inside JavaScript strings… which worked but got messy really fast. The big breakthrough was moving all of that into proper HTML <template> tags instead. Sounds small but it made the code way easier to manage. Don’t have to squint at quotation marks trying to understand layout and styles. Got the window manager fully working! open, close, minimize, maximize, drag around. Each window now gets a taskbar button that reflects its state. Clicking a minimized window restores it, clicking an active one minimizes it. The Start menu can launch apps now and desktop icons work too. You can double-click an icon to open an app which is a small thing but makes it feel a lot more real. Also wired up the Settings panel. Toggles switch between ON/OFF, accent colors update the theme live and dark mode works (kind of a hack using CSS filters but it works). The Apps folder opens in its own window and can launch other apps from inside it. It’s all small features but they’re finally connected. Spent way too long debugging why desktop icons weren’t responding. Turned out to be a typo in a template ID (“windows-template” vs “window-template”) combined with the script running before the DOM loaded. Very classic… huh? Wrapped everything in DOMContentLoaded and double-checked all IDs after that. Most of the apps (Browser, Terminal, Calculator, Mood Lamp, Fortune Cookie) are still just placeholders with static content. But the system around them feels solid now. Next step is making at least one of them actually do something interesting.. probably either a fake-command Terminal or a Mood Lamp with real color interaction. Also: the Start button didn’t even have an icon before. Just an empty button sitting there. Fixed that. Small wins matter!
Devlog 3 - Window Manager Upgrade Came back to the window manager because it was bugging me. Windows could be dragged anywhere including straight off the edge of the screen with no way to get them back short of refreshing. No resizing at all. No snapping. All the stuff that makes an OS feel like an OS instead of a box you can shove around. So this was the sprint where I tried to fix that and it took way longer than I thought, mostly because of bugs I caused myself. First up was resize handles, eight invisible strips around each window’s edges and corners so you can grab any side and resize from there. First try did nothing. Not an error, just nothing. Turned out my windows have overflow: hidden for the rounded corners and I’d put the handles slightly outside the window’s box so the browser was just clipping them out of existence along with their mouse events. Moved them inside the edge instead and they worked. Then, while retyping some of it by hand, I wrote .querySelectorAll(".resize-handle".forEach(...)) instead of .querySelectorAll(".resize-handle").forEach(...) . One parenthesis in the wrong spot and I was calling .forEach on a plain string instead of on the actual list of elements. Broke resizing AND window-opening at the same time since the error happened before the window even got added to the page. Bounds clamping was a smaller fix but it’s the one I’m most relieved about. Windows can hang halfway off an edge now but they physically can’t disappear off-screen anymore, there’s always a grabbable strip of titlebar left no matter how far you drag. And then snapping, the one I was most excited for. Drag a window to the left or right edge and a ghost preview shows up where it’ll land, let go and it snaps into half the screen. Drag to the top and it maximizes. I almost skipped the detail where dragging a snapped window away from the edge pops it back to its old size first instead of just dragging the half-screen shape around looking weird but glad I didn’t, that’s the part that actually sells it. Then dragging itself went completely haywire right after snapping started working, windows flying way faster than my mouse was moving, snapping in the wrong spots, clamping not holding. Assumed snapping broke it. It hadn’t. Found a line where I was adding the drag delta twice, once to calculate the clamped position and then again by accident when actually setting it. Double-clicking a titlebar now maximizes/restores too, it felt wrong not having that once snapping existed. Window manager finally feels solid instead of held together with tape. Small wins matter! even the ones that take an embarrassingly long time to find.
Devlog 4 - The Start Menu Ate My Week I js wanted to give the start menu some real attention instead of leaving it as a sad little list forever. I did NOT expect that to become the biggest sprint of the whole project but here we are… Built a proper pin/unpin system. My first version was a bit problematic so I sat with it for a while then rebuilt it the right way with an actual right-click context menu and everything. It felt genuinely satisfying once it finally clicked. Then I somehow convinced myself to add six more features to give the start menu a new life: greeting header, search bar, pinned grid, recent activity, system widgets and a whole user profile footer. Small moments of panic…? Definitely.. then I broke it into phases so I didn’t drown trying to build an entire desktop in one sitting. What nobody tells you about “just redesign the start menu” is how many times you’ll open the same file and stare at the same fifteen lines wondering why they look right and behave wrong. Trial and error ate most of my time which is fair enough. I also gave every icon its own little color badge, wired up a real “/” keyboard shortcut to match the hint I’d put in the search bar then made the whole thing Tab-and-Enter navigable since none of it was there before. Every “small fix” somehow turned into reopening three different files and rechecking things I was already convinced were correct which… more often than not, they weren’t. But that part actually felt rewarding. Little by little, the menu finally started feeling alive. And then, the bugs… I found out my own Start button was secretly broken, well… not heartbroken like me, at least. Clicking it did nothing at all because an old line of code was quietly fighting a newer one inside the same click handler. THAT took way TOO long to spot. The sneakiest ones weren’t even logic bugs.. a single missing dash in a CSS variable. A class name one word off from the real HTML. Completely invisible unless you go hunting line by line, just quietly doing nothing the whole time. The JavaScript is by far the most nerve-wracking, head-splitting experience ever. Absolute horror. I don’t wanna touch that file ever again. My eyes are bloodshot. The amount of time I spent just staring at the code, hunting down errors one by one is honestly concerning.. The menu actually works now, start to finish. Search, pinning, keyboard navigation and all. It cost way more blood than a start menu has any right to. Genuinely proud of this one precisely because of how much it fought back. Terminal’s turn next. And it should be VERY afraid. Note: Snuck localStorage into the project too! Turns out users generally prefer their settings, notes and pinned apps to exist for longer than five seconds. Weird bunch.
Devlog 5 Picked up right where Devlog 4 left off. It was finally time to touch something nobody had looked at since day one, the Terminal. Before any of that though, I had a genuinely interesting detour into why I can’t just load real websites in an iframe . It turns out most sites send headers specifically designed to stop other pages from embedding them. That’s also the real secret behind those slick “browser inside a browser” demos we sometimes see online. They’re either fully staged or quietly running an actual browser on a server somewhere and just streaming a picture of it back to you, good to know. Also good to know I’m not building a server anytime soon. Future Aiden can deal with that one… if he ever does. The Terminal ended up being the most satisfying thing I’ve built so far. Real command parsing, arrow keys cycling through history and commands that genuinely do things instead of just printing text back at you. The command pin calculator actually pins an app. theme #ff6b6b actually repaints the whole OS live. It’s one of those features that finally makes the desktop feel interactive rather than just clickable And then, almost immediately, the most expected yet unexpected bug. I’d spent all that time getting the commands working, the history system behaving and everything feeling right.. only to forget the single line that actually connects the Terminal to its window when it opens. Fully built but completely silent because of one missing function call I closed it out by fixing a bug that’s been sitting in plain sight since the very first day of this project. Maximizing a window always left a thin strip of empty space hovering just above the taskbar because the math was quietly subtracting the taskbar’s height twice instead of once Hopefully my last devlog before shipping… ..for now sigh…
Devlog: Reworking AuriaOS’s Visual Identity I thought AuriaOS was ready to ship. The window manager was working, apps launched, windows could be dragged, resized, minimized and restored. And the logic was solid. Then the project got flagged as AI-generated, well I wouldn’t say AI-generated but maybe traits similar to that of one. It wasn’t because of the code but because of the UI. Looking back, I understood why. The dark navy background, teal accents, frosted glass, soft glows and identical rounded corners looked a lot like the visual style that’s become common in AI-generated interface concepts. Those chosen elements together, they unintentionally resembled that aesthetic. So I decided to redesign the visual system without touching the underlying functionality! Redesigning the UI The HTML and Javascript mostly stayed the same but most of the CSS was reworked. Replaced the glassy navy and teal theme with a warmer ink and brass palette Split the single border radius into multiple sizes so controls, windows and tiles each have their own geometry Removed glow-heavy styling in favor of flat panels, subtle borders and offset shadows Simplified typography by using JetBrains Mono for the interface with Fraunces reserved for the Start menu greeting Replaced decorative gradients with a subtle SVG grain texture Added small details like a window seal, custom text selection and distinct hover treatments across different UI regions Swapped macOS-style traffic-light controls for simpler outlined window buttons My goal was simple, it wasn’t to make the UI less polished, it was to give it a clearer identity. Bugs I Found Along the Way Rewriting and going through every CSS rule also uncovered a few real bugs Broken resize handles Some resize handle selectors accidentally used descendant selectors instead of grouped selectors so several resize directions silently stopped working Invisible desktop Adding overflow: hidden exposed another issue: #desktop never had an explicit height. Because every child was absolutely positioned, the container collapsed to zero height and clipped everything inside it. Restoring width: 100% and height: 100% fixed it immediately A backwards theme toggle The old “Dark Mode” toggle now made the already-dark interface lighter so i renamed the user-facing option to Light Mode while keeping the internal setting unchanged Looking Back Getting the project flagged was frustrating but it pushed me to reconsider the design instead of just accepting my first version. The redesign gave AuriaOS a stronger visual identity and the careful review of the stylesheet ended up revealing several bugs that had gone unnoticed during the rewrite. In the end, the project became better both visually and technically
Devlog: giving AuriaOS two real apps (and finding out neither of them worked) Calculator and Mood Lamp had been placeholders since day one. A folder icon and a div that said “🧮 Calculator app” and nothing else. A window opened, technically. Nothing else did. For the second submission I finally built them for real. Building them Calculator got a real display and button grid, doing immediate-execution math on purpose: 6 + 3 × 2 = gives 18 not 12 because that’s how an actual physical calculator behaves and a proper order-of-operations parser felt like solving a problem nobody asked for. Divide by zero gives Error like it should. Keyboard input works too but only while the calculator window is actually focused so it can’t hijack typing elsewhere. Mood Lamp got more ambition! Instead of a “click a button, see a color” toy, it’s a global ambient tint over the whole desktop not just its own window. Four presets pulled from the existing accent palette, plus a real color picker and intensity slider for anyone who wants to go off-menu. Wrote the CSS, wrote the JS, wired both in, called it done. It was not done. The buttons that did nothing. Time for the First bug! Mood Lamp’s buttons didn’t work. No errors, no visual change, just silence..which is a specific kind of bug since broken JS usually throws. Silence like that means the code never actually ran. That’s exactly what happened. wireCalculator() and wireMoodLamp() were both fully written and correct and never called from anywhere. openWindow() still had the old dispatch list from before either app existed so every button in both apps existed in the DOM with zero listeners attached. Not a typo, just two lines I never wrote. The command that lied about itself From the previous reviews, I got to know that typing lightmode on in the terminal printed darkmode turned on . The Dark Mode → Light Mode rename happened everywhere except one spot. The shared toggleBooleanSetting() helper used the internal state key (darkmode, which still has to exist since the actual effect is a literal CSS invert) for the confirmation message too. I split those apart so the message reflects what you actually typed not the plumbing underneath it. The mood lamp that had no mood Once the wiring was fixed, buttons visibly responded but the desktop itself looked exactly the same. Sampling the actual rendered pixel before/after at max intensity confirmed it. The shift was small enough to round to nothing. The overlay used mix-blend-mode: soft-light which was picked for subtlety. Except soft-light scales toward zero as the base color approaches black and AuriaOS’s desktop is about as close to black as a color gets (almost). The mode I chose for subtlety was almost mathematically guaranteed to do nothing on this exact theme. I switched it to screen, which always adds light regardless of how dark the base is. Same 30% intensity setting, suddenly an actual visible wash instead of a rounding error. The actual lesson? None of these three were exotic bugs. A missing function call, a copy mismatch, a blend mode never checked against the theme it’d run on. All three shipped unnoticed because each one failed quietly instead of throwing. Worth remembering “it’s not doing anything” isn’t a shrug, it’s a symptom!
Devlog: Right-clicks, calendars and… a fortune cookie?! Fresh update to AuriaOS. Two new interface features, one new app and a bug that crashed the entire desktop before it got fixed. Right-clicking finally does something! Before this, right-clicking almost anything in AuriaOS just opened the browser’s own menu (“Reload / Inspect”) which ruined the illusion of a real little operating system. Now right-clicking gives you a proper menu where it should: A window’s title bar -> Minimize, Maximize/Restore, Always on Top, Close An app in the taskbar -> Restore/Minimize, Close Empty taskbar space -> Show Desktop, Close All Windows, Settings Empty desktop space -> Personalize, Open a Terminal, Refresh A desktop icon -> Open The genuinely new trick is “Always on Top”. Pin a window and it stays above every other window, no matter what else you click instead of getting buried like normal windows. The clock finally does something! The taskbar clock used to just show the time. Now you can click it and get a small calendar for the current month just like on a real computer. The calendar handles the fiddly stuff automatically. It knows how many days are in each month, accounts for February 29 in leap years and always lines up with Sunday as the start of the week. The faded days at the beginning and end fill out the grid so it doesn’t have awkward gaps. And if you leave the calendar open when midnight hits, it updates itself and moves the highlight to the new day without needing to be closed and reopened. Actually building the Fortune Cookie App It’s basically what it sounds like. A fortune cookie that you click to crack open. It shrinks and fades as if it’s actually being cracked,then a little paper slip slides into view with a fortune and six “lucky numbers” underneath just like a real fortune cookie. The bug that broke everything This was the messy part. It wasn’t really one bug but two bugs back to back both caused by the same basic mistake. Bug one: the crash. To make the calendar auto-update, the clock code runs every second and checks whether the calendar popup is open. The problem was an ordering mistake. That check ran before the calendar popup had actually been set up. Because the error happened near the top of the file, everything after it never got initialized including the taskbar and Start Menu click handlers. From the outside, the whole desktop looked dead. Frozen clock, dead Start Menu and an unresponsive taskbar. Bug two: After fixing the crash, the calendar still wouldn’t open. Turns out I’d written all the code for the popup but forgotten to actually add the popup to the page. Most of the code quietly ignored the missing element but one part wasn’t so forgiving and could throw an error on every click anywhere in the app. Adding the missing element fixed it and I added safety checks around similar code so missing elements can’t cause the same mess again
Devlog: building the browser interface Every other app in AuriaOS gave me something real and had bugs that behaved normally. The browser gave me two completely different problems, each one hiding behind the last. Problem one: search engines don’t want to be embedded With the real browser wired up, the address bar, back/forward/reload/home and an actual iframe, it looked done. Typing a URL worked but typing a search term did not. Every search just sat there, blank. I got to know why that was very soon from the console: textFraming 'https://html.duckduckgo.com/' violates the following ContentSecurity Policy directive: "frame-ancestors 'self'". The request hasbeen blocked. DuckDuckGo sends a header that basically says “don’t let anyone put me inside another page” but that’s not just a DuckDuckGo thing though, it’s standard for basically every search engine because a framed search results page is a classic clickjacking setup. No amount of JavaScript on my end changes an HTTP header the other server is sending. Well, this can’t be considered a bug, it was like a wall and every search engine has the same one. So the fix wasn’t really a fix, it was about rethinking the whole situation. I had to stop trying to show search results inside the embedded view and just open them in a real new tab instead where framing rules don’t apply. Direct URLs still load inside the app like before since plenty of ordinary sites don’t block framing, it’s the search engines specifically. Problem two: it worked but it didn’t feel like it worked Search now actually functioned since New tab pops open with real results every time. And the very next thing I thought of was “it acts like a separate window opener instead of being part of the browser app” and it was a fair thought. What I really wanted was to show search results inside the iframe which loops straight back to problem one. I didn’t have much choice. I pushed back on that hard. Everything else in AuriaOS does what it claims to do. The terminal runs real commands, the calculator does real math and I didn’t want the browser to be the one app quietly faking it. But I eventually decided to keep the new tab. Added a small toast inside the browser window itself. “Opened search in a new tab” that fades in for about two seconds and back out. Doesn’t change where the search happens it just closes the feedback gap. Something visibly happens inside the app the moment you hit Go instead of the window just sitting there while a tab opens somewhere else on screen
Ships:
AuriaOS is a browser-based web OS built entirely with vanilla HTML, CSS and JavaScript. It includes a full window manager (drag, resize, edge snapping, maximize), a Start Menu with live search, pinning, recent apps and keyboard navigation, plus a Terminal where commands like theme, pin, darkmode and shutdown actually control the OS. Settings, notes, pinned apps and recent activity all persist through localStorage. The hardest part wasn’t writing new features. It was debugging them. The JavaScript logic itself was just as challenging. I spent a lot of time debugging, reworking functions and figuring out why seemingly correct code behaved unexpectedly. I got stuck plenty of times but I decided to stick with it until everything finally clicked. Keeping the project’s scope under control was another challenge so I broke large features into smaller phases instead of trying to build an entire desktop at once. I’m proud that AuriaOS feels like one coherent system instead of separate features glued together. The Start Menu, Settings and Terminal all share the same underlying state so changing something in one place updates the rest of the desktop automatically. I’m also proud that the Terminal is genuinely functional rather than decorative. The window manager, Start Menu, Settings, Notepad and Terminal are fully functional. Browser, Calculator, Mood Lamp and Fortune Cookie are still placeholder apps. Things worth trying: Drag a window to a screen edge to snap it Open the Start Menu and use “/” to search or navigate entirely with the keyboard Right-click an app to pin or unpin it Open Terminal and run help then try pin calculator or theme #4ecdc4 Refresh the page to verify that settings, notes and pinned apps persist
AuriaOS is a browser-based desktop environment built entirely with vanilla HTML, CSS and JavaScript. It features a complete window manager with dragging, resizing, edge snapping, maximizing and minimizing alongside a Start Menu with live search, pinning, recent apps and full keyboard navigation. It also includes a functional Terminal where commands like theme, pin, darkmode and shutdown interact with the operating system itself. Settings, notes, pinned apps and recent activity are all persisted using localStorage. The biggest challenge wasn’t adding features. It was making them work together reliably. I spent a lot of time debugging Javascript, tracing unexpected behaviour and reworking functions until interactions felt consistent across the entire desktop. I also kept the scope manageable by building the OS incrementally. I treated each subsystem as its own milestone instead of trying to create everything at once. One of the parts I’m happiest with is that AuriaOS behaves like a single, connected system rather than a collection of isolated apps. The Start Menu, Settings and Terminal all share the same state so changes made in one place are reflected everywhere else. The terminal is fully functional too! It isn’t just a visual prop. Current apps -> Fully functional (Mentioned below) Window Manager, Start Menu, Settings, Notepad, Terminal Placeholder apps Browser, Calculator, Mood Lamp, Fortune Cookie
This ship finishes off every placeholder app and adds two real interface upgrades. Calculator does immediate-execution arithmetic with full keyboard support. Mood Lamp applies a real ambient color wash across the whole desktop and not just its own window (fortunately). Fortune Cookie cracks open into an actual paper slip with a fortune and six lucky numbers. The Browser now has a working address bar with back/forward/reload and typed URLs load inline. Searches open in a new tab since search engines block being framed no matter what you do. Right-click also does something everywhere now including titlebars, taskbar and desktop and also including a new “Always on Top” pin. And the taskbar clock isn’t static anymore! Click it for a small calendar with today marked and leap years are handled correctly without any special-case code. Current apps → Fully functional: Settings, Notepad, Terminal, Calculator, Mood Lamp, Browser, Fortune Cookie Placeholder apps → None remaining!...
|
1792817699.362738
|
1792904099.362738
|
|
15893
|
Network Scanner by @Eel | Stardance
|
Eel
|
3
|
28.0
|
296
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-19T04:48:00Z", "hours": 23.0, "multiplier": 11.9, "payout": 272, "blessing": "neutral", "text": "Network Scanner is a cross-platform network scanning tool with both a JavaFX desktop interface and a separate CLI. It can discover hosts, scan ports with configurable parallelism, show live progress, and save scan history so you can compare opened and closed ports between scans. The biggest challenge was turning the original scanner into a reliable, packaged application that works consistently across Windows, Linux, and macOS while keeping the CLI automation-friendly. I’m especially proud of the complete release pipeline and native desktop builds. The project now ships with Java included, has automated releases and SHA-256 checksums, and has been tested across all six Windows/macOS/Linux CI combinations. I also built cancellation, persistent scan history, report generation, and live progress into the desktop application. To test it, download the appropriate v3.0.0 release for your operating system from GitHub. You can try a scan against your own local network or use a loopback address such as 127.0.0.1. The CLI JAR is also available if you prefer running it from a terminal or using it in automation.", "repo": "https://github.com/Caleb-Guyer/java-network-scanner", "demo": "https://github.com/Caleb-Guyer/java-network-scanner/releases"}, {"ship_num": 2, "ts": "2026-08-07T03:12:08Z", "hours": 2.0, "multiplier": 6.07, "payout": 12, "blessing": "neutral", "text": "I improved my Java Network Scanner to scan all 254 addresses in a subnet, support customizable port ranges, identify common services, validate input, and generate scan reports. The biggest challenge was improving the scan speed while keeping it reliable, and I’m proud of turning it into a much more flexible and useful tool. To test it, run the program with Java, enter your local subnet (such as 192.168.1), and choose a port range to scan.", "repo": "https://github.com/Caleb-Guyer/java-network-scanner", "demo": "https://github.com/Caleb-Guyer/java-network-scanner/releases"}, {"ship_num": 3, "ts": "2026-06-11T19:40:03Z", "hours": 3.0, "multiplier": 3.46, "payout": 12, "blessing": "neutral", "text": "This is a fully working Java network scanner that will scan for devices on your network and write it to a file. It integrates network and port scanning. You can get the JAR on the GitHub release.", "repo": "https://github.com/Caleb-Guyer/java-network-scanner", "demo": "https://github.com/Caleb-Guyer/java-network-scanner/releases"}]...
|
[{"post_id": 50090, "ts": "202 [{"post_id": 50090, "ts": "2026-08-19T04:47:14Z", "hours": 5.2136, "text": "v3.0.0 is complete and publicly released. This is a pretty major update for Network Scanner, with the project now having a full JavaFX desktop interface alongside the existing command-line version. The desktop app includes live scan progress, cancellation, persistent scan history, and comparisons between opened and closed ports from previous scans. I also added native desktop bundles for Windows x64, Linux x64, and macOS ARM64, with Java included so users do not need to install Java separately. The automation-friendly CLI JAR remains available separately, and every published download now has a SHA-256 checksum for verification. The release went through 115 regression assertions, all six Windows/macOS/Linux CI combinations, and all native packaging and publication jobs. I also tested a real loopback scan with report generation and verified the published CLI checksum and launcher. Everything passed successfully."}, {"post_id": 49833, "ts": "2026-08-18T19:39:12Z", "hours": 5.6381, "text": "v2.3.0 of my Java Network Scanner is now live. This release focuses heavily on making scanning more reliable, informative, and performant, especially in environments where normal host discovery doesn’t work as expected. The scanner now has an automatic zero-host discovery fallback, along with ICMP/TCP diagnostics and interface warnings to help explain why hosts may not be discovered. I also reworked the parallel scanning system with a globally bounded scan queue, which keeps concurrency under control while still allowing the scanner to take advantage of multiple workers. The scanning experience now includes live progress, throughput, and ETA information. The timeout can also be configured with the new –timeout option. Reports have been expanded as well, with richer information available in the text, JSON, and CSV formats. I also added an opt-in /24 performance benchmark for testing scanner performance on larger ranges. In the 64-worker benchmark, the scanner reached 25,220 checks per second."}, {"post_id": 49047, "ts": "2026-08-17T17:13:29Z", "hours": 6.6, "text": "v2.2.0 of my Java Network Scanner is officially out. This release is a pretty major step forward for the project, especially when it comes to automation, reporting, and making the scanner easier to use outside of the original interactive workflow. The scanner now supports a non-interactive CLI, including the new –skip-discovery option. I also added text, JSON, and CSV report formats, along with partial-report recovery when the scan is interrupted with Ctrl+C. Parallel scanning can now be configured as well, making it possible to adjust how many hosts and ports are scanned concurrently. I also moved the project over to Maven and added cross-platform CI and automated releases. This makes building and releasing the scanner much more consistent and means new releases can be tested across multiple environments automatically."}, {"post_id": 47817, "ts": "2026-08-16T00:56:08Z", "hours": 5.3833, "text": "v2.1.0 is complete and published. This release focuses on the feedback from the previous version, adding IPv4 CIDR support from /24 through /32 while keeping the original subnet shorthand, and improving host discovery with TCP fallbacks to reduce false 0 hosts results when ICMP is blocked. I also added controlled parallelism for much faster host and port scanning, with a configurable worker limit, and improved the scan statistics to accurately report port checks performed on responsive hosts. The release was compiled for Java 11+, passed 26 dependency-free regression assertions, and was smoke-tested with both explicit CIDR and locally inferred network inputs."}, {"post_id": 42412, "ts": "2026-08-07T03:10:48Z", "hours": 1.7436, "text": "After reviewing the feedback from my first ship, I decided to continue developing Network Scanner instead of leaving it at v1.0. The biggest issue was the hardcoded .1-.50 host range, which I had already fixed by expanding the scanner to .1-.254. The next problem I wanted to solve was that my service detection was extremely limited. Originally, the scanner only recognized seven ports, meaning most open ports were simply reported as “Unknown.” I replaced that system with a larger service database covering common services such as DNS, SMB, LDAP, MySQL, PostgreSQL, RDP, VNC and Redis. I also wanted the scanner to provide more information than simply saying that a port was open. I added basic HTTP/HTTPS probing so that web services can report their HTTP status and server information when available. Another piece of feedback specifically requested IPv6 support. This turned out to be more complicated than I initially expected because IPv6 addresses cannot be scanned using the same .1 through .254 approach I used for an IPv4 /24. Instead of pretending to scan an entire IPv6 /64, I decided to support scanning individual IPv6 addresses first. I also added multiple scanning modes so users don’t have to manually enter a port range every time. Quick scan focuses on common ports, while custom and full scans provide more control. While making these changes, I also improved input validation, report formatting, progress feedback and resource handling. The biggest thing I learned from this version is that making a networking tool useful isn’t just about getting the scan to work. I also need to think about what information the results actually provide to the person using it."}, {"post_id": 7155, "ts": "2026-06-11T23:09:59Z", "hours": 0.3028, "text": "Fixed some typos and further optimized the code."}, {"post_id": 7009, "ts": "2026-06-11T19:20:20Z", "hours": 0.8311, "text": "Added configurable port range scanning, service name detection for common ports, port range validation, and finalized v1.0 release."}, {"post_id": 6663, "ts": "2026-06-11T05:20:53Z", "hours": 2.605, "text": "Improved my Java Network Scanner by adding report export functionality, optimizing socket connection timeouts (reducing scan time from over 100 seconds to about 4 seconds), and refactoring the project into multiple classes."}]...
|
Title: Network Scanner by @Eel | Stardance
Devlog Title: Network Scanner by @Eel | Stardance
Devlogs:
Improved my Java Network Scanner by adding report export functionality, optimizing socket connection timeouts (reducing scan time from over 100 seconds to about 4 seconds), and refactoring the project into multiple classes.
Added configurable port range scanning, service name detection for common ports, port range validation, and finalized v1.0 release.
Fixed some typos and further optimized the code.
After reviewing the feedback from my first ship, I decided to continue developing Network Scanner instead of leaving it at v1.0. The biggest issue was the hardcoded .1-.50 host range, which I had already fixed by expanding the scanner to .1-.254. The next problem I wanted to solve was that my service detection was extremely limited. Originally, the scanner only recognized seven ports, meaning most open ports were simply reported as “Unknown.” I replaced that system with a larger service database covering common services such as DNS, SMB, LDAP, MySQL, PostgreSQL, RDP, VNC and Redis. I also wanted the scanner to provide more information than simply saying that a port was open. I added basic HTTP/HTTPS probing so that web services can report their HTTP status and server information when available. Another piece of feedback specifically requested IPv6 support. This turned out to be more complicated than I initially expected because IPv6 addresses cannot be scanned using the same .1 through .254 approach I used for an IPv4 /24. Instead of pretending to scan an entire IPv6 /64, I decided to support scanning individual IPv6 addresses first. I also added multiple scanning modes so users don’t have to manually enter a port range every time. Quick scan focuses on common ports, while custom and full scans provide more control. While making these changes, I also improved input validation, report formatting, progress feedback and resource handling. The biggest thing I learned from this version is that making a networking tool useful isn’t just about getting the scan to work. I also need to think about what information the results actually provide to the person using it.
v2.1.0 is complete and published. This release focuses on the feedback from the previous version, adding IPv4 CIDR support from /24 through /32 while keeping the original subnet shorthand, and improving host discovery with TCP fallbacks to reduce false 0 hosts results when ICMP is blocked. I also added controlled parallelism for much faster host and port scanning, with a configurable worker limit, and improved the scan statistics to accurately report port checks performed on responsive hosts. The release was compiled for Java 11+, passed 26 dependency-free regression assertions, and was smoke-tested with both explicit CIDR and locally inferred network inputs.
v2.2.0 of my Java Network Scanner is officially out. This release is a pretty major step forward for the project, especially when it comes to automation, reporting, and making the scanner easier to use outside of the original interactive workflow. The scanner now supports a non-interactive CLI, including the new –skip-discovery option. I also added text, JSON, and CSV report formats, along with partial-report recovery when the scan is interrupted with Ctrl+C. Parallel scanning can now be configured as well, making it possible to adjust how many hosts and ports are scanned concurrently. I also moved the project over to Maven and added cross-platform CI and automated releases. This makes building and releasing the scanner much more consistent and means new releases can be tested across multiple environments automatically.
v2.3.0 of my Java Network Scanner is now live. This release focuses heavily on making scanning more reliable, informative, and performant, especially in environments where normal host discovery doesn’t work as expected. The scanner now has an automatic zero-host discovery fallback, along with ICMP/TCP diagnostics and interface warnings to help explain why hosts may not be discovered. I also reworked the parallel scanning system with a globally bounded scan queue, which keeps concurrency under control while still allowing the scanner to take advantage of multiple workers. The scanning experience now includes live progress, throughput, and ETA information. The timeout can also be configured with the new –timeout option. Reports have been expanded as well, with richer information available in the text, JSON, and CSV formats. I also added an opt-in /24 performance benchmark for testing scanner performance on larger ranges. In the 64-worker benchmark, the scanner reached 25,220 checks per second.
v3.0.0 is complete and publicly released. This is a pretty major update for Network Scanner, with the project now having a full JavaFX desktop interface alongside the existing command-line version. The desktop app includes live scan progress, cancellation, persistent scan history, and comparisons between opened and closed ports from previous scans. I also added native desktop bundles for Windows x64, Linux x64, and macOS ARM64, with Java included so users do not need to install Java separately. The automation-friendly CLI JAR remains available separately, and every published download now has a SHA-256 checksum for verification. The release went through 115 regression assertions, all six Windows/macOS/Linux CI combinations, and all native packaging and publication jobs. I also tested a real loopback scan with report generation and verified the published CLI checksum and launcher. Everything passed successfully.
Ships:
This is a fully working Java network scanner that will scan for devices on your network and write it to a file. It integrates network and port scanning. You can get the JAR on the GitHub release.
I improved my Java Network Scanner to scan all 254 addresses in a subnet, support customizable port ranges, identify common services, validate input, and generate scan reports. The biggest challenge was improving the scan speed while keeping it reliable, and I’m proud of turning it into a much more flexible and useful tool. To test it, run the program with Java, enter your local subnet (such as 192.168.1), and choose a port range to scan.
Network Scanner is a cross-platform network scanning tool with both a JavaFX desktop interface and a separate CLI. It can discover hosts, scan ports with configurable parallelism, show live progress, and save scan history so you can compare opened and closed ports between scans. The biggest challenge was turning the original scanner into a reliable, packaged application that works consistently across Windows, Linux, and macOS while keeping the CLI automation-friendly. I’m especially proud of the complete release pipeline and native desktop builds. The project now ships with Java included, has automated releases and SHA-256 checksums, and has been tested across all six Windows/macOS/Linux CI combinations. I also built cancellation, persistent scan history, report generation, and live progress into the desktop application. To test it, download the appropriate v3.0.0 release for your operating system from GitHub. You can try a scan against your own local network or use a loopback address such as 127.0.0.1. The CLI JAR is also available if you prefer running it from a terminal or using it in automation....
|
1792878870.0594268
|
1793742870.0594268
|
|
16752
|
MeowOS! by @CharlieCatMeow | Stardance
|
CharlieCatMeow
|
3
|
53.0
|
633
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T11:29:34Z", "hours": 8.0, "multiplier": 14.98, "payout": 121, "blessing": "neutral", "text": "MeowOS! A web based operating system! Built with HTML, CSS, JavaScript and my sanity. I added a few new features! new themes the browser URL bar now works! yay Added window resizing for most windows. Updated the notes app so the delete button doesn’t remove all pages Added a typing and clicking sound effect (toggle in settings) You can now hide the icon bar when a window is maximized by going into settings. Changed the terminal commands to be more intuitive Fixed a bunch of bugs Also did a bunch of stuff you can’t see to clean up the code, it was pretty messy. (Please read the README as well) Enjoy!", "repo": "https://github.com/CharlieTheCatMeow/WebOS", "demo": "https://charliethecatmeow.github.io/WebOS/"}, {"ship_num": 2, "ts": "2026-07-13T15:29:09Z", "hours": 33.0, "multiplier": 15.49, "payout": 512, "blessing": "neutral", "text": "✨ MeowOS! ✨ MeowOS! is a web based operating system built to enhance productivity with a wide range of apps to be used. It is built on HTML, CSS and Javascript. ✨Apps✨: Introduction (a guide to the website) Stopwatch (Keep track of how much time has past) Notes (Write down your thoughts To-do list (write down tasks and procrastinate) Calculator (do math - scary) Music Player (play some music) Gallery (view images) Browser (browser through three webpages) File explorer (create .txt files and folders) Settings (configure stuff like Widgets and more) Terminal (run commands) ✨Other Features✨: Search menu (to search for apps) Control center (controls brightness, volume and connectivity) Cat widget (click to meow) Calendar (view today’s date) Minimalist Clock (read the time) Dark / Light mode (toggle in settings) Loading screen This is my first time creating a website. Doing WebOS 1 really helped me get a grasp of the basics. I was a total beginner at this and yet more than 10 Devlogs later here I am. As you can probably tell by the amount of hours on this project, it wasn’t all sunshine and rainbows. Maximizing and moving windows was the things I struggled most with. It took me way too long to fix the millions of bugs associated with window dragging, maximizing and positioning. The website turned out better than I could have ever imagined and I hope you enjoy using it. I am particularly proud of the dark mode (find in settings), I think it looks amazing. Enough yap, enjoy the website :3 (if the blur effect doesn’t work please skip this project, thank you!)", "repo": "https://github.com/CharlieTheCatMeow/WebOS", "demo": "https://charliethecatmeow.github.io/WebOS/"}, {"ship_num": 3, "ts": "2026-07-04T09:53:06Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My very own web-based operating system! It features: Notes App (you can add pages) Stopwatch To-Do List Clock Took me a while to figure out. Javascript was the hardest for me since I’ve only ever coded in Python, but I managed. Hope this gets approved so I can continue working on it (with more stardust :D)", "repo": "https://github.com/CharlieTheCatMeow/WebOS", "demo": "https://charliethecatmeow.github.io/WebOS/"}]...
|
[{"post_id": 57257, "ts": "202 [{"post_id": 57257, "ts": "2026-08-29T11:20:43Z", "hours": 0.5786, "text": "MeowOS Devlog #15 Some small changes before shipping! Made the clicking and typing sound be turned on by default Changed some window width settings Changed terminal commands a bit Fixed the search menu icon size I should be able to ship this now."}, {"post_id": 54595, "ts": "2026-08-25T16:54:45Z", "hours": 1.1153, "text": "MeowOS Devlog #14 Added a pink theme This was upon request by someone from slack, they wanted a pink theme so here it is. Changes to the terminal I reworked some commands. I bundled all the app commands into one, so it’s no longer “todo”, but “app todo”. It’s a bit cleaner. Also did this with the themes, but I forgot if I did it this devlog or the last one. Setting for maximizing window There is now an option in the settings to hide the taskbar (the thing on the bottom) when the window is maximized. I really over complicated things while trying to make it work, found out it was just a one single line of code that was needed. This should be all I think"}, {"post_id": 53227, "ts": "2026-08-23T17:47:34Z", "hours": 3.9083, "text": "MeowOS Devlog #13 Themes! I decided do a complete overhaul of the themes. Instead of dark and light mode, there are no five different themes to choose from. I had to refactor almost everything since the code from before was pretty poorly made. Browser URL bar The browser URL bar works now! You can now enter website addresses and they should show up. (Do note that some websites block iframes and may not work). Some sound effects I added a typing and clicking sound effect. You need to enable it in settings. Small tweaks I finally changed the notes delete button. Instead of deleting every page, it now only deletes the current one. Also, the placeholders are actual placeholders now, so they hide themselves when selecting the text and reappear if the text is left empty. The title and date of the notes also get saved now. I found out why the music player playlist wasn’t getting resized along with the window, I was able to fix it with just one line of CSS code. Fixed the stopwatch reset button not changing the play button’s icon if the time was still running."}, {"post_id": 52885, "ts": "2026-08-23T08:22:56Z", "hours": 2.4619, "text": "MeowOS Devlog #12 Some small stuff Resizable windows! I made most windows resizable. I had to fix a lot of CSS for that, but I’m glad it works now. Also tweaked some minor stuff. (Notice how windows are smaller in the picture)"}, {"post_id": 27712, "ts": "2026-07-13T14:38:25Z", "hours": 3.7478, "text": "MeosOS Devlog #11 More bug fixes and also widgets!!! I did some more bug fixing with the dark and light mode as well as window scaling. I think all bugs should be gone now, though I’m not entirely sure I didn’t miss any. Widgets I added three widgets: cat you can click to meow calendar a minimalist round clock That’s all. I hope I can ship this now. (Though I am a bit paranoid of issues I didn’t notice)"}, {"post_id": 27330, "ts": "2026-07-12T20:18:07Z", "hours": 4.935, "text": "MeowOS Devlog #10 Bug fixes and control center Not much to say about this one. I spent a long time fixing a bunch of bugs and polishing the website. I also added a control center to the top right. I gotta find some creative ideas to add to this hmm…"}, {"post_id": 27128, "ts": "2026-07-12T12:30:37Z", "hours": 5.335, "text": "MeowOS Devlog #9 File explorer! This was by far the hardest window to implement. Took me quite a while to figure out the recursive functions to browse through the files. Features: Create folders Create text files Write things in text files Delete files and folders Everything is saved to localStorage This was very fun. Javascript got kind of difficult but it turned out great. I will probably create some widgets now. :D"}, {"post_id": 26605, "ts": "2026-07-11T15:09:33Z", "hours": 7.01, "text": "MeowOS Devlog #8 Another kinda long one…I got a bit carried away. Maximize windows I finally added a function to maximize certain windows. There were way too many bugs associated with that feature, that took way too long. Especially hiding the top bar while a window is maximized. Loading screen I also made the loading screen stay a bit longer on screen so people with high internet speeds will still be able to see it. Gallery Probably the easiest task of this devlog. Not much to say about it, it’s a gallery with pictures. Search menu This one worked surprisingly well. I somehow got the search function right in the first two attempts. Very fun to make. Light / Dark mode I changed my mind. This was the easiest task. I was avoiding this since I thought it would be super complicated, but it turns out it’s not. :D That’s all I did. I still have a few apps in mind, so I’ll start working on those soon."}, {"post_id": 25876, "ts": "2026-07-10T11:19:21Z", "hours": 2.6578, "text": "MeowOS Devlog #7 Music App I finally finished the music application. I still have to find some songs I am allowed to put in there. Loading Screen I also added a loading screen with a cat-shaped loading bar. Took me a while to figure out how an svg works. The text also has an animation to make it more interesting. Easter egg I added an easter egg. It’s not much and not that difficult to find, but I won’t reveal what it is. That’s all :D"}, {"post_id": 25349, "ts": "2026-07-09T16:10:03Z", "hours": 9.3508, "text": "MeowOS Devlog #6 It’s a long one… Since I finally got my ship approved, I can now post my 9 hour devlog D: I added a bunch of things and improved the design by a lot: New Design, looks much prettier Animations for interactive elements A command terminal, you can open windows with it A calculator, to calculate stuff ;-; a WIP music player (I need to find songs) A start menu before loading the OS. Took me quite a while to figure out. Javascript isn’t really a problem anymore. I really enjoyed updating the design in CSS using :hover and keyframes. I’m very happy of how it all turned out."}, {"post_id": 22068, "ts": "2026-07-04T09:50:36Z", "hours": 1.0447, "text": "MeowOS Devlog #5 I fixed some bugs. I didn’t do too much. It is now time to ship this project. I hope that it works!"}, {"post_id": 21429, "ts": "2026-07-03T11:40:25Z", "hours": 3.8028, "text": "MeowOS Devlog #4 Getting the hang of Javascript I made my own Stopwatch app without following the guide. Took me a while but I completed it and I am very happy with the result. I am now trying to do some more complex apps before shipping this project. I still have some work to do, as the To-Do List App is not finished and a terminal App is missing. That’s all .D"}, {"post_id": 18362, "ts": "2026-06-29T14:23:32Z", "hours": 3.1842, "text": "MeowOS Devlog #3 Still learning Javascript Javascript is still kind of confusing for me, I’m starting to figure it out though. Notes App I finished my first app with functionality. You can write stuff in it. Unlimited new note pages can also be created and there is a button to wipe everything. Looking forward to adding additional content :D"}, {"post_id": 13723, "ts": "2026-06-22T14:30:16Z", "hours": 2.6383, "text": "MeowOS Devlog #2 Learning Javascript Javascript took me a while to figure out. I found getting the Javascript file to work with the website a bit confusing, but the guide helped me through it. I have added: App icons (though not all of them assigned) two apps (still empty) draggable close / open them the selected app sits on top. I look forward to coding my first proper app with functions. That’s all :D"}, {"post_id": 12458, "ts": "2026-06-20T10:47:00Z", "hours": 1.6758, "text": "MeowOS (placeholder name) My first html project! I had some prior basic html knowledge, but that was a long time ago. I chose this mission because: I want to improve my website development skills This mission gives practically infinite possibilities for apps, so I have a lot of creative freedom With the first 100 minutes now logged, this is what I completed: a desktop background a top bar a clock a temporary non-draggable window I’m trying to not use pixels as measurement since I want the website to work on all resolutions. I’ll see if that will work out. All in all, I’m very happy with the design. I got back into html and didn’t feel like anything was that challenging yet. I have never done Javascript though, that will probably be a bit harder."}]...
|
Title: MeowOS! by @CharlieCatMeow | Stardance
Dev Title: MeowOS! by @CharlieCatMeow | Stardance
Devlogs:
MeowOS (placeholder name) My first html project! I had some prior basic html knowledge, but that was a long time ago. I chose this mission because: I want to improve my website development skills This mission gives practically infinite possibilities for apps, so I have a lot of creative freedom With the first 100 minutes now logged, this is what I completed: a desktop background a top bar a clock a temporary non-draggable window I’m trying to not use pixels as measurement since I want the website to work on all resolutions. I’ll see if that will work out. All in all, I’m very happy with the design. I got back into html and didn’t feel like anything was that challenging yet. I have never done Javascript though, that will probably be a bit harder.
MeowOS Devlog #2 Learning Javascript Javascript took me a while to figure out. I found getting the Javascript file to work with the website a bit confusing, but the guide helped me through it. I have added: App icons (though not all of them assigned) two apps (still empty) draggable close / open them the selected app sits on top. I look forward to coding my first proper app with functions. That’s all :D
MeowOS Devlog #3 Still learning Javascript Javascript is still kind of confusing for me, I’m starting to figure it out though. Notes App I finished my first app with functionality. You can write stuff in it. Unlimited new note pages can also be created and there is a button to wipe everything. Looking forward to adding additional content :D
MeowOS Devlog #4 Getting the hang of Javascript I made my own Stopwatch app without following the guide. Took me a while but I completed it and I am very happy with the result. I am now trying to do some more complex apps before shipping this project. I still have some work to do, as the To-Do List App is not finished and a terminal App is missing. That’s all .D
MeowOS Devlog #5 I fixed some bugs. I didn’t do too much. It is now time to ship this project. I hope that it works!
MeowOS Devlog #6 It’s a long one… Since I finally got my ship approved, I can now post my 9 hour devlog D: I added a bunch of things and improved the design by a lot: New Design, looks much prettier Animations for interactive elements A command terminal, you can open windows with it A calculator, to calculate stuff ;-; a WIP music player (I need to find songs) A start menu before loading the OS. Took me quite a while to figure out. Javascript isn’t really a problem anymore. I really enjoyed updating the design in CSS using :hover and keyframes. I’m very happy of how it all turned out.
MeowOS Devlog #7 Music App I finally finished the music application. I still have to find some songs I am allowed to put in there. Loading Screen I also added a loading screen with a cat-shaped loading bar. Took me a while to figure out how an svg works. The text also has an animation to make it more interesting. Easter egg I added an easter egg. It’s not much and not that difficult to find, but I won’t reveal what it is. That’s all :D
MeowOS Devlog #8 Another kinda long one…I got a bit carried away. Maximize windows I finally added a function to maximize certain windows. There were way too many bugs associated with that feature, that took way too long. Especially hiding the top bar while a window is maximized. Loading screen I also made the loading screen stay a bit longer on screen so people with high internet speeds will still be able to see it. Gallery Probably the easiest task of this devlog. Not much to say about it, it’s a gallery with pictures. Search menu This one worked surprisingly well. I somehow got the search function right in the first two attempts. Very fun to make. Light / Dark mode I changed my mind. This was the easiest task. I was avoiding this since I thought it would be super complicated, but it turns out it’s not. :D That’s all I did. I still have a few apps in mind, so I’ll start working on those soon.
MeowOS Devlog #9 File explorer! This was by far the hardest window to implement. Took me quite a while to figure out the recursive functions to browse through the files. Features: Create folders Create text files Write things in text files Delete files and folders Everything is saved to localStorage This was very fun. Javascript got kind of difficult but it turned out great. I will probably create some widgets now. :D
MeowOS Devlog #10 Bug fixes and control center Not much to say about this one. I spent a long time fixing a bunch of bugs and polishing the website. I also added a control center to the top right. I gotta find some creative ideas to add to this hmm…
MeosOS Devlog #11 More bug fixes and also widgets!!! I did some more bug fixing with the dark and light mode as well as window scaling. I think all bugs should be gone now, though I’m not entirely sure I didn’t miss any. Widgets I added three widgets: cat you can click to meow calendar a minimalist round clock That’s all. I hope I can ship this now. (Though I am a bit paranoid of issues I didn’t notice)
MeowOS Devlog #12 Some small stuff Resizable windows! I made most windows resizable. I had to fix a lot of CSS for that, but I’m glad it works now. Also tweaked some minor stuff. (Notice how windows are smaller in the picture)
MeowOS Devlog #13 Themes! I decided do a complete overhaul of the themes. Instead of dark and light mode, there are no five different themes to choose from. I had to refactor almost everything since the code from before was pretty poorly made. Browser URL bar The browser URL bar works now! You can now enter website addresses and they should show up. (Do note that some websites block iframes and may not work). Some sound effects I added a typing and clicking sound effect. You need to enable it in settings. Small tweaks I finally changed the notes delete button. Instead of deleting every page, it now only deletes the current one. Also, the placeholders are actual placeholders now, so they hide themselves when selecting the text and reappear if the text is left empty. The title and date of the notes also get saved now. I found out why the music player playlist wasn’t getting resized along with the window, I was able to fix it with just one line of CSS code. Fixed the stopwatch reset button not changing the play button’s icon if the time was still running.
MeowOS Devlog #14 Added a pink theme This was upon request by someone from slack, they wanted a pink theme so here it is. Changes to the terminal I reworked some commands. I bundled all the app commands into one, so it’s no longer “todo”, but “app todo”. It’s a bit cleaner. Also did this with the themes, but I forgot if I did it this devlog or the last one. Setting for maximizing window There is now an option in the settings to hide the taskbar (the thing on the bottom) when the window is maximized. I really over complicated things while trying to make it work, found out it was just a one single line of code that was needed. This should be all I think
MeowOS Devlog #15 Some small changes before shipping! Made the clicking and typing sound be turned on by default Changed some window width settings Changed terminal commands a bit Fixed the search menu icon size I should be able to ship this now.
Ships:
My very own web-based operating system! It features: Notes App (you can add pages) Stopwatch To-Do List Clock Took me a while to figure out. Javascript was the hardest for me since I’ve only ever coded in Python, but I managed. Hope this gets approved so I can continue working on it (with more stardust :D)
✨ MeowOS! ✨ MeowOS! is a web based operating system built to enhance productivity with a wide range of apps to be used. It is built on HTML, CSS and Javascript. ✨Apps✨: Introduction (a guide to the website) Stopwatch (Keep track of how much time has past) Notes (Write down your thoughts To-do list (write down tasks and procrastinate) Calculator (do math - scary) Music Player (play some music) Gallery (view images) Browser (browser through three webpages) File explorer (create .txt files and folders) Settings (configure stuff like Widgets and more) Terminal (run commands) ✨Other Features✨: Search menu (to search for apps) Control center (controls brightness, volume and connectivity) Cat widget (click to meow) Calendar (view today’s date) Minimalist Clock (read the time) Dark / Light mode (toggle in settings) Loading screen This is my first time creating a website. Doing WebOS 1 really helped me get a grasp of the basics. I was a total beginner at this and yet more than 10 Devlogs later here I am. As you can probably tell by the amount of hours on this project, it wasn’t all sunshine and rainbows. Maximizing and moving windows was the things I struggled most with. It took me way too long to fix the millions of bugs associated with window dragging, maximizing and positioning. The website turned out better than I could have ever imagined and I hope you enjoy using it. I am particularly proud of the dark mode (find in settings), I think it looks amazing. Enough yap, enjoy the website :3 (if the blur effect doesn’t work please skip this project, thank you!)
MeowOS! A web based operating system! Built with HTML, CSS, JavaScript and my sanity. I added a few new features! new themes the browser URL bar now works! yay Added window resizing for most windows. Updated the notes app so the delete button doesn’t remove all pages Added a typing and clicking sound effect (toggle in settings) You can now hide the icon bar when a window is maximized by going into settings. Changed the terminal commands to be more intuitive Fixed a bunch of bugs Also did a bunch of stuff you can’t see to clean up the code, it was pretty messy. (Please read the README as well) Enjoy!...
|
1792810464.1626563
|
1792896864.1626563
|
|
16995
|
SpartanOS by @Eel | Stardance
|
Eel
|
3
|
2.0
|
11
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T21:52:02Z", "hours": 0.0, "multiplier": 7.3, "payout": 3, "blessing": "neutral", "text": "I expanded SpartanOS into a more complete browser-based operating system inspired by the Halo universe by adding several new applications, a customizable desktop theme, and a more polished interface. The biggest challenge was integrating the new apps while keeping the window management system responsive and making sure the updated styling remained consistent across the entire desktop. I’m most proud that SpartanOS now feels much more like a real operating system instead of just a collection of windows, with each new feature fitting naturally into the overall experience. To test the project, simply open the website in a browser, launch the different applications from the desktop, customize the interface, move and interact with multiple windows, and explore the new features that were added since the original WebOS submission.", "repo": "https://github.com/Caleb-Guyer/SpartanOS", "demo": "https://caleb-guyer.github.io/SpartanOS"}, {"ship_num": 2, "ts": "2026-06-18T01:10:34Z", "hours": 1.0, "multiplier": 10.69, "payout": 8, "blessing": "neutral", "text": "I built SpartanOS, a browser-based cybersecurity dashboard that simulates a lightweight operating system and includes tools such as a network scanner, system information viewer, and threat scanner. The biggest challenge was organizing multiple features into a clean interface while debugging JavaScript issues and making sure everything worked together smoothly. I’m proud that I was able to combine several security-focused tools into a single project and create an interface that feels like a real operating system while improving my web development skills. To test the project, simply open the live website in a browser and explore the available tools; no installation is required, and all features can be used directly from the web page.", "repo": "https://github.com/Caleb-Guyer/SpartanOS", "demo": "https://caleb-guyer.github.io/SpartanOS"}, {"ship_num": 3, "ts": "2026-06-16T03:11:17Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built SpartanOS, a WebOS-style webpage with multiple draggable windows that can be opened and moved around the screen like a lightweight desktop environment. The main challenge was getting smooth window dragging working properly while managing layering so windows don’t overlap incorrectly or break when multiple are open. I’m proud that I was able to turn it into a functional multi-window system that feels like a real interface rather than just separate UI elements, and I also added features beyond the guide like improved window behavior and interaction handling. You can test it directly in the browser with no password by opening multiple windows, dragging them around, and interacting with them to see how the system handles layering and movement.", "repo": "https://github.com/Caleb-Guyer/SpartanOS", "demo": "https://caleb-guyer.github.io/SpartanOS"}]...
|
[{"post_id": 41579, "ts": "202 [{"post_id": 41579, "ts": "2026-08-05T21:28:22Z", "hours": 0.3653, "text": "Spent this session expanding SpartanOS for the WebOS 2 mission by adding several new features that make it feel more like a real operating system. I implemented a File Explorer with folders and simulated system files, added a functional Terminal with multiple built-in commands, created a Settings app that allows users to switch between Halo-themed wallpapers with their preferences saved using localStorage, and added a live taskbar clock. My goal was to keep the Halo-inspired cybersecurity theme while making the desktop environment more interactive and polished without changing the overall look and feel of the original project. (idk why it is only 15m, this took me around 4 hours)"}, {"post_id": 11009, "ts": "2026-06-18T01:09:44Z", "hours": 0.7953, "text": "Spent some time polishing SpartanOS before submission. I updated the project documentation, improved the README with clearer descriptions and usage instructions, reviewed the codebase for cleanup opportunities, and updated the project settings to properly document AI usage. I also tested the existing features to make sure everything was working correctly before resubmitting the project. While this wasn’t a major feature update, it helped make the project easier to understand and present to reviewers."}, {"post_id": 7244, "ts": "2026-06-12T02:47:26Z", "hours": 0.4578, "text": "Finished up the OS and added Diagnostics!"}, {"post_id": 7232, "ts": "2026-06-12T02:10:39Z", "hours": 0.2667, "text": "Implemented draggable windows!"}, {"post_id": 7223, "ts": "2026-06-12T01:47:57Z", "hours": 0.5156, "text": "Made my first App!"}]...
|
Title: SpartanOS by @Eel | Stardance
Devlogs:
Mad Title: SpartanOS by @Eel | Stardance
Devlogs:
Made my first App!
Implemented draggable windows!
Finished up the OS and added Diagnostics!
Spent some time polishing SpartanOS before submission. I updated the project documentation, improved the README with clearer descriptions and usage instructions, reviewed the codebase for cleanup opportunities, and updated the project settings to properly document AI usage. I also tested the existing features to make sure everything was working correctly before resubmitting the project. While this wasn’t a major feature update, it helped make the project easier to understand and present to reviewers.
Spent this session expanding SpartanOS for the WebOS 2 mission by adding several new features that make it feel more like a real operating system. I implemented a File Explorer with folders and simulated system files, added a functional Terminal with multiple built-in commands, created a Settings app that allows users to switch between Halo-themed wallpapers with their preferences saved using localStorage, and added a live taskbar clock. My goal was to keep the Halo-inspired cybersecurity theme while making the desktop environment more interactive and polished without changing the overall look and feel of the original project. (idk why it is only 15m, this took me around 4 hours)
Ships:
I built SpartanOS, a WebOS-style webpage with multiple draggable windows that can be opened and moved around the screen like a lightweight desktop environment. The main challenge was getting smooth window dragging working properly while managing layering so windows don’t overlap incorrectly or break when multiple are open. I’m proud that I was able to turn it into a functional multi-window system that feels like a real interface rather than just separate UI elements, and I also added features beyond the guide like improved window behavior and interaction handling. You can test it directly in the browser with no password by opening multiple windows, dragging them around, and interacting with them to see how the system handles layering and movement.
I built SpartanOS, a browser-based cybersecurity dashboard that simulates a lightweight operating system and includes tools such as a network scanner, system information viewer, and threat scanner. The biggest challenge was organizing multiple features into a clean interface while debugging JavaScript issues and making sure everything worked together smoothly. I’m proud that I was able to combine several security-focused tools into a single project and create an interface that feels like a real operating system while improving my web development skills. To test the project, simply open the live website in a browser and explore the available tools; no installation is required, and all features can be used directly from the web page.
I expanded SpartanOS into a more complete browser-based operating system inspired by the Halo universe by adding several new applications, a customizable desktop theme, and a more polished interface. The biggest challenge was integrating the new apps while keeping the window management system responsive and making sure the updated styling remained consistent across the entire desktop. I’m most proud that SpartanOS now feels much more like a real operating system instead of just a collection of windows, with each new feature fitting naturally into the overall experience. To test the project, simply open the website in a browser, launch the different applications from the desktop, customize the interface, move and interact with multiple windows, and explore the new features that were added since the original WebOS submission....
|
1792882047.3284569
|
1793746047.3284569
|
|
17194
|
Parkello by @arfa_mariyam | Stardance
|
arfa_mariyam
|
3
|
31.0
|
216
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T13:48:09Z", "hours": 3.0, "multiplier": 16.84, "payout": 65, "blessing": "neutral", "text": "What I Made: I built Parkello, a complete terminal-based Car Parking Management System written in native C++. It features a gatekeeper login with masked keystrokes, real-time tracking and fare calculations across 5 distinct vehicle categories, an administrative runtime editor, and persistent file storage using fstream to save and reload records from local text files automatically. What Was Challenging: Implementing persistent storage with clean key-value labels was tricky because reading structured text back into variables required proper token handling with ifstream. I also had to resolve an infinite loop bug caused by cin failing when non-numeric characters were entered, which I fixed by clearing error flags and flushing the input buffer. What I Am Proud Of: I am proud of turning a basic beginner console script into a complete, fault-tolerant management tool. The program safely prevents lot counts from dropping below zero, persists data across application restarts, masks password inputs dynamically, and maintains a clean, centered visual layout in the terminal. How Reviewers Should Test It: Download index.exe from the GitHub Release assets and launch it. Log in using Username: admin and PIN: 1234 (the PIN masks as XXXX). Log a few vehicle arrivals (options 1–5), check Option 11 to see the live record update, and inspect parking_records.txt. Close the program and launch it again to confirm your saved values load automatically!", "repo": "https://github.com/ArfaMariyam/Parkello", "demo": "https://github.com/ArfaMariyam/Parkello/releases"}, {"ship_num": 2, "ts": "2026-08-05T07:30:11Z", "hours": 11.0, "multiplier": 8.67, "payout": 115, "blessing": "neutral", "text": "I made Parkello, a terminal-based Car Parking Management System built in C++! It helps parking operators log arrivals and departures across 5 vehicle types (bikes, cars, buses, rickshaws, and bicycles), calculate real-time fee balances, and save all records to a local text file. The most challenging part was getting the security verification system to work cleanly, specifically masking the PIN password with X characters using getch() so it stays hidden on screen. It was also tricky handling file management (fstream) and fixing input errors so typing letters wouldn’t crash the program into an infinite loop. I’m super proud of building a complete software tool from scratch using fundamental C++ concepts like while loops, if-else conditions, functions, and persistent file streams. Seeing it save records to a real text file and reload them on boot feels awesome! How to test it: Download and run the index.exe binary. Log in with Username: admin and PIN: 1234. Test parking arrivals/departures, view live records, then close and re-open the app to see your data reloaded automatically!", "repo": "https://github.com/ArfaMariyam/Parkello", "demo": "https://github.com/ArfaMariyam/Parkello/releases"}, {"ship_num": 3, "ts": "2026-07-03T03:54:08Z", "hours": 17.0, "multiplier": 2.88, "payout": 36, "blessing": "neutral", "text": "What I Made: I created a terminal-based Car Parking Management System application written in native C++ (Phase 1: Navigation & Interface Framework), bundled alongside a structured, concept-sequenced progression map of my programming fundamental practice scripts. What Was Challenging: As a complete beginner who didn’t even know how programming languages worked before this summer, the biggest challenge was figuring out control flow mechanics. I initially ran into a logic bug where my brackets trapped the console inside an infinite menu loop, completely ignoring my conditional statements. Breaking down that structure, fixing the scopes, and learning how to cleanly handle continuous lifecycle loops without crashing the program was a massive learning curve. What I Am Proud Of: I am incredibly proud of moving completely past the beginner barrier! I went from zero coding knowledge to designing a clean, optimized terminal UI engine. I also successfully compiled and published my very first binary release asset (index.exe) directly on GitHub so anyone can run my code with one click. What Reviewers Should Know to Test It: Reviewers can test my project in these ways: Run the Prebuilt Binary: Go to my repository’s Releases section, download ‘index.exe’, and double-click it to run the live console layout instantly on Windows. Compile from Source: Clone the repository and run: g++ Car_parking_project/index.cpp -o index && ./index You can choose options 1 through 14 to navigate the system, and enter 14 to cleanly exit. I’ve also pushed a short screen recording inside the ‘demo’ folder showing the interface in action!", "repo": "https://github.com/ArfaMariyam/Parkello", "demo": "https://github.com/ArfaMariyam/Parkello/releases"}]...
|
[{"post_id": 48163, "ts": "202 [{"post_id": 48163, "ts": "2026-08-16T13:40:15Z", "hours": 3.2331, "text": "Finished the final touches on Parkello! Implemented persistent file storage with fstream so the system automatically saves and reloads live parking metrics from parking_records.txt with formatted labels. Added input stream sanitization (cin.clear() and buffer flushing) across all menus to prevent infinite loop crashes if someone enters invalid non-numeric characters, tightened the login attempt lockout check, and added flexible delete confirmations (1/0/Y/N)."}, {"post_id": 41185, "ts": "2026-08-05T07:25:25Z", "hours": 3.4642, "text": "I have officially reached the finish line! The project is now fully complete, packed with major final updates to round out the entire experience. Every core system is in place and optimized for the final release. Check out the details in project to see how everything came together!"}, {"post_id": 24121, "ts": "2026-07-07T14:13:06Z", "hours": 7.6178, "text": "I have successfully completed Phase 2 of Parkello! In this update, I focused on making all the mathematical calculations work dynamically in real-time. Now, whenever a vehicle arrives or departs, the system actively updates the live record and changes variables like totalAmount, totalVehicles, bikeCount, and carCount on the fly. Finally, I fixed up the whole console text layout so all the records and menus print out completely clean and aligned in the terminal! Next step is Phase 3 to build the login gate keeper loop!"}, {"post_id": 21278, "ts": "2026-07-03T03:45:51Z", "hours": 2.6725, "text": "🚀 Phase 1 is officially alive, looping, and running smoothly! I spent these last 3 hours squashing some critical execution bugs and completely restructuring the project’s foundational layout. What’s updated in this sprint: Continuous Execution Loop: Shifted the navigation logic inside an active ‘while(true)’ loop. Instead of instantly crashing or terminating after a single button press, the program now stays active in the terminal, letting users navigate back and forth seamlessly. Optimized UI Engine: Condensed the entire 14-option terminal menu dashboard into a single, clean chained string using inline ‘\\n’ markers. This prevents terminal screen flickering and runs much faster. Clean Routing: Options 1 through 14 are now perfectly mapped to independent confirmation text outputs, and option 14 breaks the loop cleanly to close the app. Shipped the Binary: Compiled and published my first official Windows binary asset release (index.exe) along with clear quick-start installation rules right inside the project README. 🔮 The Next Phase (What’s coming next): Now that the interface map loops perfectly, my very next coding milestone is waking up the tracking data containers! I will be writing the math algorithms for options 1 through 10 so that checking cars or bikes in and out dynamically alters our total cash balance and live parking spot counts in real time inside the option 11 registry. Phase 1 architecture is officially wrapped and ready for community shipping! Let’s go! 🚀"}, {"post_id": 20668, "ts": "2026-07-02T10:10:47Z", "hours": 14.7808, "text": "Hey everyone! I am officially establishing my summer timeline for the Stardance challenge. Before this month, I barely even knew what programming languages were or how code actually worked. I chose C++ because it’s a part of my college curriculum, but learning out in the open alongside an amazing global community has turned this summer break into a massive adventure! I’ve logged over 14 hours so far, systematically breaking down fundamental concepts in a sequenced progression to build deep muscle memory: Output & Spacing (cout): Formatting text streams, line breaks, and practicing syntax by writing panels about Pakistan, the Earth, and the solar system. Memory Containers: Figuring out how computer memory isolates and treats data flags (integers, floats, double, strings, and booleans). Arithmetic Operations: Writing math calculation engines covering additions, subtractions, multiply, and divide commands. Inputs & Decisions: Pausing the console to capture keyboard text via ‘cin’ and building logical branching panels with if-else structures. Automation & Code Architecture: Mastering process iteration loops (for, while, do-while) and packaging reusable instructions into clean, functional blocks. 🚗 Flagship App Update: The Car Parking Framework! I brought these individual concepts together to initialize Phase 1 of my main project: /Car_parking_project/index.cpp . I have successfully built out the structural baseline user interface via a custom helper function menu() that maps out arrival/departure operations for 5 vehicle types. It reads keyboard input to test menu choice selections and outputs an confirmation validation statement cleanly. Thank you to everyone on the Slack channels for the daily inspiration. Let’s keep building! 🚀"}]...
|
Title: Parkello by @arfa_mariyam | Stardance
Devl Title: Parkello by @arfa_mariyam | Stardance
Devlogs:
Hey everyone! I am officially establishing my summer timeline for the Stardance challenge. Before this month, I barely even knew what programming languages were or how code actually worked. I chose C++ because it’s a part of my college curriculum, but learning out in the open alongside an amazing global community has turned this summer break into a massive adventure! I’ve logged over 14 hours so far, systematically breaking down fundamental concepts in a sequenced progression to build deep muscle memory: Output & Spacing (cout): Formatting text streams, line breaks, and practicing syntax by writing panels about Pakistan, the Earth, and the solar system. Memory Containers: Figuring out how computer memory isolates and treats data flags (integers, floats, double, strings, and booleans). Arithmetic Operations: Writing math calculation engines covering additions, subtractions, multiply, and divide commands. Inputs & Decisions: Pausing the console to capture keyboard text via ‘cin’ and building logical branching panels with if-else structures. Automation & Code Architecture: Mastering process iteration loops (for, while, do-while) and packaging reusable instructions into clean, functional blocks. 🚗 Flagship App Update: The Car Parking Framework! I brought these individual concepts together to initialize Phase 1 of my main project: /Car_parking_project/index.cpp . I have successfully built out the structural baseline user interface via a custom helper function menu() that maps out arrival/departure operations for 5 vehicle types. It reads keyboard input to test menu choice selections and outputs an confirmation validation statement cleanly. Thank you to everyone on the Slack channels for the daily inspiration. Let’s keep building! 🚀
🚀 Phase 1 is officially alive, looping, and running smoothly! I spent these last 3 hours squashing some critical execution bugs and completely restructuring the project’s foundational layout. What’s updated in this sprint: Continuous Execution Loop: Shifted the navigation logic inside an active ‘while(true)’ loop. Instead of instantly crashing or terminating after a single button press, the program now stays active in the terminal, letting users navigate back and forth seamlessly. Optimized UI Engine: Condensed the entire 14-option terminal menu dashboard into a single, clean chained string using inline ‘\n’ markers. This prevents terminal screen flickering and runs much faster. Clean Routing: Options 1 through 14 are now perfectly mapped to independent confirmation text outputs, and option 14 breaks the loop cleanly to close the app. Shipped the Binary: Compiled and published my first official Windows binary asset release (index.exe) along with clear quick-start installation rules right inside the project README. 🔮 The Next Phase (What’s coming next): Now that the interface map loops perfectly, my very next coding milestone is waking up the tracking data containers! I will be writing the math algorithms for options 1 through 10 so that checking cars or bikes in and out dynamically alters our total cash balance and live parking spot counts in real time inside the option 11 registry. Phase 1 architecture is officially wrapped and ready for community shipping! Let’s go! 🚀
I have successfully completed Phase 2 of Parkello! In this update, I focused on making all the mathematical calculations work dynamically in real-time. Now, whenever a vehicle arrives or departs, the system actively updates the live record and changes variables like totalAmount, totalVehicles, bikeCount, and carCount on the fly. Finally, I fixed up the whole console text layout so all the records and menus print out completely clean and aligned in the terminal! Next step is Phase 3 to build the login gate keeper loop!
I have officially reached the finish line! The project is now fully complete, packed with major final updates to round out the entire experience. Every core system is in place and optimized for the final release. Check out the details in project to see how everything came together!
Finished the final touches on Parkello! Implemented persistent file storage with fstream so the system automatically saves and reloads live parking metrics from parking_records.txt with formatted labels. Added input stream sanitization (cin.clear() and buffer flushing) across all menus to prevent infinite loop crashes if someone enters invalid non-numeric characters, tightened the login attempt lockout check, and added flexible delete confirmations (1/0/Y/N).
Ships:
What I Made: I created a terminal-based Car Parking Management System application written in native C++ (Phase 1: Navigation & Interface Framework), bundled alongside a structured, concept-sequenced progression map of my programming fundamental practice scripts. What Was Challenging: As a complete beginner who didn’t even know how programming languages worked before this summer, the biggest challenge was figuring out control flow mechanics. I initially ran into a logic bug where my brackets trapped the console inside an infinite menu loop, completely ignoring my conditional statements. Breaking down that structure, fixing the scopes, and learning how to cleanly handle continuous lifecycle loops without crashing the program was a massive learning curve. What I Am Proud Of: I am incredibly proud of moving completely past the beginner barrier! I went from zero coding knowledge to designing a clean, optimized terminal UI engine. I also successfully compiled and published my very first binary release asset (index.exe) directly on GitHub so anyone can run my code with one click. What Reviewers Should Know to Test It: Reviewers can test my project in these ways: Run the Prebuilt Binary: Go to my repository’s Releases section, download ‘index.exe’, and double-click it to run the live console layout instantly on Windows. Compile from Source: Clone the repository and run: g++ Car_parking_project/index.cpp -o index && ./index You can choose options 1 through 14 to navigate the system, and enter 14 to cleanly exit. I’ve also pushed a short screen recording inside the ‘demo’ folder showing the interface in action!
I made Parkello, a terminal-based Car Parking Management System built in C++! It helps parking operators log arrivals and departures across 5 vehicle types (bikes, cars, buses, rickshaws, and bicycles), calculate real-time fee balances, and save all records to a local text file. The most challenging part was getting the security verification system to work cleanly, specifically masking the PIN password with X characters using getch() so it stays hidden on screen. It was also tricky handling file management (fstream) and fixing input errors so typing letters wouldn’t crash the program into an infinite loop. I’m super proud of building a complete software tool from scratch using fundamental C++ concepts like while loops, if-else conditions, functions, and persistent file streams. Seeing it save records to a real text file and reload them on boot feels awesome! How to test it: Download and run the index.exe binary. Log in with Username: admin and PIN: 1234. Test parking arrivals/departures, view live records, then close and re-open the app to see your data reloaded automatically!
What I Made: I built Parkello, a complete terminal-based Car Parking Management System written in native C++. It features a gatekeeper login with masked keystrokes, real-time tracking and fare calculations across 5 distinct vehicle categories, an administrative runtime editor, and persistent file storage using fstream to save and reload records from local text files automatically. What Was Challenging: Implementing persistent storage with clean key-value labels was tricky because reading structured text back into variables required proper token handling with ifstream. I also had to resolve an infinite loop bug caused by cin failing when non-numeric characters were entered, which I fixed by clearing error flags and flushing the input buffer. What I Am Proud Of: I am proud of turning a basic beginner console script into a complete, fault-tolerant management tool. The program safely prevents lot counts from dropping below zero, persists data across application restarts, masks password inputs dynamically, and maintains a clean, centered visual layout in the terminal. How Reviewers Should Test It: Download index.exe from the GitHub Release assets and launch it. Log in using Username: admin and PIN: 1234 (the PIN masks as XXXX). Log a few vehicle arrivals (options 1–5), check Option 11 to see the live record update, and inspect parking_records.txt. Close the program and launch it again to confirm your saved values load automatically!...
|
1792878541.7209952
|
1793742541.7209952
|
|
17293
|
Slayie by @arfa_mariyam | Stardance
|
arfa_mariyam
|
3
|
38.0
|
531
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T07:48:06Z", "hours": 9.0, "multiplier": 16.78, "payout": 147, "blessing": "neutral", "text": "I released Phase 5 of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in C++. After receiving feedback that people on Linux and Mac also wanted to try the game, I expanded the project to include full cross-platform support. Along with the 10x10 dungeon map, WASD controls, obstacle walls (#), gold coins ($), health potions (H), Goblin combat encounters (E), and persistent save/load features, the game now provides native ready-to-run binaries for Windows, Linux, and macOS. What was challenging: Building standalone binaries for platforms I don’t physically own ;) I didn’t have a Mac or Linux machine, so I learned how to configure GitHub Actions workflows to compile native Linux and macOS binaries in the cloud using cloud runners. I also had to make sure file execution permissions (chmod +x) and terminal instructions were clearly documented so non-Windows users wouldn’t encounter permission errors. What I am proud of: I’m really proud of taking community feedback seriously and turning a Windows-only CLI project into a true cross-platform game. Seeing the exact same C++ codebase build cleanly and run across Windows, Ubuntu, and macOS terminal environments feels like a huge accomplishment. How to test it: Go to the latest GitHub release (v5.0.0): https://github.com/ArfaMariyam/Slayie/releases Windows: Download and double-click SLAYIE.exe. Linux / Mac: Download slayie-linux or slayie-macos. In your terminal, run chmod +x slayie-linux (or macOS), then ./slayie-linux. Choose 1 to start a new game or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move, press K anytime to save your game state, defeat enemies (E), and reach the exit door (D)! Hope you enjoy testing it on whichever platform you use :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}, {"ship_num": 2, "ts": "2026-09-05T10:50:11Z", "hours": 9.0, "multiplier": 18.16, "payout": 197, "blessing": "neutral", "text": "What I made: I completed the final phase of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in native C++. On top of exploring the 10x10 grid map, dodging solid walls (#), collecting gold coins ($), and drinking potions (H), I added enemy Goblin encounters (E) with combat damage, a game-over screen if your health drops to 0, and a full file save/load system so you can save your progress and resume anytime from local storage. What was challenging: Implementing file handling with to save and load the game state. I had to figure out how to save not just the player stats (playerX, playerY, playerHealth, goldCount), but also loop through the entire 2D dungeon array (dungeon[10][10]) row by row into slayie_save.txt. Making sure that picked-up items and defeated enemies didn’t respawn after reloading a save took quite a bit of debugging. What I am proud of: I’m really proud of finishing all 4 milestones of the roadmap from a blank file to a fully complete RPG. Having working grid movement, collision barriers, real-time stat tracking, combat encounters, and persistent text-file saving all compiled into a single executable file that anyone can play feels amazing :) How to test it: Download the compiled SLAYIE.exe from my GitHub repository’s latest release (v4.0.0). Double-click SLAYIE.exe to run it directly in your terminal. Select 1 to start a new run or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move your character, press K anytime to save your progress, defeat enemies (E), and reach the exit door (D)! Hope you enjoy it :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}, {"ship_num": 3, "ts": "2026-08-25T11:45:32Z", "hours": 20.0, "multiplier": 9.0, "payout": 187, "blessing": "neutral", "text": "What I made: I built Slayie, a terminal based ASCII Dungeon Crawler RPG written in native C++. It renders an interactive 10x10 dungeon grid where you control a character (@) using WASD keys, navigate around solid boundary and obstacle walls (#), collect gold coins ($), drink health potions (H) to restore health, and try to reach the exit door (D). What was challenging: As a beginner learning C++, working with 2D array coordinates (dungeon[10][10]) was the trickiest part. I initially mixed up rows (Y-axis) and columns (X-axis), which caused movement keys to move in reverse and item pickups to wipe the wrong map tiles. Writing predictive collision checks so the player stops before hitting a wall took a lot of trial, error, and debugging. What I am proud of: I’m really proud of turning basic programming fundamentals (nested loops, 2D arrays, and conditional branches) into an actual interactive game with real-time stats. Building a complete game loop from scratch and compiling a working .exe file that runs with one click feels awesome :) How to test it: Download the compiled index.exe from my GitHub repository’s latest release. Double-click index.exe to run it directly in your terminal. Use W, A, S, D (followed by Enter) to move your character around the map, collect items, and find the D door. Hope you enjoy it :)", "repo": "https://github.com/ArfaMariyam/Slayie", "demo": "https://github.com/ArfaMariyam/Slayie/releases"}]...
|
[{"post_id": 65248, "ts": "202 [{"post_id": 65248, "ts": "2026-09-10T07:39:30Z", "hours": 8.7703, "text": "Phase 5 of Slayie is live •⩊• After going through peer review feedback on Stardance, I saw that players using Linux and Mac also wanted to test the game. I added a 5th phase to provide cross-platform support by compiling native standalone binaries (slayie-linux and slayie-macos) and attaching them to the GitHub release alongside SLAYIE.exe. I also added terminal execution permissions (chmod +x) and quick source build commands in the README so anyone can run Slayie regardless of their OS"}, {"post_id": 62094, "ts": "2026-09-05T10:44:09Z", "hours": 9.0578, "text": "Phase 4 of Slayie is officially complete! I Added enemy encounters (E) that trigger combat and deal 25 damage to the player, along with a full game-over screen if your health drops to 0. Also built a file save and load system using so pressing K writes all stats and the current map grid into slayie_save.txt, letting you restore your exact progress from the main menu."}, {"post_id": 54388, "ts": "2026-08-25T11:37:41Z", "hours": 12.7342, "text": "Phase 3 of Slayie is complete! Added collectible Gold coins ($) and Health Potions (H) across the dungeon floor. Stepping on a gold tile grants +10 coins, while potions heal +20 HP up to the 100 HP max limit. After picking up an item, the tile is cleared to floor (.) so items can’t be looted twice."}, {"post_id": 41177, "ts": "2026-08-05T06:59:56Z", "hours": 5.5186, "text": "Just completed Phase 2 of Slayie! Converted the map into a full 2D array matrix (dungeon[10][10]) to store real wall layouts and obstacle data. Added solid boundary walls (#), interior obstacles, and built collision detection so the player @ can’t walk through walls. Also added an exit door (D) at (8, 8) to clear the dungeon, and fixed a movement math bug where pressing S was moving the player in reverse!"}, {"post_id": 35765, "ts": "2026-07-27T12:24:47Z", "hours": 1.93, "text": "Slayie’s Phase 1 Complete: 10x10 ASCII Grid & WASD Movement Framework! Today I kicked off my new project, Slayie (a terminal-based ASCII Dungeon Crawler RPG in C++), and finished Phase 1! What I built: Rendered a 10x10 grid map on the terminal using nested loops, with the player represented by the @ icon. Implemented live coordinate tracking for (playerX, playerY). Built WASD keyboard controls (W Up, S Down, A Left, D Right) and a Q key to exit. Added boundary checks so the player can’t move off the map edges. Added a live stats dashboard showing Health (HP) and Gold coins."}]...
|
Title: Slayie by @arfa_mariyam | Stardance
Devlog Title: Slayie by @arfa_mariyam | Stardance
Devlogs:
Slayie’s Phase 1 Complete: 10x10 ASCII Grid & WASD Movement Framework! Today I kicked off my new project, Slayie (a terminal-based ASCII Dungeon Crawler RPG in C++), and finished Phase 1! What I built: Rendered a 10x10 grid map on the terminal using nested loops, with the player represented by the @ icon. Implemented live coordinate tracking for (playerX, playerY). Built WASD keyboard controls (W Up, S Down, A Left, D Right) and a Q key to exit. Added boundary checks so the player can’t move off the map edges. Added a live stats dashboard showing Health (HP) and Gold coins.
Just completed Phase 2 of Slayie! Converted the map into a full 2D array matrix (dungeon[10][10]) to store real wall layouts and obstacle data. Added solid boundary walls (#), interior obstacles, and built collision detection so the player @ can’t walk through walls. Also added an exit door (D) at (8, 8) to clear the dungeon, and fixed a movement math bug where pressing S was moving the player in reverse!
Phase 3 of Slayie is complete! Added collectible Gold coins ($) and Health Potions (H) across the dungeon floor. Stepping on a gold tile grants +10 coins, while potions heal +20 HP up to the 100 HP max limit. After picking up an item, the tile is cleared to floor (.) so items can’t be looted twice.
Phase 4 of Slayie is officially complete! I Added enemy encounters (E) that trigger combat and deal 25 damage to the player, along with a full game-over screen if your health drops to 0. Also built a file save and load system using so pressing K writes all stats and the current map grid into slayie_save.txt, letting you restore your exact progress from the main menu.
Phase 5 of Slayie is live •⩊• After going through peer review feedback on Stardance, I saw that players using Linux and Mac also wanted to test the game. I added a 5th phase to provide cross-platform support by compiling native standalone binaries (slayie-linux and slayie-macos) and attaching them to the GitHub release alongside SLAYIE.exe. I also added terminal execution permissions (chmod +x) and quick source build commands in the README so anyone can run Slayie regardless of their OS
Ships:
What I made: I built Slayie, a terminal based ASCII Dungeon Crawler RPG written in native C++. It renders an interactive 10x10 dungeon grid where you control a character (@) using WASD keys, navigate around solid boundary and obstacle walls (#), collect gold coins ($), drink health potions (H) to restore health, and try to reach the exit door (D). What was challenging: As a beginner learning C++, working with 2D array coordinates (dungeon[10][10]) was the trickiest part. I initially mixed up rows (Y-axis) and columns (X-axis), which caused movement keys to move in reverse and item pickups to wipe the wrong map tiles. Writing predictive collision checks so the player stops before hitting a wall took a lot of trial, error, and debugging. What I am proud of: I’m really proud of turning basic programming fundamentals (nested loops, 2D arrays, and conditional branches) into an actual interactive game with real-time stats. Building a complete game loop from scratch and compiling a working .exe file that runs with one click feels awesome :) How to test it: Download the compiled index.exe from my GitHub repository’s latest release. Double-click index.exe to run it directly in your terminal. Use W, A, S, D (followed by Enter) to move your character around the map, collect items, and find the D door. Hope you enjoy it :)
What I made: I completed the final phase of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in native C++. On top of exploring the 10x10 grid map, dodging solid walls (#), collecting gold coins ($), and drinking potions (H), I added enemy Goblin encounters (E) with combat damage, a game-over screen if your health drops to 0, and a full file save/load system so you can save your progress and resume anytime from local storage. What was challenging: Implementing file handling with to save and load the game state. I had to figure out how to save not just the player stats (playerX, playerY, playerHealth, goldCount), but also loop through the entire 2D dungeon array (dungeon[10][10]) row by row into slayie_save.txt. Making sure that picked-up items and defeated enemies didn’t respawn after reloading a save took quite a bit of debugging. What I am proud of: I’m really proud of finishing all 4 milestones of the roadmap from a blank file to a fully complete RPG. Having working grid movement, collision barriers, real-time stat tracking, combat encounters, and persistent text-file saving all compiled into a single executable file that anyone can play feels amazing :) How to test it: Download the compiled SLAYIE.exe from my GitHub repository’s latest release (v4.0.0). Double-click SLAYIE.exe to run it directly in your terminal. Select 1 to start a new run or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move your character, press K anytime to save your progress, defeat enemies (E), and reach the exit door (D)! Hope you enjoy it :)
I released Phase 5 of Slayie, my terminal-based ASCII Dungeon Crawler RPG written in C++. After receiving feedback that people on Linux and Mac also wanted to try the game, I expanded the project to include full cross-platform support. Along with the 10x10 dungeon map, WASD controls, obstacle walls (#), gold coins ($), health potions (H), Goblin combat encounters (E), and persistent save/load features, the game now provides native ready-to-run binaries for Windows, Linux, and macOS. What was challenging: Building standalone binaries for platforms I don’t physically own ;) I didn’t have a Mac or Linux machine, so I learned how to configure GitHub Actions workflows to compile native Linux and macOS binaries in the cloud using cloud runners. I also had to make sure file execution permissions (chmod +x) and terminal instructions were clearly documented so non-Windows users wouldn’t encounter permission errors. What I am proud of: I’m really proud of taking community feedback seriously and turning a Windows-only CLI project into a true cross-platform game. Seeing the exact same C++ codebase build cleanly and run across Windows, Ubuntu, and macOS terminal environments feels like a huge accomplishment. How to test it: Go to the latest GitHub release (v5.0.0): https://github.com/ArfaMariyam/Slayie/releases Windows: Download and double-click SLAYIE.exe. Linux / Mac: Download slayie-linux or slayie-macos. In your terminal, run chmod +x slayie-linux (or macOS), then ./slayie-linux. Choose 1 to start a new game or 2 to load your previous save file. Use W, A, S, D (followed by Enter) to move, press K anytime to save your game state, defeat enemies (E), and reach the exit door (D)! Hope you enjoy testing it on whichever platform you use :)...
|
1792878583.2367184
|
1793742583.2367184
|
|
17626
|
SmartSchedule AI by @chahatesh | Stardance
|
chahatesh
|
3
|
13.0
|
56
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T20:06:10Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my third ship so I kind of have ideas but based on my feedback what people wanted was a dashboard feature so I added a dashboard back. I also just made it look a lot better, figured out a bunch of bugs, and fixed those and now it looks like a real product.", "repo": "https://github.com/chahatesh/SmartSchedule", "demo": "https://smartschedule.wasmer.app/"}, {"ship_num": 2, "ts": "2026-07-25T16:43:16Z", "hours": 4.0, "multiplier": 17.78, "payout": 37, "blessing": "cursed", "text": "For this next ship, I mostly changed the overall design of the app. In the last review, it was said that the app looked a little too AI-generated, which is fair since I had used AI to help generate the CSS. So, I redid the CSS myself to make the app look much better. I am not the strongest at CSS, so it still has a slightly older look, but I think it turned out fine. I also added a demo mode, which was an important improvement because one of the main pieces of feedback was that users had to make an account and sign in every time. With demo mode, they can try the app without needing an account. Another issue I worked on was the AI not always calling tools correctly. That took a lot of time to fix, but after a lot of work, I got it working properly. I also put more emphasis on voice typing, because that is one of the main features of the app. It makes everything faster and easier since users can just talk instead of typing everything out.", "repo": "https://github.com/chahatesh/SmartSchedule", "demo": "https://smartschedule.wasmer.app/"}, {"ship_num": 3, "ts": "2026-06-20T13:00:59Z", "hours": 4.0, "multiplier": 4.39, "payout": 19, "blessing": "neutral", "text": "I created Smart Schedule AI, a calendar and scheduling platform that combines a web application, an AI assistant, and a dedicated hardware device. Users can create events by chatting with the AI in natural language, and the events are automatically added to their calendar. I also developed a Smart Schedule Device using an ESP32-C3 and a 0.96” OLED display that connects to a user’s account and displays their next upcoming event. One of the biggest challenges was getting the website and hardware device to communicate reliably. I needed a way for users to connect the device to Wi-Fi without requiring complicated setup steps. To solve this, I implemented USB-based communication that allows Wi-Fi credentials to be sent directly to the device during setup. Another challenge was configuring the cloud database and account system so that each device could securely retrieve data from the correct user account. I am proud that I was able to create a complete system that combines software, hardware, cloud services, and AI into a single project. The device successfully synchronizes with the website and displays upcoming events in real time. I’m also proud that I was able to design a simple user experience where scheduling can be done through conversation instead of manually creating every calendar event. What should people know so they can test your project? To test Smart Schedule AI, users should create an account on the website and add a few events using the AI assistant or calendar interface. The Smart Schedule Device must be connected to a computer using USB to configure Wi-Fi credentials during setup. Once connected to Wi-Fi, the device will automatically synchronize with the user’s account and display their next scheduled event. Testers should verify that newly created events appear correctly on both the website and the device and that updates synchronize properly between them.", "repo": "https://github.com/chahatesh/SmartSchedule", "demo": "https://smartschedule.wasmer.app/"}]...
|
[{"post_id": 39673, "ts": "202 [{"post_id": 39673, "ts": "2026-08-02T20:05:02Z", "hours": 0.0, "text": "Dev Log 10 - Ship 3!!! What I did was really simple. I just made a dashboard that shows you things that you’ve done today things you have upcoming and your day"}, {"post_id": 39600, "ts": "2026-08-02T18:07:38Z", "hours": 3.0, "text": "Dev Log 9 - update Okay this took longer than I would expect because the existing thing that I coded was kind of off so I had to add a bunch of things. The CSS was kind of weird but I got it to work. It took a while but I made it kind of like a 3D effect. All that’s left to do is to add the dashboard so you can see what’s happening today but I think it looks decent. I didn’t change its color scheme. I just made it feel more modern and better."}, {"post_id": 34680, "ts": "2026-07-25T16:20:28Z", "hours": 1.0, "text": "Devlog 8 - Ship 2 So based on last ship the biggest think was that people did not like the set up of the app and that it look bad so i made it diffrent and now I think it is better also i added a demo mode so you can test with out making a acount only change was that it was saved in local storage BTW - if you are reading this this is a egg"}, {"post_id": 31465, "ts": "2026-07-19T20:49:27Z", "hours": 2.0, "text": "Dev log 7 I revamped the entire website and make it look better and cleaner"}, {"post_id": 15648, "ts": "2026-06-25T13:27:42Z", "hours": 0.0, "text": "Dev Log #5 - I Got Rejected After waiting about 3–4 days, I finally got a response on my project. Unfortunately, there was also a power outage during that time, so I lost a day and couldn’t check Stardance. When I finally logged in, I found out that my project had been denied. The reason? My AI API key had been revoked. At first, I was confused because everything had been working before. I checked whether I had accidentally uploaded an old version of the app, but everything was up to date. Then I checked the files on my PC and found the same issue there. For about 20 minutes, I went through the code trying to figure out what had broken. Eventually, I decided to check my AI provider’s dashboard. That’s when I discovered that my API key had been revoked, which meant the website could no longer communicate with the AI model. Once I found the problem, the fix was straightforward. I generated a new API key, updated the website configuration, and tested everything again. After a few tests, the AI features were working normally and the project was back online. To prevent this from happening again, I only stored the new API key on the live website and removed it from GitHub. This keeps the key private and reduces the chance of it being exposed or automatically revoked."}, {"post_id": 12502, "ts": "2026-06-20T12:57:27Z", "hours": 0.0, "text": "Dev Log #5 – Device Integration Complete & First Shipment Today marked a major milestone for Smart Schedule AI. I completed the integration between the Smart Schedule web platform and the Smart Schedule Device, allowing events from a user’s account to be displayed directly on the device’s OLED screen. One challenge was configuring Wi-Fi on the device. To solve this, I implemented a USB communication system that allows users to connect the Smart Schedule Device to a computer and securely send Wi-Fi credentials to the ESP32-C3. This provides a simple setup experience and ensures the device can connect to the internet and synchronize with the user’s calendar. – Completed Tasks Finished website-to-device integration Connected Smart Schedule accounts with physical devices Implemented USB communication for Wi-Fi setup Improved device synchronization and event retrieval Tested event updates between the website and hardware Finalized device firmware for deployment – Hardware Configuration ESP32-C3 0.96” OLED Display Rechargeable Battery Charging Module Power Switch – Manufacturing & Shipping After completing final testing, I assembled and packaged the first Smart Schedule Device. All hardware, firmware, and website components were verified and prepared for use. With testing complete, the device was packaged and shipped, marking the first fully functional Smart Schedule AI system deployment. Current Status ✅ Website Complete ✅ Device Complete ✅ Account Integration Working ✅ Wi-Fi Setup Implemented ✅ Event Synchronization Working ✅ First Device Shipped –Next Steps Improve onboarding experience Add support for multiple devices per account Expand AI scheduling capabilities Continue testing with real-world usage This milestone represents the first complete end-to-end Smart Schedule AI ecosystem, combining the web application, AI assistant, cloud synchronization, and dedicated hardware display into a single working product. 🚀"}, {"post_id": 11538, "ts": "2026-06-18T20:45:07Z", "hours": 0.0, "text": "Dev Log #4: Building the Reminder Device Today, I focused on designing, modeling, and programming the reminder device that connects to the AI calendar system. The device attaches to a user’s account and displays their upcoming events, allowing them to quickly see what they need to do next without opening the website. One of the biggest challenges was getting the ESP32-C3 to communicate with Firebase correctly. Firebase relies heavily on JSON data, and I spent a lot of time figuring out how to properly format, send, and read the data coming from the database. Small mistakes in the JSON structure could prevent the device from receiving event information, making debugging especially frustrating.Although the device itself is fairly simple, getting it to reliably connect to Wi-Fi, communicate with Firebase, and display the correct upcoming event took a lot more testing than I originally expected. By the end of this session, the device was successfully syncing with user accounts and displaying upcoming calendar events."}, {"post_id": 11034, "ts": "2026-06-18T01:56:55Z", "hours": 1.0, "text": "Dev Log #3: Building the Website Disclaimer: The coding-time tracker for this project is inaccurate by approximately 5–6 hours due to starting this project before stardance. This week, I focused on building the main website for the AI calendar system. The website now includes a calendar interface where users can view and manage events, an AI chat section that allows users to create events through natural conversation, and a device pairing page for connecting an ESP32-C3 reminder device. The biggest challenge I ran into was getting the AI to properly use tool calls. Sometimes the AI clearly understood what the user wanted, but instead of calling the event-creation function, it would simply respond with text describing what it would do. This led to a lot of testing and experimentation with prompts, tool definitions, and API settings until the AI consistently triggered the correct functions. By the end of this development session, the website was functional, the AI could create events through tool calls, and the device pairing system was successfully integrated into the interface."}, {"post_id": 9452, "ts": "2026-06-15T20:20:08Z", "hours": 0.0, "text": "Dev Log #2: Fighting the API I thought adding the Grok API would be one of the easier parts of the project. It turns out I was wrong. Since I had never worked with the API before, a lot of my time was spent tracking down small syntax mistakes. The API was very specific about how requests needed to be formatted, and even tiny errors could cause everything to fail. For example, at one point I wrote: payload = { \"model\": GROQ_MODEL, \"messages\": [{\"role\": \"user\", \"content\": message}] \"temperature\": 2, \"max_tokens\": 500, } I forgot the comma after “message}]” which caused an error and took me longer than I’d like to admit to find. The frustrating part was that the code usually looked correct at first glance. I would spend time checking API keys, debugging functions, and rereading documentation, only to discover that the issue was a single missing character. Now I know to read the documentation more and also if you like this project like and follow me."}, {"post_id": 8744, "ts": "2026-06-14T15:24:30Z", "hours": 0.0, "text": "Dev Log 1 Discamer time is off by about 5 hours- joined Stardance midway through development. The project is an AI-powered calendar assistant that allows users to create and manage events through natural conversation. Users can speak to the AI, and their speech is transcribed into text before being sent to an AI model such as Grok or Llama. The AI analyzes the request and generates tool calls to create, edit, or manage calendar events automatically. After the tool call is executed, the calendar is updated and the user receives confirmation. I also worked on integrating a companion reminder device that provides physical notifications for upcoming events. One of the most interesting parts of the project was building and understanding the AI pipeline that connects speech recognition, AI processing, tool calling, and calendar management into a seamless user experience."}]...
|
Title: SmartSchedule AI by @chahatesh | Stardance
Title: SmartSchedule AI by @chahatesh | Stardance
Devlogs:
Dev Log 1 Discamer time is off by about 5 hours- joined Stardance midway through development. The project is an AI-powered calendar assistant that allows users to create and manage events through natural conversation. Users can speak to the AI, and their speech is transcribed into text before being sent to an AI model such as Grok or Llama. The AI analyzes the request and generates tool calls to create, edit, or manage calendar events automatically. After the tool call is executed, the calendar is updated and the user receives confirmation. I also worked on integrating a companion reminder device that provides physical notifications for upcoming events. One of the most interesting parts of the project was building and understanding the AI pipeline that connects speech recognition, AI processing, tool calling, and calendar management into a seamless user experience.
Dev Log #2: Fighting the API I thought adding the Grok API would be one of the easier parts of the project. It turns out I was wrong. Since I had never worked with the API before, a lot of my time was spent tracking down small syntax mistakes. The API was very specific about how requests needed to be formatted, and even tiny errors could cause everything to fail. For example, at one point I wrote: payload = { "model": GROQ_MODEL, "messages": [{"role": "user", "content": message}] "temperature": 2, "max_tokens": 500, } I forgot the comma after “message}]” which caused an error and took me longer than I’d like to admit to find. The frustrating part was that the code usually looked correct at first glance. I would spend time checking API keys, debugging functions, and rereading documentation, only to discover that the issue was a single missing character. Now I know to read the documentation more and also if you like this project like and follow me.
Dev Log #3: Building the Website Disclaimer: The coding-time tracker for this project is inaccurate by approximately 5–6 hours due to starting this project before stardance. This week, I focused on building the main website for the AI calendar system. The website now includes a calendar interface where users can view and manage events, an AI chat section that allows users to create events through natural conversation, and a device pairing page for connecting an ESP32-C3 reminder device. The biggest challenge I ran into was getting the AI to properly use tool calls. Sometimes the AI clearly understood what the user wanted, but instead of calling the event-creation function, it would simply respond with text describing what it would do. This led to a lot of testing and experimentation with prompts, tool definitions, and API settings until the AI consistently triggered the correct functions. By the end of this development session, the website was functional, the AI could create events through tool calls, and the device pairing system was successfully integrated into the interface.
Dev Log #4: Building the Reminder Device Today, I focused on designing, modeling, and programming the reminder device that connects to the AI calendar system. The device attaches to a user’s account and displays their upcoming events, allowing them to quickly see what they need to do next without opening the website. One of the biggest challenges was getting the ESP32-C3 to communicate with Firebase correctly. Firebase relies heavily on JSON data, and I spent a lot of time figuring out how to properly format, send, and read the data coming from the database. Small mistakes in the JSON structure could prevent the device from receiving event information, making debugging especially frustrating.Although the device itself is fairly simple, getting it to reliably connect to Wi-Fi, communicate with Firebase, and display the correct upcoming event took a lot more testing than I originally expected. By the end of this session, the device was successfully syncing with user accounts and displaying upcoming calendar events.
Dev Log #5 – Device Integration Complete & First Shipment Today marked a major milestone for Smart Schedule AI. I completed the integration between the Smart Schedule web platform and the Smart Schedule Device, allowing events from a user’s account to be displayed directly on the device’s OLED screen. One challenge was configuring Wi-Fi on the device. To solve this, I implemented a USB communication system that allows users to connect the Smart Schedule Device to a computer and securely send Wi-Fi credentials to the ESP32-C3. This provides a simple setup experience and ensures the device can connect to the internet and synchronize with the user’s calendar. – Completed Tasks Finished website-to-device integration Connected Smart Schedule accounts with physical devices Implemented USB communication for Wi-Fi setup Improved device synchronization and event retrieval Tested event updates between the website and hardware Finalized device firmware for deployment – Hardware Configuration ESP32-C3 0.96” OLED Display Rechargeable Battery Charging Module Power Switch – Manufacturing & Shipping After completing final testing, I assembled and packaged the first Smart Schedule Device. All hardware, firmware, and website components were verified and prepared for use. With testing complete, the device was packaged and shipped, marking the first fully functional Smart Schedule AI system deployment. Current Status ✅ Website Complete ✅ Device Complete ✅ Account Integration Working ✅ Wi-Fi Setup Implemented ✅ Event Synchronization Working ✅ First Device Shipped –Next Steps Improve onboarding experience Add support for multiple devices per account Expand AI scheduling capabilities Continue testing with real-world usage This milestone represents the first complete end-to-end Smart Schedule AI ecosystem, combining the web application, AI assistant, cloud synchronization, and dedicated hardware display into a single working product. 🚀
Dev Log #5 - I Got Rejected After waiting about 3–4 days, I finally got a response on my project. Unfortunately, there was also a power outage during that time, so I lost a day and couldn’t check Stardance. When I finally logged in, I found out that my project had been denied. The reason? My AI API key had been revoked. At first, I was confused because everything had been working before. I checked whether I had accidentally uploaded an old version of the app, but everything was up to date. Then I checked the files on my PC and found the same issue there. For about 20 minutes, I went through the code trying to figure out what had broken. Eventually, I decided to check my AI provider’s dashboard. That’s when I discovered that my API key had been revoked, which meant the website could no longer communicate with the AI model. Once I found the problem, the fix was straightforward. I generated a new API key, updated the website configuration, and tested everything again. After a few tests, the AI features were working normally and the project was back online. To prevent this from happening again, I only stored the new API key on the live website and removed it from GitHub. This keeps the key private and reduces the chance of it being exposed or automatically revoked.
Dev log 7 I revamped the entire website and make it look better and cleaner
Devlog 8 - Ship 2 So based on last ship the biggest think was that people did not like the set up of the app and that it look bad so i made it diffrent and now I think it is better also i added a demo mode so you can test with out making a acount only change was that it was saved in local storage BTW - if you are reading this this is a egg
Dev Log 9 - update Okay this took longer than I would expect because the existing thing that I coded was kind of off so I had to add a bunch of things. The CSS was kind of weird but I got it to work. It took a while but I made it kind of like a 3D effect. All that’s left to do is to add the dashboard so you can see what’s happening today but I think it looks decent. I didn’t change its color scheme. I just made it feel more modern and better.
Dev Log 10 - Ship 3!!! What I did was really simple. I just made a dashboard that shows you things that you’ve done today things you have upcoming and your day
Ships:
I created Smart Schedule AI, a calendar and scheduling platform that combines a web application, an AI assistant, and a dedicated hardware device. Users can create events by chatting with the AI in natural language, and the events are automatically added to their calendar. I also developed a Smart Schedule Device using an ESP32-C3 and a 0.96” OLED display that connects to a user’s account and displays their next upcoming event. One of the biggest challenges was getting the website and hardware device to communicate reliably. I needed a way for users to connect the device to Wi-Fi without requiring complicated setup steps. To solve this, I implemented USB-based communication that allows Wi-Fi credentials to be sent directly to the device during setup. Another challenge was configuring the cloud database and account system so that each device could securely retrieve data from the correct user account. I am proud that I was able to create a complete system that combines software, hardware, cloud services, and AI into a single project. The device successfully synchronizes with the website and displays upcoming events in real time. I’m also proud that I was able to design a simple user experience where scheduling can be done through conversation instead of manually creating every calendar event. What should people know so they can test your project? To test Smart Schedule AI, users should create an account on the website and add a few events using the AI assistant or calendar interface. The Smart Schedule Device must be connected to a computer using USB to configure Wi-Fi credentials during setup. Once connected to Wi-Fi, the device will automatically synchronize with the user’s account and display their next scheduled event. Testers should verify that newly created events appear correctly on both the website and the device and that updates synchronize properly between them.
For this next ship, I mostly changed the overall design of the app. In the last review, it was said that the app looked a little too AI-generated, which is fair since I had used AI to help generate the CSS. So, I redid the CSS myself to make the app look much better. I am not the strongest at CSS, so it still has a slightly older look, but I think it turned out fine. I also added a demo mode, which was an important improvement because one of the main pieces of feedback was that users had to make an account and sign in every time. With demo mode, they can try the app without needing an account. Another issue I worked on was the AI not always calling tools correctly. That took a lot of time to fix, but after a lot of work, I got it working properly. I also put more emphasis on voice typing, because that is one of the main features of the app. It makes everything faster and easier since users can just talk instead of typing everything out.
This is my third ship so I kind of have ideas but based on my feedback what people wanted was a dashboard feature so I added a dashboard back. I also just made it look a lot better, figured out a bunch of bugs, and fixed those and now it looks like a real product....
|
1792882056.0240679
|
1793746056.0240679
|
|
17898
|
Stellar (not an operating system )) by @yashasvib Stellar (not an operating system )) by @yashasvib | Stardance...
|
yashasvib
|
3
|
19.0
|
147
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-12T14:59:43Z", "hours": 13.0, "multiplier": 7.95, "payout": 54, "blessing": "neutral", "text": "guys!! i tried updating this application and this is a modified version of stellaros Imagine a place where you can literally explore the entire solar system like it’s Google Maps, but for space. You can zoom into planets, check out moons, watch asteroids move, and just kinda “float” around the universe in real time. It pulls all its data directly from official NASA sources, so everything you’re seeing is actually legit and updated, not random internet stuff. You can click on any planet or space object and instantly get all the details—like what it’s made of, how far it is, what’s happening around it, and even cool mission info. It also shows a copy of real-time movement of planets and space events,(random, it calculate the movement of planet in the following way- my planets around the sun is definately not real -time but in same proportional ratio as I found on NASA(in simple terms for example if Earth takes 365 1/4 day to revolve around the sun , my project take the data for how much time earth take and compare it to other planets and then make them revolve around with same proportional speed and distance )) (and the mission are devloped with the help of AI -I take data from the NASA and I try to take only those missions which I can perfectly display in terms of their position (from where they started and to where )and this part I took help of AI (chatgpt to be specific )and it helped me display a perfect spacepath of that mission using js .) so i try to make the whole thing feels alive instead of static. i am currently just working on it and plz share your thought and ideas how could i make it even better . AND PEOPLE OFTEN GET CONFUSED THAT IT IS A OPERATING SYSTEM BUT NO!! ITS A INTERACTIVE WEBS.. !!", "repo": "https://github.com/yashasvi-2012-star/StellarOS", "demo": "https://stellarosyuqi.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-08T12:59:08Z", "hours": 4.0, "multiplier": 14.22, "payout": 55, "blessing": "neutral", "text": "StellarOS GUYS!!! !! Imagine an operating system where you can literally explore the entire solar system like it’s Google Maps, but for space. You can zoom into planets, check out THIER moons, watch asteroids move. It pulls all its data directly from official NASA sources and its website , so everything you’re seeing is actually legit and updated, not random internet stuff. You can click on any planet or space object and instantly get all the details—like what it’s made of, how far it is, what’s happening around it, and even cool mission info. I tried my best with this project .I hope u like it !! make sure to give me feedback !! things used and their sources languages used- 1-HTML (major) 2-CSS 3-JAVA SCRIPT Images and their sources 1- the background image of the landing page-it was found on google and I had my heart over it but I could not find it again so I had to use AI to create one on the based of my memory (yep I gave it prompt on the basis of my memory and the real image’s credit goes to their owner (sadly I can’t remember)) 2-the images used for planets for their yk.. texture is from NASA and it is fitted into circular frames which revovle around in their respective orbits 3- the images used in the info panel has also been taken from official NASA uploaded images as in the form of ${imageBase} text based database and the mission trajectory projections 1- all the information comes from my database which contain information from YK.. NNNAAASSSAAA….. 2-the paths projected for space missions are yk.from nasa cause bro why not?!?! but the thing here is that I only found some yk information and I had to take help of AI to create their trajectory AI usage declaration 1- as mentioned above I used AI for creating the first landing page background and then the trajectory of space missions 2-I also used AI for debugging and took it’s help with errors witch occured in dry running of my codes thank you note !! You are either here for reviewing my project or rating my project , and I sincerely hope that my project meet your expectations and I want to thank you for everything you have done in my favour !! MAY YOU HAVE A HAPPYDAY !! and English is not my first language , so forgive me for grammatic error ! THANK YOU !! BYE !!!", "repo": "https://github.com/yashasvi-2012-star/StellarOS", "demo": "https://stellarosyuqi.vercel.app/"}, {"ship_num": 3, "ts": "2026-06-15T18:58:37Z", "hours": 2.0, "multiplier": 17.74, "payout": 38, "blessing": "neutral", "text": "guys!! Imagine an operating system where you can literally explore the entire solar system like it’s Google Maps, but for space. You can zoom into planets, check out moons, watch asteroids move,. It pulls all its data directly from official NASA sources, so everything you’re seeing is actually legit and updated, not random internet stuff. You can click on any planet or space object and instantly get all the details—like what it’s made of, how far it is, what’s happening around it, and even cool mission info. , so the whole thing feels alive instead of static. plz share your thought and ideas how could i make it even better .i tried my best with this project .i hope u like it !! make sure to give me feedback !! BYE !!!", "repo": "https://github.com/yashasvi-2012-star/StellarOS", "demo": "https://stellarosyuqi.vercel.app/"}]...
|
[{"post_id": 32961, "ts": "202 [{"post_id": 32961, "ts": "2026-07-22T13:32:26Z", "hours": 5.1514, "text": "HI GUYS !! this time i think i have a sad news to deliver - that i messed my whole code and it took 5 hr to sort things out , according to my AI teacher my biggest bad habit is that i try to make things short and easy and in the hasle of making things short i mess the things pretty bad (yes i have AI as an optional subject in school ) so i guess that in the next devlog i come here with a good new !! BYE !!!"}, {"post_id": 28313, "ts": "2026-07-14T14:16:46Z", "hours": 5.2233, "text": "hi guyss once upon a time i had my original road map for stellar but there were errors and errors and more errors so guess we have to stop this project (also that i have a major event in school comming up -EXAMS !! ) but ill try do little by little more changes , more functions and i guess my following devlogs from this one gonna talk bout how to fix mistakes and i guess you all are working fine with your projects !!"}, {"post_id": 25979, "ts": "2026-07-10T14:58:47Z", "hours": 3.0736, "text": "HEY GUYS !! todays update - I think my idea was messy and thus no possible outcome was drawn out of my this coding session . i think my idea to make it go even further into solarsystem and present all the data that humans possibly know (basic ) bout them had BACKFIRED ME !! cause it is really getting messy and i even did changes in my code i hope its sorted"}, {"post_id": 24672, "ts": "2026-07-08T12:47:26Z", "hours": 1.2872, "text": "HEY !!!! CAN YOU SEE THE STARTS ?!?! IS IT GLOWY ENOUGH ??!!??"}, {"post_id": 24198, "ts": "2026-07-07T16:45:49Z", "hours": 0.6389, "text": "hey !! this is gonna be short cuz I had a busy day today and I only did the README I changed thing -like removing old reffrences adding new ones and all !!"}, {"post_id": 24021, "ts": "2026-07-07T09:34:28Z", "hours": 1.6561, "text": "hi !! I thought why not to keep this going and keep on adding new features !!! today i only did re arrangements in my code so that my new codes yk don’t clash ..and I also started planning out bout the codes and all. and I think this project will approximately take 8-9 hours if I only add these planned feature. if I decide to add more it will probably take 20-21 hr. that’s all for today bye !!!"}, {"post_id": 12063, "ts": "2026-06-19T17:49:40Z", "hours": 0.3544, "text": "hiiii !!!!! now i have just connected my this project with my OS and each and everything is workin’ and this is just how I IMAGIENED IT !!!!"}, {"post_id": 9384, "ts": "2026-06-15T18:40:56Z", "hours": 1.0717, "text": "HELLO GUYSS!!!! this is my third update on STELLAROS and i now think ite finally completed . i’ve added pop-ups of information when you click them and even added the moon when u click a planet with moon . and fixed some bugs that even created a mess with my code . i hope you all enjoy it . i’d really like a feedback and it has been the longest time taking part of the project ."}, {"post_id": 8813, "ts": "2026-06-14T17:21:34Z", "hours": 0.275, "text": "HELLO GUYS!!!!! this is to update you all about my webs.. StellarOS. i have fixed some bugs , made the asteroid buttons working and add the solar system in middle rather then in the side .i think the orbits are not quite visible but the planets are all moving the following image shows about the solar mission i mentioned in the earlier devlog . i did some stars outside our solar system their far away so you may have to search for them a bit . ok so this was hard and this is somewhat how i imagined it and i may even add more to it . next i will be working on pop up box that appears when a planet is clicked . i will make sure to keep you all updated BYE !!!"}, {"post_id": 8755, "ts": "2026-06-14T15:48:21Z", "hours": 0.4989, "text": "HEYYY!!!!!! wlcm to second update of stellarOS (don’t go on it’s name and i forgot to post this devlog so im posting it just before third devlog ). this time a designed the second page of my webs.. it was pretty hard tho . i had to take help of ai cause my zoom feature wont just work and even if it did sometime too slow or too fast . and i also added a panel at the side of the screen to show space programs , u select a program it give’s its info and even the path it travelled on the mission . and i even add a button to leave our solar system but theirs nothing beyond our solar system and i am working on it , and i have added one more button to view asteroids(it really do show ) . i hope you guys visit it and just give me honest feed back so i get to improve more . BEST OF LUCK GUYS !!!"}, {"post_id": 7957, "ts": "2026-06-13T08:53:03Z", "hours": 0.2689, "text": "HEY!! this is the first update on my StellarOS . this is a webs.. that first lands on a screen i tried to design as a cockpit of a spaceship . then when u press the botton (blue one )its takes you to second page tho i have not designed the second page yet (just did some basics ). and i hope i get to complete it nicelly i will try keep u all update BYE !!!"}]...
|
Title: Stellar (not an operating system )) by @yas Title: Stellar (not an operating system )) by @yashasvib | Stardance
Devlogs:
HEY!! this is the first update on my StellarOS . this is a webs.. that first lands on a screen i tried to design as a cockpit of a spaceship . then when u press the botton (blue one )its takes you to second page tho i have not designed the second page yet (just did some basics ). and i hope i get to complete it nicelly i will try keep u all update BYE !!!
HEYYY!!!!!! wlcm to second update of stellarOS (don’t go on it’s name and i forgot to post this devlog so im posting it just before third devlog ). this time a designed the second page of my webs.. it was pretty hard tho . i had to take help of ai cause my zoom feature wont just work and even if it did sometime too slow or too fast . and i also added a panel at the side of the screen to show space programs , u select a program it give’s its info and even the path it travelled on the mission . and i even add a button to leave our solar system but theirs nothing beyond our solar system and i am working on it , and i have added one more button to view asteroids(it really do show ) . i hope you guys visit it and just give me honest feed back so i get to improve more . BEST OF LUCK GUYS !!!
HELLO GUYS!!!!! this is to update you all about my webs.. StellarOS. i have fixed some bugs , made the asteroid buttons working and add the solar system in middle rather then in the side .i think the orbits are not quite visible but the planets are all moving the following image shows about the solar mission i mentioned in the earlier devlog . i did some stars outside our solar system their far away so you may have to search for them a bit . ok so this was hard and this is somewhat how i imagined it and i may even add more to it . next i will be working on pop up box that appears when a planet is clicked . i will make sure to keep you all updated BYE !!!
HELLO GUYSS!!!! this is my third update on STELLAROS and i now think ite finally completed . i’ve added pop-ups of information when you click them and even added the moon when u click a planet with moon . and fixed some bugs that even created a mess with my code . i hope you all enjoy it . i’d really like a feedback and it has been the longest time taking part of the project .
hiiii !!!!! now i have just connected my this project with my OS and each and everything is workin’ and this is just how I IMAGIENED IT !!!!
hi !! I thought why not to keep this going and keep on adding new features !!! today i only did re arrangements in my code so that my new codes yk don’t clash ..and I also started planning out bout the codes and all. and I think this project will approximately take 8-9 hours if I only add these planned feature. if I decide to add more it will probably take 20-21 hr. that’s all for today bye !!!
hey !! this is gonna be short cuz I had a busy day today and I only did the README I changed thing -like removing old reffrences adding new ones and all !!
HEY !!!! CAN YOU SEE THE STARTS ?!?! IS IT GLOWY ENOUGH ??!!??
HEY GUYS !! todays update - I think my idea was messy and thus no possible outcome was drawn out of my this coding session . i think my idea to make it go even further into solarsystem and present all the data that humans possibly know (basic ) bout them had BACKFIRED ME !! cause it is really getting messy and i even did changes in my code i hope its sorted
hi guyss once upon a time i had my original road map for stellar but there were errors and errors and more errors so guess we have to stop this project (also that i have a major event in school comming up -EXAMS !! ) but ill try do little by little more changes , more functions and i guess my following devlogs from this one gonna talk bout how to fix mistakes and i guess you all are working fine with your projects !!
HI GUYS !! this time i think i have a sad news to deliver - that i messed my whole code and it took 5 hr to sort things out , according to my AI teacher my biggest bad habit is that i try to make things short and easy and in the hasle of making things short i mess the things pretty bad (yes i have AI as an optional subject in school ) so i guess that in the next devlog i come here with a good new !! BYE !!!
Ships:
guys!! Imagine an operating system where you can literally explore the entire solar system like it’s Google Maps, but for space. You can zoom into planets, check out moons, watch asteroids move,. It pulls all its data directly from official NASA sources, so everything you’re seeing is actually legit and updated, not random internet stuff. You can click on any planet or space object and instantly get all the details—like what it’s made of, how far it is, what’s happening around it, and even cool mission info. , so the whole thing feels alive instead of static. plz share your thought and ideas how could i make it even better .i tried my best with this project .i hope u like it !! make sure to give me feedback !! BYE !!!
StellarOS GUYS!!! !! Imagine an operating system where you can literally explore the entire solar system like it’s Google Maps, but for space. You can zoom into planets, check out THIER moons, watch asteroids move. It pulls all its data directly from official NASA sources and its website , so everything you’re seeing is actually legit and updated, not random internet stuff. You can click on any planet or space object and instantly get all the details—like what it’s made of, how far it is, what’s happening around it, and even cool mission info. I tried my best with this project .I hope u like it !! make sure to give me feedback !! things used and their sources languages used- 1-HTML (major) 2-CSS 3-JAVA SCRIPT Images and their sources 1- the background image of the landing page-it was found on google and I had my heart over it but I could not find it again so I had to use AI to create one on the based of my memory (yep I gave it prompt on the basis of my memory and the real image’s credit goes to their owner (sadly I can’t remember)) 2-the images used for planets for their yk.. texture is from NASA and it is fitted into circular frames which revovle around in their respective orbits 3- the images used in the info panel has also been taken from official NASA uploaded images as in the form of ${imageBase} text based database and the mission trajectory projections 1- all the information comes from my database which contain information from YK.. NNNAAASSSAAA….. 2-the paths projected for space missions are yk.from nasa cause bro why not?!?! but the thing here is that I only found some yk information and I had to take help of AI to create their trajectory AI usage declaration 1- as mentioned above I used AI for creating the first landing page background and then the trajectory of space missions 2-I also used AI for debugging and took it’s help with errors witch occured in dry running of my codes thank you note !! You are either here for reviewing my project or rating my project , and I sincerely hope that my project meet your expectations and I want to thank you for everything you have done in my favour !! MAY YOU HAVE A HAPPYDAY !! and English is not my first language , so forgive me for grammatic error ! THANK YOU !! BYE !!!
guys!! i tried updating this application and this is a modified version of stellaros Imagine a place where you can literally explore the entire solar system like it’s Google Maps, but for space. You can zoom into planets, check out moons, watch asteroids move, and just kinda “float” around the universe in real time. It pulls all its data directly from official NASA sources, so everything you’re seeing is actually legit and updated, not random internet stuff. You can click on any planet or space object and instantly get all the details—like what it’s made of, how far it is, what’s happening around it, and even cool mission info. It also shows a copy of real-time movement of planets and space events,(random, it calculate the movement of planet in the following way- my planets around the sun is definately not real -time but in same proportional ratio as I found on NASA(in simple terms for example if Earth takes 365 1/4 day to revolve around the sun , my project take the data for how much time earth take and compare it to other planets and then make them revolve around with same proportional speed and distance )) (and the mission are devloped with the help of AI -I take data from the NASA and I try to take only those missions which I can perfectly display in terms of their position (from where they started and to where )and this part I took help of AI (chatgpt to be specific )and it helped me display a perfect spacepath of that mission using js .) so i try to make the whole thing feels alive instead of static. i am currently just working on it and plz share your thought and ideas how could i make it even better . AND PEOPLE OFTEN GET CONFUSED THAT IT IS A OPERATING SYSTEM BUT NO!! ITS A INTERACTIVE WEBS.. !!...
|
1792849736.6254106
|
1792936136.6254106
|
|
18043
|
Seal OS by @indiesealdev | Stardance
|
indiesealdev
|
3
|
116.0
|
920
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-21T02:36:55Z", "hours": 11.0, "multiplier": 18.0, "payout": 200, "blessing": "neutral", "text": "Hello there!! Well, I’m done with this project, I’m very happy with the result of what I did, and I learnt a lot of JavaScript, HTML and CSS. For this final update I worked on a ton of QOL basically, basically the following: All things you build now get saved when you reset the page. You can now scale and rotate objects (only certain you can rotate), for example, Seals can be scaled up and be slower, or be scaled down and be faster. For rotating and scaling, you can also use your ARROW KEYS :D That was about it, most of my time spent was in structuring my code and making it easier to expand, so the integration of these was pretty easy tbh. Well, thank you for following me on this journey <] SEAl YA!", "repo": "https://github.com/IndieSeal/SealWebOS", "demo": "https://indieseal.github.io/SealWebOS/"}, {"ship_num": 2, "ts": "2026-08-12T06:19:20Z", "hours": 37.0, "multiplier": 19.4, "payout": 720, "blessing": "neutral", "text": "I made 3 new apps, but I did add a heck ton more features! Ok, let’s get started with the apps first: Moving Seals: This is an app that lets you draw seals that move all over your screen and that after they’re spawned you have the possibility to make them explode, or nuke them if you’re so cruel. Sand Builder: An app to decorate your os! Place sand castles, starfishes and sand dollars (didn’t know those existed but they’re really cool). Settings: A simple app to adjust volume settings, and to enable a certain possible jumpscare with a very small chance of it happening every second, hope it doesn’t catch you off guard. They’re also saved if you reload the page (including Seal Clicker!!). About the features, I wanted to add some small things that were fun to play around and fun to discover, very silly! So I made the following: Sleepy but hungry seal: A seal that sits in the top left corner of your screen which if you click, will call it’s guard (an epic cat), which will throw a brick at you lol, this will leave your screen fractured, unless you feed the seal some fish by dragging them into its mouth. Fish: There’s some new decoration, which are fish who like to swim below in your screen in the sea! You can grab them to feed the hungry seal. DVD Seal: I wanted to experiment with 3D, because I saw a really cute seal model, so I made it so you can grab it and throw it around like the DVD Screensaver, I’m not sure why it reminded me of it, but yeah. Foxy Jumpscare: I wanted to scare the user of the website, at first I thought I would do a really creepy seal image, WHICH I FOUND SOME WHICH I WILL NEVER BE ABLE TO ERASE FROM MY BRAIN D:, but I landed on the Foxy Jumpscare as I think it’s funnier and fits the silly vibes more, but I decided to disable it by default so if someone doesn’t know about it, they don’t get jumped or smthing. Since the last update, I updated a lot of the visuals (just UI elements, my weird art will still be there), thanks to my sister which is an artist (thx for the help :D). I had a bit of trouble with the 3D DVD Seal as I thought moving it would be as easy as just getting the input from the canvas, I was so wrong, I was there for hours trying to fix it, and then I thought, what about raycasting? That would literally need the model to be hit! But implementation also took hours as I couldn’t find any guides, but OH WELL. I’m super duper happy with how it turned out, and I hope you love it as much as I enjoyed making it, thanks for watching my devlogs, for reading alla this. and bye <3", "repo": "https://github.com/IndieSeal/SealWebOS", "demo": "https://indieseal.github.io/SealWebOS/"}, {"ship_num": 3, "ts": "2026-08-03T00:56:22Z", "hours": 68.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hello there!! I made a very Seal-Inspired WebOS, it has 3 apps, which only two are cool as the other one is just an introduction to the OS and me! The REAL cool apps are these as of right now are: Seal Clicker: A clicker/idle game like Cookie Clicker but if it was seals. SealTok: Wanna brainrot your brain until it only thinks of seals? Me too! Now you can do that here!! I think what was most challenging about making this project was the Seal Clicker app as it went through multiple stages of rebuilding to make expanding the upgrades and seals easier, and in general it’s just a big app lol, I also did all the art myself, I’ve been challenging myself recently to learn to draw, even if they’re not the best drawings, but I’m very happy on how it turned out! I also had barely any knowledge about HTML, CSS and JS, so I learnt everything from scratch, though I was glad to discover that JS is surprisingly similar to my main coding language C#. I’m also VERY proud of the Seal Clicker app, it’s where I learnt that a lot of the concepts from C# were applicable in JS and is where I put my structure optimization hat haha, I ended up loving the drawings I made. And for you to test the project just hit the “Try Project” button and it will take you there! I really hope you enjoy the OS as much as I loved building it, and thanks for taking the time to check it out!!", "repo": "https://github.com/IndieSeal/SealWebOS", "demo": "https://indieseal.github.io/SealWebOS/"}]...
|
[{"post_id": 70954, "ts": "202 [{"post_id": 70954, "ts": "2026-09-20T03:04:48Z", "hours": 3.5997, "text": "Helloooooooo, I again fell into the rabbit hole of OPTIMIZATION As I am on my mission to make everything really approachable for coders that may want to inspect the code and fork it, and make their own silly changes, it is easier than ever. So I made some new sliders that affect multiple things, which I used to replace the audio categories! (sfx and ui for example), audios that fit into the same category and have one slider that affects all of them. Thanks to the new slider system I have, it was very easy to implement a new feature, sizing and rotation for objects! Though not all objects are rotatable, but at least they all are scalable :]! So now you can have annoying cockroach seals that zoom all over the screen, or have big sealies that move as slow as a turtle. OH, I almost forgot. You can also use the arrow keys to rotate and scale the stuff without having to grab the slider and move it around, though I could not find a way to make it so you can press more than 2 keys at the same time, I will be putting some time to research that, but for now, nope :[ Alrighty, that is it for this cool devlog , see ya"}, {"post_id": 65627, "ts": "2026-09-10T21:30:46Z", "hours": 6.7997, "text": "Hello thereeee!! i am back with a pretty boring devlog, oh yea I have been fixing bugs, which that I am aware, everything should be fixed (hopefully) These include: Sealtok autoplaying on page load (videos with audio would be heard from outside, which could be annoying) I have also been busy with structuring code, and I am currently working on optimizing the Audio Categories to translate them into the new settings system! (sfx and ui sliders) I also spent some of the stardust on buying a domain, so I can have my cool OS outside of github >:] (now with cloudflare too) Some really cool things that I have been working on for the Paint Windows is so they get saved, so you can restart the page and have your drawn things there again!! I have a rotation system and scaling system for object painting, but with the structuring of the setting system so that I can create sliders for other things too, it is still a WIP, but it should be out soon! Alright, yippe and bye"}, {"post_id": 50735, "ts": "2026-08-20T02:39:42Z", "hours": 0.7006, "text": "Well, I am back at it, as my goal is to get a 3D printer! As of currently, I just fixed a couple of bugs, including: Making ¨painting¨ apps easier to close. Fixed it so you could not ¨paint¨ when clicking the close or minimize button. Fixed Foxy Jumpscare setting not actually working I already have some ideas in mind of what I want to do next! If you wanna hear my quick vent, go ahead: For WebOS 1 I really placed a lot of time into it so I could have my code structure really well done so it would be really easy to create new apps, and I did spend a lot of time in Seal Clicker lol, but I thought the ratings would count both Web 1 and 2, but sadly not, so I will have to work another 50 hours on this , not annoyed, but I did wanna work on other projects"}, {"post_id": 45597, "ts": "2026-08-12T05:57:52Z", "hours": 8.5486, "text": "Hello there, and welcome to my last devlog, it is been a long journey, but I have done it, I have learned the ways of HTML, CSS and JS. I hate them all, but at least I know them now lol. I made a lot of QOL, a LOT of bug fixing and added some cool little features, you can take a look: Random Foxy Jumpscare: It is an option in the Settings App which can be activated and desactivated, but it is disabled by default. Saved settings: All settings you modify will be kept if you reload the page, this also works with the Seal Clicker app! Fih: Now you will see a bunch of fish swimming around in the bottom of the screen, and they are grabbable!! Sleepy, Hungry seal: The seal in the top corner of the screen is very sleepy, if you click it, it will get mad, but you can fix the damages by feeding it fish. Audio: Added a bunch more of audio Fixes: A lot of bug interactions with the DVD Seal."}, {"post_id": 44959, "ts": "2026-08-11T02:07:57Z", "hours": 10.1906, "text": "I made mostly visual improvements and added some silly stuff in general, because I wanna have fun, you know? These include: Mad Seal: The seal is resting, and you woke them up by clicking them, they are calling the crazy kitty to attack you, for now the damage is permanent (until you refresh the page), but there will soon be a way to revert it by feeding the seal. 🐟 Spinning Seal: You can grab it and throw it around like those DVD Screensavers, its fun! 📀 I want to make something to jumpscare y´all, but I will be thinking of ideas to do so hehe, be prepared >:] I had to make the Desktop App Icons wrap around, so they did not sink into the water, because I do not want that. I am so close to finishing this really cool OS which I am really proud of, I love it so much, and did it all without any frameworks which is really cool. These changes are not published yet, they are on a testing branch as I still need to squash some bugs."}, {"post_id": 43810, "ts": "2026-08-09T07:37:47Z", "hours": 9.8419, "text": "Hello there, I did a lot of expanding on the Seal Moving app, I grabbed it and stripped all of its bones and removed their personality so they were easily modifiable and expandable! YIPPEE. What I am trying to say is, I plan on using the same behaviour of spawning seals for another app to decorate your OS´s background! So i had to spend a lot of time making it easily expandable, and it was worth it!! I also made a variation of the seal´s sprite so you can choose which one to spawn, there is also brushes now for spawning and removing seals, aswell as an icon for nuking them all!! The other app will be for spawning sand castles, sea stars and other stuff like that ONLY in the sand, below everything that is UI. With these two apps, I would just need to add one more app, and I should be done! Probably another game to have some more fun stuff, I know that will take a while, but eh, doesn´t really matter."}, {"post_id": 41328, "ts": "2026-08-05T14:03:48Z", "hours": 8.7142, "text": "These days I have been mostly optimizing the code, so again, it is easier to create new windows and stuff, and I also fixed some annoying window header css issues. I am also thinking to change some of the audio the apps have to sound a bit less THUMPY. I currently have two things I am working on, just a visual update in general for the OS so it feels more silly, which should be in video 2, and a new app >:] This new app, I am still unsure in which direction to take it, maybe both?? But here is the idea: You have seals that move in your screen, and you can click to explode them (sorry sealies ) But I do need to decide wether with this to do this or that: A minigame where seals spawn and you have to explode as many as you can in a limited amount of time. Desktop pets, them just hanging around, and if they are bothering you, just pop them lol. Or I could do a combo of the two, but again, unsure. Would love to know what everyone else thinks"}, {"post_id": 39792, "ts": "2026-08-03T00:23:54Z", "hours": 5.6922, "text": "Final devlog, this was a great journey, and I cannot wait to get started on WebOS 2, this is going to take an eternity with how long this first part took me, but I already have a solid base (I might even do some more structure changes in the code to make it EVEN EASIER to make windows), and I learnt a lot about HTML, CSS and JS! Well, in these last two days I did the following: Fixed the drag audio bug Fixed some CSS which was not working on build Finished adding all the art for Seal Clicker Balanched Seal Clicker so it takes around 10-20 minutes to finish Made App Icons for Seal Clicker and SealTok Made some visual changes Added RESOURCES.md and updated the README.md hope you enjoy it!!! I really loved building it 🦭 (hope there is someone as autistic as me who loves seals lol)"}, {"post_id": 38610, "ts": "2026-08-01T02:54:25Z", "hours": 10.3364, "text": "I have finished my Seal-Tok, I wanted to keep it simple, I do not really want to add likes and comments and stuff as I do not want to overcomplicate myself as much as I did with Seal Clicker lol, but I may add a ¨Share¨ feature which would just take you to the source of the authors video. I am also planning on doing some videos myself for seal-tok, I am already working on some, but it is going to take a while D: I have finally finished my Seal Clicker in terms of systems and having all the upgrades, now I only have to draw the last couple of upgrades (7 more). In terms of what I have to do before publishing the mission is to fix a couple of audio bugs, for some reason windows if left inactive for a while (changing to other tabs of browser), probably because of the deltaTime I have in there? I need to take a look. And soon SealOS will be available for all!! hehe"}, {"post_id": 32758, "ts": "2026-07-22T03:40:05Z", "hours": 9.1253, "text": "I’m no artist but I’ve been working on the art for the game, maybe it’s not the prettiest but ehh, it’s pretty good for me. I’ve been working on implementing audio, on adding some juice to the interactions, which I’m still planning to do a lot more of those, but time will tell. I’ve added the basic first upgrades for all the Seals which is really cool yeaa.. I’m super happy with how I got to optimize the upgrade and seal system as now you only need 3 lines of code to inject HOPE into the html give it their unique id and change icons and text around with ease, I love using classes, seriously can’t even begin to say how happy I am with JavaScript literally being C# but a bit worse ( sorry JS enjoyers :[ ). So now, it should be very easy to add new stuff which I’m thrilled to do, not thrilled about the art part though haha. Probably less than 10 more hours and I should be done with this damned app, and I have already noted down some ideas for which apps I could do next, but I don’t want to spoil, so you’ll have to wait, or if you find the Source Code, maybe you can go search for it, like a treasure hunt, or easter egg? if you actually find the easter egg, what do you think of my suggestion? it’s amazing right? right? idk (also I just got annoyed with my keyboard putting this: ` instead of ’, so I just copied it and pasted it, would be fun to have a onekey for that haha) ok bye, thanks for reading"}, {"post_id": 30250, "ts": "2026-07-17T17:54:40Z", "hours": 9.8186, "text": "Hellooo!! Well, I´ve been working a lot on the Seal Clicker app, it´s taking a whole lot more than I had initially thought, but oh well. All upgrades are working correctly, made a lot of UI improvements, more like the layout specifically, I still need to work on how it overall looks. I´ve been squashing down bugs, and I´ve implemented tooltips! For now only applicable on the upgrades, but I want to see if I can make it modular. My next task is learning how to spawn HTML into a page, because I want there to be a visual way to know how many Seals you´ve bought that help you obtain food (that´s the middle row for ya, I still need to draw some backgrounds lol). Also, I´m actually enjoying a lot learning this as first of all, now I can make websites hehe, but also I got a new language in my ¨can-do¨ list I guess, JavaScript is literally C# but with Dynamic Typing so it´s been quite easy to learn. (i hate dynamic typing though). alright, adios, see ya on the next devlog :]"}, {"post_id": 28500, "ts": "2026-07-14T19:47:15Z", "hours": 8.9739, "text": "I´m about to hit the 10 hour time limit per devlog, so I´m posting this :] As of currently, I´m just trying to make the project more organized, I´ve been making folders to store CSS´s as I´ve been splitting the main one, similarly of how I did with my Java Script files. And I´ve got the basics down of the Seal Clicker, I´m going to be taking a lot of inspiration from Cookie Clicker, so I´m seeing how to land those vibes. I´ve also made it so windows can´t leave your viewport and can´t go on top of the Navbar. I would share a video, but the project still looks exactly the same and feels about the same, the Seal Clicker window has the basic click and upgrade functionality, but it´s just the elements rn and it looks kinda ugly. But I´ll keep y´all updated!! :]"}, {"post_id": 22546, "ts": "2026-07-05T02:07:31Z", "hours": 8.0039, "text": "Thanks to Jenin over on Summer Camp, I´ve been able to grasp the concepts of HTML and CSS better, and I got over some hard bugs I couldn´t squash. Well, I´ve done a lot on this update, I followed a tutorial on how to make a sea, on top of that I added a fish that swims through the sea, and soon will be draggable and will be feedable to a seal! I´ve thought of what I will do app-wise, but I won´t spoil ya! I added some relaxing beach/sea sounds, I changed the background to actually match the water i placed, so not it´s sand! I added a little bar in the taskbar app icons to know wether it is the app that is selected, or if it´s minimized/not selected, I´ll probably need to have a different color for those two states, but for now, I think it´s pretty good, on the future I want to make apps pinnable on the taskbar and they will show up without the bar below! Visually I think it´s looking great, now I only gotta start developing the actuall apps lol. Wish me luck :]"}, {"post_id": 18397, "ts": "2026-06-29T15:16:32Z", "hours": 5.7233, "text": "I have improved my audio system for dragging objects, so it only plays when you´re moving the window and not just by touching it, and finished adding the lerp implementation to the windows, I still gotta fix some bugs though, like the buttons from the windows making sound when hovered WHEN moving the windows too fast, I´m thinking I´ll disable their interactions when the window is grabbed. I also made a very important change, to avoid creating duplicate script and to make my lerp actually work, I made the whole drag script into a class! This way, each window manages itself and can store it’s last position for the lerp purpose, and I’m very proud of how it ended up looking and how it sounds, would’ve loved to be able to fix the bug where looping has a small pause between each loop, but maybe I’ll make the audio longer so it’s not AS noticeable, or it doesn’t happen as often! With these changes, making new windows should be easy peasy :D"}, {"post_id": 11067, "ts": "2026-06-18T03:16:23Z", "hours": 3.8808, "text": "Working on the taskbar, and added some audio to keep it from being so silent, I was getting tired from it! To-do: -Work on Wii-type opening app menu. -Finish adding sounds everywhere -Add more desktop apps -Finish taskbar behaviour"}, {"post_id": 8547, "ts": "2026-06-14T06:38:21Z", "hours": 3.3081, "text": "Finally finished the basic part of the windows, still needs to be polished, but hey they behaviour’s there!"}, {"post_id": 8276, "ts": "2026-06-13T19:23:23Z", "hours": 3.2692, "text": "I finally finished the drag and drop feature, took me a while as I was trying to have different cursors while outside, while hovering and while clicking, which took longer than I thought, but I did it! Next task: Make an app inside of the OS"}]...
|
Title: Seal OS by @indiesealdev | Stardance
Devlo Title: Seal OS by @indiesealdev | Stardance
Devlogs:
I finally finished the drag and drop feature, took me a while as I was trying to have different cursors while outside, while hovering and while clicking, which took longer than I thought, but I did it! Next task: Make an app inside of the OS
Finally finished the basic part of the windows, still needs to be polished, but hey they behaviour’s there!
Working on the taskbar, and added some audio to keep it from being so silent, I was getting tired from it! To-do: -Work on Wii-type opening app menu. -Finish adding sounds everywhere -Add more desktop apps -Finish taskbar behaviour
I have improved my audio system for dragging objects, so it only plays when you´re moving the window and not just by touching it, and finished adding the lerp implementation to the windows, I still gotta fix some bugs though, like the buttons from the windows making sound when hovered WHEN moving the windows too fast, I´m thinking I´ll disable their interactions when the window is grabbed. I also made a very important change, to avoid creating duplicate script and to make my lerp actually work, I made the whole drag script into a class! This way, each window manages itself and can store it’s last position for the lerp purpose, and I’m very proud of how it ended up looking and how it sounds, would’ve loved to be able to fix the bug where looping has a small pause between each loop, but maybe I’ll make the audio longer so it’s not AS noticeable, or it doesn’t happen as often! With these changes, making new windows should be easy peasy :D
Thanks to Jenin over on Summer Camp, I´ve been able to grasp the concepts of HTML and CSS better, and I got over some hard bugs I couldn´t squash. Well, I´ve done a lot on this update, I followed a tutorial on how to make a sea, on top of that I added a fish that swims through the sea, and soon will be draggable and will be feedable to a seal! I´ve thought of what I will do app-wise, but I won´t spoil ya! I added some relaxing beach/sea sounds, I changed the background to actually match the water i placed, so not it´s sand! I added a little bar in the taskbar app icons to know wether it is the app that is selected, or if it´s minimized/not selected, I´ll probably need to have a different color for those two states, but for now, I think it´s pretty good, on the future I want to make apps pinnable on the taskbar and they will show up without the bar below! Visually I think it´s looking great, now I only gotta start developing the actuall apps lol. Wish me luck :]
I´m about to hit the 10 hour time limit per devlog, so I´m posting this :] As of currently, I´m just trying to make the project more organized, I´ve been making folders to store CSS´s as I´ve been splitting the main one, similarly of how I did with my Java Script files. And I´ve got the basics down of the Seal Clicker, I´m going to be taking a lot of inspiration from Cookie Clicker, so I´m seeing how to land those vibes. I´ve also made it so windows can´t leave your viewport and can´t go on top of the Navbar. I would share a video, but the project still looks exactly the same and feels about the same, the Seal Clicker window has the basic click and upgrade functionality, but it´s just the elements rn and it looks kinda ugly. But I´ll keep y´all updated!! :]
Hellooo!! Well, I´ve been working a lot on the Seal Clicker app, it´s taking a whole lot more than I had initially thought, but oh well. All upgrades are working correctly, made a lot of UI improvements, more like the layout specifically, I still need to work on how it overall looks. I´ve been squashing down bugs, and I´ve implemented tooltips! For now only applicable on the upgrades, but I want to see if I can make it modular. My next task is learning how to spawn HTML into a page, because I want there to be a visual way to know how many Seals you´ve bought that help you obtain food (that´s the middle row for ya, I still need to draw some backgrounds lol). Also, I´m actually enjoying a lot learning this as first of all, now I can make websites hehe, but also I got a new language in my ¨can-do¨ list I guess, JavaScript is literally C# but with Dynamic Typing so it´s been quite easy to learn. (i hate dynamic typing though). alright, adios, see ya on the next devlog :]
I’m no artist but I’ve been working on the art for the game, maybe it’s not the prettiest but ehh, it’s pretty good for me. I’ve been working on implementing audio, on adding some juice to the interactions, which I’m still planning to do a lot more of those, but time will tell. I’ve added the basic first upgrades for all the Seals which is really cool yeaa.. I’m super happy with how I got to optimize the upgrade and seal system as now you only need 3 lines of code to inject HOPE into the html give it their unique id and change icons and text around with ease, I love using classes, seriously can’t even begin to say how happy I am with JavaScript literally being C# but a bit worse ( sorry JS enjoyers :[ ). So now, it should be very easy to add new stuff which I’m thrilled to do, not thrilled about the art part though haha. Probably less than 10 more hours and I should be done with this damned app, and I have already noted down some ideas for which apps I could do next, but I don’t want to spoil, so you’ll have to wait, or if you find the Source Code, maybe you can go search for it, like a treasure hunt, or easter egg? if you actually find the easter egg, what do you think of my suggestion? it’s amazing right? right? idk (also I just got annoyed with my keyboard putting this: ` instead of ’, so I just copied it and pasted it, would be fun to have a onekey for that haha) ok bye, thanks for reading
I have finished my Seal-Tok, I wanted to keep it simple, I do not really want to add likes and comments and stuff as I do not want to overcomplicate myself as much as I did with Seal Clicker lol, but I may add a ¨Share¨ feature which would just take you to the source of the authors video. I am also planning on doing some videos myself for seal-tok, I am already working on some, but it is going to take a while D: I have finally finished my Seal Clicker in terms of systems and having all the upgrades, now I only have to draw the last couple of upgrades (7 more). In terms of what I have to do before publishing the mission is to fix a couple of audio bugs, for some reason windows if left inactive for a while (changing to other tabs of browser), probably because of the deltaTime I have in there? I need to take a look. And soon SealOS will be available for all!! hehe
Final devlog, this was a great journey, and I cannot wait to get started on WebOS 2, this is going to take an eternity with how long this first part took me, but I already have a solid base (I might even do some more structure changes in the code to make it EVEN EASIER to make windows), and I learnt a lot about HTML, CSS and JS! Well, in these last two days I did the following: Fixed the drag audio bug Fixed some CSS which was not working on build Finished adding all the art for Seal Clicker Balanched Seal Clicker so it takes around 10-20 minutes to finish Made App Icons for Seal Clicker and SealTok Made some visual changes Added RESOURCES.md and updated the README.md hope you enjoy it!!! I really loved building it 🦭 (hope there is someone as autistic as me who loves seals lol)
These days I have been mostly optimizing the code, so again, it is easier to create new windows and stuff, and I also fixed some annoying window header css issues. I am also thinking to change some of the audio the apps have to sound a bit less THUMPY. I currently have two things I am working on, just a visual update in general for the OS so it feels more silly, which should be in video 2, and a new app >:] This new app, I am still unsure in which direction to take it, maybe both?? But here is the idea: You have seals that move in your screen, and you can click to explode them (sorry sealies ) But I do need to decide wether with this to do this or that: A minigame where seals spawn and you have to explode as many as you can in a limited amount of time. Desktop pets, them just hanging around, and if they are bothering you, just pop them lol. Or I could do a combo of the two, but again, unsure. Would love to know what everyone else thinks
Hello there, I did a lot of expanding on the Seal Moving app, I grabbed it and stripped all of its bones and removed their personality so they were easily modifiable and expandable! YIPPEE. What I am trying to say is, I plan on using the same behaviour of spawning seals for another app to decorate your OS´s background! So i had to spend a lot of time making it easily expandable, and it was worth it!! I also made a variation of the seal´s sprite so you can choose which one to spawn, there is also brushes now for spawning and removing seals, aswell as an icon for nuking them all!! The other app will be for spawning sand castles, sea stars and other stuff like that ONLY in the sand, below everything that is UI. With these two apps, I would just need to add one more app, and I should be done! Probably another game to have some more fun stuff, I know that will take a while, but eh, doesn´t really matter.
I made mostly visual improvements and added some silly stuff in general, because I wanna have fun, you know? These include: Mad Seal: The seal is resting, and you woke them up by clicking them, they are calling the crazy kitty to attack you, for now the damage is permanent (until you refresh the page), but there will soon be a way to revert it by feeding the seal. 🐟 Spinning Seal: You can grab it and throw it around like those DVD Screensavers, its fun! 📀 I want to make something to jumpscare y´all, but I will be thinking of ideas to do so hehe, be prepared >:] I had to make the Desktop App Icons wrap around, so they did not sink into the water, because I do not want that. I am so close to finishing this really cool OS which I am really proud of, I love it so much, and did it all without any frameworks which is really cool. These changes are not published yet, they are on a testing branch as I still need to squash some bugs.
Hello there, and welcome to my last devlog, it is been a long journey, but I have done it, I have learned the ways of HTML, CSS and JS. I hate them all, but at least I know them now lol. I made a lot of QOL, a LOT of bug fixing and added some cool little features, you can take a look: Random Foxy Jumpscare: It is an option in the Settings App which can be activated and desactivated, but it is disabled by default. Saved settings: All settings you modify will be kept if you reload the page, this also works with the Seal Clicker app! Fih: Now you will see a bunch of fish swimming around in the bottom of the screen, and they are grabbable!! Sleepy, Hungry seal: The seal in the top corner of the screen is very sleepy, if you click it, it will get mad, but you can fix the damages by feeding it fish. Audio: Added a bunch more of audio Fixes: A lot of bug interactions with the DVD Seal.
Well, I am back at it, as my goal is to get a 3D printer! As of currently, I just fixed a couple of bugs, including: Making ¨painting¨ apps easier to close. Fixed it so you could not ¨paint¨ when clicking the close or minimize button. Fixed Foxy Jumpscare setting not actually working I already have some ideas in mind of what I want to do next! If you wanna hear my quick vent, go ahead: For WebOS 1 I really placed a lot of time into it so I could have my code structure really well done so it would be really easy to create new apps, and I did spend a lot of time in Seal Clicker lol, but I thought the ratings would count both Web 1 and 2, but sadly not, so I will have to work another 50 hours on this , not annoyed, but I did wanna work on other projects
Hello thereeee!! i am back with a pretty boring devlog, oh yea I have been fixing bugs, which that I am aware, everything should be fixed (hopefully) These include: Sealtok autoplaying on page load (videos with audio would be heard from outside, which could be annoying) I have also been busy with structuring code, and I am currently working on optimizing the Audio Categories to translate them into the new settings system! (sfx and ui sliders) I also spent some of the stardust on buying a domain, so I can have my cool OS outside of github >:] (now with cloudflare too) Some really cool things that I have been working on for the Paint Windows is so they get saved, so you can restart the page and have your drawn things there again!! I have a rotation system and scaling system for object painting, but with the structuring of the setting system so that I can create sliders for other things too, it is still a WIP, but it should be out soon! Alright, yippe and bye
Helloooooooo, I again fell into the rabbit hole of OPTIMIZATION As I am on my mission to make everything really approachable for coders that may want to inspect the code and fork it, and make their own silly changes, it is easier than ever. So I made some new sliders that affect multiple things, which I used to replace the audio categories! (sfx and ui for example), audios that fit into the same category and have one slider that affects all of them. Thanks to the new slider system I have, it was very easy to implement a new feature, sizing and rotation for objects! Though not all objects are rotatable, but at least they all are scalable :]! So now you can have annoying cockroach seals that zoom all over the screen, or have big sealies that move as slow as a turtle. OH, I almost forgot. You can also use the arrow keys to rotate and scale the stuff without having to grab the slider and move it around, though I could not find a way to make it so you can press more than 2 keys at the same time, I will be putting some time to research that, but for now, nope :[ Alrighty, that is it for this cool devlog , see ya
Ships:
Hello there!! I made a very Seal-Inspired WebOS, it has 3 apps, which only two are cool as the other one is just an introduction to the OS and me! The REAL cool apps are these as of right now are: Seal Clicker: A clicker/idle game like Cookie Clicker but if it was seals. SealTok: Wanna brainrot your brain until it only thinks of seals? Me too! Now you can do that here!! I think what was most challenging about making this project was the Seal Clicker app as it went through multiple stages of rebuilding to make expanding the upgrades and seals easier, and in general it’s just a big app lol, I also did all the art myself, I’ve been challenging myself recently to learn to draw, even if they’re not the best drawings, but I’m very happy on how it turned out! I also had barely any knowledge about HTML, CSS and JS, so I learnt everything from scratch, though I was glad to discover that JS is surprisingly similar to my main coding language C#. I’m also VERY proud of the Seal Clicker app, it’s where I learnt that a lot of the concepts from C# were applicable in JS and is where I put my structure optimization hat haha, I ended up loving the drawings I made. And for you to test the project just hit the “Try Project” button and it will take you there! I really hope you enjoy the OS as much as I loved building it, and thanks for taking the time to check it out!!
I made 3 new apps, but I did add a heck ton more features! Ok, let’s get started with the apps first: Moving Seals: This is an app that lets you draw seals that move all over your screen and that after they’re spawned you have the possibility to make them explode, or nuke them if you’re so cruel. Sand Builder: An app to decorate your os! Place sand castles, starfishes and sand dollars (didn’t know those existed but they’re really cool). Settings: A simple app to adjust volume settings, and to enable a certain possible jumpscare with a very small chance of it happening every second, hope it doesn’t catch you off guard. They’re also saved if you reload the page (including Seal Clicker!!). About the features, I wanted to add some small things that were fun to play around and fun to discover, very silly! So I made the following: Sleepy but hungry seal: A seal that sits in the top left corner of your screen which if you click, will call it’s guard (an epic cat), which will throw a brick at you lol, this will leave your screen fractured, unless you feed the seal some fish by dragging them into its mouth. Fish: There’s some new decoration, which are fish who like to swim below in your screen in the sea! You can grab them to feed the hungry seal. DVD Seal: I wanted to experiment with 3D, because I saw a really cute seal model, so I made it so you can grab it and throw it around like the DVD Screensaver, I’m not sure why it reminded me of it, but yeah. Foxy Jumpscare: I wanted to scare the user of the website, at first I thought I would do a really creepy seal image, WHICH I FOUND SOME WHICH I WILL NEVER BE ABLE TO ERASE FROM MY BRAIN D:, but I landed on the Foxy Jumpscare as I think it’s funnier and fits the silly vibes more, but I decided to disable it by default so if someone doesn’t know about it, they don’t get jumped or smthing. Since the last update, I updated a lot of the visuals (just UI elements, my weird art will still be there), thanks to my sister which is an artist (thx for the help :D). I had a bit of trouble with the 3D DVD Seal as I thought moving it would be as easy as just getting the input from the canvas, I was so wrong, I was there for hours trying to fix it, and then I thought, what about raycasting? That would literally need the model to be hit! But implementation also took hours as I couldn’t find any guides, but OH WELL. I’m super duper happy with how it turned out, and I hope you love it as much as I enjoyed making it, thanks for watching my devlogs, for reading alla this. and bye <3
Hello there!! Well, I’m done with this project, I’m very happy with the result of what I did, and I learnt a lot of JavaScript, HTML and CSS. For this final update I worked on a ton of QOL basically, basically the following: All things you build now get saved when you reset the page. You can now scale and rotate objects (only certain you can rotate), for example, Seals can be scaled up and be slower, or be scaled down and be faster. For rotating and scaling, you can also use your ARROW KEYS :D That was about it, most of my time spent was in structuring my code and making it easier to expand, so the integration of these was pretty easy tbh. Well, thank you for following me on this journey <] SEAl YA!...
|
1792842461.7396114
|
1792928861.7396114
|
|
18394
|
myMusic by @cluelessfr | Stardance
|
cluelessfr
|
3
|
105.0
|
1498
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T04:09:47Z", "hours": 49.0, "multiplier": 12.73, "payout": 608, "blessing": "neutral", "text": "I made myMusic, a Windows/Linux app that allows you to download your favorite songs. It works by searching YouTube/YouTube music for videos of your song. Then, using yt-dlp, it is able to download your song as an mp3 file. Finally it adds all of the metadata, allowing you to properly listen to your music offline. This is ship #3 of my project, so let me explain all of the changes since the last ship: First I finally added support for playlist and album downloads. Now instead of putting in each separate track individually you can combine it into a playlist and download that all together. For this I also had to update the GUI in order to fit all of the song information together. Second I improved the song searching and reliability. I made things consistent with how YouTube expects them (ASCII, Unicode characters, etc.). I also combine YouTube Music and YouTube candidates, so you get the best of both worlds. The app also tries multiple candidates before declaring that track a fail. Third I introduced explicit-version matching. Before, you would sometimes get the clean version of an explicit song. To fix this I switched to ytmusicapi, which allows me to compare matches to determine which one fits the criteria the best. The API also allows me to see whether or not the song is clean, which makes matching easier. Fourth (and probably the biggest update) I was able to add a Spicetify extension with the app. Because of this you are now able to download your favorite songs directly from the Spotify windows app. It reuses Spotify’s native download button rows, which make it easy to download your songs. It also preserves native behavior if you are already on Spotify Premium. It also shows notifications about the status of your download. This is only available on Windows. Fifth in order to make the Spotify integration work, the app now opens up a FastAPI/Uvicorn server bound to 127.0.0.1:18492. I chose a far away port in order for it not to affect any other local host processes. Sixth I also added background behavior for the app. This keeps the app open in the background without it being open on the gui (you will still be able to see it in your system tray). This allows the Spotify integration to run seamlessly without interfering with your every day work. Seventh I greatly improved the in app updater speed. Before it would greatly lag your computer because the chunk sizes were so small and it had to do a lot of writes to your disk. Now I increased the chunk size, and updated the packaging configurations to further boost the download speed and app size. These were all the main updates I did to my app, hope you like it!", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}, {"ship_num": 2, "ts": "2026-07-06T17:31:14Z", "hours": 34.0, "multiplier": 18.59, "payout": 611, "blessing": "neutral", "text": "I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. This is Ship #2 of my project. There have been a quite a few changes since my last ship, so let me list them all: First I added a folder-picking dialog. This allows the user to change the directory their songs are downloaded to, instead of being forced to always download to the “Downloads” directory. The app also saves the last chosen directory, so even if you close and reopen the app the directory is still saved. I then bundled Deno into the app, which helps yt-dlp solve JS challenges. Then I added the Spotify oEmbed metadata as fallback metadata if the SpotifyScraper python package fails. I also added YouTube as a partner with YouTube Music to get the best results from both platforms. I then a ranking system for the songs. The program adds and removes points from the top 6 matches from both platforms based on a few criteria, then it tries downloading from highest to least ranked. Then I also started embedding cover art. The app now takes in the cover art link, streams it, then writes it to the audio file. Next I added in-app update checking. The app can search the github repo for the latest version, checks to see if it is newer, then can automatically download and installer it. I also polished up the UI so that the controls and labels are more organized. Finally, I added Linux x64 and Linux ARM64 support. This has the same behavior as the Windows app, but the dependencies are now installed natively on that platform, which makes the app run more reliably on Linux. The current latest version at the time of this ship is v1.3.0.", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}, {"ship_num": 3, "ts": "2026-06-18T06:15:48Z", "hours": 22.0, "multiplier": 13.37, "payout": 279, "blessing": "neutral", "text": "I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. The hardest part was turning it from a local Python project into something other people can actually run: bundling FFmpeg, building the Windows executable, creating an installer, and writing clear install/testing instructions. These were all new steps that I wasn’t familiar with before, so I had to heavily research them and get familiar with them before shipping. I am proud that I was able to get it working as a real, bundled Windows desktop app, instead of a small project that runs only on my computer. To test it, use the Try Project link, download the v1.0.1 Windows installer, install it, open myMusic, paste a Spotify track link, click Preview Song Details, then click Download. The finished MP3 should appear in your Downloads folder. Windows may show SmartScreen because the app is unsigned; the release notes explain how to continue.", "repo": "https://github.com/cluelessfr/myMusic", "demo": "https://github.com/cluelessfr/myMusic/releases/tag/v2.0.1"}]...
|
[{"post_id": 38621, "ts": "202 [{"post_id": 38621, "ts": "2026-08-01T03:30:24Z", "hours": 2.9203, "text": "Devlog 39: I was finally able to get the Linux guards in place, and also packaged the new builds and released them to GitHub has a new version. The guards were mostly simple, as they were just a few checks that asked what operating system the user was on. And depending on that it decided whether or not to install the Spicetify extensions."}, {"post_id": 38528, "ts": "2026-07-31T23:36:25Z", "hours": 7.4581, "text": "Devlog 38: I worked on functions that helped install the Spicetify extension into the Spicetify configuration. I had to ensure Spicetify was installer, had to find its path, had to find its extensions path, then finally copy over the extension. I also added system tray behavior and multiple instance detection for the app, so that now when you close the app it doesn’t close but instead goes to the system tray. This allows the Spotify integration to work even if the app itself isn’t visible. The multiple instance detection ensures the app runs properly, and ensures that the app doesn’t try to use the same http port twice, resulting in errors. This did take a while but now all I have to do is create guards for Linux, so that the Spotify integration only works on Windows and doesn’t create unexpected errors on Linux."}, {"post_id": 37449, "ts": "2026-07-30T06:15:53Z", "hours": 4.1092, "text": "Devlog 37: I am very close to shipping now. I added the Spotify status/progress update messages, so now you can see when the tracks have finished downloading. I also fixed three (kinda major) bugs. First of all there was an error when searching for the songs on YouTube/YouTube Music. Basically what happened was that the title didn’t follow the same ASCII conventions that was used by YouTube. Because of this the app would reject good title matches even though they were the same. This produced quite a few errors, especially when trying to download songs with apostrophes. The second error I fixed was the some songs would automatically have the clean version downloaded. To fix this I switched to the ytmusicapi python package. This package also returned whether the song was explicit or not. Because of this I was able to check whether or not the song was intended to be that way, and if not I could prevent that match from being downloaded. I did have to edit a few functions to accept the new format, but in the end everything worked. Third I fixed a simple error that messed up the searching. This time it wasn’t really a bug, but instead an edge case that I missed. I was catching keywords like “feat.” and “featuring”, but I didn’t catch words like “From (and tv show, etc.)”. Because of this some matches were getting left out. I fixed this by adding another regex pattern that removes this as well."}, {"post_id": 37238, "ts": "2026-07-29T19:53:38Z", "hours": 2.6647, "text": "Devlog 36: I am almost done with the first phase of the integration. When the download button is clicked inside of Spotify, Spicetify intercepts it and now posts a request to the open web server. Then the python script gets notified of that request, decodes it, then automatically starts downloading the song/playlist/album. The only thing is that the myMusic app has to be open while doing this, but I will remove that requirement in the future (not now). The next step would be to add status reports to Spotify so that the user knows what the status of their download is."}, {"post_id": 36598, "ts": "2026-07-28T20:17:16Z", "hours": 2.8025, "text": "Devlog 35: The app now creates its own server on a very distant and far port so that your other local host stuff doesn’t get affected. I did this with uvicorn and threading, so that creating the port doesn’t make the app freeze. With this functionality the app can get the requests made inside Spotify and automatically download them. The next step is to get the app to report the statuses of the download jobs (queued, downloading, completed, failed, etc.). Then I would actually have to connect both parts, let Spotify send messages and the app receive the message."}, {"post_id": 35435, "ts": "2026-07-26T20:46:18Z", "hours": 4.8314, "text": "Devlog 34: I have been working on creating a queue for the requests. This ensures that the user can download multiple songs at once without having to wait for the previous ones to be finished. So far I have been able to create a request id for each request. The app can update the attributes of each request, such as its status, and error message. On top of this once a request is completed the app also automatically removes that request."}, {"post_id": 31912, "ts": "2026-07-20T18:12:07Z", "hours": 3.5339, "text": "Devlog 33: The app is now able to understand and automatically download any received links. Now the problem is that Spotify isn’t able to send any normal requests to via the computer. Because of this I need to find a way for Spotify to send and get data. I know that Spotify (using Spicetify) can send and get http requests. Because of that I am planning to use FastAPI and a local http server to be able to send and get data so the app can automatically download tracks. I will ensure to keep the server in a high index to ensure it doesn’t get in the way of any other local servers."}, {"post_id": 29252, "ts": "2026-07-16T01:35:08Z", "hours": 6.2167, "text": "Devlog 32: (sorry for the late post) I have been working on a really cool feature for the app. Basically what I am trying to do is integrate the myMusic pipeline into the windows Spotify app itself. When you right click a playlist or album, there will be a menu that pops up. Usually for normal Spotify users (not on premium) there will be a greyed out download button. What I am trying to do is two things: add a download button for tracks (because there isn’t one right now), and make the playlist/album button actually work. Right now what I have accomplished is adding a new button for the track and making the playlist/album button clickable. I was able to do this by using Spicetify and its framework. Because I already have it installed on my computer I am using it to test everything out but later I will bundle it with my app. What I did was build a custom Spicetify extension (I had to learn JavaScript) that creates a new button. I was able to make the original playlist/album button work because it was only “aria-disabled”, not actually disabled. This means that it was only disabled at the UI level, but Spotify still recorded clicks. By applying some UI changes I was able to make the button look enabled and still record clicks. My next step is to actually hook this up to the Python script. I think this is a really cool feature."}, {"post_id": 28364, "ts": "2026-07-14T16:05:28Z", "hours": 2.7422, "text": "Devlog 31: This devlog was mainly focused on the efficiency and speed of updating the app. Before the data would come in really small packets, meaning the cpu would have to write to the drive about 130,000 times in total (I know 😭). I adjusted this so it now comes in larger packets so the cpu doesn’t have to do more work. I also adjusted the compression and a few other Inno Setup settings (number of threads, etc.) to make the app more efficient in general. Another issue that I found is that once the app updated (specifically in Windows, idk about other platforms) the settings app would still show the older version for some time. This was an issue with the timing, so I had to adjust some of the delays to get it to work properly. Overall I think this is a pretty good update."}, {"post_id": 27877, "ts": "2026-07-13T19:39:38Z", "hours": 6.6931, "text": "Devlog 30: I FINALLY implemented playlist and album support. At first I thought it would be simple, just looping though each song in the playlist/album. Oh was I wrong. First I had to add two more methods that looped though each song, one for playlists and one for albums. There had to be two different ones because each returned metadata differently. Then I had to kind of change the format of the whole thing, because I had to store all of the songs in a list, but currently I was only returning dictionaries from all of my methods. After getting all of that sorted out I had to actually fix the GUI/downloading part. I had to update the downloading method to handle playlist/album links, then I had to properly handle all of the status message for each song (“Ready”, “Downloading”, “Failed”). Finally I had to work on fixing the bugs I had introduced and handling the edge cases. After all of that I FINALLY had playlist and album support. One thing that was sorta tough was handling the status for each track individually. Before I was just looping through the entire list and setting all of the statuses to the same thing, but I was able to create a new method and change each song status as it was being downloaded, not for every song as a whole."}, {"post_id": 25666, "ts": "2026-07-10T02:30:59Z", "hours": 5.3094, "text": "Devlog 29: This is kind of a messy devlog, so I’ll lay it out as best as I can. First, I update the UI in preparation for playlist/album support. Before it was three static text fields that could only display one song at a time. Now I replaced it with a scrollable frame, with the ability to add more sections inside the frame for more songs. This frame also has the ability to display metadata. I also introduced a status message that shows different messages and colors depending on the status. While I was doing that (and I am not done with it), I decided to stop in the middle and fix another bug. This bug (that was reported by other people as well as my testing) prevented good matches from ranked properly. This was a problem with how I compared the titles in my ranker. To fix this I added two new functions, one that normalizes the candidate title, and another that normalizes the actual Spotify song name (mainly to exclude features and get just the song name). To do this I messed around a lot with regex patterns, so I learned a lot. Now I have to go back and continue working on the new UI for playlists and albums."}, {"post_id": 23538, "ts": "2026-07-06T15:46:31Z", "hours": 3.8236, "text": "Devlog 28: Based on feedback from my first ship, I have decided to introduce Linux support. I thought it would be easy, but it turned out to be a little harder than I thought. The first thing I had to do was rewrite some of the Path code that saves the users download directory. This is because Linux and Windows have different file systems, and I had to account for both. Then came the hard part, Packaging. For ARM, I decided to do this on my Raspberry Pi, where I downloaded the project files from git, downloaded the OS specific FFMPEG and Deno, then repackaged the app as a .tar.gz. I decided to do it this way because this is sort of simply an experimental release. For x64 I decided to use GitHub Actions, which allowed me to download the dependencies and compile without having to spin up a new Virtual Machine. I also decided to keep this as a .tar.gz. Later, once I get more feedback about the Linux versions, I am planning to release a more universal app package (.flatpak). I also had to change the update checkers, because each OS version has to check its own corresponding file. In the end this was a very unique experience and I learned a lot of things about packaging apps on Linux."}, {"post_id": 21260, "ts": "2026-07-03T03:02:23Z", "hours": 5.4692, "text": "Devlog 27: This is a pretty major update. The myMusic can now automatically download and install updates, without the user having to go and download the github repository. Before, the user would manually have to go and download the installer from github, and set it up like a completely new install. Now, the app itself has a “Check for Updates” button. This button checks the github for the latest version, and if there is a newer version available it gives the user an option to download and install that. If they change their mind during the download, there is a cancel option as well. This works by first getting the github version (latest), then seeing if the current app version matches that. If it does, the app is up to date. If not, then the app can fetch the executable using the github API and automatically download the latest installer. On top of this some inno setup tools allow the app to close the app, install the new version, and reopen the app by itself. The only caveat is that this only works starting from v1.2.0. This means that if you have an older version you will have to manually download v1.2.0 in order to start getting automatic app updates."}, {"post_id": 20302, "ts": "2026-07-01T21:16:28Z", "hours": 1.2353, "text": "Devlog 26: Added a function to help with auto-downloading new updates. I haven’t hooked it up to the UI yet, but that is my next step. The function takes in the name of the installer and the link to download it. It first downloads the installer to a temp file, then once everything is good it saves it to a real executable."}, {"post_id": 19419, "ts": "2026-06-30T18:55:12Z", "hours": 1.0339, "text": "Devlog 25: This update was about implementing the update checker from the last devlog. Now there is an in-app button that allows you to check for new updates. The implementation was similar to all the other buttons and didn’t take too long because I already had the function ready. The next step is to allow the app to actually download and install the update, instead of just pointing out it is available."}, {"post_id": 19007, "ts": "2026-06-30T05:16:32Z", "hours": 1.6642, "text": "Devlog 24: I have started adding implementations that checks for the latest version of the app from github. It uses the github API endpoint for my specific project, then reads the json to get any version information. Using that we can compare the current version to the latest version on the github to see if there are any updates available. Currently I have only created the function and am yet to implement this feature into the actual app/GUI."}, {"post_id": 18082, "ts": "2026-06-29T02:24:36Z", "hours": 1.4658, "text": "Devlog 23: Today I added the feature that embeds cover art into the mp3 files. To do this I had to first use the requests library in Python to get the image itself. Instead of downloading the image I kept it in memory using the ‘io’ library. This made the metadata tagging safer and faster. Finally the app uses mutagen to embed the cover art into the mp3 file. I used a try and except loop, which ensures that even if the cover art adding fails the mp3 file still gets returned, just without the art."}, {"post_id": 17306, "ts": "2026-06-28T01:07:06Z", "hours": 1.4167, "text": "Devlog 22 This update was about further increasing the matching strength. Before the program would automatically download the highest ranked candidate, even if it was very low. Now the app downloads the highest ranked candidate only if its ranked above a certain thresh hold. If there are no qualifying matches then the app simply returns a no matches found error. This wasn’t that complicated, but I had to modify a few functions so that the score was returned properly and in a usable format."}, {"post_id": 16647, "ts": "2026-06-27T02:18:17Z", "hours": 2.3261, "text": "Devlog 21: Now added real YouTube (YT) to the match finding instead of just YouTube Music (YTM). Before the songs were found only on YTM, but I realist that normal YT has a larger list of songs, so I decided to add that to the algorithm as well. Now, the program takes 3 songs from YTM and 3 songs from YT, and uses the ranking function I created before to sort them from best to worst. Then the program starts by trying to download the best match. If it can’t, it goes through the list until if finds one it can download. If none of them download, then it sends an error message. One thing with this step was that I tried not to repeat big chunks of code, as a lot of this was similar to the original YTM downloading method."}, {"post_id": 16559, "ts": "2026-06-26T22:37:04Z", "hours": 1.9589, "text": "Devlog 20: Added the Spotify OEmbed fallback. Now even if the SpotifyScraper python package fails we have a fallback to get as much metadata as we can. This wasn’t that hard, as I already had the file from a previous time. The hard part was accounting for all the different cases, such as the title being missing or an empty string. I had to account for all of those while integrating the new file."}, {"post_id": 15864, "ts": "2026-06-25T19:50:13Z", "hours": 0.3722, "text": "Devlog 19: Implemented the ranking feature from the last devlog. Now, the best candidates are ranked in order from best to worst, and that is the order in which they are downloaded."}, {"post_id": 15836, "ts": "2026-06-25T19:07:36Z", "hours": 0.9022, "text": "Devlog 18: I implemented a way to start scoring the candidates returned by YT-DLP. This ensures that even if the first candidate returned is not the best, the program can automatically filter out the bad ones using key words and ensure the best candidate is always selected. I have only coded this function for now, and I have to wire it in to the real app soon."}, {"post_id": 15337, "ts": "2026-06-24T22:21:13Z", "hours": 3.4889, "text": "Devlog 17: Did some major code cleanups. No new features, but made the code more efficient. Also reorganized some files. The hard part was keeping the functionality the same while trying to make the code non-repetitive and more efficient. I also tried to fix any warnings that were present in the code that were caught by the IDE."}, {"post_id": 13864, "ts": "2026-06-22T18:38:18Z", "hours": 1.5628, "text": "Devlog 16: Simple update, but I added a new error message to account for a yt-dlp botting error. Now, when YouTube sends an error saying that the request was blocked due to botting being suspected, it sends a properly formatted error message instead of the raw yt-dlp text. I retested everything to ensure the previous functionality of the app remained the same."}, {"post_id": 13481, "ts": "2026-06-22T02:29:05Z", "hours": 3.7828, "text": "Devlog 15: Improved song selection algorithm, so it selects the next best track if the first selection is invalid. Before if the first track selected by YT-DLP didn’t work/was invalid, then the whole program would fail. Now it moves on to the next if the first one doesn’t work. I also update the progress messages, so it shows which match it is trying."}, {"post_id": 11619, "ts": "2026-06-18T22:25:28Z", "hours": 3.6753, "text": "Devlog 14: I have implemented two new features. First I implemented a feature that allows users to switch the directory where songs get downloaded. This took some time, but I was able to get it in the end. It works by creating a new button which opens a folder picking dialogue. The path that the user seclects inside this dialogue then gets saved to a local json file. Everytime the user changes the path it gets saved to the json, which allows the program to always open up the last directory selected by the user. I had to implement some checks to ensure that the program would work even if the json file was missing or corrupted. The second feature is more of an update. The static “Downloading” progress message is now updated with real time info on what the program is doing. The next step would be adding a dynamic progress bar."}, {"post_id": 11117, "ts": "2026-06-18T05:51:42Z", "hours": 1.4456, "text": "Devlog 13: I added an installer .exe file, added screenshots to the readme, and added a new release on GitHub. Configuring the installer was a little hard, as I was new to this process and didn’t know where to start. I used Codex to help me figure out that I could use a program called Inno. This handled the installer file, uninstall, as well as configuring it with Windows. Codex guided me through how to set that up, and eventually I got everything working. Finally I created a new version on Git and pushed everything."}, {"post_id": 10999, "ts": "2026-06-18T00:51:48Z", "hours": 1.1539, "text": "Devlog 12: I compiled the app into a .exe, updated the readme, and pushed the first version to git. I ran into some issues when compiling the app. Specifically after the initial compiling YT-DLP couldn’t see the location of FFMPEG. Because of this I had to update the “get_app_root.py” file so it accounted for the file changes when compiling."}, {"post_id": 10925, "ts": "2026-06-17T22:01:48Z", "hours": 1.1078, "text": "Devlog 11: I added a preview button to the GUI so that users could see the song details and confirm they were right before downloading the song. also prepared for packaging this file into an executable (.exe)."}, {"post_id": 10860, "ts": "2026-06-17T20:15:14Z", "hours": 1.8986, "text": "Devlog 10: Added app.py and introduced a GUI window using Custom Tkinter. Now when users run app.py they see a new desktop window open up, see a text box and a download button. Once they paste in a Spotify link they see status messages like “Downloading”. At the end they also see the downloaded path. On top of this if there are any errors during the download (like fetching metadata), this also displays as a status message. This took a little bit because I get to get familiar with Custom Tkinter, add another function that gets called by the button, and add some safeguards/quality of life updates. The main safeguard was disabling the download button while the song was downloading, which ensured the user didn’t spam processes. The quality of life update was that the download path now wraps the text to multiple lines if the path is very long."}, {"post_id": 10426, "ts": "2026-06-17T04:14:00Z", "hours": 0.4461, "text": "Devlog 09 Simple update, but it now uses Mutagen to add track name, artists, and album name to the downloaded files."}, {"post_id": 10333, "ts": "2026-06-17T00:33:23Z", "hours": 1.6983, "text": "Devlog 08 Introduced FFMPEG to the project to be able to convert downloads from .webm to .mp3 files. Also change the song title to be the title of the song. Introduced a file check to ensure file names are valid and accepted by Windows."}, {"post_id": 10283, "ts": "2026-06-16T22:29:59Z", "hours": 1.0183, "text": "Devlog 07 The program now automatically uses YT-DLP to download the best match found. This works by using YT-DLP’s build in “Download” method. I pass in the number 1 match found by YT-DLP (built in the last devlog), and it downloads it to the users default “Downloads” folder. This is a major step in the project, and I am almost ready to ship the first version."}, {"post_id": 10156, "ts": "2026-06-16T19:30:33Z", "hours": 2.4497, "text": "Devlog 06 Major Update: Now added YT-DLP to the project. Now whenever you put in a valid link you get more than just the metadata. You also get the top 5 best matches from YouTube Music. This took a while because I had to learn to properly call and use the YT-DLP package in python. I created 3 helper functions. The first created the search query using the metadata, the second returned the search results, and the last one formatted and returned the results. I created one last function as a wrapper, such that when I passed in the metadata it returned the YouTube Music search results. When calling yt_dlp.YoutubeDL(), I got a type error when passing the parameters. This was because the package expected its own datatype, while I was simply passing a dictionary. I was able to fix this by setting the type to “Any” when passing in the argument. I also changed main.py to include the YouTube search results. Now, whenever you pass in a Spotify link you get the song metadata as well as well as the top 5 best matches from YouTube Music."}, {"post_id": 9712, "ts": "2026-06-16T04:05:09Z", "hours": 0.4872, "text": "Devlog 05 This is a pretty small update, all I did was add a small test file to be able to consistently check for errors and functionality."}, {"post_id": 9667, "ts": "2026-06-16T02:27:43Z", "hours": 3.6628, "text": "Devlog 04 This was a big change in the metadata retrieving/handling. Last devlog I explained how the new restrictions on the Spotify API made it difficult to fetch the metadata, so I had to use the public oEmbed API. This didn’t give much information and was hard to work with. After researching some more I found a python package that does the metadata fetching for me, “SpotifyScraper”. this package takes in a spotify url (which the user will be providing), and can get information like song names, artists, duration, etc. This was very useful for me when coding the metadata functions. On top of this it supports playlist and album inputs as well, which is great for future updates. I spent this time rewriting the metadata retrieving functions and cleaning everything up. I removed a few redundant functions and introduced proper error messages."}, {"post_id": 9279, "ts": "2026-06-15T16:04:31Z", "hours": 2.2303, "text": "Devlog 03 After getting the link cleaner to work, I wanted to use the Spotify API to get the metadata of the song. The problem with this is that Spotify introduced heavy limitations on its API earlier this year. Because of this I had to fallback to the Spotify oEmbed, which gives only provides the song name. I am still researching for more options."}, {"post_id": 9003, "ts": "2026-06-15T00:31:15Z", "hours": 3.3114, "text": "Devlog 02 This took a while, but I was able to make the program that strips the input down to only the Spotify link. This ensures that (for the most part) that only the Spotify link gets used, and not any other whitespace/extra characters that might have appeared. It took a while because I was researching and learning how to use the ‘re’ library in Python, and it took some trial and error/debugging to get the logic to work. How this works; The user inputs into the text field First the type of track gets identified (single track, playlist, album) Then it uses the ‘re’ library to detect the pattern of Spotify URLs and URIs. This ensures that the Spotify track is actually valid. It then uses the ‘.group()’ function to capture the matching section out of the input Finally the functions are checked to ensure everything is valid, then the type of track and song url are returned."}, {"post_id": 8718, "ts": "2026-06-14T14:15:06Z", "hours": 0.7378, "text": "Devlog 01 This is the initial commit for the myMusic project. I created the file system locally, then opened the project inside IntelliJ Idea. I kept things simple and only introduced a README for now. I ran into a few problems when pushing to GitHub. Mainly, the .gitignore was being placed inside a .idea folder (I think because I was using IntelliJ). Because of this I had to go back into the IDE and move the .gitignore into the main branch and not into a subfolder."}]...
|
Title: myMusic by @cluelessfr | Stardance
Devlogs Title: myMusic by @cluelessfr | Stardance
Devlogs:
Devlog 01 This is the initial commit for the myMusic project. I created the file system locally, then opened the project inside IntelliJ Idea. I kept things simple and only introduced a README for now. I ran into a few problems when pushing to GitHub. Mainly, the .gitignore was being placed inside a .idea folder (I think because I was using IntelliJ). Because of this I had to go back into the IDE and move the .gitignore into the main branch and not into a subfolder.
Devlog 02 This took a while, but I was able to make the program that strips the input down to only the Spotify link. This ensures that (for the most part) that only the Spotify link gets used, and not any other whitespace/extra characters that might have appeared. It took a while because I was researching and learning how to use the ‘re’ library in Python, and it took some trial and error/debugging to get the logic to work. How this works; The user inputs into the text field First the type of track gets identified (single track, playlist, album) Then it uses the ‘re’ library to detect the pattern of Spotify URLs and URIs. This ensures that the Spotify track is actually valid. It then uses the ‘.group()’ function to capture the matching section out of the input Finally the functions are checked to ensure everything is valid, then the type of track and song url are returned.
Devlog 03 After getting the link cleaner to work, I wanted to use the Spotify API to get the metadata of the song. The problem with this is that Spotify introduced heavy limitations on its API earlier this year. Because of this I had to fallback to the Spotify oEmbed, which gives only provides the song name. I am still researching for more options.
Devlog 04 This was a big change in the metadata retrieving/handling. Last devlog I explained how the new restrictions on the Spotify API made it difficult to fetch the metadata, so I had to use the public oEmbed API. This didn’t give much information and was hard to work with. After researching some more I found a python package that does the metadata fetching for me, “SpotifyScraper”. this package takes in a spotify url (which the user will be providing), and can get information like song names, artists, duration, etc. This was very useful for me when coding the metadata functions. On top of this it supports playlist and album inputs as well, which is great for future updates. I spent this time rewriting the metadata retrieving functions and cleaning everything up. I removed a few redundant functions and introduced proper error messages.
Devlog 05 This is a pretty small update, all I did was add a small test file to be able to consistently check for errors and functionality.
Devlog 06 Major Update: Now added YT-DLP to the project. Now whenever you put in a valid link you get more than just the metadata. You also get the top 5 best matches from YouTube Music. This took a while because I had to learn to properly call and use the YT-DLP package in python. I created 3 helper functions. The first created the search query using the metadata, the second returned the search results, and the last one formatted and returned the results. I created one last function as a wrapper, such that when I passed in the metadata it returned the YouTube Music search results. When calling yt_dlp.YoutubeDL(), I got a type error when passing the parameters. This was because the package expected its own datatype, while I was simply passing a dictionary. I was able to fix this by setting the type to “Any” when passing in the argument. I also changed main.py to include the YouTube search results. Now, whenever you pass in a Spotify link you get the song metadata as well as well as the top 5 best matches from YouTube Music.
Devlog 07 The program now automatically uses YT-DLP to download the best match found. This works by using YT-DLP’s build in “Download” method. I pass in the number 1 match found by YT-DLP (built in the last devlog), and it downloads it to the users default “Downloads” folder. This is a major step in the project, and I am almost ready to ship the first version.
Devlog 08 Introduced FFMPEG to the project to be able to convert downloads from .webm to .mp3 files. Also change the song title to be the title of the song. Introduced a file check to ensure file names are valid and accepted by Windows.
Devlog 09 Simple update, but it now uses Mutagen to add track name, artists, and album name to the downloaded files.
Devlog 10: Added app.py and introduced a GUI window using Custom Tkinter. Now when users run app.py they see a new desktop window open up, see a text box and a download button. Once they paste in a Spotify link they see status messages like “Downloading”. At the end they also see the downloaded path. On top of this if there are any errors during the download (like fetching metadata), this also displays as a status message. This took a little bit because I get to get familiar with Custom Tkinter, add another function that gets called by the button, and add some safeguards/quality of life updates. The main safeguard was disabling the download button while the song was downloading, which ensured the user didn’t spam processes. The quality of life update was that the download path now wraps the text to multiple lines if the path is very long.
Devlog 11: I added a preview button to the GUI so that users could see the song details and confirm they were right before downloading the song. also prepared for packaging this file into an executable (.exe).
Devlog 12: I compiled the app into a .exe, updated the readme, and pushed the first version to git. I ran into some issues when compiling the app. Specifically after the initial compiling YT-DLP couldn’t see the location of FFMPEG. Because of this I had to update the “get_app_root.py” file so it accounted for the file changes when compiling.
Devlog 13: I added an installer .exe file, added screenshots to the readme, and added a new release on GitHub. Configuring the installer was a little hard, as I was new to this process and didn’t know where to start. I used Codex to help me figure out that I could use a program called Inno. This handled the installer file, uninstall, as well as configuring it with Windows. Codex guided me through how to set that up, and eventually I got everything working. Finally I created a new version on Git and pushed everything.
Devlog 14: I have implemented two new features. First I implemented a feature that allows users to switch the directory where songs get downloaded. This took some time, but I was able to get it in the end. It works by creating a new button which opens a folder picking dialogue. The path that the user seclects inside this dialogue then gets saved to a local json file. Everytime the user changes the path it gets saved to the json, which allows the program to always open up the last directory selected by the user. I had to implement some checks to ensure that the program would work even if the json file was missing or corrupted. The second feature is more of an update. The static “Downloading” progress message is now updated with real time info on what the program is doing. The next step would be adding a dynamic progress bar.
Devlog 15: Improved song selection algorithm, so it selects the next best track if the first selection is invalid. Before if the first track selected by YT-DLP didn’t work/was invalid, then the whole program would fail. Now it moves on to the next if the first one doesn’t work. I also update the progress messages, so it shows which match it is trying.
Devlog 16: Simple update, but I added a new error message to account for a yt-dlp botting error. Now, when YouTube sends an error saying that the request was blocked due to botting being suspected, it sends a properly formatted error message instead of the raw yt-dlp text. I retested everything to ensure the previous functionality of the app remained the same.
Devlog 17: Did some major code cleanups. No new features, but made the code more efficient. Also reorganized some files. The hard part was keeping the functionality the same while trying to make the code non-repetitive and more efficient. I also tried to fix any warnings that were present in the code that were caught by the IDE.
Devlog 18: I implemented a way to start scoring the candidates returned by YT-DLP. This ensures that even if the first candidate returned is not the best, the program can automatically filter out the bad ones using key words and ensure the best candidate is always selected. I have only coded this function for now, and I have to wire it in to the real app soon.
Devlog 19: Implemented the ranking feature from the last devlog. Now, the best candidates are ranked in order from best to worst, and that is the order in which they are downloaded.
Devlog 20: Added the Spotify OEmbed fallback. Now even if the SpotifyScraper python package fails we have a fallback to get as much metadata as we can. This wasn’t that hard, as I already had the file from a previous time. The hard part was accounting for all the different cases, such as the title being missing or an empty string. I had to account for all of those while integrating the new file.
Devlog 21: Now added real YouTube (YT) to the match finding instead of just YouTube Music (YTM). Before the songs were found only on YTM, but I realist that normal YT has a larger list of songs, so I decided to add that to the algorithm as well. Now, the program takes 3 songs from YTM and 3 songs from YT, and uses the ranking function I created before to sort them from best to worst. Then the program starts by trying to download the best match. If it can’t, it goes through the list until if finds one it can download. If none of them download, then it sends an error message. One thing with this step was that I tried not to repeat big chunks of code, as a lot of this was similar to the original YTM downloading method.
Devlog 22 This update was about further increasing the matching strength. Before the program would automatically download the highest ranked candidate, even if it was very low. Now the app downloads the highest ranked candidate only if its ranked above a certain thresh hold. If there are no qualifying matches then the app simply returns a no matches found error. This wasn’t that complicated, but I had to modify a few functions so that the score was returned properly and in a usable format.
Devlog 23: Today I added the feature that embeds cover art into the mp3 files. To do this I had to first use the requests library in Python to get the image itself. Instead of downloading the image I kept it in memory using the ‘io’ library. This made the metadata tagging safer and faster. Finally the app uses mutagen to embed the cover art into the mp3 file. I used a try and except loop, which ensures that even if the cover art adding fails the mp3 file still gets returned, just without the art.
Devlog 24: I have started adding implementations that checks for the latest version of the app from github. It uses the github API endpoint for my specific project, then reads the json to get any version information. Using that we can compare the current version to the latest version on the github to see if there are any updates available. Currently I have only created the function and am yet to implement this feature into the actual app/GUI.
Devlog 25: This update was about implementing the update checker from the last devlog. Now there is an in-app button that allows you to check for new updates. The implementation was similar to all the other buttons and didn’t take too long because I already had the function ready. The next step is to allow the app to actually download and install the update, instead of just pointing out it is available.
Devlog 26: Added a function to help with auto-downloading new updates. I haven’t hooked it up to the UI yet, but that is my next step. The function takes in the name of the installer and the link to download it. It first downloads the installer to a temp file, then once everything is good it saves it to a real executable.
Devlog 27: This is a pretty major update. The myMusic can now automatically download and install updates, without the user having to go and download the github repository. Before, the user would manually have to go and download the installer from github, and set it up like a completely new install. Now, the app itself has a “Check for Updates” button. This button checks the github for the latest version, and if there is a newer version available it gives the user an option to download and install that. If they change their mind during the download, there is a cancel option as well. This works by first getting the github version (latest), then seeing if the current app version matches that. If it does, the app is up to date. If not, then the app can fetch the executable using the github API and automatically download the latest installer. On top of this some inno setup tools allow the app to close the app, install the new version, and reopen the app by itself. The only caveat is that this only works starting from v1.2.0. This means that if you have an older version you will have to manually download v1.2.0 in order to start getting automatic app updates.
Devlog 28: Based on feedback from my first ship, I have decided to introduce Linux support. I thought it would be easy, but it turned out to be a little harder than I thought. The first thing I had to do was rewrite some of the Path code that saves the users download directory. This is because Linux and Windows have different file systems, and I had to account for both. Then came the hard part, Packaging. For ARM, I decided to do this on my Raspberry Pi, where I downloaded the project files from git, downloaded the OS specific FFMPEG and Deno, then repackaged the app as a .tar.gz. I decided to do it this way because this is sort of simply an experimental release. For x64 I decided to use GitHub Actions, which allowed me to download the dependencies and compile without having to spin up a new Virtual Machine. I also decided to keep this as a .tar.gz. Later, once I get more feedback about the Linux versions, I am planning to release a more universal app package (.flatpak). I also had to change the update checkers, because each OS version has to check its own corresponding file. In the end this was a very unique experience and I learned a lot of things about packaging apps on Linux.
Devlog 29: This is kind of a messy devlog, so I’ll lay it out as best as I can. First, I update the UI in preparation for playlist/album support. Before it was three static text fields that could only display one song at a time. Now I replaced it with a scrollable frame, with the ability to add more sections inside the frame for more songs. This frame also has the ability to display metadata. I also introduced a status message that shows different messages and colors depending on the status. While I was doing that (and I am not done with it), I decided to stop in the middle and fix another bug. This bug (that was reported by other people as well as my testing) prevented good matches from ranked properly. This was a problem with how I compared the titles in my ranker. To fix this I added two new functions, one that normalizes the candidate title, and another that normalizes the actual Spotify song name (mainly to exclude features and get just the song name). To do this I messed around a lot with regex patterns, so I learned a lot. Now I have to go back and continue working on the new UI for playlists and albums.
Devlog 30: I FINALLY implemented playlist and album support. At first I thought it would be simple, just looping though each song in the playlist/album. Oh was I wrong. First I had to add two more methods that looped though each song, one for playlists and one for albums. There had to be two different ones because each returned metadata differently. Then I had to kind of change the format of the whole thing, because I had to store all of the songs in a list, but currently I was only returning dictionaries from all of my methods. After getting all of that sorted out I had to actually fix the GUI/downloading part. I had to update the downloading method to handle playlist/album links, then I had to properly handle all of the status message for each song (“Ready”, “Downloading”, “Failed”). Finally I had to work on fixing the bugs I had introduced and handling the edge cases. After all of that I FINALLY had playlist and album support. One thing that was sorta tough was handling the status for each track individually. Before I was just looping through the entire list and setting all of the statuses to the same thing, but I was able to create a new method and change each song status as it was being downloaded, not for every song as a whole.
Devlog 31: This devlog was mainly focused on the efficiency and speed of updating the app. Before the data would come in really small packets, meaning the cpu would have to write to the drive about 130,000 times in total (I know 😭). I adjusted this so it now comes in larger packets so the cpu doesn’t have to do more work. I also adjusted the compression and a few other Inno Setup settings (number of threads, etc.) to make the app more efficient in general. Another issue that I found is that once the app updated (specifically in Windows, idk about other platforms) the settings app would still show the older version for some time. This was an issue with the timing, so I had to adjust some of the delays to get it to work properly. Overall I think this is a pretty good update.
Devlog 32: (sorry for the late post) I have been working on a really cool feature for the app. Basically what I am trying to do is integrate the myMusic pipeline into the windows Spotify app itself. When you right click a playlist or album, there will be a menu that pops up. Usually for normal Spotify users (not on premium) there will be a greyed out download button. What I am trying to do is two things: add a download button for tracks (because there isn’t one right now), and make the playlist/album button actually work. Right now what I have accomplished is adding a new button for the track and making the playlist/album button clickable. I was able to do this by using Spicetify and its framework. Because I already have it installed on my computer I am using it to test everything out but later I will bundle it with my app. What I did was build a custom Spicetify extension (I had to learn JavaScript) that creates a new button. I was able to make the original playlist/album button work because it was only “aria-disabled”, not actually disabled. This means that it was only disabled at the UI level, but Spotify still recorded clicks. By applying some UI changes I was able to make the button look enabled and still record clicks. My next step is to actually hook this up to the Python script. I think this is a really cool feature.
Devlog 33: The app is now able to understand and automatically download any received links. Now the problem is that Spotify isn’t able to send any normal requests to via the computer. Because of this I need to find a way for Spotify to send and get data. I know that Spotify (using Spicetify) can send and get http requests. Because of that I am planning to use FastAPI and a local http server to be able to send and get data so the app can automatically download tracks. I will ensure to keep the server in a high index to ensure it doesn’t get in the way of any other local servers.
Devlog 34: I have been working on creating a queue for the requests. This ensures that the user can download multiple songs at once without having to wait for the previous ones to be finished. So far I have been able to create a request id for each request. The app can update the attributes of each request, such as its status, and error message. On top of this once a request is completed the app also automatically removes that request.
Devlog 35: The app now creates its own server on a very distant and far port so that your other local host stuff doesn’t get affected. I did this with uvicorn and threading, so that creating the port doesn’t make the app freeze. With this functionality the app can get the requests made inside Spotify and automatically download them. The next step is to get the app to report the statuses of the download jobs (queued, downloading, completed, failed, etc.). Then I would actually have to connect both parts, let Spotify send messages and the app receive the message.
Devlog 36: I am almost done with the first phase of the integration. When the download button is clicked inside of Spotify, Spicetify intercepts it and now posts a request to the open web server. Then the python script gets notified of that request, decodes it, then automatically starts downloading the song/playlist/album. The only thing is that the myMusic app has to be open while doing this, but I will remove that requirement in the future (not now). The next step would be to add status reports to Spotify so that the user knows what the status of their download is.
Devlog 37: I am very close to shipping now. I added the Spotify status/progress update messages, so now you can see when the tracks have finished downloading. I also fixed three (kinda major) bugs. First of all there was an error when searching for the songs on YouTube/YouTube Music. Basically what happened was that the title didn’t follow the same ASCII conventions that was used by YouTube. Because of this the app would reject good title matches even though they were the same. This produced quite a few errors, especially when trying to download songs with apostrophes. The second error I fixed was the some songs would automatically have the clean version downloaded. To fix this I switched to the ytmusicapi python package. This package also returned whether the song was explicit or not. Because of this I was able to check whether or not the song was intended to be that way, and if not I could prevent that match from being downloaded. I did have to edit a few functions to accept the new format, but in the end everything worked. Third I fixed a simple error that messed up the searching. This time it wasn’t really a bug, but instead an edge case that I missed. I was catching keywords like “feat.” and “featuring”, but I didn’t catch words like “From (and tv show, etc.)”. Because of this some matches were getting left out. I fixed this by adding another regex pattern that removes this as well.
Devlog 38: I worked on functions that helped install the Spicetify extension into the Spicetify configuration. I had to ensure Spicetify was installer, had to find its path, had to find its extensions path, then finally copy over the extension. I also added system tray behavior and multiple instance detection for the app, so that now when you close the app it doesn’t close but instead goes to the system tray. This allows the Spotify integration to work even if the app itself isn’t visible. The multiple instance detection ensures the app runs properly, and ensures that the app doesn’t try to use the same http port twice, resulting in errors. This did take a while but now all I have to do is create guards for Linux, so that the Spotify integration only works on Windows and doesn’t create unexpected errors on Linux.
Devlog 39: I was finally able to get the Linux guards in place, and also packaged the new builds and released them to GitHub has a new version. The guards were mostly simple, as they were just a few checks that asked what operating system the user was on. And depending on that it decided whether or not to install the Spicetify extensions.
Ships:
I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. The hardest part was turning it from a local Python project into something other people can actually run: bundling FFmpeg, building the Windows executable, creating an installer, and writing clear install/testing instructions. These were all new steps that I wasn’t familiar with before, so I had to heavily research them and get familiar with them before shipping. I am proud that I was able to get it working as a real, bundled Windows desktop app, instead of a small project that runs only on my computer. To test it, use the Try Project link, download the v1.0.1 Windows installer, install it, open myMusic, paste a Spotify track link, click Preview Song Details, then click Download. The finished MP3 should appear in your Downloads folder. Windows may show SmartScreen because the app is unsigned; the release notes explain how to continue.
I made myMusic, a Windows desktop app that takes a Spotify track link, previews the song details, finds a matching audio result, downloads it, converts it to MP3, and saves it with basic metadata tags. This is Ship #2 of my project. There have been a quite a few changes since my last ship, so let me list them all: First I added a folder-picking dialog. This allows the user to change the directory their songs are downloaded to, instead of being forced to always download to the “Downloads” directory. The app also saves the last chosen directory, so even if you close and reopen the app the directory is still saved. I then bundled Deno into the app, which helps yt-dlp solve JS challenges. Then I added the Spotify oEmbed metadata as fallback metadata if the SpotifyScraper python package fails. I also added YouTube as a partner with YouTube Music to get the best results from both platforms. I then a ranking system for the songs. The program adds and removes points from the top 6 matches from both platforms based on a few criteria, then it tries downloading from highest to least ranked. Then I also started embedding cover art. The app now takes in the cover art link, streams it, then writes it to the audio file. Next I added in-app update checking. The app can search the github repo for the latest version, checks to see if it is newer, then can automatically download and installer it. I also polished up the UI so that the controls and labels are more organized. Finally, I added Linux x64 and Linux ARM64 support. This has the same behavior as the Windows app, but the dependencies are now installed natively on that platform, which makes the app run more reliably on Linux. The current latest version at the time of this ship is v1.3.0.
I made myMusic, a Windows/Linux app that allows you to download your favorite songs. It works by searching YouTube/YouTube music for videos of your song. Then, using yt-dlp, it is able to download your song as an mp3 file. Finally it adds all of the metadata, allowing you to properly listen to your music offline. This is ship #3 of my project, so let me explain all of the changes since the last ship: First I finally added support for playlist and album downloads. Now instead of putting in each separate track individually you can combine it into a playlist and download that all together. For this I also had to update the GUI in order to fit all of the song information together. Second I improved the song searching and reliability. I made things consistent with how YouTube expects them (ASCII, Unicode characters, etc.). I also combine YouTube Music and YouTube candidates, so you get the best of both worlds. The app also tries multiple candidates before declaring that track a fail. Third I introduced explicit-version matching. Before, you would sometimes get the clean version of an explicit song. To fix this I switched to ytmusicapi, which allows me to compare matches to determine which one fits the criteria the best. The API also allows me to see whether or not the song is clean, which makes matching easier. Fourth (and probably the biggest update) I was able to add a Spicetify extension with the app. Because of this you are now able to download your favorite songs directly from the Spotify windows app. It reuses Spotify’s native download button rows, which make it easy to download your songs. It also preserves native behavior if you are already on Spotify Premium. It also shows notifications about the status of your download. This is only available on Windows. Fifth in order to make the Spotify integration work, the app now opens up a FastAPI/Uvicorn server bound to 127.0.0.1:18492. I chose a far away port in order for it not to affect any other local host processes. Sixth I also added background behavior for the app. This keeps the app open in the background without it being open on the gui (you will still be able to see it in your system tray). This allows the Spotify integration to run seamlessly without interfering with your every day work. Seventh I greatly improved the in app updater speed. Before it would greatly lag your computer because the chunk sizes were so small and it had to do a lot of writes to your disk. Now I increased the chunk size, and updated the packaging configurations to further boost the download speed and app size. These were all the main updates I did to my app, hope you like it!...
|
1792849845.5765104
|
1792936245.5765104
|
|
19019
|
ChickenOS by @Adammm | Stardance
|
Adammm
|
3
|
4.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T17:30:02Z", "hours": 1.0, "multiplier": 1.96, "payout": 2, "blessing": "neutral", "text": "July 3, 2026 Fixed audio execution bugs in CoopBeats and minor rendering error in the Egg Painter canvas. Resolved a major physics bug in Egg Catch where the speed multiplier failed to clear on a restart, which caused newly spawned eggs to drop at an unplayable, extremely accelerated velocity upon restarting. June 20, 2026 Expanded the Core application with chicken themes by adding three new fun apps: CluckIn Messenger, Coop Terminal CLI (bringing a classic retro Windows 7 aesthetic), and the CoopStreet Market simulator which is well, a stock market. June 14, 2026 Pushed global UI window stability updates to address overlapping context errors. Formally launched the music playback app called cluck beats and implemented support for custom file extensions within the Chicken Notes text framework.", "repo": "https://github.com/Halcyon28/ChickenOS", "demo": "https://chicken-os-kappa.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-29T02:16:42Z", "hours": 1.0, "multiplier": 13.19, "payout": 7, "blessing": "neutral", "text": "So this is a webOS thats chicken themed and has a few hidden secrets and functions. This webOS was inspired by Windows 7 Operating System. Functionalities include: Chicken Note — a fully functional text editor Cluck Clock — a live clock that functions like a normal clock Egg Counter — track eggs with a log (don’t know why I made this) Chicken Facts —facts about chickens Egg Painter — a drawing canvas with save support CoopBeats — A music player with some pre-downloaded songs Egg Catch— A game where you need to catch eggs in a basket. About ChickenOS— Info about the OS that shows devlogs and functions", "repo": "https://github.com/Halcyon28/ChickenOS", "demo": "https://chicken-os-kappa.vercel.app/"}, {"ship_num": 3, "ts": "2026-06-16T14:53:54Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So this is a webOS thats chicken themed and has a few hidden secrets and functions. This webOS was inspired by Windows 7 Operating System. Functionalities include: Chicken Note — a fully functional text editor Cluck Clock — a live clock that functions like a normal clock Egg Counter — track eggs with a log (don’t know why I made this) Chicken Facts —facts about chickens Egg Painter — a drawing canvas with save support CoopBeats — A music player with some pre-downloaded songs Egg Catch— A game where you need to catch eggs in a basket. About ChickenOS— Info about the OS that shows devlogs and functions", "repo": "https://github.com/Halcyon28/ChickenOS", "demo": "https://chicken-os-kappa.vercel.app/"}]...
|
[{"post_id": 26065, "ts": "202 [{"post_id": 26065, "ts": "2026-07-10T17:29:13Z", "hours": 0.8161, "text": "July 3, 2026 Fixed audio execution bugs in CoopBeats and minor rendering error in the Egg Painter canvas. Resolved a major physics bug in Egg Catch where the speed multiplier failed to clear on a restart, which caused newly spawned eggs to drop at an unplayable, extremely accelerated velocity upon restarting. June 20, 2026 Expanded the Core application with chicken themes by adding three new fun apps: CluckIn Messenger, Coop Terminal CLI (bringing a classic retro Windows 7 aesthetic), and the CoopStreet Market simulator which is well, a stock market. June 14, 2026 Pushed global UI window stability updates to address overlapping context errors. Formally launched the music playback app called cluck beats and implemented support for custom file extensions within the Chicken Notes text framework."}, {"post_id": 16075, "ts": "2026-06-26T04:00:20Z", "hours": 0.2567, "text": "Bug fixes with egg catch game"}, {"post_id": 15840, "ts": "2026-06-25T19:13:31Z", "hours": 0.27, "text": "Bug fixes in UI"}, {"post_id": 9976, "ts": "2026-06-16T14:45:39Z", "hours": 1.5844, "text": "Addeded a few apps and games to the webOS"}]...
|
Title: ChickenOS by @Adammm | Stardance
Devlogs:
Title: ChickenOS by @Adammm | Stardance
Devlogs:
Addeded a few apps and games to the webOS
Bug fixes in UI
Bug fixes with egg catch game
July 3, 2026 Fixed audio execution bugs in CoopBeats and minor rendering error in the Egg Painter canvas. Resolved a major physics bug in Egg Catch where the speed multiplier failed to clear on a restart, which caused newly spawned eggs to drop at an unplayable, extremely accelerated velocity upon restarting. June 20, 2026 Expanded the Core application with chicken themes by adding three new fun apps: CluckIn Messenger, Coop Terminal CLI (bringing a classic retro Windows 7 aesthetic), and the CoopStreet Market simulator which is well, a stock market. June 14, 2026 Pushed global UI window stability updates to address overlapping context errors. Formally launched the music playback app called cluck beats and implemented support for custom file extensions within the Chicken Notes text framework.
Ships:
So this is a webOS thats chicken themed and has a few hidden secrets and functions. This webOS was inspired by Windows 7 Operating System. Functionalities include: Chicken Note — a fully functional text editor Cluck Clock — a live clock that functions like a normal clock Egg Counter — track eggs with a log (don’t know why I made this) Chicken Facts —facts about chickens Egg Painter — a drawing canvas with save support CoopBeats — A music player with some pre-downloaded songs Egg Catch— A game where you need to catch eggs in a basket. About ChickenOS— Info about the OS that shows devlogs and functions
So this is a webOS thats chicken themed and has a few hidden secrets and functions. This webOS was inspired by Windows 7 Operating System. Functionalities include: Chicken Note — a fully functional text editor Cluck Clock — a live clock that functions like a normal clock Egg Counter — track eggs with a log (don’t know why I made this) Chicken Facts —facts about chickens Egg Painter — a drawing canvas with save support CoopBeats — A music player with some pre-downloaded songs Egg Catch— A game where you need to catch eggs in a basket. About ChickenOS— Info about the OS that shows devlogs and functions
July 3, 2026 Fixed audio execution bugs in CoopBeats and minor rendering error in the Egg Painter canvas. Resolved a major physics bug in Egg Catch where the speed multiplier failed to clear on a restart, which caused newly spawned eggs to drop at an unplayable, extremely accelerated velocity upon restarting. June 20, 2026 Expanded the Core application with chicken themes by adding three new fun apps: CluckIn Messenger, Coop Terminal CLI (bringing a classic retro Windows 7 aesthetic), and the CoopStreet Market simulator which is well, a stock market. June 14, 2026 Pushed global UI window stability updates to address overlapping context errors. Formally launched the music playback app called cluck beats and implemented support for custom file extensions within the Chicken Notes text framework....
|
1792821313.5204048
|
1792907713.5204048
|
|
19331
|
Platformer Game by @Livvy | Stardance
|
Livvy
|
3
|
15.0
|
188
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T00:51:31Z", "hours": 10.0, "multiplier": 9.82, "payout": 121, "blessing": "neutral", "text": "I completed a game where you jump through obstacles and change gravity to move through each level. As an astronaut, you use a paint gun to change your gravity based on the corresponding color. I’m proud of this being my first big project in java and HTML and CSS, and that this was my first time using VS Code. Also the paint mechanics working was a big accomplishment. A struggle was getting the flag to work after something I added along the way caused a bug and I didn’t realize to way later. It took a while but I got it working! I hope everyone enjoys the project.", "repo": "https://github.com/oliviasophia67/Paint-Gravity-Platformer", "demo": "https://oliviasophia67.github.io/Paint-Gravity-Platformer/"}, {"ship_num": 2, "ts": "2026-07-13T20:43:26Z", "hours": 0.0, "multiplier": 17.21, "payout": 7, "blessing": "neutral", "text": "I made a Platformer Game where you are an astronaut and must navigate through caves to reach the flag. I’m very proud of the graphics and how much I’ve learned when it comes to coding in javascript, html, and css. I am also happy that this finally forced me to get better at using github to place the project into and make it easier to submit into stardance.", "repo": "https://github.com/oliviasophia67/Paint-Gravity-Platformer", "demo": "https://oliviasophia67.github.io/Paint-Gravity-Platformer/"}, {"ship_num": 3, "ts": "2026-06-29T21:09:31Z", "hours": 5.0, "multiplier": 13.29, "payout": 60, "blessing": "neutral", "text": "The project I worked on was a platformer game where you are an astronaut that paints to flip gravity by walking on it, to make its way out of a alien cave. Challenges for this project were honestly finding a way to start the project, as this was one of my first coding projects in JavaScript. Also part of what I struggled with was connecting the project to Hackatime and github to connect it to Stardance. Another thing that was difficult was adding in a level selection and menu with a tracker to keep track of the stars collected on each level. A couple things that I think went very well with this project was the graphics such as the astronauts paint gun, and the background along with the flag. I’m also happy about how the paint turned out with flipping gravity and its graphics.", "repo": "https://github.com/oliviasophia67/Paint-Gravity-Platformer", "demo": "https://oliviasophia67.github.io/Paint-Gravity-Platformer/"}]...
|
[{"post_id": 72014, "ts": "202 [{"post_id": 72014, "ts": "2026-09-22T00:36:16Z", "hours": 4.8328, "text": "Final Devlog Number 9!!! :) So this is the final devlog for the game, all bugs are fixed and the game is finished (for now) I may still work on some things in my spare time but since school started up it been hard to find the time to work on it. It is completed with levels, star completion, ghost racing, achievements, and smooth gameplay. I hope that all of you enjoy the project. I enjoyed working on this a lot. Thanks for all the support I got in the process!"}, {"post_id": 33175, "ts": "2026-07-22T20:49:21Z", "hours": 1.8244, "text": "Devlog 8 - Fixed All Issues! So like I described in my last devlog, I had a major issue that was continuing to pop up, and no matter what I did it was still there. Pretty much the issue was that the whole game froze when touching the flag, and it was caused because I forgot to define one of my variables correctly. The problem was that once I finally fixed this, I had to fix the issues I cause in the process of fixing this, such as the timer no longer working. Besides this I spent some time starting to make an achievements page, to show progress throughout the game."}, {"post_id": 32673, "ts": "2026-07-21T23:51:49Z", "hours": 2.5392, "text": "Bad News :( Devlog 7……. So I have spent the last day none stop working on a bug that I accidently made I think when adding in the timer, but honestly nothing I’ve tried has worked yet. I tried so many different ideas and asked anyone who knows coding but nothing has worked. pretty much the issue is that the astronaut freezes when touching the flag and nothing in the game works. I tried adding in a try …… catch function around the code where it shows what happens when you touch the flag and exactly what error happened, but for this nothing showed up, and in any debugger I try it sees nothing wrong with the code. I’ll add in a screenshot of what it looks like when it freezes, (ignore some parts at the top, I know they overlap) If anyone has an idea of what’s wrong I could really use it. Thanks y’all!"}, {"post_id": 31969, "ts": "2026-07-20T19:56:53Z", "hours": 1.0725, "text": "Paint Gravity Game Devlog! progress I made was I fixed the trajectory lines to show where the paint will end up going, along with this I worked on the tracking for the stars that you collect each level. Now there is a counter along with the total amount of possible stars, to show the progress made in the game. next i’m gonna make the grpahics on the menu and start menu much better."}, {"post_id": 27903, "ts": "2026-07-13T20:34:52Z", "hours": 0.3642, "text": "Another Devlog! I already have shipped this project once, and probably will again soon, but for now heres an update on what I worked on. Not much time was physically spent in the project, but in learning more about coding in java (which is what this project was for me), which for today took me more like an hour than what was logged. Specifically I learned more about the way to make the gun follow the mouse, and working on some of the graphics, such as the background behind the cave walls move. I also tried to think of more ideas, maybe a trajectory dots to show where the paint will go, I would like some advice or commets of what to add."}, {"post_id": 18660, "ts": "2026-06-29T20:59:57Z", "hours": 0.3661, "text": "This is now officially the last devlog I shall post for this project. First off I made most of the additions I said I would, specifically added in the waterfalls to remove paint, and worked on graphics, especially the background. Now I shall ship the project for rating, as well I added in a demo url to the info so people can now officially try it! I will start working on a new project soon, hopefully a longer and harder one."}, {"post_id": 14105, "ts": "2026-06-23T02:36:31Z", "hours": 0.5003, "text": "One of the last devlogs (hopefully) for this project. this will be a fairly short log, just describing the updates I’ve made to my game. Firstly, the changes I made was I added in a main menu with a title page and a way to go to level selection, to access levels as you unlock them. I also fixed some graphics such as the paint gun and the tutorial on the first and second levels to play the game. I made the paint even better as now it drips onto the ceiling, instead of the paint being the same anywhere it is. In this project I have been using HTML and JavaScript in VS code, so here’s an overview of what the code is composed of and what I used to program the game. Major types of functions that will be needed for coding this type of game is a draw function, which as it describes, draws the map, the game loop function and the load level function. Each of these or general loading for the game, along with functions that derive from variables. Making sure variables were defined correctly was also a main part of it. Only other thing I would like is some smaller details to add into the game. Some I was thinking of is maybe instead of just spikes have mini spikes fly across the amp in a timely order, maybe add a waterfall to some levels that when paint is shot through it it washes away, maybe a star rating system or stars to collect in the level, along with possibly making the background more fun and engaging. I would love some other ideas too!"}, {"post_id": 12936, "ts": "2026-06-21T05:28:28Z", "hours": 2.4497, "text": "This is another devlog I’ve posted for this project and I’m almost finished. I definitely fixed the graphics for the game, turning the white box into an astronaut, turning green half circles to plants, and made the theme of a alien cave (or tried to). Here’s the list of what I worked on recently: Obviously I mainly worked on graphics including the change to a pixel art theme, creating the flag and aura around it, made the paint drip to make it look more like paint gravity, and added a tutorial to learn the game along with controls at the top. Another main thing was the death mechanisms. I made spikes into the the levels that increase in difficulty as the levels continue, along with adding a reset button. At first the levels were also slightly simple as there was no limit to the ammo, which I now added to keep the levels hard, and make the game into a puzzle. There is a couple more things I need to add before posting this project for rating which is just to make the astronaut hold a paint gun (which I somehow forgot) and to add a menu for the levels of the game."}, {"post_id": 12300, "ts": "2026-06-20T02:06:08Z", "hours": 1.2378, "text": "First Devlog! So I just recently started working on this new platformer game in VS Code, and here’s what I’ve coded so far. Main thing I began were the basics. I set up the controls for the player, and added an ending goal to bring the player to the next level. I also added in platforms to jump on, and the animation for a paint gun that the player will shoot to win levels. Next I will be adding, gravity mechanics to the paint to change the gravity, making the spikes kill the player and force them to restart the level, and lastly work on the scene and art of the game."}]...
|
Title: Platformer Game by @Livvy | Stardance
Devl Title: Platformer Game by @Livvy | Stardance
Devlogs:
First Devlog! So I just recently started working on this new platformer game in VS Code, and here’s what I’ve coded so far. Main thing I began were the basics. I set up the controls for the player, and added an ending goal to bring the player to the next level. I also added in platforms to jump on, and the animation for a paint gun that the player will shoot to win levels. Next I will be adding, gravity mechanics to the paint to change the gravity, making the spikes kill the player and force them to restart the level, and lastly work on the scene and art of the game.
This is another devlog I’ve posted for this project and I’m almost finished. I definitely fixed the graphics for the game, turning the white box into an astronaut, turning green half circles to plants, and made the theme of a alien cave (or tried to). Here’s the list of what I worked on recently: Obviously I mainly worked on graphics including the change to a pixel art theme, creating the flag and aura around it, made the paint drip to make it look more like paint gravity, and added a tutorial to learn the game along with controls at the top. Another main thing was the death mechanisms. I made spikes into the the levels that increase in difficulty as the levels continue, along with adding a reset button. At first the levels were also slightly simple as there was no limit to the ammo, which I now added to keep the levels hard, and make the game into a puzzle. There is a couple more things I need to add before posting this project for rating which is just to make the astronaut hold a paint gun (which I somehow forgot) and to add a menu for the levels of the game.
One of the last devlogs (hopefully) for this project. this will be a fairly short log, just describing the updates I’ve made to my game. Firstly, the changes I made was I added in a main menu with a title page and a way to go to level selection, to access levels as you unlock them. I also fixed some graphics such as the paint gun and the tutorial on the first and second levels to play the game. I made the paint even better as now it drips onto the ceiling, instead of the paint being the same anywhere it is. In this project I have been using HTML and JavaScript in VS code, so here’s an overview of what the code is composed of and what I used to program the game. Major types of functions that will be needed for coding this type of game is a draw function, which as it describes, draws the map, the game loop function and the load level function. Each of these or general loading for the game, along with functions that derive from variables. Making sure variables were defined correctly was also a main part of it. Only other thing I would like is some smaller details to add into the game. Some I was thinking of is maybe instead of just spikes have mini spikes fly across the amp in a timely order, maybe add a waterfall to some levels that when paint is shot through it it washes away, maybe a star rating system or stars to collect in the level, along with possibly making the background more fun and engaging. I would love some other ideas too!
This is now officially the last devlog I shall post for this project. First off I made most of the additions I said I would, specifically added in the waterfalls to remove paint, and worked on graphics, especially the background. Now I shall ship the project for rating, as well I added in a demo url to the info so people can now officially try it! I will start working on a new project soon, hopefully a longer and harder one.
Another Devlog! I already have shipped this project once, and probably will again soon, but for now heres an update on what I worked on. Not much time was physically spent in the project, but in learning more about coding in java (which is what this project was for me), which for today took me more like an hour than what was logged. Specifically I learned more about the way to make the gun follow the mouse, and working on some of the graphics, such as the background behind the cave walls move. I also tried to think of more ideas, maybe a trajectory dots to show where the paint will go, I would like some advice or commets of what to add.
Paint Gravity Game Devlog! progress I made was I fixed the trajectory lines to show where the paint will end up going, along with this I worked on the tracking for the stars that you collect each level. Now there is a counter along with the total amount of possible stars, to show the progress made in the game. next i’m gonna make the grpahics on the menu and start menu much better.
Bad News :( Devlog 7……. So I have spent the last day none stop working on a bug that I accidently made I think when adding in the timer, but honestly nothing I’ve tried has worked yet. I tried so many different ideas and asked anyone who knows coding but nothing has worked. pretty much the issue is that the astronaut freezes when touching the flag and nothing in the game works. I tried adding in a try …… catch function around the code where it shows what happens when you touch the flag and exactly what error happened, but for this nothing showed up, and in any debugger I try it sees nothing wrong with the code. I’ll add in a screenshot of what it looks like when it freezes, (ignore some parts at the top, I know they overlap) If anyone has an idea of what’s wrong I could really use it. Thanks y’all!
Devlog 8 - Fixed All Issues! So like I described in my last devlog, I had a major issue that was continuing to pop up, and no matter what I did it was still there. Pretty much the issue was that the whole game froze when touching the flag, and it was caused because I forgot to define one of my variables correctly. The problem was that once I finally fixed this, I had to fix the issues I cause in the process of fixing this, such as the timer no longer working. Besides this I spent some time starting to make an achievements page, to show progress throughout the game.
Final Devlog Number 9!!! :) So this is the final devlog for the game, all bugs are fixed and the game is finished (for now) I may still work on some things in my spare time but since school started up it been hard to find the time to work on it. It is completed with levels, star completion, ghost racing, achievements, and smooth gameplay. I hope that all of you enjoy the project. I enjoyed working on this a lot. Thanks for all the support I got in the process!
Ships:
The project I worked on was a platformer game where you are an astronaut that paints to flip gravity by walking on it, to make its way out of a alien cave. Challenges for this project were honestly finding a way to start the project, as this was one of my first coding projects in JavaScript. Also part of what I struggled with was connecting the project to Hackatime and github to connect it to Stardance. Another thing that was difficult was adding in a level selection and menu with a tracker to keep track of the stars collected on each level. A couple things that I think went very well with this project was the graphics such as the astronauts paint gun, and the background along with the flag. I’m also happy about how the paint turned out with flipping gravity and its graphics.
I made a Platformer Game where you are an astronaut and must navigate through caves to reach the flag. I’m very proud of the graphics and how much I’ve learned when it comes to coding in javascript, html, and css. I am also happy that this finally forced me to get better at using github to place the project into and make it easier to submit into stardance.
I completed a game where you jump through obstacles and change gravity to move through each level. As an astronaut, you use a paint gun to change your gravity based on the corresponding color. I’m proud of this being my first big project in java and HTML and CSS, and that this was my first time using VS Code. Also the paint mechanics working was a big accomplishment. A struggle was getting the flag to work after something I added along the way caused a bug and I didn’t realize to way later. It took a while but I got it working! I hope everyone enjoys the project....
|
1792828137.5745199
|
1792914537.5745199
|
|
19478
|
Searchuse 1.4.4 by @ai_zamden | Stardance
|
ai_zamden
|
3
|
135.0
|
1486
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T22:47:37Z", "hours": 33.0, "multiplier": 11.36, "payout": 340, "blessing": "neutral", "text": "Hey guys, this is my third ship for my turn-based strategy game Searchuse. A lot of you guys suggested to add a tutorial, so I made one, and now it’s a lot easier to figure out how to play the game! I hope you enjoy.", "repo": "https://github.com/aidenzma/Searchuse", "demo": "https://ai-zamden.itch.io/searchuse"}, {"ship_num": 2, "ts": "2026-07-17T01:35:02Z", "hours": 77.0, "multiplier": 14.75, "payout": 853, "blessing": "neutral", "text": "I’ve listened to the people and have tried to make as many improvements as I could. UI has been improved Art has been pixel-adjusted Controls are specified in the README Main Menu button has been added Searchuse is now available on Linux AND Searchuse is now available on BROWSER (itch.io, the demo link) So now everyone is theoretically able to try it! A large portion of my time was spent creating a neural network for the bot (that can only be experienced in Train Bot, there’s a hardcoded bot and a neural network bot.) (The neural network bot is still very inexperienced currently.) (Admittedly, Gemini helped me a lot with setting up that portion of the game.) For specific help in downloading the zips, visit the README.", "repo": "https://github.com/aidenzma/Searchuse", "demo": "https://ai-zamden.itch.io/searchuse"}, {"ship_num": 3, "ts": "2026-06-25T04:03:09Z", "hours": 25.0, "multiplier": 12.05, "payout": 293, "blessing": "neutral", "text": "I made a turn-based strategy game called Searchuse, where you search for and then use various items with different mechanics. A challenge in the process was getting all of the turn-based logic right. (For cooldowns and lasting effects, the timing can be surprisingly complicated to get down.) I’m proud that there aren’t any glaring bugs in the game right now. To play, move around using arrow keys, and press the buttons search or use. There are deeper mechanics you can learn, but the surface-level controls should be intuitive! Here’s the trailer: https://youtu.be/wL6j5aslFXA Join the Discord: https://discord.gg/NpBV6vHc7", "repo": "https://github.com/aidenzma/Searchuse", "demo": "https://ai-zamden.itch.io/searchuse"}]...
|
[{"post_id": 63898, "ts": "202 [{"post_id": 63898, "ts": "2026-09-07T22:44:08Z", "hours": 3.3097, "text": "I’m finished with the tutorial, so now you guys can easily learn how to play Searchuse!"}, {"post_id": 63059, "ts": "2026-09-06T17:21:51Z", "hours": 9.2094, "text": "I’m making a tutorial to teach new users how to play the game, as requested by feedback for my latest ship."}, {"post_id": 36775, "ts": "2026-07-29T01:24:16Z", "hours": 12.9503, "text": "I did a massive overhaul of the inner workings of the inventory system, changing the data tracking from only ints representing the itemIDs to structs which provide a container for data of items. I did this because I had to add individual item durability."}, {"post_id": 34389, "ts": "2026-07-25T02:19:17Z", "hours": 7.4644, "text": "After a long while, some new content is finally added to Searchuse. Introducing: Armor Piercing Rounds: Use with certain weapons to allow damage to be done as if the opponent were wearing no armor! Beretta+: An upgraded version of the Beretta, this weapon allows you to do damage the the enemy’s max health, a groundbreaking new mechanic added in this update. Fixed: Energy Orb edge bug: Now, the Energy Orb and other explosives will explode when hitting the edge of the map instead of not doing anything! Smoke vision bug: A small error in FOV rendering while in a smoked area was fixed. Factory edge bug: A visual glitch that resulted in Factory tiles peeking out from under the greyed out vision area was fixed."}, {"post_id": 29881, "ts": "2026-07-17T01:27:03Z", "hours": 1.3161, "text": "Searchuse is now available on Linux and Browser!"}, {"post_id": 29302, "ts": "2026-07-16T04:03:09Z", "hours": 7.9944, "text": "I’ve made major UI improvements to the game!"}, {"post_id": 26990, "ts": "2026-07-12T03:45:34Z", "hours": 10.4197, "text": "I’ve set up the system so that my hardcoded bot can train the neural network bot. This is gonna be fun!"}, {"post_id": 26063, "ts": "2026-07-10T17:29:06Z", "hours": 8.1575, "text": "I started building a neural network for the bot so that I can train it and it can learn. This is what the data file looks like for all of the weights and nodes."}, {"post_id": 24880, "ts": "2026-07-08T18:45:45Z", "hours": 2.7314, "text": "I coded an algorithm that allows the bot to scan the map, and the resulting data lists are represented here by colors! Red = near mountains & hills Green = near cover (caves & trees) Blue = near loot (buildings)"}, {"post_id": 24522, "ts": "2026-07-08T03:50:22Z", "hours": 15.1186, "text": "I added a world map to Searchuse!"}, {"post_id": 21711, "ts": "2026-07-03T20:06:43Z", "hours": 7.6906, "text": "I’ve upgraded the bot’s intelligence. Instead of only being aware of the enemy when they are in its immediate vision, the bot now remembers where it previously saw the enemy, keeps track of how many opportunities to move the enemy had since then, and precisely calculates all the squares the enemy could be on using a flood fill algorithm, based on how many moves the bot thinks the enemy had. (The eye icons represent what the bot thinks are the possible positions of my player based on where it last saw my player. (Sometimes the player can “escape” the eyes by having more moves than what the bot thinks the player has.) (Otherwise, if the bot is right about how many moves the player has, the player should not be able to move to a square without an eye icon.))"}, {"post_id": 20077, "ts": "2026-07-01T16:24:44Z", "hours": 23.2564, "text": "I worked on the enemy AI for my turn-based game Searchuse. The enemy can now use tools, such as invisibility potions, binoculars, radars, UAVs, and traps like landmines or C4s, and can also get airdrops."}, {"post_id": 15456, "ts": "2026-06-25T03:54:38Z", "hours": 4.6358, "text": "I added a few final features to match my turn-based strategy on Unity to its Scratch predecessor. Added: Hitmarker: When you’re hit with an unsuppressed weapon or bomb, a red arrow appears, telling you in which direction on your player’s character’s body you felt the impact. Cooldown visualiser: When you press c, a visual will show up that will show you all the items you have on cooldown and how many turns it is before you can use them next. 4 turn heavy weapons rule: In the first 4 turns, it is now impossible to find any weapon that totals a damage greater than 25 per turn. 3 weapon limit: You can only carry 3 weapons at a time. (By weapons I mean those that stay in your inventory, so something like Grenade doesn’t count.) If you find another weapon while you’re at your limit, you can choose to switch. Turns text: You can now press t to show the turns text, which is below the moves text and shows how many turns it’s been. Turn indicator: On the bottom of your screen, you’ll now find a green or blue landscape that indicates whose turn it is. (Green meaning your turn, blue meaning the enemy’s turn.)"}, {"post_id": 14868, "ts": "2026-06-24T04:17:21Z", "hours": 2.3808, "text": "Added: Message in a Floating Bottle: Like a book, it gives you a random powerup, but its rarity is lower than that of a book. However, its upside is that it is granted immediately after searching. Can only be found in water. AK-47: The world’s most iconic rifle is now in Searchuse! With 2 shots of 20 damage each, this addition provides more mid-tier weapon choices. AK-74: An upgrade of the AK-47, this gun matches the damage done by the M4A1, but it has a lesser cooldown, making it the more desirable option. Meat Stick: This item provides a solid mid-tier healing option, giving you 40 health in one bite. Spikes: This item gives you three more moves, but takes up an armor slot and provides 0 armor. (my beautiful art below)"}, {"post_id": 14567, "ts": "2026-06-23T18:50:46Z", "hours": 10.5353, "text": "I added a bunch of features, a new item, and fixed some bugs for my turn-based strategy game Searchuse. Added: Replay for when Vital Signs run out Replay for when Binoculars runs out Book: when read, gives you a random skill. These skills range from increasing moves to getting 2 searches per turn, so put on your reading glasses and pick up a book! You can also now press b to see your book inventory. Use arrow keys to navigate. Roll Chances Information: press L to open Roll Chances Information, which will tell you the chances of getting each rarity on each tile when you press search. Use arrow keys to navigate. Changed: Sound when picking up Thermal Vision Goggles Fixed: Not being able to start your turn on bot mode glitch Normalized speeds for UAV animation, texts, and movement"}, {"post_id": 11694, "ts": "2026-06-19T01:46:35Z", "hours": 7.0461, "text": "I added an airdrop to my turn-based strategy game Searchuse, which, instead of one, gives you three options to choose from when you press search."}, {"post_id": 9970, "ts": "2026-06-16T14:36:33Z", "hours": 0.32, "text": "I added a UAV to my turn-based strategy game Searchuse, which tracks down the enemy."}]...
|
Title: Searchuse 1.4.4 by @ai_zamden | Stardance
Title: Searchuse 1.4.4 by @ai_zamden | Stardance
Devlogs:
I added a UAV to my turn-based strategy game Searchuse, which tracks down the enemy.
I added an airdrop to my turn-based strategy game Searchuse, which, instead of one, gives you three options to choose from when you press search.
I added a bunch of features, a new item, and fixed some bugs for my turn-based strategy game Searchuse. Added: Replay for when Vital Signs run out Replay for when Binoculars runs out Book: when read, gives you a random skill. These skills range from increasing moves to getting 2 searches per turn, so put on your reading glasses and pick up a book! You can also now press b to see your book inventory. Use arrow keys to navigate. Roll Chances Information: press L to open Roll Chances Information, which will tell you the chances of getting each rarity on each tile when you press search. Use arrow keys to navigate. Changed: Sound when picking up Thermal Vision Goggles Fixed: Not being able to start your turn on bot mode glitch Normalized speeds for UAV animation, texts, and movement
Added: Message in a Floating Bottle: Like a book, it gives you a random powerup, but its rarity is lower than that of a book. However, its upside is that it is granted immediately after searching. Can only be found in water. AK-47: The world’s most iconic rifle is now in Searchuse! With 2 shots of 20 damage each, this addition provides more mid-tier weapon choices. AK-74: An upgrade of the AK-47, this gun matches the damage done by the M4A1, but it has a lesser cooldown, making it the more desirable option. Meat Stick: This item provides a solid mid-tier healing option, giving you 40 health in one bite. Spikes: This item gives you three more moves, but takes up an armor slot and provides 0 armor. (my beautiful art below)
I added a few final features to match my turn-based strategy on Unity to its Scratch predecessor. Added: Hitmarker: When you’re hit with an unsuppressed weapon or bomb, a red arrow appears, telling you in which direction on your player’s character’s body you felt the impact. Cooldown visualiser: When you press c, a visual will show up that will show you all the items you have on cooldown and how many turns it is before you can use them next. 4 turn heavy weapons rule: In the first 4 turns, it is now impossible to find any weapon that totals a damage greater than 25 per turn. 3 weapon limit: You can only carry 3 weapons at a time. (By weapons I mean those that stay in your inventory, so something like Grenade doesn’t count.) If you find another weapon while you’re at your limit, you can choose to switch. Turns text: You can now press t to show the turns text, which is below the moves text and shows how many turns it’s been. Turn indicator: On the bottom of your screen, you’ll now find a green or blue landscape that indicates whose turn it is. (Green meaning your turn, blue meaning the enemy’s turn.)
I worked on the enemy AI for my turn-based game Searchuse. The enemy can now use tools, such as invisibility potions, binoculars, radars, UAVs, and traps like landmines or C4s, and can also get airdrops.
I’ve upgraded the bot’s intelligence. Instead of only being aware of the enemy when they are in its immediate vision, the bot now remembers where it previously saw the enemy, keeps track of how many opportunities to move the enemy had since then, and precisely calculates all the squares the enemy could be on using a flood fill algorithm, based on how many moves the bot thinks the enemy had. (The eye icons represent what the bot thinks are the possible positions of my player based on where it last saw my player. (Sometimes the player can “escape” the eyes by having more moves than what the bot thinks the player has.) (Otherwise, if the bot is right about how many moves the player has, the player should not be able to move to a square without an eye icon.))
I added a world map to Searchuse!
I coded an algorithm that allows the bot to scan the map, and the resulting data lists are represented here by colors! Red = near mountains & hills Green = near cover (caves & trees) Blue = near loot (buildings)
I started building a neural network for the bot so that I can train it and it can learn. This is what the data file looks like for all of the weights and nodes.
I’ve set up the system so that my hardcoded bot can train the neural network bot. This is gonna be fun!
I’ve made major UI improvements to the game!
Searchuse is now available on Linux and Browser!
After a long while, some new content is finally added to Searchuse. Introducing: Armor Piercing Rounds: Use with certain weapons to allow damage to be done as if the opponent were wearing no armor! Beretta+: An upgraded version of the Beretta, this weapon allows you to do damage the the enemy’s max health, a groundbreaking new mechanic added in this update. Fixed: Energy Orb edge bug: Now, the Energy Orb and other explosives will explode when hitting the edge of the map instead of not doing anything! Smoke vision bug: A small error in FOV rendering while in a smoked area was fixed. Factory edge bug: A visual glitch that resulted in Factory tiles peeking out from under the greyed out vision area was fixed.
I did a massive overhaul of the inner workings of the inventory system, changing the data tracking from only ints representing the itemIDs to structs which provide a container for data of items. I did this because I had to add individual item durability.
I’m making a tutorial to teach new users how to play the game, as requested by feedback for my latest ship.
I’m finished with the tutorial, so now you guys can easily learn how to play Searchuse!
Ships:
I made a turn-based strategy game called Searchuse, where you search for and then use various items with different mechanics. A challenge in the process was getting all of the turn-based logic right. (For cooldowns and lasting effects, the timing can be surprisingly complicated to get down.) I’m proud that there aren’t any glaring bugs in the game right now. To play, move around using arrow keys, and press the buttons search or use. There are deeper mechanics you can learn, but the surface-level controls should be intuitive! Here’s the trailer: https://youtu.be/wL6j5aslFXA Join the Discord: https://discord.gg/NpBV6vHc7
I’ve listened to the people and have tried to make as many improvements as I could. UI has been improved Art has been pixel-adjusted Controls are specified in the README Main Menu button has been added Searchuse is now available on Linux AND Searchuse is now available on BROWSER (itch.io, the demo link) So now everyone is theoretically able to try it! A large portion of my time was spent creating a neural network for the bot (that can only be experienced in Train Bot, there’s a hardcoded bot and a neural network bot.) (The neural network bot is still very inexperienced currently.) (Admittedly, Gemini helped me a lot with setting up that portion of the game.) For specific help in downloading the zips, visit the README.
Hey guys, this is my third ship for my turn-based strategy game Searchuse. A lot of you guys suggested to add a tutorial, so I made one, and now it’s a lot easier to figure out how to play the game! I hope you enjoy....
|
1792846151.6578004
|
1792932551.6578004
|
|
20008
|
SpaceGuessr by @Jaron | Stardance
|
Jaron
|
3
|
99.0
|
1811
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T18:20:49Z", "hours": 39.0, "multiplier": 19.83, "payout": 780, "blessing": "neutral", "text": "SpaceGuessr is a small browser game where you have to guess real space objects from NASA images. It works kinda like GeoGuessr, but instead of places on Earth you get planets, moons, nebulae, galaxies and other space stuff. The game has different modes like Classic, Timed, Blind Reveal, Learn and Reverse Learn, so you can either play for score or just practice. Technically the project is built with plain HTML, CSS and JavaScript, without any big framework. index.html contains the screens and buttons, style.css handles the layout, animations and responsive design, and script.js contains the main game logic like loading questions, checking answers, calculating score, streaks, timers, hints, leaderboards and local profile stats. The questions are stored in game-data.js, while mode settings like rounds, hints and timers are stored in game-config.js. The game also uses localStorage to save local stats, recent runs and fallback scores in the browser. For online scores it can use Supabase, but if that does not work the game still runs normally. Overall, SpaceGuessr is a space guessing game made with simple web technologys, real NASA images and a few extra features.", "repo": "https://github.com/Blizz606/SpaceGuessr", "demo": "https://blizz606.github.io/SpaceGuessr"}, {"ship_num": 2, "ts": "2026-07-05T20:02:26Z", "hours": 58.0, "multiplier": 17.26, "payout": 1009, "blessing": "neutral", "text": "SpaceGuessr is basically my version of “GeoGuessr, but in space” — a browser game where you guess planets, moons, nebulae, galaxies, and other space objects from real NASA-based images. At first, I thought this would just be a simple guessing game, but it quickly turned into a much bigger project. I kept adding more modes, more polish, better UI, scoring, animations, and content until it started to feel like an actual game instead of just a small prototype. Right now, SpaceGuessr has multiple game modes like Quick, Classic, Timed, Daily, Infinite, and Blind Reveal. Blind Reveal is one of my favorite parts: the image slowly uncovers itself while your possible score drops over time, so you have to decide whether to guess early or wait for more information. I also added a full scoring system with streak bonuses, animated feedback, end screens, keyboard controls, responsive design, leaderboard support, local fallback saving, confetti, reveal effects, round transitions, and a lot of small game-feel details. I spent a lot of time on these small things because they make the game feel much more satisfying to play. A big part of the work was also the content. The game uses a curated pool of 70+ NASA-based images, with correct answers, wrong answers, facts, and difficulty balancing. I kept improving the image pool so the game doesn’t feel repetitive, and I added logic so the same image won’t repeat during one run. Technically, the whole project is built with plain HTML, CSS, and JavaScript, without using a big framework. That meant a lot of the animations, UI states, game logic, scoring, and mode handling had to be built manually. I also added Supabase for global leaderboards and deployed everything with GitHub Pages so anyone can just open it and play instantly. I’m really proud of SpaceGuessr because it started as a simple idea and became one of my most complete projects so far. It’s playable, replayable, polished, and actually fun to come back to. I put a lot of time into making it feel smooth, finished, and cared for — and I think that shows in the final game. Thanks to everyone who is supporting this project <3", "repo": "https://github.com/Blizz606/SpaceGuessr", "demo": "https://blizz606.github.io/SpaceGuessr"}, {"ship_num": 3, "ts": "2026-06-16T17:53:36Z", "hours": 2.0, "multiplier": 9.65, "payout": 22, "blessing": "neutral", "text": "SpaceGuessr is like GeoGuessr, but in space. Explore planets, galaxies, nebulae, and more using real images provided by the NASA API. Guess where each image was taken or what it shows, compete for high scores, and climb the global leaderboard powered by Supabase.", "repo": "https://github.com/Blizz606/SpaceGuessr", "demo": "https://blizz606.github.io/SpaceGuessr"}]...
|
[{"post_id": 31367, "ts": "202 [{"post_id": 31367, "ts": "2026-07-19T18:08:17Z", "hours": 3.8328, "text": "Devlog #1.7 I added the recent Runs to the Profile Menu and redesigned it, because it didn’t looked special. I think it has a smooth animation now. When there are bugs it would be cool if you could tell me. <3"}, {"post_id": 30775, "ts": "2026-07-18T17:23:00Z", "hours": 4.1169, "text": "Devlog #1.6 Today I added a small profile in the right bottom. You can see your best scores and more. Everything is safed in localStorage, so no Account or smth. like that is needed.- I had to find an elegant way to save all the stats in localStorage, but I think it turned out well. I will have more time in the following days cause summer break started yesterday."}, {"post_id": 30577, "ts": "2026-07-18T08:37:38Z", "hours": 1.7933, "text": "Devlog #1.5 Added a small local best score system to the main menu. It now checks saved leaderboard data in localStorage and shows the best score for the currently selected mode in a subtle way under the mode description. I also made sure it updates automatically when switching modes and after saving a run, while Daily , Learn , and Reverse Learn show a muted status message instead of a score because they are not normal saved score modes."}, {"post_id": 30173, "ts": "2026-07-17T15:16:05Z", "hours": 9.9933, "text": "Devlog #1.4 Today I worked more on polishing SpaceGuessr and making the special modes feel better. The biggest change was adding Reverse Learn , it’s a mode where the clue shows up in the middle of the screen first and then you have to guess the answer. I also improved the popup for missed images, polished some UI details like panels, spacing, and animations, and updated the README so it matches the current version better. Overall the game just feels cleaner and more finished now. And fun fact: I hit the stardance limit with this change, I saw just now that I could only commit 10h max. But I squeezed everything into the 10h. I will fix some stuff later like the loading times of the modes."}, {"post_id": 28442, "ts": "2026-07-14T18:05:48Z", "hours": 5.1764, "text": "Devlog #1.3 Today I polished the game UI again and cleaned up some smaller details. I improved the help menu, made the top progress bar more visible, and changed the end screen so the leaderboard does not show up immediately. I also adjusted the main menu layout a little so the background has more space and the screen feels cleaner. Nothing huge today, but the game feels nicer and more polished now. The Help Button is a bit weird but I will fix it later."}, {"post_id": 27151, "ts": "2026-07-12T13:29:59Z", "hours": 7.6275, "text": "Devlog #1.2 Today I expanded SpaceGuessr with selectable learn packs and improved the learning flow. I also added a much larger centralized content file with many new space questions, plus UI updates like new backgrounds, smoother image loading, and an end-of-session review for learn mode. The project now feels more polished, more scalable, and better suited for replayability. Main Goal was just making the code easier to understand and implementing the Feedback. You can try it now . I would love to here some more feedback. <3"}, {"post_id": 26735, "ts": "2026-07-11T18:14:20Z", "hours": 6.7786, "text": "Devlog #1.1 In the last GitHub commit, I cleaned up the game structure. I added Learn Mode , moved the mode settings into game-config.js , and moved the space questions into game-data.js . I also improved some animations, mobile styling, and Blind Reveal. In the newest commit, I updated the main menu with Casual and Special sections. Special mode now has a smooth background change with the new image (The Image is generated by AI). I also updated the README and added a few small CSS improvements. PS: Thanks to all of u. My last Ship was rated awesome. Thanks to everybody who played it and especially rated it. <3"}, {"post_id": 23047, "ts": "2026-07-05T19:38:41Z", "hours": 6.6544, "text": "Devlog #21 This is a kinda long devlog so thanks to everyone who is really reding it all the way. This update was a bigger gameplay and polish pass focused on turning SpaceGuessr into a more complete and shippable version. New game mode and scoring changes Replaced the old Infinite mode with a new Blind Reveal mode because it’s more fun Added countdown support for Blind Reveal Reworked scoring so Blind Reveal starts at higher points and drops with each reveal step Added streak bonus scoring, so longer streaks now reward extra points Updated leaderboard handling so score-chasing modes save automatically after a run Gameplay and UX improvements Added confetti for correct answers (discourse.webflow.com) Added a stronger streak animation when a streak continues Added danger styling for the countdown when time is low (red) Improved answer feedback presentation and round transition Added subtle round motion polish plus small audio cues for hints, correct answers, wrong answers, streaks, and end-of-run results Menu and endscreen polish Added a help button in the main menu that opens a smooth animated help panel Added scoring explanations directly into the help panel Removed the visible dark/light mode toggle and kept the game in the default light theme Reworked the endscreen so score saving is more compact Removed the large manual “save your best run” panel and switched to automatic score saving when possible Added a run summary/final run text on the endscreen so the result feels more personal and less like raw stats only Cleaned up feedback so success toasts are gone and only errors appear as top toasts Leaderboard and save flow Added local-first score saving with global leaderboard sync afterward Improved fallback behavior when global leaderboard writes fail Simplified the save-name experience so the player is only asked for a leaderboard name when needed Improved leaderboard modal behavior in the menu Content expansion Added 30 new NASA image entries to the question pool ChatGPT helped research and pick these new images from the official NASA Image and Video Library Added matching answer sets, facts, and difficulty tags for the new entries New content includes objects and scenes like: Venus Io Deimos Mimas Tethys Hyperion Oberon Umbriel Titania Sun Helix Nebula Carina Nebula Trifid Nebula Flame Nebula Butterfly Nebula Triangulum Galaxy Pinwheel Galaxy Cartwheel Galaxy Centaurus A Sculptor Galaxy Antennae Galaxies M81 Galaxy M82 Galaxy Stephan Quintet Pillars of Creation Charon Nix Hydra Phoebe Olympus Mons Current state At this point the project feels much more release-ready than before, with the biggest remaining work being final balancing, QA across all modes, and a last pass on leaderboard edge cases."}, {"post_id": 22681, "ts": "2026-07-05T07:30:11Z", "hours": 6.2978, "text": "Devlog #20 This DL was mostly about cleaning up and tightening the project without changing its core. A big part of the work went into reorganizing the css so it is much easier to maintain. I also moved more of the repeated colors, borders, and shadow values into variables, which makes the system feel more consistent. On top of that, button states and status states were cleaned up so things like hover, disabled, correct, and wrong feel more unified across the game. The mobile version also got a proper polish pass while keeping the desktop version untouched. The start screen was tightened up so it uses space better, the logo and card proportions feel more balanced, and the Daily Mode button sits more naturally in the layout. Besides that, there was some general UI polish throughout the game. Answer feedback feels more intentional now, the HUD relies more on shared styling tokens, and the whole thing is internally a lot cleaner even though the overall look stays very close to what it was before. Thanks for the support from all of U"}, {"post_id": 20982, "ts": "2026-07-02T18:37:45Z", "hours": 2.1589, "text": "Devlog #19 UI polish and bug fixes I Improved the mobile flow by replacing the mode button row with a dropdown and simplifying the mobile start screen. Extended the round progress animation so it stays visible longer and can continue while the next image is already shown. Added small no-sound interaction feedback such as answer animations, panel flashes, and a ready pulse on the next button. Fixed stale feedback content so old round text does not linger after moving to the next round. Polished the dark mode with better contrast, deeper panel styling, and more consistent button states."}, {"post_id": 20107, "ts": "2026-07-01T17:07:17Z", "hours": 3.2425, "text": "Devlog #18 SpaceGuessr started with a simple idea: GeoGuessr, but in space. Instead of streets and cities, players guess real NASA images showing planets, moons, nebulae, and galaxies. The game is now fully playable with modes like Quick , Classic , Timed , Daily , and Infinite , plus score tracking, facts after rounds, a polished responsive UI, and leaderboard features. The feedback so far has been very positive. People like the concept, the visual style, and the replay value. The biggest next steps are making the game more educational and more competitive. Next, I want to improve: a Learn Mode or better info/fact screens stronger leaderboard and competition features better feedback for low or negative scores more mobile polish better devlogs and project storytelling I am really happy with the current state. The core idea works, and now the goal is to make it deeper, smarter, and even more replayable. PS: It’s awesome that I got so much good feedback, so I can improve SpaceGuessr. Thanks to all of u (:"}, {"post_id": 19375, "ts": "2026-06-30T17:43:59Z", "hours": 2.7389, "text": "Devlog #17 Today I polished the SpaceGuessr UI a lot and also cleaned up how small animation states work in the game. What I improved Reworked the start menu so the main card feels bigger and more like a real game menu Made the game mode area clearer with better spacing and stronger visual focus Updated the mode descriptions so they sound cleaner and more professional Made the start button larger and more important visually Removed the small line/gloss artifact from the selected game mode tab Improved the dark mode styling so the in-game UI feels less weird and more consistent Reworked the final report card so it matches the rest of the project style better Cleaned up the light mode end screen because it looked too washed out before Improved the theme toggle so it fits the glass / space design better JS improvements I also added small UI animation states in JavaScript instead of only relying on random class toggles. New state classes now include things like: is-transitioning is-answering is-feedback-open is-round-complete is-results-view That makes the UI feel more stable and gives smoother transitions between: loading a round answering opening feedback showing the end screen Small code example function setUiState ( stateKey , isActive ) { const stateClassName = uiStateClassMap [ stateKey ]; if ( ! stateClassName ) { return ; } uiStateTargets . forEach (( element ) => { element . classList . toggle ( stateClassName , isActive ); }); }"}, {"post_id": 18580, "ts": "2026-06-29T19:29:38Z", "hours": 1.7408, "text": "Devlog #16 Today I cleaned up the HTML structure of SpaceGuessr to make it easier to understand and closer to how I would actually explain the project. I cleaned up a few small text details in the HTML, fixed some weird special characters, and made the structure more readable overall. Also I revamped some of the In-Game UI. The functionality stayed the same, but the file is now much easier to follow."}, {"post_id": 17823, "ts": "2026-06-28T19:14:39Z", "hours": 4.6086, "text": "Devlog #15 Today I focused on polishing the visual consistency of SpaceGuessr. I cleaned up the theme system in the CSS by introducing more shared variables for light mode, dark mode, navigation elements, and the theme toggle. I also unified several animation timings so that screen transitions, menu interactions, answer cards, and UI panels feel more consistent. After that, I reworked the end screen so it matches the rest of the interface better. The result card, stat tiles, leaderboard section, and share popup now use the same general visual language as the menu and in-game UI. I also updated the end screen to use the same background image as the main menu, which makes the whole app feel more connected. I wasn’t able to do so much the past days, because here in germany it’s like 40 degree Celsius."}, {"post_id": 16797, "ts": "2026-06-27T08:40:37Z", "hours": 1.66, "text": "Devlog #14 I refined the main menu of SpaceGuessr to make the game mode selection feel cleaner and more polished. I reworked the central menu card so it looks larger, more focused, and closer to a real browser game menu. I also improved the visual hierarchy by giving the mode area a clearer title and better spacing between the mode tabs, the description, and the start button. Also, I polished the game mode tabs themselves. The active tab is now more clearly highlighted, while the inactive tabs are slightly toned down so the selected mode stands out better without making the UI feel too busy."}, {"post_id": 15833, "ts": "2026-06-25T19:02:15Z", "hours": 1.3828, "text": "Devlog #13 Today I added two small but useful gameplay improvements to SpaceGuessr. First, I removed hints from Daily Mode. The daily challenge is now a bit fairer because every player gets the same image without extra help. I handled this directly in the JavaScript by setting Daily Mode hints to 0 , hiding the hint UI in that mode, and blocking the hint function there as a backup. Second, I added keyboard controls for smoother gameplay. You can now press 1 , 2 , 3 , or 4 to choose an answer and use Enter to continue to the next round after answering. I hand’t much time the previous days, so I’m glad I could improve something today."}, {"post_id": 13741, "ts": "2026-06-22T15:06:42Z", "hours": 3.1017, "text": "Devlog #12 (UI-Redeign) Today I spent a good amount of time polishing the actual game UI so it feels more like a real browser game instead of a random prototype screen on top of an image. The biggest change was the in-game layout. I reworked the top navigation so it feels cleaner and more structured, with Home , Round , Streak , Time , and Score behaving more like proper game UI elements. I also kept improving the answer area at the bottom, so the feedback card, answer buttons, and action button feel more connected and easier to read. Another bigger feature was the new dark/light mode toggle in the bottom-right corner. It now actually changes the game UI theme and stores the selected mode in localStorage , so the theme stays the same after reloading the page. Theme Toggle Example function applyGameTheme ( themeName ) { const isDarkTheme = themeName === \" dark \" ; document . body . classList . toggle ( \" game-ui-dark \" , isDarkTheme ); localStorage . setItem ( gameThemeStorageKey , isDarkTheme ? \" dark \" : \" light \" ); } I will redesign the Summary Page as fast as I can. Today was really productive actually, only thing I had problems with, is some of the CSS and especially some of the animations, so I used some AI there."}, {"post_id": 13249, "ts": "2026-06-21T18:10:20Z", "hours": 1.7842, "text": "Devlog #11 Today I cleaned up the main menu UI to make it feel calmer and more polished. I moved the Daily Mode button out from inside the main panel and placed it below as its own extra action, which makes the menu structure easier to understand. Also I redesigned the Logo to catch the vibe more. Today was my most productive day with crazy 8h tracked, since it was weekend here in Germany. I’m long not done with the project, I have so many things that I want to add."}, {"post_id": 13104, "ts": "2026-06-21T13:15:53Z", "hours": 2.5442, "text": "Devlog #10 Worked on the final mission report screen and the share popup polish. I improved the result screen spacing, pushed the score section lower for a cleaner layout, and added clearer stat colors so correct answers stand out in green and wrong answers in red. I also added the share popup to the main end-screen. Copy function in the Share Pop-Up const shareText = getShareText(); try { await navigator.clipboard.writeText(shareText); clearTimeout(copyButtonResetTimer); copyShareButton.classList.add(\"copied\"); copyButtonResetTimer = setTimeout(() => { copyShareButton.classList.remove(\"copied\"); }, 1200); } catch {} } Try it now"}, {"post_id": 13020, "ts": "2026-06-21T09:16:53Z", "hours": 1.805, "text": "Devlog #9 I reworked the hint system in SpaceGuessr and improved how it fits into the gameplay. The hint feature is now more compact in the UI and is designed to feel like a natural part of the round instead of a separate text block."}, {"post_id": 12983, "ts": "2026-06-21T07:24:04Z", "hours": 3.2494, "text": "Devlog #8 Today I improved the overall game flow and polished some things. I added a hint system with different hint counts depending on the game mode, refined the answer feedback timing, and cleaned up the spacing in the in-game detail panel. I also shortened the fact text for the space images."}, {"post_id": 12607, "ts": "2026-06-20T16:24:35Z", "hours": 1.5767, "text": "Devlog #7 Try it now Today I refined the answer flow in SpaceGuessr to make each guess feel smoother and more deliberate. I adjusted the feedback timing, improved the reveal flow after selecting an answer, and gave the feedback area better spacing so the UI feels cleaner. I also shortened the fact text for each space image so the information is easier to scan and fits the layout more consistently without feeling overcrowded."}, {"post_id": 12433, "ts": "2026-06-20T09:10:03Z", "hours": 4.4494, "text": "Devlog #6 Today I kept improving SpaceGuessr as a small playable web game and focused mostly on polish, flow, and presentation. I added a streak system, refined the end screen, improved the loading and background preloading behavior and more so it feels smoother and more complete. I also reworked the help section in the main menu, simplified parts of the HTML structure, and cleaned up the overall interface so the project feels more understandable and closer to a finished mini product. I had some problems with the Streak system, but AI helped me solve it quickly."}, {"post_id": 12106, "ts": "2026-06-19T19:28:24Z", "hours": 1.5339, "text": "Built a new help panel for SpaceGuessr today. There’s now a small ? button in the main menu that opens a smooth in-game guide with mode explanations and a direct link to the GitHub docs. Small feature, but it makes the whole project feel a lot more polished and beginner-friendly."}, {"post_id": 12049, "ts": "2026-06-19T17:29:09Z", "hours": 3.5011, "text": "Devlog #4 I just added a new Daily Mode to the game and connected it with Supabase . Try it now You can now guess one image per day and compete with others through the daily challenge. I had some problems while integrating the feature, so I used ChatGPT a bit for debugging. In the end, the error was actually pretty obvious, but that’s just how debugging goes sometimes I guess."}, {"post_id": 11507, "ts": "2026-06-18T20:00:20Z", "hours": 4.0894, "text": "Devlog #3 I just recoded a major part of the game and finally fixed some important bugs in Infinite Mode. Hopefully everything is working smoothly now. Stay tuned for future updates on SpaceGuesrr !"}, {"post_id": 10129, "ts": "2026-06-16T18:48:28Z", "hours": 0.3333, "text": "Just revamped the scoring system"}, {"post_id": 10075, "ts": "2026-06-16T17:34:26Z", "hours": 1.9494, "text": "GeoGuesser just in Space (v1.0)"}, {"post_id": 9991, "ts": "2026-06-16T15:00:48Z", "hours": 0.3003, "text": "Currently working on SpaceGuessr"}]...
|
Title: SpaceGuessr by @Jaron | Stardance
Devlogs: Title: SpaceGuessr by @Jaron | Stardance
Devlogs:
Currently working on SpaceGuessr
GeoGuesser just in Space (v1.0)
Just revamped the scoring system
Devlog #3 I just recoded a major part of the game and finally fixed some important bugs in Infinite Mode. Hopefully everything is working smoothly now. Stay tuned for future updates on SpaceGuesrr !
Devlog #4 I just added a new Daily Mode to the game and connected it with Supabase . Try it now You can now guess one image per day and compete with others through the daily challenge. I had some problems while integrating the feature, so I used ChatGPT a bit for debugging. In the end, the error was actually pretty obvious, but that’s just how debugging goes sometimes I guess.
Built a new help panel for SpaceGuessr today. There’s now a small ? button in the main menu that opens a smooth in-game guide with mode explanations and a direct link to the GitHub docs. Small feature, but it makes the whole project feel a lot more polished and beginner-friendly.
Devlog #6 Today I kept improving SpaceGuessr as a small playable web game and focused mostly on polish, flow, and presentation. I added a streak system, refined the end screen, improved the loading and background preloading behavior and more so it feels smoother and more complete. I also reworked the help section in the main menu, simplified parts of the HTML structure, and cleaned up the overall interface so the project feels more understandable and closer to a finished mini product. I had some problems with the Streak system, but AI helped me solve it quickly.
Devlog #7 Try it now Today I refined the answer flow in SpaceGuessr to make each guess feel smoother and more deliberate. I adjusted the feedback timing, improved the reveal flow after selecting an answer, and gave the feedback area better spacing so the UI feels cleaner. I also shortened the fact text for each space image so the information is easier to scan and fits the layout more consistently without feeling overcrowded.
Devlog #8 Today I improved the overall game flow and polished some things. I added a hint system with different hint counts depending on the game mode, refined the answer feedback timing, and cleaned up the spacing in the in-game detail panel. I also shortened the fact text for the space images.
Devlog #9 I reworked the hint system in SpaceGuessr and improved how it fits into the gameplay. The hint feature is now more compact in the UI and is designed to feel like a natural part of the round instead of a separate text block.
Devlog #10 Worked on the final mission report screen and the share popup polish. I improved the result screen spacing, pushed the score section lower for a cleaner layout, and added clearer stat colors so correct answers stand out in green and wrong answers in red. I also added the share popup to the main end-screen. Copy function in the Share Pop-Up const shareText = getShareText(); try { await navigator.clipboard.writeText(shareText); clearTimeout(copyButtonResetTimer); copyShareButton.classList.add("copied"); copyButtonResetTimer = setTimeout(() => { copyShareButton.classList.remove("copied"); }, 1200); } catch {} } Try it now
Devlog #11 Today I cleaned up the main menu UI to make it feel calmer and more polished. I moved the Daily Mode button out from inside the main panel and placed it below as its own extra action, which makes the menu structure easier to understand. Also I redesigned the Logo to catch the vibe more. Today was my most productive day with crazy 8h tracked, since it was weekend here in Germany. I’m long not done with the project, I have so many things that I want to add.
Devlog #12 (UI-Redeign) Today I spent a good amount of time polishing the actual game UI so it feels more like a real browser game instead of a random prototype screen on top of an image. The biggest change was the in-game layout. I reworked the top navigation so it feels cleaner and more structured, with Home , Round , Streak , Time , and Score behaving more like proper game UI elements. I also kept improving the answer area at the bottom, so the feedback card, answer buttons, and action button feel more connected and easier to read. Another bigger feature was the new dark/light mode toggle in the bottom-right corner. It now actually changes the game UI theme and stores the selected mode in localStorage , so the theme stays the same after reloading the page. Theme Toggle Example function applyGameTheme ( themeName ) { const isDarkTheme = themeName === " dark " ; document . body . classList . toggle ( " game-ui-dark " , isDarkTheme ); localStorage . setItem ( gameThemeStorageKey , isDarkTheme ? " dark " : " light " ); } I will redesign the Summary Page as fast as I can. Today was really productive actually, only thing I had problems with, is some of the CSS and especially some of the animations, so I used some AI there.
Devlog #13 Today I added two small but useful gameplay improvements to SpaceGuessr. First, I removed hints from Daily Mode. The daily challenge is now a bit fairer because every player gets the same image without extra help. I handled this directly in the JavaScript by setting Daily Mode hints to 0 , hiding the hint UI in that mode, and blocking the hint function there as a backup. Second, I added keyboard controls for smoother gameplay. You can now press 1 , 2 , 3 , or 4 to choose an answer and use Enter to continue to the next round after answering. I hand’t much time the previous days, so I’m glad I could improve something today.
Devlog #14 I refined the main menu of SpaceGuessr to make the game mode selection feel cleaner and more polished. I reworked the central menu card so it looks larger, more focused, and closer to a real browser game menu. I also improved the visual hierarchy by giving the mode area a clearer title and better spacing between the mode tabs, the description, and the start button. Also, I polished the game mode tabs themselves. The active tab is now more clearly highlighted, while the inactive tabs are slightly toned down so the selected mode stands out better without making the UI feel too busy.
Devlog #15 Today I focused on polishing the visual consistency of SpaceGuessr. I cleaned up the theme system in the CSS by introducing more shared variables for light mode, dark mode, navigation elements, and the theme toggle. I also unified several animation timings so that screen transitions, menu interactions, answer cards, and UI panels feel more consistent. After that, I reworked the end screen so it matches the rest of the interface better. The result card, stat tiles, leaderboard section, and share popup now use the same general visual language as the menu and in-game UI. I also updated the end screen to use the same background image as the main menu, which makes the whole app feel more connected. I wasn’t able to do so much the past days, because here in germany it’s like 40 degree Celsius.
Devlog #16 Today I cleaned up the HTML structure of SpaceGuessr to make it easier to understand and closer to how I would actually explain the project. I cleaned up a few small text details in the HTML, fixed some weird special characters, and made the structure more readable overall. Also I revamped some of the In-Game UI. The functionality stayed the same, but the file is now much easier to follow.
Devlog #17 Today I polished the SpaceGuessr UI a lot and also cleaned up how small animation states work in the game. What I improved Reworked the start menu so the main card feels bigger and more like a real game menu Made the game mode area clearer with better spacing and stronger visual focus Updated the mode descriptions so they sound cleaner and more professional Made the start button larger and more important visually Removed the small line/gloss artifact from the selected game mode tab Improved the dark mode styling so the in-game UI feels less weird and more consistent Reworked the final report card so it matches the rest of the project style better Cleaned up the light mode end screen because it looked too washed out before Improved the theme toggle so it fits the glass / space design better JS improvements I also added small UI animation states in JavaScript instead of only relying on random class toggles. New state classes now include things like: is-transitioning is-answering is-feedback-open is-round-complete is-results-view That makes the UI feel more stable and gives smoother transitions between: loading a round answering opening feedback showing the end screen Small code example function setUiState ( stateKey , isActive ) { const stateClassName = uiStateClassMap [ stateKey ]; if ( ! stateClassName ) { return ; } uiStateTargets . forEach (( element ) => { element . classList . toggle ( stateClassName , isActive ); }); }
Devlog #18 SpaceGuessr started with a simple idea: GeoGuessr, but in space. Instead of streets and cities, players guess real NASA images showing planets, moons, nebulae, and galaxies. The game is now fully playable with modes like Quick , Classic , Timed , Daily , and Infinite , plus score tracking, facts after rounds, a polished responsive UI, and leaderboard features. The feedback so far has been very positive. People like the concept, the visual style, and the replay value. The biggest next steps are making the game more educational and more competitive. Next, I want to improve: a Learn Mode or better info/fact screens stronger leaderboard and competition features better feedback for low or negative scores more mobile polish better devlogs and project storytelling I am really happy with the current state. The core idea works, and now the goal is to make it deeper, smarter, and even more replayable. PS: It’s awesome that I got so much good feedback, so I can improve SpaceGuessr. Thanks to all of u (:
Devlog #19 UI polish and bug fixes I Improved the mobile flow by replacing the mode button row with a dropdown and simplifying the mobile start screen. Extended the round progress animation so it stays visible longer and can continue while the next image is already shown. Added small no-sound interaction feedback such as answer animations, panel flashes, and a ready pulse on the next button. Fixed stale feedback content so old round text does not linger after moving to the next round. Polished the dark mode with better contrast, deeper panel styling, and more consistent button states.
Devlog #20 This DL was mostly about cleaning up and tightening the project without changing its core. A big part of the work went into reorganizing the css so it is much easier to maintain. I also moved more of the repeated colors, borders, and shadow values into variables, which makes the system feel more consistent. On top of that, button states and status states were cleaned up so things like hover, disabled, correct, and wrong feel more unified across the game. The mobile version also got a proper polish pass while keeping the desktop version untouched. The start screen was tightened up so it uses space better, the logo and card proportions feel more balanced, and the Daily Mode button sits more naturally in the layout. Besides that, there was some general UI polish throughout the game. Answer feedback feels more intentional now, the HUD relies more on shared styling tokens, and the whole thing is internally a lot cleaner even though the overall look stays very close to what it was before. Thanks for the support from all of U
Devlog #21 This is a kinda long devlog so thanks to everyone who is really reding it all the way. This update was a bigger gameplay and polish pass focused on turning SpaceGuessr into a more complete and shippable version. New game mode and scoring changes Replaced the old Infinite mode with a new Blind Reveal mode because it’s more fun Added countdown support for Blind Reveal Reworked scoring so Blind Reveal starts at higher points and drops with each reveal step Added streak bonus scoring, so longer streaks now reward extra points Updated leaderboard handling so score-chasing modes save automatically after a run Gameplay and UX improvements Added confetti for correct answers (discourse.webflow.com) Added a stronger streak animation when a streak continues Added danger styling for the countdown when time is low (red) Improved answer feedback presentation and round transition Added subtle round motion polish plus small audio cues for hints, correct answers, wrong answers, streaks, and end-of-run results Menu and endscreen polish Added a help button in the main menu that opens a smooth animated help panel Added scoring explanations directly into the help panel Removed the visible dark/light mode toggle and kept the game in the default light theme Reworked the endscreen so score saving is more compact Removed the large manual “save your best run” panel and switched to automatic score saving when possible Added a run summary/final run text on the endscreen so the result feels more personal and less like raw stats only Cleaned up feedback so success toasts are gone and only errors appear as top toasts Leaderboard and save flow Added local-first score saving with global leaderboard sync afterward Improved fallback behavior when global leaderboard writes fail Simplified the save-name experience so the player is only asked for a leaderboard name when needed Improved leaderboard modal behavior in the menu Content expansion Added 30 new NASA image entries to the question pool ChatGPT helped research and pick these new images from the official NASA Image and Video Library Added matching answer sets, facts, and difficulty tags for the new entries New content includes objects and scenes like: Venus Io Deimos Mimas Tethys Hyperion Oberon Umbriel Titania Sun Helix Nebula Carina Nebula Trifid Nebula Flame Nebula Butterfly Nebula Triangulum Galaxy Pinwheel Galaxy Cartwheel Galaxy Centaurus A Sculptor Galaxy Antennae Galaxies M81 Galaxy M82 Galaxy Stephan Quintet Pillars of Creation Charon Nix Hydra Phoebe Olympus Mons Current state At this point the project feels much more release-ready than before, with the biggest remaining work being final balancing, QA across all modes, and a last pass on leaderboard edge cases.
Devlog #1.1 In the last GitHub commit, I cleaned up the game structure. I added Learn Mode , moved the mode settings into game-config.js , and moved the space questions into game-data.js . I also improved some animations, mobile styling, and Blind Reveal. In the newest commit, I updated the main menu with Casual and Special sections. Special mode now has a smooth background change with the new image (The Image is generated by AI). I also updated the README and added a few small CSS improvements. PS: Thanks to all of u. My last Ship was rated awesome. Thanks to everybody who played it and especially rated it. <3
Devlog #1.2 Today I expanded SpaceGuessr with selectable learn packs and improved the learning flow. I also added a much larger centralized content file with many new space questions, plus UI updates like new backgrounds, smoother image loading, and an end-of-session review for learn mode. The project now feels more polished, more scalable, and better suited for replayability. Main Goal was just making the code easier to understand and implementing the Feedback. You can try it now . I would love to here some more feedback. <3
Devlog #1.3 Today I polished the game UI again and cleaned up some smaller details. I improved the help menu, made the top progress bar more visible, and changed the end screen so the leaderboard does not show up immediately. I also adjusted the main menu layout a little so the background has more space and the screen feels cleaner. Nothing huge today, but the game feels nicer and more polished now. The Help Button is a bit weird but I will fix it later.
Devlog #1.4 Today I worked more on polishing SpaceGuessr and making the special modes feel better. The biggest change was adding Reverse Learn , it’s a mode where the clue shows up in the middle of the screen first and then you have to guess the answer. I also improved the popup for missed images, polished some UI details like panels, spacing, and animations, and updated the README so it matches the current version better. Overall the game just feels cleaner and more finished now. And fun fact: I hit the stardance limit with this change, I saw just now that I could only commit 10h max. But I squeezed everything into the 10h. I will fix some stuff later like the loading times of the modes.
Devlog #1.5 Added a small local best score system to the main menu. It now checks saved leaderboard data in localStorage and shows the best score for the currently selected mode in a subtle way under the mode description. I also made sure it updates automatically when switching modes and after saving a run, while Daily , Learn , and Reverse Learn show a muted status message instead of a score because they are not normal saved score modes.
Devlog #1.6 Today I added a small profile in the right bottom. You can see your best scores and more. Everything is safed in localStorage, so no Account or smth. like that is needed.- I had to find an elegant way to save all the stats in localStorage, but I think it turned out well. I will have more time in the following days cause summer break started yesterday.
Devlog #1.7 I added the recent Runs to the Profile Menu and redesigned it, because it didn’t looked special. I think it has a smooth animation now. When there are bugs it would be cool if you could tell me. <3
Ships:
SpaceGuessr is like GeoGuessr, but in space. Explore planets, galaxies, nebulae, and more using real images provided by the NASA API. Guess where each image was taken or what it shows, compete for high scores, and climb the global leaderboard powered by Supabase.
SpaceGuessr is basically my version of “GeoGuessr, but in space” — a browser game where you guess planets, moons, nebulae, galaxies, and other space objects from real NASA-based images. At first, I thought this would just be a simple guessing game, but it quickly turned into a much bigger project. I kept adding more modes, more polish, better UI, scoring, animations, and content until it started to feel like an actual game instead of just a small prototype. Right now, SpaceGuessr has multiple game modes like Quick, Classic, Timed, Daily, Infinite, and Blind Reveal. Blind Reveal is one of my favorite parts: the image slowly uncovers itself while your possible score drops over time, so you have to decide whether to guess early or wait for more information. I also added a full scoring system with streak bonuses, animated feedback, end screens, keyboard controls, responsive design, leaderboard support, local fallback saving, confetti, reveal effects, round transitions, and a lot of small game-feel details. I spent a lot of time on these small things because they make the game feel much more satisfying to play. A big part of the work was also the content. The game uses a curated pool of 70+ NASA-based images, with correct answers, wrong answers, facts, and difficulty balancing. I kept improving the image pool so the game doesn’t feel repetitive, and I added logic so the same image won’t repeat during one run. Technically, the whole project is built with plain HTML, CSS, and JavaScript, without using a big framework. That meant a lot of the animations, UI states, game logic, scoring, and mode handling had to be built manually. I also added Supabase for global leaderboards and deployed everything with GitHub Pages so anyone can just open it and play instantly. I’m really proud of SpaceGuessr because it started as a simple idea and became one of my most complete projects so far. It’s playable, replayable, polished, and actually fun to come back to. I put a lot of time into making it feel smooth, finished, and cared for — and I think that shows in the final game. Thanks to everyone who is supporting this project <3
SpaceGuessr is a small browser game where you have to guess real space objects from NASA images. It works kinda like GeoGuessr, but instead of places on Earth you get planets, moons, nebulae, galaxies and other space stuff. The game has different modes like Classic, Timed, Blind Reveal, Learn and Reverse Learn, so you can either play for score or just practice. Technically the project is built with plain HTML, CSS and JavaScript, without any big framework. index.html contains the screens and buttons, style.css handles the layout, animations and responsive design, and script.js contains the main game logic like loading questions, checking answers, calculating score, streaks, timers, hints, leaderboards and local profile stats. The questions are stored in game-data.js, while mode settings like rounds, hints and timers are stored in game-config.js. The game also uses localStorage to save local stats, recent runs and fallback scores in the browser. For online scores it can use Supabase, but if that does not work the game still runs normally. Overall, SpaceGuessr is a space guessing game made with simple web technologys, real NASA images and a few extra features....
|
1792831931.0014188
|
1792918331.0014188
|
|
20780
|
Arivu by @Ak_45 | Stardance
|
|
3
|
33.9
|
111
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T12:54:24Z", "hours": 3.0, "multiplier": 15.68, "payout": 24, "blessing": "neutral", "text": "Just added a bunch more Malayalam across the site and finally got the career guide PDF in. Figured people should be able to save something and actually walk away with it instead of just scrolling through once. Also cleaned up the readability and squeezed out some performance while I was in there. Honestly the Malayalam translations were the hard part. A lot of career/science terms just don’t have a clean Malayalam equivalent, so it wasn’t a translate-and-done job; it took a lot of rewriting until it sounded like something a person would actually say instead of a textbook. Still not 100% happy with a couple of sections, but it’s way better than before. What I’m most happy with is that Arivu finally feels bilingual instead of just having a language toggle that doesn’t mean much. That was the whole point of building this. If you’re testing it, take a look at the translations between Malayalam and English, download the career guide PDF, and let me know if anything seems sluggish.", "repo": "https://github.com/Akshithsurya/Arivu", "demo": "https://arivu-pallakad.netlify.app/"}, {"ship_num": 2, "ts": "2026-07-02T12:07:54Z", "hours": 5.0, "multiplier": 17.87, "payout": 83, "blessing": "neutral", "text": "I have reviewed all of the errors, made the project better, added Malayalam as a new language, and added more career pathways. The UI was inspired by old mobile notes apps, and we have done a lot of research for this version. I have done a lot of work for this passion project :)", "repo": "https://github.com/Akshithsurya/Arivu", "demo": "https://arivu-pallakad.netlify.app/"}, {"ship_num": 3, "ts": "2026-06-23T12:14:52Z", "hours": 1.0, "multiplier": 7.24, "payout": 4, "blessing": "neutral", "text": "Arivu (അറിവ്) is a bilingual science career literacy platform for +2 students in Palakkad, Kerala — built in Malayalam and English because the language itself is the point. Most students here are told there are two paths in science: IIT-JEE or NEET. There are over fifty. We mapped them. The hardest part wasn’t the tech — it’s a single index.html, deliberately. The hardest part was writing career descriptions in Malayalam that didn’t read like translated English, and building a heritage module that treats the Kerala School of Mathematics (c. 1300–1600 CE) as the living tradition it actually is, not a footnote. Mādhava of Saṅgamagrāma derived the series for π 300 years before Leibniz. That’s rendered live in KaTeX on the site. What I’m most proud of: the Exam Calendar PDF — 13 major STEM entrance exams, 8 pages, designed to be printed and pinned on a classroom wall. It’s already being used in schools. To test it: go to arivu-pallakad.netlify.app, try the Career Matcher (pick your subjects and interests), explore the Pathways Map, and download the Exam Calendar. The site works on a ₹6,000 phone on 2G — that was a hard constraint, not an afterthought.", "repo": "https://github.com/Akshithsurya/Arivu", "demo": "https://arivu-pallakad.netlify.app/"}]...
|
[{"post_id": 49522, "ts": "202 [{"post_id": 49522, "ts": "2026-08-18T12:12:31Z", "hours": 8.1403, "text": "Made the entire thing work on an old android and made it have a way larfer database"}, {"post_id": 46453, "ts": "2026-08-13T17:49:18Z", "hours": 7.6086, "text": "making all of the resources have a well-defined area, making the translation better, adding more resources, and making the quiz better. Tell me, should I give the UI a make over?"}, {"post_id": 45691, "ts": "2026-08-12T10:45:14Z", "hours": 9.1556, "text": "I have added the ScholarShip database and college comparison tool after extensive research and added better translation"}, {"post_id": 28307, "ts": "2026-07-14T14:08:04Z", "hours": 3.1167, "text": "Just done adding career guide pdf and system mode detector :D"}, {"post_id": 16330, "ts": "2026-06-26T15:54:50Z", "hours": 0.6942, "text": "More liveliness and more features for my educational & career guidance project: - Arivu"}, {"post_id": 16149, "ts": "2026-06-26T07:40:06Z", "hours": 2.3622, "text": "adding comparisons and better ui elements to Arivu"}, {"post_id": 15611, "ts": "2026-06-25T11:55:08Z", "hours": 1.7111, "text": "Trying to add dark mode to my project with comparison feature"}, {"post_id": 14303, "ts": "2026-06-23T11:42:28Z", "hours": 0.3956, "text": "Arivu calendar has been updated for all students."}, {"post_id": 13666, "ts": "2026-06-22T12:54:03Z", "hours": 0.2525, "text": "Editing Arivu a project made by students for students"}]...
|
Title: Arivu by @Ak_45 | Stardance
Devlogs:
Editi Title: Arivu by @Ak_45 | Stardance
Devlogs:
Editing Arivu a project made by students for students
Arivu calendar has been updated for all students.
Trying to add dark mode to my project with comparison feature
adding comparisons and better ui elements to Arivu
More liveliness and more features for my educational & career guidance project: - Arivu
Just done adding career guide pdf and system mode detector :D
I have added the ScholarShip database and college comparison tool after extensive research and added better translation
making all of the resources have a well-defined area, making the translation better, adding more resources, and making the quiz better. Tell me, should I give the UI a make over?
Made the entire thing work on an old android and made it have a way larfer database
Ships:
Arivu (അറിവ്) is a bilingual science career literacy platform for +2 students in Palakkad, Kerala — built in Malayalam and English because the language itself is the point. Most students here are told there are two paths in science: IIT-JEE or NEET. There are over fifty. We mapped them. The hardest part wasn’t the tech — it’s a single index.html, deliberately. The hardest part was writing career descriptions in Malayalam that didn’t read like translated English, and building a heritage module that treats the Kerala School of Mathematics (c. 1300–1600 CE) as the living tradition it actually is, not a footnote. Mādhava of Saṅgamagrāma derived the series for π 300 years before Leibniz. That’s rendered live in KaTeX on the site. What I’m most proud of: the Exam Calendar PDF — 13 major STEM entrance exams, 8 pages, designed to be printed and pinned on a classroom wall. It’s already being used in schools. To test it: go to arivu-pallakad.netlify.app, try the Career Matcher (pick your subjects and interests), explore the Pathways Map, and download the Exam Calendar. The site works on a ₹6,000 phone on 2G — that was a hard constraint, not an afterthought.
I have reviewed all of the errors, made the project better, added Malayalam as a new language, and added more career pathways. The UI was inspired by old mobile notes apps, and we have done a lot of research for this version. I have done a lot of work for this passion project :)
Just added a bunch more Malayalam across the site and finally got the career guide PDF in. Figured people should be able to save something and actually walk away with it instead of just scrolling through once. Also cleaned up the readability and squeezed out some performance while I was in there. Honestly the Malayalam translations were the hard part. A lot of career/science terms just don’t have a clean Malayalam equivalent, so it wasn’t a translate-and-done job; it took a lot of rewriting until it sounded like something a person would actually say instead of a textbook. Still not 100% happy with a couple of sections, but it’s way better than before. What I’m most happy with is that Arivu finally feels bilingual instead of just having a language toggle that doesn’t mean much. That was the whole point of building this. If you’re testing it, take a look at the translations between Malayalam and English, download the career guide PDF, and let me know if anything seems sluggish....
|
1792824620.2116873
|
1792911020.2116873
|
|
21375
|
STANDTall by @akshay369 | Stardance
|
akshay369
|
3
|
7.0
|
37
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T01:01:00Z", "hours": 2.0, "multiplier": 6.33, "payout": 5, "blessing": "neutral", "text": "I built StandTall, a lightweight system tray utility designed for desk workers to encourage regular movement and help prevent back pain during long working hours. So try this and StandTall", "repo": "https://github.com/akshaykpillai369-max/StandTall", "demo": "https://github.com/akshaykpillai369-max/StandTall/releases/tag/v4.0"}, {"ship_num": 2, "ts": "2026-07-06T13:36:46Z", "hours": 2.0, "multiplier": 3.17, "payout": 5, "blessing": "neutral", "text": "I made the app modern, added more features so it is worth check in out . So try it and StandTall.", "repo": "https://github.com/akshaykpillai369-max/StandTall", "demo": "https://github.com/akshaykpillai369-max/StandTall/releases/tag/v4.0"}, {"ship_num": 3, "ts": "2026-06-29T10:05:50Z", "hours": 3.0, "multiplier": 9.57, "payout": 27, "blessing": "neutral", "text": "I made an application for those who sit more, and it is challenging to look for bugs and test the app", "repo": "https://github.com/akshaykpillai369-max/StandTall", "demo": "https://github.com/akshaykpillai369-max/StandTall/releases/tag/v4.0"}]...
|
[{"post_id": 73372, "ts": "202 [{"post_id": 73372, "ts": "2026-09-25T00:54:27Z", "hours": 1.5414, "text": "Version V4 is live. The major feature in this version is Cursor Inactivity Pause — automatically pauses the timer after five minutes of cursor inactivity and resumes when you move the cursor again. So guys, Try it and always StandTall"}, {"post_id": 23293, "ts": "2026-07-06T05:03:27Z", "hours": 0.7544, "text": "Previously, there was a bug of multiple instances running, now it is solved and new features have been added NEW FEATURES 1, Break Nudges — Full-screen overlay during eye breaks with countdown + Dismiss button. Toggle on/off in Settings. 2, Statistics Dashboard — Tracks stands and eye breaks per day. View today’s totals, all-time totals, and a 7-day bar chart. 3, Tray Tooltip — Hover the tray icon to see remaining time until next stand and eye break (Stand↑ Xm Eye Ym). 4, Auto-Update Check — “Check for Updates” button in Settings queries GitHub releases and notifies you when a newer version is available."}, {"post_id": 22226, "ts": "2026-07-04T16:18:09Z", "hours": 0.5997, "text": "StandTall Pro is now available on Windows, macOS, and Linux! This release features a completely rewritten cross-platform codebase, near-zero startup impact, a first-launch setup window, and standalone packages for all platforms. What’s new 1, 🌍 Cross-platform — works on Windows, macOS, and Linux 2, 🚀 Near-zero startup impact — CustomTkinter now loads only when you open Settings 3, 🪟 First-launch window — settings appear automatically on first run so new users can configure the app 4, 🔒 Single-instance lock — prevents duplicate app instances (works on all OS)"}, {"post_id": 20778, "ts": "2026-07-02T13:59:09Z", "hours": 0.3683, "text": "How to install it correctly 1, Download the zip file from the assets 2, Unzip it 3, Open the exe file 4, It does not show any windows at first; look at the system tray and right-click the application, then select Settings 5, Done. Now you can adjust the remainder"}, {"post_id": 18229, "ts": "2026-06-29T09:43:42Z", "hours": 2.8225, "text": "StandTall Pro is a health-focused Windows desktop utility tailored for desk-bound professionals. Operating quietly from the system tray, it helps mitigate back pain and digital eye strain by prompting users to take physical standing breaks and practice the 20-20-20 rule (looking at an object 20 feet away for 20 seconds every 20 minutes)."}]...
|
Title: STANDTall by @akshay369 | Stardance
Devlog Title: STANDTall by @akshay369 | Stardance
Devlogs:
StandTall Pro is a health-focused Windows desktop utility tailored for desk-bound professionals. Operating quietly from the system tray, it helps mitigate back pain and digital eye strain by prompting users to take physical standing breaks and practice the 20-20-20 rule (looking at an object 20 feet away for 20 seconds every 20 minutes).
How to install it correctly 1, Download the zip file from the assets 2, Unzip it 3, Open the exe file 4, It does not show any windows at first; look at the system tray and right-click the application, then select Settings 5, Done. Now you can adjust the remainder
StandTall Pro is now available on Windows, macOS, and Linux! This release features a completely rewritten cross-platform codebase, near-zero startup impact, a first-launch setup window, and standalone packages for all platforms. What’s new 1, 🌍 Cross-platform — works on Windows, macOS, and Linux 2, 🚀 Near-zero startup impact — CustomTkinter now loads only when you open Settings 3, 🪟 First-launch window — settings appear automatically on first run so new users can configure the app 4, 🔒 Single-instance lock — prevents duplicate app instances (works on all OS)
Previously, there was a bug of multiple instances running, now it is solved and new features have been added NEW FEATURES 1, Break Nudges — Full-screen overlay during eye breaks with countdown + Dismiss button. Toggle on/off in Settings. 2, Statistics Dashboard — Tracks stands and eye breaks per day. View today’s totals, all-time totals, and a 7-day bar chart. 3, Tray Tooltip — Hover the tray icon to see remaining time until next stand and eye break (Stand↑ Xm Eye Ym). 4, Auto-Update Check — “Check for Updates” button in Settings queries GitHub releases and notifies you when a newer version is available.
Version V4 is live. The major feature in this version is Cursor Inactivity Pause — automatically pauses the timer after five minutes of cursor inactivity and resumes when you move the cursor again. So guys, Try it and always StandTall
Ships:
I made an application for those who sit more, and it is challenging to look for bugs and test the app
I made the app modern, added more features so it is worth check in out . So try it and StandTall.
I built StandTall, a lightweight system tray utility designed for desk workers to encourage regular movement and help prevent back pain during long working hours. So try this and StandTall...
|
1792850225.571659
|
1792936625.571659
|
|
21478
|
BodyAtlas by @yashasvib | Stardance
|
yashasvib
|
3
|
23.0
|
302
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T10:09:19Z", "hours": 1.0, "multiplier": 9.85, "payout": 12, "blessing": "neutral", "text": "hi guys !! (read the other ships before to know but the project) this is going to be short cuz i only wanted to increase the data base and its quite easy …but I added Only very very few question because i have EXAMS !! but its okay ill manage in future .. so i guess that’s all !! BYE !!", "repo": "https://github.com/yashasvi-2012-star/BodyAtlas", "demo": "https://bodyatlas-omega.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-01T08:22:47Z", "hours": 13.0, "multiplier": 14.35, "payout": 185, "blessing": "neutral", "text": "HEY !!! this is a webs.. that lets you explore human body and it is called BodyAtlas .when opened it first land on a landing page where date , day, time are displayed and there is also a section about this project . then it takes you to main page where there is a main screen with a left , right panel , dock at bottom . in the main screen initially i thought to add maybe like a 3d body which can rotate and do cool stuff but there were no free options so i had to change my plan and do a 2d one . tho I’m not that disappointed how good 2-d also looks !!! RIGHT? . i have also added spots (HOTSPOTS ) where when you click opens there information in the right side located info panel witch have a inbuilt the database for source . the bottom dock have options for organ which you can visit . the left panel is the most important because it have two part the medicines hub and body system . when you select a body system from the given option the respective organs glow telling you about the organs involved . in the medicine hub there are two options the quiz (YAS !! actually working quiz )and a how does it work ? option when opened takes you to a screen where you can explore the various things like diseases , medicines , medical tests, surgeries , body processes and instrument using animated video which are taken frame Youtube and the credits goes to their respective owners . i have also added a challenge mode where you can select difficulty and topic and it will give you questions , for each answer you gain points and for each wrong answer your points are deducted this project has been a important part of my whole stardance journey hope you like it !!! BYE !!!", "repo": "https://github.com/yashasvi-2012-star/BodyAtlas", "demo": "https://bodyatlas-omega.vercel.app/"}, {"ship_num": 3, "ts": "2026-06-25T12:38:05Z", "hours": 9.0, "multiplier": 12.05, "payout": 105, "blessing": "neutral", "text": "HEY !!! this is a webs.. that lets you explore human body and it is called BodyAtlas .when opened it first land on a landing page where date , day, time are displayed and there is also a section about this project . then it takes you to main page where there is a main screen with a left , right panel , dock at bottom . in the main screen initially i thought to add maybe like a 3d body which can rotate and do cool stuff but there were no free options so i had to change my plan and do a 2d one . tho I’m not that disappointed how good 2-d also looks !!! RIGHT? . i have also added spots (HOTSPOTS ) where when you click opens there information in the right side located info panel witch have a inbuilt the database for source . the bottom dock have options for organ which you can visit . the left panel is the most important because it have two part the medicines hub and body system . when you select a body system from the given option the respective organs glow telling you about the organs involved . in the medicine hub there are two options the quiz (YAS !! actually working quiz )and a how does it work ? option when opened takes you to a screen where you can explore the various things like diseases , medicines , medical tests, surgeries , body processes and instrument using animated video which are taken frame Youtube and the credits goes to their respective owners . this project has been a important part of my whole stardance journey hope you like it !!! BYE !!!", "repo": "https://github.com/yashasvi-2012-star/BodyAtlas", "demo": "https://bodyatlas-omega.vercel.app/"}]...
|
[{"post_id": 27049, "ts": "202 [{"post_id": 27049, "ts": "2026-07-12T07:38:18Z", "hours": 1.1708, "text": "HI GUYS !! i noticed or you can say realized that i totally forgot to expand my data base and shipped it with less questions so if i choose specific field from the challenge mode it display either one or two question because no questions related to those mode will be found within the database ."}, {"post_id": 19859, "ts": "2026-07-01T08:19:52Z", "hours": 0.3072, "text": "hey !!! this time i did some debugging , changed UI ,and wrote the final README . this is a short update !! bye !!"}, {"post_id": 19831, "ts": "2026-07-01T06:54:08Z", "hours": 2.06, "text": "hi guys !! this time, i just try to fix all the error and bugs as i could and not only the one thought who create a problem those also which were found by my fellow friends !!"}, {"post_id": 18267, "ts": "2026-06-29T11:03:41Z", "hours": 3.1489, "text": "hey guys I just PURIFIED the competitive mode and it took a lot of time and I also added the popups for .. u can see below I’m sleepy , ’kay bye !!"}, {"post_id": 17463, "ts": "2026-06-28T07:59:21Z", "hours": 4.0928, "text": "hey !!! I changed all the wallpapers turn the body transparent with no background and re did all the logic part of challenge mode and today was a easy but time consuming day !! I’m happy it’s coming alive .. BYE !!"}, {"post_id": 16782, "ts": "2026-06-27T07:50:13Z", "hours": 0.9897, "text": "heyy guys this is an update on body atlas and from now on less updates will be posted . ok so I added other screen and and arranged hotspots using percen rather than px so it stays stable regardless of the condition . I have made js part also which controls the question appearing and timer and points and all the interface is basic and I will upgrade it soon . and I want a opinion from you all , should I add this game in the medicines hub or at the front screen top bar or any other place ?"}, {"post_id": 16376, "ts": "2026-06-26T17:25:07Z", "hours": 1.5144, "text": "HEY !!! I just thought why not keep BodyAtlas going ? so here I am with just another super duper starry feature … drum rolls please …… its a competitive mode where you can chose the level and topic you wanna get it on and the press ‘lets go’ button and then you see a brandnew page with question .. but what makes it diffrent from normal quiz section present in just the main BodyAtlas .. its that it have a timer and you get points for each correct answers and it also takes away some points for wrong answer and when you collect a specific number of point you unlock access to special animated video of how does it work !! ad you can power up your level the more u play .. it a whole diffrent animal (game)…..built inside my webs.. tho its still ongoing I will try my best to make it more interactive and …sugar honey ice tea….BYE !!!"}, {"post_id": 15789, "ts": "2026-06-25T17:45:06Z", "hours": 0.8197, "text": "hi everybody , I shipped my project and just got the review saying that my project looks too much AI . is it so ? I don’t think so cause I did several things on my own and yes I agree I took help of AI in many places of my project even for debugging and all those errors I could not understand . but the reviewer also said I should add features of my own ! I did everything ! each and feature is my own ! what do you think , that AI can up with those ideas , it was me who thought of each and everything from the theme to the content, from the howdoesitwork? to the quiz section . I am not writting this to go against the reviewer but i wanna have honest opinions on my project guys !!"}, {"post_id": 15619, "ts": "2026-06-25T12:24:18Z", "hours": 2.8192, "text": "HEYY !!! I CAN FINALLY SAY NOW MY PROJECT IS COMPLETED !!! I AM SO HAPPY IT TURNED OUT BETTER THAN HOW I IMAGINED IT !! AND NOW IT EVEN HAVE ANIMATED VIDEO FOR CONCEPT !! I GUESS NOT ITS TIME FOR ME TO SIGN OFF !!!"}, {"post_id": 15496, "ts": "2026-06-25T05:56:45Z", "hours": 0.8694, "text": "HEY !!! this is the new update on BodyAtlas . i have put the videos for better explanation in bodyatlas’s how does it work , i took all the video from youtube so the credit goes to respective owners and i think i just completed my project and i’m so HAPPPPYY i just turned out how i imagened it and maybee even better !!!! BYE !!!"}, {"post_id": 14924, "ts": "2026-06-24T07:25:24Z", "hours": 0.3047, "text": "Hey !! this is the maybee sixth update on body atlas and i have added the front page for ’how it works ’ . this is the step from where the main haed part begins , and i will make sure to put double efforts here !!"}, {"post_id": 14921, "ts": "2026-06-24T07:01:20Z", "hours": 0.6619, "text": "hey guyss this is gonna be short but i did add the quiz section in the BodyAtlas and again changed the medical hub from mediceine and diesease explorar to how it works . i added the another page and all which i will be sharing in other devlog !! BYE !!"}, {"post_id": 14456, "ts": "2026-06-23T16:12:26Z", "hours": 0.5658, "text": "heyyy !! this the fifth update on my webs.. BodyAtlas . so i did completed all the data feeding and if i really say i took help of ai to collect all the data it would centuries . and i did a did of editind in interface , i changed the quickbar to medical hub . next i’ll be working on quiz system and this project is really testing my patience !! but i will really be happy when this project will be completed !! BYE !!!<3"}, {"post_id": 14234, "ts": "2026-06-23T07:45:00Z", "hours": 1.1094, "text": "HEY !!!!! this is my fourth update on BodyAtlas and today i have added the database !! HURRAY !! which means that if you click on a hotspot it will show lot of information about that particular thing in the info panel . i had to do it manually so feeding all the data for only 4 organs (which i did ) took 1 hours and there are approx 11-12 more left so don’t know how much time it will take and i have also reduced the side of hotspot cuz it was looking messy and they are still left to be positioned . sope that’s all i did in this session and next update will come in the evening !!BYE !!! i hope i get to see awesome projects from you all !!!"}, {"post_id": 13813, "ts": "2026-06-22T17:09:43Z", "hours": 1.8347, "text": "HEYY!!!!!this is the third update on BodyAtlas and i’m so sleepy right now !! ‘kay so this time, i have added the human body . initially i thought to add maybe like a 3d body which can rotate and do cool stuff but there were no free options so i had to change my plan and do a 2d one . tho i’m not that dissappointed how good 2-d also looks !!! RIGHT? . i have also added spots (HOTSPOTS )(its looking really messy !!) where when you click opens there information in the right side located info panel i’m currently working on feeding the database(the example in the screen shot is short i will surely make it more precise !!) and its really hard to manage all the stuff at the same time . i don’t want to bore you with my talking so that’s all !!B’BYE !!!"}, {"post_id": 12958, "ts": "2026-06-21T06:35:47Z", "hours": 0.4228, "text": "heyyy!!!!this is the second update of bodyatlas and i have added the first page . this is the landing page of bodyatlas . i did try making it kinda simple and easy tho !! i am still trying hard to make it simple , usable , and perfect with all majar info !!so thats all for today !! bye !!!"}, {"post_id": 11153, "ts": "2026-06-18T07:27:24Z", "hours": 0.3128, "text": "hey !!! i have started my new project and it is called BodyAtlas here you can see human bodies in a 3d ways and interact with them and you will see exactly how human body work , how a diseases ACTUALLY effect our body and how a medicine ACTUALLY treats us !!!!. i have completed the first inter face and basic way how my new project will look and there is is frame in the middle section where i am just testing how 3d bodies would behave . BYEEE !!! and i will make sure to keep u all updated !!!"}]...
|
Title: BodyAtlas by @yashasvib | Stardance
Devlog Title: BodyAtlas by @yashasvib | Stardance
Devlogs:
hey !!! i have started my new project and it is called BodyAtlas here you can see human bodies in a 3d ways and interact with them and you will see exactly how human body work , how a diseases ACTUALLY effect our body and how a medicine ACTUALLY treats us !!!!. i have completed the first inter face and basic way how my new project will look and there is is frame in the middle section where i am just testing how 3d bodies would behave . BYEEE !!! and i will make sure to keep u all updated !!!
heyyy!!!!this is the second update of bodyatlas and i have added the first page . this is the landing page of bodyatlas . i did try making it kinda simple and easy tho !! i am still trying hard to make it simple , usable , and perfect with all majar info !!so thats all for today !! bye !!!
HEYY!!!!!this is the third update on BodyAtlas and i’m so sleepy right now !! ‘kay so this time, i have added the human body . initially i thought to add maybe like a 3d body which can rotate and do cool stuff but there were no free options so i had to change my plan and do a 2d one . tho i’m not that dissappointed how good 2-d also looks !!! RIGHT? . i have also added spots (HOTSPOTS )(its looking really messy !!) where when you click opens there information in the right side located info panel i’m currently working on feeding the database(the example in the screen shot is short i will surely make it more precise !!) and its really hard to manage all the stuff at the same time . i don’t want to bore you with my talking so that’s all !!B’BYE !!!
HEY !!!!! this is my fourth update on BodyAtlas and today i have added the database !! HURRAY !! which means that if you click on a hotspot it will show lot of information about that particular thing in the info panel . i had to do it manually so feeding all the data for only 4 organs (which i did ) took 1 hours and there are approx 11-12 more left so don’t know how much time it will take and i have also reduced the side of hotspot cuz it was looking messy and they are still left to be positioned . sope that’s all i did in this session and next update will come in the evening !!BYE !!! i hope i get to see awesome projects from you all !!!
heyyy !! this the fifth update on my webs.. BodyAtlas . so i did completed all the data feeding and if i really say i took help of ai to collect all the data it would centuries . and i did a did of editind in interface , i changed the quickbar to medical hub . next i’ll be working on quiz system and this project is really testing my patience !! but i will really be happy when this project will be completed !! BYE !!!<3
hey guyss this is gonna be short but i did add the quiz section in the BodyAtlas and again changed the medical hub from mediceine and diesease explorar to how it works . i added the another page and all which i will be sharing in other devlog !! BYE !!
Hey !! this is the maybee sixth update on body atlas and i have added the front page for ’how it works ’ . this is the step from where the main haed part begins , and i will make sure to put double efforts here !!
HEY !!! this is the new update on BodyAtlas . i have put the videos for better explanation in bodyatlas’s how does it work , i took all the video from youtube so the credit goes to respective owners and i think i just completed my project and i’m so HAPPPPYY i just turned out how i imagened it and maybee even better !!!! BYE !!!
HEYY !!! I CAN FINALLY SAY NOW MY PROJECT IS COMPLETED !!! I AM SO HAPPY IT TURNED OUT BETTER THAN HOW I IMAGINED IT !! AND NOW IT EVEN HAVE ANIMATED VIDEO FOR CONCEPT !! I GUESS NOT ITS TIME FOR ME TO SIGN OFF !!!
hi everybody , I shipped my project and just got the review saying that my project looks too much AI . is it so ? I don’t think so cause I did several things on my own and yes I agree I took help of AI in many places of my project even for debugging and all those errors I could not understand . but the reviewer also said I should add features of my own ! I did everything ! each and feature is my own ! what do you think , that AI can up with those ideas , it was me who thought of each and everything from the theme to the content, from the howdoesitwork? to the quiz section . I am not writting this to go against the reviewer but i wanna have honest opinions on my project guys !!
HEY !!! I just thought why not keep BodyAtlas going ? so here I am with just another super duper starry feature … drum rolls please …… its a competitive mode where you can chose the level and topic you wanna get it on and the press ‘lets go’ button and then you see a brandnew page with question .. but what makes it diffrent from normal quiz section present in just the main BodyAtlas .. its that it have a timer and you get points for each correct answers and it also takes away some points for wrong answer and when you collect a specific number of point you unlock access to special animated video of how does it work !! ad you can power up your level the more u play .. it a whole diffrent animal (game)…..built inside my webs.. tho its still ongoing I will try my best to make it more interactive and …sugar honey ice tea….BYE !!!
heyy guys this is an update on body atlas and from now on less updates will be posted . ok so I added other screen and and arranged hotspots using percen rather than px so it stays stable regardless of the condition . I have made js part also which controls the question appearing and timer and points and all the interface is basic and I will upgrade it soon . and I want a opinion from you all , should I add this game in the medicines hub or at the front screen top bar or any other place ?
hey !!! I changed all the wallpapers turn the body transparent with no background and re did all the logic part of challenge mode and today was a easy but time consuming day !! I’m happy it’s coming alive .. BYE !!
hey guys I just PURIFIED the competitive mode and it took a lot of time and I also added the popups for .. u can see below I’m sleepy , ’kay bye !!
hi guys !! this time, i just try to fix all the error and bugs as i could and not only the one thought who create a problem those also which were found by my fellow friends !!
hey !!! this time i did some debugging , changed UI ,and wrote the final README . this is a short update !! bye !!
HI GUYS !! i noticed or you can say realized that i totally forgot to expand my data base and shipped it with less questions so if i choose specific field from the challenge mode it display either one or two question because no questions related to those mode will be found within the database .
Ships:
HEY !!! this is a webs.. that lets you explore human body and it is called BodyAtlas .when opened it first land on a landing page where date , day, time are displayed and there is also a section about this project . then it takes you to main page where there is a main screen with a left , right panel , dock at bottom . in the main screen initially i thought to add maybe like a 3d body which can rotate and do cool stuff but there were no free options so i had to change my plan and do a 2d one . tho I’m not that disappointed how good 2-d also looks !!! RIGHT? . i have also added spots (HOTSPOTS ) where when you click opens there information in the right side located info panel witch have a inbuilt the database for source . the bottom dock have options for organ which you can visit . the left panel is the most important because it have two part the medicines hub and body system . when you select a body system from the given option the respective organs glow telling you about the organs involved . in the medicine hub there are two options the quiz (YAS !! actually working quiz )and a how does it work ? option when opened takes you to a screen where you can explore the various things like diseases , medicines , medical tests, surgeries , body processes and instrument using animated video which are taken frame Youtube and the credits goes to their respective owners . this project has been a important part of my whole stardance journey hope you like it !!! BYE !!!
HEY !!! this is a webs.. that lets you explore human body and it is called BodyAtlas .when opened it first land on a landing page where date , day, time are displayed and there is also a section about this project . then it takes you to main page where there is a main screen with a left , right panel , dock at bottom . in the main screen initially i thought to add maybe like a 3d body which can rotate and do cool stuff but there were no free options so i had to change my plan and do a 2d one . tho I’m not that disappointed how good 2-d also looks !!! RIGHT? . i have also added spots (HOTSPOTS ) where when you click opens there information in the right side located info panel witch have a inbuilt the database for source . the bottom dock have options for organ which you can visit . the left panel is the most important because it have two part the medicines hub and body system . when you select a body system from the given option the respective organs glow telling you about the organs involved . in the medicine hub there are two options the quiz (YAS !! actually working quiz )and a how does it work ? option when opened takes you to a screen where you can explore the various things like diseases , medicines , medical tests, surgeries , body processes and instrument using animated video which are taken frame Youtube and the credits goes to their respective owners . i have also added a challenge mode where you can select difficulty and topic and it will give you questions , for each answer you gain points and for each wrong answer your points are deducted this project has been a important part of my whole stardance journey hope you like it !!! BYE !!!
hi guys !! (read the other ships before to know but the project) this is going to be short cuz i only wanted to increase the data base and its quite easy …but I added Only very very few question because i have EXAMS !! but its okay ill manage in future .. so i guess that’s all !! BYE !!...
|
1792842517.1186712
|
1792928917.1186712
|
|
21678
|
PyDesk by @Gooderswills | Stardance
|
Gooderswills
|
3
|
13.0
|
52
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T21:38:04Z", "hours": 7.0, "multiplier": 4.22, "payout": 28, "blessing": "neutral", "text": "This has been a massive improvement to PyDesk, I have added an itch.io page, a website, many dev features (contributing guide, ticket stats) and a whole load of minor improvements, bug fixes and enhancements, check the github commit history for the full details or check the last devlogs, please look at the website and contributing guide if you want to help.", "repo": "https://github.com/Gooderswills/PyDesk", "demo": "https://github.com/Gooderswills/PyDesk/releases"}, {"ship_num": 2, "ts": "2026-09-13T17:21:08Z", "hours": 3.0, "multiplier": 4.32, "payout": 15, "blessing": "neutral", "text": "I have spent a lot of time over the past days/maybe a week adding features and enhancing the overall game. Some of the stand out features are adding saving and loading of the game, clearing the terminal so it looks more organised, enhancing the readme, adding lots more tickets (around 20 more) and fixing varius bugs. To see the full list of updates checkout the github commits or just look at my previous devlogs. In summary I have enhanced the game and added more features so it is better to play. If you are going to play it then go to the github releases (or click try project below) and download the latest release zip, then extract it and run the exe. It will make a json file containing your save. Hope you enjoy the latest updates!", "repo": "https://github.com/Gooderswills/PyDesk", "demo": "https://github.com/Gooderswills/PyDesk/releases"}, {"ship_num": 3, "ts": "2026-08-01T21:06:38Z", "hours": 3.0, "multiplier": 2.73, "payout": 9, "blessing": "neutral", "text": "This is the initial release of PyDesk, a text based IT simulator, at the moment you can play through one day in the game with a variety of tickets. Hope you enjoy the game. To play go to the github release and follow the instructions there.", "repo": "https://github.com/Gooderswills/PyDesk", "demo": "https://github.com/Gooderswills/PyDesk/releases"}]...
|
[{"post_id": 75374, "ts": "202 [{"post_id": 75374, "ts": "2026-09-29T21:32:32Z", "hours": 3.2956, "text": "I have been back at it again, I have added a contributing guide so now you can help out with PyDesk , I added a stats file for developers/me (with the help of gemini), fixed minor bugs/typos, implemented day logic that saves,added over 15 new tickets so now over 45 tickets in the game. Now one of the biggest updated PyDesk now has a website and an itch.io Store page. On the website you can try out a ticket in the game and many more minor improvements/fixes."}, {"post_id": 72769, "ts": "2026-09-23T18:24:22Z", "hours": 1.4369, "text": "I have been working hard again, here is what I have done. I have added 4 more tickets and added a stats.py file to display how many tickets there are and more! (Gemini helped with this) I also updated the python to exe guide, updated the tickets to display their ID now in the game (major oversight by me) and I have added a contributing guide so if you want to help me make this game then please do! contributing.md"}, {"post_id": 70716, "ts": "2026-09-19T17:17:05Z", "hours": 1.9847, "text": "Over the past couple of days I have been busy, I have added 5 new tickets to the database, fixed a few minor bugs and also attempted to get PyDesk running in the web, this doesn’t work as of now, but I have done something better, we are now on itch.io! https://gooderswills.itch.io/pydesk Please check it out and let me know what you think, see you soon for another devlog coming up soon!"}, {"post_id": 67513, "ts": "2026-09-13T17:08:18Z", "hours": 0.3108, "text": "I have added a guide on how to convert a python file to an exe for anyone that wants to read it, it is also for me so I don’t forget how to do it later lol"}, {"post_id": 67499, "ts": "2026-09-13T16:46:22Z", "hours": 2.1683, "text": "I have been doing a lot over the past couple days/ maybe a week. I have added 17 new tickets to the database, I fixed a case sensitive bug, added an end/close message to the game, updated the clear terminal command because the old one was outdated, I fixed typos in some of the tickets (hopefully all of them) and I also fixed a few minor bugs and added a few quality of life improvements. All these new features are now in the latest release on github so you can play it now. If you do play it make sure to extract the zip before playing so that the game functions correctly and also so that your game can progress and save."}, {"post_id": 60140, "ts": "2026-09-02T10:04:04Z", "hours": 0.4208, "text": "I updated the readme, as I added an image to it and I added a link to my website so people can view more of my work, I then added more tickets to the tickets database and then I made a new release so that the most recent updates are reflected on the github release and so people can play the latest version of PyDesk."}, {"post_id": 55227, "ts": "2026-08-26T21:04:01Z", "hours": 0.5467, "text": "I added saving to a json file so that players can save progress through different playthroughs, I also added so that after every ticket it clears the terminal this is so that it is less cluttered and looks more organised"}, {"post_id": 38902, "ts": "2026-08-01T14:15:27Z", "hours": 1.0564, "text": "I added shift time to the game so that each ticket takes a certain amount of time and in a day you have 8 hours so you have to see how many tickets you can get through in the time, I restructured the ticketing randomiser system so that now there are no repeats, when you get a ticket wrong, now it takes off £5 from your paycheck, I added more summaries to the menus, after your shift is over one big summary, added a random load time between tickets to make it feel more realistic. Getting close to release now, just need to add a few more tickets and maybe a day system and a saving system. :)"}, {"post_id": 29489, "ts": "2026-07-16T13:44:02Z", "hours": 0.3636, "text": "I changed the name of the game so that it is better and sounds more professional. I also added input validation to the main python file to prevent the game breaking if you accidentally type the wrong character. I added another ticket as well. Overall the game is coming together nicely and I just need to add more tickets and maybe tweak the gameplay loop a bit so that it functions better."}, {"post_id": 20851, "ts": "2026-07-02T15:51:09Z", "hours": 0.6531, "text": "I added two more tickets, added a priority level to each ticket to add more depth to game, corrected readme. I also made the game fully functional by ensuring the gameplay loop worked, added score and money so it is more fun and done some playtests to ensure it works as expected"}, {"post_id": 20252, "ts": "2026-07-01T19:59:33Z", "hours": 0.7517, "text": "I realised that custom tkinter is too hard lol so I will just be doing a text based game for now, I might expand to having ui in the future. I also added the ticket file so that the ticket options can be seperate from the rest of the code. I implemented the random ticket functionality so that the game is playable. I added .gitignore so that the pycache is not pushed to github. Tweaked the readme to reflect changes and ensured game has basic functionality."}, {"post_id": 16516, "ts": "2026-06-26T21:23:52Z", "hours": 0.2794, "text": "I have done some research and instead of doing a text based game, I am going to use custom tkinter to have some ui in the game, this will make the game much better and make it look better. I installed custom tkinter and reflected the changes in the read me so that people know how to play the game."}, {"post_id": 16252, "ts": "2026-06-26T12:29:33Z", "hours": 0.3331, "text": "I have started the intro for the game and written the readme so people know how to use it. Basis of the game, still got a long way to go lol"}]...
|
Title: PyDesk by @Gooderswills | Stardance
Devlog Title: PyDesk by @Gooderswills | Stardance
Devlogs:
I have started the intro for the game and written the readme so people know how to use it. Basis of the game, still got a long way to go lol
I have done some research and instead of doing a text based game, I am going to use custom tkinter to have some ui in the game, this will make the game much better and make it look better. I installed custom tkinter and reflected the changes in the read me so that people know how to play the game.
I realised that custom tkinter is too hard lol so I will just be doing a text based game for now, I might expand to having ui in the future. I also added the ticket file so that the ticket options can be seperate from the rest of the code. I implemented the random ticket functionality so that the game is playable. I added .gitignore so that the pycache is not pushed to github. Tweaked the readme to reflect changes and ensured game has basic functionality.
I added two more tickets, added a priority level to each ticket to add more depth to game, corrected readme. I also made the game fully functional by ensuring the gameplay loop worked, added score and money so it is more fun and done some playtests to ensure it works as expected
I changed the name of the game so that it is better and sounds more professional. I also added input validation to the main python file to prevent the game breaking if you accidentally type the wrong character. I added another ticket as well. Overall the game is coming together nicely and I just need to add more tickets and maybe tweak the gameplay loop a bit so that it functions better.
I added shift time to the game so that each ticket takes a certain amount of time and in a day you have 8 hours so you have to see how many tickets you can get through in the time, I restructured the ticketing randomiser system so that now there are no repeats, when you get a ticket wrong, now it takes off £5 from your paycheck, I added more summaries to the menus, after your shift is over one big summary, added a random load time between tickets to make it feel more realistic. Getting close to release now, just need to add a few more tickets and maybe a day system and a saving system. :)
I added saving to a json file so that players can save progress through different playthroughs, I also added so that after every ticket it clears the terminal this is so that it is less cluttered and looks more organised
I updated the readme, as I added an image to it and I added a link to my website so people can view more of my work, I then added more tickets to the tickets database and then I made a new release so that the most recent updates are reflected on the github release and so people can play the latest version of PyDesk.
I have been doing a lot over the past couple days/ maybe a week. I have added 17 new tickets to the database, I fixed a case sensitive bug, added an end/close message to the game, updated the clear terminal command because the old one was outdated, I fixed typos in some of the tickets (hopefully all of them) and I also fixed a few minor bugs and added a few quality of life improvements. All these new features are now in the latest release on github so you can play it now. If you do play it make sure to extract the zip before playing so that the game functions correctly and also so that your game can progress and save.
I have added a guide on how to convert a python file to an exe for anyone that wants to read it, it is also for me so I don’t forget how to do it later lol
Over the past couple of days I have been busy, I have added 5 new tickets to the database, fixed a few minor bugs and also attempted to get PyDesk running in the web, this doesn’t work as of now, but I have done something better, we are now on itch.io! https://gooderswills.itch.io/pydesk Please check it out and let me know what you think, see you soon for another devlog coming up soon!
I have been working hard again, here is what I have done. I have added 4 more tickets and added a stats.py file to display how many tickets there are and more! (Gemini helped with this) I also updated the python to exe guide, updated the tickets to display their ID now in the game (major oversight by me) and I have added a contributing guide so if you want to help me make this game then please do! contributing.md
I have been back at it again, I have added a contributing guide so now you can help out with PyDesk , I added a stats file for developers/me (with the help of gemini), fixed minor bugs/typos, implemented day logic that saves,added over 15 new tickets so now over 45 tickets in the game. Now one of the biggest updated PyDesk now has a website and an itch.io Store page. On the website you can try out a ticket in the game and many more minor improvements/fixes.
Ships:
This is the initial release of PyDesk, a text based IT simulator, at the moment you can play through one day in the game with a variety of tickets. Hope you enjoy the game. To play go to the github release and follow the instructions there.
I have spent a lot of time over the past days/maybe a week adding features and enhancing the overall game. Some of the stand out features are adding saving and loading of the game, clearing the terminal so it looks more organised, enhancing the readme, adding lots more tickets (around 20 more) and fixing varius bugs. To see the full list of updates checkout the github commits or just look at my previous devlogs. In summary I have enhanced the game and added more features so it is better to play. If you are going to play it then go to the github releases (or click try project below) and download the latest release zip, then extract it and run the exe. It will make a json file containing your save. Hope you enjoy the latest updates!
This has been a massive improvement to PyDesk, I have added an itch.io page, a website, many dev features (contributing guide, ticket stats) and a whole load of minor improvements, bug fixes and enhancements, check the github commit history for the full details or check the last devlogs, please look at the website and contributing guide if you want to help....
|
1792849907.243462
|
1792936307.243462
|
|
21847
|
Flux-OS by @Abhiram999 | Stardance
|
Abhiram999
|
3
|
81.0
|
828
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T07:57:02Z", "hours": 28.0, "multiplier": 8.97, "payout": 249, "blessing": "neutral", "text": "So, Yes FluxOS is a WebOS and i believe everyone is already aware of by now and is (mostly) made on vanilla CSS, HTML and JS Doesn’t really follow any design theme ( like other OS based on animals mostly ) But its kinda going with what i like mostly minimal , functional and customizable hence it is quite customizable ( not as customizable as real OS but common this is running on the web gng ) Not as functional as i would like but its pretty good, Id like to work on it more but I am ending this project right here Also It was hell to debug as the code base is simply massive, wayy too big for its own good Anyways I hope you like it ._.", "repo": "https://github.com/the-degenerate-otaku/Flux-OS", "demo": "https://the-degenerate-otaku.github.io/Flux-OS/"}, {"ship_num": 2, "ts": "2026-08-19T16:57:25Z", "hours": 52.0, "multiplier": 13.04, "payout": 579, "blessing": "neutral", "text": "So Essentially I Made a WebOS but It is customizable ( Well It tried to be at least ) How customizable? Well you change wallpapers , window accents , Window transparent and Window blurring , Have cursor effects which change with accents , a fully working file manager and notepad to scribble shi down And Yea IT TOOK A WHILE especially when your code is broken because you forgot to capitalize a letter for a function and then the function now doesn’t exist and you do everything and turn the entire code upside down before finding it on random Tuesday (smh) I’m gonna keeping working on this cause i did have a web browser in built into the OS and a Music player but got rid of it cause It just doesn’t work how i quite want it to right now frankly so It’ll probably next ship that the full version of this WebOS will release and I can put this project to rest ( fyi I’m one month overdue so yea gotta finish it fast", "repo": "https://github.com/the-degenerate-otaku/Flux-OS", "demo": "https://the-degenerate-otaku.github.io/Flux-OS/"}, {"ship_num": 3, "ts": "2026-07-01T12:09:25Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a custom OS build on html and is web-based using CSS, JS and HTML. Along the journey of me building the WebOS i learnt a lot of things like how to build a real-time clock and Terminal code, it was hard though cause the code kept breaking again and again and yea a lot of debugging and brain wrecking later it finally works and I’m quite proud of it ngl it maybe be small step it is an honest one :) k’bie", "repo": "https://github.com/the-degenerate-otaku/Flux-OS", "demo": "https://the-degenerate-otaku.github.io/Flux-OS/"}]...
|
[{"post_id": 62738, "ts": "202 [{"post_id": 62738, "ts": "2026-09-06T07:49:51Z", "hours": 3.8911, "text": "FluxOS Final Devlog #21 Date : 6 September 2026 So, Yes this is going to be my final Devvlog on this project and on Stardance as a whole probably though I have an entire month Infront of me I have shi to do in RL and i am focusing on the ysws too so yea gotta end this here i suppose, There is alot I still wanna build on Flux but there is technical and aesthetic constraints on vanilla CSS and JS so It would make the project so big that neither will i be able to complete it nor will it run well so im ending it here that said im pretty happy how it turned out, it looks pretty good for a project i started making when i began coding Whats New? Added the music player back Default settings have been updated Updated readme Taskbar google Search Final UI clean up PS: the clock position might change depending on your screen size it should be fine on most lap but on larger or smaller screen it might be a bit off target so just drag it back to where it is in the wallpaper ight? ( I cant figure it out )"}, {"post_id": 60932, "ts": "2026-09-03T16:34:30Z", "hours": 2.7239, "text": "Flux OS Devlog#20 Date: 3 September 2026 What New? So essentially small bug changes and a new feature the accent picker now has a auto or manual option to choose from the Auto accent picker bug where it displayed on top the manual accent has been fixed bug where the pet wouldnt come out in itss proper size has been fixed SEARCH BAR ADDED ( YES BROWSER SEARCH ) yea its not an embedded browser it does take you to a new tab when you search anything but its still better than having a half assed wiki page as the browser which doesnt event work and it got cool rolling text hehhehe"}, {"post_id": 60354, "ts": "2026-09-02T17:20:23Z", "hours": 1.8397, "text": "Flux OS Devlog #19 Date: 2 September 2026 What’s New? So accent picker the accent now automatically changes with the wallpaper colors ( still need to add the option to manually select it tho )"}, {"post_id": 59112, "ts": "2026-08-31T18:56:29Z", "hours": 0.275, "text": "Flux OS BTS #1 Date: 31 August 2026 heehehe here is a sneak peek on what im making ( yes im tired that why no devlog )"}, {"post_id": 58354, "ts": "2026-08-30T18:59:20Z", "hours": 1.8422, "text": "Flux OS Devlog #18 Date: 30 August 2026 ( well 31 actually ) Whats New? BETTER ACCENTS, so I earlier had only 4 accents and they were kinda eh meh so yea this is a fully reworked accents with now 10 colors which changes the color of the glass and the Globe live wallpaper and updates in real time ( pet is still white ) took shit ton of time cause i somehow broke the taskbar ( yep ik )"}, {"post_id": 57157, "ts": "2026-08-29T08:17:10Z", "hours": 2.7289, "text": "Flux OS Devlog #17 Date: 30 August 2026 Whats new? Honestly nothing much just some minor ahh changes fixed maximise , minimise and close button function so now the windows actually maximise properly instead of the old broken one Dock autohide when maximised Updated terminal lost the entire site for half an hour ( didnt even have dev console ) but fixed it"}, {"post_id": 56829, "ts": "2026-08-28T19:29:53Z", "hours": 2.1167, "text": "Flux OS Devlog #16 Date 29 August 2026 How come im not dead yet smh, its the middle of night and i got a cold Whats New? ⭐ THE PET IS FINALLY HERE ( YEES IK ISNT HE CUTE :O ) this one is so much of an improvement over thee last pet i had and the cat i tried to make omg and the math behind it is genuinely fascinating ( not gonna bother explaining it here ) so yea it was made the by this dude https://github.com/codetoanbug/ReptileInteractiveCursor or atleast that whom i used to understand how the code worked and yea the pet is togglable works on all background and yea pretty cool Now lemme go rest im sick af and i have a headache"}, {"post_id": 55190, "ts": "2026-08-26T18:18:10Z", "hours": 3.7108, "text": "Flux OS Devlog #15 Date : 26 August 2026 Whats new? Brought the taskbar icons back so now u can minimize and itll go to the taskbar, everything else is kinda broken tho Im making something big may have something to do with my pet hehe~"}, {"post_id": 53606, "ts": "2026-08-24T07:40:46Z", "hours": 1.1694, "text": "Flux OS Devlog#14 Date : 24 August 2026 Whats New? Brought back the custom wallpaper options I expect the live and static wallpaper shifting to be a lot more difficult cause I’m not using a video as the live wallpaper but a reactive that moves with your mouse and I had problems with this in the past nonetheless everything went pretty smoothly too smoothly in fact I thought something would break and I would have to spend 3hrs finding what broke but it took barely an hour hmm isn’t that interesting Cleaner up a visual bug for the accents where the colors weren’t rendering properly in their half and would leak into the other half"}, {"post_id": 53193, "ts": "2026-08-23T17:06:00Z", "hours": 2.1472, "text": "Flux OS Devlog#13 Date : 23 August 2026 Whats new? Small changes for small hours, Taskbar has now a Wi-Fi and Bluetooth symbol also has device specs and a Calendar yyyayyyyyy also there is an app finder Haven’t made much progress cause i was busy playing Genshin ( its too good )"}, {"post_id": 52359, "ts": "2026-08-22T13:57:37Z", "hours": 5.3289, "text": "Flux OS Devlog#12 Date : 22 August 2026 Whats new? More like is there anything left What all got removed? Music player , Browser , pet - Went for redesign and rework Notification centre - Removed and discarded Wallpaper capabilities - temporarily removed Ye, No joke i removed half of the entire WebOS What got added? Custom png icons new cursor effect removing the old one a new dynamic wallpaper ( which is the reason for removing custom wallpapers) New look generally speaking"}, {"post_id": 50436, "ts": "2026-08-19T16:31:20Z", "hours": 8.7722, "text": "Flux OS Devlog #11 Date 19 August 2026 Whats New? Apart from the fact im posting this almost a month since I last touched it there has been quoote alot of changes You can now close the notification centre the Accent colors and a new design Two apps has been removed for further development Cleaned up the code Fixed some bugs"}, {"post_id": 28865, "ts": "2026-07-15T12:55:50Z", "hours": 10.5608, "text": "Flux OS Devlog #10 Date: 15 July 2026 Whats New? So there is nothing much major to say new even though its over 10hrs of coding time almost 8hrs was debugging the things I already had cause there was may things that was broken from the last coding session that I had too dedicate the entire day towards Bugfixing the old code and since most of the old bugs where invisible i had to go through the entire code manually to come across over 10 bugs but all is good everything works as it should except the aero snap which I’m still figuring out and yes I have been coding almost the entire day and ngl Im seriously not stopping until tonight cause I’m basically hooked atp and I only stopped to post a Devlog otherwise my hours wont be counted Oh welp k’bie"}, {"post_id": 28439, "ts": "2026-07-14T17:55:57Z", "hours": 3.1869, "text": "Flux OS - Devlog #9 Date: 14 July 2026 Whats New? Sooooooo Its lookinh ppretty good ngl except for alot of shi breaking like always thing OS is finally coming together Cursor Particle trail system fixed Basic boot animation exsists a very bad but working aero snap ( tho ccant really function cause the dragging broke ) local storage ( VFS system ) added notification Centre added"}, {"post_id": 28287, "ts": "2026-07-14T13:30:52Z", "hours": 17.0628, "text": "Flux OS - Devlog #8 Date: 14 July 2026 Soooo Why do I have 17 hrs logged over 3 days and literally nearly no change to the actual WebOS and If anything a broken cursor?? Well so essentially I didnt know you had to log eveery 10hrs ( down goes 7 hrs in the drain ) and the 17 hrs I was trying alot of ideas trying to get work but couldnt cause well ehhh skilll issue….. ( ._. ) but i got a particle effect for the cursor working ….. except the cursor dosent work now …… oh well also i tried to get the cat working for like 10 hrs out of thee 17 and ye it is just not listening to me so yea im probably rethink my approach for this project and keep it oon the side for a few days"}, {"post_id": 26599, "ts": "2026-07-11T14:57:39Z", "hours": 6.3031, "text": "Flux OS - Devlog #7 Date : 11th July 2026 I am tired, so goddamn tired after 6hrs of coding ughhhhh so essentially i tried to make a desktop cat similar to the Comnyang pixel cat and after 6 hrs i havent moved anywhere i couldve probably spent more time making the OS better but nahh i spent it on a pixel cat that said i got something to work so idk i just need to find a way to make the json file better ahhh welp thats all k’bie"}, {"post_id": 26130, "ts": "2026-07-10T19:00:35Z", "hours": 1.6269, "text": "Flux OS - Devlog #6 Date 11 July 2026 Its 1 in the goddamn morning and I Finally got it to work finally after hours off debugging Jesus Christ and I’m currently cracked rn I’m very happy with what I made in 2hrs and that the debugging was soooo much more easy after i learned how to read errors, cause at first id just be confused and just start reading the code for the errors but its the entire codebase is over 700 lines long and reading it wasn’t plausible anymore anyway this is a major milestone What Changed ?? Basically the entire code changed to keep it short at first i coded CSS inline with HTML, now i just took my entire CSS file and made it a separate file You can put Custom Wallpapers now ( yes even you dog or cat can be your wallpaper ) using the Local storage property of JS the themes work but they aren’t much of use rn, Ill add more later and simplify them The control center isn’t how I want it now but honestly its already middle of the night so I’m doing that tomorrow You can change the transparency value of the windows and now can make them transparent, or frosty type whatever you like there is a WebApp Dock now where you can add your favorite sites and click them to immediately launch them like a real App dock Alr that’s enough for today im gonna log off and sleep have a good day k’bie"}, {"post_id": 26040, "ts": "2026-07-10T16:53:59Z", "hours": 3.1717, "text": "FluxOS - Devlog #5 Date 10 July 2026 What changed? I added Window transparency, Yes now the windows have a small frosted glass look though its not that visible because of the plain background but when u stack apps it becomes clear What’s Next? I have an idea for an app dock not sure if it’ll work I am trying to add a ability to customize your background Making a control center that pops up from the side k’bie"}, {"post_id": 20973, "ts": "2026-07-02T18:26:12Z", "hours": 1.3433, "text": "Flux-OS - Devlog #4 Date : 2 July 2026 So So I had a big brain scratching session of 4hrs with 90mins of actual coding but i did it i some got the NASA Uplink working What Changed? Researched a lot how to get uplink working it was either write a extremely long JS in Html and make it chaotic or make a equally challenging JS script file and type it out so I took the second route and made a JS file How does it work? In short I made a asynchronous module which uses a native fetch API to ask an External Rest API Which gets the info of the ISS k’bie"}, {"post_id": 19939, "ts": "2026-07-01T11:58:40Z", "hours": 0.385, "text": "Flux-OS Devlog #3 Date 1 July 2026 Changelog Now the terminal actually works it now reacts to commands and can take user input though it’ll still break if you put something other than the codes Whats Next Going forward i have quite a lot of changes cause the shell is now complete A full OS revamp with better animations Better Terminal More Apps Somehow make it customizable to the user"}, {"post_id": 19925, "ts": "2026-07-01T11:18:58Z", "hours": 0.6133, "text": "FluxOS Devlog #2 Date: 1 July 2026 So after bit of procrastination and thinking later i finally made some new changes Changelog changed the code to look cleaner and more readable Did alot of bugfixiing that came with the new change Added a custom Bootup Screen Problems i ran into Almost broke the entire code because a small syntax error file didn’t want to boot up ( still dont know why)"}, {"post_id": 19828, "ts": "2026-07-01T06:35:10Z", "hours": 0.0, "text": "Web-OS -Devlog #1 Date: 1 July 2026 So after alot of deliberation, studying , crying over my tight ahh schedule with literally no room to breathe ( I dont even get 6hrs of sleep atp ) I got 90 mins to make the shell of what is going to be my first ever Web-OS So What did I build in the 90mins? Trust me absolutely nothing significant, I managed to a framework running and made a shell of what going to be my future Web-OS ( which doesn’t even have a name atp) so ye, i got a lot of planned for this thing cause even if I’m not good at writing code im good at thinking up ideas which is usually a hit or miss so ye I’m feeling pretty good about this project Issues I ran into Even though Im pretty confident in my basic html skills atp i still suck at it and i generally am a slow typer which just makes me take so much time to write code its infuriating anyway there was nothing major to be tackled except myself ( why ofc not ) and my single celled brain who doesn’t understand syntax mistakes I do other than that all good What’s coming next Proper animations A boot up screen Custom commands for the terminal Proper working apps which look good Generally better user friendly design That’s all, K’bye"}]...
|
Title: Flux-OS by @Abhiram999 | Stardance
Devlogs Title: Flux-OS by @Abhiram999 | Stardance
Devlogs:
Web-OS -Devlog #1 Date: 1 July 2026 So after alot of deliberation, studying , crying over my tight ahh schedule with literally no room to breathe ( I dont even get 6hrs of sleep atp ) I got 90 mins to make the shell of what is going to be my first ever Web-OS So What did I build in the 90mins? Trust me absolutely nothing significant, I managed to a framework running and made a shell of what going to be my future Web-OS ( which doesn’t even have a name atp) so ye, i got a lot of planned for this thing cause even if I’m not good at writing code im good at thinking up ideas which is usually a hit or miss so ye I’m feeling pretty good about this project Issues I ran into Even though Im pretty confident in my basic html skills atp i still suck at it and i generally am a slow typer which just makes me take so much time to write code its infuriating anyway there was nothing major to be tackled except myself ( why ofc not ) and my single celled brain who doesn’t understand syntax mistakes I do other than that all good What’s coming next Proper animations A boot up screen Custom commands for the terminal Proper working apps which look good Generally better user friendly design That’s all, K’bye
FluxOS Devlog #2 Date: 1 July 2026 So after bit of procrastination and thinking later i finally made some new changes Changelog changed the code to look cleaner and more readable Did alot of bugfixiing that came with the new change Added a custom Bootup Screen Problems i ran into Almost broke the entire code because a small syntax error file didn’t want to boot up ( still dont know why)
Flux-OS Devlog #3 Date 1 July 2026 Changelog Now the terminal actually works it now reacts to commands and can take user input though it’ll still break if you put something other than the codes Whats Next Going forward i have quite a lot of changes cause the shell is now complete A full OS revamp with better animations Better Terminal More Apps Somehow make it customizable to the user
Flux-OS - Devlog #4 Date : 2 July 2026 So So I had a big brain scratching session of 4hrs with 90mins of actual coding but i did it i some got the NASA Uplink working What Changed? Researched a lot how to get uplink working it was either write a extremely long JS in Html and make it chaotic or make a equally challenging JS script file and type it out so I took the second route and made a JS file How does it work? In short I made a asynchronous module which uses a native fetch API to ask an External Rest API Which gets the info of the ISS k’bie
FluxOS - Devlog #5 Date 10 July 2026 What changed? I added Window transparency, Yes now the windows have a small frosted glass look though its not that visible because of the plain background but when u stack apps it becomes clear What’s Next? I have an idea for an app dock not sure if it’ll work I am trying to add a ability to customize your background Making a control center that pops up from the side k’bie
Flux OS - Devlog #6 Date 11 July 2026 Its 1 in the goddamn morning and I Finally got it to work finally after hours off debugging Jesus Christ and I’m currently cracked rn I’m very happy with what I made in 2hrs and that the debugging was soooo much more easy after i learned how to read errors, cause at first id just be confused and just start reading the code for the errors but its the entire codebase is over 700 lines long and reading it wasn’t plausible anymore anyway this is a major milestone What Changed ?? Basically the entire code changed to keep it short at first i coded CSS inline with HTML, now i just took my entire CSS file and made it a separate file You can put Custom Wallpapers now ( yes even you dog or cat can be your wallpaper ) using the Local storage property of JS the themes work but they aren’t much of use rn, Ill add more later and simplify them The control center isn’t how I want it now but honestly its already middle of the night so I’m doing that tomorrow You can change the transparency value of the windows and now can make them transparent, or frosty type whatever you like there is a WebApp Dock now where you can add your favorite sites and click them to immediately launch them like a real App dock Alr that’s enough for today im gonna log off and sleep have a good day k’bie
Flux OS - Devlog #7 Date : 11th July 2026 I am tired, so goddamn tired after 6hrs of coding ughhhhh so essentially i tried to make a desktop cat similar to the Comnyang pixel cat and after 6 hrs i havent moved anywhere i couldve probably spent more time making the OS better but nahh i spent it on a pixel cat that said i got something to work so idk i just need to find a way to make the json file better ahhh welp thats all k’bie
Flux OS - Devlog #8 Date: 14 July 2026 Soooo Why do I have 17 hrs logged over 3 days and literally nearly no change to the actual WebOS and If anything a broken cursor?? Well so essentially I didnt know you had to log eveery 10hrs ( down goes 7 hrs in the drain ) and the 17 hrs I was trying alot of ideas trying to get work but couldnt cause well ehhh skilll issue….. ( ._. ) but i got a particle effect for the cursor working ….. except the cursor dosent work now …… oh well also i tried to get the cat working for like 10 hrs out of thee 17 and ye it is just not listening to me so yea im probably rethink my approach for this project and keep it oon the side for a few days
Flux OS - Devlog #9 Date: 14 July 2026 Whats New? Sooooooo Its lookinh ppretty good ngl except for alot of shi breaking like always thing OS is finally coming together Cursor Particle trail system fixed Basic boot animation exsists a very bad but working aero snap ( tho ccant really function cause the dragging broke ) local storage ( VFS system ) added notification Centre added
Flux OS Devlog #10 Date: 15 July 2026 Whats New? So there is nothing much major to say new even though its over 10hrs of coding time almost 8hrs was debugging the things I already had cause there was may things that was broken from the last coding session that I had too dedicate the entire day towards Bugfixing the old code and since most of the old bugs where invisible i had to go through the entire code manually to come across over 10 bugs but all is good everything works as it should except the aero snap which I’m still figuring out and yes I have been coding almost the entire day and ngl Im seriously not stopping until tonight cause I’m basically hooked atp and I only stopped to post a Devlog otherwise my hours wont be counted Oh welp k’bie
Flux OS Devlog #11 Date 19 August 2026 Whats New? Apart from the fact im posting this almost a month since I last touched it there has been quoote alot of changes You can now close the notification centre the Accent colors and a new design Two apps has been removed for further development Cleaned up the code Fixed some bugs
Flux OS Devlog#12 Date : 22 August 2026 Whats new? More like is there anything left What all got removed? Music player , Browser , pet - Went for redesign and rework Notification centre - Removed and discarded Wallpaper capabilities - temporarily removed Ye, No joke i removed half of the entire WebOS What got added? Custom png icons new cursor effect removing the old one a new dynamic wallpaper ( which is the reason for removing custom wallpapers) New look generally speaking
Flux OS Devlog#13 Date : 23 August 2026 Whats new? Small changes for small hours, Taskbar has now a Wi-Fi and Bluetooth symbol also has device specs and a Calendar yyyayyyyyy also there is an app finder Haven’t made much progress cause i was busy playing Genshin ( its too good )
Flux OS Devlog#14 Date : 24 August 2026 Whats New? Brought back the custom wallpaper options I expect the live and static wallpaper shifting to be a lot more difficult cause I’m not using a video as the live wallpaper but a reactive that moves with your mouse and I had problems with this in the past nonetheless everything went pretty smoothly too smoothly in fact I thought something would break and I would have to spend 3hrs finding what broke but it took barely an hour hmm isn’t that interesting Cleaner up a visual bug for the accents where the colors weren’t rendering properly in their half and would leak into the other half
Flux OS Devlog #15 Date : 26 August 2026 Whats new? Brought the taskbar icons back so now u can minimize and itll go to the taskbar, everything else is kinda broken tho Im making something big may have something to do with my pet hehe~
Flux OS Devlog #16 Date 29 August 2026 How come im not dead yet smh, its the middle of night and i got a cold Whats New? ⭐ THE PET IS FINALLY HERE ( YEES IK ISNT HE CUTE :O ) this one is so much of an improvement over thee last pet i had and the cat i tried to make omg and the math behind it is genuinely fascinating ( not gonna bother explaining it here ) so yea it was made the by this dude https://github.com/codetoanbug/ReptileInteractiveCursor or atleast that whom i used to understand how the code worked and yea the pet is togglable works on all background and yea pretty cool Now lemme go rest im sick af and i have a headache
Flux OS Devlog #17 Date: 30 August 2026 Whats new? Honestly nothing much just some minor ahh changes fixed maximise , minimise and close button function so now the windows actually maximise properly instead of the old broken one Dock autohide when maximised Updated terminal lost the entire site for half an hour ( didnt even have dev console ) but fixed it
Flux OS Devlog #18 Date: 30 August 2026 ( well 31 actually ) Whats New? BETTER ACCENTS, so I earlier had only 4 accents and they were kinda eh meh so yea this is a fully reworked accents with now 10 colors which changes the color of the glass and the Globe live wallpaper and updates in real time ( pet is still white ) took shit ton of time cause i somehow broke the taskbar ( yep ik )
Flux OS BTS #1 Date: 31 August 2026 heehehe here is a sneak peek on what im making ( yes im tired that why no devlog )
Flux OS Devlog #19 Date: 2 September 2026 What’s New? So accent picker the accent now automatically changes with the wallpaper colors ( still need to add the option to manually select it tho )
Flux OS Devlog#20 Date: 3 September 2026 What New? So essentially small bug changes and a new feature the accent picker now has a auto or manual option to choose from the Auto accent picker bug where it displayed on top the manual accent has been fixed bug where the pet wouldnt come out in itss proper size has been fixed SEARCH BAR ADDED ( YES BROWSER SEARCH ) yea its not an embedded browser it does take you to a new tab when you search anything but its still better than having a half assed wiki page as the browser which doesnt event work and it got cool rolling text hehhehe
FluxOS Final Devlog #21 Date : 6 September 2026 So, Yes this is going to be my final Devvlog on this project and on Stardance as a whole probably though I have an entire month Infront of me I have shi to do in RL and i am focusing on the ysws too so yea gotta end this here i suppose, There is alot I still wanna build on Flux but there is technical and aesthetic constraints on vanilla CSS and JS so It would make the project so big that neither will i be able to complete it nor will it run well so im ending it here that said im pretty happy how it turned out, it looks pretty good for a project i started making when i began coding Whats New? Added the music player back Default settings have been updated Updated readme Taskbar google Search Final UI clean up PS: the clock position might change depending on your screen size it should be fine on most lap but on larger or smaller screen it might be a bit off target so just drag it back to where it is in the wallpaper ight? ( I cant figure it out )
Ships:
I made a custom OS build on html and is web-based using CSS, JS and HTML. Along the journey of me building the WebOS i learnt a lot of things like how to build a real-time clock and Terminal code, it was hard though cause the code kept breaking again and again and yea a lot of debugging and brain wrecking later it finally works and I’m quite proud of it ngl it maybe be small step it is an honest one :) k’bie
So Essentially I Made a WebOS but It is customizable ( Well It tried to be at least ) How customizable? Well you change wallpapers , window accents , Window transparent and Window blurring , Have cursor effects which change with accents , a fully working file manager and notepad to scribble shi down And Yea IT TOOK A WHILE especially when your code is broken because you forgot to capitalize a letter for a function and then the function now doesn’t exist and you do everything and turn the entire code upside down before finding it on random Tuesday (smh) I’m gonna keeping working on this cause i did have a web browser in built into the OS and a Music player but got rid of it cause It just doesn’t work how i quite want it to right now frankly so It’ll probably next ship that the full version of this WebOS will release and I can put this project to rest ( fyi I’m one month overdue so yea gotta finish it fast
So, Yes FluxOS is a WebOS and i believe everyone is already aware of by now and is (mostly) made on vanilla CSS, HTML and JS Doesn’t really follow any design theme ( like other OS based on animals mostly ) But its kinda going with what i like mostly minimal , functional and customizable hence it is quite customizable ( not as customizable as real OS but common this is running on the web gng ) Not as functional as i would like but its pretty good, Id like to work on it more but I am ending this project right here Also It was hell to debug as the code base is simply massive, wayy too big for its own good Anyways I hope you like it ._....
|
1792878728.3268666
|
1793742728.3268666
|
|
21857
|
HoopIQ by @atharva02 | Stardance
|
atharva02
|
3
|
75.8
|
642
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-03T21:56:53Z", "hours": 22.0, "multiplier": 16.02, "payout": 348, "blessing": "neutral", "text": "I made a basketball training app that will help people train their basketball skills. The hardest part in this ship was probably finding the best way to integrate mobile into this. I really don’t like styling, and it took really long to figure out correct widths, until I realized viewport widths which made life so much easier and correctly take up the space you need. I’m most proud of the animations that have now been integrated within the site. They’re pretty basic, but I do think they add enough flavor to the app to make it a little bit more enjoyable, which is always a nice touch. When testing this project, data is saved locally so progress doesn’t save between devices and inactivity may make your browser clear the data if that’s something you have enabled(Safari does this a lot). Also note that when viewing the GitHub, I’m working on this with branches so view the “feature/training-adjustments” branch to see current committed changes, they’re not merged on main yet. This is the third ship for this project, and I anticipate more to come so all feedback is appreciated. Enjoy!", "repo": "https://github.com/atharva-277/Basketball-Trainer", "demo": "https://hoop-iq-277.web.app/"}, {"ship_num": 2, "ts": "2026-08-29T02:17:33Z", "hours": 21.0, "multiplier": 10.39, "payout": 215, "blessing": "neutral", "text": "I made a basketball training app that will help people train their basketball skills. A challenging part for this part was finding specific drills that improved the skillset that I had created. Also the metric to imperial conversion had a finicky error which took a lot longer to fix, but it’s here now so great! I’m proud that the drills remain personalized like the other training parts as they target where you have logged you are weak at. I feel training sites are best when the user knows where they struggle and needs a medium to improve. When testing this project, data is saved locally so progress doesn’t save between devices(this is only laptop friendly right now, sorry) and inactivity may make your browser clear the data if that’s something you have enabled(Safari does this a lot). Also note that when viewing the GitHub, I’m working on this with branches so view the “feature/training-adjustments” branch to see current committed changes, they’re not merged on main yet. Other than that, this is the second ship so some feedback was incorporated, but same as before, this app will continue to be expanded upon so all feedback is good feedback. Enjoy!", "repo": "https://github.com/atharva-277/Basketball-Trainer", "demo": "https://hoop-iq-277.web.app/"}, {"ship_num": 3, "ts": "2026-08-20T01:05:17Z", "hours": 6.0, "multiplier": 12.86, "payout": 79, "blessing": "neutral", "text": "I made a basketball training app that will help people train their basketball skills. The challenging part within making this app was finding out what skills are important to test out. Obviously shooting is the main aspect of basketball, but it’s also important to practice ball control. After that, there was challenges it creating specific algorithms to test those skills that provide an even split across the categories. I’m most proud of how the shot diet and baseline work together to create a unique training experience so you specifically work on categories that help YOUR play style, rather than a generic one. When testing this project, all data is saved locally so progress doesn’t save between devices(this is only laptop friendly right now, sorry) and inactivity may make your browser clear the data if that’s something you have enabled(Safari does this a lot). Other than that, I’m really excited to get any feedback on this whatsoever considering there is a lot more I plan to add to this. Enjoy!", "repo": "https://github.com/atharva-277/Basketball-Trainer", "demo": "https://hoop-iq-277.web.app/"}]...
|
[{"post_id": 65645, "ts": "202 [{"post_id": 65645, "ts": "2026-09-10T22:34:50Z", "hours": 4.3764, "text": "Devlog #18 Current Features Drill panel is here! Took a lot of effort to get working because accessing data from the same project is hard 😭. It wasn’t hard to access the drill history itself, but the way I was storing it was based on ID numbers and not drill names(something that was never actually stored) which made it hard to show on screen. I think it looks really good on the screen, and it’s intuitive to access via the calendar, click on the day. What’s Coming Up Right now it only shows what exactly you did, and your performance their specifically. However, I want to make it so that the user can easily see the misses they tagged as well, providing an all encompassing way of accessing all their history within this app. Obviously my app uses the data to give them drill suggestions, but the user should be able to see their history and make their own trends based on what they see. Game Plan I’ll be spending the next chunk of this trying to get that working: backend functionality, styling on screen, updating day to day, stuff like that. After that I’ll try to incorporate some animations in that and unless I think of other major changes, there will be another ship hopefully."}, {"post_id": 64585, "ts": "2026-09-09T02:57:01Z", "hours": 4.1461, "text": "Devlog #17 Current Features Started to work on the hover/pressing functionality. I’ve decided to simply combine the two functionalities into one, but I’m struggling to find the best way to display it on the screen. Basically, the user should be able to tap the day they worked on something, and see what exactly they did What’s Coming Up I was mainly testing with the backend part of this within these hours and will push a UI update to reflect these changes within the coming days hopefully. Other than that, I want to hopefully add a feature where they see the exact percentage boost they got by doing a task if I have the correct data to hold that. Game Plan Add UI features as mentioned above, switch gears to working on backend part of progress updates, and see how the app looks like then. Note: I had to reset data to test the UI, hence why my streak isn’t the 2 days including yesterday:)"}, {"post_id": 63999, "ts": "2026-09-08T03:20:25Z", "hours": 4.7167, "text": "Devlog #16 Current Features UI update is finally here! Finally got this working after a lot of trial and error with the display and making it show up with the proper date. The best part is it also looks great with the mobile without any extra styling so even better for me! What’s Coming Up Still want to add more functionality to the calendar specifically such as clicking to see your exact work, hovering to see basic title overview, and just general user interactivity. Game Plan Most of the above changes go along with how I stored data anyway, so I’m not behind in any regard. I plan on adding the above changes first, before deciding what else there is to add in relation to this."}, {"post_id": 63341, "ts": "2026-09-07T03:22:10Z", "hours": 5.4511, "text": "Devlog #14 Current Events Calendar is basically fully functioning! Hasn’t been integrated in the UI yet like I hoped it would be, but I got it working the way I wanted it to with the user able to see their progress in a quick snapshot. Really happy to see this working now as it’s been a asked feature in past ships What’s Coming Up The UI update will definitely be what’s coming up next. I know this was mentioned last devlog, but instead I got it close to fully working and now will be adding the interface. Game Plan Adding the UI on the screen so it fully works, and then switching over to the backend part of the session history"}, {"post_id": 62479, "ts": "2026-09-05T20:52:52Z", "hours": 4.2714, "text": "Devlog #13 Current Events Decided to add the screen itself to the UI so it’s easier to update these logs with progress as it occurs. On the backend, I realize I have been storing drill sessions anyway, just wasn’t displaying them so that’s a pretty big timesave. Along with that, the calendar is still a work in progress, just doing some testing to see how exactly it works along with how the streak will play into that. What’s Coming Up I’d expect a UI update shortly with multiple elements on the screen, maybe not fully functional right away, but in the intial working phase if that makes sense. Game Plan Add calendar and streak elements on screen with functionality – I’ll need some time to test if the days are tracked correctly. After that, it’ll be simply integrated session logs onto the screen"}, {"post_id": 61806, "ts": "2026-09-04T21:52:28Z", "hours": 3.8361, "text": "Devlog #13 Current Events I have started working on implementing a calendar and streak feature. I want to make it similar to stardance’s so that you can see what you worked on that specific day. Essentially, I’ll be adding another tab called history and input information there so they can see their streaks, recent drills, and progress over time. What’s Coming Up None of the UI has been integrated, but that doesn’t mean the backend is finished either. I was experimenting with how exactly the calendar works and how it might look within the UI. Game Plan I plan on slowly integrate the UI with the tab and only show the calendar and streaks at first once that starts working, and then work towards displaying the drill history. Thank you to whoever mentioned formatting devlogs properly in ship review! This makes it a lot easier to read."}, {"post_id": 61135, "ts": "2026-09-03T21:52:45Z", "hours": 5.5231, "text": "Devlog #12 Animations are here! Admittedly, there aren’t too animations, mainly because the one I saw online aren’t sites where the user is constantly interacting, their mainly shops or display sites, like WebOS. However, they are here now and I feel that they’re subtle, but still look nice on the screen. I especially like the pulse effect on the baseline screen when you increase, or decrease, your made shots. A ship will follow this devlog, so as always, please give all feedback that you can think of, specifically features which you want added that could improve this. I anticipate my next feature to be a calendar/streak system of sorts, giving the user visual cues on their progress. I have not forgotten about the drill tutorials, it’s just that it’s a bit more complicated and I like showing off progress periodically, not just once at the end. Hope you all enjoy!"}, {"post_id": 59907, "ts": "2026-09-01T22:48:44Z", "hours": 3.5156, "text": "Devlog #11 New Feature? I don’t know if mobile integration really counts as a new feature but I’m counting it anyway. This makes it easier to train as it is no longer necessary to be huddled around a laptop, entering your data. The new styles make it easier to navigate throughout the site on your phone. I know in my very first devlog I said I want to make a mobile app, but I think making a website work well on a phone also serves that need. Nothing has changed with the way data is handled, the main thing I worked on here was CSS styling in the new media set. These were hours well spent on making the site look good on a phone, so I hope you all enjoy it. My next goal is to add animations to the CSS, whether that’s new elements or just simple, quick navigation I don’t fully know yet. I will also be postponing the drill tutorials to a later date, I want to get another ship this week(I like having each ship have only a few unique features added, it helps me get feedback in bits rather than on everything), and I will likely not have the time to research online drill images or make them myself. Otherwise, I’ve had a lot of fun continuing this project so I hope you guys like this new style as much as I do. Attached is the recreation of mobile styles using Chrome Dev Tools, I didn’t want to type this all on my phone. Enjoy!"}, {"post_id": 59297, "ts": "2026-09-01T00:36:19Z", "hours": 3.7131, "text": "Devlog #10 A sad devlog, but a necessary one, GameIQ has been removed and will not be a feature any longer. I wasn’t able to find an efficient way to add in multiple situations unless I gave a paragraph of information instead of an image describing the situation. Perhaps I will be able to find a workaround with play-drawing section, but I’ve also realized that most people will not use this to play professional basketball games in any regard(high school or rec league), and will use it for pickup most likely. I will be focusing my attention on adding features that were recommended from previous ship reviews. I apologize for anyone reading these devlogs waiting for GameIQ to be a feature, it has been removed now. I am sorry."}, {"post_id": 58372, "ts": "2026-08-30T19:39:48Z", "hours": 3.6325, "text": "Devlog #9 GameIQ is still a work in progress right now, but the second ship reviews came in so I’m planning on making this a larger ship with more than just that. A big recommendation was drill tutorials so I might integrate a separate YouTube channel and provide links to the drills so people know how to do them, or find something online who knows. Also people said to add some animations to the actual site so I will probably add that as well. Despite the 3.5 hours in this devlog, I still couldn’t find a viable API source for the GameIQ, or maybe I’m not looking hard enough lol. I’m still going to try to find some alternative instead of hard-coding situations because I don’t know how many I’ll be able to do. But, I know for sure that some suggestions from past ships will be integrated within the next ship. Thank you for all the feedback so far, it’s been great reading them and planning out what more to do with this project!"}, {"post_id": 57742, "ts": "2026-08-30T00:37:08Z", "hours": 5.3189, "text": "Devlog #8 I’ve started working on the GameIQ section, except nothing with the Ui yet. I’ve been trying to get the internal logic to work and it’s being a bit weird. I’m trying to see if there’s a way to get a large question bank of answers without using an API to route to questions. Other than that, the main premise of GameIQ is you’ll be given a situation and you have to make the correct read out of 4 options, basically a quiz which you can opt out of anytime. Once that’s integrated as simply a base functionality, I hope to make it specific to the drills the user is actively working on to further test their skills. But again, not much works right now, it’s just some base logic with not much else."}, {"post_id": 57000, "ts": "2026-08-29T02:12:39Z", "hours": 4.6917, "text": "Devlog #7 Drills have been incorporated successfully! The user can now properly use this app to actually improve I think. Rather than repeatedly doing the same thing, they can do specific drills to improve their skills. This has the same display as the handling and shooting session log only difference is this doesn’t affect any of the calculations associated with you. These drills are simply a means to improve your handling and shooting skills which thereby affect your percentages. The drills tell you what to complete along with a suggested rep/time count but even if you log more/less it only affects you and not the internal algorithm. Other change made was based off of the first recommendation by adding metric units. This has also been added, you choose at the start and can update at any time via the settings page. Internal calculations still use inches, but the display will show metric in case anyone is looking at what data is being stored. Enjoy!"}, {"post_id": 56232, "ts": "2026-08-27T22:07:13Z", "hours": 5.4708, "text": "Devlog #6 New Feature! Drills are now a new feature that are still a small work in progress, but the initial testing is complete so though I’d post about it here. Essentially before all you could do was practice repetitive actions without actually working on how to improve it. Now with drills, after you’ve done some sessions to see how you’re performing, this will gauge where you’re usually messing up and provide drills to improve. Now these drills will help improve a specific part of the misses you tagged earlier. The flow that I’m going for here is you practice specific shot types and tag misses, complete drills to help said misses, and improve your skills over time! I’m still working on specific drills to add, along with descriptions so the user knows how to perform them. Attached is how it currently looks on the training screen, the session screen is still a work in progress. Note: some feedback given from initial ship will be adressed in next devlog, assuming I get around to it. Once this drill functionality is working and some feedback is adressed, there will most likely be another ship. Enjoy!"}, {"post_id": 54390, "ts": "2026-08-25T11:46:41Z", "hours": 6.0103, "text": "Devlog #5 Unfortunately, no new coding was done because I ran into multiple errors that took a lot of time trying to fix. I’m not actually sure what happened, but my files were messed up and the file structure internally broke down. Luckily, it’s all fixed now, so I thought I’d post this small devlog so I can reset my hours and post a new one when I start working on the drill features, without the 10 hour limit worrying me. Other than that, the UI of the app remains unchanged."}, {"post_id": 52649, "ts": "2026-08-22T21:46:24Z", "hours": 4.5331, "text": "Devlog #4 I did my usual project UI overhaul like I always need to usually. I usually let Claude generate the UI just so I can see stuff on the screen when I code the actual logic, and then inevitably forget I did that when I go to ship, but I have attempted to revert most of that back while still maintain the basketball theme. I personally think it looks pretty good now, I made all of the text bigger, made the buttons and most elements on the screen more visible. I also added a hover effect on most elements to give it an orange glow, this will eventually be converted to fully-mobile friendly(currently it works just doesn’t look good) but I still really enjoy it. Other than that there weren’t any logic changes, just felt the need to showcase what the site looks like right now as I spent a large amount of time updating the UI. Enjoy!"}, {"post_id": 50700, "ts": "2026-08-20T01:01:11Z", "hours": 2.7242, "text": "Devlog 3 So much has happened since. Now that the user has a baseline that they can be compared against, the initial training algorithm has been created! Right now it’s mainly based off of repetition and the user should continuously practice the same stuff they did within the baseline. This is simply the initial algorithm because based off of the baseline, the algorithm finds the weakest area and applies percentages to each are so you practice weak ones more than others. As you can see from the provided image: I have to practice specific ball handling and then if I don’t reach the amount, I have to tag a miss and it gives a cue on what you can do to fix that. Eventually, after this keeps growing, it’ll give specific drills that help instead of repetition. However, I will likely ship after this to see what people think of this so far and we’ll go from there."}, {"post_id": 36695, "ts": "2026-07-28T22:23:59Z", "hours": 2.4206, "text": "Devlog #2 So instead of generating a baseline based off of just personal bio-data, the user goes through a series of drills to see where they stand at currently. They have to practice threes, mid-rangers, layups, and practice some ball-handling drills. Based off of these beginning stats, it generates their current overall and saves their stats to be used later. Right now this is the only main thing that works and based off of this I’m gonna generate a training regime that best fits them mainly off of these stats. Other than that, the user is also able to input their shot diet on the training screen which basically tells the computer what they do when they have the ball. For example, they shoot threes 15% of the time, mid-rangers 35%, layups 40%, and handle the ball via dribbling 10%. Attached is a sample results page after the user finishes their baseline."}, {"post_id": 14042, "ts": "2026-06-23T00:47:40Z", "hours": 1.0325, "text": "So I’m currently working on a basketball trainer website, eventually converted into an app to help people improve their basketball skills. Currently, there’s only a good UI base because I haven’t started the full functionality yet. I plan on, hopefully, adding a new training section twice every week, or just weekly if that’s what works. Attached is the home page where the user inputs their info to get a baseline for training rigor."}]...
|
Title: HoopIQ by @atharva02 | Stardance
Devlogs:
Title: HoopIQ by @atharva02 | Stardance
Devlogs:
So I’m currently working on a basketball trainer website, eventually converted into an app to help people improve their basketball skills. Currently, there’s only a good UI base because I haven’t started the full functionality yet. I plan on, hopefully, adding a new training section twice every week, or just weekly if that’s what works. Attached is the home page where the user inputs their info to get a baseline for training rigor.
Devlog #2 So instead of generating a baseline based off of just personal bio-data, the user goes through a series of drills to see where they stand at currently. They have to practice threes, mid-rangers, layups, and practice some ball-handling drills. Based off of these beginning stats, it generates their current overall and saves their stats to be used later. Right now this is the only main thing that works and based off of this I’m gonna generate a training regime that best fits them mainly off of these stats. Other than that, the user is also able to input their shot diet on the training screen which basically tells the computer what they do when they have the ball. For example, they shoot threes 15% of the time, mid-rangers 35%, layups 40%, and handle the ball via dribbling 10%. Attached is a sample results page after the user finishes their baseline.
Devlog 3 So much has happened since. Now that the user has a baseline that they can be compared against, the initial training algorithm has been created! Right now it’s mainly based off of repetition and the user should continuously practice the same stuff they did within the baseline. This is simply the initial algorithm because based off of the baseline, the algorithm finds the weakest area and applies percentages to each are so you practice weak ones more than others. As you can see from the provided image: I have to practice specific ball handling and then if I don’t reach the amount, I have to tag a miss and it gives a cue on what you can do to fix that. Eventually, after this keeps growing, it’ll give specific drills that help instead of repetition. However, I will likely ship after this to see what people think of this so far and we’ll go from there.
Devlog #4 I did my usual project UI overhaul like I always need to usually. I usually let Claude generate the UI just so I can see stuff on the screen when I code the actual logic, and then inevitably forget I did that when I go to ship, but I have attempted to revert most of that back while still maintain the basketball theme. I personally think it looks pretty good now, I made all of the text bigger, made the buttons and most elements on the screen more visible. I also added a hover effect on most elements to give it an orange glow, this will eventually be converted to fully-mobile friendly(currently it works just doesn’t look good) but I still really enjoy it. Other than that there weren’t any logic changes, just felt the need to showcase what the site looks like right now as I spent a large amount of time updating the UI. Enjoy!
Devlog #5 Unfortunately, no new coding was done because I ran into multiple errors that took a lot of time trying to fix. I’m not actually sure what happened, but my files were messed up and the file structure internally broke down. Luckily, it’s all fixed now, so I thought I’d post this small devlog so I can reset my hours and post a new one when I start working on the drill features, without the 10 hour limit worrying me. Other than that, the UI of the app remains unchanged.
Devlog #6 New Feature! Drills are now a new feature that are still a small work in progress, but the initial testing is complete so though I’d post about it here. Essentially before all you could do was practice repetitive actions without actually working on how to improve it. Now with drills, after you’ve done some sessions to see how you’re performing, this will gauge where you’re usually messing up and provide drills to improve. Now these drills will help improve a specific part of the misses you tagged earlier. The flow that I’m going for here is you practice specific shot types and tag misses, complete drills to help said misses, and improve your skills over time! I’m still working on specific drills to add, along with descriptions so the user knows how to perform them. Attached is how it currently looks on the training screen, the session screen is still a work in progress. Note: some feedback given from initial ship will be adressed in next devlog, assuming I get around to it. Once this drill functionality is working and some feedback is adressed, there will most likely be another ship. Enjoy!
Devlog #7 Drills have been incorporated successfully! The user can now properly use this app to actually improve I think. Rather than repeatedly doing the same thing, they can do specific drills to improve their skills. This has the same display as the handling and shooting session log only difference is this doesn’t affect any of the calculations associated with you. These drills are simply a means to improve your handling and shooting skills which thereby affect your percentages. The drills tell you what to complete along with a suggested rep/time count but even if you log more/less it only affects you and not the internal algorithm. Other change made was based off of the first recommendation by adding metric units. This has also been added, you choose at the start and can update at any time via the settings page. Internal calculations still use inches, but the display will show metric in case anyone is looking at what data is being stored. Enjoy!
Devlog #8 I’ve started working on the GameIQ section, except nothing with the Ui yet. I’ve been trying to get the internal logic to work and it’s being a bit weird. I’m trying to see if there’s a way to get a large question bank of answers without using an API to route to questions. Other than that, the main premise of GameIQ is you’ll be given a situation and you have to make the correct read out of 4 options, basically a quiz which you can opt out of anytime. Once that’s integrated as simply a base functionality, I hope to make it specific to the drills the user is actively working on to further test their skills. But again, not much works right now, it’s just some base logic with not much else.
Devlog #9 GameIQ is still a work in progress right now, but the second ship reviews came in so I’m planning on making this a larger ship with more than just that. A big recommendation was drill tutorials so I might integrate a separate YouTube channel and provide links to the drills so people know how to do them, or find something online who knows. Also people said to add some animations to the actual site so I will probably add that as well. Despite the 3.5 hours in this devlog, I still couldn’t find a viable API source for the GameIQ, or maybe I’m not looking hard enough lol. I’m still going to try to find some alternative instead of hard-coding situations because I don’t know how many I’ll be able to do. But, I know for sure that some suggestions from past ships will be integrated within the next ship. Thank you for all the feedback so far, it’s been great reading them and planning out what more to do with this project!
Devlog #10 A sad devlog, but a necessary one, GameIQ has been removed and will not be a feature any longer. I wasn’t able to find an efficient way to add in multiple situations unless I gave a paragraph of information instead of an image describing the situation. Perhaps I will be able to find a workaround with play-drawing section, but I’ve also realized that most people will not use this to play professional basketball games in any regard(high school or rec league), and will use it for pickup most likely. I will be focusing my attention on adding features that were recommended from previous ship reviews. I apologize for anyone reading these devlogs waiting for GameIQ to be a feature, it has been removed now. I am sorry.
Devlog #11 New Feature? I don’t know if mobile integration really counts as a new feature but I’m counting it anyway. This makes it easier to train as it is no longer necessary to be huddled around a laptop, entering your data. The new styles make it easier to navigate throughout the site on your phone. I know in my very first devlog I said I want to make a mobile app, but I think making a website work well on a phone also serves that need. Nothing has changed with the way data is handled, the main thing I worked on here was CSS styling in the new media set. These were hours well spent on making the site look good on a phone, so I hope you all enjoy it. My next goal is to add animations to the CSS, whether that’s new elements or just simple, quick navigation I don’t fully know yet. I will also be postponing the drill tutorials to a later date, I want to get another ship this week(I like having each ship have only a few unique features added, it helps me get feedback in bits rather than on everything), and I will likely not have the time to research online drill images or make them myself. Otherwise, I’ve had a lot of fun continuing this project so I hope you guys like this new style as much as I do. Attached is the recreation of mobile styles using Chrome Dev Tools, I didn’t want to type this all on my phone. Enjoy!
Devlog #12 Animations are here! Admittedly, there aren’t too animations, mainly because the one I saw online aren’t sites where the user is constantly interacting, their mainly shops or display sites, like WebOS. However, they are here now and I feel that they’re subtle, but still look nice on the screen. I especially like the pulse effect on the baseline screen when you increase, or decrease, your made shots. A ship will follow this devlog, so as always, please give all feedback that you can think of, specifically features which you want added that could improve this. I anticipate my next feature to be a calendar/streak system of sorts, giving the user visual cues on their progress. I have not forgotten about the drill tutorials, it’s just that it’s a bit more complicated and I like showing off progress periodically, not just once at the end. Hope you all enjoy!
Devlog #13 Current Events I have started working on implementing a calendar and streak feature. I want to make it similar to stardance’s so that you can see what you worked on that specific day. Essentially, I’ll be adding another tab called history and input information there so they can see their streaks, recent drills, and progress over time. What’s Coming Up None of the UI has been integrated, but that doesn’t mean the backend is finished either. I was experimenting with how exactly the calendar works and how it might look within the UI. Game Plan I plan on slowly integrate the UI with the tab and only show the calendar and streaks at first once that starts working, and then work towards displaying the drill history. Thank you to whoever mentioned formatting devlogs properly in ship review! This makes it a lot easier to read.
Devlog #13 Current Events Decided to add the screen itself to the UI so it’s easier to update these logs with progress as it occurs. On the backend, I realize I have been storing drill sessions anyway, just wasn’t displaying them so that’s a pretty big timesave. Along with that, the calendar is still a work in progress, just doing some testing to see how exactly it works along with how the streak will play into that. What’s Coming Up I’d expect a UI update shortly with multiple elements on the screen, maybe not fully functional right away, but in the intial working phase if that makes sense. Game Plan Add calendar and streak elements on screen with functionality – I’ll need some time to test if the days are tracked correctly. After that, it’ll be simply integrated session logs onto the screen
Devlog #14 Current Events Calendar is basically fully functioning! Hasn’t been integrated in the UI yet like I hoped it would be, but I got it working the way I wanted it to with the user able to see their progress in a quick snapshot. Really happy to see this working now as it’s been a asked feature in past ships What’s Coming Up The UI update will definitely be what’s coming up next. I know this was mentioned last devlog, but instead I got it close to fully working and now will be adding the interface. Game Plan Adding the UI on the screen so it fully works, and then switching over to the backend part of the session history
Devlog #16 Current Features UI update is finally here! Finally got this working after a lot of trial and error with the display and making it show up with the proper date. The best part is it also looks great with the mobile without any extra styling so even better for me! What’s Coming Up Still want to add more functionality to the calendar specifically such as clicking to see your exact work, hovering to see basic title overview, and just general user interactivity. Game Plan Most of the above changes go along with how I stored data anyway, so I’m not behind in any regard. I plan on adding the above changes first, before deciding what else there is to add in relation to this.
Devlog #17 Current Features Started to work on the hover/pressing functionality. I’ve decided to simply combine the two functionalities into one, but I’m struggling to find the best way to display it on the screen. Basically, the user should be able to tap the day they worked on something, and see what exactly they did What’s Coming Up I was mainly testing with the backend part of this within these hours and will push a UI update to reflect these changes within the coming days hopefully. Other than that, I want to hopefully add a feature where they see the exact percentage boost they got by doing a task if I have the correct data to hold that. Game Plan Add UI features as mentioned above, switch gears to working on backend part of progress updates, and see how the app looks like then. Note: I had to reset data to test the UI, hence why my streak isn’t the 2 days including yesterday:)
Devlog #18 Current Features Drill panel is here! Took a lot of effort to get working because accessing data from the same project is hard 😭. It wasn’t hard to access the drill history itself, but the way I was storing it was based on ID numbers and not drill names(something that was never actually stored) which made it hard to show on screen. I think it looks really good on the screen, and it’s intuitive to access via the calendar, click on the day. What’s Coming Up Right now it only shows what exactly you did, and your performance their specifically. However, I want to make it so that the user can easily see the misses they tagged as well, providing an all encompassing way of accessing all their history within this app. Obviously my app uses the data to give them drill suggestions, but the user should be able to see their history and make their own trends based on what they see. Game Plan I’ll be spending the next chunk of this trying to get that working: backend functionality, styling on screen, updating day to day, stuff like that. After that I’ll try to incorporate some animations in that and unless I think of other major changes, there will be another ship hopefully.
Ships:
I made a basketball training app that will help people train their basketball skills. The challenging part within making this app was finding out what skills are important to test out. Obviously shooting is the main aspect of basketball, but it’s also important to practice ball control. After that, there was challenges it creating specific algorithms to test those skills that provide an even split across the categories. I’m most proud of how the shot diet and baseline work together to create a unique training experience so you specifically work on categories that help YOUR play style, rather than a generic one. When testing this project, all data is saved locally so progress doesn’t save between devices(this is only laptop friendly right now, sorry) and inactivity may make your browser clear the data if that’s something you have enabled(Safari does this a lot). Other than that, I’m really excited to get any feedback on this whatsoever considering there is a lot more I plan to add to this. Enjoy!
I made a basketball training app that will help people train their basketball skills. A challenging part for this part was finding specific drills that improved the skillset that I had created. Also the metric to imperial conversion had a finicky error which took a lot longer to fix, but it’s here now so great! I’m proud that the drills remain personalized like the other training parts as they target where you have logged you are weak at. I feel training sites are best when the user knows where they struggle and needs a medium to improve. When testing this project, data is saved locally so progress doesn’t save between devices(this is only laptop friendly right now, sorry) and inactivity may make your browser clear the data if that’s something you have enabled(Safari does this a lot). Also note that when viewing the GitHub, I’m working on this with branches so view the “feature/training-adjustments” branch to see current committed changes, they’re not merged on main yet. Other than that, this is the second ship so some feedback was incorporated, but same as before, this app will continue to be expanded upon so all feedback is good feedback. Enjoy!
I made a basketball training app that will help people train their basketball skills. The hardest part in this ship was probably finding the best way to integrate mobile into this. I really don’t like styling, and it took really long to figure out correct widths, until I realized viewport widths which made life so much easier and correctly take up the space you need. I’m most proud of the animations that have now been integrated within the site. They’re pretty basic, but I do think they add enough flavor to the app to make it a little bit more enjoyable, which is always a nice touch. When testing this project, data is saved locally so progress doesn’t save between devices and inactivity may make your browser clear the data if that’s something you have enabled(Safari does this a lot). Also note that when viewing the GitHub, I’m working on this with branches so view the “feature/training-adjustments” branch to see current committed changes, they’re not merged on main yet. This is the third ship for this project, and I anticipate more to come so all feedback is appreciated. Enjoy!...
|
1792878565.47188
|
1793742565.47188
|
|
22325
|
NaOs by @Phonemi | Stardance
|
Phonemi
|
3
|
116.0
|
1730
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-09T20:49:35Z", "hours": 80.0, "multiplier": 19.49, "payout": 1568, "blessing": "neutral", "text": "NaOS [+_+] NaOS is short for Not an Operating System (it’s cool because Naos is also one of the hottest and most luminous stars you can see with the naked eye) in my project i tried to make the WebOS feel like a normal os that you can daily drive, that’s why there is no fancy feature that just advertises my os (makes no sense if you want something usable) all the features of my os: a bar (clock, launcher, applications, shutdown menu, sound and workspaces) sound effects (some of them are self recorded) a calendar (next to it is the notification overview) notifications app launcher (you can also change settings from the launcher, you have to type > for that) – widgets (you can code infinite ones, but if you don’t there are 2): todo widget (a todo list, you can add counters for things like hours of sleep or drink water, or normal check marks) clock (just a normal clock) – applications (also infinite if you code, but if not there are 12): terminal (34 commands, its own filesystem, nano for editing) files (to browse the virtual filesystem) code (text editor, saves to the filesystem or downloads, you can also compile your code (like 30 programming languages) and interpret it too, clone from github, and if you name a file .window or .widget it becomes an application or a widget (they are html files)) browser (web search, image search, page proxy, downloads into the filesystem. info: youtube is not working, the rest should be fine. you can use google (or bing if you want, but nobody wants to use bing anyway)) paint (draw on a canvas, save into the filesystem or download) viewer (look at wallpapers and anything you drew or downloaded, set any as background) monitor (btop style, real load and fps graphs, memory, filesystem stats, open windows) calculator (just a calculator) snake (it’s snake, not much) settings (change your config, kinda useless because you can do all of it better in my config files) config files pets (easter egg + new AI, you can click to pet them, they won’t leave the white glow) – the stuff that makes it feel like a real wm: 3 window manager layouts: normal (floating windows you drag and resize), hyprland (dwindle tiling, every new window splits the focused one) and niri (scrollable columns) — switch in settings, the terminal or with a keybind 4 workspaces you can switch between and throw windows across, plus an overview windows snap to the edges and you can open multiple instances of the same app a lock screen boot and shutdown animations break reminders (look away from the screen) and drink reminders keybinds dark and light mode self drawn icons very clean closing, hiding and fullscreen animations and it does not run on vercel, it runs on my school’s kubernetes cluster hope you like it [-_-]", "repo": "https://github.com/Phonokles/NaOS", "demo": "https://buyers-russia-investigation-expires.trycloudflare.com/"}, {"ship_num": 2, "ts": "2026-07-17T21:37:17Z", "hours": 16.0, "multiplier": 10.17, "payout": 162, "blessing": "neutral", "text": "This WebOS was made to improve real life. It’s really comfortable and has cool colors, fonts, etc. It has apps: calc, folders, code, terminal, snake, todo, and settings - all resizable and movable. There are pets on your bar. There are WMs (Window Managers), fully movable and resizable widgets (clock and todo), workspaces, and overviews (the overview depends on the WM). There’s a top bar with shutdown, a calendar, and the workspaces. Popups remind you to drink. New features for WebOS2, missions are: the WMs the movable and resizable widgets (including the clock widget) desktop overview (2 different variants) a RAM file system new terminal commands Snake game popups (the drink one)", "repo": "https://github.com/Phonokles/NaOS", "demo": "https://buyers-russia-investigation-expires.trycloudflare.com/"}, {"ship_num": 3, "ts": "2026-07-01T13:30:16Z", "hours": 20.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Get a life WebOS: It’s a web OS which runs smooth and clean its made to make your life a better one (but that’s contradictory, because you’re a loser(Programmer)) but there is a widget which helps you to do your daily to do’s there is a calc(calc is slang for calculator btw), a calendar, terminal and a settings app. You can click on the icons on the Taskbar to open the applications. On the top bar there is a clock and the date if you click on them a calendar pops up which is not draggable same if you press on the power button there is a pop up which allows you to lock, reboot and shutdown the OS On the bar there are animals but don’t put more than 4 on it or something terrible is going to happen. There is an Akita, a Panda and a Fox which only move on the taskbar which follows your cursor. On the top right you can find numbers. They indicate the workspace you’re currently on and if you press on a other number which is not marked, you switch to the workspace. Hope you all like it!", "repo": "https://github.com/Phonokles/NaOS", "demo": "https://buyers-russia-investigation-expires.trycloudflare.com/"}]...
|
[{"post_id": 43505, "ts": "202 [{"post_id": 43505, "ts": "2026-08-08T20:29:14Z", "hours": 8.4136, "text": "last devblog[+_+] so this is the last devblog on the project and here are my last changes I rebranded from get a life WebOS to Na-Os(it is the brightest star in the northern hemisphere) and it is Not an Os i fixed a lot of bugs espacialy when it comes to compiling and searching images it now runs on my schools kubernetes cluster instead of vercel because i used all my vercel limits and i will put a custom sub domain on it tomorow to and it uses a cloud flare tunnel so it was a fun journee never thought that i am gona work over a 100h on this project but yea and i think i did a great job at trying to make it work just like a normal os hope you like it and if you like the project my other ones are cool to so take a look at those[-_-]"}, {"post_id": 41852, "ts": "2026-08-06T10:12:56Z", "hours": 8.2286, "text": "infinite apps backgrounds and widgets[+_+] so i made if you name a html file .window i will pop up as a window and work as a app and also get displayed in the search and if you name a html file .widget it becoes a fully functionale widget also displayed in the settings you can also download images now through the browser so there is a image option and you can download images there and also you can now download files generaly though the browser and you can now clone project from github and also commit through my webos hope you like it[-_-]"}, {"post_id": 39408, "ts": "2026-08-02T11:03:39Z", "hours": 8.1969, "text": "extreme ui changes[+_+] new launcher look aplications reworked: (code, files, paint, browser) icons now work great because i converted them to pngs you can change bar position (no fox and widget bugs) you can change bar and window transparincy new top window design a bit cleaner and a new settings menu plus settings icon browser and todo ando overview bug fixes and redisign hope you like it[-_-]"}, {"post_id": 39109, "ts": "2026-08-01T20:21:45Z", "hours": 5.2419, "text": "the interpreter is working yay[+_+] so this interpreter finaly works front end and you can now execute most py programms i will need to do some things to help you to execute all programm but for that i ned to host this project on a local server so i will do that in the future but not now hope you like it[-_-]"}, {"post_id": 38698, "ts": "2026-08-01T06:53:16Z", "hours": 9.0414, "text": "so i added a compiler to my webos[+_+] in my webos your are now able to execute any file tha you created in the code editor or the ones who sit on your virtual file system they perfectly run in the terminal without any problems to execute them just press the run button or execute the comand it was a bit complicated but a lot of fun hope you like it[-_-]"}, {"post_id": 37671, "ts": "2026-07-30T15:52:02Z", "hours": 2.265, "text": "you can now execute html files in the browser that was pretty easy so you can create a html file with your folder app or with the code app and execute it. it works great and without any problems hope you like it[-_-]"}, {"post_id": 37592, "ts": "2026-07-30T12:57:00Z", "hours": 4.3206, "text": "i think the browser is finished[+_+] the browser can now search the web its not the best search but i am happy with it you can open most websites youtube doas not work but if you have a playing tab so a vid which is not directly in youtube it works some other websites block you to but most of them work (i am so happy i am finished with that shit i had so many burnouts) hope you like it[-_-]"}, {"post_id": 37369, "ts": "2026-07-30T01:14:43Z", "hours": 4.5939, "text": "Browser is kinda working you can now open most websites unfotunatly not youtube or search engins like bing or duck duck they block you because vercel is a data center i am working on the fix for that but its working great and is preaty cool sry if my code is not the best and also my time (i didnt sleep for 2 days to code) so i will tr to if x it in this night and then rest a bit hope you like it"}, {"post_id": 36870, "ts": "2026-07-29T06:53:16Z", "hours": 6.7442, "text": "i added a Browser(but its shitti like most online browsers)[+_+] i added a browser with wiki search and you can open wikipedia articles unfortunatly nothing else i am workin on that right now i needed a bit longer because i worked through the night and was realy tiered hope you like it[-_-]"}, {"post_id": 36642, "ts": "2026-07-28T21:10:39Z", "hours": 4.7825, "text": "i added icons and sound effects and a new animal bot with new fetures[+_+] so there are icons right now they are a bit buggy but i will fix that there are sound effects which are realy bad but hope thats ok and a sound settings menu and a slider the animals dont overlap that often animore and you can pet them and in the end i fixed the ram bug in the drawing app earlyer when you risized your window it wouldonly load evrthing you see in the ram but thats fixed now hope you like it[-_-]"}, {"post_id": 35993, "ts": "2026-07-27T19:55:23Z", "hours": 3.6594, "text": "cool closing hiding and fullscreen animation [+_+] its hard to explain just watch the video hope you like it[-_-]"}, {"post_id": 35844, "ts": "2026-07-27T15:21:40Z", "hours": 5.9306, "text": "So now new changes are online (design rework)[+_+] the launcher looks acceptable now you can see it in a picture below the drawing app looks prety good now to and there is a galary took some insperations from procreate for the layout there is no top bar anymore i thought it was anoying to have 2 bars and it looks better know only 3 apps displayed and if you open a app it doas get displayed you can hover over them to see the windows i removed no fetures there is no welcome screen anymore and you boot directly but there is a welcome app which is prety clean i am working right now on better closing hiding and fulscreen animation, bug fixes, that you can pet pets, a browser where you can download pngs, executable programs and a rework for the pet death easter egg, and sound effects. hope you like it[-_-]"}, {"post_id": 35482, "ts": "2026-07-26T23:05:57Z", "hours": 9.0283, "text": "3 new apps key binds and launcher but all in beta[+_+] so i made 3 new apps paint: where you can paint in and save the image in the ram filesystem or localy but i am still woking on it imageviewer: shows all the image on your desktop and you can also put anything as your background now btop: a fake system where you can see what needs how much power etc mostly fake and random values i added keybinds so you can open up epplicaions per keybinds and do other cool stuff i also added a launcher but its realy ugly so i am working on a 3 redisign but everthing is a bit ugg thats why you cant try out the new fetures sry even though i hope you like it"}, {"post_id": 30090, "ts": "2026-07-17T12:04:52Z", "hours": 4.0786, "text": "i added a desktop overview and a snake game[+_+] i added a desktop overview diferent depending on your wm in hyprland and desktop you have the basic windows 11 overview i think or macos idk and if you chose niri you have the niri desktop overview wich expandes in 2 dimensions and there is a super dupper cool snake game which absulutly works totaly fine. idk know why but my ram file system broke like 1000 times so i fixed that to hope you like it[-_-]"}, {"post_id": 28967, "ts": "2026-07-15T16:16:02Z", "hours": 3.3625, "text": "I added window tiling Managers[+_+] so now there are window tiling manager there is the default (but that is boring)and there is hyprland and niri i dont want to describe them so just watch the video or google it hope u like it [-_-]"}, {"post_id": 28472, "ts": "2026-07-14T18:40:40Z", "hours": 5.9744, "text": "NEW WIDGET AND A FILE SYSTEM[+_+] i added a clock widget with also a liquid glass lok and a supper cool file system that work just like on a normal pc but only on ram you can also resize the widget hope you like it[-_-]"}, {"post_id": 27799, "ts": "2026-07-13T17:51:33Z", "hours": 0.5594, "text": "i changed the color theme a it it looks a lot better"}, {"post_id": 26092, "ts": "2026-07-10T17:56:26Z", "hours": 2.0528, "text": "i added a drink notifiation thee will be more in the future"}, {"post_id": 19471, "ts": "2026-06-30T20:03:23Z", "hours": 1.9661, "text": "I added a lot of things (I don’t know why, but Hackatime didn’t work properly, so it only shows 2 hours. I actually worked around 4–5 hours).There are now multiple pets, a to-do list, a terminal, a code editor, a calculator, and a to-do widget.I also added a little easter egg: if you put more than 4 animals in there, they’ll explode. (I’m still working on the crashout page after that, as well as voice acting and sound effects in general.)There are workspaces now too. Hope you like it!"}, {"post_id": 19171, "ts": "2026-06-30T13:00:15Z", "hours": 2.3544, "text": "I changed a few things, made the calendar a bit shorter, and also added a settings app where you can change background images and switch between light and dark mode. I also added a few new SVGs (grabbed online)."}, {"post_id": 17737, "ts": "2026-06-28T17:33:28Z", "hours": 3.3497, "text": "i added a button on the top bar where you can lock shutdown and reboot with cool animation(i am proud of the lock on sry for the bad quality my laptop is broken so i have to use the old Budget ubuntu laptop of my father)"}, {"post_id": 17488, "ts": "2026-06-28T09:15:18Z", "hours": 2.0619, "text": "now there is a top bar with time and a calendar. i will be focusing on more pets and some calender applications and widgets"}, {"post_id": 17191, "ts": "2026-06-27T22:01:38Z", "hours": 2.7978, "text": "This time i made a boot screen with a checklist of things loading, as well as the rough desktop, for which i added a wallpaper and the fox from the welcome page. That’s all for this devlog, hope you like it, see you next time!"}, {"post_id": 17008, "ts": "2026-06-27T16:34:05Z", "hours": 5.7586, "text": "For the welcome screen, I added a cute little fox and made a button about me, which I made a little bit cleaner since it was somewhat ugly before. I took the fox animations from the VS-Pets vscode extension, but I coded functions myself. For example I made it so that the fox starts moving on its own after 5 seconds of inactivity and it always stays on the green platform which follows the mouse cursor. It also always has a chance to start running and a chance to lie down. The next devlog will be about a boot screen and a desktop. Hope you guys like it!"}, {"post_id": 12080, "ts": "2026-06-19T18:30:34Z", "hours": 1.9469, "text": "i added a welcome screen"}]...
|
Title: NaOs by @Phonemi | Stardance
Devlogs:
i ad Title: NaOs by @Phonemi | Stardance
Devlogs:
i added a welcome screen
For the welcome screen, I added a cute little fox and made a button about me, which I made a little bit cleaner since it was somewhat ugly before. I took the fox animations from the VS-Pets vscode extension, but I coded functions myself. For example I made it so that the fox starts moving on its own after 5 seconds of inactivity and it always stays on the green platform which follows the mouse cursor. It also always has a chance to start running and a chance to lie down. The next devlog will be about a boot screen and a desktop. Hope you guys like it!
This time i made a boot screen with a checklist of things loading, as well as the rough desktop, for which i added a wallpaper and the fox from the welcome page. That’s all for this devlog, hope you like it, see you next time!
now there is a top bar with time and a calendar. i will be focusing on more pets and some calender applications and widgets
i added a button on the top bar where you can lock shutdown and reboot with cool animation(i am proud of the lock on sry for the bad quality my laptop is broken so i have to use the old Budget ubuntu laptop of my father)
I changed a few things, made the calendar a bit shorter, and also added a settings app where you can change background images and switch between light and dark mode. I also added a few new SVGs (grabbed online).
I added a lot of things (I don’t know why, but Hackatime didn’t work properly, so it only shows 2 hours. I actually worked around 4–5 hours).There are now multiple pets, a to-do list, a terminal, a code editor, a calculator, and a to-do widget.I also added a little easter egg: if you put more than 4 animals in there, they’ll explode. (I’m still working on the crashout page after that, as well as voice acting and sound effects in general.)There are workspaces now too. Hope you like it!
i added a drink notifiation thee will be more in the future
i changed the color theme a it it looks a lot better
NEW WIDGET AND A FILE SYSTEM[+_+] i added a clock widget with also a liquid glass lok and a supper cool file system that work just like on a normal pc but only on ram you can also resize the widget hope you like it[-_-]
I added window tiling Managers[+_+] so now there are window tiling manager there is the default (but that is boring)and there is hyprland and niri i dont want to describe them so just watch the video or google it hope u like it [-_-]
i added a desktop overview and a snake game[+_+] i added a desktop overview diferent depending on your wm in hyprland and desktop you have the basic windows 11 overview i think or macos idk and if you chose niri you have the niri desktop overview wich expandes in 2 dimensions and there is a super dupper cool snake game which absulutly works totaly fine. idk know why but my ram file system broke like 1000 times so i fixed that to hope you like it[-_-]
3 new apps key binds and launcher but all in beta[+_+] so i made 3 new apps paint: where you can paint in and save the image in the ram filesystem or localy but i am still woking on it imageviewer: shows all the image on your desktop and you can also put anything as your background now btop: a fake system where you can see what needs how much power etc mostly fake and random values i added keybinds so you can open up epplicaions per keybinds and do other cool stuff i also added a launcher but its realy ugly so i am working on a 3 redisign but everthing is a bit ugg thats why you cant try out the new fetures sry even though i hope you like it
So now new changes are online (design rework)[+_+] the launcher looks acceptable now you can see it in a picture below the drawing app looks prety good now to and there is a galary took some insperations from procreate for the layout there is no top bar anymore i thought it was anoying to have 2 bars and it looks better know only 3 apps displayed and if you open a app it doas get displayed you can hover over them to see the windows i removed no fetures there is no welcome screen anymore and you boot directly but there is a welcome app which is prety clean i am working right now on better closing hiding and fulscreen animation, bug fixes, that you can pet pets, a browser where you can download pngs, executable programs and a rework for the pet death easter egg, and sound effects. hope you like it[-_-]
cool closing hiding and fullscreen animation [+_+] its hard to explain just watch the video hope you like it[-_-]
i added icons and sound effects and a new animal bot with new fetures[+_+] so there are icons right now they are a bit buggy but i will fix that there are sound effects which are realy bad but hope thats ok and a sound settings menu and a slider the animals dont overlap that often animore and you can pet them and in the end i fixed the ram bug in the drawing app earlyer when you risized your window it wouldonly load evrthing you see in the ram but thats fixed now hope you like it[-_-]
i added a Browser(but its shitti like most online browsers)[+_+] i added a browser with wiki search and you can open wikipedia articles unfortunatly nothing else i am workin on that right now i needed a bit longer because i worked through the night and was realy tiered hope you like it[-_-]
Browser is kinda working you can now open most websites unfotunatly not youtube or search engins like bing or duck duck they block you because vercel is a data center i am working on the fix for that but its working great and is preaty cool sry if my code is not the best and also my time (i didnt sleep for 2 days to code) so i will tr to if x it in this night and then rest a bit hope you like it
i think the browser is finished[+_+] the browser can now search the web its not the best search but i am happy with it you can open most websites youtube doas not work but if you have a playing tab so a vid which is not directly in youtube it works some other websites block you to but most of them work (i am so happy i am finished with that shit i had so many burnouts) hope you like it[-_-]
you can now execute html files in the browser that was pretty easy so you can create a html file with your folder app or with the code app and execute it. it works great and without any problems hope you like it[-_-]
so i added a compiler to my webos[+_+] in my webos your are now able to execute any file tha you created in the code editor or the ones who sit on your virtual file system they perfectly run in the terminal without any problems to execute them just press the run button or execute the comand it was a bit complicated but a lot of fun hope you like it[-_-]
the interpreter is working yay[+_+] so this interpreter finaly works front end and you can now execute most py programms i will need to do some things to help you to execute all programm but for that i ned to host this project on a local server so i will do that in the future but not now hope you like it[-_-]
extreme ui changes[+_+] new launcher look aplications reworked: (code, files, paint, browser) icons now work great because i converted them to pngs you can change bar position (no fox and widget bugs) you can change bar and window transparincy new top window design a bit cleaner and a new settings menu plus settings icon browser and todo ando overview bug fixes and redisign hope you like it[-_-]
infinite apps backgrounds and widgets[+_+] so i made if you name a html file .window i will pop up as a window and work as a app and also get displayed in the search and if you name a html file .widget it becoes a fully functionale widget also displayed in the settings you can also download images now through the browser so there is a image option and you can download images there and also you can now download files generaly though the browser and you can now clone project from github and also commit through my webos hope you like it[-_-]
last devblog[+_+] so this is the last devblog on the project and here are my last changes I rebranded from get a life WebOS to Na-Os(it is the brightest star in the northern hemisphere) and it is Not an Os i fixed a lot of bugs espacialy when it comes to compiling and searching images it now runs on my schools kubernetes cluster instead of vercel because i used all my vercel limits and i will put a custom sub domain on it tomorow to and it uses a cloud flare tunnel so it was a fun journee never thought that i am gona work over a 100h on this project but yea and i think i did a great job at trying to make it work just like a normal os hope you like it and if you like the project my other ones are cool to so take a look at those[-_-]
Ships:
Get a life WebOS: It’s a web OS which runs smooth and clean its made to make your life a better one (but that’s contradictory, because you’re a loser(Programmer)) but there is a widget which helps you to do your daily to do’s there is a calc(calc is slang for calculator btw), a calendar, terminal and a settings app. You can click on the icons on the Taskbar to open the applications. On the top bar there is a clock and the date if you click on them a calendar pops up which is not draggable same if you press on the power button there is a pop up which allows you to lock, reboot and shutdown the OS On the bar there are animals but don’t put more than 4 on it or something terrible is going to happen. There is an Akita, a Panda and a Fox which only move on the taskbar which follows your cursor. On the top right you can find numbers. They indicate the workspace you’re currently on and if you press on a other number which is not marked, you switch to the workspace. Hope you all like it!
This WebOS was made to improve real life. It’s really comfortable and has cool colors, fonts, etc. It has apps: calc, folders, code, terminal, snake, todo, and settings - all resizable and movable. There are pets on your bar. There are WMs (Window Managers), fully movable and resizable widgets (clock and todo), workspaces, and overviews (the overview depends on the WM). There’s a top bar with shutdown, a calendar, and the workspaces. Popups remind you to drink. New features for WebOS2, missions are: the WMs the movable and resizable widgets (including the clock widget) desktop overview (2 different variants) a RAM file system new terminal commands Snake game popups (the drink one)
NaOS [+_+] NaOS is short for Not an Operating System (it’s cool because Naos is also one of the hottest and most luminous stars you can see with the naked eye) in my project i tried to make the WebOS feel like a normal os that you can daily drive, that’s why there is no fancy feature that just advertises my os (makes no sense if you want something usable) all the features of my os: a bar (clock, launcher, applications, shutdown menu, sound and workspaces) sound effects (some of them are self recorded) a calendar (next to it is the notification overview) notifications app launcher (you can also change settings from the launcher, you have to type > for that) – widgets (you can code infinite ones, but if you don’t there are 2): todo widget (a todo list, you can add counters for things like hours of sleep or drink water, or normal check marks) clock (just a normal clock) – applications (also infinite if you code, but if not there are 12): terminal (34 commands, its own filesystem, nano for editing) files (to browse the virtual filesystem) code (text editor, saves to the filesystem or downloads, you can also compile your code (like 30 programming languages) and interpret it too, clone from github, and if you name a file .window or .widget it becomes an application or a widget (they are html files)) browser (web search, image search, page proxy, downloads into the filesystem. info: youtube is not working, the rest should be fine. you can use google (or bing if you want, but nobody wants to use bing anyway)) paint (draw on a canvas, save into the filesystem or download) viewer (look at wallpapers and anything you drew or downloaded, set any as background) monitor (btop style, real load and fps graphs, memory, filesystem stats, open windows) calculator (just a calculator) snake (it’s snake, not much) settings (change your config, kinda useless because you can do all of it better in my config files) config files pets (easter egg + new AI, you can click to pet them, they won’t leave the white glow) – the stuff that makes it feel like a real wm: 3 window manager layouts: normal (floating windows you drag and resize), hyprland (dwindle tiling, every new window splits the focused one) and niri (scrollable columns) — switch in settings, the terminal or with a keybind 4 workspaces you can switch between and throw windows across, plus an overview windows snap to the edges and you can open multiple instances of the same app a lock screen boot and shutdown animations break reminders (look away from the screen) and drink reminders keybinds dark and light mode self drawn icons very clean closing, hiding and fullscreen animations and it does not run on vercel, it runs on my school’s kubernetes cluster hope you like it [-_-]...
|
1792878770.693346
|
1793742770.693346
|
|
23222
|
Climate Shield by @HackerDpro | Stardance
|
HackerDpro
|
3
|
55.0
|
452
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-14T13:30:29Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Dear voters, I made “CLIMATE SHIELD”, an interactive dashboard with real-time natural disasters (focussed mostly on fires) from NASA API’s being shown. Why: I made this project because I was surprised by hearing so much fire incidents on the news, I liked the idea of being able to see all fires and data in one place and easy-to-read. I also liked the idea of using NASA data for my project, as this Stardance challenge is sponsored by NASA. During the process of creating this project, I learn a lot about how to use API’s and merge multiple APIs into one dashboard. The difference between this and the previous ship I got lots of ideas and inspirations from the previous ship. So I did my best to implement them all into this ship, some examples: A canvas tutorial that explains the basics from my page to new users. You can replay it in the TELEMETRY page! Added more sources, this way some areas that weren’t covered before have also data (although I have done my best to only use free API’s, that means that it may not contain ALL the data there currently is). In my previous ship I added another way of seeing the world (if you click on the “RECON” buttons), now it is also a map you can select as standard-view. There was a bug that I can’t explain this short (you can see more info about it in my devlogs), but I mostly fixed it! I hope you have a great day, and thanks for voting!!!", "repo": "https://github.com/HackerDpro/climate-shield", "demo": "https://climate-shield.netlify.app/"}, {"ship_num": 2, "ts": "2026-10-08T20:49:50Z", "hours": 25.0, "multiplier": 15.5, "payout": 385, "blessing": "neutral", "text": "I made a web page with NASA live data (API’s) to track natural problems around the world. CLIMATE SHIELD! I am proud of it being one of my biggest projects. I got the idea of doing this by seeing in the news all the wildfires happening right now, it was perfect timing as I was searching for ideas of what I could make for Startdance. Even though I knew there are already bunch of other sites that do this and may be 100x better than mine I just thought thta I woudl be so proud if I were able to make one myself. To be honest I did use AI, maybe a little bit too much some times. But I tried my best to participate as much as I can on the project, I know that AI shouldn’t be doing this for me. I learnt about all the back end things and API’s (I was frontend dev before but had low experience of back end, so this learnt me much too). So dear reviewer, I hope you like, enjoy and support my project as much as I do, have fun reviewing all the parts of it. If even like this my project would dissapoint you, I’d be glad to be able to get a feedback so I can make it even better! P.S. I appear to sometimes still have problems with the backend, it is hosted on the hack club Nest servers that should run 24/7 but I sometimes have connection errors with it so if the backend data doesn’t show directly after reloading the site please don’t check my project as failed, I am doing my best to make it work! Oh and yeah, I ma sorry for this looking so unstructurised but I didn’t really know how this be represented to you, if I maybe should write this the same layout as a README or a DEVBLOG", "repo": "https://github.com/HackerDpro/climate-shield", "demo": "https://climate-shield.netlify.app/"}, {"ship_num": 3, "ts": "2026-06-21T19:03:22Z", "hours": 4.0, "multiplier": 17.74, "payout": 67, "blessing": "neutral", "text": "I built Climate Shield, an AI-enhanced dashboard for global wildfire prediction. What I made: A high-performance Command Center that tracks 6,000+ real-time wildfire events. It integrates NASA satellite data with Open-Meteo elevation and OpenWeatherMap metrics to predict fire spread behaviors based on terrain and wind vectors. What was challenging: Scaling! Rendering 6k+ fires crashed my browser initially. I solved this by migrating the map engine to HTML5 Canvas for instant performance. I also had to implement an ‘on-demand’ API fetching strategy to bypass rate limits while maintaining deep-dive analytics. What I’m proud of: The ‘Terrain AI.’ By calculating elevation data in real-time, the dashboard now identifies ‘Critical Uphill Alignment’ a major factor in wildfire spread, and generates a 24-hour linear projection for dangerous outbreaks. How to test: Visit the Live Dashboard. ( https://climate-shield.netlify.app/ ) Toggle between Tactical (full data), Orbital (map focus), and Telemetry (deep analytics) modes. Click any fire marker to view specific wind, elevation, and hazard score data. Have fun discovering all the data.", "repo": "https://github.com/HackerDpro/climate-shield", "demo": "https://climate-shield.netlify.app/"}]...
|
[{"post_id": 79522, "ts": "202 [{"post_id": 79522, "ts": "2026-10-14T13:05:26Z", "hours": 6.2528, "text": "ALL BUGS SOLVED (I think) This is my last devlog before 3rd ship! It was hard but I think I have done everything my 2nd ship’s voters told me to, I am exited to see what my 3rd ship’s voters will think of my project. I am happy with how my project turned out (Although I always like people giving me ideas and inspirations for future features and more)!"}, {"post_id": 79467, "ts": "2026-10-14T05:10:56Z", "hours": 8.4911, "text": "8 hours later = BUG FIXED After 8 hours of coding later and some frustrations: I finally fixed the annoying bug that I had (more info of the bug is to be seen in my previous devlogs). I am making my final changes before shipping, fixing a new smaller bug I found recently “NASA FIRMS data not loading”. After making all these changes: the bug fix, tutorial implementation, adding new sources and merging them, … I expect my 3rd ship to be soon!!!"}, {"post_id": 78883, "ts": "2026-10-11T21:15:19Z", "hours": 5.4208, "text": "More progress with merging Today I’ve mostly made progress with the codes to merge multiple API’s into the same details pup-up. I also did my best on finding a solution for the bug that has been happening when a fire pop-up shows and it touches the top of the page and dissapears. My only solution right now is to minimize the page (“ctrl” + “-”). Come back to see tomorrow’s devlog!"}, {"post_id": 78459, "ts": "2026-10-10T20:51:07Z", "hours": 6.0917, "text": "POST-SHIP PROGRESS I’ve been working on satisfying the reviews I got from my last shipment’s voters. I have been making a tutorial for first-timers on my page, it will show the basics of how to navigate and use my Climate-Shield project, a replay will be availble in the “TELEMETRY” tab. (view picture below). I am doing my best on fixing a very annoying bug that makes the details from a fire show for a split second and dissapear. It has been hard to fix that bug for now… I am working on adding more resources so I don’t only rely on 1 API but multiple (some may have more data than others). The difficult part has been trying to merge same fires from different api’s in one fire (to not have duplicates). These are my main issues I am working on right now, tomorrow I’ll continue, have a good day!"}, {"post_id": 77931, "ts": "2026-10-08T20:33:39Z", "hours": 7.9175, "text": "After coming back to Climate Shield I found that the backend (hack club Nest) had stopped, so the dashboard could no longer load its data. I got it running again (with PM2 and systemd), then replaced the map that suddenly was asking for an API key with another one (Esri tiles). When the fires still seemed missing, I checked the live data and found 7,130 valid reports. On the new map, the markers were just too small and hard to see, so I made them bigger and with a dark outline. I then tested the Netlify page with the API and saw that everything worked. I also updated the README and wrote my use of AI assistance (I am not sure if I would’ve been able to revive the project without it)."}, {"post_id": 22753, "ts": "2026-07-05T10:28:33Z", "hours": 2.4594, "text": "I have been a bit quiet lately, here is what is happening: I am on holidays with my family in Spain, this is what is keeping my time limited. I also don’t have a desktop here so that makes working and coding a bit more difficult (I work on a 14” schoollaptop). I am working on a very big update, about adding satelite cams and nearby webcams to visualize fires and maybe other things. This is a bit harder than expected but I expect it to be done in some hours, this would be the special update for celebrating my 25 or 30 hours in total coding time. I am also trying to make the feedback recieved from the shipping true, removing some bugs users found, … If you are reading this maybe you would like to try it out, I really appreciate feedback because it helps me improve what I don’t see. https://climate-shield.netlify.app/"}, {"post_id": 16198, "ts": "2026-06-26T10:01:54Z", "hours": 8.3156, "text": "Changing to a real server & a new TACTICAL UI Added a new Dropdown menu to the TACTICAL page to filter threats by layers and fully changed the backend to the Hack Club Nest server! The biggest friction this week was dealing with my old Render backend constantly going to sleep, which made the web app feel broken to new users. I finally set up my FastAPI app with PM2 so it stays awake 24/7. On the frontend, I built a sleek new dropdown to change between Earthquakes, Floods, Storms, and Volcanoes. The hard part was getting the map layers to play nicely together, toggling the new NASA API’s kept overwriting my core 6,000+ wildfire array! I had to rewrite the logic to separate the Leaflet layers so the map can stays fast and doesn’t wipe your data when you switch views. Right now, I am still trying to fix some bugs and improving the CO2 graph, I am also planning on updating my README.md to explain the new features (better). THANK YOU FOR READING! (I am almost at 20 hours of coding omg, I may need to add a special feature for when it happens. Any ideas or improvements are really appreciated!)"}, {"post_id": 15016, "ts": "2026-06-24T12:13:11Z", "hours": 0.7833, "text": "I hit 10 hours of coding! Here is what i lately changed: I just made a clock in the Tactical page (who doesn’t need a clock). I changed the font-family to Roboto. And I also changed the colors and some styling to feel more personal (I got much comments saying that I used AI so I am currently rewriting the most of the css to feel more like me)."}, {"post_id": 14306, "ts": "2026-06-23T11:47:37Z", "hours": 1.7369, "text": "Lastly I’ve remade the whole (first section) of the README.md, no more AI is used in it. I have made some improvement on the Orbital to be able to display the extra sensors too (btw extra sensors is a new feature too, read the README.md to learn more about it). I also made a costum favicon. Right now I am gathering API’s for more data and info comming soon, and also trying to categorize the things better so my site doesn’t look too messy (to new users)."}, {"post_id": 13910, "ts": "2026-06-22T20:14:16Z", "hours": 3.6611, "text": "Here is a summary of what I added on Day 3: Orbital Engine: Implemented a 3D WebGL globe with hardware-accelerated solar shading and physical height-mapped thermal pillars. Predictive “Pre-Crime” Scanning: Created a sector-based scan that analyzes soil moisture and weather data to calculate ignition probability for any empty landmass. Tactical Evacuation Routing: Integrated the Open Source Routing Machine (OSRM) to automatically generate safe civilian escape paths based on wind direction and terrain. Multi-Hazard Sensor Array: Added specialized monitoring layers for Mudslides (soil hydrophobicity), Cyclones (SST anomalies), Volcanic Ash (stratospheric tracking), and Seismic Activity (USGS lithospheric data). Raw Radiometry Engine: Added the ability to ingest NASA MODAPS CSV data to measure physical fire intensity in Megawatts (FRP), rather than just visual location. Performance Engineering: Optimized massive dataset rendering by offloading complex physics calculations to background CPU Web Workers to ensure zero UI lag. More info in https://github.com/HackerDpro/climate-shield"}, {"post_id": 13270, "ts": "2026-06-21T18:44:58Z", "hours": 2.8814, "text": "Read the README.dm for a full resume but here is a shortened version of my day 2: I’ve hit a major milestone in the development of Climate Shield. Scaling a dashboard to handle 6,000+ live wildfire events while maintaining a responsive user interface required a total re-architecture of my data pipeline. Technical Challenges & Solutions: Performance Scaling: To prevent browser crashes, I migrated from standard map markers to an HTML5 Canvas rendering engine. This allows for thousands of data points to load near-instantly without lag. API Intelligence: To handle 6,000+ potential weather requests without triggering rate limits, I implemented an “on-demand” fetching model. Wind vectors and elevation-based terrain analytics now trigger only when a user interacts with a specific fire, ensuring the dashboard remains fast and efficient. Terrain-Aware Analytics: I integrated elevation data to model fire spread. The engine now calculates whether a fire is on a “Critical Uphill Alignment”—a major factor in real-world wildfire behavior—providing a 24-hour linear projection for the most dangerous incidents. Dashboard Evolution: I’ve evolved the UI into a true Command Center with three distinct view modes:Tactical: The default full-dashboard view.Orbital: A map-focused mode for spatial tracking. Telemetry: A high-level data engine featuring carbon flux calculations, predictive risk averages, and hazard distribution matrices. This transition from a simple map to a multi-layered predictive engine has significantly improved the tool’s utility. Whether it’s tracking global CO2 trajectories or specific uphill fire spread, Climate Shield is now a high-performance asset for wildfire visualization."}, {"post_id": 13006, "ts": "2026-06-21T08:24:12Z", "hours": 0.9553, "text": "Spent our first session setting up the entire architecture for Climate Shield. Instead of just building a static map, we built a live data bridge. We successfully connected a Python backend engine using FastAPI to NASA’s live EONET satellite network, pulling in over 6,000 active global wildfires! To bypass cloud firewalls and handle messy data, we engineered a custom data-cleaning filter. Then, we linked the coordinates to the OpenWeatherMap API to calculate real-time wind speed and direction. Right now, the frontend map isn’t just displaying fire locations—it is actively rendering dynamic Risk Vectors (yellow trajectory lines) showing exactly where the wind is driving the fire spread. Next up: building the AI hazard scoring system!"}]...
|
Title: Climate Shield by @HackerDpro | Stardance
Title: Climate Shield by @HackerDpro | Stardance
Devlogs:
Spent our first session setting up the entire architecture for Climate Shield. Instead of just building a static map, we built a live data bridge. We successfully connected a Python backend engine using FastAPI to NASA’s live EONET satellite network, pulling in over 6,000 active global wildfires! To bypass cloud firewalls and handle messy data, we engineered a custom data-cleaning filter. Then, we linked the coordinates to the OpenWeatherMap API to calculate real-time wind speed and direction. Right now, the frontend map isn’t just displaying fire locations—it is actively rendering dynamic Risk Vectors (yellow trajectory lines) showing exactly where the wind is driving the fire spread. Next up: building the AI hazard scoring system!
Read the README.dm for a full resume but here is a shortened version of my day 2: I’ve hit a major milestone in the development of Climate Shield. Scaling a dashboard to handle 6,000+ live wildfire events while maintaining a responsive user interface required a total re-architecture of my data pipeline. Technical Challenges & Solutions: Performance Scaling: To prevent browser crashes, I migrated from standard map markers to an HTML5 Canvas rendering engine. This allows for thousands of data points to load near-instantly without lag. API Intelligence: To handle 6,000+ potential weather requests without triggering rate limits, I implemented an “on-demand” fetching model. Wind vectors and elevation-based terrain analytics now trigger only when a user interacts with a specific fire, ensuring the dashboard remains fast and efficient. Terrain-Aware Analytics: I integrated elevation data to model fire spread. The engine now calculates whether a fire is on a “Critical Uphill Alignment”—a major factor in real-world wildfire behavior—providing a 24-hour linear projection for the most dangerous incidents. Dashboard Evolution: I’ve evolved the UI into a true Command Center with three distinct view modes:Tactical: The default full-dashboard view.Orbital: A map-focused mode for spatial tracking. Telemetry: A high-level data engine featuring carbon flux calculations, predictive risk averages, and hazard distribution matrices. This transition from a simple map to a multi-layered predictive engine has significantly improved the tool’s utility. Whether it’s tracking global CO2 trajectories or specific uphill fire spread, Climate Shield is now a high-performance asset for wildfire visualization.
Here is a summary of what I added on Day 3: Orbital Engine: Implemented a 3D WebGL globe with hardware-accelerated solar shading and physical height-mapped thermal pillars. Predictive “Pre-Crime” Scanning: Created a sector-based scan that analyzes soil moisture and weather data to calculate ignition probability for any empty landmass. Tactical Evacuation Routing: Integrated the Open Source Routing Machine (OSRM) to automatically generate safe civilian escape paths based on wind direction and terrain. Multi-Hazard Sensor Array: Added specialized monitoring layers for Mudslides (soil hydrophobicity), Cyclones (SST anomalies), Volcanic Ash (stratospheric tracking), and Seismic Activity (USGS lithospheric data). Raw Radiometry Engine: Added the ability to ingest NASA MODAPS CSV data to measure physical fire intensity in Megawatts (FRP), rather than just visual location. Performance Engineering: Optimized massive dataset rendering by offloading complex physics calculations to background CPU Web Workers to ensure zero UI lag. More info in https://github.com/HackerDpro/climate-shield
Lastly I’ve remade the whole (first section) of the README.md, no more AI is used in it. I have made some improvement on the Orbital to be able to display the extra sensors too (btw extra sensors is a new feature too, read the README.md to learn more about it). I also made a costum favicon. Right now I am gathering API’s for more data and info comming soon, and also trying to categorize the things better so my site doesn’t look too messy (to new users).
I hit 10 hours of coding! Here is what i lately changed: I just made a clock in the Tactical page (who doesn’t need a clock). I changed the font-family to Roboto. And I also changed the colors and some styling to feel more personal (I got much comments saying that I used AI so I am currently rewriting the most of the css to feel more like me).
Changing to a real server & a new TACTICAL UI Added a new Dropdown menu to the TACTICAL page to filter threats by layers and fully changed the backend to the Hack Club Nest server! The biggest friction this week was dealing with my old Render backend constantly going to sleep, which made the web app feel broken to new users. I finally set up my FastAPI app with PM2 so it stays awake 24/7. On the frontend, I built a sleek new dropdown to change between Earthquakes, Floods, Storms, and Volcanoes. The hard part was getting the map layers to play nicely together, toggling the new NASA API’s kept overwriting my core 6,000+ wildfire array! I had to rewrite the logic to separate the Leaflet layers so the map can stays fast and doesn’t wipe your data when you switch views. Right now, I am still trying to fix some bugs and improving the CO2 graph, I am also planning on updating my README.md to explain the new features (better). THANK YOU FOR READING! (I am almost at 20 hours of coding omg, I may need to add a special feature for when it happens. Any ideas or improvements are really appreciated!)
I have been a bit quiet lately, here is what is happening: I am on holidays with my family in Spain, this is what is keeping my time limited. I also don’t have a desktop here so that makes working and coding a bit more difficult (I work on a 14” schoollaptop). I am working on a very big update, about adding satelite cams and nearby webcams to visualize fires and maybe other things. This is a bit harder than expected but I expect it to be done in some hours, this would be the special update for celebrating my 25 or 30 hours in total coding time. I am also trying to make the feedback recieved from the shipping true, removing some bugs users found, … If you are reading this maybe you would like to try it out, I really appreciate feedback because it helps me improve what I don’t see. https://climate-shield.netlify.app/
After coming back to Climate Shield I found that the backend (hack club Nest) had stopped, so the dashboard could no longer load its data. I got it running again (with PM2 and systemd), then replaced the map that suddenly was asking for an API key with another one (Esri tiles). When the fires still seemed missing, I checked the live data and found 7,130 valid reports. On the new map, the markers were just too small and hard to see, so I made them bigger and with a dark outline. I then tested the Netlify page with the API and saw that everything worked. I also updated the README and wrote my use of AI assistance (I am not sure if I would’ve been able to revive the project without it).
POST-SHIP PROGRESS I’ve been working on satisfying the reviews I got from my last shipment’s voters. I have been making a tutorial for first-timers on my page, it will show the basics of how to navigate and use my Climate-Shield project, a replay will be availble in the “TELEMETRY” tab. (view picture below). I am doing my best on fixing a very annoying bug that makes the details from a fire show for a split second and dissapear. It has been hard to fix that bug for now… I am working on adding more resources so I don’t only rely on 1 API but multiple (some may have more data than others). The difficult part has been trying to merge same fires from different api’s in one fire (to not have duplicates). These are my main issues I am working on right now, tomorrow I’ll continue, have a good day!
More progress with merging Today I’ve mostly made progress with the codes to merge multiple API’s into the same details pup-up. I also did my best on finding a solution for the bug that has been happening when a fire pop-up shows and it touches the top of the page and dissapears. My only solution right now is to minimize the page (“ctrl” + “-”). Come back to see tomorrow’s devlog!
8 hours later = BUG FIXED After 8 hours of coding later and some frustrations: I finally fixed the annoying bug that I had (more info of the bug is to be seen in my previous devlogs). I am making my final changes before shipping, fixing a new smaller bug I found recently “NASA FIRMS data not loading”. After making all these changes: the bug fix, tutorial implementation, adding new sources and merging them, … I expect my 3rd ship to be soon!!!
ALL BUGS SOLVED (I think) This is my last devlog before 3rd ship! It was hard but I think I have done everything my 2nd ship’s voters told me to, I am exited to see what my 3rd ship’s voters will think of my project. I am happy with how my project turned out (Although I always like people giving me ideas and inspirations for future features and more)!
Ships:
I built Climate Shield, an AI-enhanced dashboard for global wildfire prediction. What I made: A high-performance Command Center that tracks 6,000+ real-time wildfire events. It integrates NASA satellite data with Open-Meteo elevation and OpenWeatherMap metrics to predict fire spread behaviors based on terrain and wind vectors. What was challenging: Scaling! Rendering 6k+ fires crashed my browser initially. I solved this by migrating the map engine to HTML5 Canvas for instant performance. I also had to implement an ‘on-demand’ API fetching strategy to bypass rate limits while maintaining deep-dive analytics. What I’m proud of: The ‘Terrain AI.’ By calculating elevation data in real-time, the dashboard now identifies ‘Critical Uphill Alignment’ a major factor in wildfire spread, and generates a 24-hour linear projection for dangerous outbreaks. How to test: Visit the Live Dashboard. ( https://climate-shield.netlify.app/ ) Toggle between Tactical (full data), Orbital (map focus), and Telemetry (deep analytics) modes. Click any fire marker to view specific wind, elevation, and hazard score data. Have fun discovering all the data.
I made a web page with NASA live data (API’s) to track natural problems around the world. CLIMATE SHIELD! I am proud of it being one of my biggest projects. I got the idea of doing this by seeing in the news all the wildfires happening right now, it was perfect timing as I was searching for ideas of what I could make for Startdance. Even though I knew there are already bunch of other sites that do this and may be 100x better than mine I just thought thta I woudl be so proud if I were able to make one myself. To be honest I did use AI, maybe a little bit too much some times. But I tried my best to participate as much as I can on the project, I know that AI shouldn’t be doing this for me. I learnt about all the back end things and API’s (I was frontend dev before but had low experience of back end, so this learnt me much too). So dear reviewer, I hope you like, enjoy and support my project as much as I do, have fun reviewing all the parts of it. If even like this my project would dissapoint you, I’d be glad to be able to get a feedback so I can make it even better! P.S. I appear to sometimes still have problems with the backend, it is hosted on the hack club Nest servers that should run 24/7 but I sometimes have connection errors with it so if the backend data doesn’t show directly after reloading the site please don’t check my project as failed, I am doing my best to make it work! Oh and yeah, I ma sorry for this looking so unstructurised but I didn’t really know how this be represented to you, if I maybe should write this the same layout as a README or a DEVBLOG
Dear voters, I made “CLIMATE SHIELD”, an interactive dashboard with real-time natural disasters (focussed mostly on fires) from NASA API’s being shown. Why: I made this project because I was surprised by hearing so much fire incidents on the news, I liked the idea of being able to see all fires and data in one place and easy-to-read. I also liked the idea of using NASA data for my project, as this Stardance challenge is sponsored by NASA. During the process of creating this project, I learn a lot about how to use API’s and merge multiple APIs into one dashboard. The difference between this and the previous ship I got lots of ideas and inspirations from the previous ship. So I did my best to implement them all into this ship, some examples: A canvas tutorial that explains the basics from my page to new users. You can replay it in the TELEMETRY page! Added more sources, this way some areas that weren’t covered before have also data (although I have done my best to only use free API’s, that means that it may not contain ALL the data there currently is). In my previous ship I added another way of seeing the world (if you click on the “RECON” buttons), now it is also a map you can select as standard-view. There was a bug that I can’t explain this short (you can see more info about it in my devlogs), but I mostly fixed it! I hope you have a great day, and thanks for voting!!!...
|
1792084771.3176944
|
1792948771.3176944
|
|
23919
|
Caveman OS by @colgation | Stardance
|
colgation
|
3
|
19.0
|
110
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T10:17:54Z", "hours": 3.0, "multiplier": 8.67, "payout": 29, "blessing": "neutral", "text": "I made an easter egg hunting game, disguised as a WebOS. A few achievements are easy to get, but some require deep thinking. If you get stuck, don’t worry! I’ve gone through the process of making a Youtube video and detailed instructions in the README on how to get each easter egg. Alongside this, I used three.js to create my very own 3d mammoth. Check it out at https://194500-cpu.github.io/CavemanOS/", "repo": "https://github.com/194500-cpu/CavemanOS", "demo": "https://194500-cpu.github.io/CavemanOS/"}, {"ship_num": 2, "ts": "2026-07-19T09:22:51Z", "hours": 6.0, "multiplier": 14.63, "payout": 81, "blessing": "neutral", "text": "Caveman Web OS is an Easter egg hunting game disguised as a prehistoric computer operating system. At first, it looks like a simple WebOS with draggable windows and applications. However, different buttons, messages and interactions can reveal hidden achievements. Players can use the Easter Egg Tracker to see what they have discovered and receive clues about secrets they have not found yet. In case anyone is struggling, here is a video of me completing all the achievements: https://www.youtube.com/watch?v=Ed1CFRDi-0Q Live Website https://194500-cpu.github.io/CavemanOS/ Features Draggable application windows Desktop-style navigation bar and dock Live date and time display Campfire messaging app Realtime messages using Supabase Easter Egg Tracker Hidden achievements Caveman AI called Bob Random dialogue and hints from Bob Secret phrases and puzzle-based interactions Special ending screens Achievement visuals that change after discovery Custom prehistoric interface and artwork *Sweet Alert 2 for beautiful alerts How It Works The WebOS interface is made from HTML elements styled as movable application windows. Challenges Making Windows Draggable I had to calculate the movement of the mouse and update each window’s position while preventing windows from being dragged completely outside the screen. Window Layering When multiple applications are open, the selected window needs to move in front of the others. I implemented this by increasing each selected window’s z-index. Realtime Campfire Messages I connected the project to Supabase so messages could be saved and displayed to different visitors. I also used Supabase realtime updates so new messages could appear without manually refreshing the page. Designing Easter Eggs The achievements needed to be hidden but still possible to discover. I tried to create clues that gradually lead players toward an answer instead of revealing the solution immediately. Deploying With GitHub Pages I learned how GitHub Pages serves the project from the docs folder. I also encountered Git merge conflicts while moving files and learned how local development can behave differently from a deployed website. What I Learned During this project, I learned more about: JavaScript event listeners DOM manipulation Functions and application state Asynchronous JavaScript Supabase databases Realtime database subscriptions CSS positioning CSS transitions Draggable interfaces z-index and window layering Responsive layouts Git commits Merge conflicts GitHub Pages deployment Debugging differences between local and deployed websites Future Improvements", "repo": "https://github.com/194500-cpu/CavemanOS", "demo": "https://194500-cpu.github.io/CavemanOS/"}, {"ship_num": 3, "ts": "2026-06-26T07:06:38Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a easter egg hunter hidden as a WebOS. It has visible tracker for achievments, a connected “Campfire” app that uses a database to store messages, and included closable and draggable windows. Interested? Check it out!", "repo": "https://github.com/194500-cpu/CavemanOS", "demo": "https://194500-cpu.github.io/CavemanOS/"}]...
|
[{"post_id": 70531, "ts": "202 [{"post_id": 70531, "ts": "2026-09-19T10:15:19Z", "hours": 0.2575, "text": "Final changes, made a video to showcase achievements as well as notes in the README. I also polished some text and spellchecked with a dictionary ;)."}, {"post_id": 68771, "ts": "2026-09-15T18:43:39Z", "hours": 0.2833, "text": "Looking to ship soon, today I fixed some bugs like sweet alert glitching out, made the alert only dissappear if ok is pressed."}, {"post_id": 61888, "ts": "2026-09-05T01:45:25Z", "hours": 0.7886, "text": "New easter egg to make mammoth RGB!"}, {"post_id": 60475, "ts": "2026-09-02T20:27:05Z", "hours": 0.4058, "text": "Each hour, Bob has something different to say. For example if it is 12 ’o clock, he might say: LUNCH TIME Alongside this, I have added a QOL change, so pressing enter key will now send a message in the Campfire App!"}, {"post_id": 60458, "ts": "2026-09-02T19:57:10Z", "hours": 1.0381, "text": "Made a 3d Wireframe Mammoth that tracks your mouse with its head! It took ages to set up Three js and create the shape, so don’t be scared by its simplicity!"}, {"post_id": 31130, "ts": "2026-07-19T09:05:06Z", "hours": 0.3431, "text": "I added SweetAlert 2, meaning all of the alerts on my website will be delivered in stylish fashion!"}, {"post_id": 31124, "ts": "2026-07-19T08:42:15Z", "hours": 0.2725, "text": "WOW git was much more confusing than I thought. I really took me a while to find out how to push my changes, as I was constantly met with an error that my branches were out of sync. I tried all sort of stuff, but it turns out my folder name being wrong was the problem."}, {"post_id": 31106, "ts": "2026-07-19T07:33:16Z", "hours": 1.2628, "text": "Today, I made a secret cutscene for one of my achievements. It can be found through clues given by “Bob” in my AI assistant app (Abysmal Intelligence.) Here’s a preview:"}, {"post_id": 27424, "ts": "2026-07-12T23:52:31Z", "hours": 0.6711, "text": "I would not give him that."}, {"post_id": 27395, "ts": "2026-07-12T22:34:22Z", "hours": 2.9828, "text": "Bug fixing! Lots of easter eggs coming up and a ui revamp! Also lets be civil in the campfire…"}, {"post_id": 16131, "ts": "2026-06-26T07:03:56Z", "hours": 0.6164, "text": "Final improvements!"}, {"post_id": 16103, "ts": "2026-06-26T05:55:20Z", "hours": 1.6675, "text": "Connected my Campfire app to a database, so now it can store stuff. COMMUNICATION!"}, {"post_id": 14946, "ts": "2026-06-24T08:59:52Z", "hours": 0.5161, "text": "Any suggestions on making easter eggs? As always, have a wonderful day :)"}, {"post_id": 14934, "ts": "2026-06-24T08:26:44Z", "hours": 1.0069, "text": "Fixed Z-indexing and cleaned up my code to be more neat"}, {"post_id": 14920, "ts": "2026-06-24T07:00:55Z", "hours": 0.6353, "text": "if (element.offsetLeft + element.offsetWidth - currentX < window.innerWidth && element.offsetLeft - currentX > 0 && element.offsetTop - currentY > 0 && element.offsetTop + element.offsetHeight - currentY < innerHeight) { element.style.top = (element.offsetTop - currentY) + “px”; element.style.left = (element.offsetLeft - currentX) + “px”; } TLDR: The window cannot be moved outside of the screen. (this prevents windows from becoming unclosable)"}, {"post_id": 14822, "ts": "2026-06-24T02:15:36Z", "hours": 0.6667, "text": "Variables are storing text input"}, {"post_id": 14732, "ts": "2026-06-23T22:53:11Z", "hours": 0.2619, "text": "Welcome screen is done! Plan to decorate it, but I think now I can just start making secrets."}, {"post_id": 14719, "ts": "2026-06-23T22:31:53Z", "hours": 0.6644, "text": "Welcome screen (in progress), lots of JS fixes, layout fixes and cool website!"}, {"post_id": 14289, "ts": "2026-06-23T10:51:11Z", "hours": 1.0186, "text": "Some bug fixing needed for hide/show feature, but still very cool to have a closable and draggable window!"}, {"post_id": 14038, "ts": "2026-06-23T00:40:14Z", "hours": 1.8167, "text": "What could this icon be used for? It took me like 10 minutes to make (shoutout vectorpea)."}, {"post_id": 13607, "ts": "2026-06-22T09:40:09Z", "hours": 0.3728, "text": "Added time to my website - First lines of JavaScript!"}, {"post_id": 13596, "ts": "2026-06-22T08:48:41Z", "hours": 0.3236, "text": "I really want someone to give me suggestions, no really any feature you think would be fun to have :) Many thanks and happy coding. Also quick update, the wallpaper has been changed."}, {"post_id": 13588, "ts": "2026-06-22T08:09:18Z", "hours": 0.4236, "text": "Started development!!! (btw is this image copyright xd)"}]...
|
Title: Caveman OS by @colgation | Stardance
Devlo Title: Caveman OS by @colgation | Stardance
Devlogs:
Started development!!! (btw is this image copyright xd)
I really want someone to give me suggestions, no really any feature you think would be fun to have :) Many thanks and happy coding. Also quick update, the wallpaper has been changed.
Added time to my website - First lines of JavaScript!
What could this icon be used for? It took me like 10 minutes to make (shoutout vectorpea).
Some bug fixing needed for hide/show feature, but still very cool to have a closable and draggable window!
Welcome screen (in progress), lots of JS fixes, layout fixes and cool website!
Welcome screen is done! Plan to decorate it, but I think now I can just start making secrets.
Variables are storing text input
if (element.offsetLeft + element.offsetWidth - currentX < window.innerWidth && element.offsetLeft - currentX > 0 && element.offsetTop - currentY > 0 && element.offsetTop + element.offsetHeight - currentY < innerHeight) { element.style.top = (element.offsetTop - currentY) + “px”; element.style.left = (element.offsetLeft - currentX) + “px”; } TLDR: The window cannot be moved outside of the screen. (this prevents windows from becoming unclosable)
Fixed Z-indexing and cleaned up my code to be more neat
Any suggestions on making easter eggs? As always, have a wonderful day :)
Connected my Campfire app to a database, so now it can store stuff. COMMUNICATION!
Final improvements!
Bug fixing! Lots of easter eggs coming up and a ui revamp! Also lets be civil in the campfire…
I would not give him that.
Today, I made a secret cutscene for one of my achievements. It can be found through clues given by “Bob” in my AI assistant app (Abysmal Intelligence.) Here’s a preview:
WOW git was much more confusing than I thought. I really took me a while to find out how to push my changes, as I was constantly met with an error that my branches were out of sync. I tried all sort of stuff, but it turns out my folder name being wrong was the problem.
I added SweetAlert 2, meaning all of the alerts on my website will be delivered in stylish fashion!
Made a 3d Wireframe Mammoth that tracks your mouse with its head! It took ages to set up Three js and create the shape, so don’t be scared by its simplicity!
Each hour, Bob has something different to say. For example if it is 12 ’o clock, he might say: LUNCH TIME Alongside this, I have added a QOL change, so pressing enter key will now send a message in the Campfire App!
New easter egg to make mammoth RGB!
Looking to ship soon, today I fixed some bugs like sweet alert glitching out, made the alert only dissappear if ok is pressed.
Final changes, made a video to showcase achievements as well as notes in the README. I also polished some text and spellchecked with a dictionary ;).
Ships:
I made a easter egg hunter hidden as a WebOS. It has visible tracker for achievments, a connected “Campfire” app that uses a database to store messages, and included closable and draggable windows. Interested? Check it out!
Caveman Web OS is an Easter egg hunting game disguised as a prehistoric computer operating system. At first, it looks like a simple WebOS with draggable windows and applications. However, different buttons, messages and interactions can reveal hidden achievements. Players can use the Easter Egg Tracker to see what they have discovered and receive clues about secrets they have not found yet. In case anyone is struggling, here is a video of me completing all the achievements: https://www.youtube.com/watch?v=Ed1CFRDi-0Q Live Website https://194500-cpu.github.io/CavemanOS/ Features Draggable application windows Desktop-style navigation bar and dock Live date and time display Campfire messaging app Realtime messages using Supabase Easter Egg Tracker Hidden achievements Caveman AI called Bob Random dialogue and hints from Bob Secret phrases and puzzle-based interactions Special ending screens Achievement visuals that change after discovery Custom prehistoric interface and artwork *Sweet Alert 2 for beautiful alerts How It Works The WebOS interface is made from HTML elements styled as movable application windows. Challenges Making Windows Draggable I had to calculate the movement of the mouse and update each window’s position while preventing windows from being dragged completely outside the screen. Window Layering When multiple applications are open, the selected window needs to move in front of the others. I implemented this by increasing each selected window’s z-index. Realtime Campfire Messages I connected the project to Supabase so messages could be saved and displayed to different visitors. I also used Supabase realtime updates so new messages could appear without manually refreshing the page. Designing Easter Eggs The achievements needed to be hidden but still possible to discover. I tried to create clues that gradually lead players toward an answer instead of revealing the solution immediately. Deploying With GitHub Pages I learned how GitHub Pages serves the project from the docs folder. I also encountered Git merge conflicts while moving files and learned how local development can behave differently from a deployed website. What I Learned During this project, I learned more about: JavaScript event listeners DOM manipulation Functions and application state Asynchronous JavaScript Supabase databases Realtime database subscriptions CSS positioning CSS transitions Draggable interfaces z-index and window layering Responsive layouts Git commits Merge conflicts GitHub Pages deployment Debugging differences between local and deployed websites Future Improvements
I made an easter egg hunting game, disguised as a WebOS. A few achievements are easy to get, but some require deep thinking. If you get stuck, don’t worry! I’ve gone through the process of making a Youtube video and detailed instructions in the README on how to get each easter egg. Alongside this, I used three.js to create my very own 3d mammoth. Check it out at https://194500-cpu.github.io/CavemanOS/...
|
1792828583.0365837
|
1792914983.0365837
|
|
24030
|
My very own WebOS by @naman0410 | Stardance
|
naman0410
|
3
|
4.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T10:17:59Z", "hours": 0.0, "multiplier": 1.69, "payout": 0, "blessing": "neutral", "text": "DesiCinema OS is a simple web application inspired by a desktop operating system, designed to help users explore popular Indian comedy movies in a fun and interactive way. Instead of displaying a traditional movie list, the project uses draggable windows and a desktop-like interface to make browsing films more engaging. The application includes a random movie picker, genre-based filtering, and a celebrity recommendation section that suggests movies associated with selected actors. It also features a live clock and a clean interface built entirely with HTML, CSS, and vanilla JavaScript. This project was created to practice front-end development concepts such as DOM manipulation, event handling, responsive layouts, and interactive UI design while experimenting with a different approach to presenting movie recommendations. It demonstrates how a simple dataset can be turned into an enjoyable user experience using core web technologies.", "repo": "https://github.com/modinaman099/WebOScreation", "demo": "https://web-o-screation-8chh.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-01T09:33:14Z", "hours": 1.0, "multiplier": 4.94, "payout": 5, "blessing": "neutral", "text": "DesiCinema OS is a simple web application inspired by a desktop operating system, designed to help users explore popular Indian comedy movies in a fun and interactive way. Instead of displaying a traditional movie list, the project uses draggable windows and a desktop-like interface to make browsing films more engaging. The application includes a random movie picker, genre-based filtering, and a celebrity recommendation section that suggests movies associated with selected actors. It also features a live clock and a clean interface built entirely with HTML, CSS, and vanilla JavaScript. This project was created to practice front-end development concepts such as DOM manipulation, event handling, responsive layouts, and interactive UI design while experimenting with a different approach to presenting movie recommendations. It demonstrates how a simple dataset can be turned into an enjoyable user experience using core web technologies.", "repo": "https://github.com/modinaman099/WebOScreation", "demo": "https://web-o-screation-8chh.vercel.app/"}, {"ship_num": 3, "ts": "2026-06-23T16:01:52Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made a WebOS for movies helping people find movies based on genre", "repo": "https://github.com/modinaman099/WebOScreation", "demo": "https://web-o-screation-8chh.vercel.app/"}]...
|
[{"post_id": 20682, "ts": "202 [{"post_id": 20682, "ts": "2026-07-02T10:33:34Z", "hours": 0.0, "text": "Updated the UI interface abit . Debugged the code and cleaned it"}, {"post_id": 18254, "ts": "2026-06-29T10:28:27Z", "hours": 1.0, "text": "I have updated my code . Worked on the CSS , Java part . I have also added a new features of getting suggestion by selecting your favourite celebs . It will suggest you one of the best movies of those actors ."}, {"post_id": 14335, "ts": "2026-06-23T13:04:51Z", "hours": 0.0, "text": "I have almost completed my WebOS for movies . It has a roulette kind of suggestion page . It also allow you to distinguish between movies based on their genre"}, {"post_id": 14274, "ts": "2026-06-23T10:02:14Z", "hours": 1.0, "text": "i have made the basic interface for the os of best m"}, {"post_id": 13924, "ts": "2026-06-22T20:39:05Z", "hours": 0.0, "text": "im making a kind of webOS list of best indian cinema comedies"}]...
|
Title: My very own WebOS by @naman0410 | Stardance Title: My very own WebOS by @naman0410 | Stardance
Devlogs:
im making a kind of webOS list of best indian cinema comedies
i have made the basic interface for the os of best m
I have almost completed my WebOS for movies . It has a roulette kind of suggestion page . It also allow you to distinguish between movies based on their genre
I have updated my code . Worked on the CSS , Java part . I have also added a new features of getting suggestion by selecting your favourite celebs . It will suggest you one of the best movies of those actors .
Updated the UI interface abit . Debugged the code and cleaned it
Ships:
I have made a WebOS for movies helping people find movies based on genre
DesiCinema OS is a simple web application inspired by a desktop operating system, designed to help users explore popular Indian comedy movies in a fun and interactive way. Instead of displaying a traditional movie list, the project uses draggable windows and a desktop-like interface to make browsing films more engaging. The application includes a random movie picker, genre-based filtering, and a celebrity recommendation section that suggests movies associated with selected actors. It also features a live clock and a clean interface built entirely with HTML, CSS, and vanilla JavaScript. This project was created to practice front-end development concepts such as DOM manipulation, event handling, responsive layouts, and interactive UI design while experimenting with a different approach to presenting movie recommendations. It demonstrates how a simple dataset can be turned into an enjoyable user experience using core web technologies.
DesiCinema OS is a simple web application inspired by a desktop operating system, designed to help users explore popular Indian comedy movies in a fun and interactive way. Instead of displaying a traditional movie list, the project uses draggable windows and a desktop-like interface to make browsing films more engaging. The application includes a random movie picker, genre-based filtering, and a celebrity recommendation section that suggests movies associated with selected actors. It also features a live clock and a clean interface built entirely with HTML, CSS, and vanilla JavaScript. This project was created to practice front-end development concepts such as DOM manipulation, event handling, responsive layouts, and interactive UI design while experimenting with a different approach to presenting movie recommendations. It demonstrates how a simple dataset can be turned into an enjoyable user experience using core web technologies....
|
1792878819.520542
|
1793742819.520542
|
|
24319
|
PixelOS by @Pixeleyesd | Stardance
|
Pixeleyesd
|
3
|
10.0
|
26
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T09:36:09Z", "hours": 3.0, "multiplier": 6.58, "payout": 21, "blessing": "neutral", "text": "My WebOS 2 version of PixelOS now includes: ALL NEW FEATURES: DOS Emulator, DOS to your heart’s content! Terminal app, written in python, some cool easter eggs there! and HALF LIFE, FULLY PLAYABLE IN BROWSER :) (I iframed an existing project, just to be clear) Old Features: DOOM, Notepad, Contacts, Weather", "repo": "https://github.com/Pixeleyesd/PixelOS", "demo": "https://github.pixeleyesd.dpdns.org/PixelOS/"}, {"ship_num": 2, "ts": "2026-06-25T05:13:51Z", "hours": 1.0, "multiplier": 7.23, "payout": 5, "blessing": "neutral", "text": "I made a WebOS with fully draggable windows and functioning apps such as doom. This version is fully bugfixed now.", "repo": "https://github.com/Pixeleyesd/PixelOS", "demo": "https://github.pixeleyesd.dpdns.org/PixelOS/"}, {"ship_num": 3, "ts": "2026-06-24T00:06:21Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a fully functional WebOS with draggable windows and cool custom apps. Also theres DOOM. It works, too.", "repo": "https://github.com/Pixeleyesd/PixelOS", "demo": "https://github.pixeleyesd.dpdns.org/PixelOS/"}]...
|
[{"post_id": 26482, "ts": "202 [{"post_id": 26482, "ts": "2026-07-11T09:31:19Z", "hours": 1.7444, "text": "I iframed in the half life browser project into my webOS, so now you can play half-life in browser, IN PIXEL OS NO LESS. YAYAYYY ——————————————————I finished my terminal python script, with commands like cat, ls, lsusb, etc. I refuse to admit the amount of time I spent on this wildly inefficient and buggy code, but here we are. It has a few easter eggs (try “ls -a” and try “ls /HomeworkFolder/”) and I’m READY TO SHIPPP :)"}, {"post_id": 24411, "ts": "2026-07-07T23:11:39Z", "hours": 0.6208, "text": "I fixed terminal and DOS Emulator breaking keyboard attachment."}, {"post_id": 23976, "ts": "2026-07-07T06:54:11Z", "hours": 0.9378, "text": "I’ve added a DOS emulator, and a “terminal” which is really incomplete (which is really just a python script, using pyodide) there is a known bug where once you open doom or the DOS emulator the terminal won’t let you attach to it. I’m trying to fix that now."}, {"post_id": 15479, "ts": "2026-06-25T05:12:38Z", "hours": 0.7328, "text": "I fixed the bug where PixelNotes won’t let you type in any of the entry boxes after opening the DOSBOX running DOOM, as it agressively forces the keyboard to attach to the DOSBOX, meaning you can’t interact with anything else in the website with your keyboard. Now when DOOM is open / closed the PixelNotes app will work regardless. The layering of the windows now also applies to the drag box, meaning that when the drag box is selected or dragged, it counts as that window being focused. This was necessary for the notes app to function properly."}, {"post_id": 14748, "ts": "2026-06-23T23:23:50Z", "hours": 1.0217, "text": "I made a few more apps: PixelContacts (to help people get in contact with me) and DOOM, which is an embedded DOSBOX running the zip file [email protected] its pretty cool overall :) My next step is to do WebOS 2 to “customise further” :D"}, {"post_id": 14693, "ts": "2026-06-23T21:43:11Z", "hours": 1.3217, "text": "I made the notes app work, as well as the window layering. There was an issue where you could drag anywhere in a window, disabling interactions in that window, which I also got around to fixing. The notes save to local storage as well, which means they get saved even after reload. :)"}, {"post_id": 14224, "ts": "2026-06-23T07:21:49Z", "hours": 2.3772, "text": "Hello there! Quick devlog update: I just finished making windows able to be moved and able to be closed with that red square at the top right of the window. I’m now making the PixelNotes app. (The clock also works properly if I didn’t mention before :3)"}, {"post_id": 14082, "ts": "2026-06-23T02:05:08Z", "hours": 0.8647, "text": "I made the WebOS recognisable as an OS. The top bar uses blur + monochrome."}, {"post_id": 14023, "ts": "2026-06-23T00:21:10Z", "hours": 0.3536, "text": "I made a simple webpage, ready to turn it into a WebOS."}]...
|
Title: PixelOS by @Pixeleyesd | Stardance
Devlogs Title: PixelOS by @Pixeleyesd | Stardance
Devlogs:
I made a simple webpage, ready to turn it into a WebOS.
I made the WebOS recognisable as an OS. The top bar uses blur + monochrome.
Hello there! Quick devlog update: I just finished making windows able to be moved and able to be closed with that red square at the top right of the window. I’m now making the PixelNotes app. (The clock also works properly if I didn’t mention before :3)
I made the notes app work, as well as the window layering. There was an issue where you could drag anywhere in a window, disabling interactions in that window, which I also got around to fixing. The notes save to local storage as well, which means they get saved even after reload. :)
I made a few more apps: PixelContacts (to help people get in contact with me) and DOOM, which is an embedded DOSBOX running the zip file [email protected] its pretty cool overall :) My next step is to do WebOS 2 to “customise further” :D
I fixed the bug where PixelNotes won’t let you type in any of the entry boxes after opening the DOSBOX running DOOM, as it agressively forces the keyboard to attach to the DOSBOX, meaning you can’t interact with anything else in the website with your keyboard. Now when DOOM is open / closed the PixelNotes app will work regardless. The layering of the windows now also applies to the drag box, meaning that when the drag box is selected or dragged, it counts as that window being focused. This was necessary for the notes app to function properly.
I’ve added a DOS emulator, and a “terminal” which is really incomplete (which is really just a python script, using pyodide) there is a known bug where once you open doom or the DOS emulator the terminal won’t let you attach to it. I’m trying to fix that now.
I fixed terminal and DOS Emulator breaking keyboard attachment.
I iframed in the half life browser project into my webOS, so now you can play half-life in browser, IN PIXEL OS NO LESS. YAYAYYY ——————————————————I finished my terminal python script, with commands like cat, ls, lsusb, etc. I refuse to admit the amount of time I spent on this wildly inefficient and buggy code, but here we are. It has a few easter eggs (try “ls -a” and try “ls /HomeworkFolder/”) and I’m READY TO SHIPPP :)
Ships:
I made a fully functional WebOS with draggable windows and cool custom apps. Also theres DOOM. It works, too.
I made a WebOS with fully draggable windows and functioning apps such as doom. This version is fully bugfixed now.
My WebOS 2 version of PixelOS now includes: ALL NEW FEATURES: DOS Emulator, DOS to your heart’s content! Terminal app, written in python, some cool easter eggs there! and HALF LIFE, FULLY PLAYABLE IN BROWSER :) (I iframed an existing project, just to be clear) Old Features: DOOM, Notepad, Contacts, Weather...
|
1792820916.7674453
|
1793684916.7674453
|
|
24652
|
Portfolio by @Ak_45 | Stardance
|
|
3
|
55.67
|
335
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T11:19:33Z", "hours": 35.0, "multiplier": 17.19, "payout": 305, "blessing": "neutral", "text": "I have polished my portfolio and added a room entering animation and a room (based on my room) and added interactive objects like a gaming mouse (turns RGB), a lamp (lights control), a clock (chimes when interacted with), headphones (plays lo-fi beats to enjoy), a chair, a bush,the window, and a microcontroller. To enter the portfolio, click on the laptop, and for full interaction, click on the laptop and fully interact with the portfolio. Click on the hamburger menu (3 horizontal lines), and for activating the Easter egg, type ‘akshith’ after reaching the bottom (full imersion/hamburger mode only)", "repo": "https://github.com/Akshithsurya/Portfolio_", "demo": "https://akshith-surya-portfolio-ak.netlify.app/"}, {"ship_num": 2, "ts": "2026-07-13T14:47:30Z", "hours": 3.0, "multiplier": 16.46, "payout": 21, "blessing": "neutral", "text": "I’ve built a sci-fi, terminal-style portfolio website that is a “mission dossier” of my journey in space science, hardware, and machine learning. Instead of a resume, it has interactive sections such as “Mission Logs” (projects), “Capabilities” (tech stack), and “Active Transmissions” (current focus). The main problem was crafting a UI that felt like a real aerospace control terminal and classified dossier but was still responsive and performant. I also had to structure the data carefully so that the hover cards for “Mission Records” and “Credentials” could be rendered dynamically without weighing down the page. I am really proud of the overall aesthetic and the narrative flow; it is not just a list of my skills but tells the story of a 15 year old aspiring astrophysicist from Kerala. I’m also proud to have tied my real world milestones like being a NASA Space Apps Global Nominee (Team RC_Real Coding) and my ISRO achievements into this cohesive “classified” theme. Testing & exploring: Scroll the 6 “Mission” sections or use the top nav. Hover over the Mission Records and Credentials cards for verified information. Easter Egg – Scroll to the very bottom of the page (Contact / Footer section) and then type akshith on your keyboard to unlock the Easter Egg! :D (also the solar map works it is time acurate so no quick movement)", "repo": "https://github.com/Akshithsurya/Portfolio_", "demo": "https://akshith-surya-portfolio-ak.netlify.app/"}, {"ship_num": 3, "ts": "2026-07-07T12:08:14Z", "hours": 2.0, "multiplier": 4.57, "payout": 9, "blessing": "neutral", "text": "What I made: My personal portfolio site — a single-file, deep-space-themed site built to represent my work in astrophysics, AI, and hardware to evaluators and collaborators. It runs a canvas starfield, a constellation-following cursor, and orbiting exoplanet animations and pulls live data from my GitHub ( @Akshithsurya ) so the projects section stays current without manual updates. What was challenging: Getting the animations to feel alive without tanking performance. I had several separate requestAnimationFrame loops running at once early on, which caused visible lag on scroll. I consolidated them into a single scheduler, dropped a full-viewport SVG grain overlay that was expensive to render, removed backdrop-filter blur during scroll events, and added content-visibility:auto to keep off-screen sections from being painted. The site went through several visual identity passes before landing on the current cosmic direction. What I’m proud of: It’s a single HTML file — no framework, no build step — that still holds a coherent, deliberate aesthetic and runs smoothly on modest hardware, which matters given the site’s audience. How to test it: Visit the live link, scroll through the sections, and try moving the cursor near the starfield to see the constellation effect. The GitHub activity should reflect my actual repositories in real time.", "repo": "https://github.com/Akshithsurya/Portfolio_", "demo": "https://akshith-surya-portfolio-ak.netlify.app/"}]...
|
[{"post_id": 48103, "ts": "202 [{"post_id": 48103, "ts": "2026-08-16T12:05:58Z", "hours": 8.6519, "text": "Added so that you can walk through the room, but it is not fully decorated yet ;). If you have any opinions, share them with me"}, {"post_id": 46786, "ts": "2026-08-14T09:14:07Z", "hours": 7.0197, "text": "Tried to add weather control; it worked at first, but I messed up, and it won’t load :("}, {"post_id": 44608, "ts": "2026-08-10T14:27:22Z", "hours": 9.6306, "text": "made the website way more optimized and decided to make the next.JS has some actual functions that made the textures and lighting also deployed this version: https://akshith-surya-portfolio-ak.netlify.app/ & https://akshith-surya-portfolio.vercel.app/"}, {"post_id": 43756, "ts": "2026-08-09T05:36:45Z", "hours": 8.8464, "text": "I have fixed the clock and made all the objects have better texture and added fabric texture to the windows, which made the lighting feel more realistic and made the portfolio match the room."}, {"post_id": 42772, "ts": "2026-08-07T17:30:43Z", "hours": 8.0769, "text": "Made all the items interactable, but I still can’t figure out what to do with the drawer, and the clock has gone mad :( and added lofi beats when the headphones are interacted with."}, {"post_id": 41887, "ts": "2026-08-06T11:59:00Z", "hours": 8.8603, "text": "making the entire website 3D and putting it all inside my room with a cozy aesthetic and different ways to look at my portfolio."}, {"post_id": 27708, "ts": "2026-07-13T14:34:38Z", "hours": 1.6222, "text": "Finally did what I wanted to; no one can call it bad."}, {"post_id": 27164, "ts": "2026-07-12T14:08:59Z", "hours": 0.5894, "text": "Adding easter eggs to my portfolio try ME"}, {"post_id": 25914, "ts": "2026-07-10T12:31:52Z", "hours": 0.4067, "text": "Adding sun in the background as a reference to my name"}, {"post_id": 24073, "ts": "2026-07-07T12:06:59Z", "hours": 2.0625, "text": "REAdy for liftoff: https://akshith-surya-portfolio-ak.netlify.app/"}]...
|
Title: Portfolio by @Ak_45 | Stardance
Devlogs:
R Title: Portfolio by @Ak_45 | Stardance
Devlogs:
REAdy for liftoff: https://akshith-surya-portfolio-ak.netlify.app/
Adding sun in the background as a reference to my name
Adding easter eggs to my portfolio try ME
Finally did what I wanted to; no one can call it bad.
making the entire website 3D and putting it all inside my room with a cozy aesthetic and different ways to look at my portfolio.
Made all the items interactable, but I still can’t figure out what to do with the drawer, and the clock has gone mad :( and added lofi beats when the headphones are interacted with.
I have fixed the clock and made all the objects have better texture and added fabric texture to the windows, which made the lighting feel more realistic and made the portfolio match the room.
made the website way more optimized and decided to make the next.JS has some actual functions that made the textures and lighting also deployed this version: https://akshith-surya-portfolio-ak.netlify.app/ & https://akshith-surya-portfolio.vercel.app/
Tried to add weather control; it worked at first, but I messed up, and it won’t load :(
Added so that you can walk through the room, but it is not fully decorated yet ;). If you have any opinions, share them with me
Ships:
What I made: My personal portfolio site — a single-file, deep-space-themed site built to represent my work in astrophysics, AI, and hardware to evaluators and collaborators. It runs a canvas starfield, a constellation-following cursor, and orbiting exoplanet animations and pulls live data from my GitHub ( @Akshithsurya ) so the projects section stays current without manual updates. What was challenging: Getting the animations to feel alive without tanking performance. I had several separate requestAnimationFrame loops running at once early on, which caused visible lag on scroll. I consolidated them into a single scheduler, dropped a full-viewport SVG grain overlay that was expensive to render, removed backdrop-filter blur during scroll events, and added content-visibility:auto to keep off-screen sections from being painted. The site went through several visual identity passes before landing on the current cosmic direction. What I’m proud of: It’s a single HTML file — no framework, no build step — that still holds a coherent, deliberate aesthetic and runs smoothly on modest hardware, which matters given the site’s audience. How to test it: Visit the live link, scroll through the sections, and try moving the cursor near the starfield to see the constellation effect. The GitHub activity should reflect my actual repositories in real time.
I’ve built a sci-fi, terminal-style portfolio website that is a “mission dossier” of my journey in space science, hardware, and machine learning. Instead of a resume, it has interactive sections such as “Mission Logs” (projects), “Capabilities” (tech stack), and “Active Transmissions” (current focus). The main problem was crafting a UI that felt like a real aerospace control terminal and classified dossier but was still responsive and performant. I also had to structure the data carefully so that the hover cards for “Mission Records” and “Credentials” could be rendered dynamically without weighing down the page. I am really proud of the overall aesthetic and the narrative flow; it is not just a list of my skills but tells the story of a 15 year old aspiring astrophysicist from Kerala. I’m also proud to have tied my real world milestones like being a NASA Space Apps Global Nominee (Team RC_Real Coding) and my ISRO achievements into this cohesive “classified” theme. Testing & exploring: Scroll the 6 “Mission” sections or use the top nav. Hover over the Mission Records and Credentials cards for verified information. Easter Egg – Scroll to the very bottom of the page (Contact / Footer section) and then type akshith on your keyboard to unlock the Easter Egg! :D (also the solar map works it is time acurate so no quick movement)
I have polished my portfolio and added a room entering animation and a room (based on my room) and added interactive objects like a gaming mouse (turns RGB), a lamp (lights control), a clock (chimes when interacted with), headphones (plays lo-fi beats to enjoy), a chair, a bush,the window, and a microcontroller. To enter the portfolio, click on the laptop, and for full interaction, click on the laptop and fully interact with the portfolio. Click on the hamburger menu (3 horizontal lines), and for activating the Easter egg, type ‘akshith’ after reaching the bottom (full imersion/hamburger mode only)...
|
1792849799.5837538
|
1792936199.5837538
|
|
24998
|
RenanG_OS by @renanfartes | Stardance
|
renanfartes
|
3
|
10.0
|
36
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T20:22:06Z", "hours": 4.0, "multiplier": 9.18, "payout": 33, "blessing": "neutral", "text": "I made my very own Web OS. I learned how to work with branches, handle remote settings and some parsing logic. The app includes multiple draggable windows, a terminal with 2 simple commands, a calculator, some notes and a change background function so you can upload your image! None AI Used for coding. I used only to understand the w3schools code for making HTML windows draggable, but none code was wreitten by it!", "repo": "https://github.com/Renan-G-projec/RenanG_OS", "demo": "https://renang-os.netlify.app/"}, {"ship_num": 2, "ts": "2026-06-26T23:20:17Z", "hours": 1.0, "multiplier": 3.34, "payout": 3, "blessing": "neutral", "text": "My personal WebOS project. I created it to learn more about DOM manipulation, Navigator features and some other really cool stuff, such as dragabble logic and image saving in base64. There’s a Hacker Notes app, custom background and stardance info.", "repo": "https://github.com/Renan-G-projec/RenanG_OS", "demo": "https://renang-os.netlify.app/"}, {"ship_num": 3, "ts": "2026-06-25T16:48:50Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first and custom WEBOS! Is simple. I learned a lot about DOM manipulation and stuff.", "repo": "https://github.com/Renan-G-projec/RenanG_OS", "demo": "https://renang-os.netlify.app/"}]...
|
[{"post_id": 22192, "ts": "202 [{"post_id": 22192, "ts": "2026-07-04T15:10:20Z", "hours": 1.2736, "text": "Devlog #10 TERMINAL LOOP! FInally i added the logic to loop the terminal. Now it Receives an input. When Enter is pressed, the terminal engine parses it, and then executes. After, the terminal prints the OS string. Since there isn’t any terminal logic or so, the function just returns a plain old string. But using a getter function allows me to refactor easily later. Commands: help and clear implemented."}, {"post_id": 21197, "ts": "2026-07-03T00:26:39Z", "hours": 0.3878, "text": "Devlog #09 Terminal Scaffolded! I simply just added the icon and added some style to the new window. It is translucid now and i plan in making a feature to disable transparency Later. The inputs of the terminal are correctly placed, but none functionality yet. (yeah, jetbrains mono as default XD)"}, {"post_id": 20876, "ts": "2026-07-02T16:24:29Z", "hours": 0.7408, "text": "Devlog #08 Calculator finished! I added the functionality with error treatment (infinity and NaN handling), a custom font and i added the apps icons. I also fixed a relative path problem with the default background. Also i learned how to delete a branch after merging it. It’s simple, but as i said before i never worked really with git branching. :p"}, {"post_id": 20387, "ts": "2026-07-01T23:32:42Z", "hours": 0.745, "text": "Devlog #07 Working on a calculator! I added the window, some reaaaly basic style and i fixed a lot of small details that i didn’t see (as all windows having the name of the OS, etc) None functionality had been implemented by now. I also created a branch for this feature. Is simple, but turns out i never really worked with branches in the past. XD"}, {"post_id": 20351, "ts": "2026-07-01T22:35:10Z", "hours": 0.4819, "text": "Devlog #06 As some reviews said, the windows were struggling when the mouse was above the viewport! So i fixed it making the os viewport relative and the position being always positive (with Math.max()) I was making a weird calc and then realised i could use this function. lol I also improved the organization and renamed a little files"}, {"post_id": 16574, "ts": "2026-06-26T23:15:09Z", "hours": 0.9628, "text": "Devlog #05 Now there’s custom backgrounds! I added a window where the user can input a image file and upload it to set the background. I learned how to handle file input events and File objects in Javascript."}, {"post_id": 15738, "ts": "2026-06-25T16:45:11Z", "hours": 0.9431, "text": "Devlog #04 DEPLOYED! The basic features are now working. I’ve added a stardance info app!"}, {"post_id": 15693, "ts": "2026-06-25T14:50:35Z", "hours": 0.7431, "text": "Devlog #03 I’ve styled the OS Top-Bar, the app-launcher, made the hacker notes app and windows are now scrollable. Everything just works fine. I also made some code improvements such as splitting the css logic into new files."}, {"post_id": 15350, "ts": "2026-06-24T23:19:45Z", "hours": 1.5461, "text": "Devlog #02 I made the clock of my webOs, the grab function and the windows and the close/open functions. I also corrected some overflow bugs (the window was stretching the page when pushed downwards)."}, {"post_id": 14816, "ts": "2026-06-24T01:53:06Z", "hours": 1.45, "text": "Devlog #01 yeeep First devlog of my webOS! I’ve found interesting to make this mission. Is a veryy saturated project but i think i can make something at least presentable. By the time i’ve just scaffolded the initial style classes and the initial content. Is nott draggable yet. I plan to refactor the web page to vue in a really distant future"}]...
|
Title: RenanG_OS by @renanfartes | Stardance
Devl Title: RenanG_OS by @renanfartes | Stardance
Devlogs:
Devlog #01 yeeep First devlog of my webOS! I’ve found interesting to make this mission. Is a veryy saturated project but i think i can make something at least presentable. By the time i’ve just scaffolded the initial style classes and the initial content. Is nott draggable yet. I plan to refactor the web page to vue in a really distant future
Devlog #02 I made the clock of my webOs, the grab function and the windows and the close/open functions. I also corrected some overflow bugs (the window was stretching the page when pushed downwards).
Devlog #03 I’ve styled the OS Top-Bar, the app-launcher, made the hacker notes app and windows are now scrollable. Everything just works fine. I also made some code improvements such as splitting the css logic into new files.
Devlog #04 DEPLOYED! The basic features are now working. I’ve added a stardance info app!
Devlog #05 Now there’s custom backgrounds! I added a window where the user can input a image file and upload it to set the background. I learned how to handle file input events and File objects in Javascript.
Devlog #06 As some reviews said, the windows were struggling when the mouse was above the viewport! So i fixed it making the os viewport relative and the position being always positive (with Math.max()) I was making a weird calc and then realised i could use this function. lol I also improved the organization and renamed a little files
Devlog #07 Working on a calculator! I added the window, some reaaaly basic style and i fixed a lot of small details that i didn’t see (as all windows having the name of the OS, etc) None functionality had been implemented by now. I also created a branch for this feature. Is simple, but turns out i never really worked with branches in the past. XD
Devlog #08 Calculator finished! I added the functionality with error treatment (infinity and NaN handling), a custom font and i added the apps icons. I also fixed a relative path problem with the default background. Also i learned how to delete a branch after merging it. It’s simple, but as i said before i never worked really with git branching. :p
Devlog #09 Terminal Scaffolded! I simply just added the icon and added some style to the new window. It is translucid now and i plan in making a feature to disable transparency Later. The inputs of the terminal are correctly placed, but none functionality yet. (yeah, jetbrains mono as default XD)
Devlog #10 TERMINAL LOOP! FInally i added the logic to loop the terminal. Now it Receives an input. When Enter is pressed, the terminal engine parses it, and then executes. After, the terminal prints the OS string. Since there isn’t any terminal logic or so, the function just returns a plain old string. But using a getter function allows me to refactor easily later. Commands: help and clear implemented.
Ships:
I made my first and custom WEBOS! Is simple. I learned a lot about DOM manipulation and stuff.
My personal WebOS project. I created it to learn more about DOM manipulation, Navigator features and some other really cool stuff, such as dragabble logic and image saving in base64. There’s a Hacker Notes app, custom background and stardance info.
I made my very own Web OS. I learned how to work with branches, handle remote settings and some parsing logic. The app includes multiple draggable windows, a terminal with 2 simple commands, a calculator, some notes and a change background function so you can upload your image! None AI Used for coding. I used only to understand the w3schools code for making HTML windows draggable, but none code was wreitten by it!...
|
1792831872.6268198
|
1792918272.6268198
|
|
25109
|
Into the cosmos by @tejaswa | Stardance
|
tejaswa
|
3
|
124.31
|
2584
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T04:20:51Z", "hours": 54.0, "multiplier": 19.58, "payout": 1259, "blessing": "neutral", "text": "INTO THE COSMOS This is the game i have designed with inspiration from Spaceflight sim and Kerbal Space program, i wanted to capture the total freedom of roaming in space without the stress of designing a space vehicle for hours just for it to crash into a million pieces. I wanted to make a chill relaxing game that people can come back home after a long day of work to, boot it up and have fun just roaming the eternal space without stressing out. Im quiet proud of how im capturing this vision of mine and im very happy with what im making. Heres some information of what i added this ship: I’ve basically been adding a bunch of systems that I’ve wanted in the game for a while, and the game is starting to feel a lot more like an actual sandbox now. First thing, I finally added electricity. This is probably one of the systems I’m most interested in because now I can actually start making more things depend on power instead of everything magically working forever. This also gives me a lot more stuff I can do with spacecraft and bases in the future. I also added scraps and scrap refining. You can now collect scraps while exploring and actually do something with them instead of them just being random useless objects. I’ve also added the material processing system around this, so scraps can be refined into materials that can actually be used to build useful buildings. This is going to become a much bigger system later on. ROVERS ARE FINALLY HERE You can now actually drive around on planets instead of just landing there and leaving. I really wanted this because the planets were starting to feel a little pointless once you landed on them. Now you can actually get out there and explore the surface properly. I’ve also added planet properties. Planets now have their own properties which means I can start making different planets actually matter instead of them just being randomly generated balls you land on. There’s a lot I can do with this later, especially with resources and exploration. I also did a pretty big overhaul on the visuals. The ambiance shaders have been improved and I’ve added a bunch of new stuff to make the planets and space itself look better. black holes now also have a hidden easter egg…. Ive also given every planet a beautiful atmosphere And yes. Mudfish I don’t know why. They’re still stupid. They just walk around on planets doing absolutely nothing useful. But honestly the universe felt too empty without them so I’m keeping them. A lot of this update was also spent doing optimization because some of the newer systems were starting to get pretty heavy. I’ve been going through different parts of the game and trying to make everything run better without completely murdering the visuals. Overall this update is probably one of the biggest changes to the game so far. And I still have a stupid amount of things I want to add. https://www.youtube.com/watch?v=ZZg3blASmgc This is the link to the youtube video if you dont have time to review the game PLEASE check it out and rate the project I read and appreciate every single one of you reviewing this game, please be as informative as you can be as this is one of the biggest games ive worked on till now, thx and have fun playing the game", "repo": "https://github.com/tejaswa4692/IntoTheCosmos", "demo": "https://tejaswa7692.itch.io/into-the-cosmos"}, {"ship_num": 2, "ts": "2026-07-08T12:04:25Z", "hours": 46.0, "multiplier": 19.75, "payout": 1084, "blessing": "neutral", "text": "Into the Cosmos Join Boney on a journey across the endless cosmos, where every horizon hides another world waiting to be discovered. Launch into the unknown, weave between glowing nebulae, drift past impossible black holes, and set foot on planets no one has ever seen before. Build observatories to mark your path through the stars, refuel your rocket, deploy satellites into orbit, and keep pushing farther into the infinite. And when the day is finally over, come relax with Boney and lose yourself among the stars for a while. I’ve always loved games like Kerbal Space Program and Spaceflight Simulator, but I wanted something where you could jump straight into flying without spending hours designing the perfect rocket first. The result is a sandbox space game built around realistic orbital mechanics, exploration, and simply enjoying the journey. The universe is procedurally generated, meaning there is always another unique planet waiting somewhere beyond the next launch. Every expedition can take you somewhere completely new, and every observatory you build becomes another milestone in your adventure. Satellites aren’t just for show either. Launch them into orbit, revisit them later, and use them as your eyes in the sky while you continue expanding your reach across the universe. If you’re new to orbital mechanics, don’t worry. The game includes detailed instructions, an optional on-screen keybind guide, and a full in-game settings menu that lets you tweak graphics and performance to match your hardware. Whether you’re playing on a high-end gaming PC or something much more modest, I spent a lot of time optimizing the project so as many people as possible could enjoy it smoothly. There is one place, however, that lies farther than anywhere you were ever meant to reach. Most people will never find it. Those who do usually don’t come back with an explanation. I call it The Farlands. Whether it’s a bug, a feature, or something else entirely is for you to decide. I built this game in Godot 4.6.2, spending countless hours refining the physics, procedural generation, shaders, rendering, UI, and gameplay systems. Every optimization, every visual effect, and every mechanic was added with one goal in mind: making space feel like a place you can get lost in for hours without realizing where the time went. So fuel up, trust your trajectory, and see just how far Boney can go. If you decide to give the game a try, I’d really appreciate a detailed review afterwards. The feedback I received on my last project genuinely helped shape this game into what it is today, and I’d love to hear what you think could be improved, what you enjoyed, and what you’d like to see added next. If you enjoy the project, consider starring the GitHub repository and liking the YouTube video. It really helps more people discover the game and motivates me to keep building and improving it. So fuel up, trust your trajectory, and see just how far Boney can go.", "repo": "https://github.com/tejaswa4692/IntoTheCosmos", "demo": "https://tejaswa7692.itch.io/into-the-cosmos"}, {"ship_num": 3, "ts": "2026-06-30T14:45:22Z", "hours": 14.0, "multiplier": 17.81, "payout": 241, "blessing": "neutral", "text": "I made Into the Cosmos, a realistic 3D spaceflight sandbox inspired by Kerbal Space Program and Spaceflight Simulator. The game lets players jump straight into the mission and experience realistic orbital rather than spend hours designing the rocket just for it to fail when launching. This is a relaxing and fun game where players can just sit back and enjoy the physics and thrill of sending rockets to space. The biggest challenge was making somewhat realistic physics with enjoyable gameplay. Getting the gravity, RCS controls, and spacecraft handling to feel both snappy and fun to play with without absolutely broken, writing so many lines of code, and deciding on how im gonna be approaching some problems was quiet fun, i have a lot of fun designing it, i used to go to bed thinking what ill be adding to the game tommrow. I’m most proud of achieving the relaxing experience I originally envisioned. Im quiet glad i was able to fianlly have a direction towards my game and have an idea of what i wanted. And the gameplay is quiet fun aswell, i found myself “playtesting” my games just having fun slamming the rocket into planets, doing interplanetary missions. Setting satellite in different planets To test the project, I recommend reading the in-game controls and instructions first. They explain the basics of reaching orbit and make the experience much more enjoyable.", "repo": "https://github.com/tejaswa4692/IntoTheCosmos", "demo": "https://tejaswa7692.itch.io/into-the-cosmos"}]...
|
[{"post_id": 54490, "ts": "202 [{"post_id": 54490, "ts": "2026-08-25T14:44:08Z", "hours": 0.6006, "text": "SHOUT OUT TO @253_Mathilde_IYKYK For starters i made a lil script so that if a rocket is in the SOI of a planet and then it scans near it by pressing F it shows all the necessary details about the planet, currently they are obvious details but i will work on making them useful. I have a few ideas of what i can do with it Now to the important part @253_Mathilde_IYKYK recommended me to add a song they like SO I ADDED IT TO THE GAME Hope yall like it :) (Sorry for not including video idk why stardance was bugging and throwing error when i was tryna upload a video)"}, {"post_id": 53590, "ts": "2026-08-24T06:27:00Z", "hours": 1.7239, "text": "BOOMBOX!!1! , macondo marketing team too good Last night i spent unhealthy amount of time watching ig posts of macondo on hackclub ig, I lowk feel insane amount of fomo and i wanted to go so bad The songs they used in the marketing reels are still stuck in my head So as any reasonable person would, I added a boombox in my game with with my fav songs from the reels they made @zach PLES FLY ME IN NEXT IRL HC EVENT PLES IM BROKE"}, {"post_id": 51670, "ts": "2026-08-21T14:03:35Z", "hours": 1.3228, "text": "IM RICH!!11!! 2080 sd and top 10 in multi I got all positive reviews from yall and i apprciate every single one of u for rating my project. I have finally added scrap mines to the game, i had already made the 3d model for them i just thought they didnt fit in the game but since im adding automation and electricity to the game i think this would be a great addition. Currently they produce 10 scraps, copper, iron per 10 seconds so 1/ sec i will later randomize this and give them weights, im js too lazy cuz of this clg n shi istg Good thing is tho tmr im going home That does mean my work on hardware projects will start again That being said i need you to give me more recommendation for the game, the reviews didn’t give me any ideas or unique views what i could add to my game."}, {"post_id": 49072, "ts": "2026-08-17T17:51:03Z", "hours": 2.0336, "text": "In these 2 hours i have lost all my sanity But finally the factorio like supply/demand electricity mesh finally works First i thought of using recursion to spread the electricity through every single tower But then i ran into a problem where towers interconnected so to fix that i passed a self parameter that didnt seem to help. Then i decided to make towers only connect once (which was a disaster and brought its own set of bugs) and that to tremendously failed So finally i decided upon a global mesh chain architecture where all the nodes in a chain have similar looking list, and whenever an appliance is connected to it the chain just iterates through its connected devices, This in turn brings the time complexity down to O(n) and makes everything a whole lot more efficient. Finally this is done Currently only the tesla charger works with this new logic, later i will add other electric appliances to this mesh network aswell and give them watt draw Few things to keep in mind, Currently 1 generator makes 50kW and one vehicle charger consumes 40W, If the demand isnt satisfied every node in mesh rejects the connection until the demand IS satisfied I know this might feel stupid for some people but this is only done as a feature so you dont overload the electronics in space"}, {"post_id": 48779, "ts": "2026-08-17T09:55:49Z", "hours": 2.4833, "text": "TESLA SUPER CHARGING So for starters i forgot to tell yall that i DIDNT get slimed by senior my clg department helped me and scared tf outta bro and i got to fight bro too And in this update i added set battery capacity to rovers They use supercapacitors to store charge so that means they can be charged and discharged for eternity Then i added charging stations to the game and made them use power grid electricity. I think players might abuse electricity by only placing 1 generator to power an entire city so i will be implementing complex wattage draw logic like they have in factorio to get some supply/demand action rolling. Then i worked on implementing save game in the game and i failed terribly (this will be a hurdle for later) I spent like solid half an hour trying to implement it just for my save file to be completely empty Idk whats going wrong but i will eventually figure it out. For now tho i will be working on factorio like supply/demand logic for electricity wish me luck"}, {"post_id": 48283, "ts": "2026-08-16T16:23:11Z", "hours": 2.1503, "text": "Some really cool additions For starters today i implemented a little list at bottom of the screen that can be used to store the coordinates of player rn Yall might be wondering what tis could be used for, But i have something really cool cooking up in my head lets hope i am able to express it properly. EXPRESSING MY LOVE OF YAGI ANTENNAS I ADDED A YAGI ANTENNA TO THE GAME!1!!! It has a search feature that looks around for strongest signal and then does nothing But in future i will be making a whole mechanic out of this. Then i made a little web release it butchered the visuals i worked hard on. Its okay tho cuz i added a warning label like last time on that release too. Linked the web release as playable link for the game I want YOU to tell me what should i add to this game as im running into a roadblock where i dont know what i could add for the electrical update for the game that would actually be a useful addition, Comment down below to drop your ideas the best one will make it into the game"}, {"post_id": 47469, "ts": "2026-08-15T12:12:27Z", "hours": 4.2428, "text": "YAYAYAYAYAYA 3RD SHIP INCOMING In the first 2 hours i logged i worked on making the 3d models as refined as possible and made them look good by referring to astroneer as someone commented on my game Also made multiple 3d models for the electric pole and finally used the one that sat right with me. Made a new 3d model for generator and upgrade station aswell In the next 2 hours i made minor tweaks and fixed satellite bugs along with updating the help menu with newer control code, also was thinking of implementing a scrap mine but dropped that idea (maybe later ships) Then i added a little keytip marker near the refinery and chest of observatory to aid the player. Added a bunch of sounds to the electronics of the game and now it sounds a whole lot better (also reduced the main music) FINALLY TIME TO SHIP Thnx to all of the support on this proj i wont disappoint yall at all with future ships"}, {"post_id": 46499, "ts": "2026-08-13T19:09:37Z", "hours": 1.13, "text": "I was aiming for 3 hours today but i lowk got in a fight with a senior in my clg and bro is threatening me to slime me tmr it might be wraps for me gng Putting the sliming part aside, today i made the 3D models for a generator concept (or actual thing) i found online of what they use in space. The i did sm audio editing to have a whrrrrrrrrrrrr looped sound effect and it was quiet easy to make a whrrrrrrrrrr loop, easier than i imagined. Then i added another sound and layered both ontop of each other and now it genuinely sounds kinda peak After that i made the electricity spread across all the electric poles, heres the code for that if body.is_in_group(\"tower\"): towers_closest.append(body) create_lines(body.location_to_connect_wire_to) if has_electricity_running: body.has_electricity_running = true elif body.is_in_group(\"electrical_appliance\"): if body.connected == false: towers_closest.append(body) create_lines(body.location_to_connect_wire_to) body.connected = true if body.is_in_group(\"generator\"): has_electricity_running = true for i in towers_closest: if i.is_in_group(\"tower\"): i.has_electricity_running = true I might lowk be taking AI’s job in writing bad code, they should make a me gpt in which i reply with shit code that DOES work. I also visualized the flow of electricity by hiding/showing a random cylindrical mesh that shows if it has elec flowing through it. Tmr ill be redoing ALL the icons cuz currently they look straight dookey, and also fixing the UI, then if i have time give observatory and everything an electric connection and make them so they dont work without it. This was all i worked on today, yall pray for me lets hope i dont get slimed tmr ."}, {"post_id": 45792, "ts": "2026-08-12T14:42:25Z", "hours": 6.0336, "text": "LETS GO IM FINALLY UNBANNED Unban stuff aside, time to explain the devlog even tho being unbanned feels great and i have insane amount of motivation to work on my proj now In past idk however weeks ive been working on 2 major things, first is that ive finally listened to the last ship reviewers and added upgrades for rocket, with custom 3d models for each rocket tier. currently it uses a separate key to open close the menu which is bad but ill fix later Also only the rockets fuel attribute is updated when you upgrade a rocket so ill fix that too. Also after the ban i was working on electronics update for my game, i have implemented electric poles, 50Kv Generators for now, i am going towards direction of factorio im afraid, but i dont wnana make it very grind-y so ill keep that in mind (hopefully) For future i will be adding better UI/UX its currently embarrassingly bad rn (even tho my degree is Computer science and Design) So yeah that will need a massive revamp Also id like to give a shout out to water #Freewater #heaintdonunwrong"}, {"post_id": 40560, "ts": "2026-08-04T06:09:37Z", "hours": 1.4125, "text": "After getting falsely accused for fraud for using the godot wakatime extension and getting a heart attack I have finally added little homes for these skinny dookeys I hate, HATE behavior trees with every cell in my body I hate to admit but i did take help of claude chat to help me set this shi up, it was js the free version tho so we good. I added so like normally it ran away from player if it sensed one near, but now if the player is close by and it has a home near it runs to that and hides in the home, and if player is far enough it emerges back out. Ill move on to adding more entities now rather than polishing these dudes, i think from the final game i wont even keep them in cuz how ugly and weird they are Aye free me bro i aint do nothing wrong, fix the wakatime extension fr"}, {"post_id": 39489, "ts": "2026-08-02T13:55:59Z", "hours": 1.7764, "text": "REALLY NICE ADDITIONS Ive finally added some life to the game. I have added these weird mudfishes inspired by those weird furless cats. These mud fishes aren’t stupid tho, i ___have implemented a proper behavior tree to them, Each one of them has their own set of actions. Normally like minecraft mobs they roam around look around the world, but if a player is near their vicinity, they RUN away from the player protecting them. Currently i have no clue what ill use them for, but one thing is for sure that they have really nice skin I wonder what will happen to it in the near future Really happy by this addition tbh, the world was getting kinda lonely, this was important, in next updates ill be adding colonies of these things mounds and their homes, along with their baby variant."}, {"post_id": 38887, "ts": "2026-08-01T13:38:58Z", "hours": 1.4058, "text": "Man i hate making 3D models Not my best work yet, but refinery is done, After several iterations, getting inspo from pinterest and then ditching it and drawing one in back of the class, im finally set on a design, it looks pretty good as of rn. (its not) I fixed a bug where the text was glitching out when i tried to craft scraps, and now it works as it should. The logic is perfect for how it should act in game and im hoping i dont have to touch it again in future to fix it. That being said ofcourse ill be making the 3D model better, But for now i just wanna focus on programming stuff and making the loop right. We can always make it prettier later . Im unfortunately still not home and i still have to survive in this godforsaken room, but hopefully ill be home soon as ill get my appli signed to go home, And then ill be working on both this and the plane together"}, {"post_id": 37473, "ts": "2026-07-30T07:46:37Z", "hours": 4.0967, "text": "Finally a devlog after several days of straight struggle For starters ill tell yall why it took me so long I lowk changed places and i live alone in a room now, i had to shift and living conditions here are absolute hell I somehow survive without going wild due to all the bs ive been facing recently. My productivity has taken a severe hit, a feature like this took me way too much time to complete than it should’ve. That being said i did wander off in different directions cuz i was lowk clueless which direction i should take this game (i still havent decided ) In this devlog i added advanced material processing and advanced materials to the game, with a minecraft furnace like cooking mechanics, i made the logic quiet efficient and refined, its not my best work but it can always be better later. I js hope this eternal torture ends and i finally get to have better living conditions. istg ive been boiled alive, breathing is a struggle in this place Ill keep serving yall with most banger updates so keep me followed, this game is gonna be the next big thing lowk Now i will be makig the 3d model for refinery, before this i made a failure ahh model in whcih i js made a complete simithing room inside a space bubble 😭 Gotta make something better than that so time to lock in"}, {"post_id": 35113, "ts": "2026-07-26T10:39:31Z", "hours": 2.3589, "text": "OKAYAYAYAYAYA UPDATE TIME I have graves implemented in the game now, after careful consideration about which direction i wanna take my game towards, i think graves would be a nice addition without disrespecting the procedural nature of the game. I want to make this game very lore heavy while being fully open world and giving the remote in players hands. I dont wnana confine them with thick story plot, or tedious tasks. Nor do i wanna make the game absolutely boring and pointless. The “Rot” i talk about is a cosmic disease the players universe is going through, unexplainable things are happening, weird inter dimensional gates are popping up at random places, everything is near extension. Im not sure about the role of player in all this tho, i will figure something out tho, i wont disappoint yall thats my promise. Also i worked a bit more on a weird bug where items were being placed not where the raycast was supposed to hit. Also I will be removing the inventory system entirely and just rely on blueprint building aspect lmk if yall think thats a good idea Also shout out to hackclub for getting me so much stuff i really love every single one of yall ❤️ Also progress on this game will go back to high now as i wont be home to work on my plen."}, {"post_id": 32900, "ts": "2026-07-22T11:12:22Z", "hours": 2.2856, "text": "OKAKAKAYAYAY some more cool additions for exploration aspect for the gam I added an arrow that points towards a set direction, which also changes its with respect to how far the rocket is from that point Also I FINALLY FIXED THE WATER WALKING SOUND ISSUE!!!1!!! Turns out it was quiet easy, i was just too stupid and over complicating it, a simple rewrite fixed everything. For next update i will be adding findable clues, maps, coordinates left out to rot by a “past explorer” that you find across the universe, this is gonna require a bit of time and skill but i can deliver that easy with some time Again progress is a bit slow cuz im actively working on my biggest endurance aircraft but i will keep tis game updated nonetheless, and in future u might even find it on steam who knows"}, {"post_id": 31916, "ts": "2026-07-20T18:18:16Z", "hours": 1.595, "text": "AYEEEYEYYE UPDATE ON THE PEAKEST GAME Made a really smart decision and got rid of the ugly hotbar like menu to place items, now da gam has a nice build menu in which most of the time was spent in making my code more cleaner. But it works now, it looks way more clean and immersive. Instead of relying on hardcoded information for items, i finally made a global that can handle all of that, idk why i didnt do that earlier. About the sound engine, i genuinely hate it a lot, i will be redoing it from scratch and figure out wtf is wrong with it Sorry for slow progress, i dont have much time till im at home so im tryna maximise the time i spend on my rc plen, ples follow it aswell"}, {"post_id": 30554, "ts": "2026-07-18T07:09:50Z", "hours": 1.0953, "text": "Oh i did manage to fix the water walking loop a lil more, its not perfect, but i dont understand whats going on. so ill just work on that later Anyways thats that, big changes i made are that now to place observatories or rovers you need to have a specific amount of scrap on you, i will be turning this into a full fledged build menu so its more appealing, and i will have this menu as a quick hotbar to place blueprints of items. I find this gameloop satisfying as it takes away the management hassle and this game is supposed to be relaxing. And bro how long IS the queue my bambu is STILL not shipped Sorry for slow updates on this project, currently working my ass off irl on the UAV project of mine as i have a deadline to finish it. If i did manage to get a good rep towards this proj, ill be taking the reviewers advice and hosting this game on steam. That developer grant might come in handy ngl"}, {"post_id": 29586, "ts": "2026-07-16T16:53:16Z", "hours": 3.3417, "text": "AYEEEEEE DEVLOG TIME So today i redid the observatory 3d model, gave it some clean nasa textures, its not upto my standards but its getting there, also fixed that stupid atmosphere bug now everything looks insanely better. Added a planet to the launch screen to flex aswell, i think it looks awesome there. Oh and also i tried to add water walking sound but am failing miserably but worry not as i will be reworking the soundengine too later Taking a moment to give a shout out to my followers who motivated me to work on tis more also HM all the reviewers who gave incredibly nice feedback"}, {"post_id": 28757, "ts": "2026-07-15T07:07:48Z", "hours": 3.0931, "text": "HOLEE SHIT, ADDED INSANE STUFF TO MY GAME IT LOOKS SO BEAUTIFUL NOW, I CANT BELIVE IT So, for starters, since yesterday I have been learning shaders. I fixed that shitty atmosphere shader that I translated from someone else’s shader to Godot. I had to make a lot of changes to it to get it working properly for my game. ALSO I MADE A SICK ASS WATER SHADER FOR PLANETS TO HAVE. Then I REWROTE THE PLANET GENERATION SCRIPT. Now each planet has unique properties like: Ambient temperature Water availability Air density, which determines water availability too I also tried adding comets and comet trails to the game, but failed tremendously. Oh, and also, dont go near the black hole. OH AND I GOT MY PAYOUT, AND I GOT THE BAMBULAB A1 MINI. THIS DAY JUST KEEPS GETTING BETTER"}, {"post_id": 27829, "ts": "2026-07-13T18:30:42Z", "hours": 3.1256, "text": "Devlog #idk Didn’t get a ton of new content added today, but I spent most of the time cleaning up annoying bugs and polishing the game. The biggest fix was the rocket explosion system. There was a bug where the rocket would slam into the ground at over 300 m/s … and just refuse to explode. I rewrote the logic, and it’s finally behaving properly. I also started modeling the mothership . It honestly looks like absolute dookey right now, but it’ll do as a placeholder. 3D modeling definitely isn’t my strongest skill, so I’m calling this version “good enough” for now. On the graphics side, I added a proper atmosphere around the planets, which makes them look much better. I also experimented with chromatic aberration , but it didn’t really fit the style of the game, so I ended up removing it. Huge thanks to @aloyak for the inspiration and some really helpful rendering tips. He showed me a much better way to increase the render distance without killing performance, so I’ll be implementing those improvements tomorrow. Also… I earned 1085 Stardust on my second ship. Not bad."}, {"post_id": 27157, "ts": "2026-07-12T13:40:03Z", "hours": 4.2947, "text": "OKAY so really cool changes First of all i fixed major inside stuff, instead of having 350 lines of gd script files in which i had to sift through to find the function i need, and then get overwhelmed later, i made everything modular, All the functions are Nodes in the scene that hold scripts. These scripts hold the functions that were earlier stored in the main .gd file, so now everything is a lot less cluttered and makes my life easier. I also did the same for the rocket scene as it was getting cluttered too. I added chests to the game where you can store items in (dont mind the invisible hotbar), They will be locations to store your items which will be scattered inside of observatories, im also thinking of redoing observatories as this model now looks ugly, and i think this has a lot more potential. Oh and also i have decided upon how im gonna make the player create an observatory, you land on a planet, collect scraps, them build an observatory, and then everything in observatory would cost the player X amount of scraps, also abandoned motherships will also provide the player upgrades for rocket. I got 3 ratings which im thrilled about, but also kinda sad because the reviewers prolly playing the itch release of the game and not the actual one but eh i think its fine, as long as my game is peak. Next ill be working on making an actual 3d model for the mothership"}, {"post_id": 26683, "ts": "2026-07-11T16:52:12Z", "hours": 2.1936, "text": "Designed the actual model for the rover, im pretty happy with how it turned out, i think ill keep it. tweaked the settings for the rover to get it just right, the only problem im facing is that due to the curvature of the planet, rover js flys off n start orbiting at high speed, i gotta add down force to tis i think. I removed the inventory cuz it was too wonky, i think ill have a hotbar and a backpack like peak, i think thatll be more immersive than having a stupid inventory. (this is totally not because i went rabid trying to implement it)"}, {"post_id": 26423, "ts": "2026-07-11T06:30:37Z", "hours": 2.1986, "text": "So i changed the Help UI of the game, made it look a lil better than that roblox ahh UI, Added mother stations to the game where u can get rocket upgrades, im slowly trying to figure out the game loop, itll be that you are a lonely astronaut in eternal void of space, your kind has been extinct, these ships are abandoned u can repair them and get a specific upgrade from each of them. Also i made the web version available too, its been 3 days and ive been sitting at 0 ratings just demotivated the hell out of me, the quality of graphics and gameplay is butchered but i had made that clear in the itch page, lets hope people rate it now"}, {"post_id": 25881, "ts": "2026-07-10T11:24:42Z", "hours": 5.6075, "text": "Working on making the game loop more fun, Im thinking ill be taking the game towards single player base building story mode type of game, I made a web version cuz i had 0 reviews after 2 days, the web version isnt good at all but its make do, I added rovers to the game now too its insanely fun driving them around the planet and having fun, i will be adding more stuff to the game, inventory system turns out is way harder than i expected so ill do that later. Enjoy this clip of the game"}, {"post_id": 25202, "ts": "2026-07-09T09:33:14Z", "hours": 2.2953, "text": "Made major game optimizations, Am adding a proper inventory system with crafting, I have designed inventory with crafting in past for my cooking game shouldn’t be that hard, But doing it in preexisting is a bit of a challenge. I have implemented a simple hotbar and item system in the game, I also used Godots IK nodes to control the bones, and god damm was it useful, this might come in handy in future. Switch to this camera does make it look a lot better"}, {"post_id": 24651, "ts": "2026-07-08T11:38:24Z", "hours": 0.5031, "text": "Okay just fixed another tiny bug, im glad i checked it, when i select the satellite for an observatory, the UI doesn’t open again, so it made it impossible to refuel, i fixed that by giving an option to control satellite now. I think im set for the ship now, i reccomplied the binaries, the readme is ready to, along with the latest youtube video https://youtu.be/RQmEh_rwnzQ"}, {"post_id": 24598, "ts": "2026-07-08T09:44:34Z", "hours": 4.72, "text": "Final devlog before ship. I have polished the UI, remade the boney 3d model, Fixed observatory logic, made other tiny gamebreaking improvements, Also i have fixed animations for boney, added a jump animation. Major change is 3rd Person camera now, which makes the whole experince even more immersive. I have playtested it several times, im kinda nervous and hoping it works perfectly as it is on my machine."}, {"post_id": 24288, "ts": "2026-07-07T19:13:44Z", "hours": 4.7478, "text": "Getting the project production-ready. I’ve finally added local storage for the settings menu, so your graphics and gameplay preferences now persist between sessions instead of resetting every time you launch the game. A lot of people mentioned in the last devlog that they couldn’t figure out the controls, so I added a “Show Keybinds” toggle in the settings menu (press ESC to open it). It displays the controls on-screen whenever you need them. I also found a pretty game-breaking bug, so I’m documenting it here for future me: If you’re mounted in the rocket, enable Show Keybinds, and then hit Apply, the player can no longer unmount from the rocket. I’ll be fixing that later. I spent some time messing around with Godot’s built-in graphics settings and realized I’d completely forgotten to enable anti-aliasing. Turning it on made a huge difference, the game looks so much cleaner now. As you can see, I’ve also added a fuel gauge for the rocket. It helps sell the whole “claiming and exploring planets” vibe. I also changed observatories so each planet can only have one. Another gameplay change is that you now have to visit an observatory to dock a satellite onto your rocket instead of doing it anywhere. Finally, I changed how world persistence works. If your rocket crashes and you reset the game, any observatories you’ve already built will still be there instead of disappearing."}, {"post_id": 24002, "ts": "2026-07-07T08:55:54Z", "hours": 4.1525, "text": "Today i have just started refining the 2/3 stage gameplay i made it so you cant just spam sattelites wherever you want, but instead you have to get them docked on your rocket at the research center. I made the ugly loading screen a little better, i will fix it even more by designing custom graphics for it I revamped the 3d model for the research facility, it has interior and the infamous meme toilet where little boneys take a dookie in unison. (This will be a feature in 3/3 version of the game) Currently i have fixed some more gamebreaking bug where the ui just straight up didnt work, turns out it was due to my own stupidity of forgetting to hide an transparent panel in the scene tree."}, {"post_id": 23577, "ts": "2026-07-06T16:46:05Z", "hours": 4.7711, "text": "SO, Im now starting to add everything people complained about or found annoying in my first ship, Someone pointed out i had made the help but the help i made didnt tell what keybinds to use, so i have designed a dynamically UI screen to add guide for button keypress, it was a bit of a tedious job but its done now. Since i understand that not everyone has a good computer, (I have an RTX4050 with Ryzen 7 AMD Ryzen 7 7435HS CPU with 24 gigs of ram so i cant rely on my laptop to be an average computer) but i know not everyone has these specs so i took the time to code more settings in the settings section, now i can select the major factors of FPS drop in this game. Also i redid the noise the planets used, the noise textures is used before if you see from earlier videos looks very choppy, unrealistic and creative, now it looks a LOT better. Currently i haven’t added keybinds UI for the rocket, which ill add later, I will be making a ship soon after fixing more bugs that i delayed for later."}, {"post_id": 23362, "ts": "2026-07-06T09:04:28Z", "hours": 7.4369, "text": "Finally the biggest change ever yet, this took me HOURS of rewriting debugging fixing weird glitches, tried to even recompile Godot at one point, But its done, A truly frame efficient infinite procedural planet generation with randomness and seed integrated in it, this took so much of my sanity, so many broken hairs, but finally i am able to perfectly get it working at 144fps and around 11ms average frame time. I also optimized the rock generation even more to take advantage of godots multi threading capabilities to take the load off the main thread to generate the chunks for rocks. Current limitations of this architecture are not the architecture but the godot engine itself, as it uses 16 bit floats to keep track of transform, so if you’re like 100,000 units away from your home planet you start facing very weird glitches, I personally think im gonna keep this glitch in the game as i have no idea how these glitches will affect the gameplay, its like minecraft farlands, i want to see how the world generation breaks, and i dont want to stop the player from experiencing that aswell. Its not that idk how to fix this, if i recompile godot to use double instead of float i can extend the range of the farlands way beyond that, but its just the matter of personal preference. I have quiet insane ideas and directions for this project now that ive came so far, its kinda funny how all this became what it is just because i wanted to control a rocket in space."}, {"post_id": 22728, "ts": "2026-07-05T09:44:51Z", "hours": 4.8342, "text": "ABSOLUTELY INSANE ADDITIONS FOR MY GAME THIS TIME. First of all my first ship was finally reviewed so i read all the reviews and made a mental note of all of them, they were all positive and im very happy people resonate with my project so i appreciate everyone who wrote a very thoughtful review for me i thank you all a lot. Now in the technical part of the game: I finally fixed my nebula raymarched shader, now it actually has volume and you can go inside it and it looks absolutely ethereal. Reviews told me that they would love it if the planets had more details, so details i added, i made a VERY efficient chunking pipeline to scatter debries, and whatever i want on the planet mesh, i am being able to have the whole planet populated with no noticeable drop to performance. I made the script in a way that its a module, so in case if i ever want a planet with vegetation or trees, i can just drop the 3d obj file for that mesh and boom ill have a proper chunk based scatter for that mesh. I tested the chunks using debug cubes and it works perfectly as it should. I also added spacewalking to the game, you can genuinely just float in the space and enjoy the view from the outside, this was quiet easy but its an addition that i shouldve added a long time ago. Also ive finally added randomly generated textures for planet surfaces, these dont look AS realistic rn, but im sure after changing a few parameters and adding proper debrie 3d models, it’ll look absolutely astonishing. From the reviews i read that i didn’t add any help for what keys to use and genuinely thats on me im too stupid so in future ship ill 100% fix that Also ive added a feature where you can currently place observatories on planets and use them to control the satellites, This is just for now as for future ill make the player do stuff on the planet first to have their base setup, I dont wanna complicate it too much as this is supposed to be a relaxing game, but i think this much is necessary. Ive also 3d modeled a tiny astronaut along with his animations and im calling the player boney, i have decided on boney’s lore yet but i can assure yall one thing, it will be insanely deep, and there will be clues for it all around the game, you just have to notice it. I also have massively optimised the star spawning shader, i am able to have 10s of thousands stars on the screen without having any frame drops at all, i used GPU instancing for this and this is genuinely black magic, I also used GPU bill boarding to help aid the performance even more. Removed the unnecessary calculations and now the sky is denser than ever. I also herd people wanted me to make a web release for it as the download process was quiet tedious, but i think 2 devlogs ago you can see me in godots compatibility mode, it BUTCHERED the visuals completely so i dont think i can bring myself to do that after spending so much time writing complex shaders. TODO: Add wormholes, infinite planet generation, coordinate system."}, {"post_id": 22073, "ts": "2026-07-04T10:05:33Z", "hours": 5.02, "text": "Okay this devogg im glad to announce i have successfully fixed that bug in last devlog which i told yall about, this devlog i added a lot of visual eye candy changes, and a few more functional changes. For starters i added a settings menu and a homepage so users with low end devices can change the settings accordingly, these settings will obviously be updated as the game updates. Secondly, ive added GPU instanced particles all around the player to give to the eyecandy factor of the game. Thirdly i added black holes and their custom ray marched shader to them, they also have the stretch effect of light when u go near them like how they describe “spaghettification” in encyclopedias. I also added ray marched nebula in aswell, they currently dont serve a specific purpose apart from the eyecandy factor, but to be fair not everything has to have a purpose as this is just a relaxing chill game. I also changed the music to a different royalty free music, i was genuinely so tired of listening to that track on loop it was driving me crazy."}, {"post_id": 21430, "ts": "2026-07-03T11:40:44Z", "hours": 5.1097, "text": "I have genuinely lost hairs, sanity and life, i have this insanely annoying gamebreaking bug. Currently if the world has more than 1 active gravity source, the satellite doesnt perfectly orbit the planet it should be orbiting, after a while it looses velocity and crashes, this is absolutely gamebreaking as the main concept of the game is gravity. I have tried so many fixes, managed to break the game multiple times, but in the end i think i have a clue of whats going on, when i introduced SOI for each planet, the orbit was still terminating with a crash on the planet, i had made it so that if the body is outside the sphere of influence,it sets the gravity influence from that planet to 0, but even if im in my own sphere, i still somehow crash, i initially thought that the other planets might be attracting the satellite, but i think its the floating point calculations that are messing the orbit up, currently i have no clue how ill fix it but ik ill figure something out. If you guys have any idea what it could be please comment i lowk need all the ideas i can get Anyways i fixed the satellite observatory logic, refined it a bit more, ran tests, tried to implement multiplayer but stopped cuz other bugs got overwhelming. I think ill focus more on designing a nice clean UI now rather than bug fix, which ill do later, cuz they do say “make it exist first, make it perfect later”."}, {"post_id": 20673, "ts": "2026-07-02T10:15:08Z", "hours": 4.4403, "text": "Devlog 8 of my epic space game: Following the trend of making a relaxing space sim game with multiplayer, i added quiet a lot of stuff this devlog, i first of all laid a foundation for future, redid all the buggy code, made all the functions future proof, and then i added observatories, proper satellite controller, and made the satellites be able to control with their respective observatory, now the player can spawn satellites, send them to space or go on a mission, come land back and control the sattelite they have sent to the space. In future ill be adding dynamic and unique planets that will be randomly generated eveytime you log into the game."}, {"post_id": 19227, "ts": "2026-06-30T14:21:37Z", "hours": 0.8425, "text": "DEVLOG 7 OF INTO THE COSMOS This devlog i made some really important additions of a help menu for newer players, i find this quiet important as making an orbit around the planet is quiet hard, so i handdrew some quick informative help guide that can help you quickstart. Also finally ready for my ship #1, i have setup the readme, and made a release for this project, Also uploaded a lil youtube video cuz the guide said so."}, {"post_id": 18501, "ts": "2026-06-29T17:48:37Z", "hours": 1.6342, "text": "Devlog 6 of my epic space game: This update i added quiet a bunch of stuff i was excited to add. First of all major addition, A Satellite, you can carry it from your rocket, take it it in your low planetary orbit and release it in there, itll keep orbiting the planet if you made your orbit right. RCS and thrust with VFX for the satellite this was essential as real life satellites also have this feature and im trying to nail reality as much as i can with this project Finally a better camera, now camera can switch between 2 registered entities, and the selected entity will only be controlled by the camera so thats pretty neat. In the video i showcase the rocket, the satellite, satellite boosters and rcs, landing the rocket, rendezvous with the satellite back again (not really but eh lets just call it that) For future im planning to add redocking (its gonna be very hard to do it in game tho), the game is actually quiet hard its not as simple to create orbits, if the user doesnt have the knowledge of how orbits are made then itll be quiet hard for them to understand that, so for the final release ill also be making a little tutorial. The video is 1.5x btw"}, {"post_id": 18150, "ts": "2026-06-29T05:15:37Z", "hours": 2.8544, "text": "Devlog 5 of my epic space travel game: Finally added more stuff i was delaying to add RCS thrusters effects, now rcs thrusters also have a thrust cone like the main booster Really nice explpsion vfx, now the explosion doesnt look like a low effort particle, its multilayered particles now with sound effects Balanced the game a bit as currently landing was quiet hard, so i fixed that Game is coming together really well, personally i spend a lot of time playing it myself so i know its a banger project, Moving forward i will be adding satellites, save states, fuel system, multi stage rockets, production level graphics to the game. (not posting video as they dont do as well)"}, {"post_id": 17045, "ts": "2026-06-27T17:51:18Z", "hours": 2.4083, "text": "Devlog for my awesome space game, so today i remade the 3d model for the rocket which i was dreading to do but finally got it off, the insane part is that i added a really nice vfx trail instead of kiddie looking particle trail for the rocket, this one looks like an actual thruster and the real deal. Also added music this time around, i tried to add thruster sound but that wasnt working so left that for some other day. tommrow i think ill add proper 3d models for planets and make a replica mini solar system (not ours) The vfx look so sick tho i cant have enough of them"}, {"post_id": 16377, "ts": "2026-06-26T17:33:15Z", "hours": 1.7225, "text": "KSP style sandbox game: Okay so a lot happened since last time, firstly i switched to arch linux as my daily os, and in the game i added planets, RCS, realistic gravity. a planet is a datatype that has information of the mass and gravity scale of that planet, and it can attract the rocket object, also the cool part is you can have multiple planets and create really creative orbits around them, its almost like were actually in spacec Added RCS thrusters as landing on planets was impossible without it, rcs uses shift + wasdqe keys to move in all 3 axis, this makes it very playable but not extremely easy, in the video you can see i still haven’t got the total hang of it yet myself, but ik ill do. Ik i was gonna make a playable release today but due to me wiping windows thats gotta wait a while before it actually happens, For future plans i think ill add a proper environment that replicates space, have enhanced 3d models with HD textures, rcs particles and stuff, also an actual level to play around in."}, {"post_id": 15657, "ts": "2026-06-25T13:49:03Z", "hours": 2.7311, "text": "Okay game is coming along quiet awesome, i managed to make a proper 3d model this time, it has textures and an ugly ass nose cone which ill fix later, currently i made more quality of life changes, made the rocket more snappier, and made it so you can revive, added a lil bit of juice by adding explosion particles and revamped thrust particles as well. Somehow managed to break the entire camera script, but that was soon fixed too so the game is coming along quiet good. For the direction aspect, i currently think flying the rocket around the map is quiet fun ngl, watching me maneuver the landscape by trying to not hit anything in process, also added a moon map and made it similar to the moon by downloading the hightmap data and texture data from actual nasa, but i gave up on that cuz the low res one was trash and high res hightmap was like a bajillion gigabytes and aint nobody gonna download this game if its that big. I played around with different gravity settings and realised flying the rocket is quiet easy if youre on moon compared to earth (duh). So IF (big if) i add levels to it, this might be a hint of what theyll be, again i dont like level system as theyre not fun and u get tired of it soon, i might add multiplayer capabilities later with a python webserver running on the server machine so you can battle with your friends too, possibilities are endless, and ill serve yall good with this one. Like this project and follow me, in the next devlog ill release exe file for this project."}, {"post_id": 14983, "ts": "2026-06-24T10:25:23Z", "hours": 1.3406, "text": "Making an awesome godot game in which you control a rocket ship and you can basically do anything with it, currently i havent decided the direction i wanna take this game towards, i might make it into a demolition sandbox type game, a space exploration game, or a movement type game where you have to reach the destination, like that one cool math game. till now ive achieved Rigid body rocket with its yaw and pitch controls An animated rocket 3d model A test scene with kennys prototype textures A particle style thrust system In next devlog i might add sounds, explosions, and gasoline"}]...
|
Title: Into the cosmos by @tejaswa | Stardance
De Title: Into the cosmos by @tejaswa | Stardance
Devlogs:
Making an awesome godot game in which you control a rocket ship and you can basically do anything with it, currently i havent decided the direction i wanna take this game towards, i might make it into a demolition sandbox type game, a space exploration game, or a movement type game where you have to reach the destination, like that one cool math game. till now ive achieved Rigid body rocket with its yaw and pitch controls An animated rocket 3d model A test scene with kennys prototype textures A particle style thrust system In next devlog i might add sounds, explosions, and gasoline
Okay game is coming along quiet awesome, i managed to make a proper 3d model this time, it has textures and an ugly ass nose cone which ill fix later, currently i made more quality of life changes, made the rocket more snappier, and made it so you can revive, added a lil bit of juice by adding explosion particles and revamped thrust particles as well. Somehow managed to break the entire camera script, but that was soon fixed too so the game is coming along quiet good. For the direction aspect, i currently think flying the rocket around the map is quiet fun ngl, watching me maneuver the landscape by trying to not hit anything in process, also added a moon map and made it similar to the moon by downloading the hightmap data and texture data from actual nasa, but i gave up on that cuz the low res one was trash and high res hightmap was like a bajillion gigabytes and aint nobody gonna download this game if its that big. I played around with different gravity settings and realised flying the rocket is quiet easy if youre on moon compared to earth (duh). So IF (big if) i add levels to it, this might be a hint of what theyll be, again i dont like level system as theyre not fun and u get tired of it soon, i might add multiplayer capabilities later with a python webserver running on the server machine so you can battle with your friends too, possibilities are endless, and ill serve yall good with this one. Like this project and follow me, in the next devlog ill release exe file for this project.
KSP style sandbox game: Okay so a lot happened since last time, firstly i switched to arch linux as my daily os, and in the game i added planets, RCS, realistic gravity. a planet is a datatype that has information of the mass and gravity scale of that planet, and it can attract the rocket object, also the cool part is you can have multiple planets and create really creative orbits around them, its almost like were actually in spacec Added RCS thrusters as landing on planets was impossible without it, rcs uses shift + wasdqe keys to move in all 3 axis, this makes it very playable but not extremely easy, in the video you can see i still haven’t got the total hang of it yet myself, but ik ill do. Ik i was gonna make a playable release today but due to me wiping windows thats gotta wait a while before it actually happens, For future plans i think ill add a proper environment that replicates space, have enhanced 3d models with HD textures, rcs particles and stuff, also an actual level to play around in.
Devlog for my awesome space game, so today i remade the 3d model for the rocket which i was dreading to do but finally got it off, the insane part is that i added a really nice vfx trail instead of kiddie looking particle trail for the rocket, this one looks like an actual thruster and the real deal. Also added music this time around, i tried to add thruster sound but that wasnt working so left that for some other day. tommrow i think ill add proper 3d models for planets and make a replica mini solar system (not ours) The vfx look so sick tho i cant have enough of them
Devlog 5 of my epic space travel game: Finally added more stuff i was delaying to add RCS thrusters effects, now rcs thrusters also have a thrust cone like the main booster Really nice explpsion vfx, now the explosion doesnt look like a low effort particle, its multilayered particles now with sound effects Balanced the game a bit as currently landing was quiet hard, so i fixed that Game is coming together really well, personally i spend a lot of time playing it myself so i know its a banger project, Moving forward i will be adding satellites, save states, fuel system, multi stage rockets, production level graphics to the game. (not posting video as they dont do as well)
Devlog 6 of my epic space game: This update i added quiet a bunch of stuff i was excited to add. First of all major addition, A Satellite, you can carry it from your rocket, take it it in your low planetary orbit and release it in there, itll keep orbiting the planet if you made your orbit right. RCS and thrust with VFX for the satellite this was essential as real life satellites also have this feature and im trying to nail reality as much as i can with this project Finally a better camera, now camera can switch between 2 registered entities, and the selected entity will only be controlled by the camera so thats pretty neat. In the video i showcase the rocket, the satellite, satellite boosters and rcs, landing the rocket, rendezvous with the satellite back again (not really but eh lets just call it that) For future im planning to add redocking (its gonna be very hard to do it in game tho), the game is actually quiet hard its not as simple to create orbits, if the user doesnt have the knowledge of how orbits are made then itll be quiet hard for them to understand that, so for the final release ill also be making a little tutorial. The video is 1.5x btw
DEVLOG 7 OF INTO THE COSMOS This devlog i made some really important additions of a help menu for newer players, i find this quiet important as making an orbit around the planet is quiet hard, so i handdrew some quick informative help guide that can help you quickstart. Also finally ready for my ship #1, i have setup the readme, and made a release for this project, Also uploaded a lil youtube video cuz the guide said so.
Devlog 8 of my epic space game: Following the trend of making a relaxing space sim game with multiplayer, i added quiet a lot of stuff this devlog, i first of all laid a foundation for future, redid all the buggy code, made all the functions future proof, and then i added observatories, proper satellite controller, and made the satellites be able to control with their respective observatory, now the player can spawn satellites, send them to space or go on a mission, come land back and control the sattelite they have sent to the space. In future ill be adding dynamic and unique planets that will be randomly generated eveytime you log into the game.
I have genuinely lost hairs, sanity and life, i have this insanely annoying gamebreaking bug. Currently if the world has more than 1 active gravity source, the satellite doesnt perfectly orbit the planet it should be orbiting, after a while it looses velocity and crashes, this is absolutely gamebreaking as the main concept of the game is gravity. I have tried so many fixes, managed to break the game multiple times, but in the end i think i have a clue of whats going on, when i introduced SOI for each planet, the orbit was still terminating with a crash on the planet, i had made it so that if the body is outside the sphere of influence,it sets the gravity influence from that planet to 0, but even if im in my own sphere, i still somehow crash, i initially thought that the other planets might be attracting the satellite, but i think its the floating point calculations that are messing the orbit up, currently i have no clue how ill fix it but ik ill figure something out. If you guys have any idea what it could be please comment i lowk need all the ideas i can get Anyways i fixed the satellite observatory logic, refined it a bit more, ran tests, tried to implement multiplayer but stopped cuz other bugs got overwhelming. I think ill focus more on designing a nice clean UI now rather than bug fix, which ill do later, cuz they do say “make it exist first, make it perfect later”.
Okay this devogg im glad to announce i have successfully fixed that bug in last devlog which i told yall about, this devlog i added a lot of visual eye candy changes, and a few more functional changes. For starters i added a settings menu and a homepage so users with low end devices can change the settings accordingly, these settings will obviously be updated as the game updates. Secondly, ive added GPU instanced particles all around the player to give to the eyecandy factor of the game. Thirdly i added black holes and their custom ray marched shader to them, they also have the stretch effect of light when u go near them like how they describe “spaghettification” in encyclopedias. I also added ray marched nebula in aswell, they currently dont serve a specific purpose apart from the eyecandy factor, but to be fair not everything has to have a purpose as this is just a relaxing chill game. I also changed the music to a different royalty free music, i was genuinely so tired of listening to that track on loop it was driving me crazy.
ABSOLUTELY INSANE ADDITIONS FOR MY GAME THIS TIME. First of all my first ship was finally reviewed so i read all the reviews and made a mental note of all of them, they were all positive and im very happy people resonate with my project so i appreciate everyone who wrote a very thoughtful review for me i thank you all a lot. Now in the technical part of the game: I finally fixed my nebula raymarched shader, now it actually has volume and you can go inside it and it looks absolutely ethereal. Reviews told me that they would love it if the planets had more details, so details i added, i made a VERY efficient chunking pipeline to scatter debries, and whatever i want on the planet mesh, i am being able to have the whole planet populated with no noticeable drop to performance. I made the script in a way that its a module, so in case if i ever want a planet with vegetation or trees, i can just drop the 3d obj file for that mesh and boom ill have a proper chunk based scatter for that mesh. I tested the chunks using debug cubes and it works perfectly as it should. I also added spacewalking to the game, you can genuinely just float in the space and enjoy the view from the outside, this was quiet easy but its an addition that i shouldve added a long time ago. Also ive finally added randomly generated textures for planet surfaces, these dont look AS realistic rn, but im sure after changing a few parameters and adding proper debrie 3d models, it’ll look absolutely astonishing. From the reviews i read that i didn’t add any help for what keys to use and genuinely thats on me im too stupid so in future ship ill 100% fix that Also ive added a feature where you can currently place observatories on planets and use them to control the satellites, This is just for now as for future ill make the player do stuff on the planet first to have their base setup, I dont wanna complicate it too much as this is supposed to be a relaxing game, but i think this much is necessary. Ive also 3d modeled a tiny astronaut along with his animations and im calling the player boney, i have decided on boney’s lore yet but i can assure yall one thing, it will be insanely deep, and there will be clues for it all around the game, you just have to notice it. I also have massively optimised the star spawning shader, i am able to have 10s of thousands stars on the screen without having any frame drops at all, i used GPU instancing for this and this is genuinely black magic, I also used GPU bill boarding to help aid the performance even more. Removed the unnecessary calculations and now the sky is denser than ever. I also herd people wanted me to make a web release for it as the download process was quiet tedious, but i think 2 devlogs ago you can see me in godots compatibility mode, it BUTCHERED the visuals completely so i dont think i can bring myself to do that after spending so much time writing complex shaders. TODO: Add wormholes, infinite planet generation, coordinate system.
Finally the biggest change ever yet, this took me HOURS of rewriting debugging fixing weird glitches, tried to even recompile Godot at one point, But its done, A truly frame efficient infinite procedural planet generation with randomness and seed integrated in it, this took so much of my sanity, so many broken hairs, but finally i am able to perfectly get it working at 144fps and around 11ms average frame time. I also optimized the rock generation even more to take advantage of godots multi threading capabilities to take the load off the main thread to generate the chunks for rocks. Current limitations of this architecture are not the architecture but the godot engine itself, as it uses 16 bit floats to keep track of transform, so if you’re like 100,000 units away from your home planet you start facing very weird glitches, I personally think im gonna keep this glitch in the game as i have no idea how these glitches will affect the gameplay, its like minecraft farlands, i want to see how the world generation breaks, and i dont want to stop the player from experiencing that aswell. Its not that idk how to fix this, if i recompile godot to use double instead of float i can extend the range of the farlands way beyond that, but its just the matter of personal preference. I have quiet insane ideas and directions for this project now that ive came so far, its kinda funny how all this became what it is just because i wanted to control a rocket in space.
SO, Im now starting to add everything people complained about or found annoying in my first ship, Someone pointed out i had made the help but the help i made didnt tell what keybinds to use, so i have designed a dynamically UI screen to add guide for button keypress, it was a bit of a tedious job but its done now. Since i understand that not everyone has a good computer, (I have an RTX4050 with Ryzen 7 AMD Ryzen 7 7435HS CPU with 24 gigs of ram so i cant rely on my laptop to be an average computer) but i know not everyone has these specs so i took the time to code more settings in the settings section, now i can select the major factors of FPS drop in this game. Also i redid the noise the planets used, the noise textures is used before if you see from earlier videos looks very choppy, unrealistic and creative, now it looks a LOT better. Currently i haven’t added keybinds UI for the rocket, which ill add later, I will be making a ship soon after fixing more bugs that i delayed for later.
Today i have just started refining the 2/3 stage gameplay i made it so you cant just spam sattelites wherever you want, but instead you have to get them docked on your rocket at the research center. I made the ugly loading screen a little better, i will fix it even more by designing custom graphics for it I revamped the 3d model for the research facility, it has interior and the infamous meme toilet where little boneys take a dookie in unison. (This will be a feature in 3/3 version of the game) Currently i have fixed some more gamebreaking bug where the ui just straight up didnt work, turns out it was due to my own stupidity of forgetting to hide an transparent panel in the scene tree.
Getting the project production-ready. I’ve finally added local storage for the settings menu, so your graphics and gameplay preferences now persist between sessions instead of resetting every time you launch the game. A lot of people mentioned in the last devlog that they couldn’t figure out the controls, so I added a “Show Keybinds” toggle in the settings menu (press ESC to open it). It displays the controls on-screen whenever you need them. I also found a pretty game-breaking bug, so I’m documenting it here for future me: If you’re mounted in the rocket, enable Show Keybinds, and then hit Apply, the player can no longer unmount from the rocket. I’ll be fixing that later. I spent some time messing around with Godot’s built-in graphics settings and realized I’d completely forgotten to enable anti-aliasing. Turning it on made a huge difference, the game looks so much cleaner now. As you can see, I’ve also added a fuel gauge for the rocket. It helps sell the whole “claiming and exploring planets” vibe. I also changed observatories so each planet can only have one. Another gameplay change is that you now have to visit an observatory to dock a satellite onto your rocket instead of doing it anywhere. Finally, I changed how world persistence works. If your rocket crashes and you reset the game, any observatories you’ve already built will still be there instead of disappearing.
Final devlog before ship. I have polished the UI, remade the boney 3d model, Fixed observatory logic, made other tiny gamebreaking improvements, Also i have fixed animations for boney, added a jump animation. Major change is 3rd Person camera now, which makes the whole experince even more immersive. I have playtested it several times, im kinda nervous and hoping it works perfectly as it is on my machine.
Okay just fixed another tiny bug, im glad i checked it, when i select the satellite for an observatory, the UI doesn’t open again, so it made it impossible to refuel, i fixed that by giving an option to control satellite now. I think im set for the ship now, i reccomplied the binaries, the readme is ready to, along with the latest youtube video https://youtu.be/RQmEh_rwnzQ
Made major game optimizations, Am adding a proper inventory system with crafting, I have designed inventory with crafting in past for my cooking game shouldn’t be that hard, But doing it in preexisting is a bit of a challenge. I have implemented a simple hotbar and item system in the game, I also used Godots IK nodes to control the bones, and god damm was it useful, this might come in handy in future. Switch to this camera does make it look a lot better
Working on making the game loop more fun, Im thinking ill be taking the game towards single player base building story mode type of game, I made a web version cuz i had 0 reviews after 2 days, the web version isnt good at all but its make do, I added rovers to the game now too its insanely fun driving them around the planet and having fun, i will be adding more stuff to the game, inventory system turns out is way harder than i expected so ill do that later. Enjoy this clip of the game
So i changed the Help UI of the game, made it look a lil better than that roblox ahh UI, Added mother stations to the game where u can get rocket upgrades, im slowly trying to figure out the game loop, itll be that you are a lonely astronaut in eternal void of space, your kind has been extinct, these ships are abandoned u can repair them and get a specific upgrade from each of them. Also i made the web version available too, its been 3 days and ive been sitting at 0 ratings just demotivated the hell out of me, the quality of graphics and gameplay is butchered but i had made that clear in the itch page, lets hope people rate it now
Designed the actual model for the rover, im pretty happy with how it turned out, i think ill keep it. tweaked the settings for the rover to get it just right, the only problem im facing is that due to the curvature of the planet, rover js flys off n start orbiting at high speed, i gotta add down force to tis i think. I removed the inventory cuz it was too wonky, i think ill have a hotbar and a backpack like peak, i think thatll be more immersive than having a stupid inventory. (this is totally not because i went rabid trying to implement it)
OKAY so really cool changes First of all i fixed major inside stuff, instead of having 350 lines of gd script files in which i had to sift through to find the function i need, and then get overwhelmed later, i made everything modular, All the functions are Nodes in the scene that hold scripts. These scripts hold the functions that were earlier stored in the main .gd file, so now everything is a lot less cluttered and makes my life easier. I also did the same for the rocket scene as it was getting cluttered too. I added chests to the game where you can store items in (dont mind the invisible hotbar), They will be locations to store your items which will be scattered inside of observatories, im also thinking of redoing observatories as this model now looks ugly, and i think this has a lot more potential. Oh and also i have decided upon how im gonna make the player create an observatory, you land on a planet, collect scraps, them build an observatory, and then everything in observatory would cost the player X amount of scraps, also abandoned motherships will also provide the player upgrades for rocket. I got 3 ratings which im thrilled about, but also kinda sad because the reviewers prolly playing the itch release of the game and not the actual one but eh i think its fine, as long as my game is peak. Next ill be working on making an actual 3d model for the mothership
Devlog #idk Didn’t get a ton of new content added today, but I spent most of the time cleaning up annoying bugs and polishing the game. The biggest fix was the rocket explosion system. There was a bug where the rocket would slam into the ground at over 300 m/s … and just refuse to explode. I rewrote the logic, and it’s finally behaving properly. I also started modeling the mothership . It honestly looks like absolute dookey right now, but it’ll do as a placeholder. 3D modeling definitely isn’t my strongest skill, so I’m calling this version “good enough” for now. On the graphics side, I added a proper atmosphere around the planets, which makes them look much better. I also experimented with chromatic aberration , but it didn’t really fit the style of the game, so I ended up removing it. Huge thanks to @aloyak for the inspiration and some really helpful rendering tips. He showed me a much better way to increase the render distance without killing performance, so I’ll be implementing those improvements tomorrow. Also… I earned 1085 Stardust on my second ship. Not bad.
HOLEE SHIT, ADDED INSANE STUFF TO MY GAME IT LOOKS SO BEAUTIFUL NOW, I CANT BELIVE IT So, for starters, since yesterday I have been learning shaders. I fixed that shitty atmosphere shader that I translated from someone else’s shader to Godot. I had to make a lot of changes to it to get it working properly for my game. ALSO I MADE A SICK ASS WATER SHADER FOR PLANETS TO HAVE. Then I REWROTE THE PLANET GENERATION SCRIPT. Now each planet has unique properties like: Ambient temperature Water availability Air density, which determines water availability too I also tried adding comets and comet trails to the game, but failed tremendously. Oh, and also, dont go near the black hole. OH AND I GOT MY PAYOUT, AND I GOT THE BAMBULAB A1 MINI. THIS DAY JUST KEEPS GETTING BETTER
AYEEEEEE DEVLOG TIME So today i redid the observatory 3d model, gave it some clean nasa textures, its not upto my standards but its getting there, also fixed that stupid atmosphere bug now everything looks insanely better. Added a planet to the launch screen to flex aswell, i think it looks awesome there. Oh and also i tried to add water walking sound but am failing miserably but worry not as i will be reworking the soundengine too later Taking a moment to give a shout out to my followers who motivated me to work on tis more also HM all the reviewers who gave incredibly nice feedback
Oh i did manage to fix the water walking loop a lil more, its not perfect, but i dont understand whats going on. so ill just work on that later Anyways thats that, big changes i made are that now to place observatories or rovers you need to have a specific amount of scrap on you, i will be turning this into a full fledged build menu so its more appealing, and i will have this menu as a quick hotbar to place blueprints of items. I find this gameloop satisfying as it takes away the management hassle and this game is supposed to be relaxing. And bro how long IS the queue my bambu is STILL not shipped Sorry for slow updates on this project, currently working my ass off irl on the UAV project of mine as i have a deadline to finish it. If i did manage to get a good rep towards this proj, ill be taking the reviewers advice and hosting this game on steam. That developer grant might come in handy ngl
AYEEEYEYYE UPDATE ON THE PEAKEST GAME Made a really smart decision and got rid of the ugly hotbar like menu to place items, now da gam has a nice build menu in which most of the time was spent in making my code more cleaner. But it works now, it looks way more clean and immersive. Instead of relying on hardcoded information for items, i finally made a global that can handle all of that, idk why i didnt do that earlier. About the sound engine, i genuinely hate it a lot, i will be redoing it from scratch and figure out wtf is wrong with it Sorry for slow progress, i dont have much time till im at home so im tryna maximise the time i spend on my rc plen, ples follow it aswell
OKAKAKAYAYAY some more cool additions for exploration aspect for the gam I added an arrow that points towards a set direction, which also changes its with respect to how far the rocket is from that point Also I FINALLY FIXED THE WATER WALKING SOUND ISSUE!!!1!!! Turns out it was quiet easy, i was just too stupid and over complicating it, a simple rewrite fixed everything. For next update i will be adding findable clues, maps, coordinates left out to rot by a “past explorer” that you find across the universe, this is gonna require a bit of time and skill but i can deliver that easy with some time Again progress is a bit slow cuz im actively working on my biggest endurance aircraft but i will keep tis game updated nonetheless, and in future u might even find it on steam who knows
OKAYAYAYAYAYA UPDATE TIME I have graves implemented in the game now, after careful consideration about which direction i wanna take my game towards, i think graves would be a nice addition without disrespecting the procedural nature of the game. I want to make this game very lore heavy while being fully open world and giving the remote in players hands. I dont wnana confine them with thick story plot, or tedious tasks. Nor do i wanna make the game absolutely boring and pointless. The “Rot” i talk about is a cosmic disease the players universe is going through, unexplainable things are happening, weird inter dimensional gates are popping up at random places, everything is near extension. Im not sure about the role of player in all this tho, i will figure something out tho, i wont disappoint yall thats my promise. Also i worked a bit more on a weird bug where items were being placed not where the raycast was supposed to hit. Also I will be removing the inventory system entirely and just rely on blueprint building aspect lmk if yall think thats a good idea Also shout out to hackclub for getting me so much stuff i really love every single one of yall ❤️ Also progress on this game will go back to high now as i wont be home to work on my plen.
Finally a devlog after several days of straight struggle For starters ill tell yall why it took me so long I lowk changed places and i live alone in a room now, i had to shift and living conditions here are absolute hell I somehow survive without going wild due to all the bs ive been facing recently. My productivity has taken a severe hit, a feature like this took me way too much time to complete than it should’ve. That being said i did wander off in different directions cuz i was lowk clueless which direction i should take this game (i still havent decided ) In this devlog i added advanced material processing and advanced materials to the game, with a minecraft furnace like cooking mechanics, i made the logic quiet efficient and refined, its not my best work but it can always be better later. I js hope this eternal torture ends and i finally get to have better living conditions. istg ive been boiled alive, breathing is a struggle in this place Ill keep serving yall with most banger updates so keep me followed, this game is gonna be the next big thing lowk Now i will be makig the 3d model for refinery, before this i made a failure ahh model in whcih i js made a complete simithing room inside a space bubble 😭 Gotta make something better than that so time to lock in
Man i hate making 3D models Not my best work yet, but refinery is done, After several iterations, getting inspo from pinterest and then ditching it and drawing one in back of the class, im finally set on a design, it looks pretty good as of rn. (its not) I fixed a bug where the text was glitching out when i tried to craft scraps, and now it works as it should. The logic is perfect for how it should act in game and im hoping i dont have to touch it again in future to fix it. That being said ofcourse ill be making the 3D model better, But for now i just wanna focus on programming stuff and making the loop right. We can always make it prettier later . Im unfortunately still not home and i still have to survive in this godforsaken room, but hopefully ill be home soon as ill get my appli signed to go home, And then ill be working on both this and the plane together
REALLY NICE ADDITIONS Ive finally added some life to the game. I have added these weird mudfishes inspired by those weird furless cats. These mud fishes aren’t stupid tho, i ___have implemented a proper behavior tree to them, Each one of them has their own set of actions. Normally like minecraft mobs they roam around look around the world, but if a player is near their vicinity, they RUN away from the player protecting them. Currently i have no clue what ill use them for, but one thing is for sure that they have really nice skin I wonder what will happen to it in the near future Really happy by this addition tbh, the world was getting kinda lonely, this was important, in next updates ill be adding colonies of these things mounds and their homes, along with their baby variant.
After getting falsely accused for fraud for using the godot wakatime extension and getting a heart attack I have finally added little homes for these skinny dookeys I hate, HATE behavior trees with every cell in my body I hate to admit but i did take help of claude chat to help me set this shi up, it was js the free version tho so we good. I added so like normally it ran away from player if it sensed one near, but now if the player is close by and it has a home near it runs to that and hides in the home, and if player is far enough it emerges back out. Ill move on to adding more entities now rather than polishing these dudes, i think from the final game i wont even keep them in cuz how ugly and weird they are Aye free me bro i aint do nothing wrong, fix the wakatime extension fr
LETS GO IM FINALLY UNBANNED Unban stuff aside, time to explain the devlog even tho being unbanned feels great and i have insane amount of motivation to work on my proj now In past idk however weeks ive been working on 2 major things, first is that ive finally listened to the last ship reviewers and added upgrades for rocket, with custom 3d models for each rocket tier. currently it uses a separate key to open close the menu which is bad but ill fix later Also only the rockets fuel attribute is updated when you upgrade a rocket so ill fix that too. Also after the ban i was working on electronics update for my game, i have implemented electric poles, 50Kv Generators for now, i am going towards direction of factorio im afraid, but i dont wnana make it very grind-y so ill keep that in mind (hopefully) For future i will be adding better UI/UX its currently embarrassingly bad rn (even tho my degree is Computer science and Design) So yeah that will need a massive revamp Also id like to give a shout out to water #Freewater #heaintdonunwrong
I was aiming for 3 hours today but i lowk got in a fight with a senior in my clg and bro is threatening me to slime me tmr it might be wraps for me gng Putting the sliming part aside, today i made the 3D models for a generator concept (or actual thing) i found online of what they use in space. The i did sm audio editing to have a whrrrrrrrrrrrr looped sound effect and it was quiet easy to make a whrrrrrrrrrr loop, easier than i imagined. Then i added another sound and layered both ontop of each other and now it genuinely sounds kinda peak After that i made the electricity spread across all the electric poles, heres the code for that if body.is_in_group("tower"): towers_closest.append(body) create_lines(body.location_to_connect_wire_to) if has_electricity_running: body.has_electricity_running = true elif body.is_in_group("electrical_appliance"): if body.connected == false: towers_closest.append(body) create_lines(body.location_to_connect_wire_to) body.connected = true if body.is_in_group("generator"): has_electricity_running = true for i in towers_closest: if i.is_in_group("tower"): i.has_electricity_running = true I might lowk be taking AI’s job in writing bad code, they should make a me gpt in which i reply with shit code that DOES work. I also visualized the flow of electricity by hiding/showing a random cylindrical mesh that shows if it has elec flowing through it. Tmr ill be redoing ALL the icons cuz currently they look straight dookey, and also fixing the UI, then if i have time give observatory and everything an electric connection and make them so they dont work without it. This was all i worked on today, yall pray for me lets hope i dont get slimed tmr .
YAYAYAYAYAYA 3RD SHIP INCOMING In the first 2 hours i logged i worked on making the 3d models as refined as possible and made them look good by referring to astroneer as someone commented on my game Also made multiple 3d models for the electric pole and finally used the one that sat right with me. Made a new 3d model for generator and upgrade station aswell In the next 2 hours i made minor tweaks and fixed satellite bugs along with updating the help menu with newer control code, also was thinking of implementing a scrap mine but dropped that idea (maybe later ships) Then i added a little keytip marker near the refinery and chest of observatory to aid the player. Added a bunch of sounds to the electronics of the game and now it sounds a whole lot better (also reduced the main music) FINALLY TIME TO SHIP Thnx to all of the support on this proj i wont disappoint yall at all with future ships
Some really cool additions For starters today i implemented a little list at bottom of the screen that can be used to store the coordinates of player rn Yall might be wondering what tis could be used for, But i have something really cool cooking up in my head lets hope i am able to express it properly. EXPRESSING MY LOVE OF YAGI ANTENNAS I ADDED A YAGI ANTENNA TO THE GAME!1!!! It has a search feature that looks around for strongest signal and then does nothing But in future i will be making a whole mechanic out of this. Then i made a little web release it butchered the visuals i worked hard on. Its okay tho cuz i added a warning label like last time on that release too. Linked the web release as playable link for the game I want YOU to tell me what should i add to this game as im running into a roadblock where i dont know what i could add for the electrical update for the game that would actually be a useful addition, Comment down below to drop your ideas the best one will make it into the game
TESLA SUPER CHARGING So for starters i forgot to tell yall that i DIDNT get slimed by senior my clg department helped me and scared tf outta bro and i got to fight bro too And in this update i added set battery capacity to rovers They use supercapacitors to store charge so that means they can be charged and discharged for eternity Then i added charging stations to the game and made them use power grid electricity. I think players might abuse electricity by only placing 1 generator to power an entire city so i will be implementing complex wattage draw logic like they have in factorio to get some supply/demand action rolling. Then i worked on implementing save game in the game and i failed terribly (this will be a hurdle for later) I spent like solid half an hour trying to implement it just for my save file to be completely empty Idk whats going wrong but i will eventually figure it out. For now tho i will be working on factorio like supply/demand logic for electricity wish me luck
In these 2 hours i have lost all my sanity But finally the factorio like supply/demand electricity mesh finally works First i thought of using recursion to spread the electricity through every single tower But then i ran into a problem where towers interconnected so to fix that i passed a self parameter that didnt seem to help. Then i decided to make towers only connect once (which was a disaster and brought its own set of bugs) and that to tremendously failed So finally i decided upon a global mesh chain architecture where all the nodes in a chain have similar looking list, and whenever an appliance is connected to it the chain just iterates through its connected devices, This in turn brings the time complexity down to O(n) and makes everything a whole lot more efficient. Finally this is done Currently only the tesla charger works with this new logic, later i will add other electric appliances to this mesh network aswell and give them watt draw Few things to keep in mind, Currently 1 generator makes 50kW and one vehicle charger consumes 40W, If the demand isnt satisfied every node in mesh rejects the connection until the demand IS satisfied I know this might feel stupid for some people but this is only done as a feature so you dont overload the electronics in space
IM RICH!!11!! 2080 sd and top 10 in multi I got all positive reviews from yall and i apprciate every single one of u for rating my project. I have finally added scrap mines to the game, i had already made the 3d model for them i just thought they didnt fit in the game but since im adding automation and electricity to the game i think this would be a great addition. Currently they produce 10 scraps, copper, iron per 10 seconds so 1/ sec i will later randomize this and give them weights, im js too lazy cuz of this clg n shi istg Good thing is tho tmr im going home That does mean my work on hardware projects will start again That being said i need you to give me more recommendation for the game, the reviews didn’t give me any ideas or unique views what i could add to my game.
BOOMBOX!!1! , macondo marketing team too good Last night i spent unhealthy amount of time watching ig posts of macondo on hackclub ig, I lowk feel insane amount of fomo and i wanted to go so bad The songs they used in the marketing reels are still stuck in my head So as any reasonable person would, I added a boombox in my game with with my fav songs from the reels they made @zach PLES FLY ME IN NEXT IRL HC EVENT PLES IM BROKE
SHOUT OUT TO @253_Mathilde_IYKYK For starters i made a lil script so that if a rocket is in the SOI of a planet and then it scans near it by pressing F it shows all the necessary details about the planet, currently they are obvious details but i will work on making them useful. I have a few ideas of what i can do with it Now to the important part @253_Mathilde_IYKYK recommended me to add a song they like SO I ADDED IT TO THE GAME Hope yall like it :) (Sorry for not including video idk why stardance was bugging and throwing error when i was tryna upload a video)
Ships:
I made Into the Cosmos, a realistic 3D spaceflight sandbox inspired by Kerbal Space Program and Spaceflight Simulator. The game lets players jump straight into the mission and experience realistic orbital rather than spend hours designing the rocket just for it to fail when launching. This is a relaxing and fun game where players can just sit back and enjoy the physics and thrill of sending rockets to space. The biggest challenge was making somewhat realistic physics with enjoyable gameplay. Getting the gravity, RCS controls, and spacecraft handling to feel both snappy and fun to play with without absolutely broken, writing so many lines of code, and deciding on how im gonna be approaching some problems was quiet fun, i have a lot of fun designing it, i used to go to bed thinking what ill be adding to the game tommrow. I’m most proud of achieving the relaxing experience I originally envisioned. Im quiet glad i was able to fianlly have a direction towards my game and have an idea of what i wanted. And the gameplay is quiet fun aswell, i found myself “playtesting” my games just having fun slamming the rocket into planets, doing interplanetary missions. Setting satellite in different planets To test the project, I recommend reading the in-game controls and instructions first. They explain the basics of reaching orbit and make the experience much more enjoyable.
Into the Cosmos Join Boney on a journey across the endless cosmos, where every horizon hides another world waiting to be discovered. Launch into the unknown, weave between glowing nebulae, drift past impossible black holes, and set foot on planets no one has ever seen before. Build observatories to mark your path through the stars, refuel your rocket, deploy satellites into orbit, and keep pushing farther into the infinite. And when the day is finally over, come relax with Boney and lose yourself among the stars for a while. I’ve always loved games like Kerbal Space Program and Spaceflight Simulator, but I wanted something where you could jump straight into flying without spending hours designing the perfect rocket first. The result is a sandbox space game built around realistic orbital mechanics, exploration, and simply enjoying the journey. The universe is procedurally generated, meaning there is always another unique planet waiting somewhere beyond the next launch. Every expedition can take you somewhere completely new, and every observatory you build becomes another milestone in your adventure. Satellites aren’t just for show either. Launch them into orbit, revisit them later, and use them as your eyes in the sky while you continue expanding your reach across the universe. If you’re new to orbital mechanics, don’t worry. The game includes detailed instructions, an optional on-screen keybind guide, and a full in-game settings menu that lets you tweak graphics and performance to match your hardware. Whether you’re playing on a high-end gaming PC or something much more modest, I spent a lot of time optimizing the project so as many people as possible could enjoy it smoothly. There is one place, however, that lies farther than anywhere you were ever meant to reach. Most people will never find it. Those who do usually don’t come back with an explanation. I call it The Farlands. Whether it’s a bug, a feature, or something else entirely is for you to decide. I built this game in Godot 4.6.2, spending countless hours refining the physics, procedural generation, shaders, rendering, UI, and gameplay systems. Every optimization, every visual effect, and every mechanic was added with one goal in mind: making space feel like a place you can get lost in for hours without realizing where the time went. So fuel up, trust your trajectory, and see just how far Boney can go. If you decide to give the game a try, I’d really appreciate a detailed review afterwards. The feedback I received on my last project genuinely helped shape this game into what it is today, and I’d love to hear what you think could be improved, what you enjoyed, and what you’d like to see added next. If you enjoy the project, consider starring the GitHub repository and liking the YouTube video. It really helps more people discover the game and motivates me to keep building and improving it. So fuel up, trust your trajectory, and see just how far Boney can go.
INTO THE COSMOS This is the game i have designed with inspiration from Spaceflight sim and Kerbal Space program, i wanted to capture the total freedom of roaming in space without the stress of designing a space vehicle for hours just for it to crash into a million pieces. I wanted to make a chill relaxing game that people can come back home after a long day of work to, boot it up and have fun just roaming the eternal space without stressing out. Im quiet proud of how im capturing this vision of mine and im very happy with what im making. Heres some information of what i added this ship: I’ve basically been adding a bunch of systems that I’ve wanted in the game for a while, and the game is starting to feel a lot more like an actual sandbox now. First thing, I finally added electricity. This is probably one of the systems I’m most interested in because now I can actually start making more things depend on power instead of everything magically working forever. This also gives me a lot more stuff I can do with spacecraft and bases in the future. I also added scraps and scrap refining. You can now collect scraps while exploring and actually do something with them instead of them just being random useless objects. I’ve also added the material processing system around this, so scraps can be refined into materials that can actually be used to build useful buildings. This is going to become a much bigger system later on. ROVERS ARE FINALLY HERE You can now actually drive around on planets instead of just landing there and leaving. I really wanted this because the planets were starting to feel a little pointless once you landed on them. Now you can actually get out there and explore the surface properly. I’ve also added planet properties. Planets now have their own properties which means I can start making different planets actually matter instead of them just being randomly generated balls you land on. There’s a lot I can do with this later, especially with resources and exploration. I also did a pretty big overhaul on the visuals. The ambiance shaders have been improved and I’ve added a bunch of new stuff to make the planets and space itself look better. black holes now also have a hidden easter egg…. Ive also given every planet a beautiful atmosphere And yes. Mudfish I don’t know why. They’re still stupid. They just walk around on planets doing absolutely nothing useful. But honestly the universe felt too empty without them so I’m keeping them. A lot of this update was also spent doing optimization because some of the newer systems were starting to get pretty heavy. I’ve been going through different parts of the game and trying to make everything run better without completely murdering the visuals. Overall this update is probably one of the biggest changes to the game so far. And I still have a stupid amount of things I want to add. https://www.youtube.com/watch?v=ZZg3blASmgc This is the link to the youtube video if you dont have time to review the game PLEASE check it out and rate the project I read and appreciate every single one of you reviewing this game, please be as informative as you can be as this is one of the biggest games ive worked on till now, thx and have fun playing the game...
|
1792850006.8012064
|
1792936406.8012064
|
|
25644
|
rlbuddy by @kmdw | Stardance
|
kmdw
|
3
|
185.95
|
2643
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T00:20:30Z", "hours": 40.0, "multiplier": 18.76, "payout": 740, "blessing": "neutral", "text": "I made rlbuddy, a rocket league companion app! This is the third ship so far. The big features this time are the asset swapper and Linux support, but I think that the feature I’m most proud of this time is the asset swapper! It inserts the appearance of one item into the file of another, meaning by swapping out assets for others you can make your car look however you like! (Client-side only, of course). I learned a lot about byte-level manipulation and working with raw data streams and encryption/decryption in Rust, and I can read hex (relatively) well now! It’s also great because I think this combined with the doorstop experiment from a while ago gives me a nice base to try some reverse-engineering challenges in the future. I also worked a lot on performance this time, such as tuning loop times/ui fps caps and minimizing ram usage (I achieved around an 80% reduction here!) There are a crap ton more features added than that (totaling almost 100 commits), but I’m pretty sure you’re not supposed to have massive feature-dumps on the ship text. So the full list is on the latest github release! In the image, you can see I have a white fennec. In reality, I don’t actually have a tw trim, and the equipped decal isn’t compatible with the fennec either. But, using the power of asset swapping, I can get a beautiful all-white car. Neat!", "repo": "https://github.com/Kalilamodow/rlbuddy", "demo": "https://github.com/Kalilamodow/rlbuddy/releases/latest/"}, {"ship_num": 2, "ts": "2026-09-07T20:33:21Z", "hours": 27.0, "multiplier": 16.74, "payout": 457, "blessing": "neutral", "text": "rlbutddy is a feature-rich companion for Rocket League, and v1.2 is out. There’s been some big architectural changes meaning it’s faster and bug-free-er, as well as big new features! New!!! Avatars! Now you can see people’s profile pictures even when you’re not on their platform. Custom map loader! You can import maps from a ZIP or download them straight from Bakkesplugins! Gamepad overlay! Show your controls while playing, to show off your bindings or get some help with your speedflips. I think I’ve definitely improved at Rust since the last release. Just in terms of the amount of mistakes I make, I feel like it’s way more smooth sailing than before. For example, I was able to (mostly) write not-so-buggy code and “run the borrow checker in my head” without needing to cargo check a million times, and clippy tends to have a lot less suggestions for me. Pretty great!", "repo": "https://github.com/Kalilamodow/rlbuddy", "demo": "https://github.com/Kalilamodow/rlbuddy/releases/latest/"}, {"ship_num": 3, "ts": "2026-08-25T22:08:36Z", "hours": 109.0, "multiplier": 17.59, "payout": 1446, "blessing": "neutral", "text": "rlbuddy is a feature-filled companion for Rocket League! It shows the skill of everyone in your lobby and has tons of toggleable widgets and features to make your life a lot easier, from Discord integration to music control. This is my first non-tiny Rust project, and I think it was really great! I’ve learned a lot such as proper state management and the ins and outs of Rust’s syntax. You can give it a try by heading to the Github releases section. If you play Rocket League, I hope you use it!", "repo": "https://github.com/Kalilamodow/rlbuddy", "demo": "https://github.com/Kalilamodow/rlbuddy/releases/latest/"}]...
|
[{"post_id": 80191, "ts": "202 [{"post_id": 80191, "ts": "2026-10-16T17:13:05Z", "hours": 3.4819, "text": "more small improvements. i gave the session stats widget an actual service as well which speeds things up a lot since its not recalculating statistics every single frame. the swapper also uses the backup file if one is available and it no longer accepts duplicate custom maps"}, {"post_id": 77292, "ts": "2026-10-06T13:38:54Z", "hours": 0.4772, "text": "A few fixes here and there. Some refactors, caching externally loaded playlists in savedata, and fixing a deadlock when clearing the items cache. And for some reason the decal option was missing from the items list picker."}, {"post_id": 75881, "ts": "2026-10-01T13:48:20Z", "hours": 5.9928, "text": "I made a standalone web-based swapper for the people who don’t want to download an entire app. A lot of people had broken packages after the last update but didn’t want to install a dedicated program just for a few swaps. So, I used the asset swapper backend of rlbuddy to make this thingamabob which runs entirely in the browser! First, I had to find out how to actually share rlbuddy’s asset swapper with other projects. Turns out Cargo has a cool thing called workspaces where you can have multiple crates in the same repo! So I moved the dedicated UPK/AES etc. stuff into a new crate and added it as a dependency in regular rlbuddy. Then, I whipped up a small wasm-compatible eframe app with the template, and included the new crate as a dependency. I made a big state machine of the steps meaning it’s impossible to have an invalid state, which is really nice. The only problem was that Rust’s ownership system isn’t smart enough to deal with it, so the code is a bit repetitive in places but it’s definitely worth it. The WASM restrictions were super annoying, mainly do to with filesystem access and requiring async. I ended up using the egui-async crate and spilling Binds all over the place within the state machine. I couldn’t even figure out how to get the actual swap procedure to run in a different thread. I also spent like 30 minutes debugging why in the world asset swapping was just broken. Even when I verified the same binary data were going in to the Upk object in the webapp and rlbuddy, for some reason the output upk was just different. Turns out I used chosen_replacement.name instead of chosen_replacement.package.name() . Isn’t that great? Anyways, it works fine now and I’m planning on posting it on r/RocketLeagueMods and possible r/RocketLeague."}, {"post_id": 74679, "ts": "2026-09-27T23:46:54Z", "hours": 3.0297, "text": "Not much in terms of super-cool stuff this time. Highlights are: make sure dynamic playlist loading uses the latest cache file (and also fix its loading on normal people’s rocket league installs) loading the cache file on another thread so it doesnt freeze the whole app for a second on the first lazy lock access searching for items in the item swapper moved the error handling of the map loader to anyhow So no ultra-exciting things to talk about. anyhow is really cool though, it really simplifies error handling everywhere in the app, and I’m a big fan of its bail! macro. I’m also using Cow a lot more. Moo!"}, {"post_id": 73444, "ts": "2026-09-25T03:22:46Z", "hours": 4.635, "text": "I got licensee version 34 (encrypted payloads too) to swap finally! Okay, so this was awesome. Rocket League’s been having a bunch of updates lately, which breaks the packages of people trying to get free stuff. So, in a Reddit thread, I ended up dishing out a bunch of swapped asset files for people in this situation. There’s a new boost which everybody wanted really bad since it was really rare (but they decided to make it unlockable at rocket pass lv99 so it doesn’t even matter anymore), and it was UNSWAPPABLE for three reasons: it was encrypted specially i hadnt encountered specially encrypted packages meaning their handling was wrong aes keys werent out for it yet (or so I thought) I’ll start with 3. I had written a tool which looks in the games cache for AES keys, and dumped them, and it worked great. What I didn’t expect is the filename to change between versions. So, I was super confused since yesterday since the AES key for the boost was just… missing. Thankfully, the geniuses at the RLMM discord got it and helped me figure out that the file I was reading from was just outdated. Great! Anyways, not too big of a deal, just a big delay. Now it’s time for the real challenge: figuring out how the hell to handle this type of package. First, I did some research. The twelve bytes of padding in files with licensee version >=33 before the summary are actually a nonce/aes iv, not just padding. Then, the header is encrypted with AES-CTR with the twelve first bytes of the iv just being the nonce. And the compressed chunks are encrypted too here: each one is also AES-CTRed with their own nonces in FCompressedChunkInfo. Thing is, I don’t have an implementation to really go off anymore, meaning there’s a lot more trial and error. For the original implementation, there were one or two existing asset swappers (though they were vibecoded meaning more of a puzzle to figure out what they’re even doing), but this time I was mostly relying on emii’s fork of UEViewer. Anyways, after spending a while figuring out what exactly I had to masquerade (payload, key, swap nonces) I finally got it to work!"}, {"post_id": 72491, "ts": "2026-09-23T02:26:44Z", "hours": 1.8381, "text": "rlbuddy now loads additional playlists straight from the game’s cached webconfig, instead of hardcoding them all! This means that the list of playlists will basically never go out of date. There are actually quite a few services which rely on game files (eg. auto stats api setup, custom maps, asset swapper). So, the first thing I did was to refactor it so make all of these load from the same global value. Then, for playlists, I made it read from a specific file in the game’s http cache directory which contains a bunch of configuration. Then, it parses it into a JSON object, grabs all the values with Class PlaylistSettings_TA, and then extracts the title and playlist id! There are still a bunch of built-in Playlists, since those have internal things like going from a casual playlist type to its respective competitive one or having the hard-coded list of singleplayer playlists. But, all the other ones, like ltms are dynamically loaded. Yay!"}, {"post_id": 72027, "ts": "2026-09-22T00:56:20Z", "hours": 3.9097, "text": "I made a ton of improvements to the asset swapper! And fixed a bug with the music player which is cool technically, so I’ll start with that. The player uses the GSMTC api, which is async, but egui doesn’t really like async. So, I made it so that every time you wanted to run some command on the current session, it would start up a new thread. This was less than ideal for a few reasons: terrible performance race conditions could happen just… in Windows itself The main problem was 2: for example, if you skipped a replay too fast, the Play command from the end of the replay might actually reach Windows before the Pause command from the replay start, leaving your music paused. So instead, it starts one dedicated worker thread which has a channel which receives a Box<dyn FnOnce(Session)> , and executes at most one command every 50ms (only one command per loop, fixed loop time of 50ms). It’s really interesting because you actually end up sending a closure through a channel, which feels funny but when you really think about it it’s just ownership semantics. But, that’s working great now! On to swapper improvements! First, I moved most of the swapper module to anyhow handling (it’s heaven!), and I also modernized the upk api a bit since it was basically dragged directly from the proof-of-concept repo, meaning it was not really application-ready. Also, it previously looked at the game’s webcache to decode the AES keys for header decryption, but now it uses the wonderful Toga-Files repository along with a really nice caching layer for it to load items and their associated API keys. Having access to the actual item data is also way better since you don’t have to manually type in a package name which is kinda weird for any normal person. Now, you can select it from a dropdown instead! I love UX."}, {"post_id": 71420, "ts": "2026-09-20T19:51:05Z", "hours": 4.5228, "text": "rlbuddy now has item swapping! Basically, making one item appear like another to use items you don’t actually own. These hours were spent on a few different things. Firstly, I optimized the thing a bunch! There were a few places that were pretty slow since the original repo was mainly for testing. For example instead of decrypting the entire header and rechecking it to find the right key, it only loads the first 4 blocks and attempts to decrypt the first FString. If it fails, that means the AES key isn’t valid. Also, I improved the error handling with anyhow. It actually makes it so much easier to deal with things and was pretty useful when debugging the move over to the actual app. Now I’m just going to work on polishing the panel UI a bit more, since it’s still kind of ugly."}, {"post_id": 70888, "ts": "2026-09-19T23:20:36Z", "hours": 2.1058, "text": "Apparently there are a bunch of different AES keys rocket league uses, not just one. You can get a list of them from the psynet config url, and then do some weird crc stuff to change them from “content keys” to aes keys. I discovered the rocket league mapmaking discord today and I’m blown away by the amount of information on there, and also apparently my whole thing about the unknown bytes when licensee version > 32 was straight up wrong, which is funny. Anyways it works for all items now, which is great. I’m gonna work on actually putting it in rlbuddy now, hopefully that goes well"}, {"post_id": 69896, "ts": "2026-09-18T01:01:05Z", "hours": 0.9667, "text": "IT WORKS WHEN THE HEADER EXPANDS NOW YAYAYYAYAYAYYAYAYYAYAYAY I’m gonna be honest, the problem might just have been that my testing package was corrupted. I was debugging my deserialization logic, which I thought might have some parsing issue near the header extraction, and noticed that once the encrypted region deserializer’s Cursor reached the end of the region, it was actually FARTHER than the package summary’s total_header_size - by 6 bytes! That’s pretty bad, and I don’t know how something like that even happened. Anyways, I repaired the game and brought over the shiny new upk and… it worked. I’m pretty sure that I only accidentally did this while tidying up my workspace a few hours ago, but if this has genuinely been the thing holding me back for the past few days - I also finally made the poc code public, at https://github.com/kalilamodow/rl-upk-testing/"}, {"post_id": 69850, "ts": "2026-09-17T22:15:40Z", "hours": 1.67, "text": "IT SWAPPED IT SWAPPED IT SWAPPED AHAHAHHAHAHAHHAHAHAHAHHA FINALLY Okay now I gotta make it work for other pairs of boosts. If WHEN that works, I’ll actually put it in rlbuddy. I removed all the code relating to changing offsets to try to give myself a minimal workspace to tinker in, with as little side effects as possible. So, all the current code does is 1. open them 2. replace the name table entries and package guid. Surprisingly simple. Once I make it a bit more generic, I can extend it to support more swaps. If I’m really unable to get it to work for more combinations, I’ll probably end up just publishing the poc repo and not adding swapping to rlbuddy at all. This is a great motivation boost, though. I was honestly dreading coming home to work on it today because I was done with failing over and over, and considering giving up."}, {"post_id": 68661, "ts": "2026-09-15T14:25:29Z", "hours": 2.6667, "text": "I got a name swap! It doesn’t work properly, but I’m glad the game didn’t crash. These hours have been by far the most frustrating because the only way to test is against the real game since it’s really picky, but the game takes like 30 seconds to start, and if it crashes, it gives a cryptic error log, and if it freezes, it doesn’t give any log at all. I spent most of the time messing with moving different offset values forward and backwards, and ended up reverting to a simpler version with no overwriting when the header size changes just to test things. So far, I’ve mostly gleaned that name renaming is possible, but only up to a point. If the name grows too much, the game crashes, and if the name shrinks too much, the game freezes. Additionally, for some reason, total_header_size changes by the padded header size instead of the encrypted header size, which I still don’t understand. It’s seriously weird. I serialize each name properly, and yet the game reads it wrong. This game really does need a new codebase. When UE6 comes out, either the game’s gonna be so good it doesn’t need mods, or it’ll be relatively easily moddable. Or neither, which is the most probable based on Epic Games’ track record. Anyways, enjoy the beautiful screenshot."}, {"post_id": 68281, "ts": "2026-09-14T20:49:26Z", "hours": 3.1181, "text": "I figured out what comes after export tables! And it took way too long, since I DISCOVERED IT MYSELF! At least, as far as I know. I couldn’t find any information online about this portion of the header, so it was basically luck that I noticed a pattern. Before, I was just copying everything after the export table and pasting them back in afterwards, but as you can guess, that stopped working if I adjusted anything within the encrypted region. Compressed chunk info is a known part, and I figured out the AES padding pretty easily, so most of the time was spent trying to figure out what in the world those 24 bytes were. The first four bytes in the compressed chunk info are how many chunks they are. Here, in the Bubbles boost package, there are two (little endian), with 24 bytes of ???. And in Flamethrower, there are three, with 36 bytes of ???. I noticed that the ??? was always n chunks * 12 bytes (actually, it’s lucky that I didn’t test any which ended up having 0, otherwise I probably wouldn’t have figured it out). Since this probably had something to do with chunks, I made a guess that each chunk had some extra data stored in this array, 12 bytes of info per chunk. Using HxD’s highlight-bytes-and-get-the-decimal-value feature, I noticed a pattern where the first 8 bytes looked like an i64 offset and the last 4 looked like an i32 size, which the compressed chunk infos were also like for their matching counterparts. So, I deserialized it as [i64; i32] * n chunks and was able to read it better. These additional chunk infos seem to kinda sorta match up to uncompressed header offsets, but I don’t really understand what they are (and they’re marked as such in the code, lol). So, with that working (and some fiddling with broken serialization of TArrays which I’m surprised I didn’t catch earlier), I now understood the ENTIRE package header! Hooray! Let’s look at another example. body_grain_SF, the Fennec, has 4 chunks. Guess how many bytes of ??? it has. That’s right, zero! For some reason, a few packages just don’t have those things. After going through a bunch of them, I found that if licensee version was 32, there was no ???. But if it was 33, there WAS ???. I basically just added an if statement and it was fixed. I’m going to try to work on figuring out the padding in between the package summary and the start of the name table, but if I can’t, I suppose I’ll finally get to actually doing package swapping. Later!"}, {"post_id": 67059, "ts": "2026-09-13T03:19:34Z", "hours": 2.9378, "text": "I JUST DESERIALIZED AND RESERIALIZED A UPK. OMAIGOD IM SO HAPPY. my brain is so tired. Alright so the payload still doesn’t get transferred but that’s pretty simple, it’s just Vec::extend. What a challenge! Deserialization actually ended up being the easy part, which is opposite of what I expected from starting the project. It went (relatively) fast since there are a few existing implementations which I could kinda just “borrow” structure parsing from. But, mine is unique in that it almost completely reserializes the package itself. I might’ve been able to “borrow” reserialization, but the impl I’ve been looking at is STRAIGHT ai slop and it’s more annoying to read that than to just do it myself. It was useful though, so I have to respect it. The first problem: basically, the first byte of an FString determines how many parts it has, NOT how many bytes it has. Which wasn’t a problem for parsing, since I had some word-based helpers which worked so I didn’t think much about it. But, when reserializing, I made two mistakes: 1. forgot to add the null terminator (which shouldn’t even be necessary) and 2. I accidentally put the wrong offset. I have no clue why there’s a null terminator for FStrings. The format is [n chars][the char bytes], meaning it should already be known how long the string is. Pretty stupid, but whatever. Anyways, when reserializing you’re supposed to include the null terminator in the string length marker. So, my logic was that I should offset it by two since unicode characters are two bytes. Bleh! I should’ve only incremented by one, since it’s in terms of utf16 chars rather than bytes. Yay, that worked! I don’t know how to summarize the next problem, so I’ll explain the reasoning. The package header is file summary + tables + something else (we’ll get to that later). Anyways, there’s some mysterious padding in between the summary and tables. Parsing, it’s easy to skip over because the summary includes the tables start offset ( name_offset , the name table is the first one). But when reserializing, you gotta keep those offsets intact. Well, I’m not totally sure if you actually have to keep them, but just for the sake of simplicity I tried to (which ended up adding more complexity, which I’ll see if I can remove now). So, I serialize/push the summary to the big Vec. Then, I make a new Vec and serialize the name table at (name_offset - summary_size), since the new Vec has to be encrypted and then appended to the big Vec. I do the same thing for imports/exports (placing the table at import/export _table_offset - summary_size ). Oh no! Since name_table_offset isn’t equal to summary_size, there’s some padding in between, which is expected. HOWEVER! The previous logic would skip over it in the table Vec creation, meaning the table Vec would have some 0-padding at the start. This padding needs to be in the SUMMARY part instead, and the name_offset should basically be the ZERO of the tables Vec! I doubt I would’ve been able to solve this part without the beautiful tool HxD . It’s really easy to use and is always helpful when I’m figgling around with binary. So, it does some more math, calculates the spacing, adds it to the big vec, and removes it from the tables Vec. Then, it re-encrypts the tables Vec and pushes it onto the big Vec! Okay, now that’s done. NOPE! There’s a mysterious structure for some reason at the end of the real table part? Yep, it’s that something else I said we’ll get to. I actually still have no idea what it is. From some research, I gathered it must be the dependencies table, but it’s really poorly documented. So, I ended up just cutting the bytes out from after the export table to the end of the tables part, and “pasting” it back before re-encryption. I do hope this devlog was readable. Now I’ll get to including the actual package payload and hopefully simplifying reserialization offsets. See you soon!"}, {"post_id": 66867, "ts": "2026-09-12T20:09:08Z", "hours": 2.0211, "text": "I’ve been putting this off for a while, but I’ve finally decided I’m going to add asset swapping. There’re a few existing implementations, so I’m reading those as well as some pdfs about the upk format. So basically credit to this document and this implementation . All it can do for now is parse the file summary. The implementation wasn’t too bad since I had Google as well as the C# implementation I just talked about. I basically have trait Deserializable : Sized { fn deserialize ( reader : & mut impl Read ) -> AnyResult < Self > ; } Then implement that for the various parts (eg. FGuid , a generic TArray ). Then, I use byteorder to read out numbers into each struct. For example, #[derive(Debug)] struct FCompressedChunkInfo { uncompressed_offset : i64 , uncompressed_size : i32 , compressed_offset : i64 , compressed_size : i32 , } impl Deserializable for FCompressedChunkInfo { fn deserialize ( reader : & mut impl Read ) -> AnyResult < Self > { Ok ( Self { uncompressed_offset : reader .read_i64 :: < LittleEndian > () ? , uncompressed_size : reader .read_i32 :: < LittleEndian > () ? , compressed_offset : reader .read_i64 :: < LittleEndian > () ? , compressed_size : reader .read_i32 :: < LittleEndian > () ? , }) } } I originally prototyped it in Python and then moved to Rust once I got tired of python’s byte shenanigans."}, {"post_id": 66219, "ts": "2026-09-11T22:03:11Z", "hours": 2.5883, "text": "I did lots of performance improvements and also IT WORKS ON LINUX NOW!!! Let’s talk about performance first. Anyways, it has been using around 4% and 220MB of ram, which isn’t really what you’d expect from an overlay! So, I used things like DHAT to profile the memory, and noticed that fonts were doing some shenanigans. So I removed egui_system_fonts and loaded directly from C:\\Windows\\Fonts\\segoeui.ttf and RAM usage dropped to 30mb. That was what the previous devlog was about. I then changed the default logic update rate from 10ms (100/s) to 65ms (15/s approx). This reduced idle cpu usage to under 0.2%. But, doing anything with the UI would spike it to 4%, which is still pretty bad. So, I used a method I found in an egui issue thread where I’d count the frametime since the last render, then sleep until the target frametime was finished. For example, if the frame rendered in 2ms but I want 16ms frametime, it would sleep for 14ms. That way, I could limit how often the UI rendered! This made it stay under around 1% CPU forever! Okay, Linux time! Rust is mostly cross-platform, so support was mostly dealing with dumbass design decisions. Since Music relies on GSMTC, I had to feature-gate the entire thing (as well as the windows/windows-future crates) behind cfg(windows) :( I also had to fix Linux font loading (since like I said earlier, it’s hardcoded to segoe ui). So I install fontdb on Linux and search for some popular fonts from there to load instead. Finally, I fixed up the storage paths since it could only load from AppData. I also made it use AppData\\Local vs. AppData\\Roaming instead of putting everything in Roaming. I first got it working through WSL! ! It took some messing with my GPU drivers but I got it to render. Now was the real challenge: getting it to build on an ACTUAL Linux machine. I had an old, basically broken Surface Pro 3 that I had put Debian+GNOME on for shits and giggles a few months ago. The perfect target! The main problem was getting Rocket League to even launch. I set up Legendary (goated launcher btw, check it out ) and tried to run it. I installed Wine, got Wine Mono, and it failed with a weird cryptic error about the CreateWindow function. The obvious solution to a graphical error: disable EAC. Yay, it launched! Then to get it to build. First I had to fix some filepaths since Linux is case-sensitive (nerds) while I don’t care about case on Windows. Then, rust-lld gave some weird error about simd or something which I didn’t care about. I just ran cargo clean and rebuilt it and it worked fine. Then to run, and it actually worked first try! It’s cool because I went into it expecting to debug a million socket errors, but it actuallly connected and ran. Awesome sauce! Now Linux users can use rlbuddy. More minions to contr- I mean cool users! Cya in the next one! ;) If you check out the rl perf overlay in the screenshot, you’ll be able to guess why this is the laptop I decided to put Linux on."}, {"post_id": 65417, "ts": "2026-09-10T15:25:20Z", "hours": 0.8867, "text": "I’ve been debugging high memory for the past month or so. It was egui_system_fonts. Why would fonts take 170mb of ram????????????????????????????????? help!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I hate external dependencies!!!!!!!!!!!!!!!!!!!!11 I owe my life to DHAT now. go star https://github.com/nnethercote/dhat-rs"}, {"post_id": 65067, "ts": "2026-09-09T22:28:11Z", "hours": 1.5, "text": "More gamepad overlay buttons!!! Yay!!! In not-so-awesomely-exciting news, I also added a table of contents to the readme (as well as a generator for it). The script’s in Python (I’m sorry for not using Rust) meaning the repository is now 0.5% Python. Takeover incoming? I overcomplicated the script a lot, but it’s really easy to read. There are three whole comments, aka 6% of lines in the whole file! It’s not technically interesting in the slightest. I was thinking of building a tree-like structure before outputting the string, but realized I can just use the header level (h1 vs h2 vs h3 etc) as the amount of spaces / 2. I also refactored it not to use magic PanelId s for the default panel list. I kinda rushed that part when I made it, I’ll be honest. But now each Panel can implement fn open_by_default(&self) -> bool (returns false by default) and if it does it keeps it open when savedata doesn’t exist yet. I don’t get how an entire hour n 27 minutes was spent on like 7 not-even-that-big commits. At least it was a good use of my math class. We reviewed limits for some reason (which everyone should already know for one because they took the prereqs?), and the teacher managed to extend her lecture for the ENTIRE class time. rlbuddy development saving the day, I guess (just like it will in your rocket league games btw, so you should download it)"}, {"post_id": 64822, "ts": "2026-09-09T14:32:38Z", "hours": 1.4469, "text": "I’ve mostly been working on smaller features, improvements, and bugfixes. A cool one I did is fixing weird glitchy movement with the gamepad overlay window! Basically, the window needs to persist its position across disabling it/enabling it. And egui is immediate mode. So, every time it rendered the viewport, it would both set and get its position. So, moving it would update the current position, but because of the weird interop between setting the position in a ViewportBuilder and getting it from the viewport info, it would glitch back and forth, especially when my laptop is lagging. I fixed it by only calling the ViewportBuilder ‘s “ with_position ” method when the overlay had just been enabled ( !was_enabled && currently_enabled ). That way, it only sets it once externally, and lets it move freely while it’s open. Then, while it’s moving, it continues to update the saved position. And upon closing and then reopening it, it sets it again (but only once!) Relatively simple fix but it’s kind of funny. I mainly noticed it when I added a feature that would auto-unmaximize the overlay when the user maximizes it, and it would go crazy and fly around the screen. Very fun! I also fixed a pretty old bug where it would incorrectly detect the local player. Basically, the stats api doesn’t actually tell you who the local player is. So, we have to guess based on who the camera is targeting right now. Usually, it’s on the local player, but during goal replays or spectating a bot when joining a casual game, it would be improperly set at the start and then stay like that. So, I made sure that it always updated as long as the match is 1. in progress 2. not in a replay. It also fixes a thing with inconsistent match toasts, since the toasts only fire if the scoring player is the local player (and if it thinks the wrong player is the local player, everything’s messed up). I’m planning on revamping hotkeys next, to allow you to bind to any controller button and even do custom quickchats in-game. Later!"}, {"post_id": 63368, "ts": "2026-09-07T04:36:35Z", "hours": 1.4131, "text": "Time formatting doesn’t suck anymore! I made the implementation way better so I could make it support stuff even past weeks, like months and years. The new implementation added around 60 lines, but it’s for a good cause. The previous implementation used a match statement with duplicated logic that only supported seconds, minutes, and hours, using a pluralize function and inline if-statements everywhere. If it were sent to any rational code-reviewer, they would likely have a heart attack. Now it’s a bit more complex but less complicated. You have TimeUnit s which format the unit themselves and TimePart s which format a value + a unit. Then, just use some math to build a Vec and format it into a string. Boom! Beautiful, well-formed time formatting. To soak in the new beauty, I added days n weeks. I just had to add 14 lines! The previous one would have probably needed a bunch of stupid magic numbers and weird chains everywhere to accomplish the same thing. Okay, I’m done using your time on reading a way-too-long write-up about fixing a crappy implementation that shouldn’t have been there in the first place. I’m gonna ship right after posting this. If you get it, make sure to give it 10 stars in everything 😉. Haha, jk. Well, not really. Cya later."}, {"post_id": 62559, "ts": "2026-09-06T00:29:40Z", "hours": 1.8697, "text": "Had to remove the tracker.gg widget :( unfortunately they don’t allow scraping and what I had wasn’t allowed anyways. Things that used to open the player info widget now just open tracker in a browser."}, {"post_id": 60965, "ts": "2026-09-03T17:23:52Z", "hours": 2.9253, "text": "I finished the big refactor! I pushed around 25 commits to GitHub at once. I’m really gonna enjoy adding the next feature, basking in how much easier it is ;) Apparently, I never made a service for session stats, so it currently can’t persist its one setting. Actually, writing this I realized that the setting isn’t actually used, so I can delete it. That’s great. After finally kicking out all the annoying legacy panel code, I remembered that I never re-implemented the positioning or its related persistence code for the new panel system. The persistence system was reworked too, something that I don’t think really got included in the previous devlog. Each service can implement save , and there are generic helper methods in a common module for saving/loading serde structs to a file in the app data directory. The actual app now uses this method as well instead of doing all the pathing logic itself, so the persistence module is pretty small and could honestly be moved into app.rs. For new positioning, I store a list of open panels. Weirdly enough, it’s actually a lot easier than adding a position/is_open field to every AppPanel. So, I run the name through a Hasher to make a u64 which is easier to clone/copy and stuff and made a newtype around a PanelId. That way I could reuse the code from the previous paneling system to swap/manage open PanelIds, then just use find on the AppPanel vec to find the corresponding widget. Also, I never mentioned it but I’ve been trying RustRover for the past few devlogs. It’s a lot more stable than Zed, but I sorta miss its snappiness and minimalism. If I end up finding an annoying bug in RustRover, I’ll probably switch back. However, it’s been quite a few days and I don’t think I’ve found a single one. JetBrains is truly awesome at tooling. See ya next time. Probably will do my next ship soon :)"}, {"post_id": 60552, "ts": "2026-09-02T23:31:23Z", "hours": 3.3072, "text": "I’m MASSIVELY refactoring rlbuddy! This, I think is the second (and hopefully the final) major refactor to the codebase. So, basically the current architecture is split into services and widgets. Each service has an update method, which does its stuff (draining subscribers, processing commands, etc). Since egui is immediate mode, this architecture works unlike callbacks/event-based which I actually tried to implement but couldn’t. Every widget is just implements egui::Widget, that holds some state handles (Rc) and command senders (Sender), usually just one for its respective service. Services are alive for the lifetime of the app, while widgets are the openable panels you see. Widgets display the data from service state, and talk back to it by mutating shared state or sending commands. I think music control has been the best for me to wrap my head around to decide about changes, so I’ll explain it with that. Music control had a controller, a service, and a widget file. The controller was a thread pool manager (if you can call the questionable implementation that) around Windows’ GSMTC API to give a single-thread api for it (since the app is basically single-threaded). Then, the service is always alive, syncing a state struct between the controller and its own state handle. Finally, the widget is optionally there as a panel, with next/previous/pause buttons which send commands and the ui which reads service state to display. It also has a mutable service state reference for settings (the “pause during anthems” button). The god object RlbuddyApp struct stores all of this stuff. So it has a music_control_service, music_control_widget, stats_api_service, all of those fields, which kinda sucked. On top of that, I had to maintain an enum of every panel, which was enumerated for the “open panel” popup and to render each one if it’s open. you might think “hey… isn’t that a self referential struct? how does music_control_widget store a reference to music_control_service?” Well, music_control_widget internally only has fields for the music_control_service’s state handles which are Rc/Arcs. So it only needs a reference to the service for it’s Widget::new function lifetime, all is well. Although it doesn’t look horrible, it was HELL to do anything. For example, refactoring the gilrs service out of hotkey and adding the gamepad overlay probably involved just as much fiddling around with Rcs in RlbuddyApp as adding the actual feature. So, I decided to move to a new architecture: services + features! And, after thinking about it for around 8 hours (i slept), I decided on something a bit different. Services + panels! Yeah, basically the same as services + widgets, but I was gonna implement it GOOD this time, and make design decisions that wouldn’t bite me in the ass later on. I wrote my first traits - Service, which requires update and optionally save , and Panel , which requires name() -> &'static str and ui (same as egui::Widget: :ui). Then, I’d change how components are registered: instead of keeping every service and widget as a field in RlBuddyApp, I’d make a Vec<Box<dyn Service/Panel» for each, and loop through it. I spent about an hour trying to get Panels to automatically implement ui by requiring egui::Widget as a supertrait, which doesn’t work since widgets are stateful (need &self). So, I tried to require &mut Self to implement egui::Widget, but apparently something to do with type erasure doesn’t let that work with dynamic dispatch which was needed for the Vec<Box> thing. I’ve moved a few features to the new architecture, but I’m still in the process of finishing up. Additionally, it has to work side-by-side with existing crappy monster-Panel-enum architecture, which sucks to maintain. Okay, once again, I had to strip down a ton of detail (and my terrible wording but wtv) cause I hit like 5000 characters b4 realizing. See ya! May the Stardance gods increase devlog limits :)"}, {"post_id": 59926, "ts": "2026-09-01T23:19:29Z", "hours": 2.5164, "text": "rlbuddy has a gamepad overlay now so that you can show off your awesome bindings! Don’t even bother figuring out mine. It’s kinda starting to become hellish to add new widgets/services, but I’m almost done for the next ship so I doubt I’ll refactor just yet [edit: im doing a super refactor now hehe]. I made the overlay with the raw egui::Painter rather than actual controls (since it would be pretty hard to make a controller out of Buttons or something). I also prefer to avoid embedding static assets, otherwise I might have made an actual one in MS Paint or something. I also can’t seem to find a good egui version. I’ve been on 0.34 almost the whole time, which works well but doesn’t support transparency in extra viewports. But, 0.35/0.36 broke external viewports. So, until then, we get an opaque gamepad overlay :( but the main app is still transparent, so it’s not horrible. Rolled an 8 and a 9 on the Stardance rng today! I’m so proud of myself."}, {"post_id": 59228, "ts": "2026-08-31T21:59:04Z", "hours": 0.4561, "text": "I moved the mmr server to alpine linux! Before, it was regular raspberry pi os lite on the Pi. But, it was behaving strangely, randomly rebooting and things, so I decided to try installing Alpine. The lightweight distro has been on my radar for a while now, but this was my first time ever actually trying it. I imaged it normally with the raspberry pi imager, and put it on the pi, did setup-alpine, and all was well. But, I put in the wrong wifi password at first, which broke everything else. I tried changing the wifi config and doing something with wpa_supplicant (thanks google ai overview), but nothing fixed it so I ended up doing a fresh install. This time, I put in the right password and everything went great. I set up ssh, node, pm2, etc. and moved the server files onto the pi through sftp. Then, I got it running over my local network and set up authentication. So, it was time to set up the Cloudflare tunnel again. I followed this neat guide , changing values as needed (for example, my pi is aarch64, but the guide was x64, so I spent a while figuring out why the pi kept giving elf errors). It took a really long time to set up the openrc startup script because 1. cloudflare rotates the setup token relatively frequently and 2. I accidentally put 2 –token arguments. And since I was using vi, I didn’t even notice and kept trying to figure out why cloudflared crashed on startup. But I eventually found out and removed the duplicate and it worked! Then I finished setting up pm2 and put the pi in its home next to the router, and mmr.kmdw.dev is back up exposing your lobby’s skills. See you in the next one! Yes I know part of the token is in the image but it’s used already so it doesn’t matter"}, {"post_id": 56962, "ts": "2026-08-29T00:27:50Z", "hours": 9.075, "text": "rlbuddy can load custom maps now! Either you can download them and then import from a zip, or you can download them from bakkesplugins straight from the app! Importing it from a file is relatively easy. I checked the code for Lethamyr’s custom map loader to see what exactly it did, and for Lethamyr maps it: extracted the zip into a temp dir read info.json, .udk, and preview.jpg copied those into its own saved map directory I knew Rust, being a low-level language would let me not have to extract the zip fully first. Additionally, Bakkesplugins maps don’t contain info.json or preview.jpg, they only contain a udk file, so I had to make sure it would work with that. So, the import code I wrote basically: enumerates files in the zip extracts info.json (if found) into a struct copies *.upk into the target directory copies *.jpg into the target directory/preview.jpg if it exists It worked great. I made a really cool looking widget with stupid manual layouting behind it for map selection. First, it would add the preview image (or a black background if none). Then, it would get the screen rect of the image, and draw a semitransparent black background onto it (for contrast). Finally, it drew the actual contents in that screen rect. So, I got pretty-looking tiles with preview image backgrounds! I also added a progress bar for import status. I benchmarked each main part of the import process and found that decompressing/extracting the upk file took around 2 seconds, for which the ui thread would be totally frozen (big nono)! So, I moved the work onto another thread, and also made it decompress/load in 100 total chunks, updating a progress bar each time. I then moved on to the map downloader. Bakkesplugins doesn’t have an API, so it relies on scraping the website. I didn’t actually use any external crates for gathering information, though. I wrote a parser which takes a list of rules, each with a start and end search string, and looks for each of them in sequence till it fails to find a rule. I tried to make it completely zero-copy, but something it needed was to turn an [Option; N] into a Option<[T; N]> if every element was Some , but the only way I could figure out how to do that was with an iterator. It’s still really fast though. So, it parses search results, including map titles and urls straight out of the html string without needing an HTML parser or regex library. Once it was able to load results from the search page, I went to sleep and came back today. Now I had to get it to actually download the ZIP files and preview images, and import them straight into the app. It first has to download/parse the plugin info page since the ZIP url isn’t available in the search results. Then, it requests the ZIP. I had some trouble with this, since I wanted to show a progress bar for the download status. I first tried a function from this gist , but it didn’t work. So, I made my own which used the same chunking strategy as the import status loader. Turns out, ureq blocks requests once they hit 10MB by default, which was probably why the gist version didn’t work. But, mine was faster anyways, so I kept it. It’s even cooler since I made it myself. Then, I wired up a couple more commands to let it import straight from archive bytes instead of from a file path, and it finally loaded! Once that worked, I made it pass along the map title, author, and description as well. Then, I extended it to parse out the thumbnail image url and download that, then pass that along to the importer as well. Anyways, that was super fun. I would add a lot more detail, but Stardance limits devlogs to 4000 characters and I’m approaching scarily close to that. I’m planning on just polishing the downloader interface a bit more, and then I’ll do some bugfixes for the next release. See ya!"}, {"post_id": 55430, "ts": "2026-08-27T08:04:57Z", "hours": 3.0236, "text": "rlbuddy now can show people’s avatars cross-platform! It uses a web api I put on Cloudflare Workers which uses platform-specific requests to get avatar urls (see the previous devlog), which the app just fetches and renders. The http part was pretty easy, since I already have wrappers for cached HTTP apis, so I just had to define types for that and hook it up. But, once it was time to display, I ran into a weird problem where egui said there was no image loader installed for jpegs! Even using all_loaders + default didn’t work. Turns out, I have to actually include image as a separate crate and enable all the filetype features I want in there. Once I got it to load, it was time to mess with styling again. egui is really annoying with images, so I spent a while trying to get them to size right first. The default avatar used while they’re loading or for Epic/Switch players is from Fandom, like the rank icons. However, even though the icon is 90x90 pixels, the webp is 128x128 pixels, it just has a bunch of transparent padding. So, I initially messed with egui to do some weird ui allocation and calculation to get it to render right. But, turns out I didn’t have to do all of that. All I had to do was allocate a 28x28 space (the target size), scale that up by the 128/90 ratio, then paint the image onto the new size. Worked great. Then, I got to fight with grid layouts again. For some reason, wrapping the avatar and player details in a horizontal totally exploded all the layouting. So, I ended up making avatar and details separate columns. But, since the “player” header text is a bit larger than the icon width, there was too much padding between the avatar and the player details. So, I did more messing around with egui manual layouting, and ended up allocating a 24x(body text height + 2) space for the header, which would give it the default spacing. Then, I’d copy the Rect, shift the left bound over by 12 pixels, then paint the header onto there. That way, the header is left aligned with the avatar and the avatar + details look like they’re in the same column, even though it’s actually a bunch of stupid manual layout magic behind the scenes."}, {"post_id": 55160, "ts": "2026-08-26T17:10:01Z", "hours": 2.6972, "text": "Made an avatars api for Steam, PSN, and Xbox (Epic doesn’t support profile pictures and I have no clue what goes on in Nintendo-land, even Tracker doesn’t show theirs). It’s on Cloudflare Workers instead of my pi since it’s basically just api integration. I totally overcomplicated finding out how to get Steam profile pictures. Like, it’s insane how easy it actually is. A few weeks ago, I got an old version of Steam Rocket League and decompiled it, trying to look for where it fetched avatars from. After some experimentation and debugging, I learned that when Psyonix builds Rocket League, they give it something that implements OnlineSubsystem for whatever the target platform is. So, Steam gets the Steamworks OnlineSubsystem, Epic gets the EOSOnlineSubsystem, and so forth. And the game doesn’t need to know implementation details, just that it implements OnlineSubsystem, I think the term for that is dynamic dispatch in programming languages. Anyways, once I learned that Rocket League doesn’t do any avatar handling itself, I looked at the Steamworks SDK. Basically, it routes the avatar request through the open Steam client. So after some experimentation, I got it to fetch profile pictures with C++ and the Spacewars test game. But, that obviously wouldn’t work on a server, since the Steam client can’t really run on a Worker. So, I tried to use the Steam Web API. I got an API key, but when I tried, it said I was forbidden. According to the documentation, the GetPlayerSummaries endpoint was at partner.steam-api.com, which was only for publishers. About a week later, so yesterday, I had the genius idea to use api.steampowered.com (the public API domain) instead of partner.steam-api.com. Just swapping them out. And it worked. So, I now had a way to get Steam avatar urls. Xbox and PSN were actually really easy. Xbox has an undocumented API at https://peoplehub-public.xboxlive.com/people/gt(GAMERTAG) which returns json containing the avatar uri, and I used the psn-api package with a new PlayStation account to get PSN profile pictures. Then, I just put all of them in a Worker. So, rlbuddy will be able to show avatars soon enough!"}, {"post_id": 54013, "ts": "2026-08-24T19:11:04Z", "hours": 4.6756, "text": "Recently I was going through game archives and came across the BepInEx tool, which is basically a code injection framework for Unity games. I was really curious as to how it actually launched when the game launched, and found that they use a tool called Unity Doorstop, which adds winhttp.dll to the game’s binary directory. So, when the game tries to use things from winhttp, it goes to the new winhttp.dll instead of the system32 winhttp.dll. From there, the custom dll just forwards all the function calls. However, the custom dll is modified so that on its first interaction, it launches whatever Doorstop is configured to launch, and the mods can be loaded. That’s at least as far as I understood, but it made sense, and I thought, “what if I could launch rlbuddy automatically like this?” So, first, I tried to test it with a custom executable and library. I created a basic executable and DLL in C, and got the executable to load and run some code from the DLL. Then, I created another DLL, and got it to “impersonate” the original DLL. So, I’d rename the first dll to something like “mylibrary_original.dll”, rename the faker dll to “mylibrary.dll”, and the original executable would call the original, but it goes through the faker instead. And it worked! I had successfully created an actual doorstop-like faker. Now it was time to actually try this on Rocket League. So, I did a dumpbin /import on RocketLeague.exe, and found a few good targets - IPHLPAPI.dll, a system dll for networking stuff, and xinput1_3.dll, one shipped with the game for talking to controllers. RocketLeague.exe only imported two functions from each of them, meaning my fake interface wouldn’t have to be too big. So, first I tried to spoof IPHLPAPI.dll. The code was pretty simple, just a couple of global objects to hold the function. So, when the game loaded the DLL, it loaded the fake DLL. Then, when it tried to call some function in the DLL, such as GetAdaptersAddresses, the fake DLL would be the actual receiver, it would log something to a file, and then it would call the REAL GetAdaptersAddresses by dynamically loading the system IPHLPAPI.dll and return it. And… it worked! I opened Rocket League and the log file was created and had the log “GetAdaptersAddresses called!” Then, I launched it with anticheat enabled, and EAC immediately shut it down. I guess that was to be expected, but it was pretty annoying. So, I decided to try one more time, this time with xinput1_3.dll. This was more interesting because it was lazy loaded, and functions were imported by ordinals (2 = XInputGetState, 3 = XInputSetState), so I thought something might be different. So, I modified the original faker to be xinput1_3, replacing the function names and definitions. Since Rocket League imported them by ordinal instead of just the function name, I had to create a .def file as well, and define the ordinals there. Then, I did the same surgery on the binary folder, and after a few small mistake fixes, it worked! But, I still hadn’t tried with EAC enabled. So I launched it with anticheat, and it gave me a different error this time - that it couldn’t determine xinput1_3.dll’s file version. That was a different error! I opened the original xinput1_3.dll’s file properties, and it had copyright, file version, product version, and a couple other random things that were missing in my faker DLL. So I made a .rc file and compiled it together with the faker DLL. Then, most of the properties matched up. So, I tried it, and it seemingly worked! And then EAC said that it couldn’t verify the file again. In the end, I didn’t manage to get it working. I should’ve expected EAC to block me from the beginning, but it was pretty fun, and if I ever want to do something similar with a game without anti-cheat, I can do that now! rlbuddy is pretty closed to being released though, I just want to polish a few things and make sure the docs are fleshed out."}, {"post_id": 51407, "ts": "2026-08-21T02:54:11Z", "hours": 1.5947, "text": "rlbuddy doesn’t use the default eframe persistence feature for savedata anymore, which is pretty cool. There were a few reasons for this: It was kind of unnecessary, since eframe uses ron and it was storing a bunch of extra widget data which didn’t really fit with the app model anyway It took up extra dependencies (removing the feature shaved off like 10) There’s a bug where if the app crashed, it would erase all savedata, which, as you can imagine, was quite annoying especially since I actually use the app along with developing it, meaning if the app crashed in development it would delete all my actual match data. It’s easier to externally modify, so if in development I want to mess with some values it’s a lot easier. Anyways, actually getting the data directory was pretty interesting. I’ve basically decided to only support Windows, since the music player relies on Windows APIs anyways and I don’t think the Stats API even works on Linux. Initially, I checked out the source code for the dirs and directories crates, which led me to the dirs-sys crate (which actually isn’t even on crates.io). It used unsafe raw Win32 SHGetKnownFolderPath with the Roaming folder guid. However, since I was already using the windows-rs crate, I tried to find the WinRT equivalent. I ended up enabling the Storage_Search feature to use the API which would let me get it. Of course, this also didn’t work, because of something to do with how Windows apps are supposed to be registered. So, I ended up just grabbing the APPDATA environment variable and using that, then joining rlbuddy\\data.json to it. It’s pretty underwhelming, but it more than gets the job done. Now, whenever the app panics, I won’t lose all of my settings anymore! Pretty nice. Anyways, that’s what mainly got accomplished. I also tried to set up a GitHub Action to build it and make a release, but I kept hitting errors so I gave up and decided to upload a release next time I get the urge to actually update the GitHub repository. There’s also a few fixes, like the window title which has actually had a typo since refactors from around a month ago, and adding a missing ! which broke toasts when in training. Overall, only an hour or so was tracked, but a heck of a lot got done. See you all next time!"}, {"post_id": 49990, "ts": "2026-08-19T00:44:44Z", "hours": 1.4564, "text": "I added a small toast notification that activates when you score in training, like bakkesmod used to add it to text chat. It also activates when you hit the crossbar so you can feel even more remorseful that your beautiful musty didn’t go in :) I actually got the program to segfault while making it. egui’s external viewport api is kinda funky… there are two modes, immediate and deferred, and immediate is supposed to be easier to use. However, when I tried to use immediate mode, it panicked saying that the egui backend was implemented incorrectly. So I switched to deferred, and it gave me the segfault. There were 3 things I had to do: I stored all active toasts in a Vec, and render them in the external viewport every frame. When one should disappear, it uses Vec::retain to remove old ones. However, this doesn’t do any cleanup, meaning the viewport would go bonkers and crash the application. So, I had to close the viewport first. Calling ui.ctx() from the viewport made a segfault, probably my fault but I couldn’t figure out how to resolve it so I ended up just sending Viewport::Close from the main loop. Even if I sent Viewport::Close from the main loop, it still gave the weird error. So, I resolved it by adding a small delay from after it should close, which is when it sends the Viewport::Close command, and when it’s actually removed from the Vec of toasts. Well, I did all that, and it was working, but there was a really weird bug where it would lag the whole system while opening/closing. So, I switched from immediate to deferred viewport mode, and it stopped happening! I hit my first powerful airdribble musty with it on, it was around 105kph, and a total fluke. I wish I had gotten it on recording."}, {"post_id": 49200, "ts": "2026-08-17T21:06:45Z", "hours": 9.2278, "text": "I replaced the Spotify integration with a generic one that uses the Windows GSMTC api, meaning it’s way snappier, since it’s not making network requests every time it wants new data! The only reason it needs data is to fetch playback info, and it’s easy to do that since the windows crate gives a bunch of event listeners, meaning I also don’t need to poll anymore. Unfortunately, the integration from browsers etc. is kind of buggy so thumbnail loading is relatively inconsistent, but by adding some caching and timeouts it works flawlessly :) I also redid the UI since the old one was frankly quite ugly. Since the playback listener doesn’t update that frequently for progressbar changes, I also made it fake progress when music is playing and the ui updates, that way even if the latest data is stale, it still looks like the progress bar is moving. I’m now working on better session stats, I’ll probably end up replacing the all-time stat tracker with more in-depth session-only ones"}, {"post_id": 46652, "ts": "2026-08-14T02:03:01Z", "hours": 4.1664, "text": "rlbuddy finally has an MMR graph! I’m planning on adding more stat displays soon, like W/L, goals for/against, saves, etc. but this is a really big milestone since it’s a feature that a lot of players actually use (I basically only play casual so it’s not really for me 😅). Anyways, this also required me to rearchitect how matches are stored, and now there are two representations: a session match, which contains lots of information about it like detailed player skill information, and a stripped match, which is minimal and stores very little because it actually gets saved to disk! So, match history also gets saved now! This also opens up the doorway to a Deja-Vu-like thing which tells you if you’ve played with someone before and when! It uses the egui_plot library to show the graph. Funnily enough, basically every default option for a displayed plot was the opposite for this, and so the plot builder ended up using almost every method. Also, once again, hackatime is wrong because Zed likes to uninstall extensions randomly :("}, {"post_id": 42417, "ts": "2026-08-07T03:32:05Z", "hours": 2.1161, "text": "The Stats API finally provides the actual playlist id, so rlbuddy isn’t limited to guessing between 1v1/2v2/3v3/4v4 anymore! This brings in some cool extra features like displaying the rank each player is in for the given playlist as well as even better Discord presence! I looked through BakkesMod as well as some psynet endpoints to grab the list of playlist ids to associate with each actual playlist. There isn’t really an image to go with this, so here’s the monster enum of playlists :)"}, {"post_id": 40468, "ts": "2026-08-04T00:47:59Z", "hours": 2.2011, "text": "I rewrote the API admin page with Svelte! Before, it was a quick-and-dirty raw html/css/js solution, but now it should be a lot less annoying to work on. I improved authorization a lot, now instead of adding the pw query parameter for every request you put in a password once and it actually uses the Authorization header. Unfortunately, the browser EventSource doesn’t support headers except for in cookies, meaning I had to use the custom eventsource library for bootstrapping since the bootstrap API uses SSE. There’s basically a whole Vite project in src/webadmin, with its own tsconfig.json and everything. Because of the way it’s set up, development needs Vite running in build watch mode which builds to where the main app serves it out of. It makes deployment a lot easier, though. I didn’t really add any actual features to it, except for a log filter. However, it should be way easier to add more features in the future, like a api tester!"}, {"post_id": 38450, "ts": "2026-07-31T20:22:49Z", "hours": 6.755, "text": "rlbuddy has player lookup now, so you can check for smurfs without needing to boot up a heavy browser while playing. Unfortunately, this has to get its information from TRN because it’s the only source of this information, the rocket league apis don’t provide it. There’s some cool refactors behind the scenes, though. I generalized almost all HTTP requests into its own struct, so it removed like 200 lines of boilerplate code into a single generic module. It automatically handles caching, using new threads, ignoring if there’s already an inflight request, loading states, and automatic serde_json deserialization. The Epic id, uncensorer, ranks, and new TRN apis all use it now! Also, the button to open in TRN from the player list opens the player info dialog instead (though if you need to, you can open in TRN from there)."}, {"post_id": 34762, "ts": "2026-07-25T19:02:58Z", "hours": 1.9536, "text": "Note: I’ve actually had way more hours than it says, but I reinstalled windows and forgot to set up hackatime again so all that’s gone :( mmr-api-v2 finally has an admin page, so I don’t have to ssh into my pi just to check some debug information anymore! It is kind of developer-oriented but I think it looks and works well enough for what it is for. In the actual rlbuddy app, there are some cool new features! Facilitated by lots of refactors, of course (turns out, the matches service was bigger than the actual rocket league service, so I finally separated them). Spotify integration now has a previous button as well as a skip-to-song-in-current-playlist button. Match history was a feature that I’ve kind of ignored, so I gave it a much needed touch-up so its easier to view and browse. A pretty cool thing is that that’s been added a rocket-league-playerid-to-epic-games-id translation endpoint. This means that you can see Switch players’ TRN profiles through their linked Epic account, since TRN doesn’t let you check based on Switch name alone. Finally, there are some small quality of life improvements, like less deadlocks, better anthem pausing, and the open panel list persisting."}, {"post_id": 30390, "ts": "2026-07-17T21:27:26Z", "hours": 3.8292, "text": "Turns out, for spotify integration, I can’t actually let other people use my spotify development mode app. It’s limited to 5 users which I have to invite by email. And to get a quota extension, I need 250,000 existing monthy active users, which I’m slightly short of (by about 249,999). So, I changed the login flow so that each user has to make their own Spotify app, and log in using the client ID from there. I didn’t change the current PKCE flow since that didn’t really need to be changed, but setup unfortunately takes a little more work now. Also, it has transparency now."}, {"post_id": 28659, "ts": "2026-07-15T01:29:51Z", "hours": 13.4597, "text": "It’s been a week since the last devlog, and lots has changed! 1. new architecture! The code was getting pretty messy since I had kept adding new features without really doing major refactors. So, I finally took it upon myself to actually organize everything and come up with a proper architecture. Each feature has its own module, containing services and widgets. Services have all the state, for example the Spotify service stores the current song and settings and the Rocket League module exposes a Matches service for the current match and past matches, which the match and past match widgets actually show. Services all have update functions which get called every 10ms. There are two ways for services to talk to the rest of the app: events and state. State is straightforward, it’s usually just an Rc with a custom generic struct I made to manage whether the widget can read/write to it. Events are enums which the update method returns, and can get passed to other update methods. For example, the Stats API service doesn’t have its own widget, it only connects to the stats api and returns match events which other features can use, like Spotify using replay start/end events to play/pause music. 2. new ui! The dashboard part isn’t as ugly as it was before, and has actual cards for every panel instead of just having horizontal lines in between. Even though it sounds pretty small, it’s actually huge for the prettiness of the app! Along with this, the behaviour of managing panels also changed. There’s an actual close button, and instead of having one button per panel at the bottom, there’s a small picker to open/close them. Also, you can also move them up and down now 3. Automatic stats api setup This is a pretty small feature. It lets you select the path to the rocket league executable, detects whether it’s already enabled, and turns it on if it’s disabled. It does this by just replacing a line in the stats api configuration. 4. mmr api v2 doesnt explode There were a few bugs which would make the API disconnect randomly, but they’ve been ironed out. This also made it so the app doesn’t have to deal with failure behaviour and can just keep asking until the API responds."}, {"post_id": 23975, "ts": "2026-07-07T06:51:05Z", "hours": 8.1119, "text": "rlbuddy now has a little bit of Spotify support! Although it looks like a just few elements and a button, theres a lot going on behind the scenes. I’m not embedding an entire webview to run the web playback SDK this time, so it just uses the Web API to keep resource usage nice and low. Since it’s a native app, it has to jump through some hurdles to authorize, using the PKCE extension version since the client secret can’t be stored securely. It uses the webbrowser crate to open the Spotify auth page, and starts a tiny little oneshot HTTP server on a raw TCPListener. The redirect is set to the HTTP server, and then as soon as it receives the request, it sends a simple HTML page and continues. From there, it receives the authorization code and can continue as normal :) Other than that, it’s just normal REST api interaction. I did learn a ton about thread safety (I hit so many deadlocks), because unlike the stats api, for example, which just sits in a different thread and hurls events over a channel, it actually has to work with the user. It’s also able to pause during goal replays, and that was pretty annoying to structure. Eventually, I decided to just use a channel where the stats api could send replay start/end events through the match widget. Looking back on it, the solution was extremely simple 😅 I am planning to add a bit more, like shuffle/repeat controls as well as a previous track button, but this feature turned out pretty nicely!"}, {"post_id": 22551, "ts": "2026-07-05T02:19:55Z", "hours": 3.7678, "text": "rlbuddy can now show Rich Presence in Discord, so now all your friends can see you destroying your opponents ;)"}, {"post_id": 21165, "ts": "2026-07-02T23:37:22Z", "hours": 12.7792, "text": "rlbuddy has had major ui overhauls to shift it more towards an actual overlay rather than just an app that displays ranks. there are new features like a settings menu as well as major architectural overhauls, with more coming soon!"}, {"post_id": 16053, "ts": "2026-06-26T02:45:17Z", "hours": 2.3483, "text": "Got it working as an actual overlay!! Right now it just displays ranks, though"}, {"post_id": 15855, "ts": "2026-06-25T19:39:34Z", "hours": 30.4556, "text": "I got a stable MMR/ranks api working!! https://github.com/Kalilamodow/mmr-api-v2 Basically, it’s an http server that opens a websocket to the actual rocket league game api in the background and spoofs a real client connection. The socket only stays active for 5 seconds at a time though so I don’t kill psyonix’s servers. That way, rlbuddy can get ranks without getting blocked by tracker network! I originally tried to do it on Cloudflare, but the workers outbound websocket didn’t work since you can’t send custom headers with them. I ended up having to use my old raspberry pi and set up a homeserver behind Cloudflare tunnels, and I’m actually planning on moving the rest of my stuff that used to be on a VPS onto the pi."}]...
|
Title: rlbuddy by @kmdw | Stardance
Devlogs:
I go Title: rlbuddy by @kmdw | Stardance
Devlogs:
I got a stable MMR/ranks api working!! https://github.com/Kalilamodow/mmr-api-v2 Basically, it’s an http server that opens a websocket to the actual rocket league game api in the background and spoofs a real client connection. The socket only stays active for 5 seconds at a time though so I don’t kill psyonix’s servers. That way, rlbuddy can get ranks without getting blocked by tracker network! I originally tried to do it on Cloudflare, but the workers outbound websocket didn’t work since you can’t send custom headers with them. I ended up having to use my old raspberry pi and set up a homeserver behind Cloudflare tunnels, and I’m actually planning on moving the rest of my stuff that used to be on a VPS onto the pi.
Got it working as an actual overlay!! Right now it just displays ranks, though
rlbuddy has had major ui overhauls to shift it more towards an actual overlay rather than just an app that displays ranks. there are new features like a settings menu as well as major architectural overhauls, with more coming soon!
rlbuddy can now show Rich Presence in Discord, so now all your friends can see you destroying your opponents ;)
rlbuddy now has a little bit of Spotify support! Although it looks like a just few elements and a button, theres a lot going on behind the scenes. I’m not embedding an entire webview to run the web playback SDK this time, so it just uses the Web API to keep resource usage nice and low. Since it’s a native app, it has to jump through some hurdles to authorize, using the PKCE extension version since the client secret can’t be stored securely. It uses the webbrowser crate to open the Spotify auth page, and starts a tiny little oneshot HTTP server on a raw TCPListener. The redirect is set to the HTTP server, and then as soon as it receives the request, it sends a simple HTML page and continues. From there, it receives the authorization code and can continue as normal :) Other than that, it’s just normal REST api interaction. I did learn a ton about thread safety (I hit so many deadlocks), because unlike the stats api, for example, which just sits in a different thread and hurls events over a channel, it actually has to work with the user. It’s also able to pause during goal replays, and that was pretty annoying to structure. Eventually, I decided to just use a channel where the stats api could send replay start/end events through the match widget. Looking back on it, the solution was extremely simple 😅 I am planning to add a bit more, like shuffle/repeat controls as well as a previous track button, but this feature turned out pretty nicely!
It’s been a week since the last devlog, and lots has changed! 1. new architecture! The code was getting pretty messy since I had kept adding new features without really doing major refactors. So, I finally took it upon myself to actually organize everything and come up with a proper architecture. Each feature has its own module, containing services and widgets. Services have all the state, for example the Spotify service stores the current song and settings and the Rocket League module exposes a Matches service for the current match and past matches, which the match and past match widgets actually show. Services all have update functions which get called every 10ms. There are two ways for services to talk to the rest of the app: events and state. State is straightforward, it’s usually just an Rc with a custom generic struct I made to manage whether the widget can read/write to it. Events are enums which the update method returns, and can get passed to other update methods. For example, the Stats API service doesn’t have its own widget, it only connects to the stats api and returns match events which other features can use, like Spotify using replay start/end events to play/pause music. 2. new ui! The dashboard part isn’t as ugly as it was before, and has actual cards for every panel instead of just having horizontal lines in between. Even though it sounds pretty small, it’s actually huge for the prettiness of the app! Along with this, the behaviour of managing panels also changed. There’s an actual close button, and instead of having one button per panel at the bottom, there’s a small picker to open/close them. Also, you can also move them up and down now 3. Automatic stats api setup This is a pretty small feature. It lets you select the path to the rocket league executable, detects whether it’s already enabled, and turns it on if it’s disabled. It does this by just replacing a line in the stats api configuration. 4. mmr api v2 doesnt explode There were a few bugs which would make the API disconnect randomly, but they’ve been ironed out. This also made it so the app doesn’t have to deal with failure behaviour and can just keep asking until the API responds.
Turns out, for spotify integration, I can’t actually let other people use my spotify development mode app. It’s limited to 5 users which I have to invite by email. And to get a quota extension, I need 250,000 existing monthy active users, which I’m slightly short of (by about 249,999). So, I changed the login flow so that each user has to make their own Spotify app, and log in using the client ID from there. I didn’t change the current PKCE flow since that didn’t really need to be changed, but setup unfortunately takes a little more work now. Also, it has transparency now.
Note: I’ve actually had way more hours than it says, but I reinstalled windows and forgot to set up hackatime again so all that’s gone :( mmr-api-v2 finally has an admin page, so I don’t have to ssh into my pi just to check some debug information anymore! It is kind of developer-oriented but I think it looks and works well enough for what it is for. In the actual rlbuddy app, there are some cool new features! Facilitated by lots of refactors, of course (turns out, the matches service was bigger than the actual rocket league service, so I finally separated them). Spotify integration now has a previous button as well as a skip-to-song-in-current-playlist button. Match history was a feature that I’ve kind of ignored, so I gave it a much needed touch-up so its easier to view and browse. A pretty cool thing is that that’s been added a rocket-league-playerid-to-epic-games-id translation endpoint. This means that you can see Switch players’ TRN profiles through their linked Epic account, since TRN doesn’t let you check based on Switch name alone. Finally, there are some small quality of life improvements, like less deadlocks, better anthem pausing, and the open panel list persisting.
rlbuddy has player lookup now, so you can check for smurfs without needing to boot up a heavy browser while playing. Unfortunately, this has to get its information from TRN because it’s the only source of this information, the rocket league apis don’t provide it. There’s some cool refactors behind the scenes, though. I generalized almost all HTTP requests into its own struct, so it removed like 200 lines of boilerplate code into a single generic module. It automatically handles caching, using new threads, ignoring if there’s already an inflight request, loading states, and automatic serde_json deserialization. The Epic id, uncensorer, ranks, and new TRN apis all use it now! Also, the button to open in TRN from the player list opens the player info dialog instead (though if you need to, you can open in TRN from there).
I rewrote the API admin page with Svelte! Before, it was a quick-and-dirty raw html/css/js solution, but now it should be a lot less annoying to work on. I improved authorization a lot, now instead of adding the pw query parameter for every request you put in a password once and it actually uses the Authorization header. Unfortunately, the browser EventSource doesn’t support headers except for in cookies, meaning I had to use the custom eventsource library for bootstrapping since the bootstrap API uses SSE. There’s basically a whole Vite project in src/webadmin, with its own tsconfig.json and everything. Because of the way it’s set up, development needs Vite running in build watch mode which builds to where the main app serves it out of. It makes deployment a lot easier, though. I didn’t really add any actual features to it, except for a log filter. However, it should be way easier to add more features in the future, like a api tester!
The Stats API finally provides the actual playlist id, so rlbuddy isn’t limited to guessing between 1v1/2v2/3v3/4v4 anymore! This brings in some cool extra features like displaying the rank each player is in for the given playlist as well as even better Discord presence! I looked through BakkesMod as well as some psynet endpoints to grab the list of playlist ids to associate with each actual playlist. There isn’t really an image to go with this, so here’s the monster enum of playlists :)
rlbuddy finally has an MMR graph! I’m planning on adding more stat displays soon, like W/L, goals for/against, saves, etc. but this is a really big milestone since it’s a feature that a lot of players actually use (I basically only play casual so it’s not really for me 😅). Anyways, this also required me to rearchitect how matches are stored, and now there are two representations: a session match, which contains lots of information about it like detailed player skill information, and a stripped match, which is minimal and stores very little because it actually gets saved to disk! So, match history also gets saved now! This also opens up the doorway to a Deja-Vu-like thing which tells you if you’ve played with someone before and when! It uses the egui_plot library to show the graph. Funnily enough, basically every default option for a displayed plot was the opposite for this, and so the plot builder ended up using almost every method. Also, once again, hackatime is wrong because Zed likes to uninstall extensions randomly :(
I replaced the Spotify integration with a generic one that uses the Windows GSMTC api, meaning it’s way snappier, since it’s not making network requests every time it wants new data! The only reason it needs data is to fetch playback info, and it’s easy to do that since the windows crate gives a bunch of event listeners, meaning I also don’t need to poll anymore. Unfortunately, the integration from browsers etc. is kind of buggy so thumbnail loading is relatively inconsistent, but by adding some caching and timeouts it works flawlessly :) I also redid the UI since the old one was frankly quite ugly. Since the playback listener doesn’t update that frequently for progressbar changes, I also made it fake progress when music is playing and the ui updates, that way even if the latest data is stale, it still looks like the progress bar is moving. I’m now working on better session stats, I’ll probably end up replacing the all-time stat tracker with more in-depth session-only ones
I added a small toast notification that activates when you score in training, like bakkesmod used to add it to text chat. It also activates when you hit the crossbar so you can feel even more remorseful that your beautiful musty didn’t go in :) I actually got the program to segfault while making it. egui’s external viewport api is kinda funky… there are two modes, immediate and deferred, and immediate is supposed to be easier to use. However, when I tried to use immediate mode, it panicked saying that the egui backend was implemented incorrectly. So I switched to deferred, and it gave me the segfault. There were 3 things I had to do: I stored all active toasts in a Vec, and render them in the external viewport every frame. When one should disappear, it uses Vec::retain to remove old ones. However, this doesn’t do any cleanup, meaning the viewport would go bonkers and crash the application. So, I had to close the viewport first. Calling ui.ctx() from the viewport made a segfault, probably my fault but I couldn’t figure out how to resolve it so I ended up just sending Viewport::Close from the main loop. Even if I sent Viewport::Close from the main loop, it still gave the weird error. So, I resolved it by adding a small delay from after it should close, which is when it sends the Viewport::Close command, and when it’s actually removed from the Vec of toasts. Well, I did all that, and it was working, but there was a really weird bug where it would lag the whole system while opening/closing. So, I switched from immediate to deferred viewport mode, and it stopped happening! I hit my first powerful airdribble musty with it on, it was around 105kph, and a total fluke. I wish I had gotten it on recording.
rlbuddy doesn’t use the default eframe persistence feature for savedata anymore, which is pretty cool. There were a few reasons for this: It was kind of unnecessary, since eframe uses ron and it was storing a bunch of extra widget data which didn’t really fit with the app model anyway It took up extra dependencies (removing the feature shaved off like 10) There’s a bug where if the app crashed, it would erase all savedata, which, as you can imagine, was quite annoying especially since I actually use the app along with developing it, meaning if the app crashed in development it would delete all my actual match data. It’s easier to externally modify, so if in development I want to mess with some values it’s a lot easier. Anyways, actually getting the data directory was pretty interesting. I’ve basically decided to only support Windows, since the music player relies on Windows APIs anyways and I don’t think the Stats API even works on Linux. Initially, I checked out the source code for the dirs and directories crates, which led me to the dirs-sys crate (which actually isn’t even on crates.io). It used unsafe raw Win32 SHGetKnownFolderPath with the Roaming folder guid. However, since I was already using the windows-rs crate, I tried to find the WinRT equivalent. I ended up enabling the Storage_Search feature to use the API which would let me get it. Of course, this also didn’t work, because of something to do with how Windows apps are supposed to be registered. So, I ended up just grabbing the APPDATA environment variable and using that, then joining rlbuddy\data.json to it. It’s pretty underwhelming, but it more than gets the job done. Now, whenever the app panics, I won’t lose all of my settings anymore! Pretty nice. Anyways, that’s what mainly got accomplished. I also tried to set up a GitHub Action to build it and make a release, but I kept hitting errors so I gave up and decided to upload a release next time I get the urge to actually update the GitHub repository. There’s also a few fixes, like the window title which has actually had a typo since refactors from around a month ago, and adding a missing ! which broke toasts when in training. Overall, only an hour or so was tracked, but a heck of a lot got done. See you all next time!
Recently I was going through game archives and came across the BepInEx tool, which is basically a code injection framework for Unity games. I was really curious as to how it actually launched when the game launched, and found that they use a tool called Unity Doorstop, which adds winhttp.dll to the game’s binary directory. So, when the game tries to use things from winhttp, it goes to the new winhttp.dll instead of the system32 winhttp.dll. From there, the custom dll just forwards all the function calls. However, the custom dll is modified so that on its first interaction, it launches whatever Doorstop is configured to launch, and the mods can be loaded. That’s at least as far as I understood, but it made sense, and I thought, “what if I could launch rlbuddy automatically like this?” So, first, I tried to test it with a custom executable and library. I created a basic executable and DLL in C, and got the executable to load and run some code from the DLL. Then, I created another DLL, and got it to “impersonate” the original DLL. So, I’d rename the first dll to something like “mylibrary_original.dll”, rename the faker dll to “mylibrary.dll”, and the original executable would call the original, but it goes through the faker instead. And it worked! I had successfully created an actual doorstop-like faker. Now it was time to actually try this on Rocket League. So, I did a dumpbin /import on RocketLeague.exe, and found a few good targets - IPHLPAPI.dll, a system dll for networking stuff, and xinput1_3.dll, one shipped with the game for talking to controllers. RocketLeague.exe only imported two functions from each of them, meaning my fake interface wouldn’t have to be too big. So, first I tried to spoof IPHLPAPI.dll. The code was pretty simple, just a couple of global objects to hold the function. So, when the game loaded the DLL, it loaded the fake DLL. Then, when it tried to call some function in the DLL, such as GetAdaptersAddresses, the fake DLL would be the actual receiver, it would log something to a file, and then it would call the REAL GetAdaptersAddresses by dynamically loading the system IPHLPAPI.dll and return it. And… it worked! I opened Rocket League and the log file was created and had the log “GetAdaptersAddresses called!” Then, I launched it with anticheat enabled, and EAC immediately shut it down. I guess that was to be expected, but it was pretty annoying. So, I decided to try one more time, this time with xinput1_3.dll. This was more interesting because it was lazy loaded, and functions were imported by ordinals (2 = XInputGetState, 3 = XInputSetState), so I thought something might be different. So, I modified the original faker to be xinput1_3, replacing the function names and definitions. Since Rocket League imported them by ordinal instead of just the function name, I had to create a .def file as well, and define the ordinals there. Then, I did the same surgery on the binary folder, and after a few small mistake fixes, it worked! But, I still hadn’t tried with EAC enabled. So I launched it with anticheat, and it gave me a different error this time - that it couldn’t determine xinput1_3.dll’s file version. That was a different error! I opened the original xinput1_3.dll’s file properties, and it had copyright, file version, product version, and a couple other random things that were missing in my faker DLL. So I made a .rc file and compiled it together with the faker DLL. Then, most of the properties matched up. So, I tried it, and it seemingly worked! And then EAC said that it couldn’t verify the file again. In the end, I didn’t manage to get it working. I should’ve expected EAC to block me from the beginning, but it was pretty fun, and if I ever want to do something similar with a game without anti-cheat, I can do that now! rlbuddy is pretty closed to being released though, I just want to polish a few things and make sure the docs are fleshed out.
Made an avatars api for Steam, PSN, and Xbox (Epic doesn’t support profile pictures and I have no clue what goes on in Nintendo-land, even Tracker doesn’t show theirs). It’s on Cloudflare Workers instead of my pi since it’s basically just api integration. I totally overcomplicated finding out how to get Steam profile pictures. Like, it’s insane how easy it actually is. A few weeks ago, I got an old version of Steam Rocket League and decompiled it, trying to look for where it fetched avatars from. After some experimentation and debugging, I learned that when Psyonix builds Rocket League, they give it something that implements OnlineSubsystem for whatever the target platform is. So, Steam gets the Steamworks OnlineSubsystem, Epic gets the EOSOnlineSubsystem, and so forth. And the game doesn’t need to know implementation details, just that it implements OnlineSubsystem, I think the term for that is dynamic dispatch in programming languages. Anyways, once I learned that Rocket League doesn’t do any avatar handling itself, I looked at the Steamworks SDK. Basically, it routes the avatar request through the open Steam client. So after some experimentation, I got it to fetch profile pictures with C++ and the Spacewars test game. But, that obviously wouldn’t work on a server, since the Steam client can’t really run on a Worker. So, I tried to use the Steam Web API. I got an API key, but when I tried, it said I was forbidden. According to the documentation, the GetPlayerSummaries endpoint was at partner.steam-api.com, which was only for publishers. About a week later, so yesterday, I had the genius idea to use api.steampowered.com (the public API domain) instead of partner.steam-api.com. Just swapping them out. And it worked. So, I now had a way to get Steam avatar urls. Xbox and PSN were actually really easy. Xbox has an undocumented API at https://peoplehub-public.xboxlive.com/people/gt(GAMERTAG) which returns json containing the avatar uri, and I used the psn-api package with a new PlayStation account to get PSN profile pictures. Then, I just put all of them in a Worker. So, rlbuddy will be able to show avatars soon enough!
rlbuddy now can show people’s avatars cross-platform! It uses a web api I put on Cloudflare Workers which uses platform-specific requests to get avatar urls (see the previous devlog), which the app just fetches and renders. The http part was pretty easy, since I already have wrappers for cached HTTP apis, so I just had to define types for that and hook it up. But, once it was time to display, I ran into a weird problem where egui said there was no image loader installed for jpegs! Even using all_loaders + default didn’t work. Turns out, I have to actually include image as a separate crate and enable all the filetype features I want in there. Once I got it to load, it was time to mess with styling again. egui is really annoying with images, so I spent a while trying to get them to size right first. The default avatar used while they’re loading or for Epic/Switch players is from Fandom, like the rank icons. However, even though the icon is 90x90 pixels, the webp is 128x128 pixels, it just has a bunch of transparent padding. So, I initially messed with egui to do some weird ui allocation and calculation to get it to render right. But, turns out I didn’t have to do all of that. All I had to do was allocate a 28x28 space (the target size), scale that up by the 128/90 ratio, then paint the image onto the new size. Worked great. Then, I got to fight with grid layouts again. For some reason, wrapping the avatar and player details in a horizontal totally exploded all the layouting. So, I ended up making avatar and details separate columns. But, since the “player” header text is a bit larger than the icon width, there was too much padding between the avatar and the player details. So, I did more messing around with egui manual layouting, and ended up allocating a 24x(body text height + 2) space for the header, which would give it the default spacing. Then, I’d copy the Rect, shift the left bound over by 12 pixels, then paint the header onto there. That way, the header is left aligned with the avatar and the avatar + details look like they’re in the same column, even though it’s actually a bunch of stupid manual layout magic behind the scenes.
rlbuddy can load custom maps now! Either you can download them and then import from a zip, or you can download them from bakkesplugins straight from the app! Importing it from a file is relatively easy. I checked the code for Lethamyr’s custom map loader to see what exactly it did, and for Lethamyr maps it: extracted the zip into a temp dir read info.json, .udk, and preview.jpg copied those into its own saved map directory I knew Rust, being a low-level language would let me not have to extract the zip fully first. Additionally, Bakkesplugins maps don’t contain info.json or preview.jpg, they only contain a udk file, so I had to make sure it would work with that. So, the import code I wrote basically: enumerates files in the zip extracts info.json (if found) into a struct copies *.upk into the target directory copies *.jpg into the target directory/preview.jpg if it exists It worked great. I made a really cool looking widget with stupid manual layouting behind it for map selection. First, it would add the preview image (or a black background if none). Then, it would get the screen rect of the image, and draw a semitransparent black background onto it (for contrast). Finally, it drew the actual contents in that screen rect. So, I got pretty-looking tiles with preview image backgrounds! I also added a progress bar for import status. I benchmarked each main part of the import process and found that decompressing/extracting the upk file took around 2 seconds, for which the ui thread would be totally frozen (big nono)! So, I moved the work onto another thread, and also made it decompress/load in 100 total chunks, updating a progress bar each time. I then moved on to the map downloader. Bakkesplugins doesn’t have an API, so it relies on scraping the website. I didn’t actually use any external crates for gathering information, though. I wrote a parser which takes a list of rules, each with a start and end search string, and looks for each of them in sequence till it fails to find a rule. I tried to make it completely zero-copy, but something it needed was to turn an [Option; N] into a Option<[T; N]> if every element was Some , but the only way I could figure out how to do that was with an iterator. It’s still really fast though. So, it parses search results, including map titles and urls straight out of the html string without needing an HTML parser or regex library. Once it was able to load results from the search page, I went to sleep and came back today. Now I had to get it to actually download the ZIP files and preview images, and import them straight into the app. It first has to download/parse the plugin info page since the ZIP url isn’t available in the search results. Then, it requests the ZIP. I had some trouble with this, since I wanted to show a progress bar for the download status. I first tried a function from this gist , but it didn’t work. So, I made my own which used the same chunking strategy as the import status loader. Turns out, ureq blocks requests once they hit 10MB by default, which was probably why the gist version didn’t work. But, mine was faster anyways, so I kept it. It’s even cooler since I made it myself. Then, I wired up a couple more commands to let it import straight from archive bytes instead of from a file path, and it finally loaded! Once that worked, I made it pass along the map title, author, and description as well. Then, I extended it to parse out the thumbnail image url and download that, then pass that along to the importer as well. Anyways, that was super fun. I would add a lot more detail, but Stardance limits devlogs to 4000 characters and I’m approaching scarily close to that. I’m planning on just polishing the downloader interface a bit more, and then I’ll do some bugfixes for the next release. See ya!
I moved the mmr server to alpine linux! Before, it was regular raspberry pi os lite on the Pi. But, it was behaving strangely, randomly rebooting and things, so I decided to try installing Alpine. The lightweight distro has been on my radar for a while now, but this was my first time ever actually trying it. I imaged it normally with the raspberry pi imager, and put it on the pi, did setup-alpine, and all was well. But, I put in the wrong wifi password at first, which broke everything else. I tried changing the wifi config and doing something with wpa_supplicant (thanks google ai overview), but nothing fixed it so I ended up doing a fresh install. This time, I put in the right password and everything went great. I set up ssh, node, pm2, etc. and moved the server files onto the pi through sftp. Then, I got it running over my local network and set up authentication. So, it was time to set up the Cloudflare tunnel again. I followed this neat guide , changing values as needed (for example, my pi is aarch64, but the guide was x64, so I spent a while figuring out why the pi kept giving elf errors). It took a really long time to set up the openrc startup script because 1. cloudflare rotates the setup token relatively frequently and 2. I accidentally put 2 –token arguments. And since I was using vi, I didn’t even notice and kept trying to figure out why cloudflared crashed on startup. But I eventually found out and removed the duplicate and it worked! Then I finished setting up pm2 and put the pi in its home next to the router, and mmr.kmdw.dev is back up exposing your lobby’s skills. See you in the next one! Yes I know part of the token is in the image but it’s used already so it doesn’t matter
rlbuddy has a gamepad overlay now so that you can show off your awesome bindings! Don’t even bother figuring out mine. It’s kinda starting to become hellish to add new widgets/services, but I’m almost done for the next ship so I doubt I’ll refactor just yet [edit: im doing a super refactor now hehe]. I made the overlay with the raw egui::Painter rather than actual controls (since it would be pretty hard to make a controller out of Buttons or something). I also prefer to avoid embedding static assets, otherwise I might have made an actual one in MS Paint or something. I also can’t seem to find a good egui version. I’ve been on 0.34 almost the whole time, which works well but doesn’t support transparency in extra viewports. But, 0.35/0.36 broke external viewports. So, until then, we get an opaque gamepad overlay :( but the main app is still transparent, so it’s not horrible. Rolled an 8 and a 9 on the Stardance rng today! I’m so proud of myself.
I’m MASSIVELY refactoring rlbuddy! This, I think is the second (and hopefully the final) major refactor to the codebase. So, basically the current architecture is split into services and widgets. Each service has an update method, which does its stuff (draining subscribers, processing commands, etc). Since egui is immediate mode, this architecture works unlike callbacks/event-based which I actually tried to implement but couldn’t. Every widget is just implements egui::Widget, that holds some state handles (Rc) and command senders (Sender), usually just one for its respective service. Services are alive for the lifetime of the app, while widgets are the openable panels you see. Widgets display the data from service state, and talk back to it by mutating shared state or sending commands. I think music control has been the best for me to wrap my head around to decide about changes, so I’ll explain it with that. Music control had a controller, a service, and a widget file. The controller was a thread pool manager (if you can call the questionable implementation that) around Windows’ GSMTC API to give a single-thread api for it (since the app is basically single-threaded). Then, the service is always alive, syncing a state struct between the controller and its own state handle. Finally, the widget is optionally there as a panel, with next/previous/pause buttons which send commands and the ui which reads service state to display. It also has a mutable service state reference for settings (the “pause during anthems” button). The god object RlbuddyApp struct stores all of this stuff. So it has a music_control_service, music_control_widget, stats_api_service, all of those fields, which kinda sucked. On top of that, I had to maintain an enum of every panel, which was enumerated for the “open panel” popup and to render each one if it’s open. you might think “hey… isn’t that a self referential struct? how does music_control_widget store a reference to music_control_service?” Well, music_control_widget internally only has fields for the music_control_service’s state handles which are Rc/Arcs. So it only needs a reference to the service for it’s Widget::new function lifetime, all is well. Although it doesn’t look horrible, it was HELL to do anything. For example, refactoring the gilrs service out of hotkey and adding the gamepad overlay probably involved just as much fiddling around with Rcs in RlbuddyApp as adding the actual feature. So, I decided to move to a new architecture: services + features! And, after thinking about it for around 8 hours (i slept), I decided on something a bit different. Services + panels! Yeah, basically the same as services + widgets, but I was gonna implement it GOOD this time, and make design decisions that wouldn’t bite me in the ass later on. I wrote my first traits - Service, which requires update and optionally save , and Panel , which requires name() -> &'static str and ui (same as egui::Widget: :ui). Then, I’d change how components are registered: instead of keeping every service and widget as a field in RlBuddyApp, I’d make a Vec<Box<dyn Service/Panel» for each, and loop through it. I spent about an hour trying to get Panels to automatically implement ui by requiring egui::Widget as a supertrait, which doesn’t work since widgets are stateful (need &self). So, I tried to require &mut Self to implement egui::Widget, but apparently something to do with type erasure doesn’t let that work with dynamic dispatch which was needed for the Vec<Box> thing. I’ve moved a few features to the new architecture, but I’m still in the process of finishing up. Additionally, it has to work side-by-side with existing crappy monster-Panel-enum architecture, which sucks to maintain. Okay, once again, I had to strip down a ton of detail (and my terrible wording but wtv) cause I hit like 5000 characters b4 realizing. See ya! May the Stardance gods increase devlog limits :)
I finished the big refactor! I pushed around 25 commits to GitHub at once. I’m really gonna enjoy adding the next feature, basking in how much easier it is ;) Apparently, I never made a service for session stats, so it currently can’t persist its one setting. Actually, writing this I realized that the setting isn’t actually used, so I can delete it. That’s great. After finally kicking out all the annoying legacy panel code, I remembered that I never re-implemented the positioning or its related persistence code for the new panel system. The persistence system was reworked too, something that I don’t think really got included in the previous devlog. Each service can implement save , and there are generic helper methods in a common module for saving/loading serde structs to a file in the app data directory. The actual app now uses this method as well instead of doing all the pathing logic itself, so the persistence module is pretty small and could honestly be moved into app.rs. For new positioning, I store a list of open panels. Weirdly enough, it’s actually a lot easier than adding a position/is_open field to every AppPanel. So, I run the name through a Hasher to make a u64 which is easier to clone/copy and stuff and made a newtype around a PanelId. That way I could reuse the code from the previous paneling system to swap/manage open PanelIds, then just use find on the AppPanel vec to find the corresponding widget. Also, I never mentioned it but I’ve been trying RustRover for the past few devlogs. It’s a lot more stable than Zed, but I sorta miss its snappiness and minimalism. If I end up finding an annoying bug in RustRover, I’ll probably switch back. However, it’s been quite a few days and I don’t think I’ve found a single one. JetBrains is truly awesome at tooling. See ya next time. Probably will do my next ship soon :)
Had to remove the tracker.gg widget :( unfortunately they don’t allow scraping and what I had wasn’t allowed anyways. Things that used to open the player info widget now just open tracker in a browser.
Time formatting doesn’t suck anymore! I made the implementation way better so I could make it support stuff even past weeks, like months and years. The new implementation added around 60 lines, but it’s for a good cause. The previous implementation used a match statement with duplicated logic that only supported seconds, minutes, and hours, using a pluralize function and inline if-statements everywhere. If it were sent to any rational code-reviewer, they would likely have a heart attack. Now it’s a bit more complex but less complicated. You have TimeUnit s which format the unit themselves and TimePart s which format a value + a unit. Then, just use some math to build a Vec and format it into a string. Boom! Beautiful, well-formed time formatting. To soak in the new beauty, I added days n weeks. I just had to add 14 lines! The previous one would have probably needed a bunch of stupid magic numbers and weird chains everywhere to accomplish the same thing. Okay, I’m done using your time on reading a way-too-long write-up about fixing a crappy implementation that shouldn’t have been there in the first place. I’m gonna ship right after posting this. If you get it, make sure to give it 10 stars in everything 😉. Haha, jk. Well, not really. Cya later.
I’ve mostly been working on smaller features, improvements, and bugfixes. A cool one I did is fixing weird glitchy movement with the gamepad overlay window! Basically, the window needs to persist its position across disabling it/enabling it. And egui is immediate mode. So, every time it rendered the viewport, it would both set and get its position. So, moving it would update the current position, but because of the weird interop between setting the position in a ViewportBuilder and getting it from the viewport info, it would glitch back and forth, especially when my laptop is lagging. I fixed it by only calling the ViewportBuilder ‘s “ with_position ” method when the overlay had just been enabled ( !was_enabled && currently_enabled ). That way, it only sets it once externally, and lets it move freely while it’s open. Then, while it’s moving, it continues to update the saved position. And upon closing and then reopening it, it sets it again (but only once!) Relatively simple fix but it’s kind of funny. I mainly noticed it when I added a feature that would auto-unmaximize the overlay when the user maximizes it, and it would go crazy and fly around the screen. Very fun! I also fixed a pretty old bug where it would incorrectly detect the local player. Basically, the stats api doesn’t actually tell you who the local player is. So, we have to guess based on who the camera is targeting right now. Usually, it’s on the local player, but during goal replays or spectating a bot when joining a casual game, it would be improperly set at the start and then stay like that. So, I made sure that it always updated as long as the match is 1. in progress 2. not in a replay. It also fixes a thing with inconsistent match toasts, since the toasts only fire if the scoring player is the local player (and if it thinks the wrong player is the local player, everything’s messed up). I’m planning on revamping hotkeys next, to allow you to bind to any controller button and even do custom quickchats in-game. Later!
More gamepad overlay buttons!!! Yay!!! In not-so-awesomely-exciting news, I also added a table of contents to the readme (as well as a generator for it). The script’s in Python (I’m sorry for not using Rust) meaning the repository is now 0.5% Python. Takeover incoming? I overcomplicated the script a lot, but it’s really easy to read. There are three whole comments, aka 6% of lines in the whole file! It’s not technically interesting in the slightest. I was thinking of building a tree-like structure before outputting the string, but realized I can just use the header level (h1 vs h2 vs h3 etc) as the amount of spaces / 2. I also refactored it not to use magic PanelId s for the default panel list. I kinda rushed that part when I made it, I’ll be honest. But now each Panel can implement fn open_by_default(&self) -> bool (returns false by default) and if it does it keeps it open when savedata doesn’t exist yet. I don’t get how an entire hour n 27 minutes was spent on like 7 not-even-that-big commits. At least it was a good use of my math class. We reviewed limits for some reason (which everyone should already know for one because they took the prereqs?), and the teacher managed to extend her lecture for the ENTIRE class time. rlbuddy development saving the day, I guess (just like it will in your rocket league games btw, so you should download it)
I’ve been debugging high memory for the past month or so. It was egui_system_fonts. Why would fonts take 170mb of ram????????????????????????????????? help!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I hate external dependencies!!!!!!!!!!!!!!!!!!!!11 I owe my life to DHAT now. go star https://github.com/nnethercote/dhat-rs
I did lots of performance improvements and also IT WORKS ON LINUX NOW!!! Let’s talk about performance first. Anyways, it has been using around 4% and 220MB of ram, which isn’t really what you’d expect from an overlay! So, I used things like DHAT to profile the memory, and noticed that fonts were doing some shenanigans. So I removed egui_system_fonts and loaded directly from C:\Windows\Fonts\segoeui.ttf and RAM usage dropped to 30mb. That was what the previous devlog was about. I then changed the default logic update rate from 10ms (100/s) to 65ms (15/s approx). This reduced idle cpu usage to under 0.2%. But, doing anything with the UI would spike it to 4%, which is still pretty bad. So, I used a method I found in an egui issue thread where I’d count the frametime since the last render, then sleep until the target frametime was finished. For example, if the frame rendered in 2ms but I want 16ms frametime, it would sleep for 14ms. That way, I could limit how often the UI rendered! This made it stay under around 1% CPU forever! Okay, Linux time! Rust is mostly cross-platform, so support was mostly dealing with dumbass design decisions. Since Music relies on GSMTC, I had to feature-gate the entire thing (as well as the windows/windows-future crates) behind cfg(windows) :( I also had to fix Linux font loading (since like I said earlier, it’s hardcoded to segoe ui). So I install fontdb on Linux and search for some popular fonts from there to load instead. Finally, I fixed up the storage paths since it could only load from AppData. I also made it use AppData\Local vs. AppData\Roaming instead of putting everything in Roaming. I first got it working through WSL! ! It took some messing with my GPU drivers but I got it to render. Now was the real challenge: getting it to build on an ACTUAL Linux machine. I had an old, basically broken Surface Pro 3 that I had put Debian+GNOME on for shits and giggles a few months ago. The perfect target! The main problem was getting Rocket League to even launch. I set up Legendary (goated launcher btw, check it out ) and tried to run it. I installed Wine, got Wine Mono, and it failed with a weird cryptic error about the CreateWindow function. The obvious solution to a graphical error: disable EAC. Yay, it launched! Then to get it to build. First I had to fix some filepaths since Linux is case-sensitive (nerds) while I don’t care about case on Windows. Then, rust-lld gave some weird error about simd or something which I didn’t care about. I just ran cargo clean and rebuilt it and it worked fine. Then to run, and it actually worked first try! It’s cool because I went into it expecting to debug a million socket errors, but it actuallly connected and ran. Awesome sauce! Now Linux users can use rlbuddy. More minions to contr- I mean cool users! Cya in the next one! ;) If you check out the rl perf overlay in the screenshot, you’ll be able to guess why this is the laptop I decided to put Linux on.
I’ve been putting this off for a while, but I’ve finally decided I’m going to add asset swapping. There’re a few existing implementations, so I’m reading those as well as some pdfs about the upk format. So basically credit to this document and this implementation . All it can do for now is parse the file summary. The implementation wasn’t too bad since I had Google as well as the C# implementation I just talked about. I basically have trait Deserializable : Sized { fn deserialize ( reader : & mut impl Read ) -> AnyResult < Self > ; } Then implement that for the various parts (eg. FGuid , a generic TArray ). Then, I use byteorder to read out numbers into each struct. For example, #[derive(Debug)] struct FCompressedChunkInfo { uncompressed_offset : i64 , uncompressed_size : i32 , compressed_offset : i64 , compressed_size : i32 , } impl Deserializable for FCompressedChunkInfo { fn deserialize ( reader : & mut impl Read ) -> AnyResult < Self > { Ok ( Self { uncompressed_offset : reader .read_i64 :: < LittleEndian > () ? , uncompressed_size : reader .read_i32 :: < LittleEndian > () ? , compressed_offset : reader .read_i64 :: < LittleEndian > () ? , compressed_size : reader .read_i32 :: < LittleEndian > () ? , }) } } I originally prototyped it in Python and then moved to Rust once I got tired of python’s byte shenanigans.
I JUST DESERIALIZED AND RESERIALIZED A UPK. OMAIGOD IM SO HAPPY. my brain is so tired. Alright so the payload still doesn’t get transferred but that’s pretty simple, it’s just Vec::extend. What a challenge! Deserialization actually ended up being the easy part, which is opposite of what I expected from starting the project. It went (relatively) fast since there are a few existing implementations which I could kinda just “borrow” structure parsing from. But, mine is unique in that it almost completely reserializes the package itself. I might’ve been able to “borrow” reserialization, but the impl I’ve been looking at is STRAIGHT ai slop and it’s more annoying to read that than to just do it myself. It was useful though, so I have to respect it. The first problem: basically, the first byte of an FString determines how many parts it has, NOT how many bytes it has. Which wasn’t a problem for parsing, since I had some word-based helpers which worked so I didn’t think much about it. But, when reserializing, I made two mistakes: 1. forgot to add the null terminator (which shouldn’t even be necessary) and 2. I accidentally put the wrong offset. I have no clue why there’s a null terminator for FStrings. The format is [n chars][the char bytes], meaning it should already be known how long the string is. Pretty stupid, but whatever. Anyways, when reserializing you’re supposed to include the null terminator in the string length marker. So, my logic was that I should offset it by two since unicode characters are two bytes. Bleh! I should’ve only incremented by one, since it’s in terms of utf16 chars rather than bytes. Yay, that worked! I don’t know how to summarize the next problem, so I’ll explain the reasoning. The package header is file summary + tables + something else (we’ll get to that later). Anyways, there’s some mysterious padding in between the summary and tables. Parsing, it’s easy to skip over because the summary includes the tables start offset ( name_offset , the name table is the first one). But when reserializing, you gotta keep those offsets intact. Well, I’m not totally sure if you actually have to keep them, but just for the sake of simplicity I tried to (which ended up adding more complexity, which I’ll see if I can remove now). So, I serialize/push the summary to the big Vec. Then, I make a new Vec and serialize the name table at (name_offset - summary_size), since the new Vec has to be encrypted and then appended to the big Vec. I do the same thing for imports/exports (placing the table at import/export _table_offset - summary_size ). Oh no! Since name_table_offset isn’t equal to summary_size, there’s some padding in between, which is expected. HOWEVER! The previous logic would skip over it in the table Vec creation, meaning the table Vec would have some 0-padding at the start. This padding needs to be in the SUMMARY part instead, and the name_offset should basically be the ZERO of the tables Vec! I doubt I would’ve been able to solve this part without the beautiful tool HxD . It’s really easy to use and is always helpful when I’m figgling around with binary. So, it does some more math, calculates the spacing, adds it to the big vec, and removes it from the tables Vec. Then, it re-encrypts the tables Vec and pushes it onto the big Vec! Okay, now that’s done. NOPE! There’s a mysterious structure for some reason at the end of the real table part? Yep, it’s that something else I said we’ll get to. I actually still have no idea what it is. From some research, I gathered it must be the dependencies table, but it’s really poorly documented. So, I ended up just cutting the bytes out from after the export table to the end of the tables part, and “pasting” it back before re-encryption. I do hope this devlog was readable. Now I’ll get to including the actual package payload and hopefully simplifying reserialization offsets. See you soon!
I figured out what comes after export tables! And it took way too long, since I DISCOVERED IT MYSELF! At least, as far as I know. I couldn’t find any information online about this portion of the header, so it was basically luck that I noticed a pattern. Before, I was just copying everything after the export table and pasting them back in afterwards, but as you can guess, that stopped working if I adjusted anything within the encrypted region. Compressed chunk info is a known part, and I figured out the AES padding pretty easily, so most of the time was spent trying to figure out what in the world those 24 bytes were. The first four bytes in the compressed chunk info are how many chunks they are. Here, in the Bubbles boost package, there are two (little endian), with 24 bytes of ???. And in Flamethrower, there are three, with 36 bytes of ???. I noticed that the ??? was always n chunks * 12 bytes (actually, it’s lucky that I didn’t test any which ended up having 0, otherwise I probably wouldn’t have figured it out). Since this probably had something to do with chunks, I made a guess that each chunk had some extra data stored in this array, 12 bytes of info per chunk. Using HxD’s highlight-bytes-and-get-the-decimal-value feature, I noticed a pattern where the first 8 bytes looked like an i64 offset and the last 4 looked like an i32 size, which the compressed chunk infos were also like for their matching counterparts. So, I deserialized it as [i64; i32] * n chunks and was able to read it better. These additional chunk infos seem to kinda sorta match up to uncompressed header offsets, but I don’t really understand what they are (and they’re marked as such in the code, lol). So, with that working (and some fiddling with broken serialization of TArrays which I’m surprised I didn’t catch earlier), I now understood the ENTIRE package header! Hooray! Let’s look at another example. body_grain_SF, the Fennec, has 4 chunks. Guess how many bytes of ??? it has. That’s right, zero! For some reason, a few packages just don’t have those things. After going through a bunch of them, I found that if licensee version was 32, there was no ???. But if it was 33, there WAS ???. I basically just added an if statement and it was fixed. I’m going to try to work on figuring out the padding in between the package summary and the start of the name table, but if I can’t, I suppose I’ll finally get to actually doing package swapping. Later!
I got a name swap! It doesn’t work properly, but I’m glad the game didn’t crash. These hours have been by far the most frustrating because the only way to test is against the real game since it’s really picky, but the game takes like 30 seconds to start, and if it crashes, it gives a cryptic error log, and if it freezes, it doesn’t give any log at all. I spent most of the time messing with moving different offset values forward and backwards, and ended up reverting to a simpler version with no overwriting when the header size changes just to test things. So far, I’ve mostly gleaned that name renaming is possible, but only up to a point. If the name grows too much, the game crashes, and if the name shrinks too much, the game freezes. Additionally, for some reason, total_header_size changes by the padded header size instead of the encrypted header size, which I still don’t understand. It’s seriously weird. I serialize each name properly, and yet the game reads it wrong. This game really does need a new codebase. When UE6 comes out, either the game’s gonna be so good it doesn’t need mods, or it’ll be relatively easily moddable. Or neither, which is the most probable based on Epic Games’ track record. Anyways, enjoy the beautiful screenshot.
IT SWAPPED IT SWAPPED IT SWAPPED AHAHAHHAHAHAHHAHAHAHAHHA FINALLY Okay now I gotta make it work for other pairs of boosts. If WHEN that works, I’ll actually put it in rlbuddy. I removed all the code relating to changing offsets to try to give myself a minimal workspace to tinker in, with as little side effects as possible. So, all the current code does is 1. open them 2. replace the name table entries and package guid. Surprisingly simple. Once I make it a bit more generic, I can extend it to support more swaps. If I’m really unable to get it to work for more combinations, I’ll probably end up just publishing the poc repo and not adding swapping to rlbuddy at all. This is a great motivation boost, though. I was honestly dreading coming home to work on it today because I was done with failing over and over, and considering giving up.
IT WORKS WHEN THE HEADER EXPANDS NOW YAYAYYAYAYAYYAYAYYAYAYAY I’m gonna be honest, the problem might just have been that my testing package was corrupted. I was debugging my deserialization logic, which I thought might have some parsing issue near the header extraction, and noticed that once the encrypted region deserializer’s Cursor reached the end of the region, it was actually FARTHER than the package summary’s total_header_size - by 6 bytes! That’s pretty bad, and I don’t know how something like that even happened. Anyways, I repaired the game and brought over the shiny new upk and… it worked. I’m pretty sure that I only accidentally did this while tidying up my workspace a few hours ago, but if this has genuinely been the thing holding me back for the past few days - I also finally made the poc code public, at https://github.com/kalilamodow/rl-upk-testing/
Apparently there are a bunch of different AES keys rocket league uses, not just one. You can get a list of them from the psynet config url, and then do some weird crc stuff to change them from “content keys” to aes keys. I discovered the rocket league mapmaking discord today and I’m blown away by the amount of information on there, and also apparently my whole thing about the unknown bytes when licensee version > 32 was straight up wrong, which is funny. Anyways it works for all items now, which is great. I’m gonna work on actually putting it in rlbuddy now, hopefully that goes well
rlbuddy now has item swapping! Basically, making one item appear like another to use items you don’t actually own. These hours were spent on a few different things. Firstly, I optimized the thing a bunch! There were a few places that were pretty slow since the original repo was mainly for testing. For example instead of decrypting the entire header and rechecking it to find the right key, it only loads the first 4 blocks and attempts to decrypt the first FString. If it fails, that means the AES key isn’t valid. Also, I improved the error handling with anyhow. It actually makes it so much easier to deal with things and was pretty useful when debugging the move over to the actual app. Now I’m just going to work on polishing the panel UI a bit more, since it’s still kind of ugly.
I made a ton of improvements to the asset swapper! And fixed a bug with the music player which is cool technically, so I’ll start with that. The player uses the GSMTC api, which is async, but egui doesn’t really like async. So, I made it so that every time you wanted to run some command on the current session, it would start up a new thread. This was less than ideal for a few reasons: terrible performance race conditions could happen just… in Windows itself The main problem was 2: for example, if you skipped a replay too fast, the Play command from the end of the replay might actually reach Windows before the Pause command from the replay start, leaving your music paused. So instead, it starts one dedicated worker thread which has a channel which receives a Box<dyn FnOnce(Session)> , and executes at most one command every 50ms (only one command per loop, fixed loop time of 50ms). It’s really interesting because you actually end up sending a closure through a channel, which feels funny but when you really think about it it’s just ownership semantics. But, that’s working great now! On to swapper improvements! First, I moved most of the swapper module to anyhow handling (it’s heaven!), and I also modernized the upk api a bit since it was basically dragged directly from the proof-of-concept repo, meaning it was not really application-ready. Also, it previously looked at the game’s webcache to decode the AES keys for header decryption, but now it uses the wonderful Toga-Files repository along with a really nice caching layer for it to load items and their associated API keys. Having access to the actual item data is also way better since you don’t have to manually type in a package name which is kinda weird for any normal person. Now, you can select it from a dropdown instead! I love UX.
rlbuddy now loads additional playlists straight from the game’s cached webconfig, instead of hardcoding them all! This means that the list of playlists will basically never go out of date. There are actually quite a few services which rely on game files (eg. auto stats api setup, custom maps, asset swapper). So, the first thing I did was to refactor it so make all of these load from the same global value. Then, for playlists, I made it read from a specific file in the game’s http cache directory which contains a bunch of configuration. Then, it parses it into a JSON object, grabs all the values with Class PlaylistSettings_TA, and then extracts the title and playlist id! There are still a bunch of built-in Playlists, since those have internal things like going from a casual playlist type to its respective competitive one or having the hard-coded list of singleplayer playlists. But, all the other ones, like ltms are dynamically loaded. Yay!
I got licensee version 34 (encrypted payloads too) to swap finally! Okay, so this was awesome. Rocket League’s been having a bunch of updates lately, which breaks the packages of people trying to get free stuff. So, in a Reddit thread, I ended up dishing out a bunch of swapped asset files for people in this situation. There’s a new boost which everybody wanted really bad since it was really rare (but they decided to make it unlockable at rocket pass lv99 so it doesn’t even matter anymore), and it was UNSWAPPABLE for three reasons: it was encrypted specially i hadnt encountered specially encrypted packages meaning their handling was wrong aes keys werent out for it yet (or so I thought) I’ll start with 3. I had written a tool which looks in the games cache for AES keys, and dumped them, and it worked great. What I didn’t expect is the filename to change between versions. So, I was super confused since yesterday since the AES key for the boost was just… missing. Thankfully, the geniuses at the RLMM discord got it and helped me figure out that the file I was reading from was just outdated. Great! Anyways, not too big of a deal, just a big delay. Now it’s time for the real challenge: figuring out how the hell to handle this type of package. First, I did some research. The twelve bytes of padding in files with licensee version >=33 before the summary are actually a nonce/aes iv, not just padding. Then, the header is encrypted with AES-CTR with the twelve first bytes of the iv just being the nonce. And the compressed chunks are encrypted too here: each one is also AES-CTRed with their own nonces in FCompressedChunkInfo. Thing is, I don’t have an implementation to really go off anymore, meaning there’s a lot more trial and error. For the original implementation, there were one or two existing asset swappers (though they were vibecoded meaning more of a puzzle to figure out what they’re even doing), but this time I was mostly relying on emii’s fork of UEViewer. Anyways, after spending a while figuring out what exactly I had to masquerade (payload, key, swap nonces) I finally got it to work!
Not much in terms of super-cool stuff this time. Highlights are: make sure dynamic playlist loading uses the latest cache file (and also fix its loading on normal people’s rocket league installs) loading the cache file on another thread so it doesnt freeze the whole app for a second on the first lazy lock access searching for items in the item swapper moved the error handling of the map loader to anyhow So no ultra-exciting things to talk about. anyhow is really cool though, it really simplifies error handling everywhere in the app, and I’m a big fan of its bail! macro. I’m also using Cow a lot more. Moo!
I made a standalone web-based swapper for the people who don’t want to download an entire app. A lot of people had broken packages after the last update but didn’t want to install a dedicated program just for a few swaps. So, I used the asset swapper backend of rlbuddy to make this thingamabob which runs entirely in the browser! First, I had to find out how to actually share rlbuddy’s asset swapper with other projects. Turns out Cargo has a cool thing called workspaces where you can have multiple crates in the same repo! So I moved the dedicated UPK/AES etc. stuff into a new crate and added it as a dependency in regular rlbuddy. Then, I whipped up a small wasm-compatible eframe app with the template, and included the new crate as a dependency. I made a big state machine of the steps meaning it’s impossible to have an invalid state, which is really nice. The only problem was that Rust’s ownership system isn’t smart enough to deal with it, so the code is a bit repetitive in places but it’s definitely worth it. The WASM restrictions were super annoying, mainly do to with filesystem access and requiring async. I ended up using the egui-async crate and spilling Binds all over the place within the state machine. I couldn’t even figure out how to get the actual swap procedure to run in a different thread. I also spent like 30 minutes debugging why in the world asset swapping was just broken. Even when I verified the same binary data were going in to the Upk object in the webapp and rlbuddy, for some reason the output upk was just different. Turns out I used chosen_replacement.name instead of chosen_replacement.package.name() . Isn’t that great? Anyways, it works fine now and I’m planning on posting it on r/RocketLeagueMods and possible r/RocketLeague.
A few fixes here and there. Some refactors, caching externally loaded playlists in savedata, and fixing a deadlock when clearing the items cache. And for some reason the decal option was missing from the items list picker.
more small improvements. i gave the session stats widget an actual service as well which speeds things up a lot since its not recalculating statistics every single frame. the swapper also uses the backup file if one is available and it no longer accepts duplicate custom maps
Ships:
rlbuddy is a feature-filled companion for Rocket League! It shows the skill of everyone in your lobby and has tons of toggleable widgets and features to make your life a lot easier, from Discord integration to music control. This is my first non-tiny Rust project, and I think it was really great! I’ve learned a lot such as proper state management and the ins and outs of Rust’s syntax. You can give it a try by heading to the Github releases section. If you play Rocket League, I hope you use it!
rlbutddy is a feature-rich companion for Rocket League, and v1.2 is out. There’s been some big architectural changes meaning it’s faster and bug-free-er, as well as big new features! New!!! Avatars! Now you can see people’s profile pictures even when you’re not on their platform. Custom map loader! You can import maps from a ZIP or download them straight from Bakkesplugins! Gamepad overlay! Show your controls while playing, to show off your bindings or get some help with your speedflips. I think I’ve definitely improved at Rust since the last release. Just in terms of the amount of mistakes I make, I feel like it’s way more smooth sailing than before. For example, I was able to (mostly) write not-so-buggy code and “run the borrow checker in my head” without needing to cargo check a million times, and clippy tends to have a lot less suggestions for me. Pretty great!
I made rlbuddy, a rocket league companion app! This is the third ship so far. The big features this time are the asset swapper and Linux support, but I think that the feature I’m most proud of this time is the asset swapper! It inserts the appearance of one item into the file of another, meaning by swapping out assets for others you can make your car look however you like! (Client-side only, of course). I learned a lot about byte-level manipulation and working with raw data streams and encryption/decryption in Rust, and I can read hex (relatively) well now! It’s also great because I think this combined with the doorstop experiment from a while ago gives me a nice base to try some reverse-engineering challenges in the future. I also worked a lot on performance this time, such as tuning loop times/ui fps caps and minimizing ram usage (I achieved around an 80% reduction here!) There are a crap ton more features added than that (totaling almost 100 commits), but I’m pretty sure you’re not supposed to have massive feature-dumps on the ship text. So the full list is on the latest github release! In the image, you can see I have a white fennec. In reality, I don’t actually have a tw trim, and the equipped decal isn’t compatible with the fennec either. But, using the power of asset swapping, I can get a beautiful all-white car. Neat!...
|
1792824716.4688025
|
1792911116.4688025
|