|
9623
|
Doombot - Slack by @Imtiaz | Stardance
|
Imtiaz
|
2
|
4.0
|
8
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T06:07:48Z", "hours": 3.0, "multiplier": 2.84, "payout": 8, "blessing": "neutral", "text": "Doombot, Full Project, running on nest, working.", "repo": "https://github.com/imtua/doombot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}, {"ship_num": 2, "ts": "2026-08-01T01:48:00Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Done as it said, nest doing its work and mridu slack bot replying!", "repo": "https://github.com/imtua/doombot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 54208, "ts": "202 [{"post_id": 54208, "ts": "2026-08-25T02:59:15Z", "hours": 0.26, "text": "worked on the repo and readme file"}, {"post_id": 53784, "ts": "2026-08-24T14:12:22Z", "hours": 2.0833, "text": "Guess it works."}, {"post_id": 39231, "ts": "2026-08-02T02:00:29Z", "hours": 0.5914, "text": "Fixed everything it needed to be fixed. Now it’s working! Go to hack club workspace, head to #bot-spam and try /mridu-help."}, {"post_id": 9262, "ts": "2026-06-15T15:34:19Z", "hours": 0.2911, "text": "Added features!"}, {"post_id": 9199, "ts": "2026-06-15T13:18:00Z", "hours": 0.4108, "text": "Just completed the guide as the stardance guide says, ill take it now and start doing afterwards."}]...
|
Title: Doombot - Slack by @Imtiaz | Stardance
Dev Title: Doombot - Slack by @Imtiaz | Stardance
Devlogs:
Just completed the guide as the stardance guide says, ill take it now and start doing afterwards.
Added features!
Fixed everything it needed to be fixed. Now it’s working! Go to hack club workspace, head to #bot-spam and try /mridu-help.
Guess it works.
worked on the repo and readme file
Ships:
Done as it said, nest doing its work and mridu slack bot replying!
Doombot, Full Project, running on nest, working....
|
1792846222.7709734
|
1792932622.7709734
|
|
9935
|
FIFA 26 by @atharva02 | Stardance
|
atharva02
|
2
|
8.0
|
132
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T19:45:57Z", "hours": 4.0, "multiplier": 14.8, "payout": 65, "blessing": "neutral", "text": "This is the second ship on my project, if you didn’t review the first one, it’s a world cup simulator made using a Random Forest model and Poisson distribution model to generate scores. All matches were simulated locally to generate a consensus result base viewable across the site. The new feature, reason for reship, was the knockout matchups starting and now there is an interactive bracket so you can simulate your own games but also keep real results once they occur. The site is updated daily, either at the end of the day when matches are complete, or the next morning so expect changes depending on when you view the site. A challenging aspect this time around was organizing the bracket structure such that the teams flow downward when they win. Two things to note, the site does take a while to load the first time as it needs to gather all the data and simulation function, but there should be no other lag or problems once active. Lastly, though the third place matchup doesn’t show up at first, it appears after both semifinal matchups are simulated. Enjoy!", "repo": "https://github.com/atharva-277/FIFA-26", "demo": "https://fifa26.atharva02.hackclub.app/"}, {"ship_num": 2, "ts": "2026-06-15T18:56:57Z", "hours": 4.0, "multiplier": 15.16, "payout": 67, "blessing": "neutral", "text": "I made a project in honor of the FIFA 2026 World Cup. It simulates all 72 group stage matches, consolidates them into easy to read data, viewable on the website link, and allows you to simulate your own matchups as well. The link is live at: https://fifa-26.streamlit.app/ . Challenges occurred in this project in how the model was trained to simulate games with accuracy, converting the python script into a viewable website, and ensuring results were realistic and presentable. I am most proud of how users are able to make their own simulations within the website, but also be able to view a general view of data that was done through numerous simulations. For example, advancement probabilities for each team at each position in their group. Note, when opening the link for the first time, it may take a while to load as it needs to grab the data through the GitHub repo, but after loading, it shouldn’t have many delays.", "repo": "https://github.com/atharva-277/FIFA-26", "demo": "https://fifa26.atharva02.hackclub.app/"}]...
|
[{"post_id": 19454, "ts": "202 [{"post_id": 19454, "ts": "2026-06-30T19:37:29Z", "hours": 0.6628, "text": "First: Thank you everyone for their reviews on my first ship, this will likely be the last devlog for this project as it is a time-based project(can’t really update after the world cup ends) but I appreciate all the feedback. As for this current devlog, there was a small fix which needed to be done, I originally said on my last post that after a matchup occurs in real-time, it is locked and can’t be simulated anymore. This is not the case anymore and you have the option of locking/unlocking games that have occurred in real time already."}, {"post_id": 17376, "ts": "2026-06-28T04:24:43Z", "hours": 3.7322, "text": "The group stage just completed today, but luckily the knockout functionality was essentially all set to go. After inputting the matchups, the site now has new knockout features equipped. There is an interactive bracket, to simulate your own matchups that includes penalty shootouts, along with a simple page to display advancement probabilities to each round. Another ship should be out shortly to reflect these new changes."}, {"post_id": 8833, "ts": "2026-06-14T18:10:43Z", "hours": 1.7358, "text": "This might be the last devlog for a bit, but the project is officially live with the help of streamlit as this is a python project. The link is already live, so you can simulate your own matches and see what the consensus result was through multiple simulations. This project will be shipped soon but updated again for when the knockout stage matchups are set in stone. Attached is how it looks on the main page."}, {"post_id": 6564, "ts": "2026-06-11T00:53:35Z", "hours": 1.5986, "text": "Update: I added the FIFA rankings as another metric to simulate the games. I also strayed away from using the poisson model to predict outcome and now only use it for scoring purposes as the random forest model is much more accurate. Attached are the updated probabilities."}, {"post_id": 5767, "ts": "2026-06-09T17:51:15Z", "hours": 1.1308, "text": "So I recently decided to train a model to help predict the group stage matches for the FIFA world cup. It’s a combination of a Random Forest Model and Poisson Distribution to help predict the games. Currently I’m only training the model based off of a teams ELO and recent form(performance in past 5 games), but plan on adding FIFA’s point system as another metric. I attached the most common match result of each game after running the simulation 1000 times and the probability of where each team finishes this year(first, second, third qual., third elim., and fourth)"}]...
|
Title: FIFA 26 by @atharva02 | Stardance
Devlogs: Title: FIFA 26 by @atharva02 | Stardance
Devlogs:
So I recently decided to train a model to help predict the group stage matches for the FIFA world cup. It’s a combination of a Random Forest Model and Poisson Distribution to help predict the games. Currently I’m only training the model based off of a teams ELO and recent form(performance in past 5 games), but plan on adding FIFA’s point system as another metric. I attached the most common match result of each game after running the simulation 1000 times and the probability of where each team finishes this year(first, second, third qual., third elim., and fourth)
Update: I added the FIFA rankings as another metric to simulate the games. I also strayed away from using the poisson model to predict outcome and now only use it for scoring purposes as the random forest model is much more accurate. Attached are the updated probabilities.
This might be the last devlog for a bit, but the project is officially live with the help of streamlit as this is a python project. The link is already live, so you can simulate your own matches and see what the consensus result was through multiple simulations. This project will be shipped soon but updated again for when the knockout stage matchups are set in stone. Attached is how it looks on the main page.
The group stage just completed today, but luckily the knockout functionality was essentially all set to go. After inputting the matchups, the site now has new knockout features equipped. There is an interactive bracket, to simulate your own matchups that includes penalty shootouts, along with a simple page to display advancement probabilities to each round. Another ship should be out shortly to reflect these new changes.
First: Thank you everyone for their reviews on my first ship, this will likely be the last devlog for this project as it is a time-based project(can’t really update after the world cup ends) but I appreciate all the feedback. As for this current devlog, there was a small fix which needed to be done, I originally said on my last post that after a matchup occurs in real-time, it is locked and can’t be simulated anymore. This is not the case anymore and you have the option of locking/unlocking games that have occurred in real time already.
Ships:
I made a project in honor of the FIFA 2026 World Cup. It simulates all 72 group stage matches, consolidates them into easy to read data, viewable on the website link, and allows you to simulate your own matchups as well. The link is live at: https://fifa-26.streamlit.app/ . Challenges occurred in this project in how the model was trained to simulate games with accuracy, converting the python script into a viewable website, and ensuring results were realistic and presentable. I am most proud of how users are able to make their own simulations within the website, but also be able to view a general view of data that was done through numerous simulations. For example, advancement probabilities for each team at each position in their group. Note, when opening the link for the first time, it may take a while to load as it needs to grab the data through the GitHub repo, but after loading, it shouldn’t have many delays.
This is the second ship on my project, if you didn’t review the first one, it’s a world cup simulator made using a Random Forest model and Poisson distribution model to generate scores. All matches were simulated locally to generate a consensus result base viewable across the site. The new feature, reason for reship, was the knockout matchups starting and now there is an interactive bracket so you can simulate your own games but also keep real results once they occur. The site is updated daily, either at the end of the day when matches are complete, or the next morning so expect changes depending on when you view the site. A challenging aspect this time around was organizing the bracket structure such that the teams flow downward when they win. Two things to note, the site does take a while to load the first time as it needs to gather all the data and simulation function, but there should be no other lag or problems once active. Lastly, though the third place matchup doesn’t show up at first, it appears after both semifinal matchups are simulated. Enjoy!...
|
1792878726.7026663
|
1793742726.7026663
|
|
9936
|
Relay by @InvalidJoker | Stardance
|
InvalidJoker
|
2
|
27.0
|
411
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T21:09:50Z", "hours": 9.0, "multiplier": 17.24, "payout": 161, "blessing": "neutral", "text": "Relay v2? (if we can call it like that) Now that the base was solid and we had most of the features I focused on refining everything so I did exactly that: New UI Mutli Regional Relays Auto Updater QoL changes in general Have fun and try it out now: https://github.com/InvalidJoker/relay/tree/main#installation", "repo": "https://github.com/InvalidJoker/relay", "demo": "https://relay.koder.wtf"}, {"ship_num": 2, "ts": "2026-06-20T09:23:45Z", "hours": 18.0, "multiplier": 14.37, "payout": 250, "blessing": "neutral", "text": "Relay’s first ship I think Relay is finally ready for its first-ever ship! You can find instructions on how to use it at https://relay.koder.wtf For a long time, I’ve been looking for a nice solution to tunnel my local Minecraft servers and websites so I could share them with friends, and Relay is exactly that. Obviously, Relay isn’t even close to being finished yet and will continue to receive updates over time. :D So yeah, go ahead and give it a try! :p", "repo": "https://github.com/InvalidJoker/relay", "demo": "https://relay.koder.wtf"}]...
|
[{"post_id": 78872, "ts": "202 [{"post_id": 78872, "ts": "2026-10-11T20:45:08Z", "hours": 4.1264, "text": "Scaling Relay improve http performance add region based relay deployments some ui improvements add auto updater support Relay now supports choosing the best relay between multiple relays per “host”. Obv. we give you the freedom to say that you just want to have relay x and every feature we previously had will works as usual. I obv. did some more small changes as you can see above"}, {"post_id": 78115, "ts": "2026-10-09T16:31:40Z", "hours": 5.1892, "text": "Relay Rebranding I’ve completely rewritten the Relay website in Nuxt, fixing many bugs along the way and giving it a more polished, modern design that better fits the project. Check it out now at: https://relay.koder.wtf/"}, {"post_id": 12429, "ts": "2026-06-20T08:59:53Z", "hours": 2.8692, "text": "Relay is now public I think Relay has reached a point where I’m comfortable letting other people try it out. It’s now available at https://relay.koder.wtf/dashboard . The CLI supports Windows, macOS, and Linux, and can be installed with a simple script ( https://relay.koder.wtf/#how-it-works ). Currently, each user gets 2 reserved ports, 3 subdomains, and 1 completely custom domain. There’s still plenty of work ahead. Over the coming weeks, I’ll continue improving Relay and completely rework the dashboard, as it doesn’t look quite as polished as I’d like yet. I also plan to add a way for users to request additional subdomains directly through the platform. For now, I’d love for people to try it out and share their feedback."}, {"post_id": 11257, "ts": "2026-06-18T12:37:43Z", "hours": 6.2831, "text": "First Working Version I’ve got a first real version of Relay up and running :D The dashboard works, and both the HTTP and TCP proxy are stable. Next up is mostly cleanup: polishing the frontend, improving the CLI tools, and finally implementing run configurations so you can have a relay.toml file in your project and don’t have to type the entire command every time. After that, I’ll put together a demo deployment so people can actually try it out and break it a bit."}, {"post_id": 7483, "ts": "2026-06-12T14:20:09Z", "hours": 4.9442, "text": "I’ve started working on the frontend for Relay and made some structural changes. One major change is the removal of the dedicated Rust backend. All functionality is now handled directly within the Svelte application, simplifying development and deployment complexity. For the UI, I chose a minimal design built with shadcn-svelte. This gives Relay a clean, modern look. Upcoming Features: The dashboard will soon allow you to: Create and manage custom domains and subdomains Reserve specific ports for your projects, so you don’t have to send new ports to your friends everytime More updates soon :D"}, {"post_id": 4414, "ts": "2026-06-07T18:51:59Z", "hours": 2.6497, "text": "I wanted the CLI to be as intuitive as possible, so I came up with the following design. I’ve also made progress on building the Relay server itself. It now includes a communication layer for interacting with the CLI and supports client authentication."}, {"post_id": 4094, "ts": "2026-06-07T09:08:17Z", "hours": 0.7886, "text": "What is Relay? Relay is a TCP tunneling service. Unlike many other services on the market, it will be open-source and free to use (with some limitations, of course). We also plan to offer unique features, such as persistent domains, so your friends won’t have to update the URL every time they want to visit your site. Relay is currently a work in progress, so don’t expect anything too crazy just yet. I’ll keep you updated :)"}]...
|
Title: Relay by @InvalidJoker | Stardance
Devlogs Title: Relay by @InvalidJoker | Stardance
Devlogs:
What is Relay? Relay is a TCP tunneling service. Unlike many other services on the market, it will be open-source and free to use (with some limitations, of course). We also plan to offer unique features, such as persistent domains, so your friends won’t have to update the URL every time they want to visit your site. Relay is currently a work in progress, so don’t expect anything too crazy just yet. I’ll keep you updated :)
I wanted the CLI to be as intuitive as possible, so I came up with the following design. I’ve also made progress on building the Relay server itself. It now includes a communication layer for interacting with the CLI and supports client authentication.
I’ve started working on the frontend for Relay and made some structural changes. One major change is the removal of the dedicated Rust backend. All functionality is now handled directly within the Svelte application, simplifying development and deployment complexity. For the UI, I chose a minimal design built with shadcn-svelte. This gives Relay a clean, modern look. Upcoming Features: The dashboard will soon allow you to: Create and manage custom domains and subdomains Reserve specific ports for your projects, so you don’t have to send new ports to your friends everytime More updates soon :D
First Working Version I’ve got a first real version of Relay up and running :D The dashboard works, and both the HTTP and TCP proxy are stable. Next up is mostly cleanup: polishing the frontend, improving the CLI tools, and finally implementing run configurations so you can have a relay.toml file in your project and don’t have to type the entire command every time. After that, I’ll put together a demo deployment so people can actually try it out and break it a bit.
Relay is now public I think Relay has reached a point where I’m comfortable letting other people try it out. It’s now available at https://relay.koder.wtf/dashboard . The CLI supports Windows, macOS, and Linux, and can be installed with a simple script ( https://relay.koder.wtf/#how-it-works ). Currently, each user gets 2 reserved ports, 3 subdomains, and 1 completely custom domain. There’s still plenty of work ahead. Over the coming weeks, I’ll continue improving Relay and completely rework the dashboard, as it doesn’t look quite as polished as I’d like yet. I also plan to add a way for users to request additional subdomains directly through the platform. For now, I’d love for people to try it out and share their feedback.
Relay Rebranding I’ve completely rewritten the Relay website in Nuxt, fixing many bugs along the way and giving it a more polished, modern design that better fits the project. Check it out now at: https://relay.koder.wtf/
Scaling Relay improve http performance add region based relay deployments some ui improvements add auto updater support Relay now supports choosing the best relay between multiple relays per “host”. Obv. we give you the freedom to say that you just want to have relay x and every feature we previously had will works as usual. I obv. did some more small changes as you can see above
Ships:
Relay’s first ship I think Relay is finally ready for its first-ever ship! You can find instructions on how to use it at https://relay.koder.wtf For a long time, I’ve been looking for a nice solution to tunnel my local Minecraft servers and websites so I could share them with friends, and Relay is exactly that. Obviously, Relay isn’t even close to being finished yet and will continue to receive updates over time. :D So yeah, go ahead and give it a try! :p
Relay v2? (if we can call it like that) Now that the base was solid and we had most of the features I focused on refining everything so I did exactly that: New UI Mutli Regional Relays Auto Updater QoL changes in general Have fun and try it out now: https://github.com/InvalidJoker/relay/tree/main#installation...
|
1792849752.9650612
|
1792936152.9650612
|
|
10853
|
RoFind by @KERNL | Stardance
|
KERNL
|
2
|
30.71
|
381
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T10:42:53Z", "hours": 15.0, "multiplier": 16.85, "payout": 260, "blessing": "neutral", "text": "I have finally implemented a basic login feature! From the past submission this version a slight change has been merged: Game Submission now requires logging in! This due to a problem where anyone can spam submission. Some elements/redundancy has been removed in the code and the pages This login feature has been the hardest part yet since i haven’t tried login techniques before. I almost gave up on the project but decided to pivot into a more simplified login form first then secure it later!", "repo": "https://github.com/rofind-main/RoFind-Site", "demo": "https://ro-find.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-18T15:03:34Z", "hours": 14.0, "multiplier": 8.56, "payout": 121, "blessing": "neutral", "text": "RoFind is a community driven game discovery. RoFind features a game submission system so everyone can suggest any game they want everyone to experience too! Submitted games will be reviewed before making into the public list. Made with vanilla HTML, CSS, and JavaScript.", "repo": "https://github.com/rofind-main/RoFind-Site", "demo": "https://ro-find.vercel.app/"}]...
|
[{"post_id": 58208, "ts": "202 [{"post_id": 58208, "ts": "2026-08-30T15:49:43Z", "hours": 0.6919, "text": "8/30/26 - Game Card From a user review suggestion, I am now working on implementing the description when opening/clicking a game popup. Experimentation is my main process here since I am not a good UI designer and still looking for my style. Here is the preview of what is currently being developed. The idea here is that, in order to reduce screen clutter and make it a little more modern I have placed the game image behind the texts (inspired from other platforms, apps, designs). This should be done in just a week :). I can’t focus on this project i am addicted to osu!"}, {"post_id": 57221, "ts": "2026-08-29T10:07:28Z", "hours": 1.0158, "text": "8/29/26 - Submission fix & Future plans Thank you for all the generous comments about RoFind and the people who have tried my project! I have more plans to this project but in the mean time i will be focusing on life and taking a break a little bit from this project and expect it to be better in the future. I have fixed the ability to spam rate a game. I am also aware of other vulnerability on the project and i do have planned fixes and changes to it so stay tuned!"}, {"post_id": 52244, "ts": "2026-08-22T10:38:57Z", "hours": 3.0933, "text": "8/22/26 - User Profile I have finally found a way to implement user profiles by using OAuth (not really) but the idea is simple i only request the username and the user id and be saved locally since i don’t have much experience handling OAuth and security. I do plan on fixing that to be more secure and faster. !! Rating Collection & Comments will be implemented soon they are currently place holder to give you an idea what will be the user page hold !! Over all the plan is going okay(ish) in the roadmap. More features will be implemented!"}, {"post_id": 41255, "ts": "2026-08-05T11:08:33Z", "hours": 1.6106, "text": "8/6/26 - Login Feature I have been taking a break for a while (playing games) since this project is pretty heavy on my little brain to handle. Anyways, thanks to AI i have found a way how to handle Roblox OAuth and the login feature to be slowly worked on! I will also be reworking some things such us the popup system since i have multiple occurrences of popup tags on pages that totally sucks to find but also maintain when expanding the platform. I am currently aiming to earn a little more stardance currency (i forgot what its called) so i can buy a little more useful stuff :)"}, {"post_id": 20755, "ts": "2026-07-02T13:28:59Z", "hours": 1.4014, "text": "7/2/26 - Major Revamp I have decided to port the project into Next.js since scaling the project in the future is a pain. Further fixes will be pushed in the current Web version while also working on the revamped one!"}, {"post_id": 15618, "ts": "2026-06-25T12:23:10Z", "hours": 3.0064, "text": "6/25/26 - Users Login Update I have been having trouble on how user login would work where i wont really have much trouble maintaining the backend that much when the platform grows. Things i have been doing: Updating the homepage Updating the README credits User login OAuth and Redirects"}, {"post_id": 13648, "ts": "2026-06-22T12:20:25Z", "hours": 1.3939, "text": "6/22/26 - Submission Adjustments Thanks to @arma for finding a very confusing bug where the user would not see a “successful” message and if it failed. Things being currently worked on: User Login Backend and Frontend Performance Discord Webhook optimization (It is kinda just a spam at this point on my webhook)"}, {"post_id": 13057, "ts": "2026-06-21T11:09:55Z", "hours": 1.9503, "text": "6/21/26 - Adjustments I have made a few adjustments regarding the landing page and updated the information there. Also added some notes and updated some values on the demo page Review System Server Side IP and local based checking Custom popup added (from feedback thanks to thestarviper and Some1) (big thanks to people (especially reviewers) who commented on improving my project and my mistakes the goats)"}, {"post_id": 12962, "ts": "2026-06-21T06:46:15Z", "hours": 2.5372, "text": "6/21/26 - Review system It’s now working in the most barebone way possible Adjusted some styling to fit the overall aesthetic a little bit more More features will be worked on I am about to explode internally with this project"}, {"post_id": 12482, "ts": "2026-06-20T11:49:03Z", "hours": 0.4156, "text": "6/20/26 - Review system Got some start on review feature Still figuring out how ill take this one since i have never made/thought about a review thing Probably will take some days as i am quite busy at the moment:) Icons from LucideIcons"}, {"post_id": 11319, "ts": "2026-06-18T15:01:09Z", "hours": 1.1581, "text": "Web version is now functional (just missing searching and filtering and rate system) im working on it :)"}, {"post_id": 10588, "ts": "2026-06-17T12:25:50Z", "hours": 0.6583, "text": "I had some problems with the API im working on but ill get this done within a couple of days. my eyes got tired but i got the buttons working in the webhook"}, {"post_id": 10557, "ts": "2026-06-17T10:50:40Z", "hours": 3.415, "text": "Website Version - Submissions now implemented! Sent submissions is connected to a Discord webhook. I don’t know any other way to store the submitted tickets soooo i used Discord:)"}, {"post_id": 6234, "ts": "2026-06-10T14:12:26Z", "hours": 6.5742, "text": "Web Demo now available!"}, {"post_id": 4782, "ts": "2026-06-08T08:37:34Z", "hours": 2.0956, "text": "Changing card design"}, {"post_id": 4155, "ts": "2026-06-07T11:22:27Z", "hours": 0.3336, "text": "RoFind - Electron based Roblox community curated games list (Old Project)"}]...
|
Title: RoFind by @KERNL | Stardance
Devlogs:
RoFi Title: RoFind by @KERNL | Stardance
Devlogs:
RoFind - Electron based Roblox community curated games list (Old Project)
Changing card design
Web Demo now available!
Website Version - Submissions now implemented! Sent submissions is connected to a Discord webhook. I don’t know any other way to store the submitted tickets soooo i used Discord:)
I had some problems with the API im working on but ill get this done within a couple of days. my eyes got tired but i got the buttons working in the webhook
Web version is now functional (just missing searching and filtering and rate system) im working on it :)
6/20/26 - Review system Got some start on review feature Still figuring out how ill take this one since i have never made/thought about a review thing Probably will take some days as i am quite busy at the moment:) Icons from LucideIcons
6/21/26 - Review system It’s now working in the most barebone way possible Adjusted some styling to fit the overall aesthetic a little bit more More features will be worked on I am about to explode internally with this project
6/21/26 - Adjustments I have made a few adjustments regarding the landing page and updated the information there. Also added some notes and updated some values on the demo page Review System Server Side IP and local based checking Custom popup added (from feedback thanks to thestarviper and Some1) (big thanks to people (especially reviewers) who commented on improving my project and my mistakes the goats)
6/22/26 - Submission Adjustments Thanks to @arma for finding a very confusing bug where the user would not see a “successful” message and if it failed. Things being currently worked on: User Login Backend and Frontend Performance Discord Webhook optimization (It is kinda just a spam at this point on my webhook)
6/25/26 - Users Login Update I have been having trouble on how user login would work where i wont really have much trouble maintaining the backend that much when the platform grows. Things i have been doing: Updating the homepage Updating the README credits User login OAuth and Redirects
7/2/26 - Major Revamp I have decided to port the project into Next.js since scaling the project in the future is a pain. Further fixes will be pushed in the current Web version while also working on the revamped one!
8/6/26 - Login Feature I have been taking a break for a while (playing games) since this project is pretty heavy on my little brain to handle. Anyways, thanks to AI i have found a way how to handle Roblox OAuth and the login feature to be slowly worked on! I will also be reworking some things such us the popup system since i have multiple occurrences of popup tags on pages that totally sucks to find but also maintain when expanding the platform. I am currently aiming to earn a little more stardance currency (i forgot what its called) so i can buy a little more useful stuff :)
8/22/26 - User Profile I have finally found a way to implement user profiles by using OAuth (not really) but the idea is simple i only request the username and the user id and be saved locally since i don’t have much experience handling OAuth and security. I do plan on fixing that to be more secure and faster. !! Rating Collection & Comments will be implemented soon they are currently place holder to give you an idea what will be the user page hold !! Over all the plan is going okay(ish) in the roadmap. More features will be implemented!
8/29/26 - Submission fix & Future plans Thank you for all the generous comments about RoFind and the people who have tried my project! I have more plans to this project but in the mean time i will be focusing on life and taking a break a little bit from this project and expect it to be better in the future. I have fixed the ability to spam rate a game. I am also aware of other vulnerability on the project and i do have planned fixes and changes to it so stay tuned!
8/30/26 - Game Card From a user review suggestion, I am now working on implementing the description when opening/clicking a game popup. Experimentation is my main process here since I am not a good UI designer and still looking for my style. Here is the preview of what is currently being developed. The idea here is that, in order to reduce screen clutter and make it a little more modern I have placed the game image behind the texts (inspired from other platforms, apps, designs). This should be done in just a week :). I can’t focus on this project i am addicted to osu!
Ships:
RoFind is a community driven game discovery. RoFind features a game submission system so everyone can suggest any game they want everyone to experience too! Submitted games will be reviewed before making into the public list. Made with vanilla HTML, CSS, and JavaScript.
I have finally implemented a basic login feature! From the past submission this version a slight change has been merged: Game Submission now requires logging in! This due to a problem where anyone can spam submission. Some elements/redundancy has been removed in the code and the pages This login feature has been the hardest part yet since i haven’t tried login techniques before. I almost gave up on the project but decided to pivot into a more simplified login form first then secure it later!...
|
1792835285.8979268
|
1792921685.8979268
|
|
10862
|
Snake by @Danial | Stardance
|
Danial
|
2
|
18.0
|
22
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-07T07:59:19Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hi everyone, I’m shipping snake version 1.0.1. Things that I added in this version make it somther, and easier to run", "repo": "https://github.com/Denial132/Snake", "demo": "https://github.com/Denial132/Snake-Demo/releases/tag/v1.0.1"}, {"ship_num": 2, "ts": "2026-07-06T09:41:43Z", "hours": 11.0, "multiplier": 4.18, "payout": 22, "blessing": "neutral", "text": "Snake Game – Final Submission This project is a classic Snake game developed in Python using Pygame. It includes a main menu, pause feature, adjustable sound and speed settings, score and high score tracking, restart functionality, and a game over screen. This is the final version of the project for submission.Thank you to anyone who was following the progression of the game!", "repo": "https://github.com/Denial132/Snake", "demo": "https://github.com/Denial132/Snake-Demo/releases/tag/v1.0.1"}]...
|
[{"post_id": 42486, "ts": "202 [{"post_id": 42486, "ts": "2026-08-07T07:56:29Z", "hours": 4.2364, "text": "🐍 Devlog: #9 This is going to be my last post until the next ship. Score tracking update for diffrent speed levels Pressing continue saves the last speed (So you can’t enter the game and get a high score for a higher speed) The snake won’t crash into itself if you’re trying to do a 180 turn Some complaints from the last ship Also fixed a lot of other bugs that I forgot"}, {"post_id": 25687, "ts": "2026-07-10T03:33:34Z", "hours": 2.7703, "text": "🐍 Devlog: #8 Cleaned up my Snake game repository by putting the README.md, Snake.py, save.json, background.mp3, and death.wav files into one main repository. I also fixed the README file name and prepared the repository and demo links for resubmission."}, {"post_id": 22792, "ts": "2026-07-05T11:36:59Z", "hours": 4.0142, "text": "🐍 Devlog #7 – Final Project In this last session, I finished my Snake game by fixing the last few bugs and making sure all features worked correctly. ✅ Final Changes Fixed the restart button and menu navigation. Made sure scores save correctly. Finished the sound and speed settings. Improved the controls and button layout. . Tested the game and fixed minor bugs. 📝 Reflection I’m really happy with the final game results. The game is now complete and ready for submission."}, {"post_id": 20712, "ts": "2026-07-02T11:43:04Z", "hours": 1.1889, "text": "🐍 Devlog #6 – Settings Menu (Sound & Speed) This update focused on adding and improving the settings menu to give players more control over gameplay, specifically sound and game speed. ⚙️ Settings Menu I implemented a settings menu where players can adjust key game options instead of everything being fixed in the code. 🔊 Sound Control I added a sound option that allows players to enable or disable game audio, making the experience more flexible depending on preference. ⚡ Speed Control I added a speed setting that changes how fast the Snake moves. The speed levels are slow, Normal, fast, and Extreme. 🧭 Menu Integration The settings menu is fully connected to the main menu and game loop, so changes apply correctly without breaking navigation or gameplay. 🧩 Stability I made sure settings updates don’t interfere with saving, restarting, or switching between menus. This might be my last update, unless I do some last minute changes tomorrow."}, {"post_id": 19934, "ts": "2026-07-01T11:38:44Z", "hours": 1.1478, "text": "🐍 Devlog #5– Snake Game Update This update focused on improving the game’s usability and adding a full interactive UI. ✨ What I added .Clickable menu buttons (New Game, Continue, Controls, Quit) .Clickable game over buttons (Restart, Menu) .A controls screen showing keybinds like movement, pause, and turbo .Support for both keyboard AND mouse input .Clear button labels that show controls (e.g. “Pause (P)”) .Improved menu navigation flow .Wider and easier-to-click buttons 🔊 Audio improvements .Background music system added .Music starts at volume 0 and fades in smoothly .Death sound effect plays when you lose 💾 Game system .Save and load system using save.json .High score tracking .Continue option added from menu 🐛 Bugs fixed .Fixed crashes from missing menu states .Fixed input not working in some screens .Improved game-over handling so it doesn’t freeze .Fixed snake movement issues after restart 🎯 Next steps .Add settings menu (sound on/off, speed control)"}, {"post_id": 19154, "ts": "2026-06-30T12:19:43Z", "hours": 1.1897, "text": "🐍 Devlog #5 – Polish + Game Improvements This update focused on improving the overall stability and feel of my Snake game. I fixed several issues in the game logic, including problems with saving the high score, menu flow, and game over handling. 💾 The save system now works properly and keeps the high score between sessions. The menu system has also been cleaned up so restarting or continuing a game no longer causes bugs or resets data incorrectly. 🐍 I also improved the gameplay experience by polishing movement, collision handling, and general game structure. The code is now more stable and easier to manage. 🎮 Overall, the game now feels more complete and consistent, with fewer bugs and smoother transitions between states like menu, gameplay, and game over. 🎵 Next update will include background music and a death sound to improve the game’s atmosphere."}, {"post_id": 18268, "ts": "2026-06-29T11:10:55Z", "hours": 1.3053, "text": "🐍 Devlog #4 – Save System + Progress Update This update added a full save system to my Snake game, so now the game remembers your progress even after you close it. 💾 What I added .A save system using JSON files Automatic saving during gameplay (mid-game autosave) Saving when: .You eat food .You hit game over .You quit the game .A working high score system .Game state saving (snake position, direction, and food position) 🔄 What changed Now the game doesn’t reset every time you open it. Instead, it loads your last session from a file called save.json. That means: .You can close the game anytime .Open it again and continue where you left off .Your high score stays saved permanently ⚙️ How it works The game stores all important data: .Score .High score .Snake body positions .Direction .Food location This data is written into a file using Python’s json module and reloaded when the game starts. 🎮 Result The game now feels much more like a real game instead of a restart-every-time project. Progress is saved automatically and reliably. 🚧 Next steps In the next update, I want to improve the game by adding: .A main menu (Start / Continue / Quit) .Better visuals or animations .Possibly sound effects .Cleaner restart system"}, {"post_id": 16158, "ts": "2026-06-26T08:25:15Z", "hours": 0.9467, "text": "🐍 Devlog #3: Snake Game – Game Over Update Additions: A Game Over system A control so the player can press R to restart the game or Q to quit. When restarting, the snake, score, direction, and food all reset properly. fixes: issues where the game would close instead of showing Game Over Next, I want to add increasing speed and a high score system."}, {"post_id": 15561, "ts": "2026-06-25T09:33:01Z", "hours": 0.6044, "text": "🐍 Devlog #2 – Snake Game Progress This week I improved my Snake game. I focused on fixing bugs and making the gameplay smoother. What I worked on: Adjusted the game speed because it was too fast at first Fixed movement and collision issues Improved how the snake grows when it eats food Cleaned up parts of the code to make it easier to understand What works now: Snake moves smoothly in all directions Food spawns correctly Score increases when food is eaten Game runs without crashing Problems I faced: The game speed felt uncontrollable at first, so I had to lower it Some collision detection bugs made the snake die randomly Next steps: Add a game over screen Add increasing difficulty over time Possibly add sound effects or a restart button"}, {"post_id": 14987, "ts": "2026-06-24T10:49:23Z", "hours": 0.5981, "text": "🐍 Devlog #1 – Starting My Python Snake Game. Today I started my new Python project: Snake I chose Snake because it’s a classic game that most of us have played before So far, I’ve created the project folder, set up my files, and started planning how the game will work. My first goal is to create the game window and get the snake moving smoothly with the arrow keys. Over the next few devlogs, I’ll add food, scoring, game-over detection, and polish the game with better graphics and features."}]...
|
Title: Snake by @Danial | Stardance
Devlogs:
🐍 De Title: Snake by @Danial | Stardance
Devlogs:
🐍 Devlog #1 – Starting My Python Snake Game. Today I started my new Python project: Snake I chose Snake because it’s a classic game that most of us have played before So far, I’ve created the project folder, set up my files, and started planning how the game will work. My first goal is to create the game window and get the snake moving smoothly with the arrow keys. Over the next few devlogs, I’ll add food, scoring, game-over detection, and polish the game with better graphics and features.
🐍 Devlog #2 – Snake Game Progress This week I improved my Snake game. I focused on fixing bugs and making the gameplay smoother. What I worked on: Adjusted the game speed because it was too fast at first Fixed movement and collision issues Improved how the snake grows when it eats food Cleaned up parts of the code to make it easier to understand What works now: Snake moves smoothly in all directions Food spawns correctly Score increases when food is eaten Game runs without crashing Problems I faced: The game speed felt uncontrollable at first, so I had to lower it Some collision detection bugs made the snake die randomly Next steps: Add a game over screen Add increasing difficulty over time Possibly add sound effects or a restart button
🐍 Devlog #3: Snake Game – Game Over Update Additions: A Game Over system A control so the player can press R to restart the game or Q to quit. When restarting, the snake, score, direction, and food all reset properly. fixes: issues where the game would close instead of showing Game Over Next, I want to add increasing speed and a high score system.
🐍 Devlog #4 – Save System + Progress Update This update added a full save system to my Snake game, so now the game remembers your progress even after you close it. 💾 What I added .A save system using JSON files Automatic saving during gameplay (mid-game autosave) Saving when: .You eat food .You hit game over .You quit the game .A working high score system .Game state saving (snake position, direction, and food position) 🔄 What changed Now the game doesn’t reset every time you open it. Instead, it loads your last session from a file called save.json. That means: .You can close the game anytime .Open it again and continue where you left off .Your high score stays saved permanently ⚙️ How it works The game stores all important data: .Score .High score .Snake body positions .Direction .Food location This data is written into a file using Python’s json module and reloaded when the game starts. 🎮 Result The game now feels much more like a real game instead of a restart-every-time project. Progress is saved automatically and reliably. 🚧 Next steps In the next update, I want to improve the game by adding: .A main menu (Start / Continue / Quit) .Better visuals or animations .Possibly sound effects .Cleaner restart system
🐍 Devlog #5 – Polish + Game Improvements This update focused on improving the overall stability and feel of my Snake game. I fixed several issues in the game logic, including problems with saving the high score, menu flow, and game over handling. 💾 The save system now works properly and keeps the high score between sessions. The menu system has also been cleaned up so restarting or continuing a game no longer causes bugs or resets data incorrectly. 🐍 I also improved the gameplay experience by polishing movement, collision handling, and general game structure. The code is now more stable and easier to manage. 🎮 Overall, the game now feels more complete and consistent, with fewer bugs and smoother transitions between states like menu, gameplay, and game over. 🎵 Next update will include background music and a death sound to improve the game’s atmosphere.
🐍 Devlog #5– Snake Game Update This update focused on improving the game’s usability and adding a full interactive UI. ✨ What I added .Clickable menu buttons (New Game, Continue, Controls, Quit) .Clickable game over buttons (Restart, Menu) .A controls screen showing keybinds like movement, pause, and turbo .Support for both keyboard AND mouse input .Clear button labels that show controls (e.g. “Pause (P)”) .Improved menu navigation flow .Wider and easier-to-click buttons 🔊 Audio improvements .Background music system added .Music starts at volume 0 and fades in smoothly .Death sound effect plays when you lose 💾 Game system .Save and load system using save.json .High score tracking .Continue option added from menu 🐛 Bugs fixed .Fixed crashes from missing menu states .Fixed input not working in some screens .Improved game-over handling so it doesn’t freeze .Fixed snake movement issues after restart 🎯 Next steps .Add settings menu (sound on/off, speed control)
🐍 Devlog #6 – Settings Menu (Sound & Speed) This update focused on adding and improving the settings menu to give players more control over gameplay, specifically sound and game speed. ⚙️ Settings Menu I implemented a settings menu where players can adjust key game options instead of everything being fixed in the code. 🔊 Sound Control I added a sound option that allows players to enable or disable game audio, making the experience more flexible depending on preference. ⚡ Speed Control I added a speed setting that changes how fast the Snake moves. The speed levels are slow, Normal, fast, and Extreme. 🧭 Menu Integration The settings menu is fully connected to the main menu and game loop, so changes apply correctly without breaking navigation or gameplay. 🧩 Stability I made sure settings updates don’t interfere with saving, restarting, or switching between menus. This might be my last update, unless I do some last minute changes tomorrow.
🐍 Devlog #7 – Final Project In this last session, I finished my Snake game by fixing the last few bugs and making sure all features worked correctly. ✅ Final Changes Fixed the restart button and menu navigation. Made sure scores save correctly. Finished the sound and speed settings. Improved the controls and button layout. . Tested the game and fixed minor bugs. 📝 Reflection I’m really happy with the final game results. The game is now complete and ready for submission.
🐍 Devlog: #8 Cleaned up my Snake game repository by putting the README.md, Snake.py, save.json, background.mp3, and death.wav files into one main repository. I also fixed the README file name and prepared the repository and demo links for resubmission.
🐍 Devlog: #9 This is going to be my last post until the next ship. Score tracking update for diffrent speed levels Pressing continue saves the last speed (So you can’t enter the game and get a high score for a higher speed) The snake won’t crash into itself if you’re trying to do a 180 turn Some complaints from the last ship Also fixed a lot of other bugs that I forgot
Ships:
Snake Game – Final Submission This project is a classic Snake game developed in Python using Pygame. It includes a main menu, pause feature, adjustable sound and speed settings, score and high score tracking, restart functionality, and a game over screen. This is the final version of the project for submission.Thank you to anyone who was following the progression of the game!
Hi everyone, I’m shipping snake version 1.0.1. Things that I added in this version make it somther, and easier to run...
|
1792875230.2863588
|
1793739230.2863588
|
|
11599
|
Student Hub by @EndLess9 | Stardance
|
EndLess9
|
2
|
5.0
|
21
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T04:06:48Z", "hours": 2.0, "multiplier": 2.85, "payout": 5, "blessing": "neutral", "text": "There are many productivity and tasks trackers, but the reason my website stands out if because my website makes it easier for students to start doing their work. It features 2 very important things. 1 is a class link and the other is the assignment link. The assignment link is something the student can add while making the assignment in Student Hub to quickly access it through this portal. Many productivity apps have this, but what they don’t have is the Class link, every assignment under it’s class has a Class-specific link attached to every assignment and exam for it. So the student doesn’t have to go through the trouble of opening something they need for every assignment/exam for that class.", "repo": "https://github.com/EndLessDude/Student-Hub", "demo": "https://student-hub-5a422.web.app/login"}, {"ship_num": 2, "ts": "2026-06-07T21:28:31Z", "hours": 3.0, "multiplier": 4.89, "payout": 16, "blessing": "neutral", "text": "I always struggled to stay on top of all my school work. I fixed this by making Student Hub. This website lets you easily track your assignments, exams, and reminders.", "repo": "https://github.com/EndLessDude/Student-Hub", "demo": "https://student-hub-5a422.web.app/login"}]...
|
[{"post_id": 12230, "ts": "202 [{"post_id": 12230, "ts": "2026-06-19T23:23:10Z", "hours": 0.9058, "text": "New Changes: New Login/Sign Up screen Fixed bugs in Home Page"}, {"post_id": 11724, "ts": "2026-06-19T02:57:43Z", "hours": 1.0272, "text": "Changes: By default Assignment and Exam tab’s filters will be set to “Pending”. Links added for a class will be automatically added to every assignment/exam for that class for easy access. You can now add links for an assignment and access them anytime. Calendar view for Assignments now works"}, {"post_id": 4449, "ts": "2026-06-07T19:30:41Z", "hours": 3.2561, "text": "Lately I’ve been working on making the dashboard better for users by adding a place for them to add Quick Links to pages such as: Google Classroom, Canvas, Gmail etc. This will be highly beneficial since by adding this users won’t have to do the extra work of manually opening pages they regularly need."}]...
|
Title: Student Hub by @EndLess9 | Stardance
Devlo Title: Student Hub by @EndLess9 | Stardance
Devlogs:
Lately I’ve been working on making the dashboard better for users by adding a place for them to add Quick Links to pages such as: Google Classroom, Canvas, Gmail etc. This will be highly beneficial since by adding this users won’t have to do the extra work of manually opening pages they regularly need.
Changes: By default Assignment and Exam tab’s filters will be set to “Pending”. Links added for a class will be automatically added to every assignment/exam for that class for easy access. You can now add links for an assignment and access them anytime. Calendar view for Assignments now works
New Changes: New Login/Sign Up screen Fixed bugs in Home Page
Ships:
I always struggled to stay on top of all my school work. I fixed this by making Student Hub. This website lets you easily track your assignments, exams, and reminders.
There are many productivity and tasks trackers, but the reason my website stands out if because my website makes it easier for students to start doing their work. It features 2 very important things. 1 is a class link and the other is the assignment link. The assignment link is something the student can add while making the assignment in Student Hub to quickly access it through this portal. Many productivity apps have this, but what they don’t have is the Class link, every assignment under it’s class has a Class-specific link attached to every assignment and exam for it. So the student doesn’t have to go through the trouble of opening something they need for every assignment/exam for that class....
|
1792878651.349388
|
1793742651.349388
|
|
11705
|
Aternos Discord Bot by @albertphu3 | Stardance
|
albertphu3
|
2
|
0.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T17:07:22Z", "hours": 0.0, "multiplier": 1.56, "payout": 0, "blessing": "neutral", "text": "Introduced new fetaures and windows support (BETA)", "repo": "https://github.com/albertphu07/neomc-an-Aternos-Discord-Bot", "demo": "https://discord.gg/kPVNEQzDBn"}, {"ship_num": 2, "ts": "2026-06-09T15:46:51Z", "hours": 0.0, "multiplier": 7.23, "payout": 2, "blessing": "neutral", "text": "Aternos Python Discord Bot that streamlines the Aternos experience! Allows for discord friend groups to quickly start and lightly manage a server! Requires some level of programming knowledge.", "repo": "https://github.com/albertphu07/neomc-an-Aternos-Discord-Bot", "demo": "https://discord.gg/kPVNEQzDBn"}]...
|
[{"post_id": 11936, "ts": "202 [{"post_id": 11936, "ts": "2026-06-19T13:59:41Z", "hours": 0.3119, "text": "Added new feature like help command"}, {"post_id": 5286, "ts": "2026-06-09T00:30:45Z", "hours": 0.2669, "text": "I love to play minecraft with my friends but i had one issue with Aternos not all my friends wanted to spend the time to start or create an Aternos account themselves so i created a discord bot for any discord friend group to use even larger servers! Simplifying the constant pings you used to get to start the server to a simple !start !stop !restart (etc) command! Hope Yall Like it!"}]...
|
Title: Aternos Discord Bot by @albertphu3 | Starda Title: Aternos Discord Bot by @albertphu3 | Stardance
Devlogs:
I love to play minecraft with my friends but i had one issue with Aternos not all my friends wanted to spend the time to start or create an Aternos account themselves so i created a discord bot for any discord friend group to use even larger servers! Simplifying the constant pings you used to get to start the server to a simple !start !stop !restart (etc) command! Hope Yall Like it!
Added new feature like help command
Ships:
Aternos Python Discord Bot that streamlines the Aternos experience! Allows for discord friend groups to quickly start and lightly manage a server! Requires some level of programming knowledge.
Introduced new fetaures and windows support (BETA)...
|
1792846455.994004
|
1792932855.994004
|
|
12086
|
Hand tracker by @Selim | Stardance
|
Selim
|
2
|
17.0
|
135
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T18:45:43Z", "hours": 15.0, "multiplier": 8.87, "payout": 118, "blessing": "neutral", "text": "I finished the wiring up the servos to the pca9685 board and connected the servos to my 3d printed hand model and its so much fun to use and mess around with, this project is by far my favourite. Its officially done and there are two ways to use it: you can use the website hand tracker just to mess around with it, see the values of the fingers and its reaction speed. Googles media pipe model has issues as you move your hand closer and further from the webcam but there’s nothing I can do to fix as it’s an issue with the model, not my code. grab a pico, pca9685 board, breadboard and some wires, 3d printer/ access to a 3d printer and build the whole project, I will attach the 3d model and wiring diagram once I finish them so anyone can build it from scratch and have their own robotic hand at home!", "repo": "https://github.com/Echo-Sel/Hand-Tracker", "demo": "https://echo-sel.github.io/Hand-Tracker/"}, {"ship_num": 2, "ts": "2026-06-16T21:54:43Z", "hours": 2.0, "multiplier": 9.65, "payout": 17, "blessing": "neutral", "text": "I’ve finally reached a point with this code as to where I feel comfortable moving onto reprinting the hand and cleaning it up, for a potential final product! So far the code can: ✅ Host a website ✅ connect with the browser and host port ✅ allow for webcam access and capture ✅ track finger movements and turn them into percentages (with an overlay) ✅ turns the percentages into numbers that it can decipher ✅ turns the numbers into servo values ✅ move the servo’s within a 5ms time frame (requires external hardware) Next steps: 📥 Motor smoothing to allow for more fluid movements Excluding the code im going to start working on the pcb and adjusting the CAD for the actual hand model to allow for a better looking build. Im really excited to see this project finally come to an end!", "repo": "https://github.com/Echo-Sel/Hand-Tracker", "demo": "https://echo-sel.github.io/Hand-Tracker/"}]...
|
[{"post_id": 60803, "ts": "202 [{"post_id": 60803, "ts": "2026-09-03T12:21:38Z", "hours": 2.9067, "text": "I finally finished all of the functional design for my code and refreshed my html! the big new stuff I changed was the switch over to tiny web and it felt soooo much cleaner and easier to use and just look at. Since the I changed the main structure it took me a while to re organize everything to work with tiny web. I added logging everywhere because I kept running into issues where my could would just stop working, and I refreshed the html because the old colours annoyed me. I think i’m almost done now and i’m so excited to put everything together and test it! (P.S look how much cleaner the terminal output looks im in awe)"}, {"post_id": 26950, "ts": "2026-07-12T01:24:31Z", "hours": 11.99, "text": "This hand code has been traumatizing me for too long, ive restructured it and began adding PID tuning for the motors to turn more smooth and human-like, ive also been trying to bug fix packet loss and random noise being sent back and forth, im going to begin working on the pcb and maybe a third version of the projects CAD! im really excited to finally be finished with the code and take a step back and look at what ive made, hopefully you can all take this step back with me"}, {"post_id": 8292, "ts": "2026-06-13T19:44:41Z", "hours": 1.3464, "text": "Webpage refresh: I added Css to make the website look a lot better and aesthetically pleasing, I also added a slider to allow multiple hands to be tracked. For my next steps I want to add different texts boxes for each hand as currently it gets the percent openness from the least number, not the average."}, {"post_id": 4658, "ts": "2026-06-08T02:01:56Z", "hours": 0.7225, "text": "This was my first ‘real’ project where I work on the design and printing, electrical and programming all of the same system, and its taken me all year but it has been one of the funnest things I’ve done in forever. Ive been working on this project on and off starting last summer, and it has been such an amazing learning experience, I’ve been working on the code recently but with the star dance challenge opening, I thought it would be good to post this here as I continue work on it. What I have here is going to be mainly focused on the programming until I feel good with it, then I’ll move on to and quickly finish the pcb. Please feel free to try out the hand tracking software and provide feedback!"}]...
|
Title: Hand tracker by @Selim | Stardance
Devlogs Title: Hand tracker by @Selim | Stardance
Devlogs:
This was my first ‘real’ project where I work on the design and printing, electrical and programming all of the same system, and its taken me all year but it has been one of the funnest things I’ve done in forever. Ive been working on this project on and off starting last summer, and it has been such an amazing learning experience, I’ve been working on the code recently but with the star dance challenge opening, I thought it would be good to post this here as I continue work on it. What I have here is going to be mainly focused on the programming until I feel good with it, then I’ll move on to and quickly finish the pcb. Please feel free to try out the hand tracking software and provide feedback!
Webpage refresh: I added Css to make the website look a lot better and aesthetically pleasing, I also added a slider to allow multiple hands to be tracked. For my next steps I want to add different texts boxes for each hand as currently it gets the percent openness from the least number, not the average.
This hand code has been traumatizing me for too long, ive restructured it and began adding PID tuning for the motors to turn more smooth and human-like, ive also been trying to bug fix packet loss and random noise being sent back and forth, im going to begin working on the pcb and maybe a third version of the projects CAD! im really excited to finally be finished with the code and take a step back and look at what ive made, hopefully you can all take this step back with me
I finally finished all of the functional design for my code and refreshed my html! the big new stuff I changed was the switch over to tiny web and it felt soooo much cleaner and easier to use and just look at. Since the I changed the main structure it took me a while to re organize everything to work with tiny web. I added logging everywhere because I kept running into issues where my could would just stop working, and I refreshed the html because the old colours annoyed me. I think i’m almost done now and i’m so excited to put everything together and test it! (P.S look how much cleaner the terminal output looks im in awe)
Ships:
I’ve finally reached a point with this code as to where I feel comfortable moving onto reprinting the hand and cleaning it up, for a potential final product! So far the code can: ✅ Host a website ✅ connect with the browser and host port ✅ allow for webcam access and capture ✅ track finger movements and turn them into percentages (with an overlay) ✅ turns the percentages into numbers that it can decipher ✅ turns the numbers into servo values ✅ move the servo’s within a 5ms time frame (requires external hardware) Next steps: 📥 Motor smoothing to allow for more fluid movements Excluding the code im going to start working on the pcb and adjusting the CAD for the actual hand model to allow for a better looking build. Im really excited to see this project finally come to an end!
I finished the wiring up the servos to the pca9685 board and connected the servos to my 3d printed hand model and its so much fun to use and mess around with, this project is by far my favourite. Its officially done and there are two ways to use it: you can use the website hand tracker just to mess around with it, see the values of the fingers and its reaction speed. Googles media pipe model has issues as you move your hand closer and further from the webcam but there’s nothing I can do to fix as it’s an issue with the model, not my code. grab a pico, pca9685 board, breadboard and some wires, 3d printer/ access to a 3d printer and build the whole project, I will attach the 3d model and wiring diagram once I finish them so anyone can build it from scratch and have their own robotic hand at home!...
|
1792828240.7301111
|
1792914640.7301111
|
|
12272
|
MotifDesigner by @zeankun | Stardance
|
zeankun
|
2
|
25.35
|
314
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T02:29:23Z", "hours": 7.0, "multiplier": 18.37, "payout": 134, "blessing": "neutral", "text": "Version 1.0 is now released! Horray! A lot of things have been added! Added snap to grid checkmark on inspector NEW WIDGET : Toggle/checkmark! Add confirming stuffs to your UI! Fixed units on most components New handles and dimension badge Creation, saving and loading in new MotifDesigner Visual Files ( .vfl )! with a visual parser And comes with a brand new visual file format to accompany: MotifDesigner Visual Files! What are those? These are MotifDesigner’s native format. They allow you to define UIs, either programatically or visually. Read more about the file format specification yourself, or have it as a complement for Claude or Claude Code via skills", "repo": "https://github.com/zeankundev/MotifDesigner", "demo": "https://github.com/zeankundev/MotifDesigner/releases/latest/"}, {"ship_num": 2, "ts": "2026-06-12T07:37:46Z", "hours": 17.0, "multiplier": 10.69, "payout": 180, "blessing": "neutral", "text": "This is MotifDesigner, a GUI editor for Motif (basically) in which you can edit your normal GUIs. Think of it as like the WinForms/Qt Creator of Motif! The goal is to actually bring modern UX to ancient looking software, and it’s actually quite fun! Behind all these are hours of debugging efforts, tens of segmentation fault crashes, tons of sacrificed memory for memory leak debugging, and lots of core dumps! I hope this project simplifies what GUI making is, or just making Motif development a bit easier while also looking ancient!", "repo": "https://github.com/zeankundev/MotifDesigner", "demo": "https://github.com/zeankundev/MotifDesigner/releases/latest/"}]...
|
[{"post_id": 24473, "ts": "202 [{"post_id": 24473, "ts": "2026-07-08T01:34:46Z", "hours": 1.3453, "text": "Now added live value editing! Double click (certain elements) to edit its value, and you can use your normal keyboard editing shortcuts. Yes, Home , End , Shift+arrow , Ctrl+A , etc, are supported! Hands off the mouse now! Being honest, this feature is mostly implemented by AI. Text logic and selection is a finicky subject to pick up, given the sheer complexity. But I want to make the value editing UX just like at home, like you would on Figma, and many more! Also, some quality of life updates: re-renders are now automatically scheduled based on your device’s refresh rate. You don’t need to wait for user input now, it happens automatically in the background. ( And yes, free (s) are excluded as usual. Double free() is usually the culprit and yeah, I’m bad at memory management )"}, {"post_id": 22554, "ts": "2026-07-05T02:26:15Z", "hours": 0.3092, "text": "Release 1.0 has been out now! MotifDesigner is usable for the general public now! You know what that means? Shipping time! Oh yeah, don’t forget to report bugs or issues here . Don’t be hesitant. It can be either via your AppImage or your local debug build"}, {"post_id": 22537, "ts": "2026-07-05T01:54:20Z", "hours": 0.5664, "text": "Made file specifications in Markdown, as well as a Claude skill (for you, vibecoders /j) so that Claude can generate proper visual files. No code changes, tho. Attached is an example where I instructed Claude to make a simple supermarket POS interface."}, {"post_id": 21485, "ts": "2026-07-03T13:49:15Z", "hours": 2.8694, "text": "Now the hardest part has been done: importing and parsing visual files! Here’s what I accomplished: Parsing of visual files Syntax errors and redundancy checks to ensure it is indeed the visual file you are opening Auto writing on save whenever you’ve opened something or has saved a new file! How does the MotifDesigner Visual File format work ( .vfl )? (for self programming the visual file) It’s like XML or HTML (whatever that correlates with both) except the tags don’t end in slashes. All visual files must have both [MotifDesignerVisualFile] and [EndMotifDesignerVisualFile] . This will contain two critical pieces of information: the Version parameter, which you must append (e.g. Version=0.5 ). It must be inside the VisualFile tag. the Widgets tag. Same, enclosed with EndWidgets . This will be the place where you will put your elements here. I’ll write more of the file specifications if I have more time Anyway, here’s a video to demonstrate!"}, {"post_id": 20763, "ts": "2026-07-02T13:41:43Z", "hours": 0.4028, "text": "Real thing now! You can now export visual files made by MotifDesigner! It will come in a user-friendly syntax, which is human and machine readable, which is much closer to something like XML! All that’s left is to: implement a parser to parse these visual files something to make the visual file editing complete before moving in to the IDE side of things"}, {"post_id": 20624, "ts": "2026-07-02T08:29:30Z", "hours": 1.0811, "text": "This one, by far the hardest feature to implement: the save dialog . It took me lots of work to do (most was AI assisted) that double frees were actually fired (despite deleting all free methods). Here’s what’s fully implemented: Autotemplating with a default filename Sticky file names, so your typed filename never gets lost (e.g. when changing directories) And lots of UX improvements for the save dialogs The rest are relatively easy to implement, as they require little work, such as the open file dialog, etc. Next steps Next, I hope that There will be basic visual file saving/exporting ( *.vfl ) Parser for those visual files (to open it) Lots of filesystem-related operations as well as a robust project management system"}, {"post_id": 19691, "ts": "2026-07-01T02:35:34Z", "hours": 0.2656, "text": "Oh yeah, I forgot to log this one, but it adds few QoL improvements. Now, it should feel more modern, hence to the Figma-style handle and nets, as well as adding the bottom blue badge to visualize the exact width without looking at the inspector ever again!"}, {"post_id": 14973, "ts": "2026-06-24T09:54:14Z", "hours": 0.6342, "text": "Some features for 0.8 will be on the works by now. This includes: Snap to Grid toggle Added toggle as a new component Overall bug fixes ;) There will be more during the actual 0.8 release so stay tuned"}, {"post_id": 7967, "ts": "2026-06-13T09:11:29Z", "hours": 0.7167, "text": "A lot screwed up, so I decided to fix a lot of them. These are just mostly bug fixes and only a few QoL changes. For those who are afraid of change: Labels should be more legible now (same background as the overall canvas) Forced .hpp file generation (because the header implementation is C++, we don’t want it to mix with C only code A lot of stubborness during code generation ;)"}, {"post_id": 7913, "ts": "2026-06-13T06:10:04Z", "hours": 0.5419, "text": "Hotfix 1 of v0.7 (0.71) is here. Nothing much here, just like the old 0.7 version, except this update are just bug fixes and few QoL improvements. If you are terrified of change, I’ll wrap up what’s changed in this hotfix: The handles and selection frames should no longer offset by now, it is near one-to-one on what you’ll be building at the end (including the header files :D) And yeah, the grid should be more visible now. At TextDialog.cpp , few improvements were made. The text field will focus first rather than the OK button, so you can type your header class right away, and press Enter when you’re all set!"}, {"post_id": 7337, "ts": "2026-06-12T07:29:23Z", "hours": 0.4667, "text": "Quality of life fixes, nothing big, just minor fixes before getting ready to ship at the first phase!"}, {"post_id": 7327, "ts": "2026-06-12T06:32:47Z", "hours": 1.2031, "text": "Finally, added one feature that is extremely important or else render MotifDesigner out of its core goals! Now, header ( *.h ) export is available, which means you can start using it as part of your project! Zero warnings, zero errors, it’s stable now (if there are errors or warnings in .h, it’s either your fault or just file a bug report)"}, {"post_id": 7270, "ts": "2026-06-12T03:52:20Z", "hours": 1.7183, "text": "Added a dialog later on for you to answer the questions it prompted you, as well as regex checking (this will be fixed into a more modular approach later on). Regexes still apply! I’ll probably finish a lot later on (including adding a new visual file, opening a visual file, etc). Right now, this could be the roadmap for future development from now: Current Goals: Implement exporting visual as .h file to be used Creating a new visual file, opening/parsing, and saving Future Goals: Fully implemented C++ editor inside of the designer Project system (a folder containing the visual file, C++ file and the automatically generated header file) Automatic X11/Xm/Xt download if you don’t have one (includes and libraries) In-IDE building with g++ and having the ability to run the result binary Packaging to AppImage with linuxdeploy and appimagetool Add Wakatime/Hackatime support /j (that will/won’t happen)"}, {"post_id": 6823, "ts": "2026-06-11T13:29:17Z", "hours": 2.2417, "text": "Lots of bug fixes (I forgot what I did for the past 2 hours logged T_T) but at least, most bugs were shot down and caught. Especially quick mouse kids, who just mess and drag widgets fast, now it’s “throttled” to a fixed 60fps. And also added status bar to highlight the user on what’s going on and what to do with the tool. Oh yeah, also added where you can use arrow keys to snappingly move between 10 units, just for convenience! (Excuse me, the cursor there is highly offset, I truly apologize for that TwT)"}, {"post_id": 6687, "ts": "2026-06-11T06:17:54Z", "hours": 3.6958, "text": "Finally, the feature we all be waiting for! The canvas! This took me a horrendous amount of time, but it sure was worth the experience It can now drag, scale, and do many transformations like a usual GUI builder would do! And yeah, there were a lot of hiccups (yeah, segfaults and coredump abortions) and managed to fix a lot of them if it weren’t for Claude! Yeah, basically, it looks like a functioning editor by now! Sure it was interesting!"}, {"post_id": 6113, "ts": "2026-06-10T08:44:45Z", "hours": 0.2511, "text": "Now added a check for illegal names using regex! This is done so that you won’t get programmatic errors later on when coding your app in C++ (everyone doesn’t want that!) so it’s better to stay off at the normal naming convention of C"}, {"post_id": 6054, "ts": "2026-06-10T05:17:49Z", "hours": 0.8317, "text": "Added new properties panel! This is to ensure precise modifications were being made so that you still have lots of control with the UI building process"}, {"post_id": 5556, "ts": "2026-06-09T11:47:50Z", "hours": 1.2603, "text": "A lot of things were done. First off, the menubar for your stuffs later on! You’ll do it there! Second, now there’s a toolbar (still WIP)! As well as a lot of segfaults along the way, we managed to get that working for the start of this!"}, {"post_id": 5494, "ts": "2026-06-09T09:26:59Z", "hours": 1.325, "text": "More work yay! Most of the time logged here is just a scrapped feature that will never make it (due to the nature of XmNotebook). Initially, I wanted to add a tab that can switch between the visual editor and the C++ code editor (WIP)! but yeah, I don’t want a flipbook like interface, so I’ll make it as two separate modules. But hey, at least we made progress!"}, {"post_id": 5371, "ts": "2026-06-09T03:39:09Z", "hours": 1.7375, "text": "Actually another long time to comply for shipping (a test one!) which are AppImages! I just don’t want to mess around with dependency hell when distributing an ELF binary (ugh dangerous) so AppImage was our way to go. First, it was a bit flawed, then with some help, we managed to get two variants, generic and IRIX (for those who run MaXX). Hopefully it will be done soon, as this is still a work in progress and should serve the instantaneous basis of my future MotifDesigner roadmap. Attached is the app tested on Ubuntu MATE at Deskterm."}, {"post_id": 4819, "ts": "2026-06-08T10:10:15Z", "hours": 1.0542, "text": "I know this may sound like a gimmick (given that I logged 1h on one specific window) but this was tedious to get into. The About section. It seems easy, if you think, but no! It’s actually really hard to get into without proper techniques and lots of tampering with the XPM pixmaps. Gemini couldn’t help so I reached over to Claude to help and here it is, 1h wasted on just an about section."}, {"post_id": 4762, "ts": "2026-06-08T07:17:56Z", "hours": 0.2944, "text": "Did some variations with the IMC test but this time with the actual X11 Motif window showing up. The same as before except this test is now in an X11 window 🙃"}, {"post_id": 4757, "ts": "2026-06-08T06:34:36Z", "hours": 0.4325, "text": "Doing some tests to actually ensure that inter-module communication is done effortlessly. I don’t want to write more bloat code that results in a bloated main.cpp that just “acts” as a middleman, just let the header files be the ones that’s fully responsible for the IMC calling"}, {"post_id": 4742, "ts": "2026-06-08T05:56:00Z", "hours": 0.3322, "text": "First project bootstrap! Horray!"}]...
|
Title: MotifDesigner by @zeankun | Stardance
Devl Title: MotifDesigner by @zeankun | Stardance
Devlogs:
First project bootstrap! Horray!
Doing some tests to actually ensure that inter-module communication is done effortlessly. I don’t want to write more bloat code that results in a bloated main.cpp that just “acts” as a middleman, just let the header files be the ones that’s fully responsible for the IMC calling
Did some variations with the IMC test but this time with the actual X11 Motif window showing up. The same as before except this test is now in an X11 window 🙃
I know this may sound like a gimmick (given that I logged 1h on one specific window) but this was tedious to get into. The About section. It seems easy, if you think, but no! It’s actually really hard to get into without proper techniques and lots of tampering with the XPM pixmaps. Gemini couldn’t help so I reached over to Claude to help and here it is, 1h wasted on just an about section.
Actually another long time to comply for shipping (a test one!) which are AppImages! I just don’t want to mess around with dependency hell when distributing an ELF binary (ugh dangerous) so AppImage was our way to go. First, it was a bit flawed, then with some help, we managed to get two variants, generic and IRIX (for those who run MaXX). Hopefully it will be done soon, as this is still a work in progress and should serve the instantaneous basis of my future MotifDesigner roadmap. Attached is the app tested on Ubuntu MATE at Deskterm.
More work yay! Most of the time logged here is just a scrapped feature that will never make it (due to the nature of XmNotebook). Initially, I wanted to add a tab that can switch between the visual editor and the C++ code editor (WIP)! but yeah, I don’t want a flipbook like interface, so I’ll make it as two separate modules. But hey, at least we made progress!
A lot of things were done. First off, the menubar for your stuffs later on! You’ll do it there! Second, now there’s a toolbar (still WIP)! As well as a lot of segfaults along the way, we managed to get that working for the start of this!
Added new properties panel! This is to ensure precise modifications were being made so that you still have lots of control with the UI building process
Now added a check for illegal names using regex! This is done so that you won’t get programmatic errors later on when coding your app in C++ (everyone doesn’t want that!) so it’s better to stay off at the normal naming convention of C
Finally, the feature we all be waiting for! The canvas! This took me a horrendous amount of time, but it sure was worth the experience It can now drag, scale, and do many transformations like a usual GUI builder would do! And yeah, there were a lot of hiccups (yeah, segfaults and coredump abortions) and managed to fix a lot of them if it weren’t for Claude! Yeah, basically, it looks like a functioning editor by now! Sure it was interesting!
Lots of bug fixes (I forgot what I did for the past 2 hours logged T_T) but at least, most bugs were shot down and caught. Especially quick mouse kids, who just mess and drag widgets fast, now it’s “throttled” to a fixed 60fps. And also added status bar to highlight the user on what’s going on and what to do with the tool. Oh yeah, also added where you can use arrow keys to snappingly move between 10 units, just for convenience! (Excuse me, the cursor there is highly offset, I truly apologize for that TwT)
Added a dialog later on for you to answer the questions it prompted you, as well as regex checking (this will be fixed into a more modular approach later on). Regexes still apply! I’ll probably finish a lot later on (including adding a new visual file, opening a visual file, etc). Right now, this could be the roadmap for future development from now: Current Goals: Implement exporting visual as .h file to be used Creating a new visual file, opening/parsing, and saving Future Goals: Fully implemented C++ editor inside of the designer Project system (a folder containing the visual file, C++ file and the automatically generated header file) Automatic X11/Xm/Xt download if you don’t have one (includes and libraries) In-IDE building with g++ and having the ability to run the result binary Packaging to AppImage with linuxdeploy and appimagetool Add Wakatime/Hackatime support /j (that will/won’t happen)
Finally, added one feature that is extremely important or else render MotifDesigner out of its core goals! Now, header ( *.h ) export is available, which means you can start using it as part of your project! Zero warnings, zero errors, it’s stable now (if there are errors or warnings in .h, it’s either your fault or just file a bug report)
Quality of life fixes, nothing big, just minor fixes before getting ready to ship at the first phase!
Hotfix 1 of v0.7 (0.71) is here. Nothing much here, just like the old 0.7 version, except this update are just bug fixes and few QoL improvements. If you are terrified of change, I’ll wrap up what’s changed in this hotfix: The handles and selection frames should no longer offset by now, it is near one-to-one on what you’ll be building at the end (including the header files :D) And yeah, the grid should be more visible now. At TextDialog.cpp , few improvements were made. The text field will focus first rather than the OK button, so you can type your header class right away, and press Enter when you’re all set!
A lot screwed up, so I decided to fix a lot of them. These are just mostly bug fixes and only a few QoL changes. For those who are afraid of change: Labels should be more legible now (same background as the overall canvas) Forced .hpp file generation (because the header implementation is C++, we don’t want it to mix with C only code A lot of stubborness during code generation ;)
Some features for 0.8 will be on the works by now. This includes: Snap to Grid toggle Added toggle as a new component Overall bug fixes ;) There will be more during the actual 0.8 release so stay tuned
Oh yeah, I forgot to log this one, but it adds few QoL improvements. Now, it should feel more modern, hence to the Figma-style handle and nets, as well as adding the bottom blue badge to visualize the exact width without looking at the inspector ever again!
This one, by far the hardest feature to implement: the save dialog . It took me lots of work to do (most was AI assisted) that double frees were actually fired (despite deleting all free methods). Here’s what’s fully implemented: Autotemplating with a default filename Sticky file names, so your typed filename never gets lost (e.g. when changing directories) And lots of UX improvements for the save dialogs The rest are relatively easy to implement, as they require little work, such as the open file dialog, etc. Next steps Next, I hope that There will be basic visual file saving/exporting ( *.vfl ) Parser for those visual files (to open it) Lots of filesystem-related operations as well as a robust project management system
Real thing now! You can now export visual files made by MotifDesigner! It will come in a user-friendly syntax, which is human and machine readable, which is much closer to something like XML! All that’s left is to: implement a parser to parse these visual files something to make the visual file editing complete before moving in to the IDE side of things
Now the hardest part has been done: importing and parsing visual files! Here’s what I accomplished: Parsing of visual files Syntax errors and redundancy checks to ensure it is indeed the visual file you are opening Auto writing on save whenever you’ve opened something or has saved a new file! How does the MotifDesigner Visual File format work ( .vfl )? (for self programming the visual file) It’s like XML or HTML (whatever that correlates with both) except the tags don’t end in slashes. All visual files must have both [MotifDesignerVisualFile] and [EndMotifDesignerVisualFile] . This will contain two critical pieces of information: the Version parameter, which you must append (e.g. Version=0.5 ). It must be inside the VisualFile tag. the Widgets tag. Same, enclosed with EndWidgets . This will be the place where you will put your elements here. I’ll write more of the file specifications if I have more time Anyway, here’s a video to demonstrate!
Made file specifications in Markdown, as well as a Claude skill (for you, vibecoders /j) so that Claude can generate proper visual files. No code changes, tho. Attached is an example where I instructed Claude to make a simple supermarket POS interface.
Release 1.0 has been out now! MotifDesigner is usable for the general public now! You know what that means? Shipping time! Oh yeah, don’t forget to report bugs or issues here . Don’t be hesitant. It can be either via your AppImage or your local debug build
Now added live value editing! Double click (certain elements) to edit its value, and you can use your normal keyboard editing shortcuts. Yes, Home , End , Shift+arrow , Ctrl+A , etc, are supported! Hands off the mouse now! Being honest, this feature is mostly implemented by AI. Text logic and selection is a finicky subject to pick up, given the sheer complexity. But I want to make the value editing UX just like at home, like you would on Figma, and many more! Also, some quality of life updates: re-renders are now automatically scheduled based on your device’s refresh rate. You don’t need to wait for user input now, it happens automatically in the background. ( And yes, free (s) are excluded as usual. Double free() is usually the culprit and yeah, I’m bad at memory management )
Ships:
This is MotifDesigner, a GUI editor for Motif (basically) in which you can edit your normal GUIs. Think of it as like the WinForms/Qt Creator of Motif! The goal is to actually bring modern UX to ancient looking software, and it’s actually quite fun! Behind all these are hours of debugging efforts, tens of segmentation fault crashes, tons of sacrificed memory for memory leak debugging, and lots of core dumps! I hope this project simplifies what GUI making is, or just making Motif development a bit easier while also looking ancient!
Version 1.0 is now released! Horray! A lot of things have been added! Added snap to grid checkmark on inspector NEW WIDGET : Toggle/checkmark! Add confirming stuffs to your UI! Fixed units on most components New handles and dimension badge Creation, saving and loading in new MotifDesigner Visual Files ( .vfl )! with a visual parser And comes with a brand new visual file format to accompany: MotifDesigner Visual Files! What are those? These are MotifDesigner’s native format. They allow you to define UIs, either programatically or visually. Read more about the file format specification yourself, or have it as a complement for Claude or Claude Code via skills...
|
1792846290.2286406
|
1792932690.2286406
|
|
13082
|
SimpleOS by @Abrowny2944 | Stardance
|
Abrowny2944
|
2
|
5.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T21:04:39Z", "hours": 1.0, "multiplier": 4.8, "payout": 5, "blessing": "neutral", "text": "I added an OS info page to settings, made a calculator app and a turbowarp packager app", "repo": "https://github.com/Abrowny2944/SimpleOS", "demo": "https://abrowny2944.neocities.org/SimpleOS"}, {"ship_num": 2, "ts": "2026-06-18T12:51:38Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a WebOS called SimpleOS. There are four apps currently: *Info app *Document editor app *Weather app *Settings app You can change your wallpaper in the settings app or just select a solid color using the color picker. There is a working time and date display, a launcher menu that is currently empty except for the SimpleOS text that opens the info app. The wallpapers were made using a simulated environment.", "repo": "https://github.com/Abrowny2944/SimpleOS", "demo": "https://abrowny2944.neocities.org/SimpleOS"}]...
|
[{"post_id": 19519, "ts": "202 [{"post_id": 19519, "ts": "2026-06-30T20:56:14Z", "hours": 0.305, "text": "Added calculator app and turbowarp packager app"}, {"post_id": 18699, "ts": "2026-06-29T21:44:14Z", "hours": 0.7119, "text": "Added About page to settings app and update to settings app to allow multiple pages. Also an update to style of buttons inside of the settings app"}, {"post_id": 9525, "ts": "2026-06-15T21:57:39Z", "hours": 0.5111, "text": "I have added a settings app with 3 wallpaper options and a solid color option"}, {"post_id": 9403, "ts": "2026-06-15T19:06:20Z", "hours": 1.8269, "text": "Added 3 apps *Info app *Document editor app *Weather app Also a date and time display has been added to the taskbar"}, {"post_id": 5945, "ts": "2026-06-09T23:01:57Z", "hours": 1.5506, "text": "I have added a working launcher menu, a taskbar and a background image also I have added css styles to improve how the UI looks and for animations."}]...
|
Title: SimpleOS by @Abrowny2944 | Stardance
Devlo Title: SimpleOS by @Abrowny2944 | Stardance
Devlogs:
I have added a working launcher menu, a taskbar and a background image also I have added css styles to improve how the UI looks and for animations.
Added 3 apps *Info app *Document editor app *Weather app Also a date and time display has been added to the taskbar
I have added a settings app with 3 wallpaper options and a solid color option
Added About page to settings app and update to settings app to allow multiple pages. Also an update to style of buttons inside of the settings app
Added calculator app and turbowarp packager app
Ships:
I made a WebOS called SimpleOS. There are four apps currently: *Info app *Document editor app *Weather app *Settings app You can change your wallpaper in the settings app or just select a solid color using the color picker. There is a working time and date display, a launcher menu that is currently empty except for the SimpleOS text that opens the info app. The wallpapers were made using a simulated environment.
I added an OS info page to settings, made a calculator app and a turbowarp packager app...
|
1792835302.284366
|
1792921702.284366
|
|
13129
|
Moondew Mountains by @samriddhjoneja | Stardance
|
samriddhjoneja
|
2
|
14.0
|
59
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-01T17:17:18Z", "hours": 2.0, "multiplier": 5.52, "payout": 13, "blessing": "neutral", "text": "I made an rpg game . WASD or arrow keys to move, slay all the slimes in all the levels to win. the slimes might drop health. Added a main menu and made slimes more dangerous and fixed some bugs", "repo": "https://github.com/sj6258/Moondew--Mountains", "demo": "https://sj6258.itch.io/moondew-mountains"}, {"ship_num": 2, "ts": "2026-08-27T17:39:36Z", "hours": 12.0, "multiplier": 7.83, "payout": 46, "blessing": "neutral", "text": "I made an RPG game with cute retro graphics. The part which was really challenging and which i am proud of is making the collisions work for the enemy and the HUD heart health display system. WASD to move and E to attack. The goal is to eliminate all the enemies on all 3 levels", "repo": "https://github.com/sj6258/Moondew--Mountains", "demo": "https://sj6258.itch.io/moondew-mountains"}]...
|
[{"post_id": 59696, "ts": "202 [{"post_id": 59696, "ts": "2026-09-01T16:53:57Z", "hours": 2.3514, "text": "Made a Main Menu screen with a settings menu where you can control volume and adjust fullscreen Also changed enemy behaviour and made it more menacing. scaled it up and increase its sight. fixed a bug where the health wouldn’t get dropped correctly when enemy is killed"}, {"post_id": 55669, "ts": "2026-08-27T17:05:00Z", "hours": 0.8497, "text": "Designed th e health mechanics for the player Used the depiction of 5 hearts on the HUD for the player health where each half heart gets taken away for each slime hit. Fixed a bug where the player would get heart after the slime was defeated The slimes now have a 50 percent chance to drop a heart Finally finished my game"}, {"post_id": 55034, "ts": "2026-08-26T13:49:14Z", "hours": 1.3253, "text": "Made the health system for the player where the health gets reduced when damaged by a slime. Health does not regenerate when changing levels also added the UI for health as 5 hearts which deplete accordingly."}, {"post_id": 53721, "ts": "2026-08-24T12:02:27Z", "hours": 1.9056, "text": "Created the transitions between the levels and scenes so that when the player dies the screen fades away and restarts from level 1 Made the player death animation and coded it in the game Fixed a bug where the bridge in level 3 was not working properly Fixed another bug where the players health would remain the same after death and respawn. Added variables and elements for players health Also fixed the player taking damage sound"}, {"post_id": 48052, "ts": "2026-08-16T10:28:10Z", "hours": 1.0256, "text": "Completed Level design made level 2 and level 3. Also made transitions using gdscript and preload cmd. Finished combat mechanics only player health and slime damage is left fixed a bug where it wouldn’t changed scenes or get back to the root scene completed the levels by using a root scene and making inherited scenes . added a bridge sprite to the game"}, {"post_id": 47557, "ts": "2026-08-15T15:11:11Z", "hours": 1.0408, "text": "Started on level 2 and level 3 inherited from root level, made a change in scene transitions so that it changes it automatically using the level no. as int variable Changed Enemy behaviour and increased the detection range Fixed Combat bugs and the enemy would be thrown in the opposite direction"}, {"post_id": 46485, "ts": "2026-08-13T18:36:37Z", "hours": 2.235, "text": "Finished making the player and added a camera that moves with the player with limits. Made the root level from which scenes will be inherited and added overlay decoration Added Y-sorting so that the game feels 3D and normal Fixed collisions for slimes and decorations and also added world borders Fixed some bugs in combat and movement mechanics"}, {"post_id": 9489, "ts": "2026-06-15T20:49:00Z", "hours": 1.1489, "text": "Connected the signals for detection and attack Added attack mechanics to the player so now the player hits the slime and it takes damage and gets pushed back Added health to slime so that it plays destroyed animation after getting hit a few times and evaporates from the game"}, {"post_id": 4984, "ts": "2026-06-08T17:09:10Z", "hours": 2.0567, "text": "Started working on a top down role playing game with 3 levels and slimes as enemies to deal with. Imported the assets Added player and enemy sprites Made the animations for the player and sprites Added collisions and detection box"}]...
|
Title: Moondew Mountains by @samriddhjoneja | Star Title: Moondew Mountains by @samriddhjoneja | Stardance
Devlogs:
Started working on a top down role playing game with 3 levels and slimes as enemies to deal with. Imported the assets Added player and enemy sprites Made the animations for the player and sprites Added collisions and detection box
Connected the signals for detection and attack Added attack mechanics to the player so now the player hits the slime and it takes damage and gets pushed back Added health to slime so that it plays destroyed animation after getting hit a few times and evaporates from the game
Finished making the player and added a camera that moves with the player with limits. Made the root level from which scenes will be inherited and added overlay decoration Added Y-sorting so that the game feels 3D and normal Fixed collisions for slimes and decorations and also added world borders Fixed some bugs in combat and movement mechanics
Started on level 2 and level 3 inherited from root level, made a change in scene transitions so that it changes it automatically using the level no. as int variable Changed Enemy behaviour and increased the detection range Fixed Combat bugs and the enemy would be thrown in the opposite direction
Completed Level design made level 2 and level 3. Also made transitions using gdscript and preload cmd. Finished combat mechanics only player health and slime damage is left fixed a bug where it wouldn’t changed scenes or get back to the root scene completed the levels by using a root scene and making inherited scenes . added a bridge sprite to the game
Created the transitions between the levels and scenes so that when the player dies the screen fades away and restarts from level 1 Made the player death animation and coded it in the game Fixed a bug where the bridge in level 3 was not working properly Fixed another bug where the players health would remain the same after death and respawn. Added variables and elements for players health Also fixed the player taking damage sound
Made the health system for the player where the health gets reduced when damaged by a slime. Health does not regenerate when changing levels also added the UI for health as 5 hearts which deplete accordingly.
Designed th e health mechanics for the player Used the depiction of 5 hearts on the HUD for the player health where each half heart gets taken away for each slime hit. Fixed a bug where the player would get heart after the slime was defeated The slimes now have a 50 percent chance to drop a heart Finally finished my game
Made a Main Menu screen with a settings menu where you can control volume and adjust fullscreen Also changed enemy behaviour and made it more menacing. scaled it up and increase its sight. fixed a bug where the health wouldn’t get dropped correctly when enemy is killed
Ships:
I made an RPG game with cute retro graphics. The part which was really challenging and which i am proud of is making the collisions work for the enemy and the HUD heart health display system. WASD to move and E to attack. The goal is to eliminate all the enemies on all 3 levels
I made an rpg game . WASD or arrow keys to move, slay all the slimes in all the levels to win. the slimes might drop health. Added a main menu and made slimes more dangerous and fixed some bugs...
|
1792838976.4092495
|
1792925376.4092495
|
|
13370
|
Pi WebOS by @pi | Stardance
|
pi
|
2
|
15.0
|
22
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T21:29:52Z", "hours": 6.0, "multiplier": 4.0, "payout": 22, "blessing": "neutral", "text": "Welcome to Pi WebOS! This is my submission to the WebOS 2 Mission. I’ve created a paper-themed WebOS with many, many features, ranging from a mini browser to tiny micro-interactions like double clicking the title bar, or window positions being persistent. Made with pure HTML, CSS, and JS. The project has a built in, intuitive walkthrough, but I’ll also provide a feature list here. You can also watch the short demo attached (also visible on the README). Features Moveable, resizable, closable windows Window positions save on reload Correct Z ordering after opening a page Draggable files/apps on desktop [NEW] Double click menu bar to fullscreen window Window cannot leave desktop Window snaps back into frame Multiple Apps Text Documents (like this one!) (Mostly) Functional Browser Notes App Settings App [NEW] Menu bar Page Selector Fullscreen OS Browser/OS detection Links that open windows in the OS Keyboard shortcuts (Esc, Shift + Esc, Cmd + Z) [NEW] Customizable themes through the Settings app [NEW]", "repo": "https://github.com/anagram-of-pi/web-os-mission", "demo": "https://pi-os-mission.netlify.app"}, {"ship_num": 2, "ts": "2026-06-09T19:12:24Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is Pi WebOS, a website that mimics the look and feel of a OS with moveable, resizable, and closable windows that are both responsive and smooth. There are multiple apps, including a bare bones web browser! The website has many small quality of life features, such as windows snapping back into the desktop and windows being preserved on reload. It provides an intuitive walkthrough of almost every part of the OS and a feature list describing both the large things (like windows and apps) and the small QOL things (like links that open windows). This project was largely to improve my comfortability with JavaScript and CSS No AI was used to generate any code or text. AI was used to help debug and research.", "repo": "https://github.com/anagram-of-pi/web-os-mission", "demo": "https://pi-os-mission.netlify.app"}]...
|
[{"post_id": 17103, "ts": "202 [{"post_id": 17103, "ts": "2026-06-27T19:29:43Z", "hours": 0.9942, "text": "Custom themes! Sorry, this is a short devlog, but I just finished the tedious task of letting the JS update every color in the CSS via CSS variables. Luckily, I had thought ahead and made everything in the CSS already use a variable but there’s a lot of hardcoded values I had to manually input."}, {"post_id": 17060, "ts": "2026-06-27T18:15:07Z", "hours": 2.6006, "text": "Draggable files on the desktop :) . I really like how smooth and bouncy the animation is, and I’m really proud of how well I fit the files in with the rest of the theme. Double clicking gives a really satisfying fluid motion. Also, they open the windows :) . Sidenote, I added keyboard shortcuts! Notably, esc to close windows and cmd z to undo the closing. I really had to balance the command z because I didn’t want it to undo writing text, but I also didn’t want to completely disable command z on my page. text"}, {"post_id": 5970, "ts": "2026-06-10T00:25:40Z", "hours": 1.9894, "text": "Learned another basic JavaScript principle again (unpacking multiple value) :) Meanwhile, I could do this ten times faster in Python without having to look something up every minute or so."}, {"post_id": 5764, "ts": "2026-06-09T17:45:23Z", "hours": 2.4408, "text": "Browser in a website = (Pi WebOS)²"}, {"post_id": 5646, "ts": "2026-06-09T14:55:57Z", "hours": 2.4281, "text": "Behind the scenes there’s a lot that I’ve done. Mainly, the window content is actually styled (and a few new windows have been added!), but there a a ton of small things that had to get done first. There is a working (kind of) web browser that displays the url in an iframe, which is really cool, and actually not too difficult. It can’t display all sites because many popular sites intentionally disable being shown in an iframe, but it can go to hackclub.com."}, {"post_id": 5321, "ts": "2026-06-09T01:50:09Z", "hours": 2.7525, "text": "I’ve added more windows and some other miscellaneous features. There was a lot of debugging, and coincidentally also a lot of forgotten keywords, like “let”. I’m too used to Python. I haven’t styled the windows yet, though."}, {"post_id": 5231, "ts": "2026-06-08T22:50:24Z", "hours": 1.6692, "text": "Starting the WebOS basic mission. I have windows displaying, moving, and closable. Next is adding content to the windows, but also making the nav menu do stuff. I had a weird bug with the rem unit changing based on the parent height. If you know advanced CSS, you’ll understand why that’s strange :)"}]...
|
Title: Pi WebOS by @pi | Stardance
Devlogs:
Start Title: Pi WebOS by @pi | Stardance
Devlogs:
Starting the WebOS basic mission. I have windows displaying, moving, and closable. Next is adding content to the windows, but also making the nav menu do stuff. I had a weird bug with the rem unit changing based on the parent height. If you know advanced CSS, you’ll understand why that’s strange :)
I’ve added more windows and some other miscellaneous features. There was a lot of debugging, and coincidentally also a lot of forgotten keywords, like “let”. I’m too used to Python. I haven’t styled the windows yet, though.
Behind the scenes there’s a lot that I’ve done. Mainly, the window content is actually styled (and a few new windows have been added!), but there a a ton of small things that had to get done first. There is a working (kind of) web browser that displays the url in an iframe, which is really cool, and actually not too difficult. It can’t display all sites because many popular sites intentionally disable being shown in an iframe, but it can go to hackclub.com.
Browser in a website = (Pi WebOS)²
Learned another basic JavaScript principle again (unpacking multiple value) :) Meanwhile, I could do this ten times faster in Python without having to look something up every minute or so.
Draggable files on the desktop :) . I really like how smooth and bouncy the animation is, and I’m really proud of how well I fit the files in with the rest of the theme. Double clicking gives a really satisfying fluid motion. Also, they open the windows :) . Sidenote, I added keyboard shortcuts! Notably, esc to close windows and cmd z to undo the closing. I really had to balance the command z because I didn’t want it to undo writing text, but I also didn’t want to completely disable command z on my page. text
Custom themes! Sorry, this is a short devlog, but I just finished the tedious task of letting the JS update every color in the CSS via CSS variables. Luckily, I had thought ahead and made everything in the CSS already use a variable but there’s a lot of hardcoded values I had to manually input.
Ships:
This is Pi WebOS, a website that mimics the look and feel of a OS with moveable, resizable, and closable windows that are both responsive and smooth. There are multiple apps, including a bare bones web browser! The website has many small quality of life features, such as windows snapping back into the desktop and windows being preserved on reload. It provides an intuitive walkthrough of almost every part of the OS and a feature list describing both the large things (like windows and apps) and the small QOL things (like links that open windows). This project was largely to improve my comfortability with JavaScript and CSS No AI was used to generate any code or text. AI was used to help debug and research.
Welcome to Pi WebOS! This is my submission to the WebOS 2 Mission. I’ve created a paper-themed WebOS with many, many features, ranging from a mini browser to tiny micro-interactions like double clicking the title bar, or window positions being persistent. Made with pure HTML, CSS, and JS. The project has a built in, intuitive walkthrough, but I’ll also provide a feature list here. You can also watch the short demo attached (also visible on the README). Features Moveable, resizable, closable windows Window positions save on reload Correct Z ordering after opening a page Draggable files/apps on desktop [NEW] Double click menu bar to fullscreen window Window cannot leave desktop Window snaps back into frame Multiple Apps Text Documents (like this one!) (Mostly) Functional Browser Notes App Settings App [NEW] Menu bar Page Selector Fullscreen OS Browser/OS detection Links that open windows in the OS Keyboard shortcuts (Esc, Shift + Esc, Cmd + Z) [NEW] Customizable themes through the Settings app [NEW]...
|
1792824760.2799182
|
1792911160.2799182
|
|
13380
|
Planets flashcards & quiz by @Astronaut_ag | S Planets flashcards & quiz by @Astronaut_ag | Stardance...
|
Astronaut_ag
|
2
|
7.0
|
84
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T20:16:12Z", "hours": 1.0, "multiplier": 9.74, "payout": 8, "blessing": "neutral", "text": "This is a website about the Objects in our Solar System! People can click through 3 different flashcard sets to gain knowledge! Please suggest any changes/requests you have on this website! Thanks!!", "repo": "https://github.com/AstronautAG/planets-cards", "demo": "https://astronautag.github.io/planets-cards/"}, {"ship_num": 2, "ts": "2026-06-24T21:22:59Z", "hours": 6.0, "multiplier": 13.11, "payout": 76, "blessing": "neutral", "text": "This is a cool, interactive, and fun website where people can flip through flashcards to learn about space with a quiz for people to test their knowledge!", "repo": "https://github.com/AstronautAG/planets-cards", "demo": "https://astronautag.github.io/planets-cards/"}]...
|
[{"post_id": 30337, "ts": "202 [{"post_id": 30337, "ts": "2026-07-17T20:14:18Z", "hours": 0.8511, "text": "Devlog #4: Made user interface better! :D Special Thanks: First, I would like to thank everyone who reviewed my project and gave me the wonderful feedback. Really appreciate it!! Overview: Significantly upgraded user interface so the buttons stay in roughly the same spot and moved them inside the flashcards My website is a website that has flashcards for people to learn about cool space facts, and there is a quiz at the bottom for people to test their skills! Challenges: The biggest challenge for me this time was how to keep the buttons in the same spot. I had to look up a lot of CSS stuff on websites like w3schools, but figuring it out was the best part! Lessons Learned: Learn a lot from sites like w3schools!! Play around with CSS elements until you get it to look how you want to Looking forward: I hope to publish this on GitHub as a new update, thanks for following my project!!"}, {"post_id": 14700, "ts": "2026-06-23T21:57:58Z", "hours": 1.3939, "text": "Devlog #3: I updated the User Interface which looks MUCH better (after some troubleshooting) :D Overview: Significantly upgraded user interface so it’s actually interactive My website is a website that has flashcards for people to learn about cool space facts, and there is a quiz at the bottom for people to test their skills! Challenges: The biggest challenge for me this time was the User Interface. Before, the UI was pretty basic, and so the HTML and JavaScript had pretty simple variables and id’s for the styling in the CSS. But, when I went to upgrade, I had to change a bunch of variables, but I got it done. One challenge in particular was adding a progress bar to my quiz. Since I already had a structure inside my HTML and CSS, putting it there was not a problem. I thought I had it in the right spot for JavaScript. I was wrong. I spent 20 minutes debugging, then finally found out that it was in the wrong spot the whole time. It was in the function nextQuestion(index) instead of showQuestion(index). Lessons Learned: Keep a close eye on which function is which and keep code organized Debug carefully and don’t mix up different parts of the code Looking forward: I hope to publish this on GitHub now, thanks for following my project!!"}, {"post_id": 13404, "ts": "2026-06-21T23:04:32Z", "hours": 1.0369, "text": "Devlog #2: In this update, I added another flashcard set to my flashcard and quiz website. I edited the HTML, CSS, and JavaScript to make sure that it mirrored the other sets. One challenge with this was to keep each of the information on each flashcard separate. Each flashcard has an image, a title, and a short description specific to the object on the flashcard. Additionally, I had to add another function in JavaScript, but (as I mentioned in the last update), I kept the variables consistent across the functions. One thing I learned from today’s coding is that if the layout is kept consistent across the different flashcard sets and in CSS, it is easier to navigate and make more flashcard sets. In the next update, I plan to update the user interface to level up the experience. Thanks and see you in the next update!"}, {"post_id": 12799, "ts": "2026-06-20T22:40:18Z", "hours": 3.3878, "text": "Devlog #1: In this update, on my flashcard website, I added two flashcard sets. I also updated the user interface significantly, and I added a two-question quiz at the bottom of the page. I upgraded my CSS to show “blocks” (the flashcards) to make sure that the cards that were supposed to be hidden were hidden until the buttons were clicked. I also upgraded how the website looks by adding hover features as well as changing the background color and adding images to each flashcard. Overall, my biggest challenge was keeping ID’s and variables sorted from HTML to JavaScript for each of the flashcard sets. I solved this problem by sorting out each part of my JS into two categories for each set, changing the variable names to ones that made sense and were easy to keep track of (set1, container1, etc.), and finally updating the HTML with these new variables. I learned that keeping code organized from the start prevents problems later! I also learned the debugging process through the console in the website preview on my device. Another thing I learned is that divs in HTML can be extremely useful, especially when there are very similar elements on the page. For the future, I hope to add another flashcard set. Thanks and see you in the next update!"}]...
|
Title: Planets flashcards & quiz by @Astronaut Title: Planets flashcards & quiz by @Astronaut_ag | Stardance
Devlogs:
Devlog #1: In this update, on my flashcard website, I added two flashcard sets. I also updated the user interface significantly, and I added a two-question quiz at the bottom of the page. I upgraded my CSS to show “blocks” (the flashcards) to make sure that the cards that were supposed to be hidden were hidden until the buttons were clicked. I also upgraded how the website looks by adding hover features as well as changing the background color and adding images to each flashcard. Overall, my biggest challenge was keeping ID’s and variables sorted from HTML to JavaScript for each of the flashcard sets. I solved this problem by sorting out each part of my JS into two categories for each set, changing the variable names to ones that made sense and were easy to keep track of (set1, container1, etc.), and finally updating the HTML with these new variables. I learned that keeping code organized from the start prevents problems later! I also learned the debugging process through the console in the website preview on my device. Another thing I learned is that divs in HTML can be extremely useful, especially when there are very similar elements on the page. For the future, I hope to add another flashcard set. Thanks and see you in the next update!
Devlog #2: In this update, I added another flashcard set to my flashcard and quiz website. I edited the HTML, CSS, and JavaScript to make sure that it mirrored the other sets. One challenge with this was to keep each of the information on each flashcard separate. Each flashcard has an image, a title, and a short description specific to the object on the flashcard. Additionally, I had to add another function in JavaScript, but (as I mentioned in the last update), I kept the variables consistent across the functions. One thing I learned from today’s coding is that if the layout is kept consistent across the different flashcard sets and in CSS, it is easier to navigate and make more flashcard sets. In the next update, I plan to update the user interface to level up the experience. Thanks and see you in the next update!
Devlog #3: I updated the User Interface which looks MUCH better (after some troubleshooting) :D Overview: Significantly upgraded user interface so it’s actually interactive My website is a website that has flashcards for people to learn about cool space facts, and there is a quiz at the bottom for people to test their skills! Challenges: The biggest challenge for me this time was the User Interface. Before, the UI was pretty basic, and so the HTML and JavaScript had pretty simple variables and id’s for the styling in the CSS. But, when I went to upgrade, I had to change a bunch of variables, but I got it done. One challenge in particular was adding a progress bar to my quiz. Since I already had a structure inside my HTML and CSS, putting it there was not a problem. I thought I had it in the right spot for JavaScript. I was wrong. I spent 20 minutes debugging, then finally found out that it was in the wrong spot the whole time. It was in the function nextQuestion(index) instead of showQuestion(index). Lessons Learned: Keep a close eye on which function is which and keep code organized Debug carefully and don’t mix up different parts of the code Looking forward: I hope to publish this on GitHub now, thanks for following my project!!
Devlog #4: Made user interface better! :D Special Thanks: First, I would like to thank everyone who reviewed my project and gave me the wonderful feedback. Really appreciate it!! Overview: Significantly upgraded user interface so the buttons stay in roughly the same spot and moved them inside the flashcards My website is a website that has flashcards for people to learn about cool space facts, and there is a quiz at the bottom for people to test their skills! Challenges: The biggest challenge for me this time was how to keep the buttons in the same spot. I had to look up a lot of CSS stuff on websites like w3schools, but figuring it out was the best part! Lessons Learned: Learn a lot from sites like w3schools!! Play around with CSS elements until you get it to look how you want to Looking forward: I hope to publish this on GitHub as a new update, thanks for following my project!!
Ships:
This is a cool, interactive, and fun website where people can flip through flashcards to learn about space with a quiz for people to test their knowledge!
This is a website about the Objects in our Solar System! People can click through 3 different flashcard sets to gain knowledge! Please suggest any changes/requests you have on this website! Thanks!!...
|
1792835708.6064029
|
1792922108.6064029
|
|
13397
|
Portfolio by @AvaR | Stardance
|
AvaR
|
2
|
5.0
|
7
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T23:39:22Z", "hours": 1.0, "multiplier": 6.74, "payout": 7, "blessing": "neutral", "text": "Made a Coding Portfolio for myself which I’ve been meaning to do for a while now. In the future I will add images, and more projects :) Features: Separate Pages - Home, About Me, Projects Moveable Windows - Project Details Only Movable Windows Can Be Expanded and Minimized Scrolling available on minimized movable windows, and easily able to close movable windows whether expanded or minimized Working Contact Me Form that connects to my email Simplistic Navigation Bar", "repo": "https://github.com/AvaLR/WebOs-Project", "demo": "https://avalr.github.io/Coding-Portfolio/index.html"}, {"ship_num": 2, "ts": "2026-06-11T15:56:33Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a eportfolio page that I’ve been meaning to make for a while now. I’m really happy with how it turned out and I will definitely be adding new pages, projects, etc. in the future as it will change with what I do. I hope you enjoy how it looks and works. Below I added an image of my favorite feature. I created a similar one in 8th grade in code.org. It didn’t work though due to it not being able/not knowing how to attach it to my email. So i’m really happy to have a working version!", "repo": "https://github.com/AvaLR/WebOs-Project", "demo": "https://avalr.github.io/Coding-Portfolio/index.html"}]...
|
[{"post_id": 24418, "ts": "202 [{"post_id": 24418, "ts": "2026-07-07T23:26:11Z", "hours": 1.0558, "text": "Added moveable windows for project details that can scroll, expand/retract and be closed with ease :)"}, {"post_id": 6898, "ts": "2026-06-11T15:45:10Z", "hours": 1.0103, "text": "FINISHED!!! I love how it looks I will continue to add more projects and other updates to make it even BETTER! This is was a great relaxing project for me!"}, {"post_id": 6420, "ts": "2026-06-10T19:57:30Z", "hours": 1.8225, "text": "Got basically everything done! I need to add more projects (might do that as part of WebOS 2 tho so I can go ahead and ship this ) I also added a lovely form and attached it to formspree which was suprisingly easier than I had thought!"}, {"post_id": 5938, "ts": "2026-06-09T22:41:53Z", "hours": 1.3292, "text": "Started my own personal Coding portfolio through github codespaces. I’ve worked on it a LOT since this last work session but forgot to use lapse. So here is this update and then I’ll show the newest version in a little bit when I post another Devlog+. Below is a sneak peek. :)"}]...
|
Title: Portfolio by @AvaR | Stardance
Devlogs:
St Title: Portfolio by @AvaR | Stardance
Devlogs:
Started my own personal Coding portfolio through github codespaces. I’ve worked on it a LOT since this last work session but forgot to use lapse. So here is this update and then I’ll show the newest version in a little bit when I post another Devlog+. Below is a sneak peek. :)
Got basically everything done! I need to add more projects (might do that as part of WebOS 2 tho so I can go ahead and ship this ) I also added a lovely form and attached it to formspree which was suprisingly easier than I had thought!
FINISHED!!! I love how it looks I will continue to add more projects and other updates to make it even BETTER! This is was a great relaxing project for me!
Added moveable windows for project details that can scroll, expand/retract and be closed with ease :)
Ships:
I created a eportfolio page that I’ve been meaning to make for a while now. I’m really happy with how it turned out and I will definitely be adding new pages, projects, etc. in the future as it will change with what I do. I hope you enjoy how it looks and works. Below I added an image of my favorite feature. I created a similar one in 8th grade in code.org. It didn’t work though due to it not being able/not knowing how to attach it to my email. So i’m really happy to have a working version!
Made a Coding Portfolio for myself which I’ve been meaning to do for a while now. In the future I will add images, and more projects :) Features: Separate Pages - Home, About Me, Projects Moveable Windows - Project Details Only Movable Windows Can Be Expanded and Minimized Scrolling available on minimized movable windows, and easily able to close movable windows whether expanded or minimized Working Contact Me Form that connects to my email Simplistic Navigation Bar...
|
1792835351.7952118
|
1792921751.7952118
|
|
13455
|
My first slack bot! by @rehanhabbu | Stardance
|
rehanhabbu
|
2
|
2.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T19:14:51Z", "hours": 1.0, "multiplier": 1.13, "payout": 1, "blessing": "neutral", "text": "Slack Bot for StarDance: A custom Slack bot built for Stardance using Node.js, Slack’s Bolt framework, and Socket Mode. Mostly just fun commands. Commands /rsb-ping - Check the latency between your machine and Slack. /rsb-quest - Pulls a random side quest from the Bored API /rsb-coinflip - Flips a digital coin to settle arguments instantly. /rsb-countdown [YYYY-MM-DD] - Counts down the exact number of days left until the deadline. /rsb-help - Lists everything this construct can do. Also include QWEN2.0:5b AI model via DM’s to the bot, although it is extremely slow as it is running CPU only on nest. (Like VERY slow. I said hi at 11:50 and it responded at 12:44)", "repo": "https://github.com/Catsarepro21/Hackclubslacbot", "demo": "https://hackclub.enterprise.slack.com/archives/C08E083LZ9A"}, {"ship_num": 2, "ts": "2026-06-10T16:05:33Z", "hours": 1.0, "multiplier": 1.5, "payout": 1, "blessing": "neutral", "text": "I made a Slack Bot to do fun little commands. Things such as a coin flip, a time-till a date command, and a quest command that gives the user a random quest!", "repo": "https://github.com/Catsarepro21/Hackclubslacbot", "demo": "https://hackclub.enterprise.slack.com/archives/C08E083LZ9A"}]...
|
[{"post_id": 6904, "ts": "2026 [{"post_id": 6904, "ts": "2026-06-11T16:03:26Z", "hours": 0.6814, "text": "Fixed the demo URL by allowing direct messages to the bot and using that. Also because I can DM the bot now, I added an OLLAMA model running QWEN2:5b, although because it it running in CPU only mode it is extremally slow"}, {"post_id": 6292, "ts": "2026-06-10T16:04:24Z", "hours": 0.3361, "text": "Hosted the bot on nest and tested, works great!"}, {"post_id": 5929, "ts": "2026-06-09T22:08:02Z", "hours": 0.6567, "text": "Made the slack-bot and added some fun commands that I like, waiting on approval of Nest to finish this project!"}]...
|
Title: My first slack bot! by @rehanhabbu | Starda Title: My first slack bot! by @rehanhabbu | Stardance
Devlogs:
Made the slack-bot and added some fun commands that I like, waiting on approval of Nest to finish this project!
Hosted the bot on nest and tested, works great!
Fixed the demo URL by allowing direct messages to the bot and using that. Also because I can DM the bot now, I added an OLLAMA model running QWEN2:5b, although because it it running in CPU only mode it is extremally slow
Ships:
I made a Slack Bot to do fun little commands. Things such as a coin flip, a time-till a date command, and a quest command that gives the user a random quest!
Slack Bot for StarDance: A custom Slack bot built for Stardance using Node.js, Slack’s Bolt framework, and Socket Mode. Mostly just fun commands. Commands /rsb-ping - Check the latency between your machine and Slack. /rsb-quest - Pulls a random side quest from the Bored API /rsb-coinflip - Flips a digital coin to settle arguments instantly. /rsb-countdown [YYYY-MM-DD] - Counts down the exact number of days left until the deadline. /rsb-help - Lists everything this construct can do. Also include QWEN2.0:5b AI model via DM’s to the bot, although it is extremely slow as it is running CPU only on nest. (Like VERY slow. I said hi at 11:50 and it responded at 12:44)...
|
1792839147.4693441
|
1792925547.4693441
|
|
13539
|
MewoOS by @subhansh | Stardance
|
|
2
|
70.0
|
497
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-09T14:12:55Z", "hours": 56.0, "multiplier": 19.42, "payout": 497, "blessing": "neutral", "text": "Made the most productive web operating system ever created comes with a browser, terminal, music player, gallery, customizable wallpapers, draggable windows, and doomscroll — because no operating system is complete without destroying your attention span… built with react, typescript, and questionable life choices :3 new features :- functional file system voice assistant with vocal modulation and os control 4 desktop workspace mewo store (more apps that u can actually install !!)", "repo": "https://github.com/subhansh-dev/MewoOS", "demo": "https://mewoos.vercel.app"}, {"ship_num": 2, "ts": "2026-06-15T20:05:47Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Made the most productive web operating system ever created comes with a browser, terminal, music player, gallery, customizable wallpapers, draggable windows, and doomscroll — because no operating system is complete without destroying your attention span and we must scroll and larp… built with react, typescript, and questionable life choices :3", "repo": "https://github.com/subhansh-dev/MewoOS", "demo": "https://mewoos.vercel.app"}]...
|
[{"post_id": 25288, "ts": "202 [{"post_id": 25288, "ts": "2026-07-09T14:01:57Z", "hours": 5.5736, "text": "final devlog for mewo os 🍓😺 okay so guess wat… i was debugging mewo again and again for a bug that wasnt even real 💔… what happened is.. i opened mewo saw that nothing is functional and i was like everything looks gud why its not wokring… and then i saw my mails and found out that vercel and supabase paused my web cause i ran out of the free tier 💔😭… anyways aside from this i added ts js for the vibes lol Window Switcher Open 2+ apps (e.g. Calculator + Terminal + Notes) Press Ctrl+Shift+A — overlay appears with all open windows Press Tab to cycle forward, Shift+Tab to cycle backward Release Shift or click a window to switch to it Escape to cancel also i did optimized mewo earlier but it was still lagging a bit cause of overlaying animations and effects so i fixed that too ts time redeployed on vercel again!! try it out ^-^ :- https://mewoos.vercel.app"}, {"post_id": 24814, "ts": "2026-07-08T16:49:19Z", "hours": 26.8408, "text": "MewoOS Devlog #8 🍓😺 Pixel Cat Redesign redesigned the pixel cat that follows ur cursor around the desktop. she looks way better now ngl…more detailed sprite, smoother animation, and shes silver now which fits the dark theme way more. u can click her to toggle between following ur cursor or staying pinned. small thing but it makes the whole desktop feel alive fr Meo Can Control The OS (waw..dem ) this ones big. meo can now literally control the whole os. tell her “open the calculator” and she opens it. “open the terminal” — done. “minimize all windows” — gone. she parses whatever u say and does OS actions through action tags. supports open, close, min, max, focus, minimizeAll, closeAll. feels like ur actually talking to the os not just a chatbot Voice & Emotions Rework improved meos voice n emotions big time. she now detects what ur saying and adjusts — happy, excited, concerned, playful, calm, tired, urgent. each one has its own rate, pitch, personality. the voice sounds way less robotic now and more natural. also fixed that annoying thing where the reply would show up in the chat 4 seconds before the tts spoke it. now they happen at the same time so its smooth 4 Desktop Workspaces added a desktop workspace system. u get 4 separate desktops switch between them with ctrl 1 2 3 4. each desktop has its own windows so u can have coding stuff on desktop 1 music and browser on desktop 2 etc. ctrl left right cycles between them. feels like a real os now not just a web page Mewo Store(new feature…yey) built a full app store for mewoos. premium dock style icons glassmorphism ui category filters search the works. and the apps u can actually install and they actually work when u open them Installable Apps weather — 5 cities 7 day forecast animated temp bars humidity wind stats kanban board — drag and drop 3 columns colored tags 7 pre loaded tasks focus timer — working pomodoro timer svg ring progress 3 modes focus short long session stats type racer — typing speed test real time character highlighting green red wpm calc 8 sentences paint studio — actual working canvas color picker brush size clear button u can draw on it image editor — 8 filter presets original warm cool b&w vintage vivid fade noir brightness contrast saturation sliders uses a real image Store Features when u install an app theres a progress bar animation then the app icon shows up in the dock with a premium dock style icon. and u can uninstall apps too removes from dock and closes any open windows…. mewo meow mewo"}, {"post_id": 22867, "ts": "2026-07-05T14:22:43Z", "hours": 23.1842, "text": "OKAAAA WE’RE BACCKKK.. aaa so i did all of the basic stuffs in the webos1 (mandatory features, basic glass morph for the windows, parallax effects on the wallpaper etc) so now in the part 2… its time to take this further… so i started with fixing the lag and some minor bugs and then we redesigned every window and dock with an aurora tint and enhanced glassmorphism with glare and then came the features that i added… i mean they are not complete but the base is ready the dock got upgraded added a Files app(new feature..yey) to the dock with a sky blue gradient icon. the file manager opens with a proper glassmorphic window. breadcrumbs for navigation, grid and list views, right click menus, inline rename… the whole deal. double click a file and it opens in an editor with Ctrl+S to save. tab inserts spaces. its got the mewoOS glass treatment on everything what is meo (new feature…yey) so meo is basically the AI assistant that lives inside MewoOS. think of it like Siri but actually useful and with personality….a menace on silicon. u tap the orb, speak to her, and she responds. she can open apps, close them, minimize, maximize — basically control the whole OS with voice. she has emotions too — happy, excited, concerned, playful, calm, tired, urgent — and her voice changes based on that. she roasts u but its from love. like a best friend who also happens to be an AI running inside an operating system the whole thing runs on Gemini — both the brain (chat) and the voice (TTS). she uses Gemini 2.5 Flash for thinking and Gemini 2.5 Flash Preview TTS for speaking back to u with different voices depending on her mood now the part that took forever — making meo actually work bruh so making meo work took some work… idk how many times i debugged for her to actually listen to me the STT problem so the original problem was the Web Speech API — that thing is just unreliable as hell. it only works in Chrome, needs HTTPS or localhost, and half the time it just doesnt fire onresult at all. like u speak, it says “listening…”, then nothing happens. the text never shows up. no transcription, no response, nothing i tried fixing it multiple times — started recognition immediately instead of waiting for mic permission, added error handling, changed the flow… still broken. the Web Speech API is just built different (bad different) so i ripped it out completely. replaced it with MediaRecorder + Gemini for transcription. now when u tap the orb it records audio using the MediaRecorder API, sends the audio blob to Gemini, and Gemini transcribes it. way more reliable because it doesnt depend on browser-specific speech engines. it just works the gemini model error THEN the gemini model error… we had the wrong model names everywhere lol the chat model was set to gemini-3.5-flash which literally doesnt exist the TTS was gemini-2.5-flash-preview-tts which kept failing silently and falling back to browser TTS the STT was using gemini-2.0-flash which was mid so we updated everything to the right models: chat: gemini-2.5-flash (the actual latest flash model) TTS: gemini-2.5-flash-preview-tts (the dedicated TTS model with audio output) STT: gemini-2.5-flash (for transcribing the recorded audio) and added detailed console logging so we can actually see whats happening when things break. because before it was just silently falling back to browser TTS and we had no idea why the final pipeline: u tap the orb MediaRecorder starts capturing audio from the mic waveforms animate while u speak u tap again to stop audio blob gets sent to Gemini for transcription transcription goes to Gemini for the actual response Gemini responds with text + emotion response gets spoken back using Gemini TTS with the right voice"}, {"post_id": 6232, "ts": "2026-06-10T14:05:36Z", "hours": 3.2247, "text": "devlog#6 added a guide app and 3 new live wallpapers with parallax effect restyled dock and app icons a bit new songs and covers feature to resize window’s length and breadth Go check it out!! :3 its done now (hopefully, i dont want more bugs 💔✌) https://mewoos.vercel.app"}, {"post_id": 6116, "ts": "2026-06-10T09:02:37Z", "hours": 4.6342, "text": "devlog #5 waawaw so i did a complete ui uphaul and polished everything and then added that analog watch and calendar too. also add parallax effect for the wallpapers, then added 2 more songs and then updated the song covers too. then fixed alot of bugs and animation issues. added 3 more static wallpapers and 3 new live wallpapers (ima show that in the next devlog). and then i also added a cute pet which follows ur cursor and if u tap on it u can make her sit!!, tap again and she will start following ur cursor again. should i add more reels tho ? 🥀"}, {"post_id": 5782, "ts": "2026-06-09T18:11:43Z", "hours": 0.6644, "text": "the most app is finally here 😭😭🥀…. drumrolls DOOMSCROLL! 🥀… y a u can now watch 38 exclusive reels on MewoOS now (gonna add more later 😺) and then i added 3 static interactive bagrounds and now working on live wallpapers too andd thennn aaaa ye i added those good looking app icons created from figma and agagin fixed allat of bugs ofc 🥀…. then improved the animations and glass morphism effect and restyled all of the panels and basically the whole ui lol 😭…. and added more gud pics in the gallery and the song count in the music player app went from 6 to 20!! and yes they are real songs and not js some random ahh chimes lol anddddd aaa idk more… maybe that was it for this devlog holdup now lemme cook the livewallpapers and polish things up"}, {"post_id": 5745, "ts": "2026-06-09T17:25:41Z", "hours": 3.8269, "text": "devlog #3 - MewoOS Added a booting animation and fixed allat of bugs and improved dock , animations , and ui (will show these in the next devlog)"}, {"post_id": 5555, "ts": "2026-06-09T11:47:16Z", "hours": 0.9858, "text": "Devlog 2 — MewoOS yayyayayay its finally coming together… basic version is done now ive add some more features and apps and just polish the whole ui a bit too should i add an app for doomscrolling 🥀 ? anyways heres the details of what it has rn :- -added an iframe browser because the jam said “be creative” and my creativity said “put the entire internet inside a window inside a fake OS inside a browser.” it loads Wikipedia and GitHub reliably. most other sites block iframes so its basically a very expensive Wikipedia viewer. but it works and im counting it as a feature also the basic version of music player was alr done but my first thought was “the music player needs REAL music” — not some placeholder beeps, actual songs. so i set up yt-dlp and went on a downloading spree at unholy hours. we got Cruel Angel’s Thesis, YOASOBI’s Idol, Ado’s Usseewa, Night Dancer, Fly Me to the Moon, Feeling Good by Nina Simone, Chopin Ballade No.4 in G minor, Rachmaninoff Piano Concerto No.2 (the full 37MB concerto because i have no concept of file size restraint), Paganini Caprice No.24, and some jazz tracks for the cultured folks. HTML5 audio API handles all of it — play, pause, skip, progress bar, the whole thing. no npm packages, no dependencies, just vibes and tags the UI went through approximately 47 iterations of “is this too pink” vs “is this dark enough” — settled on a deep black (#0A0709) with sakura pink accents and floating ambient glow orbs that drift around the screen like little ghosts of my questionable design choices. windows have glass panels with backdrop blur, the dock has custom SVG icons (not emojis, im not a monster), and the whole thing radiates “what if a gothic cathedral had a kawaii phase” energy 💔💔"}, {"post_id": 5528, "ts": "2026-06-09T10:39:01Z", "hours": 0.6197, "text": "wawawa basic frontend almost done (js have to polish it now )"}]...
|
Title: MewoOS by @subhansh | Stardance
Devlogs:
w Title: MewoOS by @subhansh | Stardance
Devlogs:
wawawa basic frontend almost done (js have to polish it now )
Devlog 2 — MewoOS yayyayayay its finally coming together… basic version is done now ive add some more features and apps and just polish the whole ui a bit too should i add an app for doomscrolling 🥀 ? anyways heres the details of what it has rn :- -added an iframe browser because the jam said “be creative” and my creativity said “put the entire internet inside a window inside a fake OS inside a browser.” it loads Wikipedia and GitHub reliably. most other sites block iframes so its basically a very expensive Wikipedia viewer. but it works and im counting it as a feature also the basic version of music player was alr done but my first thought was “the music player needs REAL music” — not some placeholder beeps, actual songs. so i set up yt-dlp and went on a downloading spree at unholy hours. we got Cruel Angel’s Thesis, YOASOBI’s Idol, Ado’s Usseewa, Night Dancer, Fly Me to the Moon, Feeling Good by Nina Simone, Chopin Ballade No.4 in G minor, Rachmaninoff Piano Concerto No.2 (the full 37MB concerto because i have no concept of file size restraint), Paganini Caprice No.24, and some jazz tracks for the cultured folks. HTML5 audio API handles all of it — play, pause, skip, progress bar, the whole thing. no npm packages, no dependencies, just vibes and tags the UI went through approximately 47 iterations of “is this too pink” vs “is this dark enough” — settled on a deep black (#0A0709) with sakura pink accents and floating ambient glow orbs that drift around the screen like little ghosts of my questionable design choices. windows have glass panels with backdrop blur, the dock has custom SVG icons (not emojis, im not a monster), and the whole thing radiates “what if a gothic cathedral had a kawaii phase” energy 💔💔
devlog #3 - MewoOS Added a booting animation and fixed allat of bugs and improved dock , animations , and ui (will show these in the next devlog)
the most app is finally here 😭😭🥀…. drumrolls DOOMSCROLL! 🥀… y a u can now watch 38 exclusive reels on MewoOS now (gonna add more later 😺) and then i added 3 static interactive bagrounds and now working on live wallpapers too andd thennn aaaa ye i added those good looking app icons created from figma and agagin fixed allat of bugs ofc 🥀…. then improved the animations and glass morphism effect and restyled all of the panels and basically the whole ui lol 😭…. and added more gud pics in the gallery and the song count in the music player app went from 6 to 20!! and yes they are real songs and not js some random ahh chimes lol anddddd aaa idk more… maybe that was it for this devlog holdup now lemme cook the livewallpapers and polish things up
devlog #5 waawaw so i did a complete ui uphaul and polished everything and then added that analog watch and calendar too. also add parallax effect for the wallpapers, then added 2 more songs and then updated the song covers too. then fixed alot of bugs and animation issues. added 3 more static wallpapers and 3 new live wallpapers (ima show that in the next devlog). and then i also added a cute pet which follows ur cursor and if u tap on it u can make her sit!!, tap again and she will start following ur cursor again. should i add more reels tho ? 🥀
devlog#6 added a guide app and 3 new live wallpapers with parallax effect restyled dock and app icons a bit new songs and covers feature to resize window’s length and breadth Go check it out!! :3 its done now (hopefully, i dont want more bugs 💔✌) https://mewoos.vercel.app
OKAAAA WE’RE BACCKKK.. aaa so i did all of the basic stuffs in the webos1 (mandatory features, basic glass morph for the windows, parallax effects on the wallpaper etc) so now in the part 2… its time to take this further… so i started with fixing the lag and some minor bugs and then we redesigned every window and dock with an aurora tint and enhanced glassmorphism with glare and then came the features that i added… i mean they are not complete but the base is ready the dock got upgraded added a Files app(new feature..yey) to the dock with a sky blue gradient icon. the file manager opens with a proper glassmorphic window. breadcrumbs for navigation, grid and list views, right click menus, inline rename… the whole deal. double click a file and it opens in an editor with Ctrl+S to save. tab inserts spaces. its got the mewoOS glass treatment on everything what is meo (new feature…yey) so meo is basically the AI assistant that lives inside MewoOS. think of it like Siri but actually useful and with personality….a menace on silicon. u tap the orb, speak to her, and she responds. she can open apps, close them, minimize, maximize — basically control the whole OS with voice. she has emotions too — happy, excited, concerned, playful, calm, tired, urgent — and her voice changes based on that. she roasts u but its from love. like a best friend who also happens to be an AI running inside an operating system the whole thing runs on Gemini — both the brain (chat) and the voice (TTS). she uses Gemini 2.5 Flash for thinking and Gemini 2.5 Flash Preview TTS for speaking back to u with different voices depending on her mood now the part that took forever — making meo actually work bruh so making meo work took some work… idk how many times i debugged for her to actually listen to me the STT problem so the original problem was the Web Speech API — that thing is just unreliable as hell. it only works in Chrome, needs HTTPS or localhost, and half the time it just doesnt fire onresult at all. like u speak, it says “listening…”, then nothing happens. the text never shows up. no transcription, no response, nothing i tried fixing it multiple times — started recognition immediately instead of waiting for mic permission, added error handling, changed the flow… still broken. the Web Speech API is just built different (bad different) so i ripped it out completely. replaced it with MediaRecorder + Gemini for transcription. now when u tap the orb it records audio using the MediaRecorder API, sends the audio blob to Gemini, and Gemini transcribes it. way more reliable because it doesnt depend on browser-specific speech engines. it just works the gemini model error THEN the gemini model error… we had the wrong model names everywhere lol the chat model was set to gemini-3.5-flash which literally doesnt exist the TTS was gemini-2.5-flash-preview-tts which kept failing silently and falling back to browser TTS the STT was using gemini-2.0-flash which was mid so we updated everything to the right models: chat: gemini-2.5-flash (the actual latest flash model) TTS: gemini-2.5-flash-preview-tts (the dedicated TTS model with audio output) STT: gemini-2.5-flash (for transcribing the recorded audio) and added detailed console logging so we can actually see whats happening when things break. because before it was just silently falling back to browser TTS and we had no idea why the final pipeline: u tap the orb MediaRecorder starts capturing audio from the mic waveforms animate while u speak u tap again to stop audio blob gets sent to Gemini for transcription transcription goes to Gemini for the actual response Gemini responds with text + emotion response gets spoken back using Gemini TTS with the right voice
MewoOS Devlog #8 🍓😺 Pixel Cat Redesign redesigned the pixel cat that follows ur cursor around the desktop. she looks way better now ngl…more detailed sprite, smoother animation, and shes silver now which fits the dark theme way more. u can click her to toggle between following ur cursor or staying pinned. small thing but it makes the whole desktop feel alive fr Meo Can Control The OS (waw..dem ) this ones big. meo can now literally control the whole os. tell her “open the calculator” and she opens it. “open the terminal” — done. “minimize all windows” — gone. she parses whatever u say and does OS actions through action tags. supports open, close, min, max, focus, minimizeAll, closeAll. feels like ur actually talking to the os not just a chatbot Voice & Emotions Rework improved meos voice n emotions big time. she now detects what ur saying and adjusts — happy, excited, concerned, playful, calm, tired, urgent. each one has its own rate, pitch, personality. the voice sounds way less robotic now and more natural. also fixed that annoying thing where the reply would show up in the chat 4 seconds before the tts spoke it. now they happen at the same time so its smooth 4 Desktop Workspaces added a desktop workspace system. u get 4 separate desktops switch between them with ctrl 1 2 3 4. each desktop has its own windows so u can have coding stuff on desktop 1 music and browser on desktop 2 etc. ctrl left right cycles between them. feels like a real os now not just a web page Mewo Store(new feature…yey) built a full app store for mewoos. premium dock style icons glassmorphism ui category filters search the works. and the apps u can actually install and they actually work when u open them Installable Apps weather — 5 cities 7 day forecast animated temp bars humidity wind stats kanban board — drag and drop 3 columns colored tags 7 pre loaded tasks focus timer — working pomodoro timer svg ring progress 3 modes focus short long session stats type racer — typing speed test real time character highlighting green red wpm calc 8 sentences paint studio — actual working canvas color picker brush size clear button u can draw on it image editor — 8 filter presets original warm cool b&w vintage vivid fade noir brightness contrast saturation sliders uses a real image Store Features when u install an app theres a progress bar animation then the app icon shows up in the dock with a premium dock style icon. and u can uninstall apps too removes from dock and closes any open windows…. mewo meow mewo
final devlog for mewo os 🍓😺 okay so guess wat… i was debugging mewo again and again for a bug that wasnt even real 💔… what happened is.. i opened mewo saw that nothing is functional and i was like everything looks gud why its not wokring… and then i saw my mails and found out that vercel and supabase paused my web cause i ran out of the free tier 💔😭… anyways aside from this i added ts js for the vibes lol Window Switcher Open 2+ apps (e.g. Calculator + Terminal + Notes) Press Ctrl+Shift+A — overlay appears with all open windows Press Tab to cycle forward, Shift+Tab to cycle backward Release Shift or click a window to switch to it Escape to cancel also i did optimized mewo earlier but it was still lagging a bit cause of overlaying animations and effects so i fixed that too ts time redeployed on vercel again!! try it out ^-^ :- https://mewoos.vercel.app
Ships:
Made the most productive web operating system ever created comes with a browser, terminal, music player, gallery, customizable wallpapers, draggable windows, and doomscroll — because no operating system is complete without destroying your attention span and we must scroll and larp… built with react, typescript, and questionable life choices :3
Made the most productive web operating system ever created comes with a browser, terminal, music player, gallery, customizable wallpapers, draggable windows, and doomscroll — because no operating system is complete without destroying your attention span… built with react, typescript, and questionable life choices :3 new features :- functional file system voice assistant with vocal modulation and os control 4 desktop workspace mewo store (more apps that u can actually install !!)...
|
1792824863.3693986
|
1792911263.3693986
|
|
13594
|
StardanceOS by @Sadiya | Stardance
|
Sadiya
|
2
|
8.0
|
22
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T19:10:11Z", "hours": 3.0, "multiplier": 6.82, "payout": 22, "blessing": "neutral", "text": "This is the same project I made in WebOS 1 but I added new features such as a calculator app, battery status and multiple background themes to switch from. The hardest part for me from doing this project was the CSS because my results did not come out as I expected. But at the end I was able to make something that I am proud of.", "repo": "https://github.com/sadiyameem/webos-stardance", "demo": "https://sadiyameem.github.io/webos-stardance/"}, {"ship_num": 2, "ts": "2026-06-17T22:57:32Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a WebOS about Stardance. It has draggable windows, apps, dark mode, sound effects and a live clock. This is space-themed inspired by Stardance.", "repo": "https://github.com/sadiyameem/webos-stardance", "demo": "https://sadiyameem.github.io/webos-stardance/"}]...
|
[{"post_id": 21665, "ts": "202 [{"post_id": 21665, "ts": "2026-07-03T19:00:32Z", "hours": 1.1192, "text": "I added another feature which is a theme selector and I also change the apps emojis to icons. Since the video I recorded was too big I had to make it smaller so you may not see everything but I hope you still understand the idea of this feature."}, {"post_id": 20122, "ts": "2026-07-01T17:30:36Z", "hours": 0.5925, "text": "I added an another new feature which is a battery status"}, {"post_id": 18750, "ts": "2026-06-29T22:49:46Z", "hours": 0.8794, "text": "I added a new feature which is a calculator"}, {"post_id": 8395, "ts": "2026-06-13T23:27:45Z", "hours": 0.5144, "text": "I added a new features which is sound and it includes when opening windows, clicking the dark mode button, and closing the windows. Here is a video"}, {"post_id": 7782, "ts": "2026-06-13T00:10:39Z", "hours": 0.2756, "text": "I just finished my README and made a link for this project. The reason why the video is like this is because the one that I made was too big so this has to do."}, {"post_id": 6414, "ts": "2026-06-10T19:49:32Z", "hours": 1.1886, "text": "I have added a new feature. A dark mode button."}, {"post_id": 5714, "ts": "2026-06-09T16:41:50Z", "hours": 1.7844, "text": "This is my OS. It includes a desktop with apps, draggable windows, a top bar with clock. Each app is openable and moveable that can be closed. The main features of this project are draggable windows, open/close apps, clickable icons, and live clock."}, {"post_id": 5301, "ts": "2026-06-09T00:57:01Z", "hours": 0.735, "text": "I have rewrote the HTML and currently writing the CSS. I know something seems wrong and I am working on it. Here it is so far"}, {"post_id": 5248, "ts": "2026-06-08T23:15:42Z", "hours": 0.5861, "text": "This is a webos. This is just some of the text I may add and the background I chose. I couldn’t fit all of the text I added so this will do."}]...
|
Title: StardanceOS by @Sadiya | Stardance
Devlogs Title: StardanceOS by @Sadiya | Stardance
Devlogs:
This is a webos. This is just some of the text I may add and the background I chose. I couldn’t fit all of the text I added so this will do.
I have rewrote the HTML and currently writing the CSS. I know something seems wrong and I am working on it. Here it is so far
This is my OS. It includes a desktop with apps, draggable windows, a top bar with clock. Each app is openable and moveable that can be closed. The main features of this project are draggable windows, open/close apps, clickable icons, and live clock.
I have added a new feature. A dark mode button.
I just finished my README and made a link for this project. The reason why the video is like this is because the one that I made was too big so this has to do.
I added a new features which is sound and it includes when opening windows, clicking the dark mode button, and closing the windows. Here is a video
I added a new feature which is a calculator
I added an another new feature which is a battery status
I added another feature which is a theme selector and I also change the apps emojis to icons. Since the video I recorded was too big I had to make it smaller so you may not see everything but I hope you still understand the idea of this feature.
Ships:
I made a WebOS about Stardance. It has draggable windows, apps, dark mode, sound effects and a live clock. This is space-themed inspired by Stardance.
This is the same project I made in WebOS 1 but I added new features such as a calculator app, battery status and multiple background themes to switch from. The hardest part for me from doing this project was the CSS because my results did not come out as I expected. But at the end I was able to make something that I am proud of....
|
1792846479.7079554
|
1792932879.7079554
|
|
13632
|
PrismaOS by @reimunyancat | Stardance
|
reimunyancat
|
2
|
22.0
|
67
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T00:48:44Z", "hours": 6.0, "multiplier": 11.17, "payout": 67, "blessing": "neutral", "text": "PrismaOS is a desktop OS that runs in a browser tab. It was already a working shell after WebOS 1, so this round I went after the things that made it feel like a demo instead of a system: settings you can actually change, a way to get anywhere without the mouse, real files, and windows that behave. There are four new things since WebOS 1. Settings. A real preferences app. Four themes, four wallpapers (liquid, mesh, grid, solid), a custom accent color, and a lite mode that kills blur and background animation for weak machines. Everything writes to localStorage and restores before the first paint, so there is no flash of the wrong theme on reload. Spotlight. Press ctrl + K anywhere and you get fuzzy search over apps, themes and wallpapers. Arrow keys and enter, escape to close. It turned out to be the fastest way to use the whole OS and I now open everything with it. A virtual filesystem. There is an actual tree in memory with a Files app on top of it, and the terminal talks to the same tree. pwd, ls, cd, cat and open all work, and open hands the file to the Files app. One source of truth for two very different interfaces was the part I enjoyed most. Window snapping and global shortcuts. Drag a window to a screen edge and it snaps to half or a quarter with a preview overlay first. Plus keyboard shortcuts for closing, minimizing, cycling and resetting the layout. The hardest part was window state. Saved layouts only stored x and y, so on restore the width and height came back undefined and every clamp turned into NaN. Windows loaded at zero size in the top left corner and I stared at it for a while before I understood what I was looking at. The fix was merging saved values over the defaults instead of replacing them, and bumping the storage key. To test it: open the site, hit ctrl + K and type anything. Try the terminal with ls and cd System, then cat version. Drag a window into the left edge and let go. Open Settings and switch the wallpaper to liquid, then turn on lite mode and watch the blur disappear. If the layout ever gets messy, Settings has a reset button.", "repo": "https://github.com/reimunyancat/PrismaOS", "demo": "https://prisma-os-gamma.vercel.app/"}, {"ship_num": 2, "ts": "2026-08-01T16:41:24Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built PrismaOS, a portfolio that boots and runs like a desktop OS inside a browser tab. Instead of a normal scrolling page, you get a boot sequence, a wallpaper, a menu bar with a live clock, and a dock. Every app opens as a real window you can drag around, focus, resize, and minimize, and the layout you leave behind is remembered. I didn’t want it to look like the guide, so I built my own visual language around a prism theme and shipped four switchable themes: aqua, graphite, midnight, and aurora. The dock has macOS-style cursor magnification, and the whole shell has its own glass look rather than the default one from the walkthrough. The feature the guide didn’t ask for is a working terminal. It’s not a prop. It runs help, about, projects, ls, open, theme, and fastfetch, it keeps command history, and it talks to the OS through a small syscall module so open terminal and theme aurora actually reach into the window manager and theme state. There are also two easter eggs in there for anyone who pokes around. My goal is to further develop it later into a portfolio site worthy of being featured on my GitHub profile.", "repo": "https://github.com/reimunyancat/PrismaOS", "demo": "https://prisma-os-gamma.vercel.app/"}]...
|
[{"post_id": 41646, "ts": "202 [{"post_id": 41646, "ts": "2026-08-06T00:25:20Z", "hours": 3.0592, "text": "Devlog #6 Last time I promised a virtual filesystem. It’s here — plus window snapping, which sneaked in because I got tired of dragging windows into place by hand. One tree, two apps The whole filesystem is a single fs.ts file: a nested tree of directories and files, no disk involved. What makes it worth building is that Files and the terminal both read from that same tree. Click into ~/Projects in Files, then type cd ~/Projects in the terminal, and you’re looking at the same list. Neither app owns the data, so they can’t drift apart. Files ended up as a three-pane Finder: places sidebar, listing, preview at the bottom. Folders are sorted before files, hidden dotfiles are filtered out unless you ask. App bundles carry an app field, so selecting Terminal.app and hitting “Open in app” launches the real window — the fake filesystem reaches back into the real OS, which is a nicer trick than it has any right to be. The terminal grew pwd , ls , cd , cat , and a smarter open . Path handling is the part nobody sees: one normalizePath swallows ~ , . , .. , and relative paths, spits out a clean absolute path, and every command routes through it. Write that once and cd ../../Users/nyancat just works. Skip it and you’re writing string hacks forever. I also stash the current directory on every input line, so scrolling back up shows the prompt exactly as it was — prism ~/Projects $ and not a rewritten one. Small thing. Feels wrong immediately when it’s missing. Throwing windows at walls Snapping turned out to be a two-line idea buried under a plumbing problem. Drop a window near the left edge and it fills the left half; right edge, right half; top edge, full screen. The catch: the drag hook only knew where the window ended up, not where the cursor was. Those are different by however far from the titlebar’s corner you happened to grab. Drag by the right side of the titlebar and the window’s own x never gets close to the left edge, so nothing snaps and you sit there wondering if you broke it. Fix was to pass the pointer coordinates along with the final position and judge the zone by the cursor. The bug I found while I was in there Opening the window manager back up, I noticed the layout restore was saved ?? app.initial — and move() only writes {x, y} . So move a window, close it, reopen: the saved partial wins, width and height come back undefined , Math.min(undefined, vw) gives NaN , and the window collapses to the size of its own text. It only shows up if you move a window without ever resizing it, which is why it survived this long. Merging over the defaults instead of replacing them fixes it, and I bumped the storage key to prisma-layout-v2 so old broken entries get ignored rather than restored. Where PrismaOS stands Virtual filesystem shared by Files and the terminal — same paths, same contents Files app: sidebar, listing, preview, and launching apps straight from bundles Terminal: pwd , ls (with -a ), cd , cat , open <app|file> Window snapping to left, right, and full screen, plus the layout NaN fix Next up Wrapping up. Version bump to 0.3.0, a pass over the leftovers, and shipping the whole thing."}, {"post_id": 40807, "ts": "2026-08-04T15:53:27Z", "hours": 1.4222, "text": "Devlog #5 Told you Spotlight was next. ctrl + K now pulls a command palette up over the desktop, and a set of global shortcuts came along for the ride. What I built Spotlight is one input that searches apps, themes, and wallpapers at the same time. The matching isn’t substring — it’s subsequence. Your letters just have to show up in order, so prj lands on Projects and mdn finds “Theme — midnight”. Type less, get more. That’s the whole pitch. It also isn’t a window. It’s an overlay sitting above the desktop, so it skips the window manager entirely — no z-index fights, no traffic lights, just a backdrop you click away from. Arrow keys move, Enter runs, Esc bails. Boringly predictable, which is exactly what a launcher should be. Same session added global hotkeys through a small useHotkeys hook: ctrl + K for Spotlight, ctrl + W closes the front window, ctrl + M minimizes it, ctrl + , opens Settings, and ctrl + ` cycles through windows. One listener registered on mount, handlers kept in a ref so nothing goes stale. The shortcut minefield Picking key combos for a web app is mostly a game of “what am I not allowed to touch”. ctrl + Tab and ctrl + N belong to the browser, period. That’s how window cycling ended up on the backtick — looks odd, but it sits right above Tab, so your finger barely moves. Accidentally ergonomic. Where PrismaOS stands ctrl + K palette: fuzzy search over apps, themes, wallpapers Global hotkeys: close, minimize, Settings, window cycling Spotlight is an overlay, not a window — the window manager never sees it Next up A virtual filesystem. One tree shared by a Finder-style Files app and the terminal, so cd -ing around and clicking through folders show you the exact same places."}, {"post_id": 40502, "ts": "2026-08-04T02:27:48Z", "hours": 1.5411, "text": "Devlog #4 WebOS 1 shipped, so now I’m on WebOS 2: four new features on top of the 0.2.0 baseline. First one up is a proper Settings app. Until now, the only way to reskin the desktop was typing theme aurora into the terminal like it’s 1995. Charming, but not exactly something you can show people. What I built The Settings window has five sections: theme, wallpaper, accent color, performance, and window layout. Everything routes through os.ts , the little kernel module that owns the document.documentElement attributes and localStorage — so whatever you pick survives a refresh, and restores before the first paint. The wallpaper system was the fun part. The desktop background is just a stack of CSS gradients, so switching wallpapers means flipping one data-wallpaper attribute and letting App.css restyle the whole thing. I added three new ones (mesh, grid, solid) on top of the default liquid. The accent picker is even lazier: it overrides a single --accent variable on top of whatever theme is active, so any accent mixes with any theme for free. I also gave lite mode (blur off, animations off) a manual override. It used to be purely automatic, based on hardware detection. Now if you flip it yourself, your choice wins over the heuristic. The facepalm Also settled something small but important: all UI strings ship in English by default, since this is a public portfolio. A language toggle can come later — English stays the default either way. Where PrismaOS stands Settings app: themes, wallpapers, accent colors, lite mode, layout reset Every choice persists via localStorage and restores before first paint New wallpapers: mesh, grid, solid (liquid stays the default) Next up Spotlight. ctrl + K, fuzzy search over apps, themes, and wallpapers — because clicking is effort."}, {"post_id": 38977, "ts": "2026-08-01T16:25:32Z", "hours": 7.0089, "text": "Devlog #3 Devlog #2 ended with a shell that read as a desktop but a dock where every icon opened a placeholder. This time I filled it in: the real apps, a terminal that can actually drive the OS, and the boot screen I said I’d redo. About, Projects, and Music are real windows now, all registered in one place and opened through the window manager. An app is just an entry — id, title, icon, component — so the dock, the terminal, and the logo menu all launch through the same path. Projects is the one with real structure: a card grid and a detail view off a single useState . I made the cards <button> instead of <div> after realizing I couldn’t tab to a project; that brought focus and Enter/Space back for free. The terminal was the part I cared about most. help , about , projects , ls , open , theme , fastfetch , clear , plus two easter eggs. Parsing was nothing — a split and a switch. The annoying part was that open terminal needs the window manager and theme aurora needs the theme state, both living way above the terminal. I didn’t want to prop-drill the whole WM into a leaf, so the shell talks to src/os.ts instead: import { launchApp , listApps , setTheme , THEMES } from \" ../os \" ; Small module, handlers registered at mount. open returns false for a missing app so I can print no such app instead of failing silently. Command history took two tries — the first walked off the end of the array and left undefined in the input; fix was making -1 mean “not browsing”. Boot screen: the old one was a pulsing logo and a 2400ms bar that measured nothing, opening into a shell with glass and a live clock. Now it prints staged log lines as the bar crosses them (mount display, load tokens, start WM, register apps, start prism-sh), the logo sits on a slow refraction sweep, and any click or key skips it. It only plays once per tab via sessionStorage , and prefers-reduced-motion takes the same fast path. Two bugs turned up prepping the build. npm run build died instantly: src/hooks/useWindows.ts(1,10): error TS6133: 'use' is declared but never read. An autocomplete import { use, ... } I never called. dev doesn’t typecheck, but build is tsc --noEmit && vite build with noUnusedLocals , so the first real build was the first warning. Six characters. The other: About’s only link was href=\"https//github.com/...\" — missing colon, so it read as a relative path and 404’d inside my own site. Clicked past it a dozen times."}, {"post_id": 35217, "ts": "2026-07-26T14:33:42Z", "hours": 2.8786, "text": "Devlog #2 Building my portfolio as an operating system that runs in a browser tab. Picking up from Devlog #1, where the desktop finally had bones — windows you could drag, focus, resize, and minimize — but nothing around them. An empty wallpaper with floating rectangles isn’t an OS; it’s a screensaver. This milestone is about the two pieces of chrome that make it read as a real desktop the instant it loads: the menu bar across the top and the dock along the bottom. A menu bar The menu bar is mostly static — a logo that drops open into an “About / Restart” menu, and the usual File / Edit / View / Help labels that don’t do much yet. The one part that has to feel alive is the clock in the top-right corner. A frozen clock immediately breaks the illusion, so it ticks once a second Nothing fancy — a setInterval that recomputes the formatted string every second and clears itself on unmount. The formatting is where I tripped. The crash that ate the whole screen I wanted the clock in Korean — “7월 26일 (일) 오후 11:24” — so I reached for the browser’s built-in localization instead of hand-formatting dates: const date = d . toLocaleDateString ( \" ko-KR \" , { month : \" short \" , day : \" numeric \" , weekday : \" short \" }) const time = d . toLocaleTimeString ( \" ko_KR \" , { hour : \" 2-digit \" , minute : \" 2-digit \" }) And the app went white. Not a subtly-wrong date — the entire MenuBar component threw and took the tree down with it: Uncaught RangeError: invalid language tag: \"ko_KR\" formatNow MenuBar.tsx:74 It took me an embarrassing minute because the two lines look identical at a glance. Look again: the date says ko-KR , the time says ko_KR . A hyphen on one line, an underscore on the next. The fix was one keystroke — underscore to hyphen — and the shell came back. Lesson filed away: locale tags are hyphenated, always, and Intl validates them strictly enough to crash. Two things to fix properly later — normalize the locale in one constant so I can’t typo it twice, and wrap the shell in an error boundary so a single throw dims one widget instead of nuking the screen. The dock The dock is the fun part. I wanted the macOS-style effect where icons swell as the cursor passes over them and the neighbors ease up too, so it feels like the row is being pushed under a magnifying glass rather than icons popping one at a time. On a trackpad-less touch screen there’s no hover state, so a finger tap would otherwise make the whole dock lurch to wherever you touched. Gating on pointerType === \"mouse\" keeps touch calm and leaves the magnification as a mouse-only flourish, which is exactly where it belongs. Where stands Menu bar with a working logo menu and a live, once-a-second clock. Clock is localized through Intl — after learning the hard way that the tag must be ko-KR , not ko_KR . Dock with smooth Gaussian cursor magnification and a subtle lift, mouse-only. The desktop finally reads as a desktop at first glance, even before any real apps exist. Next up The apps themselves — About and Projects as real windows wired into the window manager, replacing the placeholder stand-ins the dock currently launches. And, not incidentally, the boot sequence needs a proper redesign; the current one is placeholder-grade and doesn’t match the polish of the shell it opens into."}, {"post_id": 33791, "ts": "2026-07-24T00:13:15Z", "hours": 6.5044, "text": "Devlog #1 Building my portfolio as an operating system that runs in a browser tab. Why this exists When I first saw the brief, I honestly just planned to knock something out — the minimum that clears the requirements and move on. But somewhere between the first commit and the second, I changed my mind. If I’m going to build a website anyway, why not make it the website — my actual portfolio. So I decided to treat PrismaOS as the real thing and pour everything I have into it: a portfolio site that is itself the project. Every window, every pixel of the shell, is something I want to be proud to show. That reframing is why this repo suddenly has design tokens, four themes, and a genie animation nobody asked for. The concept: instead of a scrolling landing page, the visitor boots into a tiny web desktop — a menu bar, a dock, draggable windows — and explores my work the way you’d poke around someone’s actual computer. This milestone: the window manager Devlog #1 covers the skeleton — the part that makes it feel like an OS rather One source of truth Every window’s position, size, focus order (z-index), and minimized state lives in a single hook, useWindows . Components never track their own coordinates. Opening, closing, focusing, moving, and resizing all route through that one place. Dragging without dropping frames The naive approach — call setState on every pointer move — makes windows stutter because React re-renders on every pixel. So during a drag I don’t touch state at all. I mutate the DOM node directly ( el.style.left/top ) for a smooth 60fps, and only commit the final position to state when the pointer is released. The other trick is setPointerCapture . Once the pointer is captured, the drag keeps working even if the cursor flies outside the window — or outside the browser entirely. Touch gets the same behavior for free, since Pointer Events unify mouse and touch. handle . setPointerCapture ( e . pointerId ) // ...move: write to el.style directly (no re-render) // ...up: commit once via onDragEnd() Resizing from the bottom-right corner uses the exact same pattern: capture, mutate the DOM live, commit on release. Bug I caught Clicking any window brings it to the front by bumping a z-counter."}]...
|
Title: PrismaOS by @reimunyancat | Stardance
Devl Title: PrismaOS by @reimunyancat | Stardance
Devlogs:
Devlog #1 Building my portfolio as an operating system that runs in a browser tab. Why this exists When I first saw the brief, I honestly just planned to knock something out — the minimum that clears the requirements and move on. But somewhere between the first commit and the second, I changed my mind. If I’m going to build a website anyway, why not make it the website — my actual portfolio. So I decided to treat PrismaOS as the real thing and pour everything I have into it: a portfolio site that is itself the project. Every window, every pixel of the shell, is something I want to be proud to show. That reframing is why this repo suddenly has design tokens, four themes, and a genie animation nobody asked for. The concept: instead of a scrolling landing page, the visitor boots into a tiny web desktop — a menu bar, a dock, draggable windows — and explores my work the way you’d poke around someone’s actual computer. This milestone: the window manager Devlog #1 covers the skeleton — the part that makes it feel like an OS rather One source of truth Every window’s position, size, focus order (z-index), and minimized state lives in a single hook, useWindows . Components never track their own coordinates. Opening, closing, focusing, moving, and resizing all route through that one place. Dragging without dropping frames The naive approach — call setState on every pointer move — makes windows stutter because React re-renders on every pixel. So during a drag I don’t touch state at all. I mutate the DOM node directly ( el.style.left/top ) for a smooth 60fps, and only commit the final position to state when the pointer is released. The other trick is setPointerCapture . Once the pointer is captured, the drag keeps working even if the cursor flies outside the window — or outside the browser entirely. Touch gets the same behavior for free, since Pointer Events unify mouse and touch. handle . setPointerCapture ( e . pointerId ) // ...move: write to el.style directly (no re-render) // ...up: commit once via onDragEnd() Resizing from the bottom-right corner uses the exact same pattern: capture, mutate the DOM live, commit on release. Bug I caught Clicking any window brings it to the front by bumping a z-counter.
Devlog #2 Building my portfolio as an operating system that runs in a browser tab. Picking up from Devlog #1, where the desktop finally had bones — windows you could drag, focus, resize, and minimize — but nothing around them. An empty wallpaper with floating rectangles isn’t an OS; it’s a screensaver. This milestone is about the two pieces of chrome that make it read as a real desktop the instant it loads: the menu bar across the top and the dock along the bottom. A menu bar The menu bar is mostly static — a logo that drops open into an “About / Restart” menu, and the usual File / Edit / View / Help labels that don’t do much yet. The one part that has to feel alive is the clock in the top-right corner. A frozen clock immediately breaks the illusion, so it ticks once a second Nothing fancy — a setInterval that recomputes the formatted string every second and clears itself on unmount. The formatting is where I tripped. The crash that ate the whole screen I wanted the clock in Korean — “7월 26일 (일) 오후 11:24” — so I reached for the browser’s built-in localization instead of hand-formatting dates: const date = d . toLocaleDateString ( " ko-KR " , { month : " short " , day : " numeric " , weekday : " short " }) const time = d . toLocaleTimeString ( " ko_KR " , { hour : " 2-digit " , minute : " 2-digit " }) And the app went white. Not a subtly-wrong date — the entire MenuBar component threw and took the tree down with it: Uncaught RangeError: invalid language tag: "ko_KR" formatNow MenuBar.tsx:74 It took me an embarrassing minute because the two lines look identical at a glance. Look again: the date says ko-KR , the time says ko_KR . A hyphen on one line, an underscore on the next. The fix was one keystroke — underscore to hyphen — and the shell came back. Lesson filed away: locale tags are hyphenated, always, and Intl validates them strictly enough to crash. Two things to fix properly later — normalize the locale in one constant so I can’t typo it twice, and wrap the shell in an error boundary so a single throw dims one widget instead of nuking the screen. The dock The dock is the fun part. I wanted the macOS-style effect where icons swell as the cursor passes over them and the neighbors ease up too, so it feels like the row is being pushed under a magnifying glass rather than icons popping one at a time. On a trackpad-less touch screen there’s no hover state, so a finger tap would otherwise make the whole dock lurch to wherever you touched. Gating on pointerType === "mouse" keeps touch calm and leaves the magnification as a mouse-only flourish, which is exactly where it belongs. Where stands Menu bar with a working logo menu and a live, once-a-second clock. Clock is localized through Intl — after learning the hard way that the tag must be ko-KR , not ko_KR . Dock with smooth Gaussian cursor magnification and a subtle lift, mouse-only. The desktop finally reads as a desktop at first glance, even before any real apps exist. Next up The apps themselves — About and Projects as real windows wired into the window manager, replacing the placeholder stand-ins the dock currently launches. And, not incidentally, the boot sequence needs a proper redesign; the current one is placeholder-grade and doesn’t match the polish of the shell it opens into.
Devlog #3 Devlog #2 ended with a shell that read as a desktop but a dock where every icon opened a placeholder. This time I filled it in: the real apps, a terminal that can actually drive the OS, and the boot screen I said I’d redo. About, Projects, and Music are real windows now, all registered in one place and opened through the window manager. An app is just an entry — id, title, icon, component — so the dock, the terminal, and the logo menu all launch through the same path. Projects is the one with real structure: a card grid and a detail view off a single useState . I made the cards <button> instead of <div> after realizing I couldn’t tab to a project; that brought focus and Enter/Space back for free. The terminal was the part I cared about most. help , about , projects , ls , open , theme , fastfetch , clear , plus two easter eggs. Parsing was nothing — a split and a switch. The annoying part was that open terminal needs the window manager and theme aurora needs the theme state, both living way above the terminal. I didn’t want to prop-drill the whole WM into a leaf, so the shell talks to src/os.ts instead: import { launchApp , listApps , setTheme , THEMES } from " ../os " ; Small module, handlers registered at mount. open returns false for a missing app so I can print no such app instead of failing silently. Command history took two tries — the first walked off the end of the array and left undefined in the input; fix was making -1 mean “not browsing”. Boot screen: the old one was a pulsing logo and a 2400ms bar that measured nothing, opening into a shell with glass and a live clock. Now it prints staged log lines as the bar crosses them (mount display, load tokens, start WM, register apps, start prism-sh), the logo sits on a slow refraction sweep, and any click or key skips it. It only plays once per tab via sessionStorage , and prefers-reduced-motion takes the same fast path. Two bugs turned up prepping the build. npm run build died instantly: src/hooks/useWindows.ts(1,10): error TS6133: 'use' is declared but never read. An autocomplete import { use, ... } I never called. dev doesn’t typecheck, but build is tsc --noEmit && vite build with noUnusedLocals , so the first real build was the first warning. Six characters. The other: About’s only link was href="https//github.com/..." — missing colon, so it read as a relative path and 404’d inside my own site. Clicked past it a dozen times.
Devlog #4 WebOS 1 shipped, so now I’m on WebOS 2: four new features on top of the 0.2.0 baseline. First one up is a proper Settings app. Until now, the only way to reskin the desktop was typing theme aurora into the terminal like it’s 1995. Charming, but not exactly something you can show people. What I built The Settings window has five sections: theme, wallpaper, accent color, performance, and window layout. Everything routes through os.ts , the little kernel module that owns the document.documentElement attributes and localStorage — so whatever you pick survives a refresh, and restores before the first paint. The wallpaper system was the fun part. The desktop background is just a stack of CSS gradients, so switching wallpapers means flipping one data-wallpaper attribute and letting App.css restyle the whole thing. I added three new ones (mesh, grid, solid) on top of the default liquid. The accent picker is even lazier: it overrides a single --accent variable on top of whatever theme is active, so any accent mixes with any theme for free. I also gave lite mode (blur off, animations off) a manual override. It used to be purely automatic, based on hardware detection. Now if you flip it yourself, your choice wins over the heuristic. The facepalm Also settled something small but important: all UI strings ship in English by default, since this is a public portfolio. A language toggle can come later — English stays the default either way. Where PrismaOS stands Settings app: themes, wallpapers, accent colors, lite mode, layout reset Every choice persists via localStorage and restores before first paint New wallpapers: mesh, grid, solid (liquid stays the default) Next up Spotlight. ctrl + K, fuzzy search over apps, themes, and wallpapers — because clicking is effort.
Devlog #5 Told you Spotlight was next. ctrl + K now pulls a command palette up over the desktop, and a set of global shortcuts came along for the ride. What I built Spotlight is one input that searches apps, themes, and wallpapers at the same time. The matching isn’t substring — it’s subsequence. Your letters just have to show up in order, so prj lands on Projects and mdn finds “Theme — midnight”. Type less, get more. That’s the whole pitch. It also isn’t a window. It’s an overlay sitting above the desktop, so it skips the window manager entirely — no z-index fights, no traffic lights, just a backdrop you click away from. Arrow keys move, Enter runs, Esc bails. Boringly predictable, which is exactly what a launcher should be. Same session added global hotkeys through a small useHotkeys hook: ctrl + K for Spotlight, ctrl + W closes the front window, ctrl + M minimizes it, ctrl + , opens Settings, and ctrl + ` cycles through windows. One listener registered on mount, handlers kept in a ref so nothing goes stale. The shortcut minefield Picking key combos for a web app is mostly a game of “what am I not allowed to touch”. ctrl + Tab and ctrl + N belong to the browser, period. That’s how window cycling ended up on the backtick — looks odd, but it sits right above Tab, so your finger barely moves. Accidentally ergonomic. Where PrismaOS stands ctrl + K palette: fuzzy search over apps, themes, wallpapers Global hotkeys: close, minimize, Settings, window cycling Spotlight is an overlay, not a window — the window manager never sees it Next up A virtual filesystem. One tree shared by a Finder-style Files app and the terminal, so cd -ing around and clicking through folders show you the exact same places.
Devlog #6 Last time I promised a virtual filesystem. It’s here — plus window snapping, which sneaked in because I got tired of dragging windows into place by hand. One tree, two apps The whole filesystem is a single fs.ts file: a nested tree of directories and files, no disk involved. What makes it worth building is that Files and the terminal both read from that same tree. Click into ~/Projects in Files, then type cd ~/Projects in the terminal, and you’re looking at the same list. Neither app owns the data, so they can’t drift apart. Files ended up as a three-pane Finder: places sidebar, listing, preview at the bottom. Folders are sorted before files, hidden dotfiles are filtered out unless you ask. App bundles carry an app field, so selecting Terminal.app and hitting “Open in app” launches the real window — the fake filesystem reaches back into the real OS, which is a nicer trick than it has any right to be. The terminal grew pwd , ls , cd , cat , and a smarter open . Path handling is the part nobody sees: one normalizePath swallows ~ , . , .. , and relative paths, spits out a clean absolute path, and every command routes through it. Write that once and cd ../../Users/nyancat just works. Skip it and you’re writing string hacks forever. I also stash the current directory on every input line, so scrolling back up shows the prompt exactly as it was — prism ~/Projects $ and not a rewritten one. Small thing. Feels wrong immediately when it’s missing. Throwing windows at walls Snapping turned out to be a two-line idea buried under a plumbing problem. Drop a window near the left edge and it fills the left half; right edge, right half; top edge, full screen. The catch: the drag hook only knew where the window ended up, not where the cursor was. Those are different by however far from the titlebar’s corner you happened to grab. Drag by the right side of the titlebar and the window’s own x never gets close to the left edge, so nothing snaps and you sit there wondering if you broke it. Fix was to pass the pointer coordinates along with the final position and judge the zone by the cursor. The bug I found while I was in there Opening the window manager back up, I noticed the layout restore was saved ?? app.initial — and move() only writes {x, y} . So move a window, close it, reopen: the saved partial wins, width and height come back undefined , Math.min(undefined, vw) gives NaN , and the window collapses to the size of its own text. It only shows up if you move a window without ever resizing it, which is why it survived this long. Merging over the defaults instead of replacing them fixes it, and I bumped the storage key to prisma-layout-v2 so old broken entries get ignored rather than restored. Where PrismaOS stands Virtual filesystem shared by Files and the terminal — same paths, same contents Files app: sidebar, listing, preview, and launching apps straight from bundles Terminal: pwd , ls (with -a ), cd , cat , open <app|file> Window snapping to left, right, and full screen, plus the layout NaN fix Next up Wrapping up. Version bump to 0.3.0, a pass over the leftovers, and shipping the whole thing.
Ships:
I built PrismaOS, a portfolio that boots and runs like a desktop OS inside a browser tab. Instead of a normal scrolling page, you get a boot sequence, a wallpaper, a menu bar with a live clock, and a dock. Every app opens as a real window you can drag around, focus, resize, and minimize, and the layout you leave behind is remembered. I didn’t want it to look like the guide, so I built my own visual language around a prism theme and shipped four switchable themes: aqua, graphite, midnight, and aurora. The dock has macOS-style cursor magnification, and the whole shell has its own glass look rather than the default one from the walkthrough. The feature the guide didn’t ask for is a working terminal. It’s not a prop. It runs help, about, projects, ls, open, theme, and fastfetch, it keeps command history, and it talks to the OS through a small syscall module so open terminal and theme aurora actually reach into the window manager and theme state. There are also two easter eggs in there for anyone who pokes around. My goal is to further develop it later into a portfolio site worthy of being featured on my GitHub profile.
PrismaOS is a desktop OS that runs in a browser tab. It was already a working shell after WebOS 1, so this round I went after the things that made it feel like a demo instead of a system: settings you can actually change, a way to get anywhere without the mouse, real files, and windows that behave. There are four new things since WebOS 1. Settings. A real preferences app. Four themes, four wallpapers (liquid, mesh, grid, solid), a custom accent color, and a lite mode that kills blur and background animation for weak machines. Everything writes to localStorage and restores before the first paint, so there is no flash of the wrong theme on reload. Spotlight. Press ctrl + K anywhere and you get fuzzy search over apps, themes and wallpapers. Arrow keys and enter, escape to close. It turned out to be the fastest way to use the whole OS and I now open everything with it. A virtual filesystem. There is an actual tree in memory with a Files app on top of it, and the terminal talks to the same tree. pwd, ls, cd, cat and open all work, and open hands the file to the Files app. One source of truth for two very different interfaces was the part I enjoyed most. Window snapping and global shortcuts. Drag a window to a screen edge and it snaps to half or a quarter with a preview overlay first. Plus keyboard shortcuts for closing, minimizing, cycling and resetting the layout. The hardest part was window state. Saved layouts only stored x and y, so on restore the width and height came back undefined and every clamp turned into NaN. Windows loaded at zero size in the top left corner and I stared at it for a while before I understood what I was looking at. The fix was merging saved values over the defaults instead of replacing them, and bumping the storage key. To test it: open the site, hit ctrl + K and type anything. Try the terminal with ls and cd System, then cat version. Drag a window into the left edge and let go. Open Settings and switch the wallpaper to liquid, then turn on lite mode and watch the blur disappear. If the layout ever gets messy, Settings has a reset button....
|
1792878685.3973277
|
1793742685.3973277
|
|
13804
|
WebOS by @AdaChan | Stardance
|
AdaChan
|
2
|
19.81
|
87
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T14:42:06Z", "hours": 11.0, "multiplier": 8.22, "payout": 87, "blessing": "neutral", "text": "My Own WebOS For this project, I updated my WebOS by adding new applications and various features. First, I made some improvements to the NASA Viewer. It now displays more information about the “Image of the Day” and is free of the bugs it had before. Next, I created MiniTube, an app that uses the YouTube API to search for and watch videos directly within the WebOS. I also built a Pomodoro app to help manage study and break times. Another addition was a chatbot. While it currently only responds to simple questions and commands, I really enjoyed building it. I had previously created something similar in Python, so I adapted that same logic for JavaScript. I also added a Start button, which functions just like the Windows key; it opens a menu containing the list of applications and some settings. In the settings, users can now change the wallpaper and the taskbar color. These changes are saved using LocalStorage, so they persist even after closing the browser. Finally, I created a Help menu that serves as documentation for the WebOS, explaining what each app does and how to use them. Fixing bugs was the most challenging part, as several issues popped up during development. Even so, the chatbot was the feature I enjoyed building the most. You can try out the project here: https://hallow303.github.io/MyownWebOS/", "repo": "https://github.com/Hallow303/WebOS", "demo": "https://hallow303.github.io/WebOS/"}, {"ship_num": 2, "ts": "2026-06-16T01:02:39Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a webpage that simulates an operating system, all in a very simple way. It has 3 apps: a welcome app that simulates a notepad, a cat viewer that shows random cats, and one that shows cool facts about space. The app windows can be moved. The most challenging part was making things up, haha, because I didn’t know anything about JavaScript. I usually use Python for everything, and JavaScript is nothing like Python. I’m very proud of my cat app (who doesn’t like cats???). It’s also very difficult to make the site look good. I’m not very good at web design, so the site’s appearance is kind of poor, haha, mainly because CSS is very annoying. Overall, it’s been a really cool project to do.", "repo": "https://github.com/Hallow303/WebOS", "demo": "https://hallow303.github.io/WebOS/"}]...
|
[{"post_id": 37379, "ts": "202 [{"post_id": 37379, "ts": "2026-07-30T01:40:44Z", "hours": 0.9222, "text": "DevLog #12 Just testing a few things out. Basically, Svelte is very easy to understand, especially compared to the vanilla JavaScript I was using before. But there are quite a few things that are different."}, {"post_id": 36119, "ts": "2026-07-28T00:18:10Z", "hours": 0.3994, "text": "DevLog #11 I’m thinking about using Svelte to rewrite my entire WebOS simulator. I believe it will make the code much more organized, simplify maintenance, and speed up development compared to the current project."}, {"post_id": 34906, "ts": "2026-07-26T00:15:55Z", "hours": 0.4917, "text": "DevLog #10 Writing code… that’s about it. I decided to rewrite the WebOS from scratch and completely change its style. There isn’t much to show yet, but I hope the result will be worth it."}, {"post_id": 25965, "ts": "2026-07-10T14:30:37Z", "hours": 0.6869, "text": "DevLog #9 Today I finished the help section for My Own WebOS. I added documentation pages for all system applications, simply explaining what each one does and how to use it."}, {"post_id": 25320, "ts": "2026-07-09T15:19:46Z", "hours": 2.6825, "text": "DevLog #9 Apenas correções de bugs e pequenos ajustes."}, {"post_id": 19647, "ts": "2026-07-01T00:57:26Z", "hours": 5.1408, "text": "Devlog #8 Added some new stuff to the WebOS. This time I focused more on customization and making the system feel more alive. Now you can change the wallpaper and the taskbar color, which makes everything feel a bit more personal. I also added a functional chatbot (super basic for now lol), but it already works and can handle some simple commands. Current Apps Welcome - A simple app with some basic info about the project. Cat Viewer - Shows random cat pictures because every OS needs cats. NASA Viewer - Displays space-related images and information. MiniTube - A mini YouTube-like app inside the WebOS. Pomodoro - A productivity app with a timer to help focus. Start Menu I also added the Start button, basically inspired by the Windows key/start menu idea. When clicked, it opens a little menu with quick access to apps and system options: Help - Works like a mini documentation page for the WebOS. I made it with a sidebar-style layout, kinda like docs websites. Settings - Lets you change the wallpaper and taskbar color. Shutdown - Simulates shutting down the PC by turning the screen black and showing “Shutting down…” . Taskbar Improvements Now when an app is opened, its icon shows up in the taskbar. Overall, that’s pretty much what I worked on in this update."}, {"post_id": 18390, "ts": "2026-06-29T15:05:23Z", "hours": 0.7917, "text": "DevLog #7 I’ve started building the WebOS Settings area. So far, I’ve implemented two main options: Change the wallpaper Change the taskbar color Honestly, it’s not particularly pretty or practical yet, but it’s a start. To make things easier, I added the ability to change the wallpaper using an image URL, which makes the process faster and simpler. Also, all changes are saved to localStorage , which was the most practical way I found to persist the data. Window controls (inspired by macOS) I also added window control buttons based on Apple Inc.’s system: 🟥 Red → closes the window 🟨 Yellow → minimizes the window 🟩 Green → expands / toggles full screen Taskbar Now, when a window is opened, the app automatically appears on the taskbar. I haven’t managed to get the icons looking exactly how I wanted yet, so for now, I’ve just displayed the app name with a stylized border to maintain visual organization."}, {"post_id": 16284, "ts": "2026-06-26T14:08:52Z", "hours": 1.2553, "text": "DevLog #6 I removed the white border from the taskbar to make it more similar to the Windows XP layout. I also adjusted the clock to only show HH:mm to make it simpler and cleaner. I also added a chatbot, you can access it from the button in the right corner of the screen (the one with a speech bubble with a happy face 😄). How does the chatbot work? I made it very simple: The user types a message. The script checks whether a match exists in a JavaScript dictionary. \"hi\": \"Hello!\", \"hello\": \"Hi, how are you?\", \"hello\": \"Hey!\" If it finds a match, it returns the answer. If not, he responds with “I don’t understand.” There is also the Start button, its function is the same as the Win key on the keyboard: List applications Search for things Settings options It’s still just aesthetic, it has no real functionality, but I’m working on it. Firstly, I want to implement so that the user can change the wallpaper and customize the color of the taskbar."}, {"post_id": 9612, "ts": "2026-06-16T00:37:58Z", "hours": 2.3572, "text": "DevLog #4 Live Demo: https://hallow303.github.io/MyownWebOS/ I fixed the code errors and managed to get MyWebOS working better. I learned more about events, functions, and APIs, and practiced a lot of debugging. Now the project is more stable and ready to receive new ideas."}, {"post_id": 8105, "ts": "2026-06-13T15:01:47Z", "hours": 1.1264, "text": "Devlogs #3 Live Demo: https://hallow303.github.io/MyownWebOS/ I removed the music player app because it was giving me more trouble than I expected, lol. I decided to leave that for later and focus on other parts of the project. But, in return, I added a new app called NASA Viewer . It uses the NASA API to show the astronomical image of the day, along with the title and a short description. It was my first app using a real public API, so in addition to improving WebOS, I also learned more about fetch() , JSON, and how to work with external data. I still want to significantly improve the visuals and make everything look more like Windows XP."}, {"post_id": 6593, "ts": "2026-06-11T02:15:12Z", "hours": 0.755, "text": "Devlog #2 — Music Player Live Demo: https://hallow303.github.io/MyownWebOS/ Today I added a new application to my WebOS: a music player 🎵. For now it’s still quite simple and only has two songs, but it already works. Since I’m still learning CSS and JavaScript, some parts look a bit strange and need improvement. In the coming days I want to make the visual appearance nicer and continue adding features. My goal is to make WebOS look more and more like Windows XP, which is serving as inspiration for the project. There’s still a lot to improve, but I’m learning a lot during development."}, {"post_id": 5414, "ts": "2026-06-09T05:17:37Z", "hours": 2.5639, "text": "Development Diary #1 — My WebOS Demo Live Demo: https://hallow303.github.io/MyownWebOS/ I finished the first version of my WebOS demo. It now has two applications: Welcome: an application with a beginner’s guide and some system information Cat Viewer: an application that displays random images of cats During development, I realized that JavaScript is more difficult than I imagined, especially in the part about manipulating page elements and making the interface components work together. I still need to study more to better organize the code and understand how to structure larger projects without getting lost. Next goals: Create a calculator within WebOS Improve code organization Study more about DOM and events"}]...
|
Title: WebOS by @AdaChan | Stardance
Devlogs:
Dev Title: WebOS by @AdaChan | Stardance
Devlogs:
Development Diary #1 — My WebOS Demo Live Demo: https://hallow303.github.io/MyownWebOS/ I finished the first version of my WebOS demo. It now has two applications: Welcome: an application with a beginner’s guide and some system information Cat Viewer: an application that displays random images of cats During development, I realized that JavaScript is more difficult than I imagined, especially in the part about manipulating page elements and making the interface components work together. I still need to study more to better organize the code and understand how to structure larger projects without getting lost. Next goals: Create a calculator within WebOS Improve code organization Study more about DOM and events
Devlog #2 — Music Player Live Demo: https://hallow303.github.io/MyownWebOS/ Today I added a new application to my WebOS: a music player 🎵. For now it’s still quite simple and only has two songs, but it already works. Since I’m still learning CSS and JavaScript, some parts look a bit strange and need improvement. In the coming days I want to make the visual appearance nicer and continue adding features. My goal is to make WebOS look more and more like Windows XP, which is serving as inspiration for the project. There’s still a lot to improve, but I’m learning a lot during development.
Devlogs #3 Live Demo: https://hallow303.github.io/MyownWebOS/ I removed the music player app because it was giving me more trouble than I expected, lol. I decided to leave that for later and focus on other parts of the project. But, in return, I added a new app called NASA Viewer . It uses the NASA API to show the astronomical image of the day, along with the title and a short description. It was my first app using a real public API, so in addition to improving WebOS, I also learned more about fetch() , JSON, and how to work with external data. I still want to significantly improve the visuals and make everything look more like Windows XP.
DevLog #4 Live Demo: https://hallow303.github.io/MyownWebOS/ I fixed the code errors and managed to get MyWebOS working better. I learned more about events, functions, and APIs, and practiced a lot of debugging. Now the project is more stable and ready to receive new ideas.
DevLog #6 I removed the white border from the taskbar to make it more similar to the Windows XP layout. I also adjusted the clock to only show HH:mm to make it simpler and cleaner. I also added a chatbot, you can access it from the button in the right corner of the screen (the one with a speech bubble with a happy face 😄). How does the chatbot work? I made it very simple: The user types a message. The script checks whether a match exists in a JavaScript dictionary. "hi": "Hello!", "hello": "Hi, how are you?", "hello": "Hey!" If it finds a match, it returns the answer. If not, he responds with “I don’t understand.” There is also the Start button, its function is the same as the Win key on the keyboard: List applications Search for things Settings options It’s still just aesthetic, it has no real functionality, but I’m working on it. Firstly, I want to implement so that the user can change the wallpaper and customize the color of the taskbar.
DevLog #7 I’ve started building the WebOS Settings area. So far, I’ve implemented two main options: Change the wallpaper Change the taskbar color Honestly, it’s not particularly pretty or practical yet, but it’s a start. To make things easier, I added the ability to change the wallpaper using an image URL, which makes the process faster and simpler. Also, all changes are saved to localStorage , which was the most practical way I found to persist the data. Window controls (inspired by macOS) I also added window control buttons based on Apple Inc.’s system: 🟥 Red → closes the window 🟨 Yellow → minimizes the window 🟩 Green → expands / toggles full screen Taskbar Now, when a window is opened, the app automatically appears on the taskbar. I haven’t managed to get the icons looking exactly how I wanted yet, so for now, I’ve just displayed the app name with a stylized border to maintain visual organization.
Devlog #8 Added some new stuff to the WebOS. This time I focused more on customization and making the system feel more alive. Now you can change the wallpaper and the taskbar color, which makes everything feel a bit more personal. I also added a functional chatbot (super basic for now lol), but it already works and can handle some simple commands. Current Apps Welcome - A simple app with some basic info about the project. Cat Viewer - Shows random cat pictures because every OS needs cats. NASA Viewer - Displays space-related images and information. MiniTube - A mini YouTube-like app inside the WebOS. Pomodoro - A productivity app with a timer to help focus. Start Menu I also added the Start button, basically inspired by the Windows key/start menu idea. When clicked, it opens a little menu with quick access to apps and system options: Help - Works like a mini documentation page for the WebOS. I made it with a sidebar-style layout, kinda like docs websites. Settings - Lets you change the wallpaper and taskbar color. Shutdown - Simulates shutting down the PC by turning the screen black and showing “Shutting down…” . Taskbar Improvements Now when an app is opened, its icon shows up in the taskbar. Overall, that’s pretty much what I worked on in this update.
DevLog #9 Apenas correções de bugs e pequenos ajustes.
DevLog #9 Today I finished the help section for My Own WebOS. I added documentation pages for all system applications, simply explaining what each one does and how to use it.
DevLog #10 Writing code… that’s about it. I decided to rewrite the WebOS from scratch and completely change its style. There isn’t much to show yet, but I hope the result will be worth it.
DevLog #11 I’m thinking about using Svelte to rewrite my entire WebOS simulator. I believe it will make the code much more organized, simplify maintenance, and speed up development compared to the current project.
DevLog #12 Just testing a few things out. Basically, Svelte is very easy to understand, especially compared to the vanilla JavaScript I was using before. But there are quite a few things that are different.
Ships:
I created a webpage that simulates an operating system, all in a very simple way. It has 3 apps: a welcome app that simulates a notepad, a cat viewer that shows random cats, and one that shows cool facts about space. The app windows can be moved. The most challenging part was making things up, haha, because I didn’t know anything about JavaScript. I usually use Python for everything, and JavaScript is nothing like Python. I’m very proud of my cat app (who doesn’t like cats???). It’s also very difficult to make the site look good. I’m not very good at web design, so the site’s appearance is kind of poor, haha, mainly because CSS is very annoying. Overall, it’s been a really cool project to do.
My Own WebOS For this project, I updated my WebOS by adding new applications and various features. First, I made some improvements to the NASA Viewer. It now displays more information about the “Image of the Day” and is free of the bugs it had before. Next, I created MiniTube, an app that uses the YouTube API to search for and watch videos directly within the WebOS. I also built a Pomodoro app to help manage study and break times. Another addition was a chatbot. While it currently only responds to simple questions and commands, I really enjoyed building it. I had previously created something similar in Python, so I adapted that same logic for JavaScript. I also added a Start button, which functions just like the Windows key; it opens a menu containing the list of applications and some settings. In the settings, users can now change the wallpaper and the taskbar color. These changes are saved using LocalStorage, so they persist even after closing the browser. Finally, I created a Help menu that serves as documentation for the WebOS, explaining what each app does and how to use them. Fixing bugs was the most challenging part, as several issues popped up during development. Even so, the chatbot was the feature I enjoyed building the most. You can try out the project here: https://hallow303.github.io/MyownWebOS/...
|
1792824791.4154131
|
1792911191.4154131
|
|
13808
|
My very own WebOS by @mohitkrr2557 | Stardance
|
mohitkrr2557
|
2
|
205.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T23:55:17Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Cyber OS is a fully client-side, browser-based desktop OS simulation — built from scratch in vanilla HTML, CSS, and JavaScript, with zero frameworks, zero backend, and zero build step. It boots like a real machine: a login screen with custom profiles and emoji avatars, then a working desktop with draggable/resizable windows, a taskbar (search, start menu, system tray, flyouts for network/battery/volume), alt-tab switching, and snap layouts. Underneath that shell is a real virtual file system — files are persistent node objects you can actually create, open, edit, rename, and delete through File Explorer, not just decorative icons — plus a full app suite (Notepad, Calculator, To-Do, AI Chat, three different terminal shells, Paint, Media Player, Snipping Tool) and a Gaming Hub with 8 playable arcade games and persistent high scores. The newest piece, Brave, is a working in-OS browser: type any URL and it renders the live page, with real back/forward history and a clean fallback for sites that block embedding. The hardest part wasn’t any single feature — it was making the OS hold up under real use instead of just looking right in a screenshot. The file system needed an actual state machine: every file had to round-trip correctly through open → edit → save → delete → restore-from-recycle-bin without corrupting other files or colliding on names, all serialized into per-user local storage. Getting the animations to feel native took its own full pass — swapping synchronous style writes on every mouse move for transform updates inside the animation frame loop, and replacing scattered ad hoc transition values with one shared eased curve so windows, menus, and flyouts all move consistently instead of half snapping and half easing. Brave was its own rabbit hole — handling X-Frame-Options and CSP headers that block embedding without the iframe just going silently blank took a lot of trial and error to land on a clean “open in a new tab” fallback instead of a broken-looking pane. I’m proud that this stopped being a mock-up somewhere around the file system rewrite. Most “fake OS” projects let you click icons that don’t actually do anything; Cyber OS persists real state — files, sessions, high scores, notes, to-do items — all of it survives a refresh because it’s genuinely saved, not just rendered. ~205 hours across four devlogs went into getting from a static desktop image to something that behaves like a real, if small, operating system. Try it live, no install needed: https://mohitkrr2557.github.io/CyberOS/ . Sign in with any username — it spins up a fresh local profile — then open File Explorer and actually create, edit, and delete a file; drop into Space Notepad or the To-Do app and refresh to watch your state survive; launch a couple of games from the Gaming Hub; and try Brave with a real URL to see the live in-OS browser. Everything is stored locally to your own browser profile, so nothing you do will affect anyone else testing it.", "repo": "https://github.com/Mohitkrr2557/CyberOS", "demo": "https://mohitkrr2557.github.io/CyberOS/"}, {"ship_num": 2, "ts": "2026-06-27T14:30:14Z", "hours": 205.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Cyber OS — a browser-based desktop operating system simulation, built from scratch in vanilla HTML/CSS/JS with zero frameworks and no backend. Boot in as a Space Cadet, and you get a full desktop: draggable/resizable windows, a taskbar with live search, a start menu, alt-tab switching, and snap layouts — plus a real virtual file system where you can actually create, open, edit, and delete files (not just decorative icons). It comes loaded with built-in apps (Notepad, Calculator, To-Do, AI Chat, Terminal/PowerShell/Ubuntu shells, Paint, Media Player, Snipping Tool) and a Gaming Hub with 8 playable arcade games — Snake, 2048, Minesweeper, Blackjack, Pac-Man, and more — each with persistent high scores. Everything — user sessions, files, game scores — persists locally per profile, so it survives a refresh and feels like an actual OS rather than a mock-up. ~200 hours in so far, most recently spent building out the real file engine and smoothing every window/drag animation so it doesn’t feel laggy under real use. Built with: HTML5, CSS3 (custom theming engine), vanilla JavaScript, html2canvas.", "repo": "https://github.com/Mohitkrr2557/CyberOS", "demo": "https://mohitkrr2557.github.io/CyberOS/"}]...
|
[{"post_id": 17261, "ts": "202 [{"post_id": 17261, "ts": "2026-06-27T23:51:27Z", "hours": 0.2633, "text": "Today’s update closes one of the biggest gaps in Cyber OS’s in-browser experience: Brave is no longer a static prop showing a handful of hardcoded mock pages — type literally any URL into the address bar and it now resolves to a real page rendered live inside the browser window, with a proper loading state in the tab while it fetches and a working back/forward history stack once it’s in. Sites that refuse to be embedded (anything sending X-Frame-Options or a frame-ancestors CSP header) now fail gracefully into a clear “this site won’t load here — open it in a new tab” message instead of the silent blank pane the old build used to choke on. It sounds like a small change on paper, but it’s the difference between Brave being decoration on the desktop and an actual working browser — you can search, click through, and browse the real web without ever leaving the simulated OS."}, {"post_id": 16924, "ts": "2026-06-27T14:16:40Z", "hours": 162.6578, "text": "Cyber OS v2.1 Devlog: After roughly 150 hours since the last milestone, Cyber OS has moved from “looks like a desktop” to “behaves like one.” Where the previous release solved identity, session persistence, and the visual shell, this cycle was almost entirely focused on giving the file layer real teeth and giving the entire interaction surface a pass for latency, jank, and visual inconsistency. The result is a build that no longer just simulates file management and motion — it actually performs both. The single biggest structural addition is a genuine virtual file system sitting underneath File Explorer, replacing what was previously a static icon list with no backing state. Every file is now a real node object — name, type, parent-directory reference, content payload, and a last-modified timestamp — serialized directly into the user’s persistent profile store instead of hardcoded into the DOM. Opening a file resolves its type against an app-association table and routes the payload into the correct handler, so text-type nodes stream straight into Space Notepad’s editable surface with two-way binding: in-app edits write back to the node’s content field on a debounced save cycle rather than firing a disk write on every keystroke. Deletion no longer just yanks a DOM element; it stages the node into a true Recycle Bin queue with restore and permanent-purge paths, and renaming is now an in-place editable operation with collision checks against sibling nodes so a file can’t silently clobber another with the same name. None of this existed before — files were effectively props with no underlying state machine. Now they’re a small but real persistence layer with actual create, open, edit, and delete semantics behind it. On the visual side, the focus was smoothing every interaction that previously felt jarring or laggy under real use. Window open, close, and minimize transitions were rebuilt around a single eased transform-and-opacity curve instead of mismatched linear defaults, so windows scale and fade consistently rather than snapping into place. Drag and resize logic was rewritten to update transforms through the animation frame loop instead of writing styles synchronously on every pointer move, which cut visible stutter substantially on larger windows. Hover, focus, and active states across buttons, taskbar icons, and context menu items now pull from one shared elevation and shadow scale instead of ad hoc values scattered across components built at different times, so the desktop finally reads as one coherent surface instead of a patchwork of UI built in different sessions. Scrollbars, focus rings, and context menu animations were rebuilt to match the neon/glass aesthetic instead of falling back to browser defaults — one of the more obvious “unfinished” tells before, now gone. Underneath the visible layer, a meaningful share of those 150 hours went into cleanup nobody sees directly but that the whole experience depends on: debouncing the autosave scrapers so they stop thrashing local storage on every keystroke, validating file payloads before they ever reach the profile serializer so a malformed or oversized entry can’t corrupt a session, and trimming redundant reflows that were firing every time a window gained focus or a flyout opened. None of it shows up in a screenshot, but it’s the difference between an OS that feels responsive under sustained use and one that only feels responsive in a thirty-second demo. Taken together, the file engine and the motion pass were the two threads tying this update together — files now persist and behave like real file management instead of a mock-up, and the chrome around them finally moves the way a native desktop would. Next up: drag-and-drop file moves between folders, and carrying this same eased-transform approach into the snap-layout and alt-tab overlays, which still run on the older, snappier logic and now visibly lag behind everything else."}, {"post_id": 6576, "ts": "2026-06-11T01:33:05Z", "hours": 30.7583, "text": "I have officially completed a massive architectural refactor of Cyber OS v2.0, transforming a simple frontend mock-up into a highly interactive, stateful, and secure multi-user desktop simulation environment. This milestone release successfully bridges a secure boot kernel, an encrypted local file engine, and a fully reactive visual compositing layer. The core JS script now treats user sessions as persistent sandbox environments by running a secure boot cycle tied to browser local storage and custom profile serialization. To make the OS feel truly functional, I engineered automated data scrapers that continuously track and save a user’s local application modifications, including text inside the Space Notepad, active items within the Todo list, and chat logs inside the AI interface. These sessions are mapped directly to the authorized user’s profile and fully restored upon login, while strict kernel state flags manage layout depth and window minimizing queues. Visually, the entire desktop environment has been upgraded to a hardware-accelerated layout pipeline powered by a modular CSS variable architecture. This decoupled theme system allows the entire UI to instantly toggle between a neon terminal space and a sleek light mode theme through a single class injection. The styling rules supply high-fidelity interactive state vectors for active running applications, introducing translucent container overlays, distinct border changes, and neon glow vectors for active or minimized windows. Finally, the HTML scaffolding has been expanded to support modern desktop components, introducing a custom profile customizer on the boot screen and an advanced taskbar system. This taskbar hosts an active search utility, application launcher shortcuts, a terminal clock, and a hardware simulation tray complete with placeholder nodes for network, battery, and notification toggles. The system markup is fully optimized with hidden containment hooks, perfectly primed to anchor background canvas animation loops and edge-drag window snapping logic next. I am going to continue advancing this OS to reach a windows desktop experties!"}, {"post_id": 5780, "ts": "2026-06-09T18:10:25Z", "hours": 12.0811, "text": "Project Update: Cyber OS I’m stoked to share the progress on my custom WebOS! I’ve built a futuristic, space-themed desktop environment from scratch using pure HTML, CSS, and JavaScript, designed to feel like a high-performance digital cockpit running in the heart of a nebula. I’ve engineered a custom window manager that handles dragging, closing, and dynamic z-index layering. This is paired with a built-in utility suite featuring a Space Notepad for captain’s logs, a dynamic Star-Date Calendar, and a functional Todo list for managing station operations. Looking ahead, I’m preparing to launch a Wallpaper Engine for custom cosmic backgrounds and an AI Navigator Chatbot with a terminal-style interface. Can’t wait to see this OS fully powered up!"}]...
|
Title: My very own WebOS by @mohitkrr2557 | Starda Title: My very own WebOS by @mohitkrr2557 | Stardance
Devlogs:
Project Update: Cyber OS I’m stoked to share the progress on my custom WebOS! I’ve built a futuristic, space-themed desktop environment from scratch using pure HTML, CSS, and JavaScript, designed to feel like a high-performance digital cockpit running in the heart of a nebula. I’ve engineered a custom window manager that handles dragging, closing, and dynamic z-index layering. This is paired with a built-in utility suite featuring a Space Notepad for captain’s logs, a dynamic Star-Date Calendar, and a functional Todo list for managing station operations. Looking ahead, I’m preparing to launch a Wallpaper Engine for custom cosmic backgrounds and an AI Navigator Chatbot with a terminal-style interface. Can’t wait to see this OS fully powered up!
I have officially completed a massive architectural refactor of Cyber OS v2.0, transforming a simple frontend mock-up into a highly interactive, stateful, and secure multi-user desktop simulation environment. This milestone release successfully bridges a secure boot kernel, an encrypted local file engine, and a fully reactive visual compositing layer. The core JS script now treats user sessions as persistent sandbox environments by running a secure boot cycle tied to browser local storage and custom profile serialization. To make the OS feel truly functional, I engineered automated data scrapers that continuously track and save a user’s local application modifications, including text inside the Space Notepad, active items within the Todo list, and chat logs inside the AI interface. These sessions are mapped directly to the authorized user’s profile and fully restored upon login, while strict kernel state flags manage layout depth and window minimizing queues. Visually, the entire desktop environment has been upgraded to a hardware-accelerated layout pipeline powered by a modular CSS variable architecture. This decoupled theme system allows the entire UI to instantly toggle between a neon terminal space and a sleek light mode theme through a single class injection. The styling rules supply high-fidelity interactive state vectors for active running applications, introducing translucent container overlays, distinct border changes, and neon glow vectors for active or minimized windows. Finally, the HTML scaffolding has been expanded to support modern desktop components, introducing a custom profile customizer on the boot screen and an advanced taskbar system. This taskbar hosts an active search utility, application launcher shortcuts, a terminal clock, and a hardware simulation tray complete with placeholder nodes for network, battery, and notification toggles. The system markup is fully optimized with hidden containment hooks, perfectly primed to anchor background canvas animation loops and edge-drag window snapping logic next. I am going to continue advancing this OS to reach a windows desktop experties!
Cyber OS v2.1 Devlog: After roughly 150 hours since the last milestone, Cyber OS has moved from “looks like a desktop” to “behaves like one.” Where the previous release solved identity, session persistence, and the visual shell, this cycle was almost entirely focused on giving the file layer real teeth and giving the entire interaction surface a pass for latency, jank, and visual inconsistency. The result is a build that no longer just simulates file management and motion — it actually performs both. The single biggest structural addition is a genuine virtual file system sitting underneath File Explorer, replacing what was previously a static icon list with no backing state. Every file is now a real node object — name, type, parent-directory reference, content payload, and a last-modified timestamp — serialized directly into the user’s persistent profile store instead of hardcoded into the DOM. Opening a file resolves its type against an app-association table and routes the payload into the correct handler, so text-type nodes stream straight into Space Notepad’s editable surface with two-way binding: in-app edits write back to the node’s content field on a debounced save cycle rather than firing a disk write on every keystroke. Deletion no longer just yanks a DOM element; it stages the node into a true Recycle Bin queue with restore and permanent-purge paths, and renaming is now an in-place editable operation with collision checks against sibling nodes so a file can’t silently clobber another with the same name. None of this existed before — files were effectively props with no underlying state machine. Now they’re a small but real persistence layer with actual create, open, edit, and delete semantics behind it. On the visual side, the focus was smoothing every interaction that previously felt jarring or laggy under real use. Window open, close, and minimize transitions were rebuilt around a single eased transform-and-opacity curve instead of mismatched linear defaults, so windows scale and fade consistently rather than snapping into place. Drag and resize logic was rewritten to update transforms through the animation frame loop instead of writing styles synchronously on every pointer move, which cut visible stutter substantially on larger windows. Hover, focus, and active states across buttons, taskbar icons, and context menu items now pull from one shared elevation and shadow scale instead of ad hoc values scattered across components built at different times, so the desktop finally reads as one coherent surface instead of a patchwork of UI built in different sessions. Scrollbars, focus rings, and context menu animations were rebuilt to match the neon/glass aesthetic instead of falling back to browser defaults — one of the more obvious “unfinished” tells before, now gone. Underneath the visible layer, a meaningful share of those 150 hours went into cleanup nobody sees directly but that the whole experience depends on: debouncing the autosave scrapers so they stop thrashing local storage on every keystroke, validating file payloads before they ever reach the profile serializer so a malformed or oversized entry can’t corrupt a session, and trimming redundant reflows that were firing every time a window gained focus or a flyout opened. None of it shows up in a screenshot, but it’s the difference between an OS that feels responsive under sustained use and one that only feels responsive in a thirty-second demo. Taken together, the file engine and the motion pass were the two threads tying this update together — files now persist and behave like real file management instead of a mock-up, and the chrome around them finally moves the way a native desktop would. Next up: drag-and-drop file moves between folders, and carrying this same eased-transform approach into the snap-layout and alt-tab overlays, which still run on the older, snappier logic and now visibly lag behind everything else.
Today’s update closes one of the biggest gaps in Cyber OS’s in-browser experience: Brave is no longer a static prop showing a handful of hardcoded mock pages — type literally any URL into the address bar and it now resolves to a real page rendered live inside the browser window, with a proper loading state in the tab while it fetches and a working back/forward history stack once it’s in. Sites that refuse to be embedded (anything sending X-Frame-Options or a frame-ancestors CSP header) now fail gracefully into a clear “this site won’t load here — open it in a new tab” message instead of the silent blank pane the old build used to choke on. It sounds like a small change on paper, but it’s the difference between Brave being decoration on the desktop and an actual working browser — you can search, click through, and browse the real web without ever leaving the simulated OS.
Ships:
Cyber OS — a browser-based desktop operating system simulation, built from scratch in vanilla HTML/CSS/JS with zero frameworks and no backend. Boot in as a Space Cadet, and you get a full desktop: draggable/resizable windows, a taskbar with live search, a start menu, alt-tab switching, and snap layouts — plus a real virtual file system where you can actually create, open, edit, and delete files (not just decorative icons). It comes loaded with built-in apps (Notepad, Calculator, To-Do, AI Chat, Terminal/PowerShell/Ubuntu shells, Paint, Media Player, Snipping Tool) and a Gaming Hub with 8 playable arcade games — Snake, 2048, Minesweeper, Blackjack, Pac-Man, and more — each with persistent high scores. Everything — user sessions, files, game scores — persists locally per profile, so it survives a refresh and feels like an actual OS rather than a mock-up. ~200 hours in so far, most recently spent building out the real file engine and smoothing every window/drag animation so it doesn’t feel laggy under real use. Built with: HTML5, CSS3 (custom theming engine), vanilla JavaScript, html2canvas.
Cyber OS is a fully client-side, browser-based desktop OS simulation — built from scratch in vanilla HTML, CSS, and JavaScript, with zero frameworks, zero backend, and zero build step. It boots like a real machine: a login screen with custom profiles and emoji avatars, then a working desktop with draggable/resizable windows, a taskbar (search, start menu, system tray, flyouts for network/battery/volume), alt-tab switching, and snap layouts. Underneath that shell is a real virtual file system — files are persistent node objects you can actually create, open, edit, rename, and delete through File Explorer, not just decorative icons — plus a full app suite (Notepad, Calculator, To-Do, AI Chat, three different terminal shells, Paint, Media Player, Snipping Tool) and a Gaming Hub with 8 playable arcade games and persistent high scores. The newest piece, Brave, is a working in-OS browser: type any URL and it renders the live page, with real back/forward history and a clean fallback for sites that block embedding. The hardest part wasn’t any single feature — it was making the OS hold up under real use instead of just looking right in a screenshot. The file system needed an actual state machine: every file had to round-trip correctly through open → edit → save → delete → restore-from-recycle-bin without corrupting other files or colliding on names, all serialized into per-user local storage. Getting the animations to feel native took its own full pass — swapping synchronous style writes on every mouse move for transform updates inside the animation frame loop, and replacing scattered ad hoc transition values with one shared eased curve so windows, menus, and flyouts all move consistently instead of half snapping and half easing. Brave was its own rabbit hole — handling X-Frame-Options and CSP headers that block embedding without the iframe just going silently blank took a lot of trial and error to land on a clean “open in a new tab” fallback instead of a broken-looking pane. I’m proud that this stopped being a mock-up somewhere around the file system rewrite. Most “fake OS” projects let you click icons that don’t actually do anything; Cyber OS persists real state — files, sessions, high scores, notes, to-do items — all of it survives a refresh because it’s genuinely saved, not just rendered. ~205 hours across four devlogs went into getting from a static desktop image to something that behaves like a real, if small, operating system. Try it live, no install needed: https://mohitkrr2557.github.io/CyberOS/ . Sign in with any username — it spins up a fresh local profile — then open File Explorer and actually create, edit, and delete a file; drop into Space Notepad or the To-Do app and refresh to watch your state survive; launch a couple of games from the Gaming Hub; and try Brave with a real URL to see the live in-OS browser. Everything is stored locally to your own browser profile, so nothing you do will affect anyone else testing it....
|
1792820875.3729985
|
1792907275.3729985
|
|
13957
|
bbnOS by @not-willem | Stardance
|
not-willem
|
2
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T03:55:06Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an os called bbnOS because i can but it works pretty good and has draggable windows, a web browser and a terminal and you can upload single-file htmls yay", "repo": "https://github.com/not-willem/bbnOS", "demo": "https://not-willem.github.io/bbnOS/"}, {"ship_num": 2, "ts": "2026-06-22T01:08:47Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made bbnOS which is a pretty cool OS. also btw there are NOT draggable windows but I’ve built the UI to work around it and definitely not because I’m lazy lol Anyway I’ve implemented a terminal which SHOULD work but sometimes the curl command doesn’t but the rest is fine. Also you can install single file HTMLs from the personalization app so you can run some cool stuff on there. I’ve added the time and other things to and made it very visually appealing in general. Hope you’ll like it!", "repo": "https://github.com/not-willem/bbnOS", "demo": "https://not-willem.github.io/bbnOS/"}]...
|
[{"post_id": 16690, "ts": "202 [{"post_id": 16690, "ts": "2026-06-27T03:53:21Z", "hours": 0.8775, "text": "added draggable windows! now it is cooler"}, {"post_id": 7878, "ts": "2026-06-13T04:36:51Z", "hours": 2.1714, "text": "ok yay i think i’ve finished. so i added personalization where you can add apps and ive also added a way to change the background. currently theres no way to remove apps but i really cant be bothered to figure it out so you cant save apps either. maybe a little more coding would fix that but im just gonna stop instead of perfecting it too much. anyway you can check it out at https://github.com/not-willem/bbnOS have a good day!"}, {"post_id": 6674, "ts": "2026-06-11T05:40:57Z", "hours": 3.5769, "text": "Added ALOT to bbnOS but heres just a general description of it so far: bbnOS is a HTML based HTML “operating system” with features like a web browser and a terminal and much more to come ive gotten the web browser to work which right now is just https://flipgrid.cf/ and the terminal but im yet to actually make things close and scale around and drag around and fullscreen and minimise etc… hope everyone has a good day today!"}, {"post_id": 6005, "ts": "2026-06-10T02:09:20Z", "hours": 0.5975, "text": "lol bbnOS is looking actually fire"}, {"post_id": 5455, "ts": "2026-06-09T07:45:39Z", "hours": 0.6497, "text": "bbnOS"}]...
|
Title: bbnOS by @not-willem | Stardance
Devlogs:
Title: bbnOS by @not-willem | Stardance
Devlogs:
bbnOS
lol bbnOS is looking actually fire
Added ALOT to bbnOS but heres just a general description of it so far: bbnOS is a HTML based HTML “operating system” with features like a web browser and a terminal and much more to come ive gotten the web browser to work which right now is just https://flipgrid.cf/ and the terminal but im yet to actually make things close and scale around and drag around and fullscreen and minimise etc… hope everyone has a good day today!
ok yay i think i’ve finished. so i added personalization where you can add apps and ive also added a way to change the background. currently theres no way to remove apps but i really cant be bothered to figure it out so you cant save apps either. maybe a little more coding would fix that but im just gonna stop instead of perfecting it too much. anyway you can check it out at https://github.com/not-willem/bbnOS have a good day!
added draggable windows! now it is cooler
Ships:
I made bbnOS which is a pretty cool OS. also btw there are NOT draggable windows but I’ve built the UI to work around it and definitely not because I’m lazy lol Anyway I’ve implemented a terminal which SHOULD work but sometimes the curl command doesn’t but the rest is fine. Also you can install single file HTMLs from the personalization app so you can run some cool stuff on there. I’ve added the time and other things to and made it very visually appealing in general. Hope you’ll like it!
I made an os called bbnOS because i can but it works pretty good and has draggable windows, a web browser and a terminal and you can upload single-file htmls yay...
|
1792846272.7696006
|
1792932672.7696006
|
|
14014
|
My very own WebOS by @Churu | Stardance
|
Churu
|
2
|
5.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T08:59:02Z", "hours": 1.0, "multiplier": 1.45, "payout": 2, "blessing": "neutral", "text": "I built my first WebOS using some knowledge myself and also learning through the guide provided by HackClub. This is a WebOS that has helpful features like Weather and Todo list makers to keep u aware of your tasks. I First made a loading screen which is very easy to make all it needed was to use some HTML to make the loading screen appear and then all it needed was basic CSS for it cover the whole screen to give it a very cool effect and then i js took some help with javascript to make the bar load, also Made the whole inside as in the images below i have shown that all the apps i made via javascript are shown i used wttr API via wttr.in for weather broadcast and the thing is it does not require any API key and is totally free and works pretty good i mean it does sometimes show random weather but yeah it is a very good API that can be used. and For the images i js kept a web theme and a kind of a spiderman theme cuz it looks cool like that. Also I added a working terminal which currently has 4 commands but as its my first project hope its prettyu cool for my first project.", "repo": "https://github.com/jasersans1-create/CobWebOS", "demo": "https://cob-web-os.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-02T16:45:52Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built my first WebOS using some knowledge myself and also learning through the guide provided by HackClub. This is a WebOS that has helpful features like Weather and Todo list makers to keep u aware of your tasks. I First made a loading screen which is very easy to make all it needed was to use some HTML to make the loading screen appear and then all it needed was basic CSS for it cover the whole screen to give it a very cool effect and then i js took some help with javascript to make the bar load, also Made the whole inside as in the images below i have shown that all the apps i made via javascript are shown i used wttr API via wttr.in for weather broadcast and the thing is it does not require any API key and is totally free and works pretty good i mean it does sometimes show random weather but yeah it is a very good API that can be used. and For the images i js kept a web theme and a kind of a spiderman theme cuz it looks cool like that.", "repo": "https://github.com/jasersans1-create/CobWebOS", "demo": "https://cob-web-os.vercel.app/"}]...
|
[{"post_id": 25815, "ts": "202 [{"post_id": 25815, "ts": "2026-07-10T08:49:27Z", "hours": 0.4764, "text": "FINALLY FIXED EVERYTHING AND THANKS TO GOD MY TERMINALLL IS WORKING PROPERLY!!!! I currently only added 4 commands to it but i find it pretty cool for my first WebOS. Thankfully i hope i get reviewed good :)))"}, {"post_id": 25797, "ts": "2026-07-10T08:19:38Z", "hours": 0.9086, "text": "Tried adding a terminal application inside my WebOS with commands but accidentally ran into an error that restricts my Application opening, i.e i might have forgot to define div id properly , will fix it soon enough and come up with the terminal feature that works properly and name defined as “root@churu” want to give it the linux vibes yk."}, {"post_id": 20873, "ts": "2026-07-02T16:22:01Z", "hours": 3.8581, "text": "I First made a loading screen which is very easy to make all it needed was to use some HTML to make the loading screen appear and then all it needed was basic CSS for it cover the whole screen to give it a very cool effect and then i js took some help with javascript to make the bar load, also Made the whole inside as in the images below i have shown that all the apps i made via javascript are shown i used wttr API via wttr.in for weather broadcast and the thing is it does not require any API key and is totally free and works pretty good i mean it does sometimes show random weather but yeah it is a very good API that can be used. and For the images i js kept a web theme and a kind of a spiderman theme cuz it looks cool like that."}]...
|
Title: My very own WebOS by @Churu | Stardance
De Title: My very own WebOS by @Churu | Stardance
Devlogs:
I First made a loading screen which is very easy to make all it needed was to use some HTML to make the loading screen appear and then all it needed was basic CSS for it cover the whole screen to give it a very cool effect and then i js took some help with javascript to make the bar load, also Made the whole inside as in the images below i have shown that all the apps i made via javascript are shown i used wttr API via wttr.in for weather broadcast and the thing is it does not require any API key and is totally free and works pretty good i mean it does sometimes show random weather but yeah it is a very good API that can be used. and For the images i js kept a web theme and a kind of a spiderman theme cuz it looks cool like that.
Tried adding a terminal application inside my WebOS with commands but accidentally ran into an error that restricts my Application opening, i.e i might have forgot to define div id properly , will fix it soon enough and come up with the terminal feature that works properly and name defined as “root@churu” want to give it the linux vibes yk.
FINALLY FIXED EVERYTHING AND THANKS TO GOD MY TERMINALLL IS WORKING PROPERLY!!!! I currently only added 4 commands to it but i find it pretty cool for my first WebOS. Thankfully i hope i get reviewed good :)))
Ships:
I built my first WebOS using some knowledge myself and also learning through the guide provided by HackClub. This is a WebOS that has helpful features like Weather and Todo list makers to keep u aware of your tasks. I First made a loading screen which is very easy to make all it needed was to use some HTML to make the loading screen appear and then all it needed was basic CSS for it cover the whole screen to give it a very cool effect and then i js took some help with javascript to make the bar load, also Made the whole inside as in the images below i have shown that all the apps i made via javascript are shown i used wttr API via wttr.in for weather broadcast and the thing is it does not require any API key and is totally free and works pretty good i mean it does sometimes show random weather but yeah it is a very good API that can be used. and For the images i js kept a web theme and a kind of a spiderman theme cuz it looks cool like that.
I built my first WebOS using some knowledge myself and also learning through the guide provided by HackClub. This is a WebOS that has helpful features like Weather and Todo list makers to keep u aware of your tasks. I First made a loading screen which is very easy to make all it needed was to use some HTML to make the loading screen appear and then all it needed was basic CSS for it cover the whole screen to give it a very cool effect and then i js took some help with javascript to make the bar load, also Made the whole inside as in the images below i have shown that all the apps i made via javascript are shown i used wttr API via wttr.in for weather broadcast and the thing is it does not require any API key and is totally free and works pretty good i mean it does sometimes show random weather but yeah it is a very good API that can be used. and For the images i js kept a web theme and a kind of a spiderman theme cuz it looks cool like that. Also I added a working terminal which currently has 4 commands but as its my first project hope its prettyu cool for my first project....
|
1792878472.7196681
|
1793742472.7196681
|
|
14066
|
Janitor Space Program (J.S.P.) by @aloyak | Starda Janitor Space Program (J.S.P.) by @aloyak | Stardance...
|
aloyak
|
2
|
160.0
|
3078
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-17T13:40:57Z", "hours": 55.0, "multiplier": 18.95, "payout": 1041, "blessing": "neutral", "text": "This is my 3D exploration-sandbox game that I built with my custom game engine! I’ve added quite a lot of stuff like a simple exploration game mode that allows you to move around a hand-crafted solar system i called “Halcyon”. there are also a lot of other game modes you can try and have fun with before I finally add the campaign game mode for the final version! In the picture you can see an in-game screenshot of the player walking around the surface of the earth-like planet “Gaia”, hope you like my game! With <3, 4loyak!", "repo": "https://github.com/aloyak/jsp", "demo": "https://aloyak.itch.io/jsp"}, {"ship_num": 2, "ts": "2026-07-16T13:34:38Z", "hours": 105.0, "multiplier": 19.52, "payout": 2037, "blessing": "neutral", "text": "This is my 3D game about space exploration and kessler cascades, it has a campaign mode coming up but i havent finished that yet, for now enjoy the 3 game modes! i built this on top of my custom engine so its been a lot of hard work, please try it out!!!!", "repo": "https://github.com/aloyak/jsp", "demo": "https://aloyak.itch.io/jsp"}]...
|
[{"post_id": 48889, "ts": "202 [{"post_id": 48889, "ts": "2026-08-17T13:35:52Z", "hours": 3.9133, "text": "JSP! I’m back! and I finally have a new decent version that im probably gonna ship shortly after I publish this devlog. Its been so long since the last devlog because a number of factors, I had some vacations, my main pc is now just a steam deck connected to a monitor and also I’m kind of struggling to continue this project, I hope this isnt the last version but working on the project and adding or fixing things is very complicated and requires a lot of research to do it right, and it is exhausting What was added?? Included the new planet models to the halcyon system, you can now correctly explore them by using the new terrain system I added to the engine! Added some small help windows/hints for the new stuff before shipping! Fixed some audio bugs and added a sound effect for when you close a window Fixed the in-helmet HUD UI, the input vectors now correctly show the direction the thrust is being applied to, kinda like in Outer Wilds!! I’m most likely to be focusing on continuing the engine for a little bit, it really really does require some refactoring and I also need to clean some likely dead code or at least re-understand the code i wrote as it has lines from almost a 10 months ago! Hopefully someone could help and contribute to the project maybe or make something new out of it too! Im still planing on continuing to develop it but not at this pace considering im about to start college :))"}, {"post_id": 41224, "ts": "2026-08-05T09:35:20Z", "hours": 6.8169, "text": "J.S.P. Very exciting changes to the exploration mode yay !! I’ve been working on precisely TWO (2) things but one of them is way too early for me to be able to show you anything, more on that in the end Whats new? I’ve create a custom blender addon that lets me create procedural noise-based planets! It is really powerful and it gets you really good results for how simple it is really. In a way, its nothing but a vertex shader but coded in python lol It generates 3D spherical noise and applies it into an icosphere with a variety of parameters. Some of them arent precisely working but they are fine for now (specially the “ridged” option) You can try it yourself, its open source too! https://github.com/aloyak/JSP/blob/main/assets_src/blender/addons/planet_generator.py Terrain System I’m developing a way for the player to correctly collide with the geometry of these planets, but this is mostly engine-sided changes and I’m not very deep into it yet. I’m currently researching how to handle multi-threading async functions… more information about this in my latest engine’s devlog: https://stardance.hackclub.com/projects/1029/devlogs/34738 Known issues These are not really important right now, but for some reason I’ve realized that the splash screen takes different amounts of time depending on where you run the game?? what? A steam deck is around 3 seconds, my computer (the intended duration) is 4 seconds and in a friend’s laptop it is ~0.5 seconds"}, {"post_id": 39548, "ts": "2026-08-02T15:55:39Z", "hours": 7.1231, "text": "JSP We are SO back! I thought it would take me weeks to solve this issue but it wasnt that hard, thanks claude lol for helping. It’s not perfect just yet but its honestly crazy how my own engine managed to handle what im about to explain What took soo long The game now handles a transition from a global physics world to a new extra physics world that lives locally when the player enters a new planet (the origin of the new physics world would be the planet’s center), this means that you can perfectly walk on the surface of all the planets while they move around in the orbits without any weird behaviors This took a good amount of engine refactoring and a few changes to some systems (specially the floating origin) I need to fix a couple things like the drag when you are entering a planet, but that should be handled later on when you actually use a spaceship to enter and not just yourself with your spacesuit Other stuff that is cool Added a helmet overlay! (very inspired by outer wilds, id like some suggestions to make it more original honestly, but right now it decent). It is currently work in progress tho, and theres a lot of information missing… Small UI improvements: rounded borders, removed window’s transparency, added window close sound effects (need to find a better one tho), little better controller support… I just this idea to have vehicles but that will take super long, its added to the ideas file but thats certainty not being considered for short term, Any suggestions are welcome tho PD: video is very bad res bc i had to compress it unfortunately"}, {"post_id": 35908, "ts": "2026-07-27T17:18:56Z", "hours": 5.9792, "text": "JSP! I’ve finished porting the game to the new action based input system, its not great yet, theres a lot to polish but at least you can play 80% of the game just as good as with a keyboard/mouse (even better sometimes!) What’s the new input system? The game now asks for “actions” callbacks instead of directly asking for raw input. This new layer in the middle allows to make different devices have their own way to control each actions, so it now supports all the gamepads you probably have: xbox, playstation, steam, nintendo, generic ones too It is almost steam deck ready! Ive been playing this game on my steam deck and it works great! (you can get around 900 fps when unrestricted) Playing the game with a controller plus a little help from the little mouse trackpad really makes this game fun to play (100% coverage with this setup) Now i will finally start doing the boring physics stuff that will hopefully not take so long but idk, we’ll have to see Other stuff that was added Improved a bit the gravity based movement mode, it now adds the atmosphere’s drag gradually depending on its density, being the density higher the closer you are to the surface, this makes entering planets feel better Fixed some messed up formatting style in my code I dont know if start a new project for no more than 2 weeks and then go back, ive been having some cool new ideas but for now ill stick to this project PD: the picture is an old version (0.12.1), latest version with good controller support is 0.14.0"}, {"post_id": 34767, "ts": "2026-07-25T19:07:39Z", "hours": 8.6764, "text": "JSP Omg i need a break! just one more change bro and i will start doing the hard and boring stuff, just one more i swear! This sums up everything ive done for the past few hours, although the new improvements are actually quite important, i feel like im somewhat rushing them instead of focusing on the exploration mode New things!! Simple LOD system for planets, there wasnt a big performance change, but the model swap is very unnoticeable and nice so thats great! Added a simple spoiler warning to the exploration mode, the original idea was that you should unlock it after playing the campaign but i guess its fine lol I FIXED THE DEPTH BUFFER PRECISION ISSUE!!!! it was such a small change omg, i just dynamically changed the near plane of the camera based on how far you are to a planet, pretty nice WIP Work in progress: I’m porting the whole game to the new action-based input system so that the game supports controllers natively without any kind of steam layer on top, this is till very early and i still dont know how to make some stuff be fun to use with a controller…. I finish this, finish the two major things on the exploration mode that are 100% gonna be quick, make some decent amount of content for it, add the custom spaceship controller and launch system, make the first ~5 minutes of the campaign mode, and then SHIP THIS PROJECT (this will surely go as planned) PD: the video u see is completely controlled with my gamepad, not the best controls yet but its better than nothing!"}, {"post_id": 33389, "ts": "2026-07-23T09:24:10Z", "hours": 5.8975, "text": "JSP Worked on so many things before getting started with the complicated stuff, ill tell more about that in the bottom section, but for now, im pretty happy with what ive just added, even tho progress is pretty slow!!! What have i added? Full/complete atmospheric effect , it now not only looks good from outside, now from the inside too!!! Its a small trick but when the camera gets close enough to a planet, its atmosphere’s density scales up making the sky blue like here on earth or greatly improving the sunrises and sunsets , they do look beatiful Added floating origin: double precision was not enough so ive added a system that teleports all the entities in the scene when the player gets too far from the origin, this works surprisingly good and it was very simple to do, hopefully it wont break physics later on, but so far its great! This allows the solar system to go from ~10000 units wide to over ~3000000!! that is great! This was a engine-level change mostly tho You can finally use the planets you discover in the campaign mode in the sandbox mode Dynamic settings!!! I made it so that when you first load into the game, the UI scales to your resolution and your target fps are set to your monitor’s refresh rate, might not look like something important but this is actually HUGE Whats cooking up currently! Need a system to allow the player to be placed on top of moving planets (it currently works but breaks sometimes), and also to allow those planets to rotate. This will be achieved with a completely new physics world that will live localy on the closest planet the player is to Chunked mesh collider system i really dont know how to this, because of the terrain of my planets (TODO), collisions will be complicated to calculate, if you know about anything that could help, please send it!!! PD: I wish i could spend more time actually coding than thinking, if that were to be the case id have 300 hours+ in this project already"}, {"post_id": 32263, "ts": "2026-07-21T10:11:59Z", "hours": 8.1467, "text": "JSP This is one of the most exiting devlogs so far!! I’ve managed to get a very basic “solar system working, not all the time and of course it isnt perfect but it is really cool, heres its lore: (note that planets are placeholders right now, and distances/scale should be a lot bigger in the future) The “Halcyon” System Somewhere very very far from our current home, humanity has managed to establish a multi-planetary life in a new system after traveling for generations in their own space station The Halcyon system is composed of 5 planets (maybe more in the future) that orbit around a massive black hole (it doesnt have a name yet) “Gaia” is the earth-like planet whose own satellite, “Vesta”, is a red dwarf star that provides just enough light and heat in order to live (seen in the demo video) “Ying” and “Yan” (names will probably change), are two tiny planets that follow exact opposite orbits around the black hole, when one of them is at the perihelion, the other ones at the aphelion “Kepler” is a huge rocky planet at the outskirts of the system where small human colonies currently live Note that the campaign will be linear and happen entirely inside this place, but you will also have a “exploration” game mode that will allow you to find and see new secrets hidden… :)) Technical stuff (i.e. what was added) Created the base for the Halcyon System, planets follow a predetermined elliptical orbit in real-time. Note that for debugging, scale is around 10 to 100 times less! Added a simple physics based player controller, this took a lot of engine refactoring too. The player is affected by the gravity of the near planets and, when close enough to a planet’s surface, it is automatically aligned with the gravity vector and its also affected by the atmosphere’s drag (if theres any), this was by far the most difficult thing to do Added a little Free Camera controller as well What will be added in the future This is only the start . Theres still a few complicated things to do: Add double precision and floating origin to solve the problems that will appear when distances become as big as id like them to be Add a chunked collision mesh system for planets with complex geometry, like mountains or things like that. Right now they are all controlled by a simple kinematic sphere collider This system currently breaks the player movement when planets are moving, this is why i set “time scale” to 0. To fix this ive been thinking of creating a local physics world that sets the planet you are on to be the origin of the physics, making it look like if the planet was static, this will by by far what will take the most amount of work probably i also wanna update the atmospheric shader as it is by far the thing worsening the game’s performance, and id like to make the sky fully tint when your inside it PD: Thank you so much for all the people that support/follow this project, it already has 21 followers . thank you, really!"}, {"post_id": 30589, "ts": "2026-07-18T09:11:03Z", "hours": 8.3614, "text": "JSP I want to dedicate this devlog to @Rupnil as he always says that devlogs need to be 3-4 hours max, so i can explain why thats not always possible. Out of the 8 hours i devlog today, around 7.5 of them were spent ONLY debugging ONE SINGLE BUG for 2 whole days. I started losing my mind lmfao the bug: All the built-in and embedded textures became completely broken and ONLY on super specific conditions on certain parts and game modes. But the worst part was that rolling back to a version from days ago DID NOT solve the issue at all . I even considered that my GPU gave up on my and it was just showing gpu artifact slop in my screen the fix: Apparently there was a small bug with gpu memory allocation in the backend of dear imgui (apparently ONLY in the SDL2-OpenGL backend lmfao) and only for the docking branch of the repo. Rolling back to an old dear imgui version from the main branch solved the issue but damn. Ive also reported the issue as much as i could in the official repo. Pretty much, updating the engine to the latest version automatically updated its dependencies and thus leaked the bug to my game Appart from that I’ve spent a little bit on starting to develop the open-universe system where you can travel around planets! More on that in the next devlog probably. I already have though about the planet’s names, positions and stuff! pretty exiting!! PD: In the mean time ive also being updating the engine at the same time to improve the physics system, which is a lot better right now!"}, {"post_id": 29477, "ts": "2026-07-16T13:30:28Z", "hours": 4.3869, "text": "JSP Pre-ship checklist is complete! I’m so ready to ship the first version and start developing the campaign, which is the main thing of this game. I’ve actually started it a little bit, it now has an interior level system completely different to the gamemode system i had for the rest of the game, this is pretty exiting! stuff that ive done before shipping Built the game for windows, took a little bit but performance is 1:1 and everything works perfectly, the only thing was that i had to change the backend of the audio engine to use something else but that was fairly quick! Reduced the size of the game MASSIVELY , it went from around 350MB to ~35MB , thats literally 10 times less!! managed to do this by compressing the audio files, although the change is almost unnoticeable, and also making the engine bake some textures on build time, just like real fancy engines do! Changed a bit the main menu/ campaing mode but for now it is all a placeholder Created a new itch.io banner Made the HELP menu show up by default, i dont really like this but i think its probably the best for people to rate it nicely, wont be in the final version… Added a input mode (another one) to the spaceship building mode that allows you to hover the attachment points and it will tell you with a little popup what category of part can go there If you are rating my project, please ishowspeed i need this now in all fairness i hope people like my game! im not even close to finishing it lol Right after this first ship i will work on updating the engine to support new features that the campaign mode will certainty need 100%, like a working physics engine, ive thought of porting what i currently have to use a new one i found and that is getting very popular called “Box3D”, we’ll see, byeeeeeee"}, {"post_id": 27751, "ts": "2026-07-13T16:07:37Z", "hours": 7.2142, "text": "JSP https://github.com/aloyak/JSP https://aloyak.itch.io/jsp?secret=nkYXIEVo8woJvblBQRYMIrWSFc I feel like im getting very close to a first ever release and finally start with the campaign mode! I finished some polishing stuff and fixed a bit, i dont think the spacecraft builder mode is ready 100% but ill use it in the campaing mode either way so ill have to update it regardless I’ve officially published the github repository where you can check out the huge amount of code this project already has lol. I’ve also created a new itchio page, this is the secret link (for feedback): https://aloyak.itch.io/jsp?secret=nkYXIEVo8woJvblBQRYMIrWSFc added things: Published the github repo and the itchio page! With a lot of new screenshots and art. I’ve also added the source files of the textures (.xfc gimp files, including the itchio banners) as well as the 3D models I’ve made (in blender) which can all be found in the assets_src/ folder Added a way to delete different parts in the spaceship building mode Added a few new parts to the spaceship building mode, refactored the whole system to make it “easier” (not really) to add new parts and things Added a full README + LICENSE to the repo Added a new shader , it is the small fog that you see in the vide when building a spaceship in order to hide the lack of detail in the exterior, the shader fades out the more you look up so you can see the beautiful skybox Added load/saving to the spacecraft building game mode, you can now save your ship’s to load them later just like with planets and sandboxes Fix some memory management problems where i forgot to delete some pointers => no memory leaks or crashes! I dont think this will be the last devlog before the first ship, but maybe, who knows right? Looking forward to you all trying my game! (the part that is done) PD: 100 hours"}, {"post_id": 25218, "ts": "2026-07-09T10:34:55Z", "hours": 3.7989, "text": "JSP Can’t really express enough how much I enjoy making shaders, the look really good. i might make a video about it with the new hackclub video challenge, we might see, I’m kinda shy for these sort of things :)) Today’s devlog is pretty much to show only one thing. I’ve been doing some really small changes to UI, a few bug fixes but the important thing is the new Central Body system for the sandbox mode (the code is pretty rough right now but hopefully ill improve it), this now allows you to choose the central body that your planets will orbit around So now, instead of having only the sun in the middle you can now select a BLACK HOLE instead, which i think its a lot cooler. Note that the whole black hole is completely done by a single glsl fragment shader, how cool is that? I’ve reused a small amount of code from the atmosphere shader and then researched a bit on similar projects Apart from this I’ve also added a new “extra” option to allow the player to change the tint of the skybox, so you can create even weirder solar systems, any new suggestions on what else to add are welcome! After this im gonna do a small refactoring change that is really stupid and needs to be changed in the entire code base, its just a small thing with the new language system"}, {"post_id": 24594, "ts": "2026-07-08T09:29:46Z", "hours": 8.8931, "text": "JSP Worked on polishing and improving a few quality of life features and overall stability, also I took my time to translate every single text in the game to spanish, although the new dynamic language system should work for adding any new language fairly quickly. this is a very important change because doing this after the campaign would be a nightmare. language is also saved to settings new stuff Added a dynamic language system and support for playing the game in spanish, if you want any new languages or help translate and thus be added to the credits please reach out Added a full credits panel where it shows all the licenses and 3rd party code/art used, AI disclosure and other stuff Fixed some weird seg faults when going back to main menu from the blueprint view Updated all icons, all of them were used in the sandbox game mode Added some new settings to the blueprint view inside the spaceship building game mode What I wanna do now is to finally finish the spaceship sandbox finally but its taking longer than expected and it requires a lot of brainpower that many times is less appealing to do compared to playing persona 5 royal lmao. Note: once the source code is published, sending feedback, playtesting or translating would maybe mean that i put you in the credits! fr i might need some help tho"}, {"post_id": 22329, "ts": "2026-07-04T19:06:08Z", "hours": 7.0856, "text": "JSP I really enjoy creating and coding shaders and so i started adding some cool effects to the spacecraft editor, didnt really add any new parts but i think that what i added was pretty interesting. I’ve also been working on improving a bit the user experience and making things obvious to use without explaining anything, this is probably the most fun i had doing this project in a while :) what was added Added “Blueprint” view for your spaceship, watch the video to see what it is! currently very early version tho Added a help window that changes based on the gamemode Added geometry center (blue) and center of mass (yellow) to the spaceship Small fixes to transition between movesets Added a border shader to mark the bounds of the building workspace Added a few icons that really need some improvement The idea of the blueprint mode is to edit different things from the spaceship, and also to see the different stages of your little ship! more on this later, im not specially creative enough to write a lot today lol Ill also probably add a dynamic cursor system but idk"}, {"post_id": 20638, "ts": "2026-07-02T08:56:03Z", "hours": 6.5689, "text": "JSP Been working on the spaceship builder gamemode and its pretty fun! right now the system is very simple but solid. i had to model a couple test things and fix many bugs but it is going quite fast. The current system is a simple attachment-part system where each attachment holds up information about allowed part’s categories to attach and the normal vector of the attachment. Unfortunately removing parts is not really an option yet cuz i need to see how i will make that possible later on summary on new features: started the actual spaceship building gamemode, currently it features just basic part placement logic small changes to sound effects and music (not shown in the video) Apart from obvious structural changes, id also want to add some sort of customization to your spaceships, with different colors, flags, sigils idk. I dont want to make building a spaceship something hard but just a simple thing you do to have your own individual experience, obviously you wont be able to make some cursed stuff as it wont just fly into space without an engine, but the idea is that everything with enough parts should work"}, {"post_id": 18642, "ts": "2026-06-29T20:39:49Z", "hours": 3.7319, "text": "JSP Unfortunately hackatime doesnt support blender so the ~2.5 hours i spent modeling the assembly building for the spacecraft editor sandbox will not count but its fine. I’ve also done some deep debugging to the engine as it now supports embedded materials even when they dont have any texture, before this change everything looked like a wierd artifact in black/purple colors (check out the second image if ud like to see it, its pretty in a way) what was added/changed Created a not-final but decent model for the assembly building you will be creating your custom spaceship in Added first person camera control, that is used by this gamemode to get a different “perspective” on your awesome creation. you can toggle between the normal orbital view and the fp view some engine-level optimizations This now means im FREE… to actually start developing the spacecraft building sandbox, so we are back to it lol. im hoping it doesnt take me that much but i still need to finish to understand how exactly i want this to be as this is probably the only shared code that the campaign game mode will use, so i better make it good as it “counts” double PD: already said this, but the second screenshot is just so you comprehend what ive been struggling with for the past 48 hours :("}, {"post_id": 17110, "ts": "2026-06-27T19:42:28Z", "hours": 9.6172, "text": "JSP Huge progress!! (yes, really) I’ve made some cool stuff an this game now looks a lot more professional, these last changes we’re surprisingly fast and fun to do (finally for once lmao), although the following changes, most of them, are still work in progress. I’ve officially decided that I’m not gonna be updating the engine’s repository solely for this project as im a bit more focused on making my game work rather than making the engine reliable and well-structured for any usecase, even tho the engine will still recieve updates any way cuz i really need them for the game, but the main focus is to not suffocate the engine with specific jsp stuff. new stuff audio system: custom imgui wrapper that lets me make sound effects for buttons on hover and press + background music system that lets me control simple fade out and transition to other songs, currently only in the main menu user settings: instead of making the same json slop ive made for the rest of the load/saving stuff, i made a fancy system that lives in the engine’s core and that lets you save any kind of settings a lot easier. user settings are now correctly saved when changed on user/settings.json created a simple intro text for the first run that explains a some information made the settings window accessible from anywhere, not tied to the main menu anymore FANCY TRANSITIONS between gamemodes, it now fades in/out to black with a little loading icon in the bottom right corner, this took longer than id like to explain unfortunately added a color history for the paint tool in the planet sandbox improved atmosphere UI controls in the planet sandbox fix water shader sometimes rendering on top of an atmosphere As you might be able to guess, some of these changes weren’t really necessary but im sort of procrastinating so that i dont have to model the assembly building for the next game mode cuz i really suck at it and will be painful most likely I’ve though of adding a “first person view” move mode to the spacecraft sandbox as it would be cool to see your creation from an engineer’s point of view and also because that way i already will have coded the controls for the campaign :))"}, {"post_id": 15575, "ts": "2026-06-25T10:26:14Z", "hours": 5.6989, "text": "JSP Currently finishing the gravity sandbox gamemode! I still need to make quite a big change as im thinking of unifying the “gravity body” struct i use in the sandbox with the “planet component” i use in the rest of the game, so this will probably take a while but, for now, the sandbox game mode seems to be the next thing to be finished! new stuff! the gravity sandbox now has gravity!!!! note that it is not super realistic nasa-level simulation, i was thinking of something a lot more arcade. this is very well reflected in the fictional scale (its around 1:100000), because games must be fun first, then realistic if possible separated the gravity sandbox file to hold the built-in planet’s registry in a different file (its around ~1300 lines of code rn lol, after the simplification…) added a nice destroy animation for the planets, improved the velocity tool and made the selection tool follow the planets the intro animation now locks into the sun, which is now the origin of the scene + changes to the style of the sun added trails to the planets in the simulation (that you can toggle, of course) small UI improvements Whats next u say? applying the same load/save system that i used in the planet builder sandbox, only that now i wont have to create a vertex data to file system (yay) Im also starting to 3d model in blender the “assembly building” where you will be able to build your spaceships in the other game mode, but im really bad at it so ill leave it for later, once the spacecraft builder game mode is finished i will probably ship the first version"}, {"post_id": 13151, "ts": "2026-06-21T14:56:42Z", "hours": 10.1961, "text": "JSP I’ve officially finished the planet builder sandbox gamemode finally, probably will tweak a lot of things but the main stuff is done. i spent quite a lot trying to fix a problem with the depth texture that isnt even fixed right now lmao, quick explanation: distances are huge and so the depth texture loses a lot of precision, to combat this i decide to add reverse-z to the engine’s renderer but this didnt really solve the issue as it probably needs even more work adding an inifinite “far” plane or logarithmic depth but i think its fine for now, ill explain this more in depth with the next devlog on the origin engine. new features added oceans to the planet builder, very simple for now but as a first version i think it works just fine, i spent at least 8 hours with this already lol, added basic controls to the ui to modify the shader’s uniforms and hopefully its good enough added loading/saving to the planet builder and to the sandbox, you can now save your projects using json serialization, a geometry-to-file algorithm and a texture-to file algorithm. note that the planets you create in the planet builder can also be used in the gravity sandbox added the terrain tool so you can now modify the geometry of your planet as you like, creating mountains, valleys or oceans Next up is to finish the gravity sandbox gamemode, hopefully that should be a lot quicker as most of it is already done, but you know how this usually goes HELP: if you have any ideas on how to make the depth texture more precise given the huge distances please let me know, theres not a lot of information out there"}, {"post_id": 11875, "ts": "2026-06-19T10:45:42Z", "hours": 5.4583, "text": "JSP I’ve been stuck with a super upsetting bug with the engine’s render class and the ownership of the output buffer that made the engine’s sandbox editor be completely unusable for however long this “postprocessing pipeline update” lasted. it is now fixed and i could continue developing this game finally. As the engine now supports adding many layers of postprocessing on top of the main render pipeline, i started cooking up atmospheric and star shaders, although only the first one is finished. i ported the atmosphere shader from a tutorial posted by nvidia on atmospheric scattering from a many years ago but the end result is honestly amazing, way better than what i had in mind. This is supposed to give the same feeling as the atmospheres from outer wilds, which is part of my inspiration for this project (and also my fav game in general) new features add “Has atmosphere” option to the planet builder mode, with a lot of options and parameters to control and make your own planets, showcased in the video… made all entities with the planet component now have an option to show an atmosphere, although it is disabled by default. this results on the earth shown in the main menu to now also have a atmosphere I will be focusing on finishing the planet builder game mode first, as it is ~60% done (probably less), i just need to add the entire terrain tool and save the planet settings to a file to be able to use it later or use it in the gravity sandbox PD: i know it seems like im focusing too much into the small/extra gamemodes but this is supposed to function as a base for the campaign mode, which i dont think will be released in the first public version unfortunately"}, {"post_id": 10582, "ts": "2026-06-17T12:03:21Z", "hours": 4.9575, "text": "JSP Good but slow progress (im not finishing this game before stardance ends probably) I want to focus on having the 4 main gamemodes ready to have a good base for the camping, which is gonna be epic! new features/changes: wrote the story for the campaign mode, yet to be showcased, but it is pretty cool, more on that later removed the explore mode, this was a thing i had in mind at the very beginning of the development but it doesnt really fit my view right now, will make a comeback at some point, but the previous implementation was just a bunch of dead code created a simple spaceship building scene, wip as you can see in the video added a very simple splash screen improved the planet creation sandbox, now with a paint tool (a bit buggy, for now) that lets you generate a real-time texture and save it to a png file, biggest progress here was made in the engine itself actually. This took so much time fighting with translation of screen-space coords to world-space coords to UV coords, im actually impressed it even works lmao. this was almost gonna get scrapped till i realized the UV unwrapping of the sphere was a cubic projection and that was messing everything up I am struggling so much with blender and my sandbox, it looks like they hate each other, also WHY DOES BLENDER USE Z+ UP, anyway, stay tuned! Its hard to make devlogs when progress is so slow but i hope you like it PD: I just fixed the colors looking like confetti (look at the color of the blue paint brush), apparently i was multiplying the alpha channel by 255 in the texture class because of a previous implementation and that was causing some sort of overflow in the shaders, thus the weird colors, so paint tool is officially finished, hopefully"}, {"post_id": 9425, "ts": "2026-06-15T19:45:20Z", "hours": 8.1431, "text": "J.S.P. I’ve been making some progress in every direction while i find out exactly what i want this game to be. ive started writing the story for the campaign mode that i hope is about 3 to 4 hours. Overall the main progress of this devlog is summarized in a finished early version of the sandbox, although theres a lot to fix in it, the main stuff is done. Ive also started with the planet creation sandbox and focused on working into instancing even though it is not quite there yet (im thinking of removing the explore mode entirely or do it completely different) new features: improved sandbox mode with actual simulation (very early), a new intro animation, different tools to select, move and change the starting velocity of each planet set a base for both the planet and spacecraft creation sandboxes as these mechanics will make the development of the campaign a bit easier, hopefully created a simple logo, probably to be changed, i dont really like it but id appreciate feedback refactored the scale system to make working with different distances and planet’s radius a lot easier, this new system is so clean i actually love it As you can see progress is extremely slow, i want to make this right and also make sure that the project is well structured enough to hold up. Also did a simple check on performance and after a couple tweaks, average fps sit around 3000, fr, on my little rtx 3060 so thats great"}, {"post_id": 7522, "ts": "2026-06-12T15:45:45Z", "hours": 5.6847, "text": "JSP Today’s devlog is not so much focus into the progress but into some design decisions that made me had to restructure the project a quite a lot, ive got a new view of the project that i think will make it a lot more fun gamemodes: campaign: top secret for now explore: you can explore, find, filter and search up real-life satellites at their real position, this is mostly done already but i need to work on adding instancing to the engine because rendering ~14000 satellites is not something my little tiny engine can really handle right now, performance drops from ~1700 fps to 9 fps lol sandbox: no more real life stuff, distances are too big and not fun to play with, this is the main change. this means that the idea is to now not only allow to play around with 3d gravity and make solar systems, but also to create and design custom planets and spacecrafts (and save/load them to a custom json file that you can share or reuse) new features I want to showcase how the current sandbox mode is like right now, this is only a part of the final sandbox mode tho (read the previous paragraph for more info). I added this cool animation from the main menu, simple movement that scales with distance, and a placing-editing system that took way too long (i had to do matrix calculations lol, math does be useful sometimes), right now the only object you can place is the Earth, but you will be able to place pretty much anything and modify their mass, velocity or anything really I will now start with making instancing something real and not just a dead branch in the engine’s repo, but this means im gonna have to read some opengl documentation :( PD: the visual bug in the video is completely intentional"}, {"post_id": 6769, "ts": "2026-06-11T10:36:15Z", "hours": 7.2383, "text": "JSP I’ve been working on a lot of things and the project is taking a really nice shape! ive organized the game into different game modes that independently manage their needs in an organized way. Also ive made some progress with the real life satellites and made some nice main menu! new features: WIP: explore real time satellites and see them move as they are in real life, with custom orbit calculations, still in the works, getting fetched directly from the internet and cached every 24 hours Added a main menu, as the engine doesnt have any in-house UI system, Im using a modified dear imgui version that is holding up nicely, also added some placeholders for settings etc… Started a new gamemode: gravity sandbox, where you can play around with custom objects and real life planets and their gravitational interactions I also had to update the engine a bit to make it be able to handle quads and their operations. the idea is to finalize a working sandbox gamemode as that would set the base for many more complex features incoming"}, {"post_id": 6120, "ts": "2026-06-10T09:09:05Z", "hours": 6.2383, "text": "JSP A 3D pixelart videogame about space exploration where you have to save humanity from the Kessler effect, currently working on the “exploration” mode where you can find and explore all the satellites of earth (and later on the solar system) at their real time location. Current Features! I’ve made a simple system that gets the real life data of these satellites from CelesTrak’s Public TLE Text Files, which than caches them and are refreshed every 24 hours, so you can see the real-life position of, for example, the ISS Built using my own custom engine, actually been updating the engine while creating this because, lets say the engine isnt very “mature” yet, but its holding up nicely! Check out the ORIGIN engine at: https://origin.aloyak.dev The game will feature this little 3d pixel art style that i really like honestly. The hardest thing to do so far was to setup a fork of the engine so that i could work on the game without actually contributing to the engine itself at all. All these models used currently are from NASA themselves, so they should be pretty accurate! I’m thinking of maybe adding a web build but the more i try to make it work the more it breaks lol :( 🚀🚀"}]...
|
Title: Janitor Space Program (J.S.P.) by @aloyak | Title: Janitor Space Program (J.S.P.) by @aloyak | Stardance
Devlogs:
JSP A 3D pixelart videogame about space exploration where you have to save humanity from the Kessler effect, currently working on the “exploration” mode where you can find and explore all the satellites of earth (and later on the solar system) at their real time location. Current Features! I’ve made a simple system that gets the real life data of these satellites from CelesTrak’s Public TLE Text Files, which than caches them and are refreshed every 24 hours, so you can see the real-life position of, for example, the ISS Built using my own custom engine, actually been updating the engine while creating this because, lets say the engine isnt very “mature” yet, but its holding up nicely! Check out the ORIGIN engine at: https://origin.aloyak.dev The game will feature this little 3d pixel art style that i really like honestly. The hardest thing to do so far was to setup a fork of the engine so that i could work on the game without actually contributing to the engine itself at all. All these models used currently are from NASA themselves, so they should be pretty accurate! I’m thinking of maybe adding a web build but the more i try to make it work the more it breaks lol :( 🚀🚀
JSP I’ve been working on a lot of things and the project is taking a really nice shape! ive organized the game into different game modes that independently manage their needs in an organized way. Also ive made some progress with the real life satellites and made some nice main menu! new features: WIP: explore real time satellites and see them move as they are in real life, with custom orbit calculations, still in the works, getting fetched directly from the internet and cached every 24 hours Added a main menu, as the engine doesnt have any in-house UI system, Im using a modified dear imgui version that is holding up nicely, also added some placeholders for settings etc… Started a new gamemode: gravity sandbox, where you can play around with custom objects and real life planets and their gravitational interactions I also had to update the engine a bit to make it be able to handle quads and their operations. the idea is to finalize a working sandbox gamemode as that would set the base for many more complex features incoming
JSP Today’s devlog is not so much focus into the progress but into some design decisions that made me had to restructure the project a quite a lot, ive got a new view of the project that i think will make it a lot more fun gamemodes: campaign: top secret for now explore: you can explore, find, filter and search up real-life satellites at their real position, this is mostly done already but i need to work on adding instancing to the engine because rendering ~14000 satellites is not something my little tiny engine can really handle right now, performance drops from ~1700 fps to 9 fps lol sandbox: no more real life stuff, distances are too big and not fun to play with, this is the main change. this means that the idea is to now not only allow to play around with 3d gravity and make solar systems, but also to create and design custom planets and spacecrafts (and save/load them to a custom json file that you can share or reuse) new features I want to showcase how the current sandbox mode is like right now, this is only a part of the final sandbox mode tho (read the previous paragraph for more info). I added this cool animation from the main menu, simple movement that scales with distance, and a placing-editing system that took way too long (i had to do matrix calculations lol, math does be useful sometimes), right now the only object you can place is the Earth, but you will be able to place pretty much anything and modify their mass, velocity or anything really I will now start with making instancing something real and not just a dead branch in the engine’s repo, but this means im gonna have to read some opengl documentation :( PD: the visual bug in the video is completely intentional
J.S.P. I’ve been making some progress in every direction while i find out exactly what i want this game to be. ive started writing the story for the campaign mode that i hope is about 3 to 4 hours. Overall the main progress of this devlog is summarized in a finished early version of the sandbox, although theres a lot to fix in it, the main stuff is done. Ive also started with the planet creation sandbox and focused on working into instancing even though it is not quite there yet (im thinking of removing the explore mode entirely or do it completely different) new features: improved sandbox mode with actual simulation (very early), a new intro animation, different tools to select, move and change the starting velocity of each planet set a base for both the planet and spacecraft creation sandboxes as these mechanics will make the development of the campaign a bit easier, hopefully created a simple logo, probably to be changed, i dont really like it but id appreciate feedback refactored the scale system to make working with different distances and planet’s radius a lot easier, this new system is so clean i actually love it As you can see progress is extremely slow, i want to make this right and also make sure that the project is well structured enough to hold up. Also did a simple check on performance and after a couple tweaks, average fps sit around 3000, fr, on my little rtx 3060 so thats great
JSP Good but slow progress (im not finishing this game before stardance ends probably) I want to focus on having the 4 main gamemodes ready to have a good base for the camping, which is gonna be epic! new features/changes: wrote the story for the campaign mode, yet to be showcased, but it is pretty cool, more on that later removed the explore mode, this was a thing i had in mind at the very beginning of the development but it doesnt really fit my view right now, will make a comeback at some point, but the previous implementation was just a bunch of dead code created a simple spaceship building scene, wip as you can see in the video added a very simple splash screen improved the planet creation sandbox, now with a paint tool (a bit buggy, for now) that lets you generate a real-time texture and save it to a png file, biggest progress here was made in the engine itself actually. This took so much time fighting with translation of screen-space coords to world-space coords to UV coords, im actually impressed it even works lmao. this was almost gonna get scrapped till i realized the UV unwrapping of the sphere was a cubic projection and that was messing everything up I am struggling so much with blender and my sandbox, it looks like they hate each other, also WHY DOES BLENDER USE Z+ UP, anyway, stay tuned! Its hard to make devlogs when progress is so slow but i hope you like it PD: I just fixed the colors looking like confetti (look at the color of the blue paint brush), apparently i was multiplying the alpha channel by 255 in the texture class because of a previous implementation and that was causing some sort of overflow in the shaders, thus the weird colors, so paint tool is officially finished, hopefully
JSP I’ve been stuck with a super upsetting bug with the engine’s render class and the ownership of the output buffer that made the engine’s sandbox editor be completely unusable for however long this “postprocessing pipeline update” lasted. it is now fixed and i could continue developing this game finally. As the engine now supports adding many layers of postprocessing on top of the main render pipeline, i started cooking up atmospheric and star shaders, although only the first one is finished. i ported the atmosphere shader from a tutorial posted by nvidia on atmospheric scattering from a many years ago but the end result is honestly amazing, way better than what i had in mind. This is supposed to give the same feeling as the atmospheres from outer wilds, which is part of my inspiration for this project (and also my fav game in general) new features add “Has atmosphere” option to the planet builder mode, with a lot of options and parameters to control and make your own planets, showcased in the video… made all entities with the planet component now have an option to show an atmosphere, although it is disabled by default. this results on the earth shown in the main menu to now also have a atmosphere I will be focusing on finishing the planet builder game mode first, as it is ~60% done (probably less), i just need to add the entire terrain tool and save the planet settings to a file to be able to use it later or use it in the gravity sandbox PD: i know it seems like im focusing too much into the small/extra gamemodes but this is supposed to function as a base for the campaign mode, which i dont think will be released in the first public version unfortunately
JSP I’ve officially finished the planet builder sandbox gamemode finally, probably will tweak a lot of things but the main stuff is done. i spent quite a lot trying to fix a problem with the depth texture that isnt even fixed right now lmao, quick explanation: distances are huge and so the depth texture loses a lot of precision, to combat this i decide to add reverse-z to the engine’s renderer but this didnt really solve the issue as it probably needs even more work adding an inifinite “far” plane or logarithmic depth but i think its fine for now, ill explain this more in depth with the next devlog on the origin engine. new features added oceans to the planet builder, very simple for now but as a first version i think it works just fine, i spent at least 8 hours with this already lol, added basic controls to the ui to modify the shader’s uniforms and hopefully its good enough added loading/saving to the planet builder and to the sandbox, you can now save your projects using json serialization, a geometry-to-file algorithm and a texture-to file algorithm. note that the planets you create in the planet builder can also be used in the gravity sandbox added the terrain tool so you can now modify the geometry of your planet as you like, creating mountains, valleys or oceans Next up is to finish the gravity sandbox gamemode, hopefully that should be a lot quicker as most of it is already done, but you know how this usually goes HELP: if you have any ideas on how to make the depth texture more precise given the huge distances please let me know, theres not a lot of information out there
JSP Currently finishing the gravity sandbox gamemode! I still need to make quite a big change as im thinking of unifying the “gravity body” struct i use in the sandbox with the “planet component” i use in the rest of the game, so this will probably take a while but, for now, the sandbox game mode seems to be the next thing to be finished! new stuff! the gravity sandbox now has gravity!!!! note that it is not super realistic nasa-level simulation, i was thinking of something a lot more arcade. this is very well reflected in the fictional scale (its around 1:100000), because games must be fun first, then realistic if possible separated the gravity sandbox file to hold the built-in planet’s registry in a different file (its around ~1300 lines of code rn lol, after the simplification…) added a nice destroy animation for the planets, improved the velocity tool and made the selection tool follow the planets the intro animation now locks into the sun, which is now the origin of the scene + changes to the style of the sun added trails to the planets in the simulation (that you can toggle, of course) small UI improvements Whats next u say? applying the same load/save system that i used in the planet builder sandbox, only that now i wont have to create a vertex data to file system (yay) Im also starting to 3d model in blender the “assembly building” where you will be able to build your spaceships in the other game mode, but im really bad at it so ill leave it for later, once the spacecraft builder game mode is finished i will probably ship the first version
JSP Huge progress!! (yes, really) I’ve made some cool stuff an this game now looks a lot more professional, these last changes we’re surprisingly fast and fun to do (finally for once lmao), although the following changes, most of them, are still work in progress. I’ve officially decided that I’m not gonna be updating the engine’s repository solely for this project as im a bit more focused on making my game work rather than making the engine reliable and well-structured for any usecase, even tho the engine will still recieve updates any way cuz i really need them for the game, but the main focus is to not suffocate the engine with specific jsp stuff. new stuff audio system: custom imgui wrapper that lets me make sound effects for buttons on hover and press + background music system that lets me control simple fade out and transition to other songs, currently only in the main menu user settings: instead of making the same json slop ive made for the rest of the load/saving stuff, i made a fancy system that lives in the engine’s core and that lets you save any kind of settings a lot easier. user settings are now correctly saved when changed on user/settings.json created a simple intro text for the first run that explains a some information made the settings window accessible from anywhere, not tied to the main menu anymore FANCY TRANSITIONS between gamemodes, it now fades in/out to black with a little loading icon in the bottom right corner, this took longer than id like to explain unfortunately added a color history for the paint tool in the planet sandbox improved atmosphere UI controls in the planet sandbox fix water shader sometimes rendering on top of an atmosphere As you might be able to guess, some of these changes weren’t really necessary but im sort of procrastinating so that i dont have to model the assembly building for the next game mode cuz i really suck at it and will be painful most likely I’ve though of adding a “first person view” move mode to the spacecraft sandbox as it would be cool to see your creation from an engineer’s point of view and also because that way i already will have coded the controls for the campaign :))
JSP Unfortunately hackatime doesnt support blender so the ~2.5 hours i spent modeling the assembly building for the spacecraft editor sandbox will not count but its fine. I’ve also done some deep debugging to the engine as it now supports embedded materials even when they dont have any texture, before this change everything looked like a wierd artifact in black/purple colors (check out the second image if ud like to see it, its pretty in a way) what was added/changed Created a not-final but decent model for the assembly building you will be creating your custom spaceship in Added first person camera control, that is used by this gamemode to get a different “perspective” on your awesome creation. you can toggle between the normal orbital view and the fp view some engine-level optimizations This now means im FREE… to actually start developing the spacecraft building sandbox, so we are back to it lol. im hoping it doesnt take me that much but i still need to finish to understand how exactly i want this to be as this is probably the only shared code that the campaign game mode will use, so i better make it good as it “counts” double PD: already said this, but the second screenshot is just so you comprehend what ive been struggling with for the past 48 hours :(
JSP Been working on the spaceship builder gamemode and its pretty fun! right now the system is very simple but solid. i had to model a couple test things and fix many bugs but it is going quite fast. The current system is a simple attachment-part system where each attachment holds up information about allowed part’s categories to attach and the normal vector of the attachment. Unfortunately removing parts is not really an option yet cuz i need to see how i will make that possible later on summary on new features: started the actual spaceship building gamemode, currently it features just basic part placement logic small changes to sound effects and music (not shown in the video) Apart from obvious structural changes, id also want to add some sort of customization to your spaceships, with different colors, flags, sigils idk. I dont want to make building a spaceship something hard but just a simple thing you do to have your own individual experience, obviously you wont be able to make some cursed stuff as it wont just fly into space without an engine, but the idea is that everything with enough parts should work
JSP I really enjoy creating and coding shaders and so i started adding some cool effects to the spacecraft editor, didnt really add any new parts but i think that what i added was pretty interesting. I’ve also been working on improving a bit the user experience and making things obvious to use without explaining anything, this is probably the most fun i had doing this project in a while :) what was added Added “Blueprint” view for your spaceship, watch the video to see what it is! currently very early version tho Added a help window that changes based on the gamemode Added geometry center (blue) and center of mass (yellow) to the spaceship Small fixes to transition between movesets Added a border shader to mark the bounds of the building workspace Added a few icons that really need some improvement The idea of the blueprint mode is to edit different things from the spaceship, and also to see the different stages of your little ship! more on this later, im not specially creative enough to write a lot today lol Ill also probably add a dynamic cursor system but idk
JSP Worked on polishing and improving a few quality of life features and overall stability, also I took my time to translate every single text in the game to spanish, although the new dynamic language system should work for adding any new language fairly quickly. this is a very important change because doing this after the campaign would be a nightmare. language is also saved to settings new stuff Added a dynamic language system and support for playing the game in spanish, if you want any new languages or help translate and thus be added to the credits please reach out Added a full credits panel where it shows all the licenses and 3rd party code/art used, AI disclosure and other stuff Fixed some weird seg faults when going back to main menu from the blueprint view Updated all icons, all of them were used in the sandbox game mode Added some new settings to the blueprint view inside the spaceship building game mode What I wanna do now is to finally finish the spaceship sandbox finally but its taking longer than expected and it requires a lot of brainpower that many times is less appealing to do compared to playing persona 5 royal lmao. Note: once the source code is published, sending feedback, playtesting or translating would maybe mean that i put you in the credits! fr i might need some help tho
JSP Can’t really express enough how much I enjoy making shaders, the look really good. i might make a video about it with the new hackclub video challenge, we might see, I’m kinda shy for these sort of things :)) Today’s devlog is pretty much to show only one thing. I’ve been doing some really small changes to UI, a few bug fixes but the important thing is the new Central Body system for the sandbox mode (the code is pretty rough right now but hopefully ill improve it), this now allows you to choose the central body that your planets will orbit around So now, instead of having only the sun in the middle you can now select a BLACK HOLE instead, which i think its a lot cooler. Note that the whole black hole is completely done by a single glsl fragment shader, how cool is that? I’ve reused a small amount of code from the atmosphere shader and then researched a bit on similar projects Apart from this I’ve also added a new “extra” option to allow the player to change the tint of the skybox, so you can create even weirder solar systems, any new suggestions on what else to add are welcome! After this im gonna do a small refactoring change that is really stupid and needs to be changed in the entire code base, its just a small thing with the new language system
JSP https://github.com/aloyak/JSP https://aloyak.itch.io/jsp?secret=nkYXIEVo8woJvblBQRYMIrWSFc I feel like im getting very close to a first ever release and finally start with the campaign mode! I finished some polishing stuff and fixed a bit, i dont think the spacecraft builder mode is ready 100% but ill use it in the campaing mode either way so ill have to update it regardless I’ve officially published the github repository where you can check out the huge amount of code this project already has lol. I’ve also created a new itchio page, this is the secret link (for feedback): https://aloyak.itch.io/jsp?secret=nkYXIEVo8woJvblBQRYMIrWSFc added things: Published the github repo and the itchio page! With a lot of new screenshots and art. I’ve also added the source files of the textures (.xfc gimp files, including the itchio banners) as well as the 3D models I’ve made (in blender) which can all be found in the assets_src/ folder Added a way to delete different parts in the spaceship building mode Added a few new parts to the spaceship building mode, refactored the whole system to make it “easier” (not really) to add new parts and things Added a full README + LICENSE to the repo Added a new shader , it is the small fog that you see in the vide when building a spaceship in order to hide the lack of detail in the exterior, the shader fades out the more you look up so you can see the beautiful skybox Added load/saving to the spacecraft building game mode, you can now save your ship’s to load them later just like with planets and sandboxes Fix some memory management problems where i forgot to delete some pointers => no memory leaks or crashes! I dont think this will be the last devlog before the first ship, but maybe, who knows right? Looking forward to you all trying my game! (the part that is done) PD: 100 hours
JSP Pre-ship checklist is complete! I’m so ready to ship the first version and start developing the campaign, which is the main thing of this game. I’ve actually started it a little bit, it now has an interior level system completely different to the gamemode system i had for the rest of the game, this is pretty exiting! stuff that ive done before shipping Built the game for windows, took a little bit but performance is 1:1 and everything works perfectly, the only thing was that i had to change the backend of the audio engine to use something else but that was fairly quick! Reduced the size of the game MASSIVELY , it went from around 350MB to ~35MB , thats literally 10 times less!! managed to do this by compressing the audio files, although the change is almost unnoticeable, and also making the engine bake some textures on build time, just like real fancy engines do! Changed a bit the main menu/ campaing mode but for now it is all a placeholder Created a new itch.io banner Made the HELP menu show up by default, i dont really like this but i think its probably the best for people to rate it nicely, wont be in the final version… Added a input mode (another one) to the spaceship building mode that allows you to hover the attachment points and it will tell you with a little popup what category of part can go there If you are rating my project, please ishowspeed i need this now in all fairness i hope people like my game! im not even close to finishing it lol Right after this first ship i will work on updating the engine to support new features that the campaign mode will certainty need 100%, like a working physics engine, ive thought of porting what i currently have to use a new one i found and that is getting very popular called “Box3D”, we’ll see, byeeeeeee
JSP I want to dedicate this devlog to @Rupnil as he always says that devlogs need to be 3-4 hours max, so i can explain why thats not always possible. Out of the 8 hours i devlog today, around 7.5 of them were spent ONLY debugging ONE SINGLE BUG for 2 whole days. I started losing my mind lmfao the bug: All the built-in and embedded textures became completely broken and ONLY on super specific conditions on certain parts and game modes. But the worst part was that rolling back to a version from days ago DID NOT solve the issue at all . I even considered that my GPU gave up on my and it was just showing gpu artifact slop in my screen the fix: Apparently there was a small bug with gpu memory allocation in the backend of dear imgui (apparently ONLY in the SDL2-OpenGL backend lmfao) and only for the docking branch of the repo. Rolling back to an old dear imgui version from the main branch solved the issue but damn. Ive also reported the issue as much as i could in the official repo. Pretty much, updating the engine to the latest version automatically updated its dependencies and thus leaked the bug to my game Appart from that I’ve spent a little bit on starting to develop the open-universe system where you can travel around planets! More on that in the next devlog probably. I already have though about the planet’s names, positions and stuff! pretty exiting!! PD: In the mean time ive also being updating the engine at the same time to improve the physics system, which is a lot better right now!
JSP This is one of the most exiting devlogs so far!! I’ve managed to get a very basic “solar system working, not all the time and of course it isnt perfect but it is really cool, heres its lore: (note that planets are placeholders right now, and distances/scale should be a lot bigger in the future) The “Halcyon” System Somewhere very very far from our current home, humanity has managed to establish a multi-planetary life in a new system after traveling for generations in their own space station The Halcyon system is composed of 5 planets (maybe more in the future) that orbit around a massive black hole (it doesnt have a name yet) “Gaia” is the earth-like planet whose own satellite, “Vesta”, is a red dwarf star that provides just enough light and heat in order to live (seen in the demo video) “Ying” and “Yan” (names will probably change), are two tiny planets that follow exact opposite orbits around the black hole, when one of them is at the perihelion, the other ones at the aphelion “Kepler” is a huge rocky planet at the outskirts of the system where small human colonies currently live Note that the campaign will be linear and happen entirely inside this place, but you will also have a “exploration” game mode that will allow you to find and see new secrets hidden… :)) Technical stuff (i.e. what was added) Created the base for the Halcyon System, planets follow a predetermined elliptical orbit in real-time. Note that for debugging, scale is around 10 to 100 times less! Added a simple physics based player controller, this took a lot of engine refactoring too. The player is affected by the gravity of the near planets and, when close enough to a planet’s surface, it is automatically aligned with the gravity vector and its also affected by the atmosphere’s drag (if theres any), this was by far the most difficult thing to do Added a little Free Camera controller as well What will be added in the future This is only the start . Theres still a few complicated things to do: Add double precision and floating origin to solve the problems that will appear when distances become as big as id like them to be Add a chunked collision mesh system for planets with complex geometry, like mountains or things like that. Right now they are all controlled by a simple kinematic sphere collider This system currently breaks the player movement when planets are moving, this is why i set “time scale” to 0. To fix this ive been thinking of creating a local physics world that sets the planet you are on to be the origin of the physics, making it look like if the planet was static, this will by by far what will take the most amount of work probably i also wanna update the atmospheric shader as it is by far the thing worsening the game’s performance, and id like to make the sky fully tint when your inside it PD: Thank you so much for all the people that support/follow this project, it already has 21 followers . thank you, really!
JSP Worked on so many things before getting started with the complicated stuff, ill tell more about that in the bottom section, but for now, im pretty happy with what ive just added, even tho progress is pretty slow!!! What have i added? Full/complete atmospheric effect , it now not only looks good from outside, now from the inside too!!! Its a small trick but when the camera gets close enough to a planet, its atmosphere’s density scales up making the sky blue like here on earth or greatly improving the sunrises and sunsets , they do look beatiful Added floating origin: double precision was not enough so ive added a system that teleports all the entities in the scene when the player gets too far from the origin, this works surprisingly good and it was very simple to do, hopefully it wont break physics later on, but so far its great! This allows the solar system to go from ~10000 units wide to over ~3000000!! that is great! This was a engine-level change mostly tho You can finally use the planets you discover in the campaign mode in the sandbox mode Dynamic settings!!! I made it so that when you first load into the game, the UI scales to your resolution and your target fps are set to your monitor’s refresh rate, might not look like something important but this is actually HUGE Whats cooking up currently! Need a system to allow the player to be placed on top of moving planets (it currently works but breaks sometimes), and also to allow those planets to rotate. This will be achieved with a completely new physics world that will live localy on the closest planet the player is to Chunked mesh collider system i really dont know how to this, because of the terrain of my planets (TODO), collisions will be complicated to calculate, if you know about anything that could help, please send it!!! PD: I wish i could spend more time actually coding than thinking, if that were to be the case id have 300 hours+ in this project already
JSP Omg i need a break! just one more change bro and i will start doing the hard and boring stuff, just one more i swear! This sums up everything ive done for the past few hours, although the new improvements are actually quite important, i feel like im somewhat rushing them instead of focusing on the exploration mode New things!! Simple LOD system for planets, there wasnt a big performance change, but the model swap is very unnoticeable and nice so thats great! Added a simple spoiler warning to the exploration mode, the original idea was that you should unlock it after playing the campaign but i guess its fine lol I FIXED THE DEPTH BUFFER PRECISION ISSUE!!!! it was such a small change omg, i just dynamically changed the near plane of the camera based on how far you are to a planet, pretty nice WIP Work in progress: I’m porting the whole game to the new action-based input system so that the game supports controllers natively without any kind of steam layer on top, this is till very early and i still dont know how to make some stuff be fun to use with a controller…. I finish this, finish the two major things on the exploration mode that are 100% gonna be quick, make some decent amount of content for it, add the custom spaceship controller and launch system, make the first ~5 minutes of the campaign mode, and then SHIP THIS PROJECT (this will surely go as planned) PD: the video u see is completely controlled with my gamepad, not the best controls yet but its better than nothing!
JSP! I’ve finished porting the game to the new action based input system, its not great yet, theres a lot to polish but at least you can play 80% of the game just as good as with a keyboard/mouse (even better sometimes!) What’s the new input system? The game now asks for “actions” callbacks instead of directly asking for raw input. This new layer in the middle allows to make different devices have their own way to control each actions, so it now supports all the gamepads you probably have: xbox, playstation, steam, nintendo, generic ones too It is almost steam deck ready! Ive been playing this game on my steam deck and it works great! (you can get around 900 fps when unrestricted) Playing the game with a controller plus a little help from the little mouse trackpad really makes this game fun to play (100% coverage with this setup) Now i will finally start doing the boring physics stuff that will hopefully not take so long but idk, we’ll have to see Other stuff that was added Improved a bit the gravity based movement mode, it now adds the atmosphere’s drag gradually depending on its density, being the density higher the closer you are to the surface, this makes entering planets feel better Fixed some messed up formatting style in my code I dont know if start a new project for no more than 2 weeks and then go back, ive been having some cool new ideas but for now ill stick to this project PD: the picture is an old version (0.12.1), latest version with good controller support is 0.14.0
JSP We are SO back! I thought it would take me weeks to solve this issue but it wasnt that hard, thanks claude lol for helping. It’s not perfect just yet but its honestly crazy how my own engine managed to handle what im about to explain What took soo long The game now handles a transition from a global physics world to a new extra physics world that lives locally when the player enters a new planet (the origin of the new physics world would be the planet’s center), this means that you can perfectly walk on the surface of all the planets while they move around in the orbits without any weird behaviors This took a good amount of engine refactoring and a few changes to some systems (specially the floating origin) I need to fix a couple things like the drag when you are entering a planet, but that should be handled later on when you actually use a spaceship to enter and not just yourself with your spacesuit Other stuff that is cool Added a helmet overlay! (very inspired by outer wilds, id like some suggestions to make it more original honestly, but right now it decent). It is currently work in progress tho, and theres a lot of information missing… Small UI improvements: rounded borders, removed window’s transparency, added window close sound effects (need to find a better one tho), little better controller support… I just this idea to have vehicles but that will take super long, its added to the ideas file but thats certainty not being considered for short term, Any suggestions are welcome tho PD: video is very bad res bc i had to compress it unfortunately
J.S.P. Very exciting changes to the exploration mode yay !! I’ve been working on precisely TWO (2) things but one of them is way too early for me to be able to show you anything, more on that in the end Whats new? I’ve create a custom blender addon that lets me create procedural noise-based planets! It is really powerful and it gets you really good results for how simple it is really. In a way, its nothing but a vertex shader but coded in python lol It generates 3D spherical noise and applies it into an icosphere with a variety of parameters. Some of them arent precisely working but they are fine for now (specially the “ridged” option) You can try it yourself, its open source too! https://github.com/aloyak/JSP/blob/main/assets_src/blender/addons/planet_generator.py Terrain System I’m developing a way for the player to correctly collide with the geometry of these planets, but this is mostly engine-sided changes and I’m not very deep into it yet. I’m currently researching how to handle multi-threading async functions… more information about this in my latest engine’s devlog: https://stardance.hackclub.com/projects/1029/devlogs/34738 Known issues These are not really important right now, but for some reason I’ve realized that the splash screen takes different amounts of time depending on where you run the game?? what? A steam deck is around 3 seconds, my computer (the intended duration) is 4 seconds and in a friend’s laptop it is ~0.5 seconds
JSP! I’m back! and I finally have a new decent version that im probably gonna ship shortly after I publish this devlog. Its been so long since the last devlog because a number of factors, I had some vacations, my main pc is now just a steam deck connected to a monitor and also I’m kind of struggling to continue this project, I hope this isnt the last version but working on the project and adding or fixing things is very complicated and requires a lot of research to do it right, and it is exhausting What was added?? Included the new planet models to the halcyon system, you can now correctly explore them by using the new terrain system I added to the engine! Added some small help windows/hints for the new stuff before shipping! Fixed some audio bugs and added a sound effect for when you close a window Fixed the in-helmet HUD UI, the input vectors now correctly show the direction the thrust is being applied to, kinda like in Outer Wilds!! I’m most likely to be focusing on continuing the engine for a little bit, it really really does require some refactoring and I also need to clean some likely dead code or at least re-understand the code i wrote as it has lines from almost a 10 months ago! Hopefully someone could help and contribute to the project maybe or make something new out of it too! Im still planing on continuing to develop it but not at this pace considering im about to start college :))
Ships:
This is my 3D game about space exploration and kessler cascades, it has a campaign mode coming up but i havent finished that yet, for now enjoy the 3 game modes! i built this on top of my custom engine so its been a lot of hard work, please try it out!!!!
This is my 3D exploration-sandbox game that I built with my custom game engine! I’ve added quite a lot of stuff like a simple exploration game mode that allows you to move around a hand-crafted solar system i called “Halcyon”. there are also a lot of other game modes you can try and have fun with before I finally add the campaign game mode for the final version! In the picture you can see an in-game screenshot of the player walking around the surface of the earth-like planet “Gaia”, hope you like my game! With <3, 4loyak!...
|
1792828335.4881313
|
1792914735.4881313
|
|
14069
|
My very own WebOS by @tlevi | Stardance
|
tlevi
|
2
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T14:12:08Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I finished my WebOS 2 mission. I added the following three features: A button that changes the background color randomly. A Terminal window. A Random Number Generator window with a Generate button. All three features are working successfully and have been integrated into the WebOS2 interface.", "repo": "https://github.com/TLevi74/webos", "demo": "https://tlevi74.github.io/webos/"}, {"ship_num": 2, "ts": "2026-06-15T20:44:02Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My Submission for the WebOS mission. This project was built with HTML, CSS, and JavaScript that mimics a desktop operating system. It features interactive windows for different sections: links, search tool, notes app, and an embedded YouTube video player. You can close the tabs, move them around, or minimize them by clicking on the tab names in the top left corner. Enjoy!", "repo": "https://github.com/TLevi74/webos", "demo": "https://tlevi74.github.io/webos/"}]...
|
[{"post_id": 15672, "ts": "202 [{"post_id": 15672, "ts": "2026-06-25T14:10:11Z", "hours": 0.5075, "text": "Added the last feature, which is a random number generator “app”. The project is finished, and ready for submission."}, {"post_id": 15651, "ts": "2026-06-25T13:31:48Z", "hours": 0.2636, "text": "I added a terminal window. You can type help for available commands. I will add one more final feature."}, {"post_id": 15644, "ts": "2026-06-25T13:16:03Z", "hours": 0.3214, "text": "I started working on the WebOS 2 Mission. I added a Change Background button, which changes the background color randomly. I also made some improvements to some of the movable windows. I will add 2 more new features"}, {"post_id": 5691, "ts": "2026-06-09T16:05:37Z", "hours": 1.4956, "text": "Devlog 3 & Final: The project is done! Improved draggable window system with better focus and z-index handling. Added 2 more windows with an extra functionality as stated in the guide. Finished the UI."}, {"post_id": 5620, "ts": "2026-06-09T14:26:37Z", "hours": 1.1275, "text": "Following up on the desktop layout in WebOS, I’ve added real interactivity to my project. Windows are now fully draggable across the screen, and the red close buttons successfully close them. With three apps completely done, the core window management works. Next up, I’ll be making some more apps!"}, {"post_id": 5546, "ts": "2026-06-09T11:15:34Z", "hours": 1.5558, "text": "Started the project today. Got the basic structure down — a desktop div, a window div, and a title bar. Wrote my first bit of CSS to make it sit in the middle of the screen. Then the fun part: making it actually drag. The first attempt sent the window flying off the screen immediately. Fixed that, and suddenly it was working. One moveable window. That’s it. I will add more features!"}]...
|
Title: My very own WebOS by @tlevi | Stardance
De Title: My very own WebOS by @tlevi | Stardance
Devlogs:
Started the project today. Got the basic structure down — a desktop div, a window div, and a title bar. Wrote my first bit of CSS to make it sit in the middle of the screen. Then the fun part: making it actually drag. The first attempt sent the window flying off the screen immediately. Fixed that, and suddenly it was working. One moveable window. That’s it. I will add more features!
Following up on the desktop layout in WebOS, I’ve added real interactivity to my project. Windows are now fully draggable across the screen, and the red close buttons successfully close them. With three apps completely done, the core window management works. Next up, I’ll be making some more apps!
Devlog 3 & Final: The project is done! Improved draggable window system with better focus and z-index handling. Added 2 more windows with an extra functionality as stated in the guide. Finished the UI.
I started working on the WebOS 2 Mission. I added a Change Background button, which changes the background color randomly. I also made some improvements to some of the movable windows. I will add 2 more new features
I added a terminal window. You can type help for available commands. I will add one more final feature.
Added the last feature, which is a random number generator “app”. The project is finished, and ready for submission.
Ships:
My Submission for the WebOS mission. This project was built with HTML, CSS, and JavaScript that mimics a desktop operating system. It features interactive windows for different sections: links, search tool, notes app, and an embedded YouTube video player. You can close the tabs, move them around, or minimize them by clicking on the tab names in the top left corner. Enjoy!
I finished my WebOS 2 mission. I added the following three features: A button that changes the background color randomly. A Terminal window. A Random Number Generator window with a Generate button. All three features are working successfully and have been integrated into the WebOS2 interface....
|
1792835527.693923
|
1792921927.693923
|
|
14070
|
Timetable by @omeriadon | Stardance
|
omeriadon
|
2
|
371.91
|
2591
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T09:11:11Z", "hours": 233.0, "multiplier": 18.49, "payout": 2143, "blessing": "neutral", "text": "This ship, I completely remade the app to work around accounts, and all the features that come with that I added a server, because it used to just store your timetable in your local storage and that was quite boring honestly creating a server for this has allowed me to add accounts, notifications, live activities, friends, shared events, multiple devices in the same account, and has made the website much easier to make (still in development, thats why the top devlogs are talking about the website not the app) The app now has all of this: Grades, track the score of all of your subjects notifications for each subject you have and your events etc live activity throughout each school day telling you your subjects etc sharing your location, subjects, and more with friends widgets that show your your subjects, upcoming events, and your friends’ schedules lots of administration options to manage pretty much everything, including who else is admin lol full support for siri, shortcuts, spotlight, and apple intelligence a full apple watch app btw i know 350 hours on a timetable app sounds insane (😭) but its because this project has 4 different aspects: swiftui client for iPhone, iPad, and mac swiftui client for apple watch a website client (still in development) the server that handles everything, and the database i promise it does more than just tell you your subjects 🙏", "repo": "https://github.com/omeriadon/Timetable", "demo": "https://testflight.apple.com/join/DDUXPSq3"}, {"ship_num": 2, "ts": "2026-07-15T13:35:31Z", "hours": 94.0, "multiplier": 9.5, "payout": 448, "blessing": "neutral", "text": "So I made a timetable app for my school, super-specialised and for ios, watchos, and macos. its got live activities and notifications to show you current and next subjects throughout the school day, widgets for your weekly schedule, ability to see your friends’ timetables, and server sync. and apple intelligence support!", "repo": "https://github.com/omeriadon/Timetable", "demo": "https://testflight.apple.com/join/DDUXPSq3"}]...
|
[{"post_id": 65346, "ts": "202 [{"post_id": 65346, "ts": "2026-09-10T13:08:58Z", "hours": 8.2983, "text": "Continuing the assorted improvements to the app: Fixed stacked drawers so nested drawer state updates reactively. Reworked the Friends page into shared List, ListSection, ListRow, and Card components. Preserved friend drag-and-drop ordering within the new layout. Improved timetable UX: i fixed the lesson selection in week view correctly aligned the “now” indicator in today view restricted timetable mode navigation to mobile through CSS, cos desktop already has the sidebar improved planner event styling. made the drawer compenent animate in and out, something i lost from the react -> solid migration I also added a reusable event-tag selection row with symbols and selected-state feedback."}, {"post_id": 62745, "ts": "2026-09-06T08:06:14Z", "hours": 5.9261, "text": "As well as migrating to Tanstack, I wanted even more speed, just for fun at this point honestly, so I decided to move to SolidJS from React. Its decently faster while looking similar to react, and it has some syntax stuff that i much prefer over react. this is basically just adding some margin for me to make bad code The end product looks identical so theres not much to show.. apart from the migration, I’ve also been designing the new landing page, which will also use the 3d model thing. the big question is figuring out how to make the 3d markers for each classroom register correctly, because i need to show a pin for each user at the right place, from swiftui, and somehow embed it into a realitykit 3d model. but im sure this use case has been done many times before so i can find something online!"}, {"post_id": 60821, "ts": "2026-09-03T13:24:26Z", "hours": 7.5314, "text": "Im making a 3d model of the school. this is so that i can show a whole literal map of the campus in the app, and then you can see where each user is, in 3d! i could even reexport it for the website, potentially its going to be interactive and everything"}, {"post_id": 59542, "ts": "2026-09-01T12:52:51Z", "hours": 1.2314, "text": "ok so i think i have optimised it as much as i can lol tanstack clearly was a good idea, it just needed some optimisations!"}, {"post_id": 59501, "ts": "2026-09-01T11:30:41Z", "hours": 8.1464, "text": "I did a few things in this devlog, got quite carried away frankly. So I migrated the codebase from Next.js to Tanstack. The reason was that i was seeing a lot of speed concerns, especially on the landing page. it was just lagging so much. i tried it on all my devices on all the browsers and it was there half the time. after a lot of commenting things out i just couldnt find a bug, so now i moved to tanstack. hopefully taht will remove at least some problems. in any case, i got bored of next.js and tanstack is a different framework to play with and make use of!! also, i continued the landing page by adding cards for each item. i don’t really like it right now, but i have established that i need to add these cards, if not in a different UI. The titles of each card are just image-masks, of Apple wallpapers! i went through some archive and picked out the ones i like, and applied a brightness 200% filter, and they look really nice now. after i finish the landing page im gonna work on rehauling the rest of the ui to be more intuitive and actually usable"}, {"post_id": 57354, "ts": "2026-08-29T14:02:16Z", "hours": 2.4136, "text": "I really wanted the first screen for timetable to look really really interesting and unique and instantly recognisable as Timetable, so i made the text instead of a boring white, it now has 3 really nice effects applied: A grain overlay, or noise, which in this case doesn’t make it look paper but looks nice nonetheless Its not flat white, its white at the top and goes to brown at the bottom, more noticeable when you close up. subtle but also nice The “white” isn’t even white. Its a particular white image i had a lot of difficulty in obtaining. it is the third screenshot, the “white” png. Its an .avif , and it uses some HDR-capable color space format something, which on compatible browsers make the timetable text show considerably brighter than everywhere else on your screen, which makes it really pop! i plan on using this effect in other places as well across the landing page to make it just pop a bit more. (the 4th image shows the white pixel showing as 1.25. anything above 1 is hdr.)"}, {"post_id": 57217, "ts": "2026-08-29T10:04:27Z", "hours": 1.4844, "text": "I added a title to the lading site, but as you can see its not just any title. it uses this package called fitty to make the text size up to the full width of the page, and it does indeed look massive. and it also goes under the rectangles of the logo, so its like an apple depth effect you get on iphone lockscreens i found the website really laggy while scrolling somewhere while finishing of the main interactive icon, and i couldnt figure out why after removing everything that could have been gpu intensive (my gpu was spiking to 80% while just scrolling) so after all that my most likely theory is that the lag is just my computer and not the website (or both 😭😭) also when i made that main art, i made the border radii use px units, which made it look quite deformed on smaller screens, since the rectangle’s size is relative to screen width, whereas border radius is constant… so i went and fixed that too"}, {"post_id": 56944, "ts": "2026-08-28T23:37:12Z", "hours": 1.0728, "text": "After much trying to make glass, yet again, i failed. So now im just using blur and these edge effects, and i think it looks nice! theres even a hover eect, as shown in the second screenshot (class details show and the rectangle rotates a bit randomly)"}, {"post_id": 56543, "ts": "2026-08-28T10:38:02Z", "hours": 8.8014, "text": "I started to make the landing page, and i decided, after very much research from other landing sites I’ve seen, that the main item should be an interactive timetable, a version of the app icon. but interactive and glassy. im trying to recreate everything in css but its not looking as smooth and polished as real liquid glass does so ye. im kinda getting close though! I also added a navbar item that just is the link to actually open timetable, and when you hover it shows options to either open the app in testflight or open the web version which just redirects to /login. and its background switches to black when you start scrolling, which will make more sense later. i haven’t really planned the rest of the landing page, and i might remove this entire component if i find a good liquid glass implementation i can use, especially with bouncy animations etc. but yeah. (worst part is i might even just go change the entire app icon in a week so that kinda wastes all this time 😭😭😭)"}, {"post_id": 53528, "ts": "2026-08-24T03:23:23Z", "hours": 5.4669, "text": "I have started using the shared components around the website, and its actually looking pretty nice! most importantly, these components can be changed once and work everywhere and i removed the drawers i was using everywhere, and i also made said drawers wider while i was rehauling the drawers i also kinda broke their animations and i don’t know how to fix it 😭 the whole website looks really basic now, since its obviously using now the shard unstyled components, and i was thinking about the theme and decided maybe it should be unstyled, and only the user’s own events and content etc can have colours."}, {"post_id": 52138, "ts": "2026-08-22T07:15:18Z", "hours": 9.6475, "text": "I think I have finished making all of the shared components I put everything inside accordions to organise the test components Overlays get the same translucency and outline every other component gets I think im happy with how the lists look, finally the option selectors are really really hot!!! The first page I have remade is the About view, which shows this badge if you are on localhost lol i also had to move the contributors up to the server instead of hardcoding them so that both website and app can see it And a really nice little animated gradient thingy for the about view!!"}, {"post_id": 51517, "ts": "2026-08-21T08:53:31Z", "hours": 3.9036, "text": "I have pretty much finished the components, I’m going to now go and add the other shared components and improve them too. then im gonna go through the css files and clear anything that is unused or overcomplicated, and then i can start remaking the website!"}, {"post_id": 51022, "ts": "2026-08-20T14:43:48Z", "hours": 7.9519, "text": "So the previous UI was really ugly, to be honest, so i decided I am oing to scrap half of the design and completely unstyle the entire app while making everything as standardised as possible, by trying to only use reused components as much as possible. So I spent all today stripping out components I didn’t need, then take the surviving components and adjusting them to my use case and making then look as nice as I can. alert dialogs drawers buttons lists section cards switches I have also decided to stop using tailwind because its quite simply messy and much more confusing than just moduled css, so ye"}, {"post_id": 50337, "ts": "2026-08-19T14:34:49Z", "hours": 5.8117, "text": "I’m still working on making the UI look much better, and I’m still figuring out some website stuff like how i should wire up the sidebar tabs as well as having like a nice homepage to advertise everything the app does, which will be a really fun sub-project. Turns out making nice looking lists in react is much harder than it looks, as shown below 😭 one problem is that each symbol has a different aspect ratio so i dont even know how to fit them nicely And unlike swiftui, its raelly raelly hard to stay consistent in your css and to keep using the ui tokens instead of making custom css everywhere. it looks like the website is gonna be harder than the app to make after all 😔 this classes card though, for example, i think its pretty much almost done. i might need a few more borders to make it look glassy and stuff but it looks exactly like the ios version, which is the end goal! And I added the animations to the classes card, again exactly like the iphone app. i also got a vscode extension that shows you all of your unused css classes, i highly recommend getting one and purging your codebase!"}, {"post_id": 50037, "ts": "2026-08-19T02:03:20Z", "hours": 11.0747, "text": "So I’ve made the first version of the website, it’s really insanely buggy and broken, but the ui is there. so have the html good but no i need to really tweak the css to make it look nice, apple-style. i also need to figure out how to make loading states look nice, since unlike the the swiftui app, i can’t cache anything to not show loading state. in the plus side i dont have to deal with offline state, though. the sidebar and the toolbar are finished, and look really nice. the sidebar has an effect (from ipados) that basically reflects the content in a subtle blurred way, to make it feel like glass while not actually rendering anything expensive. The toolbar is just glass buttons + a black fade effect + progressives blur, also tuned to look like ipados. the icon in the sidebar is pretty ugly honestly so i need to replace that with the non-bordered icon. The other problem i am dealing with is that we are planning a complete redesign of the entire swiftui app, and obviously that has to propagate to the website, so any work i do now is kinda gonna be half wasted, depending on what the redesign actually looks like."}, {"post_id": 47872, "ts": "2026-08-16T03:56:44Z", "hours": 0.5908, "text": "And now it scales up and down and stuff!!! I still can’t believe this is just html and css and js 😭 Theres so many parameters to tweak to make it feel right, its so finicky And depending on the size of the glass, you have to change the numbers, its kinda confusing honestly"}, {"post_id": 47804, "ts": "2026-08-16T00:37:23Z", "hours": 0.8556, "text": "Its nice and squishy now! It uses gsap for this as well gsap is a great framework ngl"}, {"post_id": 47523, "ts": "2026-08-15T14:19:10Z", "hours": 4.8103, "text": "Hehehehe I’ve got a working version of liquid glass It uses gsap, which is nice the second image is an earlier version 😭"}, {"post_id": 47363, "ts": "2026-08-15T08:10:22Z", "hours": 1.1444, "text": "The website is alive! I got a screenshot of an iOS26 sidebar, and i am copying it, as you can see. looks nice i think"}, {"post_id": 47332, "ts": "2026-08-15T06:41:25Z", "hours": 2.6325, "text": "Ok so after a bunch of wrestling with nginx and bun and next.js, i have added the website! its at https://timetable.adonis.pt/ and the current api has been moved to https://timetable.adonis.pt/api Its the usual next.js thing. and it uses bun. my design idea for this is to look like its an ipad app, essentially, and im going to see exactly how far i can take the mimicking, maybe i can even add liquid glass to the web 💀 So yeah no more app building, now its website! It’s gonna be so much easier as well because I aleady have the backend done and tested, so this should be all design which will be really fun."}, {"post_id": 46919, "ts": "2026-08-14T13:55:04Z", "hours": 0.3047, "text": "new icons. the old one that now supports light mode was kinda ugly."}, {"post_id": 46909, "ts": "2026-08-14T13:32:29Z", "hours": 7.6422, "text": "A somewhat interesting devlog this time. I spend a good 2 hours just trying to make live activities work. the miserable part is that they were already working before 😭 I dont even know what I did but it broke. And while i was trying to make a debug button to start a live activity, yeah it just wasn’t working. all kinds of problems with not submitting a good APNs token. and i had to like stop activities before starting new ones and stuff it was just in general really annoying. there was even more problems but its too much to say here 😔 anyway, i have started cleaning up the app. no more big features, to be honest, until i add a website for this thing!! should be really easy since the backend is clearly all done lol events can show weather for them, such as the athletics carnival i removed the ridiculous backgrounds i allowed users to choose, theres no only solid black/white and paper. more reasonable, i think. as part of my optimisation, i removed settings i found useless. haptics are now always on, and highlighting the current day is always on. profile pictures can now have their foreground colour set, like the Monogram can have its colour optimised.you can see the average for when your friends arrive to school per day, instead of in total. developer settings also got reorganised, more settings only show to developers. yet again cleaning up the app experience. the location status was a bit unreliable, if users were offline, etc, so i added multiple ways the app pushes updates to the server, and queued statuses when the device was offline. i also refined the actual radius for what counts as within 5 / 10 minutes, should be a bit better. i havent thought about people who live within 10 minutes, thats an interesting case the subject editors grid also looks nicer (still needs more improvement though the tabview now hides while scrolling, like it collapses into the corner, like apple apps! you can manually turn off sharing your status, for privacy reasons. and some more things i forgot 🥹 im so excited for this thing to actually launch!!!!!"}, {"post_id": 46297, "ts": "2026-08-13T13:01:18Z", "hours": 1.3272, "text": "I spent some time to work on this search button and its animation. idk if the video plays, but it uses apples glass effect transitions! I also made the confirmation dialogs for removing and reporting a friend better, before they just popped up in the middle of the screen, now it comes out of the menu (also found another ios27 beta bug 😐)"}, {"post_id": 46263, "ts": "2026-08-13T11:41:36Z", "hours": 2.4739, "text": "So supporting light mode calls for an icon redesign, at least just for light mode, and here they are! Though to be honest, the entire app is gonna need a redesign, because I need to rename it from Timetable, because it has expanded into doing so much more, and timetable is a bit of a boring name. finding names is so insanely annoying though, but oh well."}, {"post_id": 45744, "ts": "2026-08-12T13:04:58Z", "hours": 2.6161, "text": "I added custom backgrounds! Theres the paper backgrounds i added recently, and then the solid colours, and then also some of the really nice apple ones idk what they are called (i hope apple doesnt copyright me 😭) so yeah it applies to all backgrounds in the app i think it merges really nice with the liquid glass and blur backgrounds different views have it also shows on watch i also added an option to choose how far forward you see events. theres also even more statistics for what app version people are using!"}, {"post_id": 45684, "ts": "2026-08-12T10:26:42Z", "hours": 1.3586, "text": "You can now edit the foreground colours for your profile picture monogram i also completed light mode support for widgets"}, {"post_id": 45645, "ts": "2026-08-12T08:44:01Z", "hours": 2.0167, "text": "I added accessibility improvements, mainly like labels and tags and stuff, for use with voice over etc. this was triggered by me installing a developer process into my app which allowed me to iterate on design faster, and it depended on accessibility elements to discover each element. (the purple thing lets you tap elements and comment on them) i also tried a new background for the cards, as you can see below, its just glass and i think it looks pretty nice"}, {"post_id": 45165, "ts": "2026-08-11T14:09:40Z", "hours": 9.5667, "text": "Big update! Light mode! The app used to be dark mode only, it let me make it look much more pixel-perfect and refine colours and stuff, but its kinda obvious you cant keep the app dark mode only, its just not good. so i went through everything, adding light mode versions of paper, text, glass, etc. took me quite a bit of time because i was trying to maintain consistency while doing it, which included alot of redoing things and creating view modifiers and manually applying each one, etc i also added weatherkit, its just a single line in the today tab, but its nice. while adding light mode support, i found a really nice blur view i could add to lists, so now each lists’s background is nothing other than a blur! i also decided to make all backgrounds made out of paper, and i think it looks nice? theres also now a statistics page for deices and os versions and builds and stuff, itll be more useful later. as well as knowing when your friends arrive to school, i added the ability to know when they are within 5 or 10 mins, and to send notifications for that. average arrival also is split by day now, because people arrive to school at different times per day theres a new tab picker, which you can see int eh controls, its much more glassy than the last one, which is really really playful and stuff! i still have more work to do in terms of ui work, excluding light mode refinements, like notifications and widgets, but yeah."}, {"post_id": 43989, "ts": "2026-08-09T14:04:31Z", "hours": 1.73, "text": "I added a new devices statistics view. or more accurately, i expanded it. before, it just shows device platforms. now, it shows the os version, minor os version, and if it is a beta or not. i also added support for iOS 26 (previous builds only supported OS27 or later). this involved me just making some features not work on os26 😐 and supporting anything before OS26 would probably be legitimately impossible, so yeah not that."}, {"post_id": 43936, "ts": "2026-08-09T11:55:31Z", "hours": 1.5656, "text": "I also made some improvements to the card height for the user’s own item. before, it was just the full width. Halfway while I was working on that, my TabView suddenly froze for a straight 20 seconds every time i changed the tab. this was very weird, and the CPU shows 0% usage, so I was quite surprised. After a large round of commenting things out and seeing what broke, I found it was a single .glassEffect() that I was using for the progress marker. I have no idea how a glass effect can make an entire tabview freeze, but fine. i replaced it with a simple red colour, as shown below, with a stroke and shadow, and i think it looks fine now."}, {"post_id": 43850, "ts": "2026-08-09T08:59:50Z", "hours": 1.6619, "text": "there is a new progress background: its not a background! inspired by the app icon / ios app, the progress view is now this marker thingy which fits into the app’s theme much nicer I’ve also been tweaking the font sizing, image sizing, padding, and gaps between the items here to make sure they look good at all possible subejct names etc. i also had to fight a bit with the safe area of the view, you can see in the image below the name “bob” ends slightly above the text, took me a lot longer than expected to fix that"}, {"post_id": 43782, "ts": "2026-08-09T06:43:26Z", "hours": 7.4142, "text": "I started work on rehauling the watchOS app And I really like how it’s coming out The watch is supposed to distill down the information the user needs, so i picked the current and next period, time, and their location. all these elements are glassy and stuff, so they are clickable, and its in a tabview that scrolls between each card. The first tab is the week view for the user. so I spent a good 2 hours trying to make a ScrollView work, but it didnt. sometimes the views teleported, some lagged, some glitched, and it was overall insanely annoying. so I moved to a tabview, which was considerably more stable, but removed the animations I wanted. it had its own animations which were fine, but yeah. Also, fonts also reflect on the watch! the one in the screenshots below is the expanded style, which to be honest isnt that good on watch since the watch is constrained as is, but yeah. The glass timetable actually looks insane I am still thinking of how to include other content, like grades maybe, and other things, but i dont want to make it too dense and slow"}, {"post_id": 43264, "ts": "2026-08-08T12:54:21Z", "hours": 3.6083, "text": "You can now change the font! this took more work than you would expect, because i did a find on the project and saw there were like 60 references to .monospaced, and each one had to be manually upgraded to dynamically apply font. i also tried to make the rounded font expanded, but after some inspection i found it doesnt even have a .expanded variant 😐 so the options i ended up with were monospaced, rounded, and expanded. no normal font. it just looks boring at this point. below is the same screen with each option! widgets also get the fonts, and they look actually insane ngl"}, {"post_id": 43093, "ts": "2026-08-08T05:35:22Z", "hours": 2.4481, "text": "improving the friend detail view the padding is so much nicer, and the detail view also shows more info and in a better way the week subtab shows a similar timetable to the user’s own, and shows more info. and some more statistics lol"}, {"post_id": 42989, "ts": "2026-08-08T00:22:14Z", "hours": 1.9642, "text": "I decided to remove created timetables. they just don’t work anymore with the Friends concept, which makes it really annoying to adjacently share other timetables alongside having friends. its a shame, i wish it could have worked, maybe ill add it again later. oh well. im still just combing through the app and fixing all the little things i see: grade tracker gets a next item in the top for the top 4 subjects, which is important for atar. improved the friend detail view a bit better, because the old one had not enough information and was displaying badly.added more statistics to administration view cos its fun lol the tag selector view was improved, looks nicer and is a tiny bit more legible nowi changed the grade tracker weighting from semester to year. apparently thats the norm more friend detail view improvements"}, {"post_id": 42669, "ts": "2026-08-07T14:52:24Z", "hours": 2.3131, "text": "Grade tracker!!! I know this is a very cliche topic but I had to implement this because it integrates so seamlessly with the app for example, it already knows your subjects (duh) and when you input the date of your assessment, it also knows which period of the day that is, because it knows your subjects! (duh) I also added ATAR, sthe user can set goals and stuff for what they want to achieve."}, {"post_id": 42589, "ts": "2026-08-07T12:33:01Z", "hours": 1.0975, "text": "some ui improvements (that weird box in the account view is Metal debug overlay, not my app)"}, {"post_id": 42549, "ts": "2026-08-07T11:27:09Z", "hours": 5.165, "text": "lots of little things instead of one big feature: i used to send emails, and i reached limits on the email provider so i had to move to only sending notifications, like device notifications. i still need an alternative, im looking through options now there used to be different settings view between iPhone and iPad, so i consolidated them into one view.you can now see your friend’s status as on or off campus. this uses location to check when you reach school or leave. this also allows some cool statistics like average school arrival time!there is better moderation, it shows in the admins view and lets the admin block or do nothing about the account. it will be expanded later to have more features and actions and stuff you can request to change your friends-since tag, also approved by admin.i deleted all (most) references to #if os(macOS) , since there is no more macOS build, its just iPad running on mac. small ui improvements: added search to some more administration views tapping an existing photo pro allows crop the tabview gets tab transitions, like the ones iOS 26 had (that ios27 removed 😡)year-level tags are separated from other tags expanded statistics!added archived events - events in the past - plus an option to automatically delete old events added a button to reset tips, since the app is getting more and more complicated the onboarding is less condensed, when that permission is first needed, its permission sheet request shows.more stuff gets cached in Defaults, making it more offline-safe.and some toolbar and blur and navigation title stuff."}, {"post_id": 41948, "ts": "2026-08-06T14:06:53Z", "hours": 1.2208, "text": "user account data now has highlighted rows for faster navigation user reports look much better, as well as friends-since requests reporting or sending feedback sends notifications instead of emails, now"}, {"post_id": 41911, "ts": "2026-08-06T12:53:26Z", "hours": 4.0961, "text": "Few things! Adminsitration gets new items for reported users and freinds-since requests sections in adminstration statistics for number of users, etc you can now see your status and other people’s status, like on or off campus new page that asks for location access ofc (ill move it into the onboarding later improved the add a friend sheet admins get emails for reported users, etc"}, {"post_id": 41764, "ts": "2026-08-06T04:50:27Z", "hours": 8.5058, "text": "I finished the refactoring for now, to make the app multi platform. So then i did some more brainstorming and I have consolidated what is the next few features I need to do tips, to tell the user about features the app has they sound easy but each tip needs rules and parameters and all kinds of obscure annoying things, so its going to be harder than it looks my first tip shown below An indicator next to each friend about their status, which is going to take the user’s location, taken in the background, to tell if they are on campus or off campus So from this you can tell when a user arrives at school or if they are sick iOS provides a function that will call my app, from the background, every time the user crosses a specific map polygon (The school). so i dont even need to do any map processing, my app just gets called every time the device goes in or out of school! plus i can add cool related features like the user’s average arrival time to school, which will be pretty cool!"}, {"post_id": 40724, "ts": "2026-08-04T13:16:45Z", "hours": 3.6128, "text": "Still just refactoring and remaking the app. i decided to remove OS 26 compatibility, because there is just too many APIs and stuff the images below are some stuff I’ve been refining: dragging friends around sideays iphone support (same thing as macOS + iPadOS) but I’ve decided now to not work on macOS (which is just iPadOS) and ipad until i perfect iphone and watch. should be fun!"}, {"post_id": 40093, "ts": "2026-08-03T14:09:54Z", "hours": 0.6797, "text": "its getting there! mac catalyst is definitely better than trying to make native macOS work. swiftui isnt really making it any better, its really really restrictive in terms of how i can structure my app. like for example that right column, has so many glitches that i cant really find solutions to because the bugs aren’t in my code, its infuriating."}, {"post_id": 40069, "ts": "2026-08-03T13:17:55Z", "hours": 1.1419, "text": "working with macOS is infuriating me, so i decided im going to make the macos app actually be mac catalyst, so its technically just running an ipad app. which makes sense. still needs alot more work, this refactor is proving very very annoying"}, {"post_id": 40036, "ts": "2026-08-03T11:53:01Z", "hours": 1.3019, "text": "first version of timetable for macos 😭 its really ugly and lwk broken. so im gonna spend the next few hours fixing this incredibly “interesting” UI."}, {"post_id": 39979, "ts": "2026-08-03T10:13:36Z", "hours": 3.41, "text": "So so far up to now, I have completely neglected everything other than iPhone. i needed this so that i could focus on making iphone as seamless and intuitive and possible, and to push features faster. so now i have to go and basically remove all of the non-iPhone code and replace it with iphone code, and then try to make that work multiplatform. so i decided iphone is going to remain as a tabview, for now at least, but ipados, macos, and big iphones can use a navigation split view, shown below. so a sidebar and main view and an inspector on the right sometimes."}, {"post_id": 39467, "ts": "2026-08-02T13:08:27Z", "hours": 0.6319, "text": "I checked the localisation and it went down to 25%, so I went and pushed that back up to 100%. and the friend detail view has been improved a bit more"}, {"post_id": 39451, "ts": "2026-08-02T12:29:09Z", "hours": 0.3811, "text": "before and after some small ui improvements!!"}, {"post_id": 39440, "ts": "2026-08-02T12:06:26Z", "hours": 0.6767, "text": "i just read an article that said @Environment(\\.dismiss) is bad for performance dismiss() is a very simple and fast way to make a sheet or other modal view dismiss , but because its so simple and dynamic, that introduces lots of bugs apparently. so I had to go through all the sheets and this time replace dismiss() with better state management. i hope ill notice the performance improvements!"}, {"post_id": 39417, "ts": "2026-08-02T11:25:42Z", "hours": 1.5344, "text": "some people were saying that it was really annoying that you could drag anywhere in a sheet to dismiss the sheet, you would be halfway through something and then you have to restart. so i went through all the sheets in the app and checked if they needed to remove this swiping. luckily it only needed one modifier per sheet. also, more tester feedback was that i shouldnt have sections for tags, so yeah i did that. also, now that there is a concept known as friends, instead of just shared timetables, i removed the option to allow people to have their timetables searched publicly. i havent figured out what i want for specific created timetables, i might lwk have to just remove that also users now have to fill in what year group they are when onboarding. for tags."}, {"post_id": 39252, "ts": "2026-08-02T03:22:29Z", "hours": 3.0194, "text": "friends detail view shows a bit more content, and is redesigned for more paper you can reorder the badges around now for priority when they show in their overlay event tags editor looks a bit nicer plus, users can edit their year group after signing in."}, {"post_id": 38922, "ts": "2026-08-01T14:51:06Z", "hours": 2.6803, "text": "So the header in settings now reflects with your pfp colours for the profile editor, i made it now scrolling so that you could fit in all of the various options, like animation speed and noise and stuff. when you click on a class in today view, it shows some more details about the class like teacher and location. friends view also looks a bit nicer, both the list view and the detail view."}, {"post_id": 38829, "ts": "2026-08-01T12:04:02Z", "hours": 1.9464, "text": "Given the theme of this app, paper, widgets now get paper too! settings for profiles has been updated too you can now select black → white in the colour selector. friend detail view still kinda looks a bit empty and bland, im not quite sure how to make it feel alive"}, {"post_id": 38704, "ts": "2026-08-01T07:32:35Z", "hours": 4.1875, "text": "you can add special badges to people now, for like early birds or something idk. the profile picutre bakground has been upgraded a bit, but im going to have to fork the repo and adjust it myself, its currently not looking like a gradient but a single noisy colour, im gonna fix that."}, {"post_id": 38184, "ts": "2026-07-31T13:32:47Z", "hours": 0.5325, "text": "The bottom colour grid is concentric to the device!!! although making the white outlines also behave nicely is proving really really hard, as you can see below"}, {"post_id": 38170, "ts": "2026-07-31T13:00:49Z", "hours": 3.5731, "text": "I’ve been busy remaking the profile editor, its coming together really nicely. that profile picture at the top is designed so that lets the other components take up their space, and then the pfp takes up the rest of the space. this allows the same view to not scroll while working on different phones and text sizes etc. and the background is animated!!!"}, {"post_id": 37968, "ts": "2026-07-31T01:17:27Z", "hours": 5.3656, "text": "I made this widget, which is kinda like a summary widget for the user. it requires this large widget size to fit everything, and its goign to be more dynamic than the other widget which always show the same layout. i haven’t thought exactly how i’m going to do it though, below is a rough first version."}, {"post_id": 37025, "ts": "2026-07-29T14:32:52Z", "hours": 1.9747, "text": "i added a section in teh administration to be able to turn off the server for everyone except for me, so that i can maintain the server and test it. and also a section to manage other admins."}, {"post_id": 36962, "ts": "2026-07-29T11:55:40Z", "hours": 7.3492, "text": "so me and my friend did some more brainstorming focussing on the new friends tab, and how friend accounts work, and profiles and pfps etc. we also aggregated a list of bugs and UI glitches in the app that still need fixing. the current first version is (moderately) broken 😭"}, {"post_id": 35775, "ts": "2026-07-27T12:45:52Z", "hours": 1.9714, "text": "Me and my friend did a bit of brainstorming, to get ideas on how to improve the app UI, UX and future features. cos we are planning a future release hopefully. so we gained a good idea of consolidating friends into a more clear friends tab, combingin the currently spread-around-everywhere friends stuff."}, {"post_id": 35475, "ts": "2026-07-26T22:47:13Z", "hours": 2.4061, "text": "I made some UX adjsutments in the settings app, added some images, reordered haptics, etc the planner sub-tab has been rehauled, and shows items chronologically instead of in sections, which i thought was more intuitive. it still needs much more thought though, im not sure how to space them out since some gaps are months long."}, {"post_id": 35175, "ts": "2026-07-26T13:01:49Z", "hours": 2.2025, "text": "Theres now brown and white paper combined. its an interesting ui concept, makes no sense in real life, but i think it looks nonetheless! it definitely creates an app theme, regardless of if this theme looks good or not…"}, {"post_id": 35092, "ts": "2026-07-26T09:28:27Z", "hours": 4.1481, "text": "As usual, I did a very assorted bunch of things: new admin tab so that i can change stuff without having to go onto my mac and hardcode stuff today view looks like paper - reminscient of the app icon! new about view the popover for subject details is smaller, removing bloat and a bunch of server improvements due to all of my users finding bugs and stuff!"}, {"post_id": 34919, "ts": "2026-07-26T00:43:54Z", "hours": 4.7894, "text": "I have expanded the home tab!! Theres three tabs at the top, today, week, and upcoming. week is what it already was upcoming shows term dates, no school days, school events, and also the users own personal events they make. the today view is a bit ugly but its sort of there! there also an admin page now, so that i dont have to hardcode term dates etc, i can just send them as api requests (for admin accounts only lol)"}, {"post_id": 34560, "ts": "2026-07-25T11:50:05Z", "hours": 0.755, "text": "Message extension got improved, it now checks if you have enabled sharing before allowing you to even sahre it, and tells"}, {"post_id": 34551, "ts": "2026-07-25T11:04:40Z", "hours": 0.5589, "text": "I’m adding countdowns everywhere, even when school is out, so that you can count the hours until your next period"}, {"post_id": 34537, "ts": "2026-07-25T10:29:10Z", "hours": 0.6072, "text": "This is currently the message extension ui. kinda ugly. that needs fixing I also updated the created timetables detail view, and (ignore the screenshot) removes the save button cos no one is going to remember to press save when they change details, so this should save some frustration."}, {"post_id": 34523, "ts": "2026-07-25T09:48:04Z", "hours": 1.6383, "text": "I improved the UI for this view, to better show classroom and teacher labels. I also renamed “Authored” to “Created”, apparently its better copy, according to my friend. The settings got cleaned up a bit, and importing from calendar again needs confirmation"}, {"post_id": 34495, "ts": "2026-07-25T08:06:40Z", "hours": 1.9119, "text": "I found an xcode bug, something to do with compilation errors for incorrect architecture, i dont get it but i gave apple feedback."}, {"post_id": 34418, "ts": "2026-07-25T03:27:42Z", "hours": 0.5558, "text": "So I made a few more adjustments like removing the APNs registration page from onboarding to make onboarding even more seamless Not important though. I discovered a really annoying problem: When I try to add iPad support, build fails because its trying to embed the watch app which obviously doesnt work on ipad. and xcode isnt letting me fix that. 😐"}, {"post_id": 34073, "ts": "2026-07-24T15:06:09Z", "hours": 4.9253, "text": "I made some UI rehauls again lol Current day receives theis blur effect which kinda looks like real light bouncing inside a box under the current day The accent colour of the app is now brown, as I am trying to make the app feel more like paper, which will become more obvious as i later add paper elements and views inside the app. My last update released a new account backend, which meant some users were not able to log in, so i decided to nuke the database and reset everything 💀 but anyway it worked and i upgraded the server to be better at handling this The sheet to add a shared timetable is improved, with blur effects and stuff, and that tiemtable preview has gotten much better it was pretty bad before ngl"}, {"post_id": 33492, "ts": "2026-07-23T14:13:01Z", "hours": 6.9467, "text": "I did a bunch of things: current day highlight in ios improve the notification early sending, to allow users to send notifications at multiple offsets remake the ui for share timetable sheet also the ui for the link customisation, tinted mint for whatever reason sharing links is now a URL, which prompts you to open the app but uses decently ugly html, ill fix later. New icon for apple watch that is optimised for the smaller display size (just made the components bigger and removed some duplicate elements added some mroe developer items at the bottom, doesnt serve much purpose just looks cool lol i removed the status badges that show success, cos i thought they would annoy the user with too many success alerts, and success when you are toggling settings doesnt really need alerts, so yeah. i also hit a bug where notifications would send twice, i had to improve the apns token system to not duplicate tokens for a device. on startup the app shows “restoring account…” every time, so i had to cache the profile data to make it stay signed in until explicitly signed out. its kinda hard to see in the screenshot but there is progressivew blur at the bottom and top, looks nice"}, {"post_id": 32346, "ts": "2026-07-21T13:36:10Z", "hours": 3.2925, "text": "I had a bug where the device could receive 2 notifications and live activities for each device, so I had to remake the APNs (apple push notification service) token management. I also added a highlight around the current day, with the setting to disable it. i thought a stroke was better than a fill because its less overwhelming and doesn’t break the ui style."}, {"post_id": 32261, "ts": "2026-07-21T10:07:38Z", "hours": 2.5917, "text": "😍"}, {"post_id": 31757, "ts": "2026-07-20T12:16:31Z", "hours": 0.9472, "text": "As you saw before the onboarding UI was a bit broken, so I went through and fixed it up and also trimmed down how many pgaes it has. Those bottom buttons aren’t concentric for some reason, even though I am using the built-in toolbar API, so I can’t fix it. Oh well. And it’s done to 8 pages, from 13. I still have som non-UI bugs to fix."}, {"post_id": 31728, "ts": "2026-07-20T11:15:51Z", "hours": 3.0553, "text": "Updated splash screen Notificaitons now have threads (each school day is a thread) macos window size animation fixed (the macos window resizes depending on the current state of the app, like currently selected tab etc. fixed some bugs in live activities and server authentication"}, {"post_id": 31613, "ts": "2026-07-20T04:58:28Z", "hours": 2.3833, "text": "Fixed some server bugs, a user reported getting “forbidden” status messages, turns out I forgot to migrate the database 😐 And other UI refinements: Tab bar uses monospace font version and build in settings feedback sheet"}, {"post_id": 31570, "ts": "2026-07-20T02:25:41Z", "hours": 0.5333, "text": "Plus a version for debug builds, I think they came out really nice!!"}, {"post_id": 31548, "ts": "2026-07-20T01:23:34Z", "hours": 0.4489, "text": "I think this is pretty much it."}, {"post_id": 31538, "ts": "2026-07-20T00:55:26Z", "hours": 0.7164, "text": "I think I’m getting there"}, {"post_id": 31518, "ts": "2026-07-20T00:10:10Z", "hours": 0.2719, "text": "I think I’ve locked in to this one. Now I need to figure out what to actually put on the papar, im thinking it has to be a kind of simplifed version of the existing main UI of my app. something kinda like a calendar schedule"}, {"post_id": 31513, "ts": "2026-07-19T23:53:55Z", "hours": 0.6131, "text": "So many variants! and idk which one is best"}, {"post_id": 31504, "ts": "2026-07-19T23:17:08Z", "hours": 2.4258, "text": "Many many iterations later… I’m leaning towards that paper one, it looks really tasteful i think. im not sure what to put on the paper though"}, {"post_id": 31176, "ts": "2026-07-19T11:22:39Z", "hours": 0.635, "text": "I think they are coming along really nicely!!!! The watchOS version has bigger title text and less handwriting rows cos its a smaller display size, i really like this 😃 the refraction effects 👌"}, {"post_id": 31171, "ts": "2026-07-19T10:43:22Z", "hours": 0.2894, "text": "I think it’s looking preetty good so far"}, {"post_id": 31156, "ts": "2026-07-19T10:22:03Z", "hours": 0.3833, "text": "More experiments, cos the previous multicolour outline was kinda ugly, now i’m thinking of adding the fake handwriting instead, it might look nice"}, {"post_id": 31145, "ts": "2026-07-19T09:51:42Z", "hours": 6.1353, "text": "I needed a new design system for my app, currently it was just a font and thats about it. Below are some experimental app icons I’ve been tweaking in sigma, they are made out of “paper” and represent a new theme I could use, which is literal paper as the design language. I think it could merge with Liquid Glass really nicely if done properly. Otherwise, other improvements: New App Intents for Apple Intelligence Allow users to set a custom share link URL, for example timetable.adonis.pt/sharedtimetable/adon’s_timetable More server tests + server improvements due to finding bugs in tests"}, {"post_id": 30567, "ts": "2026-07-18T07:42:48Z", "hours": 0.7647, "text": "I have also decided to remove Apple wallet integration, it just kinda got too messy. so im now going to revert (yes, revert 😭) back to an iMessage extension that lets you share timetables with a link. it fixes some annoying things that wallet integration has, like syncing etc. I can even allow custom link urls for a shared timetable!"}, {"post_id": 30552, "ts": "2026-07-18T06:53:52Z", "hours": 4.8108, "text": "I got carried away, since right now I am just going through and fixing the feedback my beta users gave me, starting with these: improving the onboarding flow to decrease the amount of pages, and condense some other pages, since testers said there were too many. Upgrade the server so that it only allows iOS to make changes to anything, since watchos and ipados and macos can only view, not edit. i added some tests, using codex, on the server. I’m getting tired of manually debugging every single problem I find by hand, I just make tests and its a much easier way of guaranteeing your server works perfectly. the client app is going to be much harder to add tests to, though. and more other random stuff I found and UI fixes etc. The screenshots are some broken UI stuff I found, I can’t really show you server bugs other than these error alerts. Going good so far though, can’t wait to release this as a v3!"}, {"post_id": 30017, "ts": "2026-07-17T08:18:20Z", "hours": 1.2478, "text": "After releasing v2 testflight, my friends pointed out a very large amounts of bugs in the app 😭 so I am now just trying to fix everything they pointed out. I’m pretty sure the server doesn’t have any issues, so at least that’s good. First bug is this bottom bar looks horrendous, This was fine for me cos I set my dynamic text size to small 😭"}, {"post_id": 28834, "ts": "2026-07-15T10:39:28Z", "hours": 2.2433, "text": "I made some final refinements to make sure account management on macOS works, so that my users can actually use the app, and then some other UI refinements, mainly for settings. there are a bunch of weird things i am yet to fix, but im really tired and just want to get this app out, so ill fix them later."}, {"post_id": 26526, "ts": "2026-07-11T11:56:12Z", "hours": 0.4547, "text": "I added some more pages to the onboarding, since that’s the only way I can show users how the app works cos it ngl is kinda obscure. i also added a report feedback or bug button, which needs some ui adjustments bruh"}, {"post_id": 26359, "ts": "2026-07-11T03:14:52Z", "hours": 1.1214, "text": "I can’t really show you haptics but i added haptics to buttons and the status badges. not much to say honestly. theres a toggle in settings to turn that on and off."}, {"post_id": 25978, "ts": "2026-07-10T14:57:41Z", "hours": 0.8503, "text": "I;m nearly read to release version 2 of the app, so i made a list of final tweaks and little improvements to make it as best I can, i think i can release it in a few days."}, {"post_id": 25832, "ts": "2026-07-10T09:47:11Z", "hours": 3.5725, "text": "I improved the friends subjects widgets with concentric corners and stuff."}, {"post_id": 24646, "ts": "2026-07-08T11:25:32Z", "hours": 2.6925, "text": "I think I have built out pretty much all of the projects, but i need to fix the abundance of bugs and problems that i have. the first one was fixing a problem with server syncing, and making watch depend on signing in on the phone, not by itself."}, {"post_id": 23437, "ts": "2026-07-06T12:20:38Z", "hours": 1.6219, "text": "I refined the live activities (that background is for recess and lunch, even though this preview text says before school)"}, {"post_id": 23389, "ts": "2026-07-06T09:53:29Z", "hours": 8.7292, "text": "I added live activities, although they are currently kinda ugly and need much improvement. I also made the watch app independent, because it doesnt need the iphone much really, it can just contact the server. i still have more work in making the server work better and stop giving me random errors, but yeah."}, {"post_id": 22056, "ts": "2026-07-04T09:37:57Z", "hours": 2.8419, "text": "In the onboarding I added pages to teach the user the features of the app, but I havent finished it yet. it needs a few more pages and refinement for smalelr phone screens"}, {"post_id": 21441, "ts": "2026-07-03T12:12:36Z", "hours": 6.5136, "text": "I have added an onboarding view that i really like, its very colourful and stuff. i also improved the server to be able to send notifications to users, to tell them when their next class is."}, {"post_id": 20474, "ts": "2026-07-02T02:23:36Z", "hours": 3.1183, "text": "I added notifications to the app, so that people can receive information in the form of notifications as well as live activities and app intents and widgets. I also improved the share pass button in the prominent tab bar, so that you see this sheet to select what pass you want to share, not just the user’s own timetable."}, {"post_id": 19907, "ts": "2026-07-01T10:45:28Z", "hours": 0.4294, "text": "Much better blur, although the server is taking a full 2.5 seconds to send back the pass, and i need to reduce that as much as possible"}, {"post_id": 19874, "ts": "2026-07-01T09:07:49Z", "hours": 0.5289, "text": "The timetable has some shadow behind it. I wanted to make the card HDR, but after a lot of experimenting i found apple doesn’t let you use hdr in your app like this, so i had to instead do this shadow 😐"}, {"post_id": 19839, "ts": "2026-07-01T07:27:59Z", "hours": 5.4344, "text": "I finished the search view, and i spent a very long time on perfecting some visual animations and stuff. when you click on a search result it separately animates the title in. also, before you search anything, i thought instead of showing most downloaded timetables or something i show this really squishy and fun pokemon-style timetable wallet pass. the settings view has also been improved a bit, to make some settings more clear, but i still need to refine it alot further to get it working really nicely."}, {"post_id": 19231, "ts": "2026-06-30T14:26:57Z", "hours": 3.5647, "text": "I did some debugging and made quite a lot more endpoints, I think I’m ready to move on to making the app."}, {"post_id": 18340, "ts": "2026-06-29T13:38:09Z", "hours": 5.9711, "text": "It took quite some time, but i got some really nice looking status badges! I’m really proud of how they came out, they look very juicy, and i cant show it here but i promise its very touchable and squishy and animated! 🥰"}, {"post_id": 17491, "ts": "2026-06-28T09:18:06Z", "hours": 1.3717, "text": "I’ve built a few endpoints and documented them in rapidapi, ready to import into the client app."}, {"post_id": 17396, "ts": "2026-06-28T04:54:23Z", "hours": 2.2958, "text": "I finally got the server working! took a really long time to get https working though, nginx was impressively difficult"}, {"post_id": 16990, "ts": "2026-06-27T15:55:13Z", "hours": 3.0039, "text": "I have started building the server, using swift vapor. i chose vapor because it is written with swift, like my project, which made it easier to share code between the two files."}, {"post_id": 16274, "ts": "2026-06-26T13:42:03Z", "hours": 4.8597, "text": "Xcode seems to have become extremely broken or something, i spent the last 4 hours trying to make my widget work but Xcode kept erroring out and eating memory swap, and now i have some trouble with making the imported timetables actually show up in the widgets i already made 😡"}, {"post_id": 15592, "ts": "2026-06-25T11:12:59Z", "hours": 0.6642, "text": "I changed the blur effect to this, which i think is much better, because it has less blur, and doesnt add an ugly grey tint, so black background stays black background."}, {"post_id": 15058, "ts": "2026-06-24T13:45:05Z", "hours": 0.5081, "text": "I added this blur effect behind the share sheet, and I think it looks really nice. I had to import a package to get a blur this clear"}, {"post_id": 15044, "ts": "2026-06-24T13:04:35Z", "hours": 1.7442, "text": "I added a share button in the bottom left, which allows the user to share their timetable in one press, using the .prominent Tab style so that it looks seperate from the other tabs while still looking consistent."}, {"post_id": 13120, "ts": "2026-06-21T13:40:22Z", "hours": 1.0011, "text": "So added the ability to share timetables using apple wallet, along with sending them using messages, i think that background will need to get fixed for readability, but otherwise, i like it alot."}, {"post_id": 13066, "ts": "2026-06-21T11:31:59Z", "hours": 3.4256, "text": "I added some App Intents, below is my current subject intent, and also a list of received timetables intent. It took a lot longer than expected because the app intents framework was quite confusing to get working, but i got a nice UI in the end."}, {"post_id": 12370, "ts": "2026-06-20T05:56:30Z", "hours": 1.4289, "text": "I upgraded the watch views, like making the progress rectangle rounded, and this very colourful background for when its recess and lunch"}, {"post_id": 11882, "ts": "2026-06-19T11:15:08Z", "hours": 2.4344, "text": "I updated the background of the window, including in light mode, and I also remade the icon. The settings also looks much better than it was before, and I made a nice window animation for when you click a slot to see what your friends have."}, {"post_id": 9773, "ts": "2026-06-16T06:48:43Z", "hours": 1.3667, "text": "I made some refinements to the watchOS and iOS app, including design and performance."}, {"post_id": 9217, "ts": "2026-06-15T14:09:02Z", "hours": 0.8633, "text": "I made some design adjustments to the macOS app, giving it a blur background. Also, the weekly shedule widget has had its corner radiuses and colours adjusted to be less harsh and look better."}, {"post_id": 9192, "ts": "2026-06-15T13:10:48Z", "hours": 0.2592, "text": "I added some buttons and refined the UI of settings view"}, {"post_id": 9182, "ts": "2026-06-15T12:32:38Z", "hours": 0.5969, "text": "I continued to refine the design of the macOS widget, and I really like it now."}, {"post_id": 9098, "ts": "2026-06-15T06:29:44Z", "hours": 3.9675, "text": "I fixed the widget extension problem by making two widget extensions, one for watch and one for other platforms, and made them use identical code. And then I refined the widget design for macOS and iOS and i think they look really nice now."}, {"post_id": 7893, "ts": "2026-06-13T05:18:30Z", "hours": 0.5119, "text": "I added support for these widgets from only watch to iphone and ipad and macOS, and currently they are ugly and unrefined, so I’m going to fix them now."}, {"post_id": 7438, "ts": "2026-06-12T11:50:09Z", "hours": 3.1881, "text": "I ported the app over to macOS, which was harder than I thought because there was a lot of code throughout every screen that was for connecting iphone to apple watch or some other iOS-only thing, which I had to conditionally compile out for macOS. then I needed to refine the views to work on macOS well, for example the class editor sheet used a sidebar instead of the scrolling tabview on iOS. There’s still more work to do to refine it more and get CloudKit working so that the timetable syncs across devices."}, {"post_id": 6885, "ts": "2026-06-11T15:22:19Z", "hours": 2.7783, "text": "I added these views to the watch, so you can see how much time is left in a session for yourself, and also for others. i also refined the timetable view to not use so much glass because it was lagging the TabView. The main clock uses a liquid glass background against the background progressview, and what class is next."}, {"post_id": 6796, "ts": "2026-06-11T12:06:20Z", "hours": 0.8469, "text": "I fixed the sync button visuals, it now has a blur replace transition effect. the timetable comparison view also blurs in and out when you click around"}, {"post_id": 6781, "ts": "2026-06-11T11:08:53Z", "hours": 2.6286, "text": "I moved the sync button to settings, so that the toolbar in the timetable tab could be removed. this is to make way for this new bottom half of the screen that shows other people’s timetables when you click on the slot in the top half, replacing the previous system of letting you select someone else and see their whole timetable covering your timetable. this system lets you view your own timetable and compare it with everyone else’s at a particular period. It uses a soft scroll edge effect at the bottom, and a hard effect at the top, which i think looks really nice. the second image shows the content scrolling under the timetable, which i really liked."}, {"post_id": 6247, "ts": "2026-06-10T14:30:26Z", "hours": 0.8989, "text": "I’m just refining the software a but before I start adding Siri support and improving Messages import/export flow. I fixed this comparison view, improved the class editor to show the glass nicer, and the settings toolbar has a gradient blur effect instead of hard blur, which was made the new default toolbar background style, which imo is ugly."}, {"post_id": 6208, "ts": "2026-06-10T12:53:06Z", "hours": 4.0678, "text": "I renamed PMS Timetable to Timetable, which took more time than I expected cos it was embedded in like every single file and I even had to go through binary files and just delete all the instances of “pms” . then this managed to corrupt Xcode and make it crash every time I opened it, and i had to delete some stuff to fix that. Now I’m on the OS27 version and I’m going to start fixing some UI."}]...
|
Title: Timetable by @omeriadon | Stardance
Devlog Title: Timetable by @omeriadon | Stardance
Devlogs:
I renamed PMS Timetable to Timetable, which took more time than I expected cos it was embedded in like every single file and I even had to go through binary files and just delete all the instances of “pms” . then this managed to corrupt Xcode and make it crash every time I opened it, and i had to delete some stuff to fix that. Now I’m on the OS27 version and I’m going to start fixing some UI.
I’m just refining the software a but before I start adding Siri support and improving Messages import/export flow. I fixed this comparison view, improved the class editor to show the glass nicer, and the settings toolbar has a gradient blur effect instead of hard blur, which was made the new default toolbar background style, which imo is ugly.
I moved the sync button to settings, so that the toolbar in the timetable tab could be removed. this is to make way for this new bottom half of the screen that shows other people’s timetables when you click on the slot in the top half, replacing the previous system of letting you select someone else and see their whole timetable covering your timetable. this system lets you view your own timetable and compare it with everyone else’s at a particular period. It uses a soft scroll edge effect at the bottom, and a hard effect at the top, which i think looks really nice. the second image shows the content scrolling under the timetable, which i really liked.
I fixed the sync button visuals, it now has a blur replace transition effect. the timetable comparison view also blurs in and out when you click around
I added these views to the watch, so you can see how much time is left in a session for yourself, and also for others. i also refined the timetable view to not use so much glass because it was lagging the TabView. The main clock uses a liquid glass background against the background progressview, and what class is next.
I ported the app over to macOS, which was harder than I thought because there was a lot of code throughout every screen that was for connecting iphone to apple watch or some other iOS-only thing, which I had to conditionally compile out for macOS. then I needed to refine the views to work on macOS well, for example the class editor sheet used a sidebar instead of the scrolling tabview on iOS. There’s still more work to do to refine it more and get CloudKit working so that the timetable syncs across devices.
I added support for these widgets from only watch to iphone and ipad and macOS, and currently they are ugly and unrefined, so I’m going to fix them now.
I fixed the widget extension problem by making two widget extensions, one for watch and one for other platforms, and made them use identical code. And then I refined the widget design for macOS and iOS and i think they look really nice now.
I continued to refine the design of the macOS widget, and I really like it now.
I added some buttons and refined the UI of settings view
I made some design adjustments to the macOS app, giving it a blur background. Also, the weekly shedule widget has had its corner radiuses and colours adjusted to be less harsh and look better.
I made some refinements to the watchOS and iOS app, including design and performance.
I updated the background of the window, including in light mode, and I also remade the icon. The settings also looks much better than it was before, and I made a nice window animation for when you click a slot to see what your friends have.
I upgraded the watch views, like making the progress rectangle rounded, and this very colourful background for when its recess and lunch
I added some App Intents, below is my current subject intent, and also a list of received timetables intent. It took a lot longer than expected because the app intents framework was quite confusing to get working, but i got a nice UI in the end.
So added the ability to share timetables using apple wallet, along with sending them using messages, i think that background will need to get fixed for readability, but otherwise, i like it alot.
I added a share button in the bottom left, which allows the user to share their timetable in one press, using the .prominent Tab style so that it looks seperate from the other tabs while still looking consistent.
I added this blur effect behind the share sheet, and I think it looks really nice. I had to import a package to get a blur this clear
I changed the blur effect to this, which i think is much better, because it has less blur, and doesnt add an ugly grey tint, so black background stays black background.
Xcode seems to have become extremely broken or something, i spent the last 4 hours trying to make my widget work but Xcode kept erroring out and eating memory swap, and now i have some trouble with making the imported timetables actually show up in the widgets i already made 😡
I have started building the server, using swift vapor. i chose vapor because it is written with swift, like my project, which made it easier to share code between the two files.
I finally got the server working! took a really long time to get https working though, nginx was impressively difficult
I’ve built a few endpoints and documented them in rapidapi, ready to import into the client app.
It took quite some time, but i got some really nice looking status badges! I’m really proud of how they came out, they look very juicy, and i cant show it here but i promise its very touchable and squishy and animated! 🥰
I did some debugging and made quite a lot more endpoints, I think I’m ready to move on to making the app.
I finished the search view, and i spent a very long time on perfecting some visual animations and stuff. when you click on a search result it separately animates the title in. also, before you search anything, i thought instead of showing most downloaded timetables or something i show this really squishy and fun pokemon-style timetable wallet pass. the settings view has also been improved a bit, to make some settings more clear, but i still need to refine it alot further to get it working really nicely.
The timetable has some shadow behind it. I wanted to make the card HDR, but after a lot of experimenting i found apple doesn’t let you use hdr in your app like this, so i had to instead do this shadow 😐
Much better blur, although the server is taking a full 2.5 seconds to send back the pass, and i need to reduce that as much as possible
I added notifications to the app, so that people can receive information in the form of notifications as well as live activities and app intents and widgets. I also improved the share pass button in the prominent tab bar, so that you see this sheet to select what pass you want to share, not just the user’s own timetable.
I have added an onboarding view that i really like, its very colourful and stuff. i also improved the server to be able to send notifications to users, to tell them when their next class is.
In the onboarding I added pages to teach the user the features of the app, but I havent finished it yet. it needs a few more pages and refinement for smalelr phone screens
I added live activities, although they are currently kinda ugly and need much improvement. I also made the watch app independent, because it doesnt need the iphone much really, it can just contact the server. i still have more work in making the server work better and stop giving me random errors, but yeah.
I refined the live activities (that background is for recess and lunch, even though this preview text says before school)
I think I have built out pretty much all of the projects, but i need to fix the abundance of bugs and problems that i have. the first one was fixing a problem with server syncing, and making watch depend on signing in on the phone, not by itself.
I improved the friends subjects widgets with concentric corners and stuff.
I;m nearly read to release version 2 of the app, so i made a list of final tweaks and little improvements to make it as best I can, i think i can release it in a few days.
I can’t really show you haptics but i added haptics to buttons and the status badges. not much to say honestly. theres a toggle in settings to turn that on and off.
I added some more pages to the onboarding, since that’s the only way I can show users how the app works cos it ngl is kinda obscure. i also added a report feedback or bug button, which needs some ui adjustments bruh
I made some final refinements to make sure account management on macOS works, so that my users can actually use the app, and then some other UI refinements, mainly for settings. there are a bunch of weird things i am yet to fix, but im really tired and just want to get this app out, so ill fix them later.
After releasing v2 testflight, my friends pointed out a very large amounts of bugs in the app 😭 so I am now just trying to fix everything they pointed out. I’m pretty sure the server doesn’t have any issues, so at least that’s good. First bug is this bottom bar looks horrendous, This was fine for me cos I set my dynamic text size to small 😭
I got carried away, since right now I am just going through and fixing the feedback my beta users gave me, starting with these: improving the onboarding flow to decrease the amount of pages, and condense some other pages, since testers said there were too many. Upgrade the server so that it only allows iOS to make changes to anything, since watchos and ipados and macos can only view, not edit. i added some tests, using codex, on the server. I’m getting tired of manually debugging every single problem I find by hand, I just make tests and its a much easier way of guaranteeing your server works perfectly. the client app is going to be much harder to add tests to, though. and more other random stuff I found and UI fixes etc. The screenshots are some broken UI stuff I found, I can’t really show you server bugs other than these error alerts. Going good so far though, can’t wait to release this as a v3!
I have also decided to remove Apple wallet integration, it just kinda got too messy. so im now going to revert (yes, revert 😭) back to an iMessage extension that lets you share timetables with a link. it fixes some annoying things that wallet integration has, like syncing etc. I can even allow custom link urls for a shared timetable!
I needed a new design system for my app, currently it was just a font and thats about it. Below are some experimental app icons I’ve been tweaking in sigma, they are made out of “paper” and represent a new theme I could use, which is literal paper as the design language. I think it could merge with Liquid Glass really nicely if done properly. Otherwise, other improvements: New App Intents for Apple Intelligence Allow users to set a custom share link URL, for example timetable.adonis.pt/sharedtimetable/adon’s_timetable More server tests + server improvements due to finding bugs in tests
More experiments, cos the previous multicolour outline was kinda ugly, now i’m thinking of adding the fake handwriting instead, it might look nice
I think it’s looking preetty good so far
I think they are coming along really nicely!!!! The watchOS version has bigger title text and less handwriting rows cos its a smaller display size, i really like this 😃 the refraction effects 👌
Many many iterations later… I’m leaning towards that paper one, it looks really tasteful i think. im not sure what to put on the paper though
So many variants! and idk which one is best
I think I’ve locked in to this one. Now I need to figure out what to actually put on the papar, im thinking it has to be a kind of simplifed version of the existing main UI of my app. something kinda like a calendar schedule
I think I’m getting there
I think this is pretty much it.
Plus a version for debug builds, I think they came out really nice!!
Fixed some server bugs, a user reported getting “forbidden” status messages, turns out I forgot to migrate the database 😐 And other UI refinements: Tab bar uses monospace font version and build in settings feedback sheet
Updated splash screen Notificaitons now have threads (each school day is a thread) macos window size animation fixed (the macos window resizes depending on the current state of the app, like currently selected tab etc. fixed some bugs in live activities and server authentication
As you saw before the onboarding UI was a bit broken, so I went through and fixed it up and also trimmed down how many pgaes it has. Those bottom buttons aren’t concentric for some reason, even though I am using the built-in toolbar API, so I can’t fix it. Oh well. And it’s done to 8 pages, from 13. I still have som non-UI bugs to fix.
😍
I had a bug where the device could receive 2 notifications and live activities for each device, so I had to remake the APNs (apple push notification service) token management. I also added a highlight around the current day, with the setting to disable it. i thought a stroke was better than a fill because its less overwhelming and doesn’t break the ui style.
I did a bunch of things: current day highlight in ios improve the notification early sending, to allow users to send notifications at multiple offsets remake the ui for share timetable sheet also the ui for the link customisation, tinted mint for whatever reason sharing links is now a URL, which prompts you to open the app but uses decently ugly html, ill fix later. New icon for apple watch that is optimised for the smaller display size (just made the components bigger and removed some duplicate elements added some mroe developer items at the bottom, doesnt serve much purpose just looks cool lol i removed the status badges that show success, cos i thought they would annoy the user with too many success alerts, and success when you are toggling settings doesnt really need alerts, so yeah. i also hit a bug where notifications would send twice, i had to improve the apns token system to not duplicate tokens for a device. on startup the app shows “restoring account…” every time, so i had to cache the profile data to make it stay signed in until explicitly signed out. its kinda hard to see in the screenshot but there is progressivew blur at the bottom and top, looks nice
I made some UI rehauls again lol Current day receives theis blur effect which kinda looks like real light bouncing inside a box under the current day The accent colour of the app is now brown, as I am trying to make the app feel more like paper, which will become more obvious as i later add paper elements and views inside the app. My last update released a new account backend, which meant some users were not able to log in, so i decided to nuke the database and reset everything 💀 but anyway it worked and i upgraded the server to be better at handling this The sheet to add a shared timetable is improved, with blur effects and stuff, and that tiemtable preview has gotten much better it was pretty bad before ngl
So I made a few more adjustments like removing the APNs registration page from onboarding to make onboarding even more seamless Not important though. I discovered a really annoying problem: When I try to add iPad support, build fails because its trying to embed the watch app which obviously doesnt work on ipad. and xcode isnt letting me fix that. 😐
I found an xcode bug, something to do with compilation errors for incorrect architecture, i dont get it but i gave apple feedback.
I improved the UI for this view, to better show classroom and teacher labels. I also renamed “Authored” to “Created”, apparently its better copy, according to my friend. The settings got cleaned up a bit, and importing from calendar again needs confirmation
This is currently the message extension ui. kinda ugly. that needs fixing I also updated the created timetables detail view, and (ignore the screenshot) removes the save button cos no one is going to remember to press save when they change details, so this should save some frustration.
I’m adding countdowns everywhere, even when school is out, so that you can count the hours until your next period
Message extension got improved, it now checks if you have enabled sharing before allowing you to even sahre it, and tells
I have expanded the home tab!! Theres three tabs at the top, today, week, and upcoming. week is what it already was upcoming shows term dates, no school days, school events, and also the users own personal events they make. the today view is a bit ugly but its sort of there! there also an admin page now, so that i dont have to hardcode term dates etc, i can just send them as api requests (for admin accounts only lol)
As usual, I did a very assorted bunch of things: new admin tab so that i can change stuff without having to go onto my mac and hardcode stuff today view looks like paper - reminscient of the app icon! new about view the popover for subject details is smaller, removing bloat and a bunch of server improvements due to all of my users finding bugs and stuff!
Theres now brown and white paper combined. its an interesting ui concept, makes no sense in real life, but i think it looks nonetheless! it definitely creates an app theme, regardless of if this theme looks good or not…
I made some UX adjsutments in the settings app, added some images, reordered haptics, etc the planner sub-tab has been rehauled, and shows items chronologically instead of in sections, which i thought was more intuitive. it still needs much more thought though, im not sure how to space them out since some gaps are months long.
Me and my friend did a bit of brainstorming, to get ideas on how to improve the app UI, UX and future features. cos we are planning a future release hopefully. so we gained a good idea of consolidating friends into a more clear friends tab, combingin the currently spread-around-everywhere friends stuff.
so me and my friend did some more brainstorming focussing on the new friends tab, and how friend accounts work, and profiles and pfps etc. we also aggregated a list of bugs and UI glitches in the app that still need fixing. the current first version is (moderately) broken 😭
i added a section in teh administration to be able to turn off the server for everyone except for me, so that i can maintain the server and test it. and also a section to manage other admins.
I made this widget, which is kinda like a summary widget for the user. it requires this large widget size to fit everything, and its goign to be more dynamic than the other widget which always show the same layout. i haven’t thought exactly how i’m going to do it though, below is a rough first version.
I’ve been busy remaking the profile editor, its coming together really nicely. that profile picture at the top is designed so that lets the other components take up their space, and then the pfp takes up the rest of the space. this allows the same view to not scroll while working on different phones and text sizes etc. and the background is animated!!!
The bottom colour grid is concentric to the device!!! although making the white outlines also behave nicely is proving really really hard, as you can see below
you can add special badges to people now, for like early birds or something idk. the profile picutre bakground has been upgraded a bit, but im going to have to fork the repo and adjust it myself, its currently not looking like a gradient but a single noisy colour, im gonna fix that.
Given the theme of this app, paper, widgets now get paper too! settings for profiles has been updated too you can now select black → white in the colour selector. friend detail view still kinda looks a bit empty and bland, im not quite sure how to make it feel alive
So the header in settings now reflects with your pfp colours for the profile editor, i made it now scrolling so that you could fit in all of the various options, like animation speed and noise and stuff. when you click on a class in today view, it shows some more details about the class like teacher and location. friends view also looks a bit nicer, both the list view and the detail view.
friends detail view shows a bit more content, and is redesigned for more paper you can reorder the badges around now for priority when they show in their overlay event tags editor looks a bit nicer plus, users can edit their year group after signing in.
some people were saying that it was really annoying that you could drag anywhere in a sheet to dismiss the sheet, you would be halfway through something and then you have to restart. so i went through all the sheets in the app and checked if they needed to remove this swiping. luckily it only needed one modifier per sheet. also, more tester feedback was that i shouldnt have sections for tags, so yeah i did that. also, now that there is a concept known as friends, instead of just shared timetables, i removed the option to allow people to have their timetables searched publicly. i havent figured out what i want for specific created timetables, i might lwk have to just remove that also users now have to fill in what year group they are when onboarding. for tags.
i just read an article that said @Environment(\.dismiss) is bad for performance dismiss() is a very simple and fast way to make a sheet or other modal view dismiss , but because its so simple and dynamic, that introduces lots of bugs apparently. so I had to go through all the sheets and this time replace dismiss() with better state management. i hope ill notice the performance improvements!
before and after some small ui improvements!!
I checked the localisation and it went down to 25%, so I went and pushed that back up to 100%. and the friend detail view has been improved a bit more
So so far up to now, I have completely neglected everything other than iPhone. i needed this so that i could focus on making iphone as seamless and intuitive and possible, and to push features faster. so now i have to go and basically remove all of the non-iPhone code and replace it with iphone code, and then try to make that work multiplatform. so i decided iphone is going to remain as a tabview, for now at least, but ipados, macos, and big iphones can use a navigation split view, shown below. so a sidebar and main view and an inspector on the right sometimes.
first version of timetable for macos 😭 its really ugly and lwk broken. so im gonna spend the next few hours fixing this incredibly “interesting” UI.
working with macOS is infuriating me, so i decided im going to make the macos app actually be mac catalyst, so its technically just running an ipad app. which makes sense. still needs alot more work, this refactor is proving very very annoying
its getting there! mac catalyst is definitely better than trying to make native macOS work. swiftui isnt really making it any better, its really really restrictive in terms of how i can structure my app. like for example that right column, has so many glitches that i cant really find solutions to because the bugs aren’t in my code, its infuriating.
Still just refactoring and remaking the app. i decided to remove OS 26 compatibility, because there is just too many APIs and stuff the images below are some stuff I’ve been refining: dragging friends around sideays iphone support (same thing as macOS + iPadOS) but I’ve decided now to not work on macOS (which is just iPadOS) and ipad until i perfect iphone and watch. should be fun!
I finished the refactoring for now, to make the app multi platform. So then i did some more brainstorming and I have consolidated what is the next few features I need to do tips, to tell the user about features the app has they sound easy but each tip needs rules and parameters and all kinds of obscure annoying things, so its going to be harder than it looks my first tip shown below An indicator next to each friend about their status, which is going to take the user’s location, taken in the background, to tell if they are on campus or off campus So from this you can tell when a user arrives at school or if they are sick iOS provides a function that will call my app, from the background, every time the user crosses a specific map polygon (The school). so i dont even need to do any map processing, my app just gets called every time the device goes in or out of school! plus i can add cool related features like the user’s average arrival time to school, which will be pretty cool!
Few things! Adminsitration gets new items for reported users and freinds-since requests sections in adminstration statistics for number of users, etc you can now see your status and other people’s status, like on or off campus new page that asks for location access ofc (ill move it into the onboarding later improved the add a friend sheet admins get emails for reported users, etc
user account data now has highlighted rows for faster navigation user reports look much better, as well as friends-since requests reporting or sending feedback sends notifications instead of emails, now
lots of little things instead of one big feature: i used to send emails, and i reached limits on the email provider so i had to move to only sending notifications, like device notifications. i still need an alternative, im looking through options now there used to be different settings view between iPhone and iPad, so i consolidated them into one view.you can now see your friend’s status as on or off campus. this uses location to check when you reach school or leave. this also allows some cool statistics like average school arrival time!there is better moderation, it shows in the admins view and lets the admin block or do nothing about the account. it will be expanded later to have more features and actions and stuff you can request to change your friends-since tag, also approved by admin.i deleted all (most) references to #if os(macOS) , since there is no more macOS build, its just iPad running on mac. small ui improvements: added search to some more administration views tapping an existing photo pro allows crop the tabview gets tab transitions, like the ones iOS 26 had (that ios27 removed 😡)year-level tags are separated from other tags expanded statistics!added archived events - events in the past - plus an option to automatically delete old events added a button to reset tips, since the app is getting more and more complicated the onboarding is less condensed, when that permission is first needed, its permission sheet request shows.more stuff gets cached in Defaults, making it more offline-safe.and some toolbar and blur and navigation title stuff.
some ui improvements (that weird box in the account view is Metal debug overlay, not my app)
Grade tracker!!! I know this is a very cliche topic but I had to implement this because it integrates so seamlessly with the app for example, it already knows your subjects (duh) and when you input the date of your assessment, it also knows which period of the day that is, because it knows your subjects! (duh) I also added ATAR, sthe user can set goals and stuff for what they want to achieve.
I decided to remove created timetables. they just don’t work anymore with the Friends concept, which makes it really annoying to adjacently share other timetables alongside having friends. its a shame, i wish it could have worked, maybe ill add it again later. oh well. im still just combing through the app and fixing all the little things i see: grade tracker gets a next item in the top for the top 4 subjects, which is important for atar. improved the friend detail view a bit better, because the old one had not enough information and was displaying badly.added more statistics to administration view cos its fun lol the tag selector view was improved, looks nicer and is a tiny bit more legible nowi changed the grade tracker weighting from semester to year. apparently thats the norm more friend detail view improvements
improving the friend detail view the padding is so much nicer, and the detail view also shows more info and in a better way the week subtab shows a similar timetable to the user’s own, and shows more info. and some more statistics lol
You can now change the font! this took more work than you would expect, because i did a find on the project and saw there were like 60 references to .monospaced, and each one had to be manually upgraded to dynamically apply font. i also tried to make the rounded font expanded, but after some inspection i found it doesnt even have a .expanded variant 😐 so the options i ended up with were monospaced, rounded, and expanded. no normal font. it just looks boring at this point. below is the same screen with each option! widgets also get the fonts, and they look actually insane ngl
I started work on rehauling the watchOS app And I really like how it’s coming out The watch is supposed to distill down the information the user needs, so i picked the current and next period, time, and their location. all these elements are glassy and stuff, so they are clickable, and its in a tabview that scrolls between each card. The first tab is the week view for the user. so I spent a good 2 hours trying to make a ScrollView work, but it didnt. sometimes the views teleported, some lagged, some glitched, and it was overall insanely annoying. so I moved to a tabview, which was considerably more stable, but removed the animations I wanted. it had its own animations which were fine, but yeah. Also, fonts also reflect on the watch! the one in the screenshots below is the expanded style, which to be honest isnt that good on watch since the watch is constrained as is, but yeah. The glass timetable actually looks insane I am still thinking of how to include other content, like grades maybe, and other things, but i dont want to make it too dense and slow
there is a new progress background: its not a background! inspired by the app icon / ios app, the progress view is now this marker thingy which fits into the app’s theme much nicer I’ve also been tweaking the font sizing, image sizing, padding, and gaps between the items here to make sure they look good at all possible subejct names etc. i also had to fight a bit with the safe area of the view, you can see in the image below the name “bob” ends slightly above the text, took me a lot longer than expected to fix that
I also made some improvements to the card height for the user’s own item. before, it was just the full width. Halfway while I was working on that, my TabView suddenly froze for a straight 20 seconds every time i changed the tab. this was very weird, and the CPU shows 0% usage, so I was quite surprised. After a large round of commenting things out and seeing what broke, I found it was a single .glassEffect() that I was using for the progress marker. I have no idea how a glass effect can make an entire tabview freeze, but fine. i replaced it with a simple red colour, as shown below, with a stroke and shadow, and i think it looks fine now.
I added a new devices statistics view. or more accurately, i expanded it. before, it just shows device platforms. now, it shows the os version, minor os version, and if it is a beta or not. i also added support for iOS 26 (previous builds only supported OS27 or later). this involved me just making some features not work on os26 😐 and supporting anything before OS26 would probably be legitimately impossible, so yeah not that.
Big update! Light mode! The app used to be dark mode only, it let me make it look much more pixel-perfect and refine colours and stuff, but its kinda obvious you cant keep the app dark mode only, its just not good. so i went through everything, adding light mode versions of paper, text, glass, etc. took me quite a bit of time because i was trying to maintain consistency while doing it, which included alot of redoing things and creating view modifiers and manually applying each one, etc i also added weatherkit, its just a single line in the today tab, but its nice. while adding light mode support, i found a really nice blur view i could add to lists, so now each lists’s background is nothing other than a blur! i also decided to make all backgrounds made out of paper, and i think it looks nice? theres also now a statistics page for deices and os versions and builds and stuff, itll be more useful later. as well as knowing when your friends arrive to school, i added the ability to know when they are within 5 or 10 mins, and to send notifications for that. average arrival also is split by day now, because people arrive to school at different times per day theres a new tab picker, which you can see int eh controls, its much more glassy than the last one, which is really really playful and stuff! i still have more work to do in terms of ui work, excluding light mode refinements, like notifications and widgets, but yeah.
I added accessibility improvements, mainly like labels and tags and stuff, for use with voice over etc. this was triggered by me installing a developer process into my app which allowed me to iterate on design faster, and it depended on accessibility elements to discover each element. (the purple thing lets you tap elements and comment on them) i also tried a new background for the cards, as you can see below, its just glass and i think it looks pretty nice
You can now edit the foreground colours for your profile picture monogram i also completed light mode support for widgets
I added custom backgrounds! Theres the paper backgrounds i added recently, and then the solid colours, and then also some of the really nice apple ones idk what they are called (i hope apple doesnt copyright me 😭) so yeah it applies to all backgrounds in the app i think it merges really nice with the liquid glass and blur backgrounds different views have it also shows on watch i also added an option to choose how far forward you see events. theres also even more statistics for what app version people are using!
So supporting light mode calls for an icon redesign, at least just for light mode, and here they are! Though to be honest, the entire app is gonna need a redesign, because I need to rename it from Timetable, because it has expanded into doing so much more, and timetable is a bit of a boring name. finding names is so insanely annoying though, but oh well.
I spent some time to work on this search button and its animation. idk if the video plays, but it uses apples glass effect transitions! I also made the confirmation dialogs for removing and reporting a friend better, before they just popped up in the middle of the screen, now it comes out of the menu (also found another ios27 beta bug 😐)
A somewhat interesting devlog this time. I spend a good 2 hours just trying to make live activities work. the miserable part is that they were already working before 😭 I dont even know what I did but it broke. And while i was trying to make a debug button to start a live activity, yeah it just wasn’t working. all kinds of problems with not submitting a good APNs token. and i had to like stop activities before starting new ones and stuff it was just in general really annoying. there was even more problems but its too much to say here 😔 anyway, i have started cleaning up the app. no more big features, to be honest, until i add a website for this thing!! should be really easy since the backend is clearly all done lol events can show weather for them, such as the athletics carnival i removed the ridiculous backgrounds i allowed users to choose, theres no only solid black/white and paper. more reasonable, i think. as part of my optimisation, i removed settings i found useless. haptics are now always on, and highlighting the current day is always on. profile pictures can now have their foreground colour set, like the Monogram can have its colour optimised.you can see the average for when your friends arrive to school per day, instead of in total. developer settings also got reorganised, more settings only show to developers. yet again cleaning up the app experience. the location status was a bit unreliable, if users were offline, etc, so i added multiple ways the app pushes updates to the server, and queued statuses when the device was offline. i also refined the actual radius for what counts as within 5 / 10 minutes, should be a bit better. i havent thought about people who live within 10 minutes, thats an interesting case the subject editors grid also looks nicer (still needs more improvement though the tabview now hides while scrolling, like it collapses into the corner, like apple apps! you can manually turn off sharing your status, for privacy reasons. and some more things i forgot 🥹 im so excited for this thing to actually launch!!!!!
new icons. the old one that now supports light mode was kinda ugly.
Ok so after a bunch of wrestling with nginx and bun and next.js, i have added the website! its at https://timetable.adonis.pt/ and the current api has been moved to https://timetable.adonis.pt/api Its the usual next.js thing. and it uses bun. my design idea for this is to look like its an ipad app, essentially, and im going to see exactly how far i can take the mimicking, maybe i can even add liquid glass to the web 💀 So yeah no more app building, now its website! It’s gonna be so much easier as well because I aleady have the backend done and tested, so this should be all design which will be really fun.
The website is alive! I got a screenshot of an iOS26 sidebar, and i am copying it, as you can see. looks nice i think
Hehehehe I’ve got a working version of liquid glass It uses gsap, which is nice the second image is an earlier version 😭
Its nice and squishy now! It uses gsap for this as well gsap is a great framework ngl
And now it scales up and down and stuff!!! I still can’t believe this is just html and css and js 😭 Theres so many parameters to tweak to make it feel right, its so finicky And depending on the size of the glass, you have to change the numbers, its kinda confusing honestly
So I’ve made the first version of the website, it’s really insanely buggy and broken, but the ui is there. so have the html good but no i need to really tweak the css to make it look nice, apple-style. i also need to figure out how to make loading states look nice, since unlike the the swiftui app, i can’t cache anything to not show loading state. in the plus side i dont have to deal with offline state, though. the sidebar and the toolbar are finished, and look really nice. the sidebar has an effect (from ipados) that basically reflects the content in a subtle blurred way, to make it feel like glass while not actually rendering anything expensive. The toolbar is just glass buttons + a black fade effect + progressives blur, also tuned to look like ipados. the icon in the sidebar is pretty ugly honestly so i need to replace that with the non-bordered icon. The other problem i am dealing with is that we are planning a complete redesign of the entire swiftui app, and obviously that has to propagate to the website, so any work i do now is kinda gonna be half wasted, depending on what the redesign actually looks like.
I’m still working on making the UI look much better, and I’m still figuring out some website stuff like how i should wire up the sidebar tabs as well as having like a nice homepage to advertise everything the app does, which will be a really fun sub-project. Turns out making nice looking lists in react is much harder than it looks, as shown below 😭 one problem is that each symbol has a different aspect ratio so i dont even know how to fit them nicely And unlike swiftui, its raelly raelly hard to stay consistent in your css and to keep using the ui tokens instead of making custom css everywhere. it looks like the website is gonna be harder than the app to make after all 😔 this classes card though, for example, i think its pretty much almost done. i might need a few more borders to make it look glassy and stuff but it looks exactly like the ios version, which is the end goal! And I added the animations to the classes card, again exactly like the iphone app. i also got a vscode extension that shows you all of your unused css classes, i highly recommend getting one and purging your codebase!
So the previous UI was really ugly, to be honest, so i decided I am oing to scrap half of the design and completely unstyle the entire app while making everything as standardised as possible, by trying to only use reused components as much as possible. So I spent all today stripping out components I didn’t need, then take the surviving components and adjusting them to my use case and making then look as nice as I can. alert dialogs drawers buttons lists section cards switches I have also decided to stop using tailwind because its quite simply messy and much more confusing than just moduled css, so ye
I have pretty much finished the components, I’m going to now go and add the other shared components and improve them too. then im gonna go through the css files and clear anything that is unused or overcomplicated, and then i can start remaking the website!
I think I have finished making all of the shared components I put everything inside accordions to organise the test components Overlays get the same translucency and outline every other component gets I think im happy with how the lists look, finally the option selectors are really really hot!!! The first page I have remade is the About view, which shows this badge if you are on localhost lol i also had to move the contributors up to the server instead of hardcoding them so that both website and app can see it And a really nice little animated gradient thingy for the about view!!
I have started using the shared components around the website, and its actually looking pretty nice! most importantly, these components can be changed once and work everywhere and i removed the drawers i was using everywhere, and i also made said drawers wider while i was rehauling the drawers i also kinda broke their animations and i don’t know how to fix it 😭 the whole website looks really basic now, since its obviously using now the shard unstyled components, and i was thinking about the theme and decided maybe it should be unstyled, and only the user’s own events and content etc can have colours.
I started to make the landing page, and i decided, after very much research from other landing sites I’ve seen, that the main item should be an interactive timetable, a version of the app icon. but interactive and glassy. im trying to recreate everything in css but its not looking as smooth and polished as real liquid glass does so ye. im kinda getting close though! I also added a navbar item that just is the link to actually open timetable, and when you hover it shows options to either open the app in testflight or open the web version which just redirects to /login. and its background switches to black when you start scrolling, which will make more sense later. i haven’t really planned the rest of the landing page, and i might remove this entire component if i find a good liquid glass implementation i can use, especially with bouncy animations etc. but yeah. (worst part is i might even just go change the entire app icon in a week so that kinda wastes all this time 😭😭😭)
After much trying to make glass, yet again, i failed. So now im just using blur and these edge effects, and i think it looks nice! theres even a hover eect, as shown in the second screenshot (class details show and the rectangle rotates a bit randomly)
I added a title to the lading site, but as you can see its not just any title. it uses this package called fitty to make the text size up to the full width of the page, and it does indeed look massive. and it also goes under the rectangles of the logo, so its like an apple depth effect you get on iphone lockscreens i found the website really laggy while scrolling somewhere while finishing of the main interactive icon, and i couldnt figure out why after removing everything that could have been gpu intensive (my gpu was spiking to 80% while just scrolling) so after all that my most likely theory is that the lag is just my computer and not the website (or both 😭😭) also when i made that main art, i made the border radii use px units, which made it look quite deformed on smaller screens, since the rectangle’s size is relative to screen width, whereas border radius is constant… so i went and fixed that too
I really wanted the first screen for timetable to look really really interesting and unique and instantly recognisable as Timetable, so i made the text instead of a boring white, it now has 3 really nice effects applied: A grain overlay, or noise, which in this case doesn’t make it look paper but looks nice nonetheless Its not flat white, its white at the top and goes to brown at the bottom, more noticeable when you close up. subtle but also nice The “white” isn’t even white. Its a particular white image i had a lot of difficulty in obtaining. it is the third screenshot, the “white” png. Its an .avif , and it uses some HDR-capable color space format something, which on compatible browsers make the timetable text show considerably brighter than everywhere else on your screen, which makes it really pop! i plan on using this effect in other places as well across the landing page to make it just pop a bit more. (the 4th image shows the white pixel showing as 1.25. anything above 1 is hdr.)
I did a few things in this devlog, got quite carried away frankly. So I migrated the codebase from Next.js to Tanstack. The reason was that i was seeing a lot of speed concerns, especially on the landing page. it was just lagging so much. i tried it on all my devices on all the browsers and it was there half the time. after a lot of commenting things out i just couldnt find a bug, so now i moved to tanstack. hopefully taht will remove at least some problems. in any case, i got bored of next.js and tanstack is a different framework to play with and make use of!! also, i continued the landing page by adding cards for each item. i don’t really like it right now, but i have established that i need to add these cards, if not in a different UI. The titles of each card are just image-masks, of Apple wallpapers! i went through some archive and picked out the ones i like, and applied a brightness 200% filter, and they look really nice now. after i finish the landing page im gonna work on rehauling the rest of the ui to be more intuitive and actually usable
ok so i think i have optimised it as much as i can lol tanstack clearly was a good idea, it just needed some optimisations!
Im making a 3d model of the school. this is so that i can show a whole literal map of the campus in the app, and then you can see where each user is, in 3d! i could even reexport it for the website, potentially its going to be interactive and everything
As well as migrating to Tanstack, I wanted even more speed, just for fun at this point honestly, so I decided to move to SolidJS from React. Its decently faster while looking similar to react, and it has some syntax stuff that i much prefer over react. this is basically just adding some margin for me to make bad code The end product looks identical so theres not much to show.. apart from the migration, I’ve also been designing the new landing page, which will also use the 3d model thing. the big question is figuring out how to make the 3d markers for each classroom register correctly, because i need to show a pin for each user at the right place, from swiftui, and somehow embed it into a realitykit 3d model. but im sure this use case has been done many times before so i can find something online!
Continuing the assorted improvements to the app: Fixed stacked drawers so nested drawer state updates reactively. Reworked the Friends page into shared List, ListSection, ListRow, and Card components. Preserved friend drag-and-drop ordering within the new layout. Improved timetable UX: i fixed the lesson selection in week view correctly aligned the “now” indicator in today view restricted timetable mode navigation to mobile through CSS, cos desktop already has the sidebar improved planner event styling. made the drawer compenent animate in and out, something i lost from the react -> solid migration I also added a reusable event-tag selection row with symbols and selected-state feedback.
Ships:
So I made a timetable app for my school, super-specialised and for ios, watchos, and macos. its got live activities and notifications to show you current and next subjects throughout the school day, widgets for your weekly schedule, ability to see your friends’ timetables, and server sync. and apple intelligence support!
This ship, I completely remade the app to work around accounts, and all the features that come with that I added a server, because it used to just store your timetable in your local storage and that was quite boring honestly creating a server for this has allowed me to add accounts, notifications, live activities, friends, shared events, multiple devices in the same account, and has made the website much easier to make (still in development, thats why the top devlogs are talking about the website not the app) The app now has all of this: Grades, track the score of all of your subjects notifications for each subject you have and your events etc live activity throughout each school day telling you your subjects etc sharing your location, subjects, and more with friends widgets that show your your subjects, upcoming events, and your friends’ schedules lots of administration options to manage pretty much everything, including who else is admin lol full support for siri, shortcuts, spotlight, and apple intelligence a full apple watch app btw i know 350 hours on a timetable app sounds insane (😭) but its because this project has 4 different aspects: swiftui client for iPhone, iPad, and mac swiftui client for apple watch a website client (still in development) the server that handles everything, and the database i promise it does more than just tell you your subjects 🙏...
|
1792878455.271768
|
1793742455.271768
|
|
14117
|
Making my first portfolio! by @wiiuavi | Stardance
|
wiiuavi
|
2
|
11.0
|
102
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T21:32:24Z", "hours": 6.0, "multiplier": 10.23, "payout": 76, "blessing": "neutral", "text": "Made an informal portfolio site. This ship was more about fixing the things that I got wrong last time after looking at feedback (mobile support, sounds, favicon, more stuff, more projects, links dont work, boxes overlap each other, ect) Its minecraft themed :) best experience on pc but now mobile can enjoy too! Oh and maybe domain too!", "repo": "https://github.com/wiiuavi/web-portfolio", "demo": "https://wiiuavi.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-21T21:31:58Z", "hours": 5.0, "multiplier": 5.71, "payout": 26, "blessing": "neutral", "text": "I made my own web portfolio! I can add the rest of the projects I do here (for style points ofc), themed around my favourite game! went semi-heavy on animations, 2nd time using html/css/js to quite the learning curve! (maybe a rocket-themed section for stardance next?)", "repo": "https://github.com/wiiuavi/web-portfolio", "demo": "https://wiiuavi.vercel.app/"}]...
|
[{"post_id": 29774, "ts": "202 [{"post_id": 29774, "ts": "2026-07-16T21:29:27Z", "hours": 1.1611, "text": "Added sounds, both for mobile and pc (spent a lot of time trynna make it work out the box, but sound needs user interaction to work, so js dropped it. added slideshow img too, and favicon (small stuff here and there)"}, {"post_id": 29045, "ts": "2026-07-15T18:15:16Z", "hours": 2.6442, "text": "fixed a lot of bugs that arised from previous commit and rest of the reviews. made the hamburger button actually work, game mobile some hovers which actually worked, fixed the more coming soon overlay, basically everything in the last devlog but way better."}, {"post_id": 28448, "ts": "2026-07-14T18:14:10Z", "hours": 2.3592, "text": "I spent way longer than i shouldve fixing some bugs, made a hamburger menu for mobile, also gave mobile some of the pc animations. I spent quite a while trying to fix the scrollshow at the bottom, even with ai, it wouldn’t work, idk why. also made it way easier to add projects easily and made everything neater, following vote reviews"}, {"post_id": 13353, "ts": "2026-06-21T21:27:42Z", "hours": 0.7961, "text": "Added a scrollshow + farewell note on it, (gif is very slow), site is way better than gif, as you scroll, next image is displayed. (and fixed bugs + footer position)"}, {"post_id": 11941, "ts": "2026-06-19T14:04:32Z", "hours": 1.2772, "text": "Got a About me section and contact me section going, fixed some animations, fixed majority of navbar shortcuts, added some new animations…"}, {"post_id": 10832, "ts": "2026-06-17T19:30:54Z", "hours": 0.5925, "text": "Got the site up on Vercel, added the “projects” area where I can add the other stuff imma make during stardance (and after), got some sick pop-out cards for projects with diff colour shadows. (mainly trying to makesure everything is flexible, so i can easily add any future projects)"}, {"post_id": 10560, "ts": "2026-06-17T10:57:03Z", "hours": 1.9544, "text": "Achieved creating a template-page for my web-portfolio, tried out a few different themes and settled with a mc-themed one. Got the homepage going, with a working navbar that fades in when scrolling away from homepage hero-image, and working (very basic) footer. Todo: add more content, fix navbar when zooming in too much add different sections (projects, cv, other) add contacts (github, dc)"}]...
|
Title: Making my first portfolio! by @wiiuavi | St Title: Making my first portfolio! by @wiiuavi | Stardance
Devlogs:
Achieved creating a template-page for my web-portfolio, tried out a few different themes and settled with a mc-themed one. Got the homepage going, with a working navbar that fades in when scrolling away from homepage hero-image, and working (very basic) footer. Todo: add more content, fix navbar when zooming in too much add different sections (projects, cv, other) add contacts (github, dc)
Got the site up on Vercel, added the “projects” area where I can add the other stuff imma make during stardance (and after), got some sick pop-out cards for projects with diff colour shadows. (mainly trying to makesure everything is flexible, so i can easily add any future projects)
Got a About me section and contact me section going, fixed some animations, fixed majority of navbar shortcuts, added some new animations…
Added a scrollshow + farewell note on it, (gif is very slow), site is way better than gif, as you scroll, next image is displayed. (and fixed bugs + footer position)
I spent way longer than i shouldve fixing some bugs, made a hamburger menu for mobile, also gave mobile some of the pc animations. I spent quite a while trying to fix the scrollshow at the bottom, even with ai, it wouldn’t work, idk why. also made it way easier to add projects easily and made everything neater, following vote reviews
fixed a lot of bugs that arised from previous commit and rest of the reviews. made the hamburger button actually work, game mobile some hovers which actually worked, fixed the more coming soon overlay, basically everything in the last devlog but way better.
Added sounds, both for mobile and pc (spent a lot of time trynna make it work out the box, but sound needs user interaction to work, so js dropped it. added slideshow img too, and favicon (small stuff here and there)
Ships:
I made my own web portfolio! I can add the rest of the projects I do here (for style points ofc), themed around my favourite game! went semi-heavy on animations, 2nd time using html/css/js to quite the learning curve! (maybe a rocket-themed section for stardance next?)
Made an informal portfolio site. This ship was more about fixing the things that I got wrong last time after looking at feedback (mobile support, sounds, favicon, more stuff, more projects, links dont work, boxes overlap each other, ect) Its minecraft themed :) best experience on pc but now mobile can enjoy too! Oh and maybe domain too!...
|
1792875267.8995152
|
1793739267.8995152
|
|
14184
|
Website by @ghx312 | Stardance
|
ghx312
|
2
|
16.0
|
55
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T05:58:52Z", "hours": 14.0, "multiplier": 3.57, "payout": 49, "blessing": "neutral", "text": "This is my personal website where I post things that I feel are interesting. This time I have added the following notes onto my website. They are mostly about cryptography (Practice and study of hiding information so that only authorized people can read or use it) I try my best to make everything understandable but sometimes it still remainds abit abstract. Introduction to Qubits CHSH Game (Introduction, Explaination, Derivation of Optimal Strategy, Clear Explaination of solution + DEMO Code) LLL Reduction Algorithm (Introduction, Derivation, and Application + DEMO Code) CryptoHack Modular Arithmetic Course Guide CryptoHack Guide for Modular Arithmetic and Public-Key Cryptography Introduction to ZKPs Proof of knowledge (Completeness, Soundness, Zero-Knowledge) Schnorr’s Protocol + Sigma Protocols Special Soundness + Rewinding Honest Verifier Zero Knowledge (HVZK) + Special Honest Verifier Zero Knowledge (SHVZK) Non-Interactive Zero Knowledge (NIZK) + Forgery, Random Oracle (RO) and Programmable Random Oracles (PRO) Girault’s Identification Protocols OR Proofs Perdersen Commitments Okamoto’s Identification Protocol Proof of Equal Commitments (PoEC), PoEC w Different Binding Generators, Proof of Squared Commitments Blum’s Protocol for Hamiltonian Cycles Universal Composability Fischlin Transform I will be finishing up ZKPs soon adding SNARKs, ZK-SNARKs (Groth16) Thanks for rating 🌞", "repo": "https://github.com/ghx312/ghx312.github.io", "demo": "https://ghx312.github.io/"}, {"ship_num": 2, "ts": "2026-07-03T14:28:20Z", "hours": 2.0, "multiplier": 3.65, "payout": 6, "blessing": "neutral", "text": "This is my personal website where I put things that I find interesting and some knowledge that I would like to share with everyone.", "repo": "https://github.com/ghx312/ghx312.github.io", "demo": "https://ghx312.github.io/"}]...
|
[{"post_id": 61984, "ts": "202 [{"post_id": 61984, "ts": "2026-09-05T05:48:56Z", "hours": 4.0114, "text": "Added notes for Zero-Knowledge Proofs Includes: Introduction to ZKPs Proof of knowledge (Completeness, Soundness, Zero-Knowledge) Schnorr’s Protocol + Sigma Protocols Special Soundness + Rewinding Honest Verifier Zero Knowledge (HVZK) + Special Honest Verifier Zero Knowledge (SHVZK) Non-Interactive Zero Knowledge (NIZK) + Forgery, Random Oracle (RO) and Programmable Random Oracles (PRO) Girault’s Identification Protocols OR Proofs Perdersen Commitments Okamoto’s Identification Protocol Proof of Equal Commitments (PoEC), PoEC w Different Binding Generators, Proof of Squared Commitments Blum’s Protocol for Hamiltonian Cycles Universal Composability Fischlin Transform To be added: SNARKs, ZK-SNARKs (Groth16)"}, {"post_id": 41754, "ts": "2026-08-06T04:39:43Z", "hours": 5.0628, "text": "CryptoHack Guide for Modular Arithmetic and Public-Key Cryptography"}, {"post_id": 32231, "ts": "2026-07-21T08:29:03Z", "hours": 4.6275, "text": "DEVLOG#1 Added a few segments: Introduction to Qubits CHSH Game (Introduction, Explaination, Derivation of Optimal Strategy, Clear Explaination of solution + DEMO Code) LLL Reduction Algorithm (Introduction, Derivation, and Application + DEMO Code) CryptoHack Modular Arithmetic Course Guide"}, {"post_id": 21499, "ts": "2026-07-03T14:14:56Z", "hours": 1.7014, "text": "AAβ-Cryptosystem Notes I recently stumbled upon a cryptographic system using Diophantine Equations. I have never heard of such a system before and it intrigued me, so I decided to learn what it was. Today I just added the notes and information that I have learnt from this cryptosystem onto my personal website."}]...
|
Title: Website by @ghx312 | Stardance
Devlogs:
AA Title: Website by @ghx312 | Stardance
Devlogs:
AAβ-Cryptosystem Notes I recently stumbled upon a cryptographic system using Diophantine Equations. I have never heard of such a system before and it intrigued me, so I decided to learn what it was. Today I just added the notes and information that I have learnt from this cryptosystem onto my personal website.
DEVLOG#1 Added a few segments: Introduction to Qubits CHSH Game (Introduction, Explaination, Derivation of Optimal Strategy, Clear Explaination of solution + DEMO Code) LLL Reduction Algorithm (Introduction, Derivation, and Application + DEMO Code) CryptoHack Modular Arithmetic Course Guide
CryptoHack Guide for Modular Arithmetic and Public-Key Cryptography
Added notes for Zero-Knowledge Proofs Includes: Introduction to ZKPs Proof of knowledge (Completeness, Soundness, Zero-Knowledge) Schnorr’s Protocol + Sigma Protocols Special Soundness + Rewinding Honest Verifier Zero Knowledge (HVZK) + Special Honest Verifier Zero Knowledge (SHVZK) Non-Interactive Zero Knowledge (NIZK) + Forgery, Random Oracle (RO) and Programmable Random Oracles (PRO) Girault’s Identification Protocols OR Proofs Perdersen Commitments Okamoto’s Identification Protocol Proof of Equal Commitments (PoEC), PoEC w Different Binding Generators, Proof of Squared Commitments Blum’s Protocol for Hamiltonian Cycles Universal Composability Fischlin Transform To be added: SNARKs, ZK-SNARKs (Groth16)
Ships:
This is my personal website where I put things that I find interesting and some knowledge that I would like to share with everyone.
This is my personal website where I post things that I feel are interesting. This time I have added the following notes onto my website. They are mostly about cryptography (Practice and study of hiding information so that only authorized people can read or use it) I try my best to make everything understandable but sometimes it still remainds abit abstract. Introduction to Qubits CHSH Game (Introduction, Explaination, Derivation of Optimal Strategy, Clear Explaination of solution + DEMO Code) LLL Reduction Algorithm (Introduction, Derivation, and Application + DEMO Code) CryptoHack Modular Arithmetic Course Guide CryptoHack Guide for Modular Arithmetic and Public-Key Cryptography Introduction to ZKPs Proof of knowledge (Completeness, Soundness, Zero-Knowledge) Schnorr’s Protocol + Sigma Protocols Special Soundness + Rewinding Honest Verifier Zero Knowledge (HVZK) + Special Honest Verifier Zero Knowledge (SHVZK) Non-Interactive Zero Knowledge (NIZK) + Forgery, Random Oracle (RO) and Programmable Random Oracles (PRO) Girault’s Identification Protocols OR Proofs Perdersen Commitments Okamoto’s Identification Protocol Proof of Equal Commitments (PoEC), PoEC w Different Binding Generators, Proof of Squared Commitments Blum’s Protocol for Hamiltonian Cycles Universal Composability Fischlin Transform I will be finishing up ZKPs soon adding SNARKs, ZK-SNARKs (Groth16) Thanks for rating 🌞...
|
1792821374.0234258
|
1792907774.0234258
|
|
14278
|
KlassicOS by @Wirenux | Stardance
|
Wirenux
|
2
|
11.0
|
51
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T15:58:21Z", "hours": 3.0, "multiplier": 18.98, "payout": 51, "blessing": "neutral", "text": "KlassicOS is a web-based OS that recreates the KDE 1.0 desktop experience directly in the browser. Using a VM to experience old OS is heavy, and most “Web OS” projects rely on “bloated” modern frameworks like React. I wanted to bring back the look of early Linux without all the VM things. I built the entire system from scratch using pure HTML, CSS, and Vanilla JavaScript, bundled with Vite (to publish it on Vercel & for dev) . I coded a custom DOM-based window manager to handle dragging, resizing, and z-index stacking with classic 3D borders. To make it authentic, I added an AMIBIOS boot sequence + a real-time RAM check and SVG Energy Star logo. I also designed a modular app registry to manage and launch the system’s built-in software. This includes functional recreations of KCalc, KWrite, and a custom Netscape Navigator. It even features Konsole, a working bash-like terminal emulator inspired by my bare-metal OS project, NoxOS. Everything runs entirely client-side, keeping the architecture as snappy and lightweight like the 90s systems.", "repo": "https://github.com/wirenux/KlassicOS", "demo": "https://klassic-os.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-16T05:57:33Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve make web-based Operating System (OS) that recreates the classic look and feel of KDE 1.0. KlassicOS is build with HTML, CSS, and vanilla JavaScript. The difficult part of this project was finding idea off apps I can include and the Window Management. In this os there is 4 main application, KWrite to write some text, Konsole the terminal, Netscape Navigator the browser and System Info who just print the project info :-)", "repo": "https://github.com/wirenux/KlassicOS", "demo": "https://klassic-os.vercel.app/"}]...
|
[{"post_id": 16980, "ts": "202 [{"post_id": 16980, "ts": "2026-06-27T15:48:29Z", "hours": 0.3497, "text": "Updated the README to ship ! Link: https://github.com/wirenux/KlassicOS"}, {"post_id": 16965, "ts": "2026-06-27T15:23:33Z", "hours": 0.7669, "text": "Just add a fake BIOS loading screen"}, {"post_id": 16780, "ts": "2026-06-27T07:47:22Z", "hours": 0.4325, "text": "I now have a right-click menu with the ability to change the background theme"}, {"post_id": 16769, "ts": "2026-06-27T07:19:32Z", "hours": 1.2081, "text": "Add a the calculator app + custom width & height for application (+ some little invisible fix)"}, {"post_id": 7496, "ts": "2026-06-12T14:37:41Z", "hours": 0.3783, "text": "Add full system info app"}, {"post_id": 7430, "ts": "2026-06-12T11:38:41Z", "hours": 0.7919, "text": "Ready to be Ship ! https://github.com/wirenux/KlassicOS"}, {"post_id": 7391, "ts": "2026-06-12T10:03:27Z", "hours": 0.6486, "text": "Konsole v0.X.X-UNSTABLE now work :"}, {"post_id": 7371, "ts": "2026-06-12T09:03:28Z", "hours": 0.3386, "text": "There now is Desktop Shorcut"}, {"post_id": 7366, "ts": "2026-06-12T08:39:26Z", "hours": 0.3542, "text": "Now have resizable window"}, {"post_id": 7355, "ts": "2026-06-12T08:15:35Z", "hours": 0.6769, "text": "Just move the task bar to the top like the real KDE 1.0. Now the Netscape browser work (can browse button actually do things)"}, {"post_id": 6869, "ts": "2026-06-11T14:58:01Z", "hours": 1.2189, "text": "Just add Netscape Navigator. I’ve recreated all of the ui element in pure js + css combo ! Now i just need to add an iframe to display actual webpages."}, {"post_id": 6772, "ts": "2026-06-11T10:49:42Z", "hours": 0.3106, "text": "I just add an invisible change, now the apps are in differents files. So the whole “OS” logic is in 216 lines of JS 😂"}, {"post_id": 6766, "ts": "2026-06-11T10:27:49Z", "hours": 0.5286, "text": "Now have taskbar and focused windows"}, {"post_id": 6383, "ts": "2026-06-10T18:58:17Z", "hours": 0.265, "text": "Added: Multiple windows (text editor, system info) + “startup-menu”"}, {"post_id": 5852, "ts": "2026-06-09T20:01:18Z", "hours": 0.4806, "text": "Dragable window are now up !"}, {"post_id": 5707, "ts": "2026-06-09T16:32:16Z", "hours": 0.9108, "text": "I’m now able to spawn windows with the original KDE 1.0 style"}, {"post_id": 5675, "ts": "2026-06-09T15:35:10Z", "hours": 0.7547, "text": "Now have, background gradient + taskbar"}]...
|
Title: KlassicOS by @Wirenux | Stardance
Devlogs: Title: KlassicOS by @Wirenux | Stardance
Devlogs:
Now have, background gradient + taskbar
I’m now able to spawn windows with the original KDE 1.0 style
Dragable window are now up !
Added: Multiple windows (text editor, system info) + “startup-menu”
Now have taskbar and focused windows
I just add an invisible change, now the apps are in differents files. So the whole “OS” logic is in 216 lines of JS 😂
Just add Netscape Navigator. I’ve recreated all of the ui element in pure js + css combo ! Now i just need to add an iframe to display actual webpages.
Just move the task bar to the top like the real KDE 1.0. Now the Netscape browser work (can browse button actually do things)
Now have resizable window
There now is Desktop Shorcut
Konsole v0.X.X-UNSTABLE now work :
Ready to be Ship ! https://github.com/wirenux/KlassicOS
Add full system info app
Add a the calculator app + custom width & height for application (+ some little invisible fix)
I now have a right-click menu with the ability to change the background theme
Just add a fake BIOS loading screen
Updated the README to ship ! Link: https://github.com/wirenux/KlassicOS
Ships:
I’ve make web-based Operating System (OS) that recreates the classic look and feel of KDE 1.0. KlassicOS is build with HTML, CSS, and vanilla JavaScript. The difficult part of this project was finding idea off apps I can include and the Window Management. In this os there is 4 main application, KWrite to write some text, Konsole the terminal, Netscape Navigator the browser and System Info who just print the project info :-)
KlassicOS is a web-based OS that recreates the KDE 1.0 desktop experience directly in the browser. Using a VM to experience old OS is heavy, and most “Web OS” projects rely on “bloated” modern frameworks like React. I wanted to bring back the look of early Linux without all the VM things. I built the entire system from scratch using pure HTML, CSS, and Vanilla JavaScript, bundled with Vite (to publish it on Vercel & for dev) . I coded a custom DOM-based window manager to handle dragging, resizing, and z-index stacking with classic 3D borders. To make it authentic, I added an AMIBIOS boot sequence + a real-time RAM check and SVG Energy Star logo. I also designed a modular app registry to manage and launch the system’s built-in software. This includes functional recreations of KCalc, KWrite, and a custom Netscape Navigator. It even features Konsole, a working bash-like terminal emulator inspired by my bare-metal OS project, NoxOS. Everything runs entirely client-side, keeping the architecture as snappy and lightweight like the 90s systems....
|
1792824533.1334438
|
1792910933.1334438
|
|
14330
|
J.A.R.V.I.S. (but for NASA) by @prajithvishnur | S J.A.R.V.I.S. (but for NASA) by @prajithvishnur | Stardance...
|
prajithvishnur
|
2
|
9.0
|
114
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-09T18:30:46Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built an AI jarvis (its rate limited because i cant pay right now sorry) but I think its really cool! its hosted on vercel!", "repo": "https://github.com/prajith-vishnu/stardance-jarvis", "demo": "https://stardancejarvis.vercel.app"}, {"ship_num": 2, "ts": "2026-06-17T16:46:47Z", "hours": 7.0, "multiplier": 15.92, "payout": 114, "blessing": "neutral", "text": "I built an AI Jarvis that is purely for NASA-based queries. It gives real-time updates using multiple NASA APIs. My biggest problem was figuring out APIs and using Google Gemini as the base for this project. My biggest limitation is that I can’t pay for the better version, so I run into my Gemini limits pretty fast. I hope you enjoy!", "repo": "https://github.com/prajith-vishnu/stardance-jarvis", "demo": "https://stardancejarvis.vercel.app"}]...
|
[{"post_id": 25433, "ts": "202 [{"post_id": 25433, "ts": "2026-07-09T18:16:51Z", "hours": 1.9306, "text": "I got the project hosted onto vercel"}, {"post_id": 10730, "ts": "2026-06-17T16:44:34Z", "hours": 0.3333, "text": "Added a couple of late-minute changes to make it work better overall. Might add a backup api key later. Shipping for now!"}, {"post_id": 6923, "ts": "2026-06-11T16:27:56Z", "hours": 1.3964, "text": "Made final tweaks. The app looks kinda awesome. Only downside is that it has Gemini free api limits…. but I think it’s almost ready to ship!"}, {"post_id": 6429, "ts": "2026-06-10T20:15:13Z", "hours": 3.7769, "text": "Finally got it published on a website. Looking good. Worked on improving the ui. I think it’s going pretty well."}, {"post_id": 5928, "ts": "2026-06-09T22:04:47Z", "hours": 0.96, "text": "Working on getting the project put on a website. Everything seems to be going well so far. i worked on trying to make everything look cool and professional. I hope this goes well!"}, {"post_id": 5744, "ts": "2026-06-09T17:24:16Z", "hours": 0.2981, "text": "For the second major phase of my Stardance project, I transformed my local python program from a basic command-line interface into an immersive NASA Mission Control simulator. I learned a lot about python and API keys. I overhauled the user experience by building a retro-futuristic ASCII art boot banner, integrating ANSI color matrices for a custom green and cyan HUD terminal, and restructuring the system prompt to promote the operator to “Flight Director.” Technically, I expanded the architecture to dual-query multiple NASA assets simultaneously, including live orbital asteroid defense feeds and deep-space candidate star monitoring, while maintaining a persistent chat state pipeline so the assistant retains context across multiple telemetry commands. I hope to improve this so much and turn it into a website. Right now its talking using my mac."}, {"post_id": 5728, "ts": "2026-06-09T17:02:34Z", "hours": 0.4303, "text": "For my first devlog, I successfully built and launched the initial prototype of my JARVIS AI assistant using Python on macOS. By integrating NASA’s open APIs with the Google-GenAI SDK running a gemini-2.5-flash model, I created a continuous terminal chat loop that behaves exactly like Tony Stark’s sophisticated assistant. Despite hitting a package namespace conflict and a temporary 503 server capacity spike, the script’s exception handling kept the program alive, ultimately delivering a live, in-character briefing on NASA’s current Mars and Artemis missions."}]...
|
Title: J.A.R.V.I.S. (but for NASA) by @prajithvish Title: J.A.R.V.I.S. (but for NASA) by @prajithvishnur | Stardance
Devlogs:
For my first devlog, I successfully built and launched the initial prototype of my JARVIS AI assistant using Python on macOS. By integrating NASA’s open APIs with the Google-GenAI SDK running a gemini-2.5-flash model, I created a continuous terminal chat loop that behaves exactly like Tony Stark’s sophisticated assistant. Despite hitting a package namespace conflict and a temporary 503 server capacity spike, the script’s exception handling kept the program alive, ultimately delivering a live, in-character briefing on NASA’s current Mars and Artemis missions.
For the second major phase of my Stardance project, I transformed my local python program from a basic command-line interface into an immersive NASA Mission Control simulator. I learned a lot about python and API keys. I overhauled the user experience by building a retro-futuristic ASCII art boot banner, integrating ANSI color matrices for a custom green and cyan HUD terminal, and restructuring the system prompt to promote the operator to “Flight Director.” Technically, I expanded the architecture to dual-query multiple NASA assets simultaneously, including live orbital asteroid defense feeds and deep-space candidate star monitoring, while maintaining a persistent chat state pipeline so the assistant retains context across multiple telemetry commands. I hope to improve this so much and turn it into a website. Right now its talking using my mac.
Working on getting the project put on a website. Everything seems to be going well so far. i worked on trying to make everything look cool and professional. I hope this goes well!
Finally got it published on a website. Looking good. Worked on improving the ui. I think it’s going pretty well.
Made final tweaks. The app looks kinda awesome. Only downside is that it has Gemini free api limits…. but I think it’s almost ready to ship!
Added a couple of late-minute changes to make it work better overall. Might add a backup api key later. Shipping for now!
I got the project hosted onto vercel
Ships:
I built an AI Jarvis that is purely for NASA-based queries. It gives real-time updates using multiple NASA APIs. My biggest problem was figuring out APIs and using Google Gemini as the base for this project. My biggest limitation is that I can’t pay for the better version, so I run into my Gemini limits pretty fast. I hope you enjoy!
I built an AI jarvis (its rate limited because i cant pay right now sorry) but I think its really cool! its hosted on vercel!...
|
1792821305.16634
|
1792907705.16634
|
|
14349
|
RetrOS by @SirYanni | Stardance
|
SirYanni
|
2
|
6.0
|
10
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T18:47:51Z", "hours": 1.0, "multiplier": 7.55, "payout": 10, "blessing": "neutral", "text": "For WebOS 2, I made four for additions to RetrOS, wich are a new font, a calculator (!!!), an export feature for MicroMemo and a Taskbar. For further info on the apps, please see the last devlog. I’m really proud of how this turned out, and will definitely continue building on this. Hope y’all enjoy it!", "repo": "https://github.com/siryanni/RetrOS", "demo": "https://siryanni.github.io/RetrOS/"}, {"ship_num": 2, "ts": "2026-06-16T13:40:13Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "RetrOS shipping I made a Retro-Themed WebOS (hence the name), using the given Guide. I myself added my own apps, such as HobbyTrack, MicroMemo, PixelPainter and RetroPet. I am really proud of integrating HobbyTrack, as I find it very useful, and hope yall will too! The Project was a very fun journey, especially considering it was my (kind of) first real HTML Project. I hope enjoy using RetrOS just as much as I do.", "repo": "https://github.com/siryanni/RetrOS", "demo": "https://siryanni.github.io/RetrOS/"}]...
|
[{"post_id": 20178, "ts": "202 [{"post_id": 20178, "ts": "2026-07-01T18:44:02Z", "hours": 1.3281, "text": "WebOS 2 RetrOS additions Today I added 4 new features: New Font! New App, the “Calc-95” A Taskbar Export feature for MicroMemo 1. The new font The new System-Font is now “VT323” 2.Calc-95 The new app, “Calc-95” is a basic calculator using Js-logic 3.The Taskbar The new Taskbar allows to minimize apps and see wich are currently open, as before you could only overlap apps wich just wasnt great tbh. 4.Export for MicroMemo You can now export your notes written in MicroMemo using the “export” button, wich will then download a .txt to save any important notes! Hope yall enjoy the features I made for WebOS 2, cya!"}, {"post_id": 9933, "ts": "2026-06-16T13:34:18Z", "hours": 0.9514, "text": "Finalized the new Apps! I just pushed the final updates for RetrOS. PixelPaint and RetroPet are officially implemented, working and the design look clean with the new icons! Also cleaned up some code before pushing everything to GitHub. The project is basically done now and ready for review. Thanks for checking out RetrOS!"}, {"post_id": 7090, "ts": "2026-06-11T21:18:54Z", "hours": 1.8456, "text": "Got A LOT done today I managed to finalize HobbyTrack and overhauled my Code to make it mor comfortable for me to keep building on it. Im going to add 1-2 more Apps the coming days, tho so far the GitHub Pages Site is now up and running, so feel free to go test RetrOS! ( Also learned how to use Markdown as you can see hehe )"}, {"post_id": 6442, "ts": "2026-06-10T20:34:45Z", "hours": 1.4033, "text": "Did a “little” rebranding, just felt more appropriate. Hope yall like the new RetrOS as much as I do! (vers0.1.5)"}, {"post_id": 5867, "ts": "2026-06-09T20:20:23Z", "hours": 1.1867, "text": "Got alot done, following the tutorial helps!"}]...
|
Title: RetrOS by @SirYanni | Stardance
Devlogs:
G Title: RetrOS by @SirYanni | Stardance
Devlogs:
Got alot done, following the tutorial helps!
Did a “little” rebranding, just felt more appropriate. Hope yall like the new RetrOS as much as I do! (vers0.1.5)
Got A LOT done today I managed to finalize HobbyTrack and overhauled my Code to make it mor comfortable for me to keep building on it. Im going to add 1-2 more Apps the coming days, tho so far the GitHub Pages Site is now up and running, so feel free to go test RetrOS! ( Also learned how to use Markdown as you can see hehe )
Finalized the new Apps! I just pushed the final updates for RetrOS. PixelPaint and RetroPet are officially implemented, working and the design look clean with the new icons! Also cleaned up some code before pushing everything to GitHub. The project is basically done now and ready for review. Thanks for checking out RetrOS!
WebOS 2 RetrOS additions Today I added 4 new features: New Font! New App, the “Calc-95” A Taskbar Export feature for MicroMemo 1. The new font The new System-Font is now “VT323” 2.Calc-95 The new app, “Calc-95” is a basic calculator using Js-logic 3.The Taskbar The new Taskbar allows to minimize apps and see wich are currently open, as before you could only overlap apps wich just wasnt great tbh. 4.Export for MicroMemo You can now export your notes written in MicroMemo using the “export” button, wich will then download a .txt to save any important notes! Hope yall enjoy the features I made for WebOS 2, cya!
Ships:
RetrOS shipping I made a Retro-Themed WebOS (hence the name), using the given Guide. I myself added my own apps, such as HobbyTrack, MicroMemo, PixelPainter and RetroPet. I am really proud of integrating HobbyTrack, as I find it very useful, and hope yall will too! The Project was a very fun journey, especially considering it was my (kind of) first real HTML Project. I hope enjoy using RetrOS just as much as I do.
For WebOS 2, I made four for additions to RetrOS, wich are a new font, a calculator (!!!), an export feature for MicroMemo and a Taskbar. For further info on the apps, please see the last devlog. I’m really proud of how this turned out, and will definitely continue building on this. Hope y’all enjoy it!...
|
1792842884.0835192
|
1792929284.0835192
|
|
14362
|
BeachBunnyOS by @Sabrina | Stardance
|
Sabrina
|
2
|
12.58
|
86
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-30T01:10:33Z", "hours": 6.0, "multiplier": 11.35, "payout": 86, "blessing": "neutral", "text": "I added 3 new apps to my website!! 1st-ly a guestbook, as most good indie sites should have. I made the api myself and it is running on nest. Please dont spam it,,, but feel free to leave positive messages or constructive criticism there! I WILL read it 2nd-ly a visitor counter + flag collector using flagcounter.com Everytime someone visits my site and loads the image it will count the user and we can all see how far around the globe my website has reached! (Can we get every single country?? 👀) 3rd-ly a countdown until android becomes a lockdown platform in 2027, provided by keepandroidopen.org Also along the way I applied and was accepted into many webrings. At this moment im in the following: transing the internet hotline webring html energy webring cd ring vocaloid webring the no ai webring wii ring I’m probably gonna reorganize the ordering of the webring since it is currently in the order i joined, and not in the order of which i like the most if you know of a swedish webring (that isn’t the eurowebring) or a swedish speaking/learning webring let me know i want to join!! Or we can start one, either is fine!!", "repo": "https://github.com/BoomBoomMushroom/BeachBunnyWebOS", "demo": "https://sabrinaa.page"}, {"ship_num": 2, "ts": "2026-06-11T20:07:14Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "BeachBunnyOS!! This was just gonna be a website that looks like an OS but I’ve turned it into my personal website and am gonna use it as I websurf (you should try it, it’s really fun. Surf via the webrings on my website as a good starting point) My most favorite part is the net neighbors window. I like how I can scroll in it and my neighbors’ badges make it truely feel like a website I would find when surfing The most challenging part was the little buttons at the top because they would not cooperate for a while. they for some reason each wanted a certain size in their div, and it would cause the clock to go to 2 line and expand the top bar making it ugly, but I figured if i just constrain the text overflow making it only 1 line then it works out fine. This is truely the website of the #1 beach bunny fan. okay byeeee", "repo": "https://github.com/BoomBoomMushroom/BeachBunnyWebOS", "demo": "https://sabrinaa.page"}]...
|
[{"post_id": 44890, "ts": "202 [{"post_id": 44890, "ts": "2026-08-10T22:50:36Z", "hours": 1.5836, "text": "Hate messages/speech Over the past few days ive been waking up to some transphobic messages left in my guestbook and so Ive have decided to go on and add a filter to my guestbook. If I detect a black listed word (currently the 2 trans slurs and the f slur) it will auto sort it into the filtered webhook and makes sure it never saved that message to my server. Also I have created a honeypot webhook as well so it will put any honeypot messages into there and the reason for it. Hopefully it’ll help me understand what some spammed messages would look like Still, if I receive any hateful, bigoted, transphobic, queerphobic, and other fucked up messages I WILL be deleting them!! (so please dont send them) How my guestbook works Also since I saw someone ask in my voting response about how the guestbook works and if its a static website I have answers for you! I made a server hosted on nest (so free for us hackclubbers) that receives POST requests when you fill out the form and does all the checks and stuff, then saves it to a json file. When you load my website it will automatically ask the same server for the contents of the json file and display all the messages! (Now with 100% less bigotry) Ok love you guys stay safe out there"}, {"post_id": 37364, "ts": "2026-07-30T01:02:18Z", "hours": 0.5917, "text": "I was added to the vocaloid webring, no ai webring, and the wii ring!! I also added my 3rd new app (for webos 2) where it shows the countdown until android become a lock-down platform I also added a visitor count to see who all joins, and to collect flags for each new country that visits, currently im at 22 w/ the rankings being the US, France, Germany, Argentina, China, and Switzerland, then the other 16 flags have only appeared once Thats about it for right now, hopefully ill add some more cool information later, byeeee"}, {"post_id": 31599, "ts": "2026-07-20T04:05:22Z", "hours": 3.2508, "text": "I organized my webrings into joined and applied! Currently im in 5 atm, transing the internet, hotline ring, html energy, cdring, and the vocaloid webring I also created a guestbook completely from scratch! Source code at /guestbook I had to add 2 antibot measures #1) a honeypot field. a field that humans cannot see. off screen very far away, but if a webscraper sees it, it will fill it out and then my server will see that and ignore it #2) human only answerable question. I made the question be a part of the website that everyone visiting will find out, and so answering this question will be lightwork for anyone with at least 10 braincells, but a web scraper will (hopefully) have no clue Oh also my guestbook sends a discord message via a webhook everytime someone writes in it, so I can see every new entry w/o needing to look at my website every hour next i kinda to add a live chat. rtc or something? It’ll be like a guestbook only I can respond to people to make feel more connected"}, {"post_id": 31391, "ts": "2026-07-19T18:34:09Z", "hours": 1.705, "text": "I finally made a button! I added a robotx.txt and ai.txt to block web scrapers for LLMs I also applied to all the webrings i had previously, and added new webrings i found! Feel free to comment your website and i’ll check it out, and maybe add you to my net neighbors Next I want to make a guest book (from scratch?) The new webrings i added were: hotline webring DS Ring DroidRing IndieRing Computering Webring HTML Energy Webring Webmaster Webring"}, {"post_id": 7107, "ts": "2026-06-11T21:35:30Z", "hours": 0.8867, "text": "I fixed the webring app from spawning super high up to where you cant drag it. still an issue if the tab is like 100px tall, but like dont do that Also the domain after “free buttons” is really slow but it works for me I have also updated the readme to be better"}, {"post_id": 7033, "ts": "2026-06-11T19:52:36Z", "hours": 2.4344, "text": "I added 2 new apps. An about me and a net neighbors section. I added a bunch of image buttons to my top bar, they show stuff about me, like pc gamer, cat owner, etc. I added a font for the windows. I have 3 net neighbors, which is so cool! I need to later make a button of my own and get a domain so i can join webrings and so I can finish my link section and allow people to link to me and have me as their net neighbor My 2 custom features not in the tutorial is that everytime you open playlist.bb it changes it’s icon. the other one is that if you click a window it becomes the top window instead now, instead of needing to reopen it to be on top."}, {"post_id": 6561, "ts": "2026-06-11T00:47:46Z", "hours": 0.3036, "text": "I added webrings to my site, when i eventually finish it fully ill apply to join them!!"}, {"post_id": 6527, "ts": "2026-06-10T23:41:14Z", "hours": 0.9408, "text": "I added the first app. I created a framework for adding apps and you can drag them around, select them, double click to open them, and they open windows (and possivly do anything since it just calls a function)"}, {"post_id": 5902, "ts": "2026-06-09T21:31:35Z", "hours": 1.4717, "text": "Made a window, a wallpaper, and a top bar that displays the time Next up im going to work on adding apps, and hopefully later ill add a boot screen!"}]...
|
Title: BeachBunnyOS by @Sabrina | Stardance
Devlo Title: BeachBunnyOS by @Sabrina | Stardance
Devlogs:
Made a window, a wallpaper, and a top bar that displays the time Next up im going to work on adding apps, and hopefully later ill add a boot screen!
I added the first app. I created a framework for adding apps and you can drag them around, select them, double click to open them, and they open windows (and possivly do anything since it just calls a function)
I added webrings to my site, when i eventually finish it fully ill apply to join them!!
I added 2 new apps. An about me and a net neighbors section. I added a bunch of image buttons to my top bar, they show stuff about me, like pc gamer, cat owner, etc. I added a font for the windows. I have 3 net neighbors, which is so cool! I need to later make a button of my own and get a domain so i can join webrings and so I can finish my link section and allow people to link to me and have me as their net neighbor My 2 custom features not in the tutorial is that everytime you open playlist.bb it changes it’s icon. the other one is that if you click a window it becomes the top window instead now, instead of needing to reopen it to be on top.
I fixed the webring app from spawning super high up to where you cant drag it. still an issue if the tab is like 100px tall, but like dont do that Also the domain after “free buttons” is really slow but it works for me I have also updated the readme to be better
I finally made a button! I added a robotx.txt and ai.txt to block web scrapers for LLMs I also applied to all the webrings i had previously, and added new webrings i found! Feel free to comment your website and i’ll check it out, and maybe add you to my net neighbors Next I want to make a guest book (from scratch?) The new webrings i added were: hotline webring DS Ring DroidRing IndieRing Computering Webring HTML Energy Webring Webmaster Webring
I organized my webrings into joined and applied! Currently im in 5 atm, transing the internet, hotline ring, html energy, cdring, and the vocaloid webring I also created a guestbook completely from scratch! Source code at /guestbook I had to add 2 antibot measures #1) a honeypot field. a field that humans cannot see. off screen very far away, but if a webscraper sees it, it will fill it out and then my server will see that and ignore it #2) human only answerable question. I made the question be a part of the website that everyone visiting will find out, and so answering this question will be lightwork for anyone with at least 10 braincells, but a web scraper will (hopefully) have no clue Oh also my guestbook sends a discord message via a webhook everytime someone writes in it, so I can see every new entry w/o needing to look at my website every hour next i kinda to add a live chat. rtc or something? It’ll be like a guestbook only I can respond to people to make feel more connected
I was added to the vocaloid webring, no ai webring, and the wii ring!! I also added my 3rd new app (for webos 2) where it shows the countdown until android become a lock-down platform I also added a visitor count to see who all joins, and to collect flags for each new country that visits, currently im at 22 w/ the rankings being the US, France, Germany, Argentina, China, and Switzerland, then the other 16 flags have only appeared once Thats about it for right now, hopefully ill add some more cool information later, byeeee
Hate messages/speech Over the past few days ive been waking up to some transphobic messages left in my guestbook and so Ive have decided to go on and add a filter to my guestbook. If I detect a black listed word (currently the 2 trans slurs and the f slur) it will auto sort it into the filtered webhook and makes sure it never saved that message to my server. Also I have created a honeypot webhook as well so it will put any honeypot messages into there and the reason for it. Hopefully it’ll help me understand what some spammed messages would look like Still, if I receive any hateful, bigoted, transphobic, queerphobic, and other fucked up messages I WILL be deleting them!! (so please dont send them) How my guestbook works Also since I saw someone ask in my voting response about how the guestbook works and if its a static website I have answers for you! I made a server hosted on nest (so free for us hackclubbers) that receives POST requests when you fill out the form and does all the checks and stuff, then saves it to a json file. When you load my website it will automatically ask the same server for the contents of the json file and display all the messages! (Now with 100% less bigotry) Ok love you guys stay safe out there
Ships:
BeachBunnyOS!! This was just gonna be a website that looks like an OS but I’ve turned it into my personal website and am gonna use it as I websurf (you should try it, it’s really fun. Surf via the webrings on my website as a good starting point) My most favorite part is the net neighbors window. I like how I can scroll in it and my neighbors’ badges make it truely feel like a website I would find when surfing The most challenging part was the little buttons at the top because they would not cooperate for a while. they for some reason each wanted a certain size in their div, and it would cause the clock to go to 2 line and expand the top bar making it ugly, but I figured if i just constrain the text overflow making it only 1 line then it works out fine. This is truely the website of the #1 beach bunny fan. okay byeeee
I added 3 new apps to my website!! 1st-ly a guestbook, as most good indie sites should have. I made the api myself and it is running on nest. Please dont spam it,,, but feel free to leave positive messages or constructive criticism there! I WILL read it 2nd-ly a visitor counter + flag collector using flagcounter.com Everytime someone visits my site and loads the image it will count the user and we can all see how far around the globe my website has reached! (Can we get every single country?? 👀) 3rd-ly a countdown until android becomes a lockdown platform in 2027, provided by keepandroidopen.org Also along the way I applied and was accepted into many webrings. At this moment im in the following: transing the internet hotline webring html energy webring cd ring vocaloid webring the no ai webring wii ring I’m probably gonna reorganize the ordering of the webring since it is currently in the order i joined, and not in the order of which i like the most if you know of a swedish webring (that isn’t the eurowebring) or a swedish speaking/learning webring let me know i want to join!! Or we can start one, either is fine!!...
|
1792824609.9873648
|
1792911009.9873648
|
|
14457
|
Sailos by @sailor_lucas | Stardance
|
sailor_lucas
|
2
|
12.0
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T19:43:01Z", "hours": 1.0, "multiplier": 4.1, "payout": 6, "blessing": "neutral", "text": "i made an webos for sailors featuring a weather app and a map you can draw on it was super cool to learn how to use apis", "repo": "https://github.com/lucasvaneijk/SailOS", "demo": "https://sailos.netlify.app/"}, {"ship_num": 2, "ts": "2026-06-19T12:53:45Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an webOS for sailors it includes the weather all over the world and a map you can draw on it was really cool to learn about api and how to use them. i am happy how it turned out", "repo": "https://github.com/lucasvaneijk/SailOS", "demo": "https://sailos.netlify.app/"}]...
|
[{"post_id": 13301, "ts": "202 [{"post_id": 13301, "ts": "2026-06-21T19:40:17Z", "hours": 1.4314, "text": "after the review i updated the ui of the weather app and updated the readme i also translated some accidental dutch that i put in there"}, {"post_id": 11818, "ts": "2026-06-19T07:26:41Z", "hours": 0.4772, "text": "i used ai to add drawing to the map becouse i could not find how to do it online and ai gave really vage ansers so i had ai do it and it works really good also added an favicon in the browser"}, {"post_id": 11493, "ts": "2026-06-18T19:35:28Z", "hours": 0.8417, "text": "added all the basic functionality for the map incuding the expanding the closing and the icon"}, {"post_id": 11190, "ts": "2026-06-18T09:43:10Z", "hours": 4.6214, "text": "Weatherapp: The weatherapp now actually works. it uses openmeteo to get the weatherforecast. it includes the windspeed, the gusts, the direction of the wind and the tempature. it goes up to 7 days. I still need to work on the design but it does function . Mapapp: I added a map to see where youre sailing. It uses openstreetmaps for the map. you can put in the place and it goes to that place. I want to add a way to draw on the map and I need to update the design a LOT!"}, {"post_id": 9328, "ts": "2026-06-15T17:22:30Z", "hours": 5.455, "text": "The first background is done and I added the first outlines of a app. it does not yet have content in the app but it is almost ready to add content to app. it can already expand unexpand and is closable and openable i am still working on making it unexpand correctly."}]...
|
Title: Sailos by @sailor_lucas | Stardance
Devlog Title: Sailos by @sailor_lucas | Stardance
Devlogs:
The first background is done and I added the first outlines of a app. it does not yet have content in the app but it is almost ready to add content to app. it can already expand unexpand and is closable and openable i am still working on making it unexpand correctly.
Weatherapp: The weatherapp now actually works. it uses openmeteo to get the weatherforecast. it includes the windspeed, the gusts, the direction of the wind and the tempature. it goes up to 7 days. I still need to work on the design but it does function . Mapapp: I added a map to see where youre sailing. It uses openstreetmaps for the map. you can put in the place and it goes to that place. I want to add a way to draw on the map and I need to update the design a LOT!
added all the basic functionality for the map incuding the expanding the closing and the icon
i used ai to add drawing to the map becouse i could not find how to do it online and ai gave really vage ansers so i had ai do it and it works really good also added an favicon in the browser
after the review i updated the ui of the weather app and updated the readme i also translated some accidental dutch that i put in there
Ships:
I made an webOS for sailors it includes the weather all over the world and a map you can draw on it was really cool to learn about api and how to use them. i am happy how it turned out
i made an webos for sailors featuring a weather app and a map you can draw on it was super cool to learn how to use apis...
|
1792821345.0721447
|
1792907745.0721447
|
|
14523
|
kOS by @kaansen9611 | Stardance
|
kaansen9611
|
2
|
6.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-14T07:29:46Z", "hours": 2.0, "multiplier": 3.55, "payout": 9, "blessing": "neutral", "text": "I built kOS a web based operating system that runs entirely in the browser using HTML, CSS, and JavaScript. It has a boot screen, login system, draggable windows, a terminal, calculator, notes, weather app, aboutme app and settings. The most challenging parts were making the boot screen and the login system. I spent a lot of time learning how to build these features and used resources such as W3Schools and the DEV Community to better understand the concepts and solve problems I encountered.", "repo": "https://github.com/KaanSen9611/kOS", "demo": "https://kaansen9611.github.io/kOS/"}, {"ship_num": 2, "ts": "2026-06-25T11:14:10Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "kOS is a browser-based desktop environment I built using only HTML, CSS, and vanilla JavaScript. It simulates a lightweight operating system inside the browser with a custom window system and multiple apps like Notes, Weather, About Me, and a Calculator. My goal with this project was to explore how far I could push a desktop-like experience using only frontend technologies, without any frameworks or backend.One of the hardest parts for me was designing a consistent window system that works across all apps and keeps everything stable while still being interactive. I also struggled a bit with drag behavior, window positioning, and making sure different apps don’t break the overall layout. Working through those issues helped me understand DOM manipulation, event handling, and frontend structure much better.Overall, this project is a small OS simulation that runs entirely in the browser and reflects my progress in UI design, JavaScript logic, and building interactive systems.", "repo": "https://github.com/KaanSen9611/kOS", "demo": "https://kaansen9611.github.io/kOS/"}]...
|
[{"post_id": 28134, "ts": "202 [{"post_id": 28134, "ts": "2026-07-14T07:17:51Z", "hours": 2.4081, "text": "I added a simple boot screen and a login page + a new settings app and a new terminal"}, {"post_id": 15585, "ts": "2026-06-25T10:52:45Z", "hours": 0.4011, "text": "I added a calculator app to my kOS OS project. It is built using only HTML, CSS, and vanilla JavaScript."}, {"post_id": 15570, "ts": "2026-06-25T10:03:29Z", "hours": 0.5808, "text": "Added weather app and made the notes app better"}, {"post_id": 15252, "ts": "2026-06-24T19:22:32Z", "hours": 0.6981, "text": "I developed applications for kOS."}, {"post_id": 14997, "ts": "2026-06-24T11:34:16Z", "hours": 2.4311, "text": "Today I built the first major UI system for the kOS project. The goal wasn’t just to create a simple webpage, but to design something that feels like a real operating system interface. Right now, the system has a draggable window. It can be opened and closed, and it starts centered on the screen. There is also a top bar with a live clock that updates in real time. The UI has been redesigned using a glassmorphism style. Both the top bar and the window header are transparent with blur effects, so the background is visible through them. This gives the whole interface a more modern OS-like feel. The close button is a simple red X and it works properly. The open/close system is stable, and the window resets its position when reopened. Next steps will likely include a taskbar, multiple window support, and a desktop icon system to turn this into a more complete web-based OS experience."}]...
|
Title: kOS by @kaansen9611 | Stardance
Devlogs:
T Title: kOS by @kaansen9611 | Stardance
Devlogs:
Today I built the first major UI system for the kOS project. The goal wasn’t just to create a simple webpage, but to design something that feels like a real operating system interface. Right now, the system has a draggable window. It can be opened and closed, and it starts centered on the screen. There is also a top bar with a live clock that updates in real time. The UI has been redesigned using a glassmorphism style. Both the top bar and the window header are transparent with blur effects, so the background is visible through them. This gives the whole interface a more modern OS-like feel. The close button is a simple red X and it works properly. The open/close system is stable, and the window resets its position when reopened. Next steps will likely include a taskbar, multiple window support, and a desktop icon system to turn this into a more complete web-based OS experience.
I developed applications for kOS.
Added weather app and made the notes app better
I added a calculator app to my kOS OS project. It is built using only HTML, CSS, and vanilla JavaScript.
I added a simple boot screen and a login page + a new settings app and a new terminal
Ships:
kOS is a browser-based desktop environment I built using only HTML, CSS, and vanilla JavaScript. It simulates a lightweight operating system inside the browser with a custom window system and multiple apps like Notes, Weather, About Me, and a Calculator. My goal with this project was to explore how far I could push a desktop-like experience using only frontend technologies, without any frameworks or backend.One of the hardest parts for me was designing a consistent window system that works across all apps and keeps everything stable while still being interactive. I also struggled a bit with drag behavior, window positioning, and making sure different apps don’t break the overall layout. Working through those issues helped me understand DOM manipulation, event handling, and frontend structure much better.Overall, this project is a small OS simulation that runs entirely in the browser and reflects my progress in UI design, JavaScript logic, and building interactive systems.
I built kOS a web based operating system that runs entirely in the browser using HTML, CSS, and JavaScript. It has a boot screen, login system, draggable windows, a terminal, calculator, notes, weather app, aboutme app and settings. The most challenging parts were making the boot screen and the login system. I spent a lot of time learning how to build these features and used resources such as W3Schools and the DEV Community to better understand the concepts and solve problems I encountered....
|
1792825017.6346464
|
1792911417.6346464
|
|
14627
|
ManentiOS by @Manenti | Stardance
|
Manenti
|
2
|
8.0
|
23
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T18:06:57Z", "hours": 2.0, "multiplier": 9.37, "payout": 23, "blessing": "neutral", "text": "For this update, I improved ManentiOS , my personal web operating system that runs directly in the browser. The project already had a login-style screen, draggable windows, desktop icons, and apps like FrostLog, Calculator, and Projects. In this mission, I added three new major features: IceDock , a bottom dock for quickly opening apps; a Settings app for changing the visual mode and ambient effects; and a Command Palette with Ctrl + K to search and launch apps faster. The most challenging part was making these new features feel connected to the rest of the OS instead of just being extra buttons on the screen. I had to organize the app list better, connect multiple components to the same open-window logic, manage visual customization through state, and make sure the dock, command palette, settings app, windows, and desktop icons all worked together smoothly. I am proud that ManentiOS now feels much more like a real operating system. The IceDock makes app navigation easier, the Settings app adds personalization, and the Command Palette makes the experience feel more advanced and polished. I am also proud of the winter-tech identity of the project, with cold colors, rain/snow effects, glass-style windows, and a calm futuristic atmosphere. To test the project, open the live demo and enter ManentiOS from the login screen. You can open apps from the desktop icons or from the IceDock, use Ctrl + K to open the Command Palette and search for apps, and open the Settings app to switch between visual modes and ambient effects like snow, rain, or none. You can also drag windows around, close and reopen them, and explore the Projects app to see my portfolio inside the OS.", "repo": "https://github.com/noname697/ManentiOS", "demo": "https://manenti-os.vercel.app"}, {"ship_num": 2, "ts": "2026-06-16T01:20:11Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "For this project, I made ManentiOS , a personal web operating system that runs directly in the browser. It includes a login-style onboarding screen, a desktop interface, draggable and closable windows, a top bar with a clock, and multiple apps such as FrostLog, Calculator, and a Projects portfolio app. The most challenging part was simulating the behavior of a real operating system inside a website. I had to learn how to manage draggable windows, opening and closing apps, window layering with z-index, desktop icons, and React state across different components. I had never built anything like an OS interface before, so figuring out how all these pieces should work together was a big challenge. I am most proud that I was able to create something that actually feels like a small operating system. I also like the visual identity I built for it, mixing a winter, forest, rain-inspired atmosphere with a clean technological interface. This project helped me practice React, TailwindCSS, componentization, UI design, and interactive front-end logic. To test the project, open the live demo, go through the login-style screen, and enter ManentiOS. You can click or double-click the desktop icons to open apps, drag the windows around, close them, reopen them, and explore the Projects app to see some of my other work.", "repo": "https://github.com/noname697/ManentiOS", "demo": "https://manenti-os.vercel.app"}]...
|
[{"post_id": 16380, "ts": "202 [{"post_id": 16380, "ts": "2026-06-26T17:37:56Z", "hours": 2.4972, "text": "For this new mission, I added three major updates to ManentiOS to make it feel more complete as a web operating system. First, I created IceDock , a bottom dock that lets users quickly open apps and see which apps are currently active. Then, I added a Settings app, where users can customize the visual mode and switch ambient effects like snow, rain, or no effect. I also implemented a Command Palette with Ctrl + K , allowing users to search and open apps quickly from anywhere on the desktop. These updates made ManentiOS feel more like a real OS, with better navigation, customization, and a more polished winter-tech experience."}, {"post_id": 6585, "ts": "2026-06-11T02:04:32Z", "hours": 0.7689, "text": "Since the last dev log, I improved the first screen of ManentiOS by turning it into a login-style onboarding page inspired by Windows, but with the winter-tech visual identity of the project. I also made the buttons functional, allowing users to enter the OS normally or open specific apps directly, like the Projects app and FrostLog. After that, I worked on the portfolio experience by improving the Projects app and filling it with my best GitHub projects, including ManentiOS, PoupApp, Manenti Slack Bot, Custom Macropad, and other web/full-stack projects. Now ManentiOS has a stronger first impression, a more useful portfolio section, and feels much more like a complete personal WebOS."}, {"post_id": 6568, "ts": "2026-06-11T01:01:02Z", "hours": 1.5039, "text": "Since the last dev log, I completed the final WebOS tutorial step by building more advanced apps for ManentiOS. This stage was more open-ended, so I decided to create two useful apps: a Calculator and a Projects portfolio app. I added new desktop icons, connected them to draggable app windows, and improved the window system to support multiple apps more easily. The Calculator now performs basic operations, while the Projects app showcases my work inside the OS."}, {"post_id": 6520, "ts": "2026-06-10T23:22:25Z", "hours": 1.0767, "text": "Since the last dev log, I created the first real app for ManentiOS: FrostLog, a winter-tech journal app with selectable entries, a desktop icon, and its own draggable window. This followed the tutorial step focused on adding the first app to the WebOS. I also improved the desktop behavior by fixing the z-index system, so app windows now appear in front of desktop icons while the top bar stays above everything. ManentiOS now feels more like a real WebOS, with icons, apps, draggable windows, and better window layering."}, {"post_id": 6450, "ts": "2026-06-10T21:04:51Z", "hours": 0.7406, "text": "Since the last dev log, I continued developing ManentiOS by following the next WebOS tutorial step and adapting it to my React + TailwindCSS structure. The goal was to make the desktop window feel more like a real operating system window. I created a reusable OSWindow component with support for dragging, closing, and reopening windows. I also updated the desktop so the welcome window can be opened again from the top bar by clicking on ManentiOS. Instead of using plain JavaScript with querySelector, I used React state, props, refs, and pointer events to keep the logic more organized and component-based."}, {"post_id": 6425, "ts": "2026-06-10T20:12:28Z", "hours": 1.1056, "text": "Since the last dev log, I continued working on ManentiOS by defining a stronger visual direction for the project: a winter-inspired interface with forests, rain, landscapes, and a subtle technological touch. I also moved on to the second part of the WebOS tutorial and adapted the concepts from HTML, CSS, and JavaScript into my current React + JSX + TailwindCSS structure. Instead of using plain HTML and inline styles, I planned the desktop as reusable components. I created the idea for the main desktop screen, including a background wallpaper, a glass-style welcome window, a top bar, and a live clock using React state and effects. This keeps the project aligned with the tutorial while making the code cleaner and more scalable."}, {"post_id": 6362, "ts": "2026-06-10T18:26:32Z", "hours": 1.1214, "text": "Today I started working on ManentiOS, my personal web operating system. I chose the main theme, created a futuristic project banner, and wrote a short description for the project. I also built the first onboarding screen using React, JSX, and TailwindCSS. Then, I organized the code into reusable components like FeatureCard, ActionButton, and Onboarding. So far, the project has a clear identity, a visual style, and the beginning of a clean, componentized interface. My next step is to build the main desktop screen and add interactive apps."}]...
|
Title: ManentiOS by @Manenti | Stardance
Devlogs: Title: ManentiOS by @Manenti | Stardance
Devlogs:
Today I started working on ManentiOS, my personal web operating system. I chose the main theme, created a futuristic project banner, and wrote a short description for the project. I also built the first onboarding screen using React, JSX, and TailwindCSS. Then, I organized the code into reusable components like FeatureCard, ActionButton, and Onboarding. So far, the project has a clear identity, a visual style, and the beginning of a clean, componentized interface. My next step is to build the main desktop screen and add interactive apps.
Since the last dev log, I continued working on ManentiOS by defining a stronger visual direction for the project: a winter-inspired interface with forests, rain, landscapes, and a subtle technological touch. I also moved on to the second part of the WebOS tutorial and adapted the concepts from HTML, CSS, and JavaScript into my current React + JSX + TailwindCSS structure. Instead of using plain HTML and inline styles, I planned the desktop as reusable components. I created the idea for the main desktop screen, including a background wallpaper, a glass-style welcome window, a top bar, and a live clock using React state and effects. This keeps the project aligned with the tutorial while making the code cleaner and more scalable.
Since the last dev log, I continued developing ManentiOS by following the next WebOS tutorial step and adapting it to my React + TailwindCSS structure. The goal was to make the desktop window feel more like a real operating system window. I created a reusable OSWindow component with support for dragging, closing, and reopening windows. I also updated the desktop so the welcome window can be opened again from the top bar by clicking on ManentiOS. Instead of using plain JavaScript with querySelector, I used React state, props, refs, and pointer events to keep the logic more organized and component-based.
Since the last dev log, I created the first real app for ManentiOS: FrostLog, a winter-tech journal app with selectable entries, a desktop icon, and its own draggable window. This followed the tutorial step focused on adding the first app to the WebOS. I also improved the desktop behavior by fixing the z-index system, so app windows now appear in front of desktop icons while the top bar stays above everything. ManentiOS now feels more like a real WebOS, with icons, apps, draggable windows, and better window layering.
Since the last dev log, I completed the final WebOS tutorial step by building more advanced apps for ManentiOS. This stage was more open-ended, so I decided to create two useful apps: a Calculator and a Projects portfolio app. I added new desktop icons, connected them to draggable app windows, and improved the window system to support multiple apps more easily. The Calculator now performs basic operations, while the Projects app showcases my work inside the OS.
Since the last dev log, I improved the first screen of ManentiOS by turning it into a login-style onboarding page inspired by Windows, but with the winter-tech visual identity of the project. I also made the buttons functional, allowing users to enter the OS normally or open specific apps directly, like the Projects app and FrostLog. After that, I worked on the portfolio experience by improving the Projects app and filling it with my best GitHub projects, including ManentiOS, PoupApp, Manenti Slack Bot, Custom Macropad, and other web/full-stack projects. Now ManentiOS has a stronger first impression, a more useful portfolio section, and feels much more like a complete personal WebOS.
For this new mission, I added three major updates to ManentiOS to make it feel more complete as a web operating system. First, I created IceDock , a bottom dock that lets users quickly open apps and see which apps are currently active. Then, I added a Settings app, where users can customize the visual mode and switch ambient effects like snow, rain, or no effect. I also implemented a Command Palette with Ctrl + K , allowing users to search and open apps quickly from anywhere on the desktop. These updates made ManentiOS feel more like a real OS, with better navigation, customization, and a more polished winter-tech experience.
Ships:
For this project, I made ManentiOS , a personal web operating system that runs directly in the browser. It includes a login-style onboarding screen, a desktop interface, draggable and closable windows, a top bar with a clock, and multiple apps such as FrostLog, Calculator, and a Projects portfolio app. The most challenging part was simulating the behavior of a real operating system inside a website. I had to learn how to manage draggable windows, opening and closing apps, window layering with z-index, desktop icons, and React state across different components. I had never built anything like an OS interface before, so figuring out how all these pieces should work together was a big challenge. I am most proud that I was able to create something that actually feels like a small operating system. I also like the visual identity I built for it, mixing a winter, forest, rain-inspired atmosphere with a clean technological interface. This project helped me practice React, TailwindCSS, componentization, UI design, and interactive front-end logic. To test the project, open the live demo, go through the login-style screen, and enter ManentiOS. You can click or double-click the desktop icons to open apps, drag the windows around, close them, reopen them, and explore the Projects app to see some of my other work.
For this update, I improved ManentiOS , my personal web operating system that runs directly in the browser. The project already had a login-style screen, draggable windows, desktop icons, and apps like FrostLog, Calculator, and Projects. In this mission, I added three new major features: IceDock , a bottom dock for quickly opening apps; a Settings app for changing the visual mode and ambient effects; and a Command Palette with Ctrl + K to search and launch apps faster. The most challenging part was making these new features feel connected to the rest of the OS instead of just being extra buttons on the screen. I had to organize the app list better, connect multiple components to the same open-window logic, manage visual customization through state, and make sure the dock, command palette, settings app, windows, and desktop icons all worked together smoothly. I am proud that ManentiOS now feels much more like a real operating system. The IceDock makes app navigation easier, the Settings app adds personalization, and the Command Palette makes the experience feel more advanced and polished. I am also proud of the winter-tech identity of the project, with cold colors, rain/snow effects, glass-style windows, and a calm futuristic atmosphere. To test the project, open the live demo and enter ManentiOS from the login screen. You can open apps from the desktop icons or from the IceDock, use Ctrl + K to open the Command Palette and search for apps, and open the Settings app to switch between visual modes and ambient effects like snow, rain, or none. You can also drag windows around, close and reopen them, and explore the Projects app to see my portfolio inside the OS....
|
1792846195.6710823
|
1792932595.6710823
|
|
14731
|
Twinx - OS by @twinx | Stardance
|
twinx
|
2
|
5.0
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T09:10:40Z", "hours": 2.0, "multiplier": 4.44, "payout": 4, "blessing": "neutral", "text": "So few changes i think i added i don’t remember but were good unfortunately i switched to different desktop environment and me dumb i didn’t even pushed it to github.Leave that what’s new i added ? A dock at bottom for apps. A snake game which includes a snake and apple , i think everyone knows it :). A music player using my personal API", "repo": "https://github.com/Philast-015/OS/", "demo": "https://twinx-os.pages.dev/"}, {"ship_num": 2, "ts": "2026-06-16T04:18:12Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hey i made a web OS , it include features such as code editor , note saver , pixel editor and a terminal with a menu bar that appears when clicking the windows key or super key.The challenging part was to make the pixel editor.", "repo": "https://github.com/Philast-015/OS/", "demo": "https://twinx-os.pages.dev/"}]...
|
[{"post_id": 29880, "ts": "202 [{"post_id": 29880, "ts": "2026-07-17T01:26:38Z", "hours": 0.8308, "text": "Made this music player app using API from my site i.e. teenapi so i made a music player around it also it is not in picture but i made a dock for app."}, {"post_id": 16092, "ts": "2026-06-26T05:00:05Z", "hours": 0.4986, "text": "Added a user menu which includes two user : root guest i haven’t added the password for testing of course."}, {"post_id": 16080, "ts": "2026-06-26T04:20:38Z", "hours": 0.485, "text": "Added a snake game with score board and restart option"}, {"post_id": 7528, "ts": "2026-06-12T16:01:10Z", "hours": 0.8583, "text": "added menu and a pixel editor. Where you can make a pixel art and export."}, {"post_id": 7294, "ts": "2026-06-12T04:56:08Z", "hours": 0.4719, "text": "made the terminal and code editor.Just the editor doesn’t support highlights."}, {"post_id": 6035, "ts": "2026-06-10T04:02:05Z", "hours": 1.4633, "text": "Made the basic thing which was listed on guide.With apps like terminal and text editor will add the func to open them later."}]...
|
Title: Twinx - OS by @twinx | Stardance
Devlogs:
Title: Twinx - OS by @twinx | Stardance
Devlogs:
Made the basic thing which was listed on guide.With apps like terminal and text editor will add the func to open them later.
made the terminal and code editor.Just the editor doesn’t support highlights.
added menu and a pixel editor. Where you can make a pixel art and export.
Added a snake game with score board and restart option
Added a user menu which includes two user : root guest i haven’t added the password for testing of course.
Made this music player app using API from my site i.e. teenapi so i made a music player around it also it is not in picture but i made a dock for app.
Ships:
Hey i made a web OS , it include features such as code editor , note saver , pixel editor and a terminal with a menu bar that appears when clicking the windows key or super key.The challenging part was to make the pixel editor.
So few changes i think i added i don’t remember but were good unfortunately i switched to different desktop environment and me dumb i didn’t even pushed it to github.Leave that what’s new i added ? A dock at bottom for apps. A snake game which includes a snake and apple , i think everyone knows it :). A music player using my personal API...
|
1792835271.2353122
|
1792921671.2353122
|
|
15256
|
the way to teal(just kill) by @love | Stardance
|
love
|
2
|
60.67
|
877
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T00:30:44Z", "hours": 23.0, "multiplier": 18.83, "payout": 413, "blessing": "neutral", "text": "this is a movement shooter made in godot 4.6 about a blue man in a green world, i really poured my soul into it so i hope you like it:)", "repo": "https://github.com/IDoTweaks/the-way-to-teal-just-kill-", "demo": "https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"ship_num": 2, "ts": "2026-06-21T13:09:47Z", "hours": 25.0, "multiplier": 18.23, "payout": 464, "blessing": "neutral", "text": "i made a speedrunning game inspired by a song, i will add more bosses and levels but now its in a state i very much like because this is my first game that i actually like i focused on the game feel way more than the looks and it shows its so fun i made a ghost system without any tutorial something i could never dream of this project let me see that i can build things on my own also i am aiming for a 3d printer so i need like 3x the hours so expect updates!", "repo": "https://github.com/IDoTweaks/the-way-to-teal-just-kill-", "demo": "https://idotweaks.itch.io/the-way-to-tealjust-kill"}]...
|
[{"post_id": 31312, "ts": "202 [{"post_id": 31312, "ts": "2026-07-19T16:42:06Z", "hours": 4.2094, "text": "DEVLOG 18 - ig we got a lot of art now new things in the game so pretty much all i did was new ui, make the game fit into a cartoon art style and some cover art for it new itch.io page the itch.io page sucked so i made it again and its so much better now check it out so as always the downloadable version is much better but there is still web support try it out: https://idotweaks.itch.io/the-way-to-tealjust-kill AND I LEFT SOME OF THE ART HERE SO YOU CAN SEE"}, {"post_id": 30937, "ts": "2026-07-18T22:54:39Z", "hours": 8.4639, "text": "DEVLOG 17 - i cant stop working on this last devlog i said i am done with the game but after those reviews i just cant stop key insights from the reviews so the main complains are that the game isnt visually appealing in some devices it ran poorly some mechanics arent clear/ need better tutorial the sfx are annoying (also there were some balancing issues and little bugs) i still got a little less than 19 per hour meaning people really did like it and it needs little changes so what did i change? i changed the tutorial to MAKE you do each mechanic and added a ghost that shows you how to do it new sfx i changed all the art style to be cartoonist i buffed the shotgun i did so much more but its so little that i cant point to each one so lets just say qol changes planning next i have already made 2 mini bosses and currently am working on some more enemy types, i will change the current levels to be the story mode with added story and dialogue and add a completly new mode which i will talk about in later devlogs"}, {"post_id": 28633, "ts": "2026-07-15T00:29:18Z", "hours": 1.1447, "text": "mini DEVLOG 16 - da final straw important if you rate it please download it, the web version is much much worse new levels added levels 7-9 unfortunate losses: sadly the styling system was very bad and i couldnt make it work so i just took it out something i had to add you could cheese everything with the dashes so im sorry… i added stamina da end so yeah i wont work on this project anymore prob but i am starting my own asm docs! be sure to stay updated!"}, {"post_id": 28494, "ts": "2026-07-14T19:34:05Z", "hours": 5.3678, "text": "DEVLOG 15 - boss redesign boss update the boss now attacks with a couple of new attacks! you can see them in the video AND a new paralysis system da cool af part so the boss now takes you to his office where he will offer you a deal: for 20% of your health you can get your paralysis level down! ui update so it looks better now, thats it XD UPDATE! so it is now updated in both github and itch.io but its very bad in the web versionT_T please just download itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill github: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST video btw the video was compressed and then converted so its low quality"}, {"post_id": 26518, "ts": "2026-07-11T11:21:23Z", "hours": 5.4061, "text": "DEVLOG 14 - the project is super star! boss update the current boss is very lazy in design so i decided to change it completely! with a snake boss, what i did is create a self generating floor and a snake with custom pathfinding boring technical stuff the floor has a function that does holes in it and makes sure the snake cannot get soft locked(since it cant pass through its own body) then the snake turns its positon + the player’s position into a tile in the map and using breadth first search from the head’s tile to the player’s tile it finds the next tile it needs to travel to this sounds so simple why did it take 5 hours? the reason is that this mf floor does not like generating how i want it to and i am very bad at algorithms so i had to try again and again and again and then i had to do the same thing with the snake because i havnt touched bfs in like 1.5 years THANKS FOR THE SUPER STAR as you can see while i was on vacation this project got a super star! i am very grateful for it! when will it be in the game? as you can see in the video it just follows the player right now, it has no attacks or something like it so i hope i can get it done by the end of this week(its saturday now so by next saturday) and it isnt wired into the game yet so its still just the old boss"}, {"post_id": 17327, "ts": "2026-06-28T02:11:05Z", "hours": 11.3172, "text": "DEVLOG 13 - UPDATE 1.1! this is a large update 1.1 basically doubles the size of the game and makes it actually feel good to play heres everything: enemies/combat added 4 new enemy types: the charger (rushes you and dashes), the drone (flies around and shoots), the exploder (runs at you and goes boom), and the sniper (snipes. very creative ik) added a sniper weapon for the player too shotgun and sniper now play a little reload animation between shots the new style system grading is no longer based on time insted its based on a style meter that is affected by cool things like no scoping in the air your final grade now mixes score + style + your final health ranking up the meter pops and flashes like super cool game feel hit-stop on kills(like a tiny freeze frame) FOV widens when you’re moving fast and stuff like that low health throws up a red vignette and getting hit shows an arrow pointing at whoever hit you combo kills rise in pitch the longer chain camera rolls when you strafe and dips when you land levels redesigned level 1 from scratch added levels 2 through 6 added a proper boss fight at the end added a tutorial UI + quality of life completely new UI that looks 10x better weapon indicator in the side added sound effects and music pause menu, switching weapons with the scroll wheel, on screen enemy counter settings menu for sensitivity, fov, volume, resolution, etc progress (and your best-run ghosts) now save locally web version web version is now fixed BUT its still a desktop game so its worse download github release: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill yeah thats it now go kill stuff"}, {"post_id": 13096, "ts": "2026-06-21T13:00:34Z", "hours": 2.7217, "text": "DEVLOG - 12 shipping soon notes if a reviewer sees this: i got a report about some web problems which did not happen to me, if you see the textures as too dark tho try downloading it i was not able to test the mac version as well changes i made a readme for the github added a text of damage done above enemies added a mage type enemy that shoots projectiles SHIPPING after this im shipping this so make sure to look at my github + itch.io github: https://github.com/IDoTweaks/the-way-to-teal-just-kill- itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 12239, "ts": "2026-06-19T23:54:55Z", "hours": 4.3089, "text": "DEVLOG - 11 (THE GAME IS ALMOST COMPLETE) + WINNER ANNOUNCEMENT so in the competition the only person that submitted a score was in the comments and late but he is now the winner:) @Connor you won! i will add you to the game soon major things i added: a ghost of your best run that plays back (if anyone is wondering i spent like an hour making it record every input with a timestamp and the WAY easier approach i ended up using is just saving the position + rotation + weapon used every frame (if animations were important to me i would have added them its not that hard) ground slam that does damage to enemies a jump orb to make levels feel less slow minor things i added: a health bar fixed enemies to know attack with a cooldown added a death screen now the enemies have black hands because animating csg shapes is expensive the state of the game now the game now is in what i feel full technicality ready the only things needed are: more levels, bosses, more enemies, more obstacles and interesting things in general and maybe a 3rd gun but other than that its basically ready so dont forget to playtest and lmk DOWNLOAD itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill side note:D also im the developer of the game so its not that hard for me to get s+ and im sure you can too so just spam ground slam its op(expect a patch soon🫣🫣🫣)so here is a clip of me getting s+ plus you can see the ghost after"}, {"post_id": 11305, "ts": "2026-06-18T14:29:13Z", "hours": 0.5894, "text": "THE TOURNAMENT IS STARTING NOW! as you can see in the last devlog the tournament said in it is starting right now! explanation this is a speedrunning competition in my 1 level demo game(very early in development) in that game you cant even die yet so go wild rules the clips must be unedited(unless you add like an edit of lebron and then its fine) submissions end when this post reaches 24 hours/2:30 pm utc and will be sent directly to me on slack/discord(which you can find in my bio) exploits are allowed! runs can only be in the current build in itch.io -runs that are on linux/windows must not use the web version because its super bad changes this version press r to restart + finished the end gui + fixed some score calculation bugs controls: wasd + space - normal movement ngl ctrl - slide lmb - shoot(with shotgun you get knockback btw) shift - dash 1/2 - switch weapons r - restart winner the winner will be the one with highest score by the end of the 24 hours/2:30 pm utc or the first person to reach a perfect score and he will win being inside the game + in the next devlog itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill now for the general stuff my discord: swiftfishi3 my slack: loveTheGodotDeveloper (if there will be any edits i will put them here) for now take a look at my fastest run(you have to wait a bit and its mid development)- runs can only be in the current build in itch.io like and repost so more people see it:D"}, {"post_id": 10797, "ts": "2026-06-17T18:26:42Z", "hours": 2.7661, "text": "DEVLOG - 10 this is a large milestone! COMPETITION ANNOUNCEMENT AT THE END i updated the map textures to a retro-ish style and updated the bullet holes and steps to look much better too! i added a timer and score with a grading system that allows for better speedrunning! i added a custom finish level orb with a custom shader that makes it look super cool look at this gameplay it looks like a real game! now the competition: so the competition will start in the next devlog because i plan to add a restart button to make it easier to speedrun and more now THE WINNER AND PRIZE: the winner will be the person that will get the highest score in 24 hours after the devlog is posted or the first person to get a perfect score of 20k(which is very hard gl) and the prize will be (imagine a drum roll) yeah you will just be on a wall or something its not that huge i will also write about you in the next devlog if thats important to you CLARIFICATIONS BECAUSE CLAUDE SAID THIS DEVLOG IS SHIT: 1.the competition will not be in the current build and will be submitted directly to me through slack/discord with the name you have in stardance 2.the prize is shit idk why claude treats it like i should try to deceive you into thinking its good, its bad i promise 3.if someone sends me they got a 20k score it will end idk whats confusing about it anyway only like 3 people will submit probably itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill (textures in web version are bugged please download!) if you have anything to say about this devlog you may comment it and i will ignore it(unless its a real question) anyway look at this clippp its happening now look at next devlog!"}, {"post_id": 10574, "ts": "2026-06-17T11:42:16Z", "hours": 1.5328, "text": "DEVLOG - 09 i added a shotgun! the shotgun has a large cooldown + it applies force on you! + itch.io update IF YOU DONT CARE ABOUT THE TECHNICAL STUFF WATCH THE VIDEO DOWN HERE TO JUST SEE THE COOL SHOTGUN it was much easier to implement because all i did was add a bunch of raycasts and randomize them with this simple code: func randomizeRays(): var i : int = 0 for ray in children: if ray is RayCast3D: ray.target_position.x = orgPos[i] + randf_range(-spread,spread) i+=1 ray.target_position.y = orgPos[i] + randf_range(-spread,spread) i+=1 the actual hard part was getting both guns to work with eachother but i managed to do that the force function was also interesting because i use a chartacterbody3d in godot i have to make this stuff myself with basically only velocity so the code is pretty easy to understand i dont think i need to explain much func _applyForce(point :Vector3,force , maxRange:float = 10): var dir = global_position - point var dist = dir.length() if dist > maxRange: return dir = dir.normalized() var fallOff = clamp(1 - (dist/ maxRange),0,1) velocity += dir * force * fallOff knockbackTimer = KNOCKBACK_LOCK_TIME also the game is now updated and free on itch.io! link: https://idotweaks.itch.io/the-way-to-tealjust-kill (please download it its much better than the web version because i cant solve some web specific bugs)"}, {"post_id": 9462, "ts": "2026-06-15T20:27:16Z", "hours": 1.6878, "text": "DEVLOG - 08 added an interesting navigation optimization script i encountered some lag even with 4 enemies so sadly i had to optimize it on the bright side i saw yesterday a video about exactly that and omfg it saved me and explains the general idea of what i do its just that i do it worse and in a different way video: https://www.youtube.com/watch?v=BPNr_txi6TU&t=813s time 33(already in link) how it works? ok so its not the MOST OPTIMAL but it is good i mean i can every time an enemy die to resort it blah blah blah and use the modulo but this works good enough even though i spent half an hour fixing a bug that doesnt exist(turns out if you select a navigation region and bake navigation mesh it does that to all regions and not just the one you selected) but for some reason i did have to use a raycast down the enemy’s feet for it to work so they wont fall probably because of friction so anyways here is the code: extends Node3D var tickAssigned = [] var tickCount = [] var currentTick = 0; var tickTimer = 0.0 const TICK_RATE = 0.025 func _ready() -> void: tickAssigned.resize(navObjects.size()) tickAssigned.fill(0) tickCount.resize(20); tickCount.fill(0) var length = navObjects.size() for i in tickAssigned.size(): tickAssigned[i] = -1 var num = 20.0 /length var current = 0.0 for i in length: if current >= 20: current -= 20 tickAssigned[i] = int(current) tickCount[int(current)]+=1 current += num``` # Called every frame. 'delta' is the elapsed time since the previous frame. ```func _process(delta: float) -> void: tickTimer +=delta if tickTimer < TICK_RATE: return tickTimer = 0.0 var tickDelta = TICK_RATE var count = 0 for entity in navObjects: if entity != null: if tickAssigned[count] == currentTick: var target = entity.target if target != null: var navAgent = entity.navAgent var mode = entity.mode var gotShot = entity.gotShot var SPEED = entity.SPEED var accelaration = entity.accelaration var velocity = entity.velocity if mode == \"chase\" or gotShot: navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true elif mode == \"attack\": navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true count+=1 currentTick +=1 if currentTick >= 20: currentTick = 0 #@onready var body =$body #@onready var explosionParticles = preload(\"res://Particles/enemyExplode.tscn\") #var particleInstance #@export var navAgent : NavigationAgent3D #@export var damage = 10 #@export var accelaration = 10 #var target #var mode : String = \"idle\" #var gotShot = false``` and the enemy code is too long so i cant put it here also here is a clip of the current state of the game"}, {"post_id": 9354, "ts": "2026-06-15T18:10:19Z", "hours": 2.9417, "text": "DEVLOG - 07 added vertical dash wall jumping and started with the tutorial level today i wanted to design the first level so i looked up what good level builders there are and saw trenchbroom and after like an hour of trying to make it work on fedora i gave up and tried something called cyclops but it doesnt support my current godot version so i spent MORE TIME diving into its code because there was only 1 small error(or so i thought) which i managed to fix but then every like 3 minutes of using it it just crashed so i guess im sticking with normal godot AND it took me like 20 versions and about 5 commits that i thought i fixed it to get to a working version of the 4 line code that lets me dash vertically but setting it up based on camera lets you dash up and gain insane momentum instantly so i tried a system of my own which calculated you vertical velocity using your horizontal one and tried a bunch of formulas and ended up with this fine version so the wall jumping was very easy to do because i just reflect the current movement and add a boost the hard part was that every time before hitting the wall i would already switch in my keyboard to the other other direction so to deal with that i “predicted the future” like i did with the slopes so that the movement feels smoother but to deal with the problem of the keyboard switching i also checked for the opposite directions(which is bassicly copy paste with minuses)so here is the code for that: if is_on_floor(): canWallJump = false return var veloc = Vector3(velocity.x,velocity.y,velocity.z) #var future = self.global_position + veloc for i in get_slide_collision_count(): var collision = get_slide_collision(i) if collision.get_normal().y < .3: wallNormal = collision.get_normal() canWallJump = true return if veloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + veloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return var altVeloc = Vector3(-velocity.x,velocity.y,velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return altVeloc = Vector3(velocity.x,velocity.y,-velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return canWallJump = false``` anyway here is a clip of the tutorial level now(compressed cause it was somehow 155mb): **NOTE**: it will be updated on itch.io after i finish making this tutorial level im just a little tired today and couldnt work on the project yesterday so i uploaded this devlog early"}, {"post_id": 8257, "ts": "2026-06-13T18:56:58Z", "hours": 1.4006, "text": "DEVLOG - 06 added a main menu! now as you can see THERE IS A MAIN MENU and it doesnt work very good on linux but my eye hurts so thats a problem for tommorow and let me know how it is on windows itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 8086, "ts": "2026-06-13T14:35:14Z", "hours": 2.2019, "text": "DEVLOG - 05 (it should’ve taken like 30 minutes wth) i added enemies that chase you and animations to your movements the animations were the easy part… but can someone tell me why godot uses the exact same shader to all of my models? so it took me like 50 god damn minutes to realise i need to just duplicate it and then i had a typo and i thought duplicating it doesnt work because of that so i gave up and sent it to chatgpt AND THEN I WAS RIGHT I DO NEED TO DUPLICATE IT anyways here is a clip of the game now and you have to like it ALSO SPECIAL THANKS TO CONNOR - thank him he is the reason the downloads now work in itch.io at least thats what i hope because if they dont idfk what to do itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 7998, "ts": "2026-06-13T10:48:12Z", "hours": 1.0583, "text": "DEVLOG - 04 HUGE MILESTONE movement is now finished with all new momentum logic and added dashing wait… why wont you just see for your selves? try out the movement in the link here and tell me if you like it:) https://idotweaks.itch.io/the-way-to-tealjust-kill note: i added downloadable versions and a web version the game is generally for windows/linux(i am on linux so i kinda have to XD) so i will not be fixing any only web only bugs anyways i have to put an image here so watch my first attempt of a crosshairT_T"}, {"post_id": 7964, "ts": "2026-06-13T09:10:34Z", "hours": 0.4461, "text": "mini devlog - 03.5 i wanted some art to the game so i made this banner it isnt proffesional at all and took me a damn hour for something thats kinda bad but this is what i cam up with i hope you like it (if you are interested in the project go check out my profile:)"}, {"post_id": 7754, "ts": "2026-06-12T23:03:36Z", "hours": 0.6658, "text": "DEVLOG - 03 added enemies that turn teal with time read devlog 00 to understand the game:) for this game i didnt want a boring health bar what i wanted was a visual indicator and well the green enemies are the health bar now you can see easily how much health they have as you can see in the video its a simple use of shaders and its my first time! I REALLY HATE THOSE but it works also look at those particles(i<3particles) –please like if you liked it and comment suggestions it really makes me feel better and improve the game"}, {"post_id": 7503, "ts": "2026-06-12T14:46:54Z", "hours": 1.8969, "text": "DEVLOG - 02 (still day one of the project i just do a lot:) IF YOU DONT KNOW WHAT THE GAME IS ABOUT GO TO DEVLOG - 00 added teal footsteps and teal bullet holes to emphasize the mix of blue and green it was implemented using decals which it is the first time i use them so they arent the greatest as you may have noticed i also added a gun with a simple animation+particles and a raycast currently it has nothing to shoot at but i might fix it soon… so the basics are done but i do need to add movement like double jump because after all it is a movement shooter and figure out how i can copy ultrakill’s movement so my game doesnt feel so “slow” next devlog will probably be today againT_T i just cant stop working on itttt"}, {"post_id": 7442, "ts": "2026-06-12T12:05:00Z", "hours": 0.9031, "text": "DEVLOG - 01 – how the way to teal(just kill) calculates sliding i added sliding and right now it isnt as smooth and polished as it might be at the end but i came up with a method that works quite well and im certain i will use it until the end how it works : if you are sliding a script checks what will be your position if you will continue in your current motion without changing the y if you wont be on the ground it means you will probably be on a slope how do we know how “sloppy”(hehe just like the game) it is? we shoot a raycast starting at the player’s feet down about 5 units(you may do whatever number you like) afterwards we check the position in which the raycast intersected with the floor and use it to calculate the force/boost we will give the player using that i can calculate everything i need to slide the player note :if you end up using it check my github because in the code you will need to adjust some things like more downward force in order for the player to not fly anyway here is a clip of it in action the game is in a newborn stage so no judging! –CODE TIME– (I NEVER USE COMMENTS BE GRATEFUL) #calculate the position in the future var horizontalVel = Vector3(velocity.x,0,velocity.z) var future = feet.global_position + horizontalVel #raycast prep var spaceState = get_world_3d().direct_space_state #starting above the future pos in case of upward slopes var rayStart = future + Vector3(0,1,0) var rayEnd = future + Vector3(0,-5,0) #setUp rayCast var rayQuery = PhysicsRayQueryParameters3D.create(rayStart,rayEnd) #so we dont hit ourselves xd rayQuery.exclude = [self.get_rid()] #now lets shoot this bad boyyy var intersect = spaceState.intersect_ray(rayQuery) #results time!!!! if intersect: #we want to return the distance from now to the future return feet.global_position.y - intersect.position.y else: #if it hits nothing we are fucking flying lets return so fucking much return 0```"}, {"post_id": 7416, "ts": "2026-06-12T10:55:30Z", "hours": 0.325, "text": "devlog - 00 today i thought about the idea of the game it will be inspired by a song i heard as a kid of a green man in a green world and he encounters a blue man “from a whole different story” the story is that you are a blue man who is sick from the inequality so you go to a mission killing all the green top % to get to a teal world from which comes the name: the way to teal(just kill) it will be a movement shooter made in godot i will try to create the assets myself but i might end up using some free models for now we will just use this bean with hands"}]...
|
Title: the way to teal(just kill) by @love | Stard Title: the way to teal(just kill) by @love | Stardance
Devlogs:
devlog - 00 today i thought about the idea of the game it will be inspired by a song i heard as a kid of a green man in a green world and he encounters a blue man “from a whole different story” the story is that you are a blue man who is sick from the inequality so you go to a mission killing all the green top % to get to a teal world from which comes the name: the way to teal(just kill) it will be a movement shooter made in godot i will try to create the assets myself but i might end up using some free models for now we will just use this bean with hands
DEVLOG - 01 – how the way to teal(just kill) calculates sliding i added sliding and right now it isnt as smooth and polished as it might be at the end but i came up with a method that works quite well and im certain i will use it until the end how it works : if you are sliding a script checks what will be your position if you will continue in your current motion without changing the y if you wont be on the ground it means you will probably be on a slope how do we know how “sloppy”(hehe just like the game) it is? we shoot a raycast starting at the player’s feet down about 5 units(you may do whatever number you like) afterwards we check the position in which the raycast intersected with the floor and use it to calculate the force/boost we will give the player using that i can calculate everything i need to slide the player note :if you end up using it check my github because in the code you will need to adjust some things like more downward force in order for the player to not fly anyway here is a clip of it in action the game is in a newborn stage so no judging! –CODE TIME– (I NEVER USE COMMENTS BE GRATEFUL) #calculate the position in the future var horizontalVel = Vector3(velocity.x,0,velocity.z) var future = feet.global_position + horizontalVel #raycast prep var spaceState = get_world_3d().direct_space_state #starting above the future pos in case of upward slopes var rayStart = future + Vector3(0,1,0) var rayEnd = future + Vector3(0,-5,0) #setUp rayCast var rayQuery = PhysicsRayQueryParameters3D.create(rayStart,rayEnd) #so we dont hit ourselves xd rayQuery.exclude = [self.get_rid()] #now lets shoot this bad boyyy var intersect = spaceState.intersect_ray(rayQuery) #results time!!!! if intersect: #we want to return the distance from now to the future return feet.global_position.y - intersect.position.y else: #if it hits nothing we are fucking flying lets return so fucking much return 0```
DEVLOG - 02 (still day one of the project i just do a lot:) IF YOU DONT KNOW WHAT THE GAME IS ABOUT GO TO DEVLOG - 00 added teal footsteps and teal bullet holes to emphasize the mix of blue and green it was implemented using decals which it is the first time i use them so they arent the greatest as you may have noticed i also added a gun with a simple animation+particles and a raycast currently it has nothing to shoot at but i might fix it soon… so the basics are done but i do need to add movement like double jump because after all it is a movement shooter and figure out how i can copy ultrakill’s movement so my game doesnt feel so “slow” next devlog will probably be today againT_T i just cant stop working on itttt
DEVLOG - 03 added enemies that turn teal with time read devlog 00 to understand the game:) for this game i didnt want a boring health bar what i wanted was a visual indicator and well the green enemies are the health bar now you can see easily how much health they have as you can see in the video its a simple use of shaders and its my first time! I REALLY HATE THOSE but it works also look at those particles(i<3particles) –please like if you liked it and comment suggestions it really makes me feel better and improve the game
mini devlog - 03.5 i wanted some art to the game so i made this banner it isnt proffesional at all and took me a damn hour for something thats kinda bad but this is what i cam up with i hope you like it (if you are interested in the project go check out my profile:)
DEVLOG - 04 HUGE MILESTONE movement is now finished with all new momentum logic and added dashing wait… why wont you just see for your selves? try out the movement in the link here and tell me if you like it:) https://idotweaks.itch.io/the-way-to-tealjust-kill note: i added downloadable versions and a web version the game is generally for windows/linux(i am on linux so i kinda have to XD) so i will not be fixing any only web only bugs anyways i have to put an image here so watch my first attempt of a crosshairT_T
DEVLOG - 05 (it should’ve taken like 30 minutes wth) i added enemies that chase you and animations to your movements the animations were the easy part… but can someone tell me why godot uses the exact same shader to all of my models? so it took me like 50 god damn minutes to realise i need to just duplicate it and then i had a typo and i thought duplicating it doesnt work because of that so i gave up and sent it to chatgpt AND THEN I WAS RIGHT I DO NEED TO DUPLICATE IT anyways here is a clip of the game now and you have to like it ALSO SPECIAL THANKS TO CONNOR - thank him he is the reason the downloads now work in itch.io at least thats what i hope because if they dont idfk what to do itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG - 06 added a main menu! now as you can see THERE IS A MAIN MENU and it doesnt work very good on linux but my eye hurts so thats a problem for tommorow and let me know how it is on windows itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG - 07 added vertical dash wall jumping and started with the tutorial level today i wanted to design the first level so i looked up what good level builders there are and saw trenchbroom and after like an hour of trying to make it work on fedora i gave up and tried something called cyclops but it doesnt support my current godot version so i spent MORE TIME diving into its code because there was only 1 small error(or so i thought) which i managed to fix but then every like 3 minutes of using it it just crashed so i guess im sticking with normal godot AND it took me like 20 versions and about 5 commits that i thought i fixed it to get to a working version of the 4 line code that lets me dash vertically but setting it up based on camera lets you dash up and gain insane momentum instantly so i tried a system of my own which calculated you vertical velocity using your horizontal one and tried a bunch of formulas and ended up with this fine version so the wall jumping was very easy to do because i just reflect the current movement and add a boost the hard part was that every time before hitting the wall i would already switch in my keyboard to the other other direction so to deal with that i “predicted the future” like i did with the slopes so that the movement feels smoother but to deal with the problem of the keyboard switching i also checked for the opposite directions(which is bassicly copy paste with minuses)so here is the code for that: if is_on_floor(): canWallJump = false return var veloc = Vector3(velocity.x,velocity.y,velocity.z) #var future = self.global_position + veloc for i in get_slide_collision_count(): var collision = get_slide_collision(i) if collision.get_normal().y < .3: wallNormal = collision.get_normal() canWallJump = true return if veloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + veloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return var altVeloc = Vector3(-velocity.x,velocity.y,velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return altVeloc = Vector3(velocity.x,velocity.y,-velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return canWallJump = false``` anyway here is a clip of the tutorial level now(compressed cause it was somehow 155mb): **NOTE**: it will be updated on itch.io after i finish making this tutorial level im just a little tired today and couldnt work on the project yesterday so i uploaded this devlog early
DEVLOG - 08 added an interesting navigation optimization script i encountered some lag even with 4 enemies so sadly i had to optimize it on the bright side i saw yesterday a video about exactly that and omfg it saved me and explains the general idea of what i do its just that i do it worse and in a different way video: https://www.youtube.com/watch?v=BPNr_txi6TU&t=813s time 33(already in link) how it works? ok so its not the MOST OPTIMAL but it is good i mean i can every time an enemy die to resort it blah blah blah and use the modulo but this works good enough even though i spent half an hour fixing a bug that doesnt exist(turns out if you select a navigation region and bake navigation mesh it does that to all regions and not just the one you selected) but for some reason i did have to use a raycast down the enemy’s feet for it to work so they wont fall probably because of friction so anyways here is the code: extends Node3D var tickAssigned = [] var tickCount = [] var currentTick = 0; var tickTimer = 0.0 const TICK_RATE = 0.025 func _ready() -> void: tickAssigned.resize(navObjects.size()) tickAssigned.fill(0) tickCount.resize(20); tickCount.fill(0) var length = navObjects.size() for i in tickAssigned.size(): tickAssigned[i] = -1 var num = 20.0 /length var current = 0.0 for i in length: if current >= 20: current -= 20 tickAssigned[i] = int(current) tickCount[int(current)]+=1 current += num``` # Called every frame. 'delta' is the elapsed time since the previous frame. ```func _process(delta: float) -> void: tickTimer +=delta if tickTimer < TICK_RATE: return tickTimer = 0.0 var tickDelta = TICK_RATE var count = 0 for entity in navObjects: if entity != null: if tickAssigned[count] == currentTick: var target = entity.target if target != null: var navAgent = entity.navAgent var mode = entity.mode var gotShot = entity.gotShot var SPEED = entity.SPEED var accelaration = entity.accelaration var velocity = entity.velocity if mode == "chase" or gotShot: navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true elif mode == "attack": navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true count+=1 currentTick +=1 if currentTick >= 20: currentTick = 0 #@onready var body =$body #@onready var explosionParticles = preload("res://Particles/enemyExplode.tscn") #var particleInstance #@export var navAgent : NavigationAgent3D #@export var damage = 10 #@export var accelaration = 10 #var target #var mode : String = "idle" #var gotShot = false``` and the enemy code is too long so i cant put it here also here is a clip of the current state of the game
DEVLOG - 09 i added a shotgun! the shotgun has a large cooldown + it applies force on you! + itch.io update IF YOU DONT CARE ABOUT THE TECHNICAL STUFF WATCH THE VIDEO DOWN HERE TO JUST SEE THE COOL SHOTGUN it was much easier to implement because all i did was add a bunch of raycasts and randomize them with this simple code: func randomizeRays(): var i : int = 0 for ray in children: if ray is RayCast3D: ray.target_position.x = orgPos[i] + randf_range(-spread,spread) i+=1 ray.target_position.y = orgPos[i] + randf_range(-spread,spread) i+=1 the actual hard part was getting both guns to work with eachother but i managed to do that the force function was also interesting because i use a chartacterbody3d in godot i have to make this stuff myself with basically only velocity so the code is pretty easy to understand i dont think i need to explain much func _applyForce(point :Vector3,force , maxRange:float = 10): var dir = global_position - point var dist = dir.length() if dist > maxRange: return dir = dir.normalized() var fallOff = clamp(1 - (dist/ maxRange),0,1) velocity += dir * force * fallOff knockbackTimer = KNOCKBACK_LOCK_TIME also the game is now updated and free on itch.io! link: https://idotweaks.itch.io/the-way-to-tealjust-kill (please download it its much better than the web version because i cant solve some web specific bugs)
DEVLOG - 10 this is a large milestone! COMPETITION ANNOUNCEMENT AT THE END i updated the map textures to a retro-ish style and updated the bullet holes and steps to look much better too! i added a timer and score with a grading system that allows for better speedrunning! i added a custom finish level orb with a custom shader that makes it look super cool look at this gameplay it looks like a real game! now the competition: so the competition will start in the next devlog because i plan to add a restart button to make it easier to speedrun and more now THE WINNER AND PRIZE: the winner will be the person that will get the highest score in 24 hours after the devlog is posted or the first person to get a perfect score of 20k(which is very hard gl) and the prize will be (imagine a drum roll) yeah you will just be on a wall or something its not that huge i will also write about you in the next devlog if thats important to you CLARIFICATIONS BECAUSE CLAUDE SAID THIS DEVLOG IS SHIT: 1.the competition will not be in the current build and will be submitted directly to me through slack/discord with the name you have in stardance 2.the prize is shit idk why claude treats it like i should try to deceive you into thinking its good, its bad i promise 3.if someone sends me they got a 20k score it will end idk whats confusing about it anyway only like 3 people will submit probably itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill (textures in web version are bugged please download!) if you have anything to say about this devlog you may comment it and i will ignore it(unless its a real question) anyway look at this clippp its happening now look at next devlog!
THE TOURNAMENT IS STARTING NOW! as you can see in the last devlog the tournament said in it is starting right now! explanation this is a speedrunning competition in my 1 level demo game(very early in development) in that game you cant even die yet so go wild rules the clips must be unedited(unless you add like an edit of lebron and then its fine) submissions end when this post reaches 24 hours/2:30 pm utc and will be sent directly to me on slack/discord(which you can find in my bio) exploits are allowed! runs can only be in the current build in itch.io -runs that are on linux/windows must not use the web version because its super bad changes this version press r to restart + finished the end gui + fixed some score calculation bugs controls: wasd + space - normal movement ngl ctrl - slide lmb - shoot(with shotgun you get knockback btw) shift - dash 1/2 - switch weapons r - restart winner the winner will be the one with highest score by the end of the 24 hours/2:30 pm utc or the first person to reach a perfect score and he will win being inside the game + in the next devlog itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill now for the general stuff my discord: swiftfishi3 my slack: loveTheGodotDeveloper (if there will be any edits i will put them here) for now take a look at my fastest run(you have to wait a bit and its mid development)- runs can only be in the current build in itch.io like and repost so more people see it:D
DEVLOG - 11 (THE GAME IS ALMOST COMPLETE) + WINNER ANNOUNCEMENT so in the competition the only person that submitted a score was in the comments and late but he is now the winner:) @Connor you won! i will add you to the game soon major things i added: a ghost of your best run that plays back (if anyone is wondering i spent like an hour making it record every input with a timestamp and the WAY easier approach i ended up using is just saving the position + rotation + weapon used every frame (if animations were important to me i would have added them its not that hard) ground slam that does damage to enemies a jump orb to make levels feel less slow minor things i added: a health bar fixed enemies to know attack with a cooldown added a death screen now the enemies have black hands because animating csg shapes is expensive the state of the game now the game now is in what i feel full technicality ready the only things needed are: more levels, bosses, more enemies, more obstacles and interesting things in general and maybe a 3rd gun but other than that its basically ready so dont forget to playtest and lmk DOWNLOAD itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill side note:D also im the developer of the game so its not that hard for me to get s+ and im sure you can too so just spam ground slam its op(expect a patch soon🫣🫣🫣)so here is a clip of me getting s+ plus you can see the ghost after
DEVLOG - 12 shipping soon notes if a reviewer sees this: i got a report about some web problems which did not happen to me, if you see the textures as too dark tho try downloading it i was not able to test the mac version as well changes i made a readme for the github added a text of damage done above enemies added a mage type enemy that shoots projectiles SHIPPING after this im shipping this so make sure to look at my github + itch.io github: https://github.com/IDoTweaks/the-way-to-teal-just-kill- itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG 13 - UPDATE 1.1! this is a large update 1.1 basically doubles the size of the game and makes it actually feel good to play heres everything: enemies/combat added 4 new enemy types: the charger (rushes you and dashes), the drone (flies around and shoots), the exploder (runs at you and goes boom), and the sniper (snipes. very creative ik) added a sniper weapon for the player too shotgun and sniper now play a little reload animation between shots the new style system grading is no longer based on time insted its based on a style meter that is affected by cool things like no scoping in the air your final grade now mixes score + style + your final health ranking up the meter pops and flashes like super cool game feel hit-stop on kills(like a tiny freeze frame) FOV widens when you’re moving fast and stuff like that low health throws up a red vignette and getting hit shows an arrow pointing at whoever hit you combo kills rise in pitch the longer chain camera rolls when you strafe and dips when you land levels redesigned level 1 from scratch added levels 2 through 6 added a proper boss fight at the end added a tutorial UI + quality of life completely new UI that looks 10x better weapon indicator in the side added sound effects and music pause menu, switching weapons with the scroll wheel, on screen enemy counter settings menu for sensitivity, fov, volume, resolution, etc progress (and your best-run ghosts) now save locally web version web version is now fixed BUT its still a desktop game so its worse download github release: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill yeah thats it now go kill stuff
DEVLOG 14 - the project is super star! boss update the current boss is very lazy in design so i decided to change it completely! with a snake boss, what i did is create a self generating floor and a snake with custom pathfinding boring technical stuff the floor has a function that does holes in it and makes sure the snake cannot get soft locked(since it cant pass through its own body) then the snake turns its positon + the player’s position into a tile in the map and using breadth first search from the head’s tile to the player’s tile it finds the next tile it needs to travel to this sounds so simple why did it take 5 hours? the reason is that this mf floor does not like generating how i want it to and i am very bad at algorithms so i had to try again and again and again and then i had to do the same thing with the snake because i havnt touched bfs in like 1.5 years THANKS FOR THE SUPER STAR as you can see while i was on vacation this project got a super star! i am very grateful for it! when will it be in the game? as you can see in the video it just follows the player right now, it has no attacks or something like it so i hope i can get it done by the end of this week(its saturday now so by next saturday) and it isnt wired into the game yet so its still just the old boss
DEVLOG 15 - boss redesign boss update the boss now attacks with a couple of new attacks! you can see them in the video AND a new paralysis system da cool af part so the boss now takes you to his office where he will offer you a deal: for 20% of your health you can get your paralysis level down! ui update so it looks better now, thats it XD UPDATE! so it is now updated in both github and itch.io but its very bad in the web versionT_T please just download itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill github: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST video btw the video was compressed and then converted so its low quality
mini DEVLOG 16 - da final straw important if you rate it please download it, the web version is much much worse new levels added levels 7-9 unfortunate losses: sadly the styling system was very bad and i couldnt make it work so i just took it out something i had to add you could cheese everything with the dashes so im sorry… i added stamina da end so yeah i wont work on this project anymore prob but i am starting my own asm docs! be sure to stay updated!
DEVLOG 17 - i cant stop working on this last devlog i said i am done with the game but after those reviews i just cant stop key insights from the reviews so the main complains are that the game isnt visually appealing in some devices it ran poorly some mechanics arent clear/ need better tutorial the sfx are annoying (also there were some balancing issues and little bugs) i still got a little less than 19 per hour meaning people really did like it and it needs little changes so what did i change? i changed the tutorial to MAKE you do each mechanic and added a ghost that shows you how to do it new sfx i changed all the art style to be cartoonist i buffed the shotgun i did so much more but its so little that i cant point to each one so lets just say qol changes planning next i have already made 2 mini bosses and currently am working on some more enemy types, i will change the current levels to be the story mode with added story and dialogue and add a completly new mode which i will talk about in later devlogs
DEVLOG 18 - ig we got a lot of art now new things in the game so pretty much all i did was new ui, make the game fit into a cartoon art style and some cover art for it new itch.io page the itch.io page sucked so i made it again and its so much better now check it out so as always the downloadable version is much better but there is still web support try it out: https://idotweaks.itch.io/the-way-to-tealjust-kill AND I LEFT SOME OF THE ART HERE SO YOU CAN SEE
Ships:
i made a speedrunning game inspired by a song, i will add more bosses and levels but now its in a state i very much like because this is my first game that i actually like i focused on the game feel way more than the looks and it shows its so fun i made a ghost system without any tutorial something i could never dream of this project let me see that i can build things on my own also i am aiming for a 3d printer so i need like 3x the hours so expect updates!
this is a movement shooter made in godot 4.6 about a blue man in a green world, i really poured my soul into it so i hope you like it:)...
|
1792850073.6002128
|
1792936473.6002128
|
|
15290
|
Undertale OS by @ThaoVi | Stardance
|
ThaoVi
|
2
|
29.0
|
190
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T13:02:50Z", "hours": 15.0, "multiplier": 12.46, "payout": 190, "blessing": "neutral", "text": "WebOS I made an Undertale themed WebOs presenting me, with some other apps such as countdowns! This is the very first Stardance project i did, and also very first html project overall (including webos1) Features A top-bar with a live clock and a healthbar Draggable windows Closable windows Applications TrueNotes (personal) A personnal app where I put thoughts about true crime stories I enjoyed :D The design is centered around Undertale’s field of flowers, with each footstep being a story; I wanted to make it more original than the side bar I had in WebOS 1. To do app A very basic to do app. Countdown app A simple countdown app where you can set countdowns and a new window appears for each countdown. They are editable and deleteable :D You can also change the precision shown on each windows (in case seeing seconds stresses you out) Skeletale (personal) An undertale - anatomy based “autobiography” of me, it’s part of my WebOs 1 and I haven’t really updated it since. Future plans Undertale music player An intro page (WIP) where you can chose your character and background image. Make the notes apps more interactive by making the user add their own notes Undertale references The close button is a heart and it breaks when you hover on it to close the window! The field in TrueNotes are the yellow flowers from undertale. The health bar is also a reference from undertale. The fonts! They are from https://github.com/hujgup/Undertale-CSS", "repo": "https://github.com/TVDVT/webOS", "demo": "https://tvdvt.github.io/webOS/"}, {"ship_num": 2, "ts": "2026-06-27T15:46:19Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I just finished my first WebOS. It has a top bar, welcome window and two apps. All the windows are draggable and closable, and both of the apps are representative of me :D One is about the true crimes I enjoy and the other one is a presentation of me through a skeleton. I had zero experience in website coding until I started the project, I am very proud of the result!", "repo": "https://github.com/TVDVT/webOS", "demo": "https://tvdvt.github.io/webOS/"}]...
|
[{"post_id": 70359, "ts": "202 [{"post_id": 70359, "ts": "2026-09-19T01:17:40Z", "hours": 4.2636, "text": "Pre-ship adjustments I’m shipping it, finally! I tried to make the user experience better by making the design more coherent (grayscale), although I am planning to add a lot more undertale references. I also changed my footprints color to contrast more with the yellow background. The countdown looks a little better, i removed some overlapping gaps that made everything look awkward but it’s better now!"}, {"post_id": 60796, "ts": "2026-09-03T12:03:37Z", "hours": 3.7294, "text": "i COMPLETELY changed the design of my OS to be full on undertale I found an amazing undertale css pack by chance and loved it so much so i went from wow blue aesthetic to undertale yay. I still have some customization to do I changed the close button to a heart and when you hover on it it becomes a broken heart im really proud of that I’m also almost done with the to do app the tasks are just not overflowing the way I want them to new ideas: music player to play undertale songs map to make wallpaper change based on map location have a preload screen that makes you choose your location and choose character"}, {"post_id": 57001, "ts": "2026-08-29T02:14:47Z", "hours": 2.5986, "text": "countdown working! I made it look a little better but I’m not completely satisfied yet. You can now edit and delete countdowns, change precision and some other stuff but now I want to work on making windows pinnable :^ I also want make a todo list app, I’m really thinking of making this OS my study compagnion haha but idk if its too basic for this mission. But anyways ill do it for myself not the stardust hee hee haw haw"}, {"post_id": 48918, "ts": "2026-08-17T14:13:01Z", "hours": 2.3319, "text": "Countdown app I added a countdown app/widget for some motivation so you can have something to look forward to! The CSS is definitely lacking so I will work on it once im done with JS. It was a bit hard to convert every input and change precision but I figured it out thanks to W3S. I still need to: Show a list of the cooldowns in the main window and make them editable and deleteable Make the new window closeable & pinnable Make the time input optionnal Make an icon for the app Find a way to save changes? (maybe)"}, {"post_id": 48335, "ts": "2026-08-16T17:26:05Z", "hours": 0.7083, "text": "First feature done My notes app is now cooler: Footprints instead of a text based sidebar Links open in new tab Upon first opening of the app, only footprints show on a grassy field Animations on footprints and sidebar after clicking the first footprint Things to add after finishing other features: More notes content A way to go back to the grassy field To work on next More animations Gamify Skeletale app"}, {"post_id": 47085, "ts": "2026-08-14T18:36:15Z", "hours": 1.0469, "text": "Devlog My side bar is now a menu? I made it so that content will only show after clicking on the footsteps (not yet but that’s the goal). For that, I need to write a new function in Java Script and add a blue grassy background to match with the cloudy background. My animations are now smoother as I added transitions and larger margins so that the icons getting bigger don’t impede on the other ones. I also added hover text so that we can know which story is selected when hovering on each footstep."}, {"post_id": 43615, "ts": "2026-08-08T23:50:59Z", "hours": 0.5525, "text": "WebOS 2 It’s been a month since I didn’t work on this so I forgot how to code a little. Looking at my old code is helping me remember the coding though. First new feature (Working on this) As my first new feature, I am revamping my True Notes app side bar . I want to change to to footsteps I can click on. As of now, I only imported the image and made the footprints appear for each entry. I have yet to make them as a path, center them and just have a better general layout. Second new feature I want to have hover animations. Eg if I hover on the footprints they get bigger, hovering on an app would change the top bar of the window header, etc. Third feature I haven’t really thought about it yet, either I’ll make my Skeletale app more interactive by changing back and next buttons to directly clicking on the skeleton either I will make a new app"}, {"post_id": 16967, "ts": "2026-06-27T15:30:36Z", "hours": 1.0411, "text": "Done!"}, {"post_id": 16632, "ts": "2026-06-27T01:42:50Z", "hours": 3.1203, "text": "Almost done with my second app My second app is an anatomical map of myself inspired by Undertale (not really, it’s just a pixelized skeleton). I just really like anatomy in general so I thought this would represent me well. I assigned a part of myself to many bones, the text is just placeholder right now, I will develop on it later. -I added back and next buttons for navigation to make it simpler than a side bar, It also takes less space I finished my first app a while ago but I do want to change the layout in WebOS 2 (have some art & a better side bar) Right now my goals for tomorrow are to: Put the back&next buttons inside the window Hide the skeleton image on the first tab of the app Zoom on each bone for each body part or have a heart cursor that goes in each body part like in Undertale Finish the content"}, {"post_id": 14671, "ts": "2026-06-23T21:10:04Z", "hours": 2.6467, "text": "I finished part 4, it took me a while to get it to work so I will focus on the aesthetic after i finish part 5. My notes app will show my thoughts about some true crime stories. My next app is going to be Undertale related I hope."}, {"post_id": 11551, "ts": "2026-06-18T20:54:43Z", "hours": 2.9986, "text": "Added a Notes App, but I’m not sure what its exact purpose will be"}, {"post_id": 10908, "ts": "2026-06-17T21:40:50Z", "hours": 1.8064, "text": "I’m done with part 3! Now I have: A pretty header A pretty background A CSS file with my window and window header designs that I will be able to use for my next windows. Draggable windows that can close (but will completely disappear, so I have to make a “minimize” button to be able to open it later) An open button that’s not very useful and doesn’t really work."}, {"post_id": 9556, "ts": "2026-06-15T22:40:55Z", "hours": 1.3453, "text": "Working on part 3"}, {"post_id": 6827, "ts": "2026-06-11T13:35:07Z", "hours": 0.6017, "text": "I just learned about dividers! The welcome still looks a bit awkward but it’s gonna be fine."}, {"post_id": 6805, "ts": "2026-06-11T12:41:43Z", "hours": 0.3239, "text": "First 15 minutes"}]...
|
Title: Undertale OS by @ThaoVi | Stardance
Devlog Title: Undertale OS by @ThaoVi | Stardance
Devlogs:
First 15 minutes
I just learned about dividers! The welcome still looks a bit awkward but it’s gonna be fine.
Working on part 3
I’m done with part 3! Now I have: A pretty header A pretty background A CSS file with my window and window header designs that I will be able to use for my next windows. Draggable windows that can close (but will completely disappear, so I have to make a “minimize” button to be able to open it later) An open button that’s not very useful and doesn’t really work.
Added a Notes App, but I’m not sure what its exact purpose will be
I finished part 4, it took me a while to get it to work so I will focus on the aesthetic after i finish part 5. My notes app will show my thoughts about some true crime stories. My next app is going to be Undertale related I hope.
Almost done with my second app My second app is an anatomical map of myself inspired by Undertale (not really, it’s just a pixelized skeleton). I just really like anatomy in general so I thought this would represent me well. I assigned a part of myself to many bones, the text is just placeholder right now, I will develop on it later. -I added back and next buttons for navigation to make it simpler than a side bar, It also takes less space I finished my first app a while ago but I do want to change the layout in WebOS 2 (have some art & a better side bar) Right now my goals for tomorrow are to: Put the back&next buttons inside the window Hide the skeleton image on the first tab of the app Zoom on each bone for each body part or have a heart cursor that goes in each body part like in Undertale Finish the content
Done!
WebOS 2 It’s been a month since I didn’t work on this so I forgot how to code a little. Looking at my old code is helping me remember the coding though. First new feature (Working on this) As my first new feature, I am revamping my True Notes app side bar . I want to change to to footsteps I can click on. As of now, I only imported the image and made the footprints appear for each entry. I have yet to make them as a path, center them and just have a better general layout. Second new feature I want to have hover animations. Eg if I hover on the footprints they get bigger, hovering on an app would change the top bar of the window header, etc. Third feature I haven’t really thought about it yet, either I’ll make my Skeletale app more interactive by changing back and next buttons to directly clicking on the skeleton either I will make a new app
Devlog My side bar is now a menu? I made it so that content will only show after clicking on the footsteps (not yet but that’s the goal). For that, I need to write a new function in Java Script and add a blue grassy background to match with the cloudy background. My animations are now smoother as I added transitions and larger margins so that the icons getting bigger don’t impede on the other ones. I also added hover text so that we can know which story is selected when hovering on each footstep.
First feature done My notes app is now cooler: Footprints instead of a text based sidebar Links open in new tab Upon first opening of the app, only footprints show on a grassy field Animations on footprints and sidebar after clicking the first footprint Things to add after finishing other features: More notes content A way to go back to the grassy field To work on next More animations Gamify Skeletale app
Countdown app I added a countdown app/widget for some motivation so you can have something to look forward to! The CSS is definitely lacking so I will work on it once im done with JS. It was a bit hard to convert every input and change precision but I figured it out thanks to W3S. I still need to: Show a list of the cooldowns in the main window and make them editable and deleteable Make the new window closeable & pinnable Make the time input optionnal Make an icon for the app Find a way to save changes? (maybe)
countdown working! I made it look a little better but I’m not completely satisfied yet. You can now edit and delete countdowns, change precision and some other stuff but now I want to work on making windows pinnable :^ I also want make a todo list app, I’m really thinking of making this OS my study compagnion haha but idk if its too basic for this mission. But anyways ill do it for myself not the stardust hee hee haw haw
i COMPLETELY changed the design of my OS to be full on undertale I found an amazing undertale css pack by chance and loved it so much so i went from wow blue aesthetic to undertale yay. I still have some customization to do I changed the close button to a heart and when you hover on it it becomes a broken heart im really proud of that I’m also almost done with the to do app the tasks are just not overflowing the way I want them to new ideas: music player to play undertale songs map to make wallpaper change based on map location have a preload screen that makes you choose your location and choose character
Pre-ship adjustments I’m shipping it, finally! I tried to make the user experience better by making the design more coherent (grayscale), although I am planning to add a lot more undertale references. I also changed my footprints color to contrast more with the yellow background. The countdown looks a little better, i removed some overlapping gaps that made everything look awkward but it’s better now!
Ships:
I just finished my first WebOS. It has a top bar, welcome window and two apps. All the windows are draggable and closable, and both of the apps are representative of me :D One is about the true crimes I enjoy and the other one is a presentation of me through a skeleton. I had zero experience in website coding until I started the project, I am very proud of the result!
WebOS I made an Undertale themed WebOs presenting me, with some other apps such as countdowns! This is the very first Stardance project i did, and also very first html project overall (including webos1) Features A top-bar with a live clock and a healthbar Draggable windows Closable windows Applications TrueNotes (personal) A personnal app where I put thoughts about true crime stories I enjoyed :D The design is centered around Undertale’s field of flowers, with each footstep being a story; I wanted to make it more original than the side bar I had in WebOS 1. To do app A very basic to do app. Countdown app A simple countdown app where you can set countdowns and a new window appears for each countdown. They are editable and deleteable :D You can also change the precision shown on each windows (in case seeing seconds stresses you out) Skeletale (personal) An undertale - anatomy based “autobiography” of me, it’s part of my WebOs 1 and I haven’t really updated it since. Future plans Undertale music player An intro page (WIP) where you can chose your character and background image. Make the notes apps more interactive by making the user add their own notes Undertale references The close button is a heart and it breaks when you hover on it to close the window! The field in TrueNotes are the yellow flowers from undertale. The health bar is also a reference from undertale. The fonts! They are from https://github.com/hujgup/Undertale-CSS...
|
1792832139.4176269
|
1792918539.4176269
|
|
15446
|
zap by @bernardq | Stardance
|
bernardq
|
2
|
46.68
|
338
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-16T19:23:17Z", "hours": 24.0, "multiplier": 7.58, "payout": 182, "blessing": "neutral", "text": "So, I built a package manager in Python. The biggest challenge I experienced was organizing my code, debugging, and building complex features. I’m proud that it works, and I’m proud of all the time I spent coding it. My project documentation is on GitHub, which is the best place I have to write and maintain it. Zap can install, remove, and download packages without installing them, as well as update packages and perform other features. Try out my project, and if you want to add your projects to the Zap repository, contact me on Slack or GitHub. Thanks for Reading!", "repo": "https://github.com/Bkner3/zap", "demo": "https://github.com/Bkner3/zap/releases"}, {"ship_num": 2, "ts": "2026-07-11T21:53:33Z", "hours": 16.0, "multiplier": 9.85, "payout": 156, "blessing": "neutral", "text": "Hello everyone! My project is a package manager built entirely in Python. I challenged myself to create something simple for everyone—both for the people creating the repository and for those who will use it. I am really proud of myself for dedicating so much effort to this project. ⚠️ Project Status & Requirements Please note that this project is currently in Beta and some commands might not be fully functional or ready yet. System Requirements: Python 3.0 or higher is required. To run the project in script mode, you must install the following dependencies: requests, colorama, and tqdm. Current Limitations: The tools inside repo-tools (used for creating repositories) are currently disabled while they undergo updates. In the meantime, if you want to create a repository, you can use the example index provided in the GitHub README and simply replace the package and file names with your own. If you have any questions or run into issues, please feel free to open an issue or ask here on GitHub. I am more than happy to help!", "repo": "https://github.com/Bkner3/zap", "demo": "https://github.com/Bkner3/zap/releases"}]...
|
[{"post_id": 77160, "ts": "202 [{"post_id": 77160, "ts": "2026-10-05T20:41:48Z", "hours": 1.8519, "text": "Devlog #32 I’m tired of working on this, I try one thing and it doesn’t work I try another even worse but I’m working to launch the zap for linux I just don’t have test packages or packages to release if any wants to launch their package on the zap let me know."}, {"post_id": 76875, "ts": "2026-10-04T21:59:26Z", "hours": 1.7056, "text": "Devlog #31 After some time, I finally had time to work on ZAP again. Today I started fixing some bugs in ZAP, tested the installation script, and added the installation instructions to the README on the main page. ZAP is still in beta, and I know some things don’t work yet, but I want to sleep. I tested the installer on Debian-based systems, but I haven’t tested it on Arch, Alpine, or other obscure distros yet. My linux test PC specs are shown above, and the error is also shown above."}, {"post_id": 74178, "ts": "2026-09-26T21:04:57Z", "hours": 1.0075, "text": "#Devlog #30 Updating the zap web page for the new version."}, {"post_id": 73050, "ts": "2026-09-24T08:47:09Z", "hours": 0.6928, "text": "Devlog #29 Today I finally finished the Linux installation script!"}, {"post_id": 72864, "ts": "2026-09-23T21:50:36Z", "hours": 0.6369, "text": "Devlog #28 So today, I started writing the installation script for Linux. Sorry if I don’t give many updates school just started today!"}, {"post_id": 70055, "ts": "2026-09-18T11:18:17Z", "hours": 0.3489, "text": "Devlog #27 Today, I run zap on Linux and lost my sanity with the complexity of using Linux on an old PC and all the configuration. The hello test package will be available this afternoon. Thanks for reading!"}, {"post_id": 69672, "ts": "2026-09-17T15:29:16Z", "hours": 0.4408, "text": "Devlog #26 Today, I changed the code so that ZAP can have a Linux version. I spent an hour trying to install pip on my Linux PC, but I couldn’t get it to work. I switched to another PC, and now I’m going to test it."}, {"post_id": 69197, "ts": "2026-09-16T15:56:48Z", "hours": 3.8558, "text": "Devlog #25 Making small changes to the code in the past days to launch the version 0.7.0-beta."}, {"post_id": 66646, "ts": "2026-09-12T14:35:05Z", "hours": 0.7144, "text": "Devlog #24 Today, I made some small changes to the project. The next thing I’m going to add is a system to check whether the local index is outdated and update it if necessary."}, {"post_id": 66005, "ts": "2026-09-11T15:00:04Z", "hours": 0.9475, "text": "Devlog #23 Today, I correct a error in the launcher system code and I tried to create a 3 packages to show who it works but they don’t work."}, {"post_id": 65639, "ts": "2026-09-10T22:10:37Z", "hours": 3.4558, "text": "Devlog #22 Today, yesterday I added a function that checks if all packages / dependencies are in the list to be downloaded, also adding the author variable to the database, and some minor changes. Thanks for reading! 😊"}, {"post_id": 64327, "ts": "2026-09-08T16:48:39Z", "hours": 1.4808, "text": "Devlog #21 Updating the README so I can release version 0.7 tomorrow!"}, {"post_id": 63686, "ts": "2026-09-07T16:52:05Z", "hours": 1.5267, "text": "Devlog #20 Today, with the help of ChatGPT, I created the dependency system. The ZAP can now resolve package dependencies and find the correct versions required by each package. It can also handle multiple versions of the same dependency and create launchers with the required dependencies added to the PATH. This means different packages can use different versions of the same dependency without conflicts."}, {"post_id": 61833, "ts": "2026-09-04T22:52:52Z", "hours": 0.6039, "text": "Devlog #19 Today, with the help of ChatGPT, I created a system to check if a dependency’s version is compatible with the program. For example, if a dependency is specified as dependency@>=1.0.0 , the system will analyze the required version and check whether the available version is compatible."}, {"post_id": 58496, "ts": "2026-08-30T22:28:18Z", "hours": 1.8736, "text": "Devlog #18 Today, I added a new parameter to the database for dependencies, and I started working on the dependency system. I don’t know if I mentioned it in the previous devlog, but I also created the confirmation button. Thanks for reading! And if you want to launch your project on Zap, please contact me. Thanks for reading!"}, {"post_id": 54778, "ts": "2026-08-25T21:48:08Z", "hours": 1.4942, "text": "Devlog #17 Hello! Today I finally started working on the scary part of a package manager: dependencies ⛈️⛈️. Warning Today I only worked on the system that grabs the dependencies. The way dependencies will work is through the .cmd launchers stored in: C:/Users/Your_User/AppData/Local/Zap/sl Each package will have its own launcher, and that launcher will be responsible for setting up the environment required by that package. For example, imagine your program uses lib_a version 1.0 , while another program uses lib_a version 2.0 . Instead of putting everything in the same place and causing conflicts, each .cmd launcher will temporarily add the required dependencies to the PATH . This means that both versions can coexist without interfering with each other. Dependencies can also have their own dependencies. When one package depends on another package, its launcher can create its own environment with the dependencies it requires. This creates a kind of lightweight sandbox for each package. The goal is to keep dependencies isolated while keeping the system simple and transparent. This is definitely one of the more complicated parts of the package manager, but I’m finally starting to figure out the architecture. Warning This changes are not avaiable yet!"}, {"post_id": 51693, "ts": "2026-08-21T14:52:13Z", "hours": 2.9186, "text": "Devlog #16 Today, I changed the way you configure Zap. The example below shows how to hide the logo. Before: zap config hl Now: zap config set show_logo true Previously, you couldn’t view the configuration from the program. Now, zap config list shows the current configuration. Warning The configuration is currently only used to enable, disable, or change the logo and debug settings. I’m also finally using Python’s virtual environment to work on the project. These changes will be included in the next release. For now, they are available in the dev branch. And thank you to everyone who has checked out the project and given feedback. If anyone wants to publish their projects and make them available in the Zap repository, please leave a comment or try to contact me."}, {"post_id": 40270, "ts": "2026-08-03T18:11:13Z", "hours": 2.7706, "text": "Devlog #15 Today, I re-write the Readme, launch a release (v0.6.5-beta), I created a official repository and add a test package named hello."}, {"post_id": 32531, "ts": "2026-07-21T19:25:58Z", "hours": 0.7503, "text": "Devlog #14 Today I separated repo-tools from the Zap parser and started developing it in its own branch."}, {"post_id": 30730, "ts": "2026-07-18T15:33:21Z", "hours": 0.9061, "text": "Devlog #13 Adding the info commmad."}, {"post_id": 28369, "ts": "2026-07-14T16:15:58Z", "hours": 0.7253, "text": "adding a gitignore and deleting the repo-tools to start from zero."}, {"post_id": 26852, "ts": "2026-07-11T21:29:51Z", "hours": 1.3656, "text": "Devlog #11 - Now I added upgrades to the zap website but I down publish yet. Sorry for my robotic English."}, {"post_id": 26585, "ts": "2026-07-11T14:33:30Z", "hours": 2.1264, "text": "Devlog #10 Today I added the repo-remove command, which removes a repository URL from the index file. I also made some small improvements to the project’s directory structure."}, {"post_id": 24630, "ts": "2026-07-08T10:54:59Z", "hours": 1.2447, "text": "Devlog - 09 Today I added a base_url parameter to the index configuration, allowing the domain to be changed more easily without having to manually update all links. I also fixed issues in the Makefile that were causing broken executables with no output. Finally, I merged my work from the GitHub dev branch into the GitHub main branch."}, {"post_id": 22463, "ts": "2026-07-04T22:40:05Z", "hours": 1.1542, "text": "Devlog - 08 Starting to create an installation script and configure my VS Code for another computer."}, {"post_id": 17617, "ts": "2026-06-28T14:21:40Z", "hours": 1.2869, "text": "Devlog - 07 Today, I added an upgrade feature to update ZAP to the latest version. The code is untested because I have to return my school laptop and move everything over to my dad’s computer. I don’t know when I will be back to active development."}, {"post_id": 17010, "ts": "2026-06-27T16:37:05Z", "hours": 1.5008, "text": "Devlog - 06. Today I added a function to check if a package is compatible with the operating system where the program is running."}, {"post_id": 11987, "ts": "2026-06-19T15:47:52Z", "hours": 1.6478, "text": "Devlog - 05 Beginning of the creation of the repo-tools that will be used to create and edit an index."}, {"post_id": 11537, "ts": "2026-06-18T20:43:38Z", "hours": 0.5406, "text": "Devlog - 04 Today I added a SHA-256 integrity verification system. The package manager now generates and compares file hashes to validate downloaded files and prevent corrupted or modified packages from being installed."}, {"post_id": 9316, "ts": "2026-06-15T17:01:19Z", "hours": 1.1847, "text": "Devlog - 03 Today I created and finished the update command."}, {"post_id": 6876, "ts": "2026-06-11T15:04:47Z", "hours": 2.6628, "text": "Devlog - 02 Today I finished the logging system and started updating the README. What’s new: Complete activity logging README improvements and setup guide Next step: polishing the project documentation and create a better structure for the packages."}, {"post_id": 6340, "ts": "2026-06-10T17:51:33Z", "hours": 1.0964, "text": "Now I am implementing the log system."}]...
|
Title: zap by @bernardq | Stardance
Devlogs:
Now Title: zap by @bernardq | Stardance
Devlogs:
Now I am implementing the log system.
Devlog - 02 Today I finished the logging system and started updating the README. What’s new: Complete activity logging README improvements and setup guide Next step: polishing the project documentation and create a better structure for the packages.
Devlog - 03 Today I created and finished the update command.
Devlog - 04 Today I added a SHA-256 integrity verification system. The package manager now generates and compares file hashes to validate downloaded files and prevent corrupted or modified packages from being installed.
Devlog - 05 Beginning of the creation of the repo-tools that will be used to create and edit an index.
Devlog - 06. Today I added a function to check if a package is compatible with the operating system where the program is running.
Devlog - 07 Today, I added an upgrade feature to update ZAP to the latest version. The code is untested because I have to return my school laptop and move everything over to my dad’s computer. I don’t know when I will be back to active development.
Devlog - 08 Starting to create an installation script and configure my VS Code for another computer.
Devlog - 09 Today I added a base_url parameter to the index configuration, allowing the domain to be changed more easily without having to manually update all links. I also fixed issues in the Makefile that were causing broken executables with no output. Finally, I merged my work from the GitHub dev branch into the GitHub main branch.
Devlog #10 Today I added the repo-remove command, which removes a repository URL from the index file. I also made some small improvements to the project’s directory structure.
Devlog #11 - Now I added upgrades to the zap website but I down publish yet. Sorry for my robotic English.
adding a gitignore and deleting the repo-tools to start from zero.
Devlog #13 Adding the info commmad.
Devlog #14 Today I separated repo-tools from the Zap parser and started developing it in its own branch.
Devlog #15 Today, I re-write the Readme, launch a release (v0.6.5-beta), I created a official repository and add a test package named hello.
Devlog #16 Today, I changed the way you configure Zap. The example below shows how to hide the logo. Before: zap config hl Now: zap config set show_logo true Previously, you couldn’t view the configuration from the program. Now, zap config list shows the current configuration. Warning The configuration is currently only used to enable, disable, or change the logo and debug settings. I’m also finally using Python’s virtual environment to work on the project. These changes will be included in the next release. For now, they are available in the dev branch. And thank you to everyone who has checked out the project and given feedback. If anyone wants to publish their projects and make them available in the Zap repository, please leave a comment or try to contact me.
Devlog #17 Hello! Today I finally started working on the scary part of a package manager: dependencies ⛈️⛈️. Warning Today I only worked on the system that grabs the dependencies. The way dependencies will work is through the .cmd launchers stored in: C:/Users/Your_User/AppData/Local/Zap/sl Each package will have its own launcher, and that launcher will be responsible for setting up the environment required by that package. For example, imagine your program uses lib_a version 1.0 , while another program uses lib_a version 2.0 . Instead of putting everything in the same place and causing conflicts, each .cmd launcher will temporarily add the required dependencies to the PATH . This means that both versions can coexist without interfering with each other. Dependencies can also have their own dependencies. When one package depends on another package, its launcher can create its own environment with the dependencies it requires. This creates a kind of lightweight sandbox for each package. The goal is to keep dependencies isolated while keeping the system simple and transparent. This is definitely one of the more complicated parts of the package manager, but I’m finally starting to figure out the architecture. Warning This changes are not avaiable yet!
Devlog #18 Today, I added a new parameter to the database for dependencies, and I started working on the dependency system. I don’t know if I mentioned it in the previous devlog, but I also created the confirmation button. Thanks for reading! And if you want to launch your project on Zap, please contact me. Thanks for reading!
Devlog #19 Today, with the help of ChatGPT, I created a system to check if a dependency’s version is compatible with the program. For example, if a dependency is specified as dependency@>=1.0.0 , the system will analyze the required version and check whether the available version is compatible.
Devlog #20 Today, with the help of ChatGPT, I created the dependency system. The ZAP can now resolve package dependencies and find the correct versions required by each package. It can also handle multiple versions of the same dependency and create launchers with the required dependencies added to the PATH. This means different packages can use different versions of the same dependency without conflicts.
Devlog #21 Updating the README so I can release version 0.7 tomorrow!
Devlog #22 Today, yesterday I added a function that checks if all packages / dependencies are in the list to be downloaded, also adding the author variable to the database, and some minor changes. Thanks for reading! 😊
Devlog #23 Today, I correct a error in the launcher system code and I tried to create a 3 packages to show who it works but they don’t work.
Devlog #24 Today, I made some small changes to the project. The next thing I’m going to add is a system to check whether the local index is outdated and update it if necessary.
Devlog #25 Making small changes to the code in the past days to launch the version 0.7.0-beta.
Devlog #26 Today, I changed the code so that ZAP can have a Linux version. I spent an hour trying to install pip on my Linux PC, but I couldn’t get it to work. I switched to another PC, and now I’m going to test it.
Devlog #27 Today, I run zap on Linux and lost my sanity with the complexity of using Linux on an old PC and all the configuration. The hello test package will be available this afternoon. Thanks for reading!
Devlog #28 So today, I started writing the installation script for Linux. Sorry if I don’t give many updates school just started today!
Devlog #29 Today I finally finished the Linux installation script!
#Devlog #30 Updating the zap web page for the new version.
Devlog #31 After some time, I finally had time to work on ZAP again. Today I started fixing some bugs in ZAP, tested the installation script, and added the installation instructions to the README on the main page. ZAP is still in beta, and I know some things don’t work yet, but I want to sleep. I tested the installer on Debian-based systems, but I haven’t tested it on Arch, Alpine, or other obscure distros yet. My linux test PC specs are shown above, and the error is also shown above.
Devlog #32 I’m tired of working on this, I try one thing and it doesn’t work I try another even worse but I’m working to launch the zap for linux I just don’t have test packages or packages to release if any wants to launch their package on the zap let me know.
Ships:
Hello everyone! My project is a package manager built entirely in Python. I challenged myself to create something simple for everyone—both for the people creating the repository and for those who will use it. I am really proud of myself for dedicating so much effort to this project. ⚠️ Project Status & Requirements Please note that this project is currently in Beta and some commands might not be fully functional or ready yet. System Requirements: Python 3.0 or higher is required. To run the project in script mode, you must install the following dependencies: requests, colorama, and tqdm. Current Limitations: The tools inside repo-tools (used for creating repositories) are currently disabled while they undergo updates. In the meantime, if you want to create a repository, you can use the example index provided in the GitHub README and simply replace the package and file names with your own. If you have any questions or run into issues, please feel free to open an issue or ask here on GitHub. I am more than happy to help!
So, I built a package manager in Python. The biggest challenge I experienced was organizing my code, debugging, and building complex features. I’m proud that it works, and I’m proud of all the time I spent coding it. My project documentation is on GitHub, which is the best place I have to write and maintain it. Zap can install, remove, and download packages without installing them, as well as update packages and perform other features. Try out my project, and if you want to add your projects to the Zap repository, contact me on Slack or GitHub. Thanks for Reading!...
|
1792832044.416828
|
1792918444.416828
|
|
15573
|
MineOS by @shaur1021 | Stardance
|
shaur1021
|
2
|
4.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T22:02:56Z", "hours": 1.0, "multiplier": 4.1, "payout": 3, "blessing": "neutral", "text": "Fixed my webOS. Images werent working", "repo": "https://github.com/shaur1021yt/MineOS", "demo": "https://shaur1021yt.github.io/MineOS/"}, {"ship_num": 2, "ts": "2026-06-11T19:32:27Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made MineOS, a minecraft operating system which works as a ad for my yt channel. The best part that I worked on, and was difficult and different from the guide is the Instagram to InstaCraft logo creation. Took me 30 mins to photoshop that. Must be an easier way but I like how it turned out", "repo": "https://github.com/shaur1021yt/MineOS", "demo": "https://shaur1021yt.github.io/MineOS/"}]...
|
[{"post_id": 7120, "ts": "2026 [{"post_id": 7120, "ts": "2026-06-11T22:02:21Z", "hours": 0.7433, "text": "Fixed the apps image working."}, {"post_id": 6602, "ts": "2026-06-11T02:29:32Z", "hours": 0.7094, "text": "Finished Part 4 Made instacraft, instagram, but minecraft. It doesnt rlly work like insta tho. is more of a notes app still. Also had to photoshop for liek 30 mins to ge the logo of instacraft"}, {"post_id": 6563, "ts": "2026-06-11T00:50:17Z", "hours": 0.9381, "text": "Finished part 3. Made code neater and also made the clsoe button a minecarft X. very fun"}, {"post_id": 6476, "ts": "2026-06-10T21:51:24Z", "hours": 0.6036, "text": "Did Part 2 I made the top bar of the OS with working time and the name of the OS. Haven’t customized it too much yet. Will do that in the next devlog. Oh yeah, I also added a nice minecraft background"}, {"post_id": 6446, "ts": "2026-06-10T20:50:58Z", "hours": 0.6944, "text": "Did the First tutorial + a bit More I followed the tutorial to see what they were talking about and what the point of the tutorial was. Then I went on my own direction after going through the whole tutorial to make this home screen. Idk what to do with it rn but if yall are reading this, maybe subscribe to my YT (Shaur1021)"}]...
|
Title: MineOS by @shaur1021 | Stardance
Devlogs:
Title: MineOS by @shaur1021 | Stardance
Devlogs:
Did the First tutorial + a bit More I followed the tutorial to see what they were talking about and what the point of the tutorial was. Then I went on my own direction after going through the whole tutorial to make this home screen. Idk what to do with it rn but if yall are reading this, maybe subscribe to my YT (Shaur1021)
Did Part 2 I made the top bar of the OS with working time and the name of the OS. Haven’t customized it too much yet. Will do that in the next devlog. Oh yeah, I also added a nice minecraft background
Finished part 3. Made code neater and also made the clsoe button a minecarft X. very fun
Finished Part 4 Made instacraft, instagram, but minecraft. It doesnt rlly work like insta tho. is more of a notes app still. Also had to photoshop for liek 30 mins to ge the logo of instacraft
Fixed the apps image working.
Ships:
I made MineOS, a minecraft operating system which works as a ad for my yt channel. The best part that I worked on, and was difficult and different from the guide is the Instagram to InstaCraft logo creation. Took me 30 mins to photoshop that. Must be an easier way but I like how it turned out
Fixed my webOS. Images werent working...
|
1792831979.3110726
|
1792918379.3110726
|
|
16179
|
Robotics RoboLens by @mira_j_maroni | Stardance
|
mira_j_maroni
|
2
|
140.27
|
26
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T22:22:22Z", "hours": 124.0, "multiplier": 16.83, "payout": 0, "blessing": "neutral", "text": "What did I make? Since Ship #1, RoboLens grew from one AI scanner into four connected tools. I added a rules checker that reads the actual FRC game manual (2024–2026) alongside your robot photo so it’s grounded in real rules instead of guessing. I built out a full shared battery tracker. I added a guided camera that walks you through lighting/tilt/framing and auto-captures once the angle looks right. And the biggest addition: a Team Stats & Match Center with four tabs (My Team, Stats, Events, Sim) pulling live data from The Blue Alliance and the FRC Events API, including a season-wide “World Rating,” a matchup simulator with win probabilities, and bookmarking teams to get real push notifications before their matches. I also spent a lot of time on stuff that doesn’t show up as a “feature” but makes the app actually usable: a queue + exponential backoff + retry system so the shared free-tier Gemini key doesn’t randomly fail scans under load, a report button that feeds recurring AI mistakes back into future scans, offline detection so scans fail fast instead of hanging, and a new instant-loading splash screen. What was challenging for me? The AI usage limits were the most persistent problem. Everyone shares one free-tier Gemini key, so scans would fail with no clear pattern whenever enough people hit it at once. I fixed it in stages: first a queue limiting in-flight requests, then automatic retries with backoff (and respecting the retry-after header when Gemini gave one), then finally surfacing that retry status to the user (“High demand. Retrying (2/3)…”) instead of just showing a dead spinner. The guided camera and push notifications both turned into whole rabbit holes of browser-specific pain (iOS Safari blocking camera/notification permissions unless triggered by a direct tap, no live frame streaming on web so I had to build a custom JS-interop layer from scratch, and push not working on iOS at all unless the site’s added to the home screen firs)t. My favorite bug story: the Match Center’s Events tab would spin forever with zero errors. I burned time adding timeouts and retries that did nothing before realizing the real issue. The spinner wasn’t stuck waiting on the network, it was stuck because nothing ever tried. What am I the most proud of? Going from a single-purpose AI scanner to four genuinely useful, connected tools without the codebase turning into spaghetti. I’m also proud that scans now degrade gracefully under load instead of just failing, and that notifications work reliably even though I had zero experience with service workers or VAPID keys before this. And honestly, just sticking with it. 21 devlogs and three months of real iteration based on actual user feedback instead of giving up. What should people know so they can test your project? Live app: https://mirage54321.github.io/RoboLens/ You can log in as a guest for team 4388 to browse batteries without needing an account. Push notifications currently work reliably on desktop browsers and Android (iOS Safari requires the site to be added to your home screen as a bookmark). You can test this by logging into -4388 (Yes, a negative. I needed a number that wouldn’t have a real team). The AI scan/rules tools need a robot photo to test against; if you don’t have one handy, any well-lit photo of mechanical/electrical components will still show you how the flow works.", "repo": "https://github.com/mirage54321/RoboLens", "demo": "https://mirage54321.github.io/RoboLens/"}, {"ship_num": 2, "ts": "2026-06-22T18:39:59Z", "hours": 5.0, "multiplier": 5.73, "payout": 26, "blessing": "neutral", "text": "I made an app for specifically robotics teams (although this could be used for other things too). This is still a work in progress because there is so much more I want to add. I did this project so that I could make something with an AI model and I’m really proud of myself because Flutter was really hard to work with!", "repo": "https://github.com/mirage54321/RoboLens", "demo": "https://mirage54321.github.io/RoboLens/"}]...
|
[{"post_id": 65393, "ts": "202 [{"post_id": 65393, "ts": "2026-09-10T14:37:50Z", "hours": 6.5575, "text": "Devlog #23 -> Fixed the camera disconnect crash from the feedback. Turns out the camera plugin doesn’t actually throw an error when the hardware gets yanked mid-session, it just quietly flips an internal hasError flag and keeps going. Which is why the app was crashing somewhere random instead of failing cleanly. Nothing in my code was listening for that flag, so it just kept trying to read frames and capture photos off a dead controller. Fixed it by adding a listener that actually watches for that error state, cleans everything up, and drops the user onto a proper “Camera disconnected, try again” screen instead of freezing or throwing. Also fixed the retry logic after a failed capture so it doesn’t try to restart a stream on a controller that’s already dead. Next up: the cursor. Someone pointed that out, because every button on web just shows the default arrow. Live app: https://mirage54321.github.io/RoboLens/a"}, {"post_id": 64602, "ts": "2026-09-09T03:43:12Z", "hours": 4.7133, "text": "Devlog #22 -> I was looking at the comments people left me from my ship and the first thing I noticed that I should work on is the load-in page. It is definitely kind of plain. To be honest, I used Claude to help a lot with this one. Making the spinning circle was pretty easy but I had some complex ideas I wanted to put to work and I just didn’t know how to do it. It has a huge radar that has the colors pop up and says “scounting __ teams”. Overall, I am so happy about this new design! Let me know what you guys think! I also added a folder for the photos so it looks more organized! The next thing I plan to work on “loop crashes if the camera disconnects” comment. Live app: https://mirage54321.github.io/RoboLens/"}, {"post_id": 63881, "ts": "2026-09-07T21:41:15Z", "hours": 2.065, "text": "Updates!!! Basically, I’ve been checking to see how many users and views I have. I have google analytics on my project to keep an eye on it. Right now I have 52 users and 163 views. Which honestly, I am pretty dang happy about. (1) I haven’t really been advertising (2) I literally thought it was gonna be like 20 views Woop woop! Okay, now on these past few days I have been working on getting as many hours as possible. I don’t have a personal computer so I am really aiming for literally any of the laptops. Now, programatically I have been working on removing the 3 burst messages for iPhone (it wouldn’t compact itself on the Apple homescreen). FYI: 90% of the time for this was spent removing the 3 burst messages for iPhone and writing Ship #2… so you better be ready for Ship 2! View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 63811, "ts": "2026-09-07T19:35:43Z", "hours": 0.7911, "text": "Notifications are working again! Basically, the rebuilding of Render helped fix the issue which is kind of ragebait. I’m getting a little nervous though because I wonder what happens if someone doesn’t reopen the bookmark (because that is how it resets). Would they still get the messages? Will it update automatically? Overall, it works great. I just worry there may be an error that arises (that is a risk with any project honestly). View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 63771, "ts": "2026-09-07T18:47:23Z", "hours": 5.1583, "text": "Devlog #19 -> I know I just committed a bunch the last few days. I guess I realized there is only a few days left and I found how to be way more efficent in getting hours. If I just keep this open and something else on another computer and work with them kinda being different windows then I get a lot more time because the switching of windows in the same computer made me keep forgetting to come back and work on the project (and I’m guessing was cutting the time too). Anywho! The most recent changes I have made is removing the ? mark button. I think I was going for a like “about me” thing but I think it was a little redundant and kind of unneccessary to say the least. I added a report button instead (it’s just in the home page). I got this idea from lovable which was something I worked with during my internship. I highkey have been working so much on this project (you can see by all my hours) that I didn’t want to connect it to the backend. It is just a popout that takes you to an gmail link and you can click send. Maybe if I run out of ideas I can add it as a backend. Now, if I am going to be so honest. I have worked a lot on this project and I want to ship but I also want to just crank out some more hours. I’m extremely proud of this project and I need to get it out to the world so that I can get some users! My issues to work on are: Low MongoDB storage for free account Professionalizing (now just looking back over and seeing if there is anything I wanna fix before putting on chief delphi) View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 63405, "ts": "2026-09-07T07:05:48Z", "hours": 8.2653, "text": "Devlog #18 -> Okay, super short devlog just to explain what I am doing. Basically all my hours are spent on fixing the notifications. It is super annoying right now because I am trying to finalize my project and the notifications randomly stop working. I tried clearing out mongoDB and checking on my cron-job and those seem to be working just fine. I’m not sure what to do. I pushed the hours up (for the practice day so I can check it earlier) and redeployed with Render. I shall see tomorrow if it works. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 62347, "ts": "2026-09-05T17:45:39Z", "hours": 8.4539, "text": "Devlog #17 -> Part 3, wrapping this one up Last piece was making the retrying actually visible instead of just quietly happening in the background. Before, if a scan was retrying you’d just stare at a spinner with no idea what was going on. Now the loading screen updates to say something like “High demand. Retrying (2/3)…” so people know the app hasn’t frozen, it’s just waiting its turn. Between the queueing, the backoff retries on both ends, and this messaging, this should turn a lot of what used to be “scan failed, try again” moments into just a few extra seconds of waiting instead. Doesn’t make the free tier limit go away entirely, but it’s a big improvement over what I had. Current problems / what’s next: Low MongoDB storage for free account Professionalizing (before putting on Chief Delphi)"}, {"post_id": 61646, "ts": "2026-09-04T17:29:48Z", "hours": 9.4403, "text": "Devlog #16 -> Part 2, continuing from #15 Got retries working on top of the queue from last time. If Gemini comes back with a 429 (rate limited) or 503 (overloaded) instead of an actual answer, the backend now waits and tries again automatically, using exponential backoff (2s, then 4s, then 8s) instead of hammering it again right away, up to a few attempts before it actually gives up and reports failure. It also checks for a retry-after header first and uses that instead of the backoff timer if Gemini actually tells us how long to wait. Then I mirrored the same idea on the Flutter side, so if the backend’s retries still aren’t enough, the app itself will retry the whole request a couple more times before showing the user an error."}, {"post_id": 60875, "ts": "2026-09-03T14:59:25Z", "hours": 12.3994, "text": "Devlog #15 -> Part 1 (still working on this one!) Finally started actually tackling the AI usage limit problem from devlog #2. Since everyone using the app shares the same free-tier Gemini key, scans would just randomly fail with no real pattern whenever enough people were hitting it at once. Started on the backend side first: instead of letting every incoming scan hit Gemini immediately, I added a little queue that only lets 2 requests be in-flight to Gemini at a time, and everything else waits its turn. Next step is getting it to actually retry instead of just failing after the wait, but that’s for the next devlog."}, {"post_id": 60344, "ts": "2026-09-02T16:57:27Z", "hours": 7.4197, "text": "Devlog #14 -> Part 5 of 5 Finally! This final devlog is about the small tweaks I made in the app. I made it have a new photo Small one, just swapped out one of the app’s images for something more current since the old one was from way back in devlog #1 and didn’t really represent what the app looks like anymore. Nothing technical here, just housekeeping. It kinda works offline I say “kinda” because this isn’t a real offline mode where you can browse cached data with no internet, it’s more like the app now knows when it’s offline and fails fast instead of just hanging. Basically, I added a ConnectivityCheck helper that on web reads navigator.onLine (a free, instant, synchronous browser check for whether the device has a network interface up) so if you’re in airplane mode or your wifi is off, the AI scan screens can immediately say “can’t use this when offline” instead of sitting there for a full request timeout before failing. On native platforms there’s no real equivalent without pulling in a whole new plugin like connectivity_plus, so I just made the stub always report “online” there — an actually-offline phone still gets caught by the AI request’s own timeout/retry handling, just without the instant fail I get on web. One thing worth noting: this only checks if the device thinks it has a network connection, not whether that network actually has working internet behind it. So a wifi network that’s connected but dead will still say “online” here. That case still gets caught eventually, just the slower way through the request timeout instead of instantly. Good enough for now though, this was mostly about killing the most common case of someone trying to scan with their phone in airplane mode and just watching the app hang. I changed the load in screen Went back and reworked the loading screen from devlog #5. It’s now a plain CSS screen sitting directly in index.html instead of living inside the Flutter app itself, which means it can actually paint the instant the page loads, before Flutter has even finished downloading and booting up. That was the whole point: the old version technically only appeared once Flutter itself was far enough along to render it, so there was still a blank/white flash before it. Now there’s a little animated wordmark and spinner (the spinner’s colored arc cycles through the same colors as the logo letters) that fades out and removes itself once Flutter fires its first real frame. While I was in there I also fixed something unrelated but annoying: Flutter’s web service worker by default waits to activate a new version until every open instance of the app is fully closed, which for something people add to their home screen basically never happens naturally. So people could keep opening an old cached version of the app for a long time after I’d pushed updates. Added a bit of JS to force any newly installed service worker to skip that wait and take over immediately (reloading the page once it does), so the next time someone opens the app after I ship something, they actually get it. And that’s it, I’m all caught up! Five devlogs in one sitting was a lot, but future updates should go back to being posted as I actually build them instead of in one giant backlog dump. Current problems / what’s next: Low MongoDB storage for free account Releasing the app (onto chief delphi to get feedback)!! Making it ready to release (working on the ? and report button) Future ideas: team tracker, public chat for teams, judging/interview prep tool, callout tool, round robin generator View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 59335, "ts": "2026-09-01T02:11:53Z", "hours": 9.7772, "text": "Devlog #13 -> Part 4 of 5 Continuing from #12: more on the match center, mostly the stuff that actually broke on me. Biggest bug of the bunch: on the Events tab, tapping into an event was supposed to show “scheduled to attend” info and the competing teams list, but both of those sections would just spin forever, no error, nothing. I assumed it was a network timing issue at first and went down a whole rabbit hole adding timeouts and retry logic that did absolutely nothing. Turns out the actual problem was way dumber: when I pushed the EventDetailScreen with Navigator.push, that screen gets placed in the Overlay as a sibling of the tab tree, not a child of it, meaning it’s NOT under my MatchScope anymore. So the second that screen tried to call MatchScope.of(context), it threw an assertion error immediately, before initState even got the chance to call setState and load anything. The spinner wasn’t stuck because of a slow network, it was stuck because the load call never even ran. Fixed it by just re-wrapping the pushed route in its own MatchScope using the same controller instance. Felt very silly once I found it, but also weirdly satisfying to finally understand. Next was the matchup simulator and win probabilities. On the schedule screen I show a rough “Red 45% / Blue 55%” prediction for each match. My first instinct was to use each event’s own OPR for this, but that falls apart for upcoming events since OPR doesn’t exist until a team has actually played a match there. So instead I based predictions on the season-wide World Rating from the Stats tab (average points across every event a team’s played all season), which actually gives predictions even for a event that hasn’t started yet. Also went back and hooked the push notification bell (from devlog #11) directly into the match center’s top bar now that there’s finally a “your team” + “your event” to actually attach a subscription to. There’s a little pulsing glow animation on the bell the first time you land on a screen where you could enable alerts, just so people notice it’s there instead of it blending into the top bar. Took way too many attempts to get the glow animation timing feeling smooth and not epileptic-seizure-inducing, but I think I landed on something decent. Genuinely didn’t expect the 4th app to take this many devlogs but here we are. One more to wrap up some small stuff and then I think I’m caught up! View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 58655, "ts": "2026-08-31T04:34:12Z", "hours": 9.4486, "text": "Devlog #12 -> Part 3 of 5 Okay, actual 4th app time: Team Stats & Match Center (internally I’ve just been calling it “match” in the code, so if you dig around the file names that’s why). I started by mocking everything out before touching any real API, just so I could get the UI feeling right first. Made an intro screen (basically pitching the three features: match alerts, team stats, matchup simulator) and a fake mockTeams list with made-up EPA numbers just so I had something to look at while building. Once the layout felt right, I started swapping the fake data for real stuff from The Blue Alliance’s API, proxied through my backend the same way I already had set up for the FRC Events API (so I’m not spamming TBA directly from a bunch of client apps and to keep my API key private). Architecture-wise, I did something different from my other three apps: instead of passing state down through a million constructor params, I made a MatchDataController (basically one class holding all the team/event/match data + loading state) and wrapped the whole feature in a MatchScope, which is just an InheritedNotifier. So anywhere in the match center I can just call MatchScope.of(context) and get the controller without threading it through every single widget. Probably overkill for how big this feature ended up being, but once I had 4 tabs and a handful of sub-screens all needing the same data, I was really glad I did it this way instead of my usual pass-everything-into-the-constructor approach. Speaking of tabs, I split it into 4: My Team -> your team’s own info/next match Stats -> a season-wide “World Rating” I calculate from aggregating TBA’s OPR data across events (this was its own whole thing, might do a separate devlog on it someday) Events -> browse every FRC event, filter by time or location, see who’s live right now Sim -> the matchup simulator I keep promising Getting match data to actually parse right from TBA’s JSON took a minute (comp levels like qm/qf/sf/f needed their own label logic, predicted_time vs actual_time needed fallback logic since actual_time barely ever gets posted until after the match is already over, that kind of thing) but nothing too crazy, just tedious model-writing. Devlog #13 is basically a straight continuation of this one, mostly bug stories and the simulator, so be ready for that. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 55760, "ts": "2026-08-27T19:05:53Z", "hours": 4.8611, "text": "Devlog #11 -> Part 2 of 5 Now for the second devlog, I am going to talk about how I got notifications to work. This is the one that ate my week. So the goal: when a match is coming up for a team you bookmarked, get a push notification even if the app/tab isn’t open. That last part is the whole problem, because it means I can’t just pop a normal in-app alert, I actually need real browser push notifications, which meant learning a whole new stack: service workers, VAPID keys, and the Push API. Here’s roughly how it works now ->Subscribe -> user picks a team number + event key, the app asks the browser for notification permission, and if granted it registers a push subscription through the service worker using my VAPID public key. Send to backend -> that subscription (plus team number/event key) gets sent to my Express backend and stored in MongoDB. Actually sending them -> the backend uses the web-push npm package to send the push whenever it detects a match coming up for that team. Getting the Flutter side to talk to any of this was its own adventure, since none of this exists as a nice Dart package, so I had to write a JS interop layer (basically a matchPush object in plain JS that Dart calls into) and wire it up through the same conditional-export trick I used for the guided camera: one file for web, one stub file that just says “unsupported” for native, so the app doesn’t explode on phone builds while I haven’t built native push yet. Problems I ran into (there were many) ->iOS Safari straight up does not support web push at all unless the site has been added to the home screen first. So right now notifications basically only work reliably on desktop browsers and Android, and I have to eventually explain that to iOS users somehow. Permission requests have the same “must be triggered by a direct tap” rule I fought with on the guided camera, so subscribing has to happen from an actual button press, no auto-subscribing on load. Debugging this was rough because half the errors happen silently in the service worker, not in the normal Flutter console, so I was stuck adding console.logs into push.js and checking devtools like a caveman for a while.It works now though! Bookmark a team, subscribe, and you’ll get pinged. Native (phone-installed) push notifications are still a “later” problem since that needs a totally different setup (probably Firebase Cloud Messaging), so for now the stub just returns unsupported on native and I’m keeping my scope to web. Two devlogs about the 4th app itself coming up next, promise. View it here: https://mirage54321.github.io/RoboLens/ P.S. For right now there are 3 notifications that send for iOS I plan to change that though!"}, {"post_id": 54198, "ts": "2026-08-25T02:42:40Z", "hours": 8.6025, "text": "Devlog #10 -> Part 1 of 5 Please don’t hurt me, but I have to post multiple devlogs because I worked on so many things in all this time. It’s a lot of stuff to talk about and I don’t want to write it all into one because it will be super unorganized and hard for me to find in the future. In this first devlog, I am going to talk about how I got bookmarks to work. The idea came from thinking ahead to the match notifier. If someone wants alerts for a match, they need a way to say “these are the teams I care about” without having to retype a team number every single time. So I added a bookmark system using shared_preferences (just storing a list of team numbers locally on the device/browser). You can now star a team from a few places in the app and it’ll save to your bookmarks list, which I’m planning to hook the notifier into so it can just loop through your saved teams instead of asking you every time. This one was honestly pretty painless compared to my usual chaos. The only annoying part was making sure the bookmarked list actually persisted correctly on web (learned my lesson from the MongoDB flutter-web thing, so I tested this one on both platforms before moving on lol). Turns out shared_preferences just works with local storage under the hood on web, so no weird surprises this time. Short devlog, I know, but wait till you see what devlog #11 turned into. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 49268, "ts": "2026-08-17T23:33:09Z", "hours": 6.1139, "text": "Devlog #9 -> Okay, so getting the report button to work was a little finicky. I wasn’t sure what approach to take: I could make it easy by just sending me the reported things and I could look at them and just change the prompt, or I could make it difficult by just feeding every single reported issue back into the AI model so that the AI tries to not make the same mistake (which might be a problem because someone could report something that was actually right), or make it VERY difficult make it feed back into the AI if a similar issues were coming up again and again. Guess which one I chose? Yup, the third. Basically, I decided to store the reports in MongoDB and look for recurring mistakes instead of letting a single report change the AI. That way, if one person reports something incorrectly, it doesn’t immediately affect everyone else’s scans. If the same type of mistake keeps getting reported, I can investigate it and use those reports to improve the AI.This seems really complex, and it was. It took me 4 hours (it says 6 on the devlog but 2 of them was working on the 4th app). Alright, ready for my fourth widget idea………. a match notifier!! Now don’t get too excited. I have more to tell. So, every FRC kid knows that there’s a website called Nexus that sends messages for when your game is going to start so you can get in queue, and it works really well. There’s also this thing I came across called statbotics, and it calculates many things like EPA, and more (I didn’t really stay on that website for too long). So, what I plan to do is combine them. Hopefully, I’m not getting myself into too much of a challenge. This will most definitely be the hardest thing I have ever done on this app. Wish me luck! P.S. I started making the fourth widget before the report button then switched to finish the report button halfway so if you see my commits in a confusing order that’s why. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 43541, "ts": "2026-08-08T21:26:06Z", "hours": 0.3608, "text": "Devlog #8 -> Part 2/2 (part 2 of this devlog) I also posted my app onto reddit (r/FRC) and got some feedback. From the feedback, I got the message that an AI scanner can’t be all that reliable/useful without a user-end customization. I totally agree with this. The problem is that I’m not sure if it is worth it to spend time on adding in customization tools for the AI as there is not a lot of return from it. Therefore, I think that right now the AI’s are at the best product they can be as of now (besides adding functionality to the report button). So, my time would be better spent adding in more apps into the app. On the bright side, there were lots of positive reviews about the battery section! I am now going to work on the report button for the UI because I think it will take less time to add than adding a fourth app. In my next post, I will have a confirmed idea for the fourth app! Things to work on: Low MongoDB storage for free account Report button on the UI needs to feed into the AI ⭐ (Going to do this first because it is easier) Find solution for Render (takes a long time to power on and first time you try to do anything it always fails) Adding fourth ‘app’ ⭐⭐ View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 43529, "ts": "2026-08-08T21:02:52Z", "hours": 6.3211, "text": "Devlog #7 -> Part 2/2 (but part 1 of this devlog) Okay. This was very annoying to work on because every single time I would edit the code, I would have to recommit in order to see it on the github pages (because the permissions wouldn’t work on the flutter web-server). So, getting the guided camera working on web brought a whole lot of browser-specific issues that don’t show up on native mobile. First, the app would hang on a black loading screen because permission_handler and frame streaming aren’t supported in browsers. I then fixed that by branching on kIsWeb to skip those native-only calls and let the browser’s own getUserMedia prompt handle camera access instead.Next, iOS Safari blocked the camera request outright because it requires permission calls to fire directly from a user tap with no delay -> solved by gating the whole flow behind an explicit “Enable Camera” button instead of auto-starting on page load. Since camera_web doesn’t support live frame streaming and sensors_plus doesn’t handle iOS’s motion permission prompt, live guidance (tilt, brightness, sharpness) had to be rebuilt from scratch for web: a custom JS-interop layer (WebProbe) draws each video frame onto a hidden canvas to sample brightness/sharpness, and separately requests iOS’s DeviceMotionEvent permission to read tilt.That introduced two more subtle bugs (a Dart generics issue causing a null-cast crash in the interop code, and a timing issue where the element wasn’t in the DOM yet when we went looking for it) both fixed with explicit type arguments and a retry loop. With all of that sorted, the guided camera now works consistently across native and web, with live tilt/lighting/sharpness feedback and autocapture. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 37868, "ts": "2026-07-30T20:50:16Z", "hours": 4.4522, "text": "Devlog #6 -> Part 1/2 Hey! I know it has been awhile since I worked on my project (adding the guided camera has been taking a lot of will power), but I have a new update. I have added the guided camera to the scan screen (which I will add to the rules screen too after it is finished). The process that the guided camera uses is: Startup -> requests camera permission immediately for phone usage (permission_handler) or waits for a tap on “Enable Camera” first for browser usage. Camera setup -> fetches available cameras (from Flutter’s camera plugin), picks the back-facing one (falls back to the first available camera on the device if no back camera is found), sets resolution to high on phone or medium on browser (since browsers often reject high-res requests), then calls initialize() to start the live preview. Manual fallback for taking photos -> the shutter button is always available to captures the photo; this is the primary method right now. Capture -> stops the frame stream (phone only), takes the picture, reads the bytes, then returns them to the previous screen via Navigator.pop(context, bytes). An issue I ran into was camera permissions on iPhone Safari. It worked fine on my laptop but wouldn’t work on my phone. I eventually figured out that iPhones are notorious for always requiring explicit permission prompts, so I solved it by requiring the camera request to be triggered by a direct user tap. Basically, I added an “Enable Camera” button on web that only calls the camera setup when tapped, since iOS Safari silently blocks getUserMedia (instead of showing an error) if there’s any delay between the tap and the request. Now I am working on the flutter comments (“too dark”, “focus”, etc.) because right now those aren’t working. Once I get the live guidance to work, then I will be able to implement an auto-capture (that way the photo is taken when at a good angle). View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 29717, "ts": "2026-07-16T20:11:47Z", "hours": 4.3139, "text": "Devlog #5 -> My app now has a load in screen! Yay! I figured it was necessary just to make my whole app look more professional. It was pretty easy (took lots of time though) to add and I didn’t fall into any huge difficulties. Only a mini one because I tried to make the animation in the home screen class and it got chaotic. Once it was its own file it was quite easy because then I just needed to fix up the UI. Look here if you want to learn more about how to do animations in your own project (if using Flutter): https://docs.flutter.dev/ui/animations I also added a very tiny change to the error message for logging in. Instead of saying “Team already registered”, it tells you to contact my email if you cannot access your team. I guess I got really nervous that someone would try to access their team, and if they couldn’t, they would go and put another team’s number and so on indefinitely. Right now, I think this is a good way to fix the issue, but I’ll add a way to report it in the app; that way, the issue can be solved quicker, and you won’t have to send an email to someone. I did have the idea to make it so there is identification of some sort for each team; however, that would just make the app complex, and my whole goal was to have a simple solution to problems. So, if this app actually does really well in the FRC world, I will add some sort of verification; that way lost accounts can be found, and it would just give all-around easier access. Next, I am going to focus on my long put off task: photo to video. I am not sure how I am going to do this, if I am going to be so honest. My idea for it came fom the Smile Doctors invisalign app where it opens up your camera and tells you things like “go to better lighting” or “move to the left”. However, I think that will be super complex and difficult to implement so I might have to start a lot smaller. Best of luck to myself, I guess! List of current tasks: Low MongoDB storage for free account Report button on the UI needs to feed into the AI ⭐ Find solution for Render (takes a long time to power on and first time you try to do anything it always fails) Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) ⭐⭐ View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 28023, "ts": "2026-07-14T00:50:11Z", "hours": 4.6822, "text": "Devlog #4 -> Hey! I have been working on the issues I talked about in my last devlog. So far I have successfully solved one: How I solved “Connenction to MongoDB working for flutter web but not github?” -> The issue was that GitHub Pages is a static hosting service and couldn’t connect directly to MongoDB. Therefore I had to update the application so the GitHub Pages frontend communicates with the Express backend on Render. Basically, I just modified some of the backend configuration like changing (in very very simple terms): fetch(‘/battery’) to something like fetch(‘ https://ridgeboticsapp.onrender.com/battery ’). I also added a ? mark button so that if clicked on it can tell you a little more about the app. Right now, it is just saying some basic things but I plan to show this app to my friends and see what they think I should add to that text in order to help people figure out what is going on if they just found my app. Finally, I fixed an error I wasn’t even aware of: the name finder for each teams batteries. I made it so when you sign up your team, it will try to search up the team name with that FRC number. However, there would be times where I would sign in as my team and it would show up with some random name like “Robo-Knights” or something weird. I think this was related to the Gemini model because I had used it while testing, soincorrect team names could have been stored and reused instead of being verified. To fix this, I connected my backend to the official FRC Events API. Now, the app sends the team’s FRC number to FIRST to retrieve the official team information to then save the verified team name. This prevents teams from accidentally being assigned another team’s name and makes sure the battery data is connected to the correct FRC team. It was never too big of an issue because I could always just edit the names in MongoDB but having it so it says the name right 100% of the time is just much easier for me. Now my new top things to work on are: If team is signed up but you don’t have access to your team Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) Report button working better to fix the AI’s findings View it here: https://mirage54321.github.io/RoboLens/ P.S. If you are trying things out you can sign in as a guest for 4388 and see my teams batteries"}, {"post_id": 24928, "ts": "2026-07-08T20:05:31Z", "hours": 1.5633, "text": "Devlog #3 -> In the past few days I have been working on adding a battery tracker because I believe that it has the potential to be very helpful to FRC teams. Tracking batteries is always a pain for my team, and other teams I’ve connected with can probably agree with that statement. Batteries can randomly fail by not charging or just full-on dying in two minutes. Although one might assume that keeping track of all this is easy, it truly is not. Having a system to hold records and data, I believe, can be very helpful to teams! I’ve added the third tool to the app: a shared battery tracker where a team can log in with a team number and passcode, add batteries, and mark each one as charging, in use, or available. It also lets you flag a battery as weak or unreliable with a note, so if a battery dies mid-match, the whole team can see that history the next time they’re deciding which one to grab. I even added an option for the AI to recommend which battery to use next based on how long it’s been charged and whether it’s been flagged before. My new challenge for this tool has been working with MongoDB. It stores the data fine, but it wasn’t letting me log in (it kept throwing an error). What confused me more is that when I ran it in Flutter web, it worked just fine. This is what I plan to work on for the next few days. To fix my last problem, which was with the AI saying it had spikes in usage, I changed the message to ask the user to try again because it usually works on the try right after. Right now, this is just a temporary solution until I can find a new AI model. List of things to work on: Low MongoDB storage for free account Report button on the UI needs to feed into the AI Find permanant solution for the AI usage Connenction to MongoDB working for flutter web but not github? Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) View it here: https://mirage54321.github.io/RoboLens/ Log in as guest for team 4388 if you just want to view it. P.S. My logged time is glitching out a bunch and I would love if someone could help me in the #stardance-help on slack."}, {"post_id": 23707, "ts": "2026-07-06T20:19:01Z", "hours": 9.0781, "text": "Devlog #2-> Now that I’ve finished the foundation of my project, I can keep adding tools! On my last ship, I realized I should keep more documentation. So be ready for more devlogs going forward! To get a little more comfortable with what I’m doing, I decided to add another AI scanning tool that I have been thinking about: a rules checker. The general scanner already looked for physical problems like wiring and cracks, but I wanted something that could actually check a robot against the official FRC rulebook. So I added the actual PDFs of past FRC game manuals (2024, 2025, and 2026) and let the user pick which season’s rules to check against. That PDF gets fed into the AI alongside the photo, so instead of relying on whatever general FRC knowledge the model already has (which could be outdated or made up), it’s reading the exact rulebook for that year while it looks at the image. Getting the PDF into the AI request in the first place took some figuring out. I had to load it from the app’s assets, converting it into a format the API would actually accept, and making sure it got sent alongside the image without breaking anything. Once it worked though, the difference was noticeable (the AI’s answers started actually referencing real rules instead of guesses). The bigger challenge was AI usage limits. Not “too many messages” though. Instead, it was more that other people using the same free model at the same time meant my requests were competing with everyone else’s. Half the time a scan would go through fine, and the other half it just wouldn’t, with no real pattern I could find. To fix this I… haven’t yet, honestly. Still an open problem :(. Hoping to hear from you guys for some ideas! I’m a little nervous because AI kind of has a negative connotation in FRC. To address that issue, I’m planning to make the whole app not centered around AI so I’ll be adding more tools. Excited to keep going though, because I just started programming my new idea: adding a battery tracker! View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 13860, "ts": "2026-06-22T18:21:53Z", "hours": 4.63, "text": "Devlog #1-> I’ve finished the foundation of my project! The app currently has a simple UI and one AI tool that takes in a photo and tells you what’s wrong with it — whether it’s frayed wiring, loose screws, cracked/bent frames, or corrosion. Goal of my project: cut down the time it takes to find an issue so an FRC team has more time to actually fix the problem, and flag problems a human might miss during a rushed pit-stop check. Working with Flutter to program the UI wasn’t too bad. I’ve always been used to Java and JavaScript, so although Dart isn’t exactly the same, I picked it up pretty fast. I had the most difficulty implementing the AI. I started with an Ollama model, but it was way too slow — it would time out before it ever finished telling me what it noticed in the photo. I then found out Google lets you use a free Gemini model, so I got an API key for that and added it in. The new problem: every time I published my app as a GitHub Page, the API key would get disabled because it wasn’t safe sitting in client-side code. I finally learned the key needs to live on a backend to actually be secure, so I set one up using Render. I’m so proud of how my project is looking so far! Next up, I plan to add more tools, like a rules scanner."}]...
|
Title: Robotics RoboLens by @mira_j_maroni | Stard Title: Robotics RoboLens by @mira_j_maroni | Stardance
Devlogs:
Devlog #1-> I’ve finished the foundation of my project! The app currently has a simple UI and one AI tool that takes in a photo and tells you what’s wrong with it — whether it’s frayed wiring, loose screws, cracked/bent frames, or corrosion. Goal of my project: cut down the time it takes to find an issue so an FRC team has more time to actually fix the problem, and flag problems a human might miss during a rushed pit-stop check. Working with Flutter to program the UI wasn’t too bad. I’ve always been used to Java and JavaScript, so although Dart isn’t exactly the same, I picked it up pretty fast. I had the most difficulty implementing the AI. I started with an Ollama model, but it was way too slow — it would time out before it ever finished telling me what it noticed in the photo. I then found out Google lets you use a free Gemini model, so I got an API key for that and added it in. The new problem: every time I published my app as a GitHub Page, the API key would get disabled because it wasn’t safe sitting in client-side code. I finally learned the key needs to live on a backend to actually be secure, so I set one up using Render. I’m so proud of how my project is looking so far! Next up, I plan to add more tools, like a rules scanner.
Devlog #2-> Now that I’ve finished the foundation of my project, I can keep adding tools! On my last ship, I realized I should keep more documentation. So be ready for more devlogs going forward! To get a little more comfortable with what I’m doing, I decided to add another AI scanning tool that I have been thinking about: a rules checker. The general scanner already looked for physical problems like wiring and cracks, but I wanted something that could actually check a robot against the official FRC rulebook. So I added the actual PDFs of past FRC game manuals (2024, 2025, and 2026) and let the user pick which season’s rules to check against. That PDF gets fed into the AI alongside the photo, so instead of relying on whatever general FRC knowledge the model already has (which could be outdated or made up), it’s reading the exact rulebook for that year while it looks at the image. Getting the PDF into the AI request in the first place took some figuring out. I had to load it from the app’s assets, converting it into a format the API would actually accept, and making sure it got sent alongside the image without breaking anything. Once it worked though, the difference was noticeable (the AI’s answers started actually referencing real rules instead of guesses). The bigger challenge was AI usage limits. Not “too many messages” though. Instead, it was more that other people using the same free model at the same time meant my requests were competing with everyone else’s. Half the time a scan would go through fine, and the other half it just wouldn’t, with no real pattern I could find. To fix this I… haven’t yet, honestly. Still an open problem :(. Hoping to hear from you guys for some ideas! I’m a little nervous because AI kind of has a negative connotation in FRC. To address that issue, I’m planning to make the whole app not centered around AI so I’ll be adding more tools. Excited to keep going though, because I just started programming my new idea: adding a battery tracker! View it here: https://mirage54321.github.io/RoboLens/
Devlog #3 -> In the past few days I have been working on adding a battery tracker because I believe that it has the potential to be very helpful to FRC teams. Tracking batteries is always a pain for my team, and other teams I’ve connected with can probably agree with that statement. Batteries can randomly fail by not charging or just full-on dying in two minutes. Although one might assume that keeping track of all this is easy, it truly is not. Having a system to hold records and data, I believe, can be very helpful to teams! I’ve added the third tool to the app: a shared battery tracker where a team can log in with a team number and passcode, add batteries, and mark each one as charging, in use, or available. It also lets you flag a battery as weak or unreliable with a note, so if a battery dies mid-match, the whole team can see that history the next time they’re deciding which one to grab. I even added an option for the AI to recommend which battery to use next based on how long it’s been charged and whether it’s been flagged before. My new challenge for this tool has been working with MongoDB. It stores the data fine, but it wasn’t letting me log in (it kept throwing an error). What confused me more is that when I ran it in Flutter web, it worked just fine. This is what I plan to work on for the next few days. To fix my last problem, which was with the AI saying it had spikes in usage, I changed the message to ask the user to try again because it usually works on the try right after. Right now, this is just a temporary solution until I can find a new AI model. List of things to work on: Low MongoDB storage for free account Report button on the UI needs to feed into the AI Find permanant solution for the AI usage Connenction to MongoDB working for flutter web but not github? Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) View it here: https://mirage54321.github.io/RoboLens/ Log in as guest for team 4388 if you just want to view it. P.S. My logged time is glitching out a bunch and I would love if someone could help me in the #stardance-help on slack.
Devlog #4 -> Hey! I have been working on the issues I talked about in my last devlog. So far I have successfully solved one: How I solved “Connenction to MongoDB working for flutter web but not github?” -> The issue was that GitHub Pages is a static hosting service and couldn’t connect directly to MongoDB. Therefore I had to update the application so the GitHub Pages frontend communicates with the Express backend on Render. Basically, I just modified some of the backend configuration like changing (in very very simple terms): fetch(‘/battery’) to something like fetch(‘ https://ridgeboticsapp.onrender.com/battery ’). I also added a ? mark button so that if clicked on it can tell you a little more about the app. Right now, it is just saying some basic things but I plan to show this app to my friends and see what they think I should add to that text in order to help people figure out what is going on if they just found my app. Finally, I fixed an error I wasn’t even aware of: the name finder for each teams batteries. I made it so when you sign up your team, it will try to search up the team name with that FRC number. However, there would be times where I would sign in as my team and it would show up with some random name like “Robo-Knights” or something weird. I think this was related to the Gemini model because I had used it while testing, soincorrect team names could have been stored and reused instead of being verified. To fix this, I connected my backend to the official FRC Events API. Now, the app sends the team’s FRC number to FIRST to retrieve the official team information to then save the verified team name. This prevents teams from accidentally being assigned another team’s name and makes sure the battery data is connected to the correct FRC team. It was never too big of an issue because I could always just edit the names in MongoDB but having it so it says the name right 100% of the time is just much easier for me. Now my new top things to work on are: If team is signed up but you don’t have access to your team Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) Report button working better to fix the AI’s findings View it here: https://mirage54321.github.io/RoboLens/ P.S. If you are trying things out you can sign in as a guest for 4388 and see my teams batteries
Devlog #5 -> My app now has a load in screen! Yay! I figured it was necessary just to make my whole app look more professional. It was pretty easy (took lots of time though) to add and I didn’t fall into any huge difficulties. Only a mini one because I tried to make the animation in the home screen class and it got chaotic. Once it was its own file it was quite easy because then I just needed to fix up the UI. Look here if you want to learn more about how to do animations in your own project (if using Flutter): https://docs.flutter.dev/ui/animations I also added a very tiny change to the error message for logging in. Instead of saying “Team already registered”, it tells you to contact my email if you cannot access your team. I guess I got really nervous that someone would try to access their team, and if they couldn’t, they would go and put another team’s number and so on indefinitely. Right now, I think this is a good way to fix the issue, but I’ll add a way to report it in the app; that way, the issue can be solved quicker, and you won’t have to send an email to someone. I did have the idea to make it so there is identification of some sort for each team; however, that would just make the app complex, and my whole goal was to have a simple solution to problems. So, if this app actually does really well in the FRC world, I will add some sort of verification; that way lost accounts can be found, and it would just give all-around easier access. Next, I am going to focus on my long put off task: photo to video. I am not sure how I am going to do this, if I am going to be so honest. My idea for it came fom the Smile Doctors invisalign app where it opens up your camera and tells you things like “go to better lighting” or “move to the left”. However, I think that will be super complex and difficult to implement so I might have to start a lot smaller. Best of luck to myself, I guess! List of current tasks: Low MongoDB storage for free account Report button on the UI needs to feed into the AI ⭐ Find solution for Render (takes a long time to power on and first time you try to do anything it always fails) Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) ⭐⭐ View it here: https://mirage54321.github.io/RoboLens/
Devlog #6 -> Part 1/2 Hey! I know it has been awhile since I worked on my project (adding the guided camera has been taking a lot of will power), but I have a new update. I have added the guided camera to the scan screen (which I will add to the rules screen too after it is finished). The process that the guided camera uses is: Startup -> requests camera permission immediately for phone usage (permission_handler) or waits for a tap on “Enable Camera” first for browser usage. Camera setup -> fetches available cameras (from Flutter’s camera plugin), picks the back-facing one (falls back to the first available camera on the device if no back camera is found), sets resolution to high on phone or medium on browser (since browsers often reject high-res requests), then calls initialize() to start the live preview. Manual fallback for taking photos -> the shutter button is always available to captures the photo; this is the primary method right now. Capture -> stops the frame stream (phone only), takes the picture, reads the bytes, then returns them to the previous screen via Navigator.pop(context, bytes). An issue I ran into was camera permissions on iPhone Safari. It worked fine on my laptop but wouldn’t work on my phone. I eventually figured out that iPhones are notorious for always requiring explicit permission prompts, so I solved it by requiring the camera request to be triggered by a direct user tap. Basically, I added an “Enable Camera” button on web that only calls the camera setup when tapped, since iOS Safari silently blocks getUserMedia (instead of showing an error) if there’s any delay between the tap and the request. Now I am working on the flutter comments (“too dark”, “focus”, etc.) because right now those aren’t working. Once I get the live guidance to work, then I will be able to implement an auto-capture (that way the photo is taken when at a good angle). View it here: https://mirage54321.github.io/RoboLens/
Devlog #7 -> Part 2/2 (but part 1 of this devlog) Okay. This was very annoying to work on because every single time I would edit the code, I would have to recommit in order to see it on the github pages (because the permissions wouldn’t work on the flutter web-server). So, getting the guided camera working on web brought a whole lot of browser-specific issues that don’t show up on native mobile. First, the app would hang on a black loading screen because permission_handler and frame streaming aren’t supported in browsers. I then fixed that by branching on kIsWeb to skip those native-only calls and let the browser’s own getUserMedia prompt handle camera access instead.Next, iOS Safari blocked the camera request outright because it requires permission calls to fire directly from a user tap with no delay -> solved by gating the whole flow behind an explicit “Enable Camera” button instead of auto-starting on page load. Since camera_web doesn’t support live frame streaming and sensors_plus doesn’t handle iOS’s motion permission prompt, live guidance (tilt, brightness, sharpness) had to be rebuilt from scratch for web: a custom JS-interop layer (WebProbe) draws each video frame onto a hidden canvas to sample brightness/sharpness, and separately requests iOS’s DeviceMotionEvent permission to read tilt.That introduced two more subtle bugs (a Dart generics issue causing a null-cast crash in the interop code, and a timing issue where the element wasn’t in the DOM yet when we went looking for it) both fixed with explicit type arguments and a retry loop. With all of that sorted, the guided camera now works consistently across native and web, with live tilt/lighting/sharpness feedback and autocapture. View it here: https://mirage54321.github.io/RoboLens/
Devlog #8 -> Part 2/2 (part 2 of this devlog) I also posted my app onto reddit (r/FRC) and got some feedback. From the feedback, I got the message that an AI scanner can’t be all that reliable/useful without a user-end customization. I totally agree with this. The problem is that I’m not sure if it is worth it to spend time on adding in customization tools for the AI as there is not a lot of return from it. Therefore, I think that right now the AI’s are at the best product they can be as of now (besides adding functionality to the report button). So, my time would be better spent adding in more apps into the app. On the bright side, there were lots of positive reviews about the battery section! I am now going to work on the report button for the UI because I think it will take less time to add than adding a fourth app. In my next post, I will have a confirmed idea for the fourth app! Things to work on: Low MongoDB storage for free account Report button on the UI needs to feed into the AI ⭐ (Going to do this first because it is easier) Find solution for Render (takes a long time to power on and first time you try to do anything it always fails) Adding fourth ‘app’ ⭐⭐ View it here: https://mirage54321.github.io/RoboLens/
Devlog #9 -> Okay, so getting the report button to work was a little finicky. I wasn’t sure what approach to take: I could make it easy by just sending me the reported things and I could look at them and just change the prompt, or I could make it difficult by just feeding every single reported issue back into the AI model so that the AI tries to not make the same mistake (which might be a problem because someone could report something that was actually right), or make it VERY difficult make it feed back into the AI if a similar issues were coming up again and again. Guess which one I chose? Yup, the third. Basically, I decided to store the reports in MongoDB and look for recurring mistakes instead of letting a single report change the AI. That way, if one person reports something incorrectly, it doesn’t immediately affect everyone else’s scans. If the same type of mistake keeps getting reported, I can investigate it and use those reports to improve the AI.This seems really complex, and it was. It took me 4 hours (it says 6 on the devlog but 2 of them was working on the 4th app). Alright, ready for my fourth widget idea………. a match notifier!! Now don’t get too excited. I have more to tell. So, every FRC kid knows that there’s a website called Nexus that sends messages for when your game is going to start so you can get in queue, and it works really well. There’s also this thing I came across called statbotics, and it calculates many things like EPA, and more (I didn’t really stay on that website for too long). So, what I plan to do is combine them. Hopefully, I’m not getting myself into too much of a challenge. This will most definitely be the hardest thing I have ever done on this app. Wish me luck! P.S. I started making the fourth widget before the report button then switched to finish the report button halfway so if you see my commits in a confusing order that’s why. View it here: https://mirage54321.github.io/RoboLens/
Devlog #10 -> Part 1 of 5 Please don’t hurt me, but I have to post multiple devlogs because I worked on so many things in all this time. It’s a lot of stuff to talk about and I don’t want to write it all into one because it will be super unorganized and hard for me to find in the future. In this first devlog, I am going to talk about how I got bookmarks to work. The idea came from thinking ahead to the match notifier. If someone wants alerts for a match, they need a way to say “these are the teams I care about” without having to retype a team number every single time. So I added a bookmark system using shared_preferences (just storing a list of team numbers locally on the device/browser). You can now star a team from a few places in the app and it’ll save to your bookmarks list, which I’m planning to hook the notifier into so it can just loop through your saved teams instead of asking you every time. This one was honestly pretty painless compared to my usual chaos. The only annoying part was making sure the bookmarked list actually persisted correctly on web (learned my lesson from the MongoDB flutter-web thing, so I tested this one on both platforms before moving on lol). Turns out shared_preferences just works with local storage under the hood on web, so no weird surprises this time. Short devlog, I know, but wait till you see what devlog #11 turned into. View it here: https://mirage54321.github.io/RoboLens/
Devlog #11 -> Part 2 of 5 Now for the second devlog, I am going to talk about how I got notifications to work. This is the one that ate my week. So the goal: when a match is coming up for a team you bookmarked, get a push notification even if the app/tab isn’t open. That last part is the whole problem, because it means I can’t just pop a normal in-app alert, I actually need real browser push notifications, which meant learning a whole new stack: service workers, VAPID keys, and the Push API. Here’s roughly how it works now ->Subscribe -> user picks a team number + event key, the app asks the browser for notification permission, and if granted it registers a push subscription through the service worker using my VAPID public key. Send to backend -> that subscription (plus team number/event key) gets sent to my Express backend and stored in MongoDB. Actually sending them -> the backend uses the web-push npm package to send the push whenever it detects a match coming up for that team. Getting the Flutter side to talk to any of this was its own adventure, since none of this exists as a nice Dart package, so I had to write a JS interop layer (basically a matchPush object in plain JS that Dart calls into) and wire it up through the same conditional-export trick I used for the guided camera: one file for web, one stub file that just says “unsupported” for native, so the app doesn’t explode on phone builds while I haven’t built native push yet. Problems I ran into (there were many) ->iOS Safari straight up does not support web push at all unless the site has been added to the home screen first. So right now notifications basically only work reliably on desktop browsers and Android, and I have to eventually explain that to iOS users somehow. Permission requests have the same “must be triggered by a direct tap” rule I fought with on the guided camera, so subscribing has to happen from an actual button press, no auto-subscribing on load. Debugging this was rough because half the errors happen silently in the service worker, not in the normal Flutter console, so I was stuck adding console.logs into push.js and checking devtools like a caveman for a while.It works now though! Bookmark a team, subscribe, and you’ll get pinged. Native (phone-installed) push notifications are still a “later” problem since that needs a totally different setup (probably Firebase Cloud Messaging), so for now the stub just returns unsupported on native and I’m keeping my scope to web. Two devlogs about the 4th app itself coming up next, promise. View it here: https://mirage54321.github.io/RoboLens/ P.S. For right now there are 3 notifications that send for iOS I plan to change that though!
Devlog #12 -> Part 3 of 5 Okay, actual 4th app time: Team Stats & Match Center (internally I’ve just been calling it “match” in the code, so if you dig around the file names that’s why). I started by mocking everything out before touching any real API, just so I could get the UI feeling right first. Made an intro screen (basically pitching the three features: match alerts, team stats, matchup simulator) and a fake mockTeams list with made-up EPA numbers just so I had something to look at while building. Once the layout felt right, I started swapping the fake data for real stuff from The Blue Alliance’s API, proxied through my backend the same way I already had set up for the FRC Events API (so I’m not spamming TBA directly from a bunch of client apps and to keep my API key private). Architecture-wise, I did something different from my other three apps: instead of passing state down through a million constructor params, I made a MatchDataController (basically one class holding all the team/event/match data + loading state) and wrapped the whole feature in a MatchScope, which is just an InheritedNotifier. So anywhere in the match center I can just call MatchScope.of(context) and get the controller without threading it through every single widget. Probably overkill for how big this feature ended up being, but once I had 4 tabs and a handful of sub-screens all needing the same data, I was really glad I did it this way instead of my usual pass-everything-into-the-constructor approach. Speaking of tabs, I split it into 4: My Team -> your team’s own info/next match Stats -> a season-wide “World Rating” I calculate from aggregating TBA’s OPR data across events (this was its own whole thing, might do a separate devlog on it someday) Events -> browse every FRC event, filter by time or location, see who’s live right now Sim -> the matchup simulator I keep promising Getting match data to actually parse right from TBA’s JSON took a minute (comp levels like qm/qf/sf/f needed their own label logic, predicted_time vs actual_time needed fallback logic since actual_time barely ever gets posted until after the match is already over, that kind of thing) but nothing too crazy, just tedious model-writing. Devlog #13 is basically a straight continuation of this one, mostly bug stories and the simulator, so be ready for that. View it here: https://mirage54321.github.io/RoboLens/
Devlog #13 -> Part 4 of 5 Continuing from #12: more on the match center, mostly the stuff that actually broke on me. Biggest bug of the bunch: on the Events tab, tapping into an event was supposed to show “scheduled to attend” info and the competing teams list, but both of those sections would just spin forever, no error, nothing. I assumed it was a network timing issue at first and went down a whole rabbit hole adding timeouts and retry logic that did absolutely nothing. Turns out the actual problem was way dumber: when I pushed the EventDetailScreen with Navigator.push, that screen gets placed in the Overlay as a sibling of the tab tree, not a child of it, meaning it’s NOT under my MatchScope anymore. So the second that screen tried to call MatchScope.of(context), it threw an assertion error immediately, before initState even got the chance to call setState and load anything. The spinner wasn’t stuck because of a slow network, it was stuck because the load call never even ran. Fixed it by just re-wrapping the pushed route in its own MatchScope using the same controller instance. Felt very silly once I found it, but also weirdly satisfying to finally understand. Next was the matchup simulator and win probabilities. On the schedule screen I show a rough “Red 45% / Blue 55%” prediction for each match. My first instinct was to use each event’s own OPR for this, but that falls apart for upcoming events since OPR doesn’t exist until a team has actually played a match there. So instead I based predictions on the season-wide World Rating from the Stats tab (average points across every event a team’s played all season), which actually gives predictions even for a event that hasn’t started yet. Also went back and hooked the push notification bell (from devlog #11) directly into the match center’s top bar now that there’s finally a “your team” + “your event” to actually attach a subscription to. There’s a little pulsing glow animation on the bell the first time you land on a screen where you could enable alerts, just so people notice it’s there instead of it blending into the top bar. Took way too many attempts to get the glow animation timing feeling smooth and not epileptic-seizure-inducing, but I think I landed on something decent. Genuinely didn’t expect the 4th app to take this many devlogs but here we are. One more to wrap up some small stuff and then I think I’m caught up! View it here: https://mirage54321.github.io/RoboLens/
Devlog #14 -> Part 5 of 5 Finally! This final devlog is about the small tweaks I made in the app. I made it have a new photo Small one, just swapped out one of the app’s images for something more current since the old one was from way back in devlog #1 and didn’t really represent what the app looks like anymore. Nothing technical here, just housekeeping. It kinda works offline I say “kinda” because this isn’t a real offline mode where you can browse cached data with no internet, it’s more like the app now knows when it’s offline and fails fast instead of just hanging. Basically, I added a ConnectivityCheck helper that on web reads navigator.onLine (a free, instant, synchronous browser check for whether the device has a network interface up) so if you’re in airplane mode or your wifi is off, the AI scan screens can immediately say “can’t use this when offline” instead of sitting there for a full request timeout before failing. On native platforms there’s no real equivalent without pulling in a whole new plugin like connectivity_plus, so I just made the stub always report “online” there — an actually-offline phone still gets caught by the AI request’s own timeout/retry handling, just without the instant fail I get on web. One thing worth noting: this only checks if the device thinks it has a network connection, not whether that network actually has working internet behind it. So a wifi network that’s connected but dead will still say “online” here. That case still gets caught eventually, just the slower way through the request timeout instead of instantly. Good enough for now though, this was mostly about killing the most common case of someone trying to scan with their phone in airplane mode and just watching the app hang. I changed the load in screen Went back and reworked the loading screen from devlog #5. It’s now a plain CSS screen sitting directly in index.html instead of living inside the Flutter app itself, which means it can actually paint the instant the page loads, before Flutter has even finished downloading and booting up. That was the whole point: the old version technically only appeared once Flutter itself was far enough along to render it, so there was still a blank/white flash before it. Now there’s a little animated wordmark and spinner (the spinner’s colored arc cycles through the same colors as the logo letters) that fades out and removes itself once Flutter fires its first real frame. While I was in there I also fixed something unrelated but annoying: Flutter’s web service worker by default waits to activate a new version until every open instance of the app is fully closed, which for something people add to their home screen basically never happens naturally. So people could keep opening an old cached version of the app for a long time after I’d pushed updates. Added a bit of JS to force any newly installed service worker to skip that wait and take over immediately (reloading the page once it does), so the next time someone opens the app after I ship something, they actually get it. And that’s it, I’m all caught up! Five devlogs in one sitting was a lot, but future updates should go back to being posted as I actually build them instead of in one giant backlog dump. Current problems / what’s next: Low MongoDB storage for free account Releasing the app (onto chief delphi to get feedback)!! Making it ready to release (working on the ? and report button) Future ideas: team tracker, public chat for teams, judging/interview prep tool, callout tool, round robin generator View it here: https://mirage54321.github.io/RoboLens/
Devlog #15 -> Part 1 (still working on this one!) Finally started actually tackling the AI usage limit problem from devlog #2. Since everyone using the app shares the same free-tier Gemini key, scans would just randomly fail with no real pattern whenever enough people were hitting it at once. Started on the backend side first: instead of letting every incoming scan hit Gemini immediately, I added a little queue that only lets 2 requests be in-flight to Gemini at a time, and everything else waits its turn. Next step is getting it to actually retry instead of just failing after the wait, but that’s for the next devlog.
Devlog #16 -> Part 2, continuing from #15 Got retries working on top of the queue from last time. If Gemini comes back with a 429 (rate limited) or 503 (overloaded) instead of an actual answer, the backend now waits and tries again automatically, using exponential backoff (2s, then 4s, then 8s) instead of hammering it again right away, up to a few attempts before it actually gives up and reports failure. It also checks for a retry-after header first and uses that instead of the backoff timer if Gemini actually tells us how long to wait. Then I mirrored the same idea on the Flutter side, so if the backend’s retries still aren’t enough, the app itself will retry the whole request a couple more times before showing the user an error.
Devlog #17 -> Part 3, wrapping this one up Last piece was making the retrying actually visible instead of just quietly happening in the background. Before, if a scan was retrying you’d just stare at a spinner with no idea what was going on. Now the loading screen updates to say something like “High demand. Retrying (2/3)…” so people know the app hasn’t frozen, it’s just waiting its turn. Between the queueing, the backoff retries on both ends, and this messaging, this should turn a lot of what used to be “scan failed, try again” moments into just a few extra seconds of waiting instead. Doesn’t make the free tier limit go away entirely, but it’s a big improvement over what I had. Current problems / what’s next: Low MongoDB storage for free account Professionalizing (before putting on Chief Delphi)
Devlog #18 -> Okay, super short devlog just to explain what I am doing. Basically all my hours are spent on fixing the notifications. It is super annoying right now because I am trying to finalize my project and the notifications randomly stop working. I tried clearing out mongoDB and checking on my cron-job and those seem to be working just fine. I’m not sure what to do. I pushed the hours up (for the practice day so I can check it earlier) and redeployed with Render. I shall see tomorrow if it works. View it here: https://mirage54321.github.io/RoboLens/
Devlog #19 -> I know I just committed a bunch the last few days. I guess I realized there is only a few days left and I found how to be way more efficent in getting hours. If I just keep this open and something else on another computer and work with them kinda being different windows then I get a lot more time because the switching of windows in the same computer made me keep forgetting to come back and work on the project (and I’m guessing was cutting the time too). Anywho! The most recent changes I have made is removing the ? mark button. I think I was going for a like “about me” thing but I think it was a little redundant and kind of unneccessary to say the least. I added a report button instead (it’s just in the home page). I got this idea from lovable which was something I worked with during my internship. I highkey have been working so much on this project (you can see by all my hours) that I didn’t want to connect it to the backend. It is just a popout that takes you to an gmail link and you can click send. Maybe if I run out of ideas I can add it as a backend. Now, if I am going to be so honest. I have worked a lot on this project and I want to ship but I also want to just crank out some more hours. I’m extremely proud of this project and I need to get it out to the world so that I can get some users! My issues to work on are: Low MongoDB storage for free account Professionalizing (now just looking back over and seeing if there is anything I wanna fix before putting on chief delphi) View it here: https://mirage54321.github.io/RoboLens/
Notifications are working again! Basically, the rebuilding of Render helped fix the issue which is kind of ragebait. I’m getting a little nervous though because I wonder what happens if someone doesn’t reopen the bookmark (because that is how it resets). Would they still get the messages? Will it update automatically? Overall, it works great. I just worry there may be an error that arises (that is a risk with any project honestly). View it here: https://mirage54321.github.io/RoboLens/
Updates!!! Basically, I’ve been checking to see how many users and views I have. I have google analytics on my project to keep an eye on it. Right now I have 52 users and 163 views. Which honestly, I am pretty dang happy about. (1) I haven’t really been advertising (2) I literally thought it was gonna be like 20 views Woop woop! Okay, now on these past few days I have been working on getting as many hours as possible. I don’t have a personal computer so I am really aiming for literally any of the laptops. Now, programatically I have been working on removing the 3 burst messages for iPhone (it wouldn’t compact itself on the Apple homescreen). FYI: 90% of the time for this was spent removing the 3 burst messages for iPhone and writing Ship #2… so you better be ready for Ship 2! View it here: https://mirage54321.github.io/RoboLens/
Devlog #22 -> I was looking at the comments people left me from my ship and the first thing I noticed that I should work on is the load-in page. It is definitely kind of plain. To be honest, I used Claude to help a lot with this one. Making the spinning circle was pretty easy but I had some complex ideas I wanted to put to work and I just didn’t know how to do it. It has a huge radar that has the colors pop up and says “scounting __ teams”. Overall, I am so happy about this new design! Let me know what you guys think! I also added a folder for the photos so it looks more organized! The next thing I plan to work on “loop crashes if the camera disconnects” comment. Live app: https://mirage54321.github.io/RoboLens/
Devlog #23 -> Fixed the camera disconnect crash from the feedback. Turns out the camera plugin doesn’t actually throw an error when the hardware gets yanked mid-session, it just quietly flips an internal hasError flag and keeps going. Which is why the app was crashing somewhere random instead of failing cleanly. Nothing in my code was listening for that flag, so it just kept trying to read frames and capture photos off a dead controller. Fixed it by adding a listener that actually watches for that error state, cleans everything up, and drops the user onto a proper “Camera disconnected, try again” screen instead of freezing or throwing. Also fixed the retry logic after a failed capture so it doesn’t try to restart a stream on a controller that’s already dead. Next up: the cursor. Someone pointed that out, because every button on web just shows the default arrow. Live app: https://mirage54321.github.io/RoboLens/a
Ships:
I made an app for specifically robotics teams (although this could be used for other things too). This is still a work in progress because there is so much more I want to add. I did this project so that I could make something with an AI model and I’m really proud of myself because Flutter was really hard to work with!
What did I make? Since Ship #1, RoboLens grew from one AI scanner into four connected tools. I added a rules checker that reads the actual FRC game manual (2024–2026) alongside your robot photo so it’s grounded in real rules instead of guessing. I built out a full shared battery tracker. I added a guided camera that walks you through lighting/tilt/framing and auto-captures once the angle looks right. And the biggest addition: a Team Stats & Match Center with four tabs (My Team, Stats, Events, Sim) pulling live data from The Blue Alliance and the FRC Events API, including a season-wide “World Rating,” a matchup simulator with win probabilities, and bookmarking teams to get real push notifications before their matches. I also spent a lot of time on stuff that doesn’t show up as a “feature” but makes the app actually usable: a queue + exponential backoff + retry system so the shared free-tier Gemini key doesn’t randomly fail scans under load, a report button that feeds recurring AI mistakes back into future scans, offline detection so scans fail fast instead of hanging, and a new instant-loading splash screen. What was challenging for me? The AI usage limits were the most persistent problem. Everyone shares one free-tier Gemini key, so scans would fail with no clear pattern whenever enough people hit it at once. I fixed it in stages: first a queue limiting in-flight requests, then automatic retries with backoff (and respecting the retry-after header when Gemini gave one), then finally surfacing that retry status to the user (“High demand. Retrying (2/3)…”) instead of just showing a dead spinner. The guided camera and push notifications both turned into whole rabbit holes of browser-specific pain (iOS Safari blocking camera/notification permissions unless triggered by a direct tap, no live frame streaming on web so I had to build a custom JS-interop layer from scratch, and push not working on iOS at all unless the site’s added to the home screen firs)t. My favorite bug story: the Match Center’s Events tab would spin forever with zero errors. I burned time adding timeouts and retries that did nothing before realizing the real issue. The spinner wasn’t stuck waiting on the network, it was stuck because nothing ever tried. What am I the most proud of? Going from a single-purpose AI scanner to four genuinely useful, connected tools without the codebase turning into spaghetti. I’m also proud that scans now degrade gracefully under load instead of just failing, and that notifications work reliably even though I had zero experience with service workers or VAPID keys before this. And honestly, just sticking with it. 21 devlogs and three months of real iteration based on actual user feedback instead of giving up. What should people know so they can test your project? Live app: https://mirage54321.github.io/RoboLens/ You can log in as a guest for team 4388 to browse batteries without needing an account. Push notifications currently work reliably on desktop browsers and Android (iOS Safari requires the site to be added to your home screen as a bookmark). You can test this by logging into -4388 (Yes, a negative. I needed a number that wouldn’t have a real team). The AI scan/rules tools need a robot photo to test against; if you don’t have one handy, any well-lit photo of mechanical/electrical components will still show you how the flow works....
|
1792875207.636436
|
1793739207.636436
|
|
16183
|
Slackword Bot by @ketchupismm | Stardance
|
ketchupismm
|
2
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T12:56:18Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a dictionary slack app that has 3 functions. Definitions using command, examples are using definitions command, and help command to show all commands. Something that was extremely challenging was adding in the dictionary API and then the GROQ after and had to use ai at the end to help me set up the yes button, polishing my work to be readable, and just small debugging issues like mistypes. I’m really proud of how everything went from learning commands and learning APIs, it’s pretty much my first passion project. The setup is pretty annoying and I’ve tried to explain it as simple as I could in Github when I published it.", "repo": "https://github.com/ketchupismm-cell/Slackword-Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?skip_today=1"}, {"ship_num": 2, "ts": "2026-07-02T01:55:13Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a dictionary slack app that has 3 functions. Definitions using command, examples are using definitions command, and help command to show all commands. Something that was extremely challenging was adding in the dictionary API and then the GROQ after and had to use ai at the end to help me set up the yes button, polishing my work to be readable, and just small debugging issues like mistypes. I’m really proud of how everything went from learning commands and learning APIs, it’s pretty much my first passion project. The setup is pretty annoying and I’ve tried to explain it as simple as I could in Github when I published it.", "repo": "https://github.com/ketchupismm-cell/Slackword-Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?skip_today=1"}]...
|
[{"post_id": 25926, "ts": "202 [{"post_id": 25926, "ts": "2026-07-10T12:55:41Z", "hours": 0.4089, "text": "For my bot, I have two commands and one feature on my slackword app. /slackword-define, /slackword-help the one feature is the examples when you click the yes button when you use the define command"}, {"post_id": 20455, "ts": "2026-07-02T01:37:45Z", "hours": 1.4642, "text": "I published my work into Github, run it on Nest and as a systemd service"}, {"post_id": 19768, "ts": "2026-07-01T04:47:37Z", "hours": 2.0594, "text": "Finally finished up with adding in exemplar button after definition command is used and took a while to polish everything Planning to add on other commands such as daily word tomorrow"}, {"post_id": 19546, "ts": "2026-06-30T21:24:32Z", "hours": 2.3167, "text": "I added GROQ as a LLM for special-nouns"}, {"post_id": 18822, "ts": "2026-06-30T00:54:20Z", "hours": 1.9583, "text": "Working on cleaning code and adding additional features to definitions"}]...
|
Title: Slackword Bot by @ketchupismm | Stardance
Title: Slackword Bot by @ketchupismm | Stardance
Devlogs:
Working on cleaning code and adding additional features to definitions
I added GROQ as a LLM for special-nouns
Finally finished up with adding in exemplar button after definition command is used and took a while to polish everything Planning to add on other commands such as daily word tomorrow
I published my work into Github, run it on Nest and as a systemd service
For my bot, I have two commands and one feature on my slackword app. /slackword-define, /slackword-help the one feature is the examples when you click the yes button when you use the define command
Ships:
I made a dictionary slack app that has 3 functions. Definitions using command, examples are using definitions command, and help command to show all commands. Something that was extremely challenging was adding in the dictionary API and then the GROQ after and had to use ai at the end to help me set up the yes button, polishing my work to be readable, and just small debugging issues like mistypes. I’m really proud of how everything went from learning commands and learning APIs, it’s pretty much my first passion project. The setup is pretty annoying and I’ve tried to explain it as simple as I could in Github when I published it.
I made a dictionary slack app that has 3 functions. Definitions using command, examples are using definitions command, and help command to show all commands. Something that was extremely challenging was adding in the dictionary API and then the GROQ after and had to use ai at the end to help me set up the yes button, polishing my work to be readable, and just small debugging issues like mistypes. I’m really proud of how everything went from learning commands and learning APIs, it’s pretty much my first passion project. The setup is pretty annoying and I’ve tried to explain it as simple as I could in Github when I published it....
|
1792828134.703174
|
1792914534.703174
|
|
16300
|
EpochOS by @Mokila | Stardance
|
Mokila
|
2
|
119.0
|
2078
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T09:43:03Z", "hours": 112.0, "multiplier": 19.26, "payout": 2078, "blessing": "neutral", "text": "EpochOS is a fully functional operating system built entirely with vanilla JavaScript, HTML, and CSS. It doesnt require any client side installations or anything and runs directly in your browser. Its features include a file explorer, a browser, a media player, many essential applications, lots of customisation, widgets, and an actual ecosystem that mimics a real operating system. It also has no backend so it’s all run locally on your browser using the browser’s localStorage. Some things you should know before you test this out: Firstly, please don’t finish rating this project until you experience all the features because there are many hidden features that might change your opinion. An example is easter eggs. I implemented many easter eggs which you must experience before voting because these easter eggs are very devloped. If you can’t find them or are stuck on one of the easter eggs, read ARCHITECTURE.md and at the very bottom, i listed all the easter eggs so you can check them out. In fact, read the ARCHITECTURE.md because it provides valuable info about many of the features in the OS and how they work so make sure to read that aswell Secondly, this OS is not compatible with mobile or tablet devices and is optimized for desktop only. So please keep that in mind when you are testing it. Thank you so much for testing this project and hope you enjoy it :)", "repo": "https://github.com/Moksha-0102/MyOwnWebOS", "demo": "https://my-web-os-inky.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-13T15:31:39Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a simple operating system with HTML, CSS, and Javascript that runs on you web browser. It has a nostalgic look and feel with old-styled buttons and looks. To make it more like an OS, a calculator and a notepad have been created and implemented in the app. Moreover, to allow the user to personalise as much as they want, many settings have been included, from custom wallpapers to wallpapers that come from NASA itself and more. This was my first large scale project that I have coded so it’s an interesting experience for me. Before this, I only used to do challenges on platforms like Codewars and other than some small side projects, I don’t have a practical experience. Therefore, i think this project has taught me a lot on how to built stuff yourself. I hope you like my project :)", "repo": "https://github.com/Moksha-0102/MyOwnWebOS", "demo": "https://my-web-os-inky.vercel.app/"}]...
|
[{"post_id": 32866, "ts": "202 [{"post_id": 32866, "ts": "2026-07-22T09:36:10Z", "hours": 0.3622, "text": "WebOS 2 Devlog #21: Final Submission Just did some final changes to the welcome text and am about to ship it"}, {"post_id": 32842, "ts": "2026-07-22T07:57:53Z", "hours": 1.0103, "text": "WebOS 2 Devlog #20: Updated README.md and ARCHITECTURE.md + changed properties window I just realised I had a properties window in the OS and that was quite outdated so I changed to include some new info like the Last Modified date which updates everytime the user saves something because i added a localStorage.setItem that saves the timestamp. I also updated the README and ARCHITECTURE files to make them sound better and to add some additional info. Anyway, this devlog is probably the last on for this project! Hope you enjoy :)"}, {"post_id": 32822, "ts": "2026-07-22T06:51:37Z", "hours": 7.8417, "text": "WebOS 2 Devlog #19: README.md + ARCHITECTURE.md + additional customisation features I’m in the final stages of the project and in this long session, I did many things. Firstly, I wrote a README.md with all the necessary stuff and i also made an ARCHITECTURE.md file which explains the nitty gritty insides of the WebOS so anyone can understand how the website works. Other than that I added a couple of other stuff. Firstly, i realised that even though I have accents to customize the desktop, I don’t have a wallpaper gallery (except the nasa apod) which I found was quite necessary. At first, i coded my own wallpapers like a synthwave grid wallpaper, pinstripe wallpaper for the legace theme, a tranforming aurora wallpaper and like 3 more but after i coded them, they just looked so damn ugly. So i scratched the idea of me coding my own wallpapers and added three categories of wallpapers in the wallpaper dropdown with each category having three 4k wallpapers in them so every time you pick that category, you get a random wallpaper from the three. I also added an about section in the settings which has a buttton that leads to the github page."}, {"post_id": 32308, "ts": "2026-07-21T12:14:02Z", "hours": 5.4103, "text": "WebOS 2 Devlog #18: Debugging session I swear random bugs keep popping up no matter how much debugging I do. There’s always something that’s wrong or doesn’t work but that’s just how it is. In this session which was longer than expected, i fixed a lot of different bugs. Here is a summary of the changes i did: I spent lots of time rewriting the mathematics for the desktop icon layout, and also changed the strict grid-snapping to free-form placement cus it felt it was quite annoying not to be able to place stuff on the desktop wherever you want. Unfortunately, it took too long and i abandoned the idea and just moved on without making any changes. I also spent some time cleaning up the code and tried to optimizing the code. Some other bugs I fixed include: Desktop icons were randomly rearranging themselves every time a file was saved. I found out that the reason was that since the localStorage returns keys randomly, everytime i wrote sth to localStorage, the items were randomized so the ordier they appeared on the desktop changed. So i rewrote the logic to sort the stuff alphabetically before displaying. The Notepad app was also blindly overwriting existing files with the same name. I fixed it by adding a localStorage query to intercept matching keys and to display an osConfirm dialog, forcing the user to explicitly authorize the overwrite. The internal browser was throwing captchas all the time and failed to load error screens for blocked domains. Since Google aggressively blocks embeds and flags them as bot traffic, i changed the default browser to Bing, which was much better and i didn’t get captchas everytime i search somehting up I also modified the system daemon engine so that it introduces itself when a user first view the OS. The weather widget was pulling the location not from where the user was but rather where my ISP was routing my traffic through. So if i lived in a village and ISP routes my traffic through like New York, the weather that showed up was that of New York. To fix this, i swapped the logic to request exact hardware GPS coordinates via navigator.geolocation, while falling back to the IP routing API if the user denies the browser prompt. If the location is inaccurate the user can enable the location permission in the browser and the weather widget then shows the correct location. The visualizer widget was working perfectly but i had the idea to add a text container above the bars which shows what the user is playing. I made way way more changes but many of them conform to the easter eggs and mainly about the theme that gets unlocked (small spoiler there ;)) so i won’t really get too much into it."}, {"post_id": 31915, "ts": "2026-07-20T18:15:51Z", "hours": 10.1178, "text": "WebOS 2 Devlog #17: Media player + Audio spectrum widget implementation It has been a massive coding session. And I barely managed to keep the time below 10 hours and I still went over it. But, on the bright side, the OS now has a fully functional, media player and an audio spectrum widget! In the media player, anyone can listen to radios, and lots of music. But the reason it took 10 hours is because implementing these stuff required facing some serious bugs-some of them for genuinely stupid mistakes-and rebuilding the audio engine the right way (you’ll see what I mean). Here is a breakdown of how these new features work, what went wrong, and some other stuff: Overview of features The Media Player: The new Media Player is a audio application that routes requests to three distinct APIs to fetch music that the user can listen two: Audius: This is a “decentralized music streaming platform for artists, labels, and fans.” And it’s free! I fetches some of the music from this API. Radio-Browser: This is a platform that is, in a nutshell, Wikipedia for radios. I fetched thousands of live, global radio broadcasts using this API Apple iTunes (Preview): This was a golden find because I didn’t know this existed (not for free anyway). This API pulls top hits and previews of music. Granted, it’s not full music tracks but the songs are much more famous and popular. The Audio Spectrum Widget To complement the player, I also added an Audio Spectrum visualizer. It uses the Web Audio API, or more specifically, its AudioContext and an AnalyserNode to get the frequency data from the audio element. That data is then mapped to an HTML5 element. Using requestAnimationFrame, I made it such that the spectrum repaints 40 individual frequency bars roughly 60 times a second, which creates the audio visualiser waveform thing. Challenges The Geolocation failure: The OS was originally hardcoded to fetch radio stations from my address because I hardcoded that for testing purposes. But I stupidly forgot to remove that so when attempting to make this dynamic by using vpns I spent like 40 minutes trying to figure out why ut kept showing stations from my local area and not japan (where my VPN was connected to). And the reason for that is the hardcoded address I mentioned earlier. Moreover, some of the API queries were too specific, causing the media player to return empty for smaller regions like the Bahamas. To fix it i used the BigDataCloud API to quietly ping the user’s IP address, cache their true country code, and inject it into the API queries. the broken audio spectrum: Initially, the audio visualizer was completely blank. Even when fixed, the baseline would just disappear the second music started playing. The canvas drawing logic was also aggressively using clearRect to wipe the entire widget, which erased the idle state baseline. To fix it, I changed the baseline math so that the baseline sits firmly at the bottom of the widget. I also remade the drawing loop to explicitly redraw the baseline before checking the isPlaying state, so the frequency bars can work smoothly. retro theme problems: I completely forgot about the retro theme as i was just focused on building the player and the widget. So, in the end i had to make the stuff retro theme aswell. I encountered some problems there like some white on white text and some styles not applying which turned out to be because my dumbass brain mispelled the ids and classes Oh, and I found some other big bugs. The dragging engine was hella laggy. Like the response time was like 3 seconds before it registered. I would go deeped but im abt to cross the 4000 character devlog word limit but in a nutshell I realised it was because the mousemove event listener was directly updating the inline CSS (style.left and style.top) on every single microscopic mouse movement so it was really laggy."}, {"post_id": 30592, "ts": "2026-07-18T09:18:19Z", "hours": 8.5214, "text": "WebOS 2 Devlog #16: Widget implementation + debugging In this session, i made multiple changes to the OS to improve the overall UX. I had to pull another all nighter again 🥲. Here is what i changed: Change 1: Debugging Everytime i enabled the system daemon in the settngs, the entire os reloaded which was quite annoying so I ripped out the location.reload() in the Settings app. I also moved him to the body so he didn’t get trapped behind windows, because most of the time the daemon was floating behind windows and i couldnt really see him. I also gave the Welcome screen a massive 9999999 z-index so the daemon would float behind it because my previous step was too effective and he was infront of every single screen including like the bootloading screen. Challenges: I ran into z-index hell because I didn’t plan the stacking initially. He was either in the very front or at the very back and it was all a bit weird. Change 2: Widget implementation I initially wanted to implement sticky notes as a widget which was inspired my the mac sticky notes so i coded all of that in first but I realised i can take it a step further and code in multiple widgets. Challenge: But the thing was i hardcoded the sticky notes widget so i had to recode everything and integrate all of the widgets at once I added a simple analog clock widget I added a calendar widget I initially added a system monitor with like the ram and cpu data but the thing was due to the security restrictions, I can’t get the actualy live hardware data so it would have to be a simulation, which i didnt want so I replace the system monitor with a live weather widget which uses the BigDataCloud and Open-Meteo APIs to provide weather data. Change 3: Originally I had all hte widgets in the context menu on after the other but they looked like a list and a bit redundant. So i removed all then in the html file and added one ‘Add a widget…’ option which connects to a screen with all the widget options"}, {"post_id": 30122, "ts": "2026-07-17T13:15:43Z", "hours": 6.5461, "text": "WebOS 2 Devlog #15: System Daemon implementation To keep the users more engaged so even when they saw everythign, they would still spend more time doing stuff, I wanted to build something alive for the desktop environment that would interact with the user. So, instead of a standard app, I built a system daemon! If you dont know what that is, it is a digital pet that hangs out on your desktop and does random stuff. I dont hav ea name for him yet so ill just call him daemon for now. When he’s healthy, he flies around the screen and shouts random stuff at you. But I didn’t want him to just be a visual gimmick. He interacts with the actual operating system itself and has states: He is hungry: Because I previously built a drag-and-drop system for the File Explorer, I hooked him into it. You can drag actual text files or folders out of your explorer and drop them on his face. He will chew them up and literally delete them from the virtual hard drive (localStorage). He has a digestive tract: I built a array for his stomach that records what he has last eaten. If he ate a file you actually needed, you can rapid-click his face 5 times. He will regurgitate the raw file data perfectly back onto your desktop. He has boundaries: I ‘taught’ him to recognize core OS files. If you try to feed him Notepad.app or the System Settings, he will violently reject them and yell at you. He has one more state but that relates to the easter egg so i wont provide any additional details in order to not spoil it Oh, and i changed his appearance for the retro theme. anywhat that’s all for this change. I didn’t get into the nitty gritty of how I built him because I am so excited to finish this project. Just a few more features and then I’m done."}, {"post_id": 29444, "ts": "2026-07-16T12:05:56Z", "hours": 7.8072, "text": "WebOS 2 Devlog #14: Easter Eggs Pt. 2 I am now done with making the easter eggs and in total i made 5 of them, which may seem less but some of them are really really complex and developed. I stayed up till 2am making these 😭. Out of these 5, three of them are simple easter eggs, one is more complex but still quite simple and the final one is essentialyl the absolut highlight. It is the reason why the easter egg section took me so long. I am not going to go into detail to avoid spoilers. Anyway i hope you have fun with the easter eggs :) p.s the attached pic is a screen shot again cus i dont want to give spoilers"}, {"post_id": 29017, "ts": "2026-07-15T17:46:09Z", "hours": 8.8292, "text": "WebOS 2 Devlog #13: Easter Eggs Pt. 1 I was looking forward to this a looooot. I’m not giving any spoilers whatsoever but I was so locked in tday and yesterday coding easter eggs into the OS. I added like 2 easter eggs (might seem less but trust me they’re very developed), one’s a very simple one but the other one is my favourite and is the reason this devlog took so long. It’s still not finished and im only lik halfway done w/ it but I’m not going to go into any details because it will spoil the fun but im sure you’ll enjoy it. Also, im not done with making easter eggs and i just made this devlog cus the time is almost 10hrs. I still have to finish the second easter egg and do more on top of that. The next one will hopefully be the final easter egg session (unless i get another absolute brainwave). p.s to prevent spoilers, the attached pic is just a screenshot once again"}, {"post_id": 28283, "ts": "2026-07-14T13:15:34Z", "hours": 3.2847, "text": "WebOS 2 Devlog #12: Debugging Session + retro theme redesign In this session I started debugging the os and wow i found a lot of bugs. Im not going to get into them because it would take too long but some of them include how the bootloading sequence absolutely breaks if the user presses escape before the setup is finished because the cache isnt cleared properly so when the user gets the setup agian, he wont we able to configure some stuff like the password because the cache wasnt cleared properly. I also redesigned the retro theme because it looked ugly because the accents i implemented in the modern theme appeared in the retro theme which didnt fit together. Moreover, some of the aspects of the retro theme, such as the top part of the web browser or the settings screen were just uncomfortable to look at. Changing the retro theme was such a pain because everytime i thought i fixed it, a new discrepancy appears and at one point after i fixed it, my retro-theme.css was so messy i couldnt be bothered to fix it so i just inputted the messy working version into gemini and it cleaned it up. Anyway that was all i changed this time. And I did more and more changes but many of them are small and it would take too long to explain in a devlog. p.s. didnt know which pic to attach so its just a simple screenshot of the desktop."}, {"post_id": 28127, "ts": "2026-07-14T06:44:53Z", "hours": 9.4628, "text": "WebOS 2 Devlog #11: Reset btn + Notepad IDE + other changes This was a long long coding session. Had to stay awake till like 2am. Here are the changes i made. Ill try to keep everythign concise because theres a 4000 char limit and i have lot more to say than that. Change 1: I added a factory reset button in settings that directs the user to the webos setup screen like the one they get when they first enter the website. When testing this feature, i realised that random variables from completely different web projects started appearing in the File Manager. Because browsers share localStorage databases across the same local port (e.g., 127.0.0.1:5500), the OS was inheriting the ghosts of old projects. The solution: I had to upgrade the Initial Setup Utility. When formatting the Virtual Hard Drive, the system now temporarily caches the user’s OS credentials in memory that they entered, executes a total localStorage.clear() wipe to delete all the localStorage varialbles, and then safely restores the username and stuff before continuing normally. Change 2: Notepad IDE This was the part that took the longest (and its still not done). I wanted to create something absolutely unique that i havent seen in any other webos projects that i saw. And i realised, why dont i make an IDE in me webos? Not an actual IDE ofc but the goal was to allow users to write raw HTML/JS in the Notepad, save it as a .app file, and double-click it on the desktop to launch it as a fully functioning, program. Attempt 1 (Failure): I initially tried parsing the saved text and running it directly in the OS context using eval(). It was an absolute security and stability nightmare. The custom app had root access to the OS memory and instantly overwrote the osState object, completely crashing the Window Manager within seconds. Attempt 2 (Failure): I tried fixing attempt 1 but messed up the entire code in the process so i had to revert to that commit and this time, i tried putting the apps in Web Components and the Shadow DOM. While this successfully isolated the CSS so custom apps didn’t break the OS styling, the JavaScript still executed in the global window scope. Running two different custom apps simultaneously caused variable collisions that bricked the taskbar. It was too complex and fundamentally flawed. I wiped the slate clean again. Attempt 3 (Success): I realised that the answer was looking straignt at me. I was so stupid. I can just take the code and slap it on to an iframe, and it runs it, just like how i made the web browser. The solution was that When a user double-clicks a custom .app, the OS takes the raw code and converts it into a text/html Blob. It then passes that Blob through URL.createObjectURL(), creating a localized URL. By feeding that URL into an , the custom app boots perfectly. I am really proud of this feature. It’s still not fully done but i had to make a devlog since the tracked time almost reached 10hrs."}, {"post_id": 27267, "ts": "2026-07-12T18:02:31Z", "hours": 4.4556, "text": "WebOS 2 Devlog #10: icon implementation + taskbar remodeling When i looked at the webos, i realised it missed something to look like an actual os. It wasnt realistic enough. So, i decided to do two changes to make it more realistic. Here is what it did: Change 1: I added some real user data in the taskbar. More specifically, the host device’s actual network and battery status and date. I used the the browser’s native navigator.onLine and the navigator.getBattery() APIs. I also made it such that the os actively listens for network connection drops such as when wifi is disconnected and battery charging/level events, and updates the data accordingly. Change 2: I also noticed that my entire os is filled with emojis for stuff like calculator, file manages (all the apps essentially), the taskbar, the browser, the sites in the browser, etc. THis made it look really unprofessional so i fixed it. I replace all system emojis with Google Material Symbols to make it look a lot better. I did face one challenge however, the emojis in my website in my web browser weren’t being replaced by icons for some reason and I then realised that the iframe sites acts as a sandbox and they dont inherit the imported apis from the main html file. So I just injected a tag and imported the Google Material Symbols API directly in the isolated HTML code in my js file. Change 3: The goal of this change was ot allow the user to snap the taskbar to the top of the screen (Linux style). This was the part that took longer than expected. I originally just added an optoin in the settings to move my taskbar to the top of the screen but the pill-like, floating taskbar i had was really ugly when it was at the top. So, i spent like more than an hour and half trying out new designs and redesigning the taskbar so it looks good both when its at the top and the bottom and finalised a design that actually looks much better than what i had before. It now takes up like the entire bottom/top of the screen instead of floating in the middle liek before. That was all the changes made since the last devlog."}, {"post_id": 26774, "ts": "2026-07-11T19:22:51Z", "hours": 3.2697, "text": "WebOS 2 Devlog #9: Implemented color accents and some browser improvements I was originally going to do some debugging and finish of this project but i was looking through other peoples’ webos projects and realised there was much i could improve. I then got like a huge brainwave about new stuff to implement so ig it’ll be a bit longer before I ship this project. One of these ideas was adding color accents because right now my modern theme is limited only to a light pinkish color. Here are the changes i made: Change 1: Accents In the settings screen, i added an option to choose the system accents. I also gave some basic presets and added an option to pick a color by adding a color picker option. Implementing this was quite simple, just replace all hardcoded pink colors with –os-accent (which i added in css). I linked htis –os-accents attribute/class to the color that the user chooses in js and made ti that all the places where the accent pops up, the color variable there is replaced with –os-accents. So if the user changes the accent in settings, the places where –os-accent is set changes color automatically. Challenge 1: Contrasting invisible text The problem: Swapping a single hex code for an accent color that the user chooses breaks all translucent UI elements (like shadows). Furthermore, if a user picks a bright color (like Mint Green or Yellow), the hardcoded white text on the title bars becomes completely invisible. The Solution: I implemented a Hex-to-RGB engine that injects raw RGB values directly into the CSS :root. This solves the first part of the problem. To solve the text contrast issue, I implemented the WCAG Relative Luminance algorithm ( used a bit of outside help here iykwim ;)). The OS now mathematically calculates the perceived brightness of the user’s chosen color. If the relative luminance passes a threshold of 0.179, the OS flips the title bar text to pitch black so its legible comfortable. Change 2: i was just playing around in the webbrowser and exploring, and i found some stuff that needed to be fixed: when building a simulated web browser using tags, embedding sites like google resulted in a “Refused to Connect” error. These servers send an X-Frame-Options: DENY header. Because client-side JavaScript is legally blind to server headers, the OS couldn’t detect the block to show the custom error screen I made. I knew this error existed and knew this was a thing but only after experiencing it like a real user did i realise how annoyinf this was and it made my os seem broken. Solution 1 (attempt): I initially tried routing requests through a third-party API to read the headers, but ad-blockers and privacy shields just made the API requests not work, crashing the entire browser app (at least thats what i think is the cause). The Solution: I used a massive Regex blocklist, such that the browser now instantly intercepts requests to 99% of top-tier websites that block iframes (like youtube or google), and routs the user to a custom error page. (did these stuff with the help of some ai only) Next Problem: When a user searches Google inside the iframe and clicks a link in the embedded page, the OS address bar wouldn’t update. This is a browser restriction. Browsers mathematically lock JavaScript out of reading cross-origin URLs for security reasons. At this point i just stopped instead of trying to waste my time trying to break through some military grade (i think?) restrictions. Change 3: Before, only iframe compatible websites worked but i had an idea to route all queries (except the ones in websites format) through a google search. Apparently, google.com doesn work in iframe but the google search works. So now if i type hello world, it just redirects me to a google search page with hello world searched. P.S. I made some other tiny changes aswell but i cant rlly remember them now sry"}, {"post_id": 20257, "ts": "2026-07-01T20:07:19Z", "hours": 2.9408, "text": "WebOS 2 Devlog #8: Migrated to ES6 arch. and split css into any files I just realised that essentially all my code is squished into three files-index.html, index.css, and index.js. And all of them were quite big. Like the js file had more than 2,000 lines, and css had more than a 1,000 lines. I dont know why i havent noticed it before but im glad that i did now because i was plannign to do a deep debugging session next and it wouldve been hella hard to do in a 2000+ line file. Plus, a single bug in e.g. the calculator could crash the file manager, and debugging required scrolling through thousands of lines of code. So, i decided to migrate the index.js into an ES6 architecture and split the index.css into multiple manageable files. That’s all i can say for this devlog ig. There was nothing new except some lines of code i had to add after the migration to make sure everything is working. There were no really new features added. But there were many things that delayed me: i accidentally deleted a block of code in the index.css without moving it and didnt notice it so some styles were broken and i had to like retrace my steps and stuff to fix all the problems it caused. That’s all ig. The project is almost coming to an end! Can’t wait to ship it :)"}, {"post_id": 19868, "ts": "2026-07-01T08:56:38Z", "hours": 3.9269, "text": "WebOS 2 Devlog #7: Web Browser Implementation I reached the final couple of phases of my project and this is one is one of the crucial ones: building a web browser. My plan was to use iframe. But the thing about building a webbrowser inside a webbrowser or inside a sandboxed environment like a website is most websites (about 99%) like google, youtube, or github use X-Frame-Options and Content-Security-Policy: frame-ancestors ‘none’ which means they specifically block their websites from being displayed in cases like this ot prevent clickjacking. So every time i tried loading a webpage, it just says this webpage refused to connect or sth. I used ai to try bypassing it but it didnt work, so with the help of the same aforementioned ai, i implemented a solution. The solution: Since I cannot disable host browser security policies, and i dont have a backend proxy server, I had an idea to just build my own native ‘browser’: EpochOS IntraNet (just decided on the name EpochOS btw). This didnt take too long cus i had someone (ai) helping me cus it was almost midnight and i was tired as hell. Here are the features: I wrote a parser that intercepts navigation requests. If the user navigates to webos://home or webos://directory, the engine injects a large data:text/html;charset=utf-8 string directly into the iframe’s src attribute. This opens a local, HTML dashboard without triggering cross-origin blocks. Essentially, i wrote html in js and injected that html into the iframe src, so i essentially made my own ‘web-page’. Standard links inside a data URI iframe will try to navigate the iframe itself, which doesn’t update the OS address bar. To fix this, I set up a window.addEventListener(‘message’) listener on the parent OS. The buttons inside the iframe use parent.postMessage() to pass the target URL up to the OS, allowing the JavaScript engine to handle the routing and update the UI properly. A real browser alse doesn’t lose a page’s state (like scroll position) when you switch tabs. And im trying to make a real browser. So, to achieve this, the browser engine now doesn’t share a single iframe but rather new ones get created: Every time the user clicks the “New Tab” button, a new node is generated and appended to the container. Switching tabs simply toggles the CSS display property between none and block. This keeps inactive pages fully loaded in memory. Because cross-origin security rules (the ones i mentioned before) lock us out of accessing the iframe’s native window.history object, I had to build a custom history router. Every tab object in the JS array maintains its own history array and a historyIndex pointer. The back/forward buttons just decrement or increment this pointer and re-apply the URL to the iframe. Kinda genius ngl (this was an idea from ai btw) But for a browser to be useful, it needs to have some proper webpages. After some scouring, i found some webpages that do work in iframe and dont have the restrictions that websites like google do. I’m not gonna tell you what websites those are, you just have to see yourself. I found like 10 or sth so there’ll be plenty of stuff to do. Other features of the browser include: bookmarking, reloading (i also added a reloading spinner btw) and some more stuff."}, {"post_id": 19207, "ts": "2026-06-30T14:00:14Z", "hours": 1.9208, "text": "WebOS 2 Devlog #6: UI, UX and functionality improvements This update focuses heavily on stabilizing what i already have and also refining the less finer aspects of the UI. Here is what i did: Theme improvenets: I overhauled the .theme-retro class. stuff were contradicting each other with one thing saying this and the other saying that (too many to even give an example). I also changed some other minor stuff too like increased the grid size in the desktop to prevent icons from overlapping. But this was the main change: System Security & Identity Manager: Implemented a global sanitizeIdentity utility (Regex: /[^a-zA-Z0-9_-]/g) to remove spaces and illegal characters from usernames and hostnames when the user sets it before writing to localStorage because if i have sth like ‘John Doe’ as the username and ‘my school computer’ as the host name, the terminal command would look sth like John Doe@my school computer. And this just looks hella ugly. Dedicated Identity UI: removed the raw identity inputs out of the Settings menu like i had before and moved them into a dedicated Identity Manager window because its more secure that way. I also added an authenticaiton wall before this window pops up. To do this, i wrote an async while loop for identity verification. All the users now have successfully pass the password prompt (or use the recover override to bypass the password) before it allows them to modify any identity settings. Bootloader improvements: btn-shutdown now properly halts system processes (clearing systemClockInterval and locking pointer events) instead of just hiding the UI like it did before where it just had like a black screen with text on it saying shutting down and stuff. It now has like a loading screen and all that stuff. Context Booting: i also implemented sessionStorage.setItem(‘boot_context’, ‘warm’) to track system restarts so different boots have like different bootloading sequences (the point below this). This didn’t take too long as i could just copy and past what i had in other sequenes and just take the text. Differnet Boot Sequences: The bootloader now reads the sessionStorage context. A Cold Boot triggers the full POST memory checks and hardware scans (dont know what this is. had to use ai for the sequences cus i didnt know what the data was). A Warm Boot (restart) bypasses POST and executes a different initialization sequence. THis makes the user more immersed in the environment."}, {"post_id": 18635, "ts": "2026-06-29T20:34:42Z", "hours": 3.7578, "text": "WebOS 2 Devlog #5: File manager overhaul + custom dialog box I realised that always having the custom browser alerts was kinda boring and interrupting so i made my own dialogue box. I also changed the file manager to include some essential functions that it was missing to make it more like an OS (see below). Here are the changes i made: I abandoned the old array-based folders. I made it so that it now reads and writes directly to localStorage using stricter pathing (e.g., webos-file-Root/Documents/file.txt). I also built a native getUniqueName() function. If you create a duplicate file or folder, there’s no like a (1), (2), etc. at the end of it, which prevents data overwrites. This makes it more like a real OS Drag-and-Drop: I alos removed the old custom JavaScript coordinate trackers for file movement. It now uses the native HTML5 Drag-and-Drop API. You can physically pick up a file from the Explorer window, drag it out, and drop it directly onto the visual Desktop wallpaper. Custom Dialog Box: Native browser popups (alert(), confirm()) look hella ugly and break the flow so i built a custom dialog engine using JavaScript Promises. Now, when the system needs confirmation a custom window that fits with the theme appears. Because it uses async/await, the JavaScript pauses and waits for user acceoting or declining without freezing the browser. List View & Item Properties: I introduced a hybrid Grid/List view (just like a real os like mac). Because tracking file metadata (like Date Modified) from the start would have been way to complicated, I just built this engine where when the File Explorer encounters a file without a timestamp, it instantly generates metadata key (os-meta-path) using Date.now() and saves it permanently, which means that it allows for Date sorting without breaking anything."}, {"post_id": 17638, "ts": "2026-06-28T14:55:23Z", "hours": 4.0281, "text": "WebOS 2 Devlog #4: Initial bootloading sequence + login (optional) When i looked at other projects i realised that they all have some kind of flashy bootloading sequences but mine didnt have any so i built one. I didn’t want it to be too flashy so i made a simple, straightforward sequence. I also knew what exactly I wanted so I managed to finish this in 4hrs on the dot or it would’ve taken a lot longer. This is what it consists of: Bootloader that takes into account the selected theme: Since I had two themes in my OS (Modern and Legacy), it didnt make sense for both to have the same loading screen. So the system now actually boots up differnetly before loading the UI. Depending on your settings, you’ll either get a quick Modern UEFI startup, or a 1995 Legacy BIOS sequence complete with memory checks, IDE drive detection, and ASCII loading bars (had to use some outside help [ai] for this one as I’m not that old to know all that stuff). Hardware Interrupts: Just like a real PC, if you hit esc while the system is booting, it triggers a hardware interrupt and drops you into a configuration screen. Interactive OS Installation: If it’s your first time booting up (or you reset your system), you now have to actually “install” the OS. You can type in your preferred Username, network Hostname, and set an Administrator Password right inside the terminal. You even get the option to format your virtual hard drive. Login: If you set a password (which is optoinal) during setup, the boot sequence will actually halt and lock the system until you type it in. (Don’t worry, I added a recover command bypass in case anyone forgets it). Terminal Integration: The CLI terminal now dynamically reads your setup data. Instead of a normal prompt that you used to get with the default user@stardance or sth, you’ll see your actual custom username@hostname:~/$. Loading text: as the os loads and goes through the bootloading sequence some highly advanced random computer text ‘loads’ to add a little bit to the realism. Some of them are actual data from the host computer such as ram, gpu, and stuff like that. I had lots of other text and loading content that came from the the user’s actual real life hardware and software data, which added to the realism I had to research and use ai to make this because I had no knowledge of how computers were back then. There’s more but it wont fit here so you’ll just have to see it when i host it after my next ship."}, {"post_id": 17451, "ts": "2026-06-28T07:29:09Z", "hours": 2.8478, "text": "WebOS 2 Devlog #3: Building a UNIX Terminal + some other improvements This was a major update today for WebOS 2.0 as i built a genuinely realistic CLI. It’s looks and acts like a Mac Terminal (cus i use mac). Here is what i implemented: In the terminal, i implemented the following commands: help, clear, pwd, ls, cd, cat, touch, mkdir, rm, echo, whoami, date, history, and nano. This part itseld wasnt so difficult cus I had previously done something similar before but it was still challenging nonetheless. I wanted the CLI to be as realistic as possible so I implemented (with a little bit of help from gemini) a custom AST-style parser. It fully supports logical command chaining (&&, ||, ;), quotation marks usage (both single and double), and file redirection (>, ») straight into the virtual hard drive. Autocomplete: This was probably the hardest thing i tried to build and i am happy with how it turned out. I implemented a zsh-style Tab completion system. Pressing Tab auto-fills the longest common prefix and then shows all the possible options directly beneath your active prompt. This is one of the things I a most proud of because after using it, it was essentially very similar to the mac Terminal. This autocomplete works both for commands and files/folders. Errors and stuff: The terminal behaves exactly like real bash. If you type ls -la (-la is not implemented [yet?]) or cd too many args, it won’t just blindly execute or fail silently (it originally did so i had to change it), but it will spit back the same error message you’d expect to see on a real machine. GUI/CLI Integration: When i was implementing nano, i tried to think of how to implement a CLI editor. But i then realised, i can just connect the nano command to the notepad that I alreadu made. So typing nano test.txt in the terminal now just launches the Notepad app and opens the file for editing. And I made some other changes to stuff like the file manager but the terminal implementation above is the biggest change."}, {"post_id": 16900, "ts": "2026-06-27T13:19:35Z", "hours": 1.9075, "text": "WebOS 2 Devlog #2: UI & UX Debugging + UI Improvements This was quite a short session mainly focused on debugging. Here are the changes for this session. New Setup Wizard: The Welcome Screen has been completely redesigned into a classic two-pane setup wizard. (In Retro mode, it even has the iconic sideways teal text on the sidebar). State Persistence: The OS now remembers your settings. Your preferences for military time, desktop icon labels, and whether you want to see the welcome screen on boot are all permanently saved to localStorage. Calculator & Layout Fixes: The calculator now properly displays full math expressions (e.g., 3 + 5) instead of instantly wiping the screen. Before it still worked but it just showed the numbers and the answer-it didnt show what the user was doing. I also fixed a ton of bugs. Apps that are maximized now perfectly snap to the taskbar without overlapping, and the File Explorer drag-to-select doesn’t glitch when you move the window because before the drag-to-select used to activate when i was dragging the window."}, {"post_id": 16391, "ts": "2026-06-26T17:48:49Z", "hours": 13.705, "text": "WebOS 2 Devlog #1: Transitioning into an actual OS. The WebOS 2 mission just unlocked so all the time before i spent working on this overhaul, hence the 13 hour devlog. In the last devlog, i had a very basic beginning: a basic onboarding screen with some text and a “Continue” button. There was no actualy proper desktop, not that many apps, and definitely no File Explorer. Over the last 13 hours, I managed to change the project into a fully functioning, browser-based operating system with its own virtual file system, and app ecosystem. Here is a breakdown of everything that was built in this time. Since i made a lot of changes, i’ll keep it brief and won’t go into it too much: The Window & Desktop Engine: the core physics of the OS were built completely from scratch. Drag and Drop: Windows can be dragged freely but are strictly clamped to the viewport so they can never be lost off-screen. Window Controls: remade the full Minimize, Maximize, and Close logic. Animations: Implemented a requestAnimationFrame state machine so windows don’t just appear—they like animate and scale and fade out into the taskbar. Desktop Grid: Desktop icons are draggable and auto-snap to an invisible grid when released. File System (File Manager): Going from zero file management to a complete virtual system was perhaps the biggest change. It is powered by localStorage, and the OS now remembers everything: Dynamic File Explorer: Built a grid/list view system complete with a sidebar, path breadcrumbs, and directory navigation. Context Menus: Right-clicking files now opens custom context menus to rename, delete, or restore items. Recycle Bin: Files are moved to a functional Trash directory where they can be permanently emptied or restored to the Root folder. Drag-and-Select: made a custom mouse-drag selection box (the translucent pink lasso) to highlight multiple files at once. App Ecosystem: Themes: I built a dynamic theme engine with two main themes. Modern Dark: The default OS features premium glassmorphism, background blurs, and other stuff, and has like a pink accent color. Retro: It changes the OS back to what it looked like in like 1995 by replacing animations and toggles with grey borders, checkboxes, and the blue desktop background. The New Welcome Screen: That old, basic onboarding screen looked ass so it was completely scrapped. I replaced it with a better and cleaner on that also remembers their preference if they check “Don’t show this on startup.”"}, {"post_id": 8031, "ts": "2026-06-13T12:06:02Z", "hours": 0.6592, "text": "Devlog #3: Onboarding and Eliminating FOUC Before shipping the WebOS 1 project and moving on to WebOS 2 project, I needed to implement an Onboarding/Welcome Screen to introduce users to the OS environment. This required a full-screen dark overlay. this is what i did: Z-index mismatch Because my custom Drag Engine automatically increments the zIndex of any .window it touches, the moment I clicked the Welcome Screen, the engine overwrote its god-tier Z-Index (99999). This caused an immediate Z-Index collapse, burying the modal underneath the desktop icons and the dark overlay. The Fix: I had to implement a strict exception in the JavaScript mousedown event listener to protect the Welcome Screen’s ID from being overwritten. DOM Reordering: To guarantee that the Welcome Screen will be at the very top,, I moved the Welcome Screen to the absolute bottom of the document. This means it will naturally sit on top of the other elements. Eliminating the FOUC I used the localStorage API so users could check a “Don’t show this again” box, saving their preference to the hard drive. However, this caused a massive FOUC bug. The Problem: HTML renders faster than JavaScript executes. On boot, the browser would instantly paint the Welcome Screen to the monitor. A few milliseconds later, JavaScript would read the hard drive, realize the user disabled the screen, and violently delete it—causing an ugly flicker. Fix: I basically just inverted the rendering logic. I hardcoded ‘display: none;’ directly into the HTML so the modal is completely invisible by default. Now, the browser paints nothing. JavaScript checks the hard drive, and only turns the welcome screen on if it confirms the user actually wants to see it. Now it’s much better. Ig this is the end of my WebOS 1 project. I will be shipping this project and then moving on to WebOS 2 where I’ll be implementing File Management, In-browser-browser?, and maybe some other built in tools. That’s the plan for now."}, {"post_id": 8007, "ts": "2026-06-13T11:10:55Z", "hours": 0.6994, "text": "Devlog #2: Debugging + Icon dragging features + localStorage implementation The core window manager is working properly so this second session was all about polishing the UI and UX aspects. But there were some challenges: The faulty dragging I transitioned the desktop icons from a static flexbox grid to absolute positioning so they could be freely dragged around the screen (like an actual operating system). However, this immediately triggered native browser collisions. The Problem: When clicking and dragging an icon, the browser saw the action as trying to highlight text or drag an image to a new tab. This triggered a native HTML “ghost drag,” completely overriding my custom JavaScript drag engine and leaving the icon permanently stuck to the cursor. The Solution: I just basically implemented multiple stuff to solve this: Applied ‘-webkit-user-select: none’ and ‘user-select: none’ to prevent highlighting. Injected ‘draggable=“false”’ natively into the HTML. Applied ‘pointer-events: none’ on the inner emoji and label text. This forces the mouse click to pass through the text and hit the icon container directly, ensuring my custom e.preventDefault() mousedown event works properly every time. State Persistence (The Local Storage API) An OS is useless if it resets every time you turn it on. I wired up the browser’s native localStorage API so it saves some of the stuff that the user did. So far it’s only the position of the icons, but I’m planning to add more stuff to the localStorage. Here are the changes: Upgraded the mouseup event listener to capture the exact X and Y coordinates of an icon the moment it is let go after dragging. Built a boot sequence that loops through .desktop-icon elements on page load, fetches their saved coordinates , and implementes them. Wallpaper changing bug The NASA API integration was fetching data successfully, but massive high-res images were causing visual lag, leading to a blank blue screen while the image downloaded in the background. Made a new thing where the newImage() is inserted into the virtual memory of the js. The UI now triggers a document.body.style.cursor = ‘wait’ loading wheel and displays a “Downloading…” status. JavaScript intentionally halts the DOM update until the virtual image’s ‘.onload’ event fires, ensuring the wallpaper only gets applied to the screen exactly when it is 100% ready. Lastly, I also added a setting in the settings tab where the user can choose if the icon labels are hidded or shown. What’s Next? The desktop environment is now completely stable, personalized, and persistent. Next up: More UI and UX refinements before shipping for WebOS 1. Gonna implement File Management for WebOS 2 :)"}, {"post_id": 7644, "ts": "2026-06-12T19:27:06Z", "hours": 5.5711, "text": "Devlog #1: Booting Up - Building a Custom Window Manager & Desktop Environment from Scratch Today marks the official first boot of my WebOS project. I’m trying to build a full OS that runs in the Web Browser directly using HTML, CSS, and Vanilla JavaScript. It acts like an actual operating system, like windows for example, but the only difference is the way it looks, it’s identity and that it runs in your web browser. Over the past few hours, I changed the project from a static layout into a fully interactive environment. Here is a breakdown of the core engine and features that I currently built. The Custom Window Manager The hardest part of making an OS is handling window states. I built a universal Drag-and-Drop engine with dynamic Z-Index management. The Problem: Windows would get stuck behind each other, or the browser would lose track of the mouse if the user dragged too fast or threw the window off-screen, so i wouldn’t be able to drag it back. The Solution: I implemented an event elegation system attached to the document root, calculating mouse offsets relative to the title bars. This means wherever the mouse moves, the title bars move to keep that offset difference the same, which is essentially what the drag and drop function is. I also engineered physical constraints so windows can never be dragged out of the viewport. The Desktop Environment To not make seem like this is just a website, I completely changed the browser’s default behavior. I Implemented double-click event listeners for desktop icons and then overrode the native browser right-click menu ( e.preventDefault() ) and built a custom OS context menu this makes it feel more unique. Core Applications Notepad: A fully resizable text editor using CSS flexbox so the typing area automatically expands with the window. Calculator: Quite self-explanatory. Engineered the math logic from scratch. Settings (NASA API): Built a customization menu that toggles a global 12hr/24hr clock state, and fetches real-time data from NASA’s APOD API to dynamically change the desktop wallpaper based on the NASA Picture of the Day. What’s Next? The UI feels like an OS, but it lacks permanence. Next on the roadmap: File Management. I’ll be engineering a system to actually save the data typed into the Notepad so it survives page refreshes. Also, I want to create a web browser with actual internet access to really bring that OS feeling. That’s all I have planned out. p.s. I’ve attached some pictures of my website below - hope you like it :) Stay tuned."}]...
|
Title: EpochOS by @Mokila | Stardance
Devlogs:
De Title: EpochOS by @Mokila | Stardance
Devlogs:
Devlog #1: Booting Up - Building a Custom Window Manager & Desktop Environment from Scratch Today marks the official first boot of my WebOS project. I’m trying to build a full OS that runs in the Web Browser directly using HTML, CSS, and Vanilla JavaScript. It acts like an actual operating system, like windows for example, but the only difference is the way it looks, it’s identity and that it runs in your web browser. Over the past few hours, I changed the project from a static layout into a fully interactive environment. Here is a breakdown of the core engine and features that I currently built. The Custom Window Manager The hardest part of making an OS is handling window states. I built a universal Drag-and-Drop engine with dynamic Z-Index management. The Problem: Windows would get stuck behind each other, or the browser would lose track of the mouse if the user dragged too fast or threw the window off-screen, so i wouldn’t be able to drag it back. The Solution: I implemented an event elegation system attached to the document root, calculating mouse offsets relative to the title bars. This means wherever the mouse moves, the title bars move to keep that offset difference the same, which is essentially what the drag and drop function is. I also engineered physical constraints so windows can never be dragged out of the viewport. The Desktop Environment To not make seem like this is just a website, I completely changed the browser’s default behavior. I Implemented double-click event listeners for desktop icons and then overrode the native browser right-click menu ( e.preventDefault() ) and built a custom OS context menu this makes it feel more unique. Core Applications Notepad: A fully resizable text editor using CSS flexbox so the typing area automatically expands with the window. Calculator: Quite self-explanatory. Engineered the math logic from scratch. Settings (NASA API): Built a customization menu that toggles a global 12hr/24hr clock state, and fetches real-time data from NASA’s APOD API to dynamically change the desktop wallpaper based on the NASA Picture of the Day. What’s Next? The UI feels like an OS, but it lacks permanence. Next on the roadmap: File Management. I’ll be engineering a system to actually save the data typed into the Notepad so it survives page refreshes. Also, I want to create a web browser with actual internet access to really bring that OS feeling. That’s all I have planned out. p.s. I’ve attached some pictures of my website below - hope you like it :) Stay tuned.
Devlog #2: Debugging + Icon dragging features + localStorage implementation The core window manager is working properly so this second session was all about polishing the UI and UX aspects. But there were some challenges: The faulty dragging I transitioned the desktop icons from a static flexbox grid to absolute positioning so they could be freely dragged around the screen (like an actual operating system). However, this immediately triggered native browser collisions. The Problem: When clicking and dragging an icon, the browser saw the action as trying to highlight text or drag an image to a new tab. This triggered a native HTML “ghost drag,” completely overriding my custom JavaScript drag engine and leaving the icon permanently stuck to the cursor. The Solution: I just basically implemented multiple stuff to solve this: Applied ‘-webkit-user-select: none’ and ‘user-select: none’ to prevent highlighting. Injected ‘draggable=“false”’ natively into the HTML. Applied ‘pointer-events: none’ on the inner emoji and label text. This forces the mouse click to pass through the text and hit the icon container directly, ensuring my custom e.preventDefault() mousedown event works properly every time. State Persistence (The Local Storage API) An OS is useless if it resets every time you turn it on. I wired up the browser’s native localStorage API so it saves some of the stuff that the user did. So far it’s only the position of the icons, but I’m planning to add more stuff to the localStorage. Here are the changes: Upgraded the mouseup event listener to capture the exact X and Y coordinates of an icon the moment it is let go after dragging. Built a boot sequence that loops through .desktop-icon elements on page load, fetches their saved coordinates , and implementes them. Wallpaper changing bug The NASA API integration was fetching data successfully, but massive high-res images were causing visual lag, leading to a blank blue screen while the image downloaded in the background. Made a new thing where the newImage() is inserted into the virtual memory of the js. The UI now triggers a document.body.style.cursor = ‘wait’ loading wheel and displays a “Downloading…” status. JavaScript intentionally halts the DOM update until the virtual image’s ‘.onload’ event fires, ensuring the wallpaper only gets applied to the screen exactly when it is 100% ready. Lastly, I also added a setting in the settings tab where the user can choose if the icon labels are hidded or shown. What’s Next? The desktop environment is now completely stable, personalized, and persistent. Next up: More UI and UX refinements before shipping for WebOS 1. Gonna implement File Management for WebOS 2 :)
Devlog #3: Onboarding and Eliminating FOUC Before shipping the WebOS 1 project and moving on to WebOS 2 project, I needed to implement an Onboarding/Welcome Screen to introduce users to the OS environment. This required a full-screen dark overlay. this is what i did: Z-index mismatch Because my custom Drag Engine automatically increments the zIndex of any .window it touches, the moment I clicked the Welcome Screen, the engine overwrote its god-tier Z-Index (99999). This caused an immediate Z-Index collapse, burying the modal underneath the desktop icons and the dark overlay. The Fix: I had to implement a strict exception in the JavaScript mousedown event listener to protect the Welcome Screen’s ID from being overwritten. DOM Reordering: To guarantee that the Welcome Screen will be at the very top,, I moved the Welcome Screen to the absolute bottom of the document. This means it will naturally sit on top of the other elements. Eliminating the FOUC I used the localStorage API so users could check a “Don’t show this again” box, saving their preference to the hard drive. However, this caused a massive FOUC bug. The Problem: HTML renders faster than JavaScript executes. On boot, the browser would instantly paint the Welcome Screen to the monitor. A few milliseconds later, JavaScript would read the hard drive, realize the user disabled the screen, and violently delete it—causing an ugly flicker. Fix: I basically just inverted the rendering logic. I hardcoded ‘display: none;’ directly into the HTML so the modal is completely invisible by default. Now, the browser paints nothing. JavaScript checks the hard drive, and only turns the welcome screen on if it confirms the user actually wants to see it. Now it’s much better. Ig this is the end of my WebOS 1 project. I will be shipping this project and then moving on to WebOS 2 where I’ll be implementing File Management, In-browser-browser?, and maybe some other built in tools. That’s the plan for now.
WebOS 2 Devlog #1: Transitioning into an actual OS. The WebOS 2 mission just unlocked so all the time before i spent working on this overhaul, hence the 13 hour devlog. In the last devlog, i had a very basic beginning: a basic onboarding screen with some text and a “Continue” button. There was no actualy proper desktop, not that many apps, and definitely no File Explorer. Over the last 13 hours, I managed to change the project into a fully functioning, browser-based operating system with its own virtual file system, and app ecosystem. Here is a breakdown of everything that was built in this time. Since i made a lot of changes, i’ll keep it brief and won’t go into it too much: The Window & Desktop Engine: the core physics of the OS were built completely from scratch. Drag and Drop: Windows can be dragged freely but are strictly clamped to the viewport so they can never be lost off-screen. Window Controls: remade the full Minimize, Maximize, and Close logic. Animations: Implemented a requestAnimationFrame state machine so windows don’t just appear—they like animate and scale and fade out into the taskbar. Desktop Grid: Desktop icons are draggable and auto-snap to an invisible grid when released. File System (File Manager): Going from zero file management to a complete virtual system was perhaps the biggest change. It is powered by localStorage, and the OS now remembers everything: Dynamic File Explorer: Built a grid/list view system complete with a sidebar, path breadcrumbs, and directory navigation. Context Menus: Right-clicking files now opens custom context menus to rename, delete, or restore items. Recycle Bin: Files are moved to a functional Trash directory where they can be permanently emptied or restored to the Root folder. Drag-and-Select: made a custom mouse-drag selection box (the translucent pink lasso) to highlight multiple files at once. App Ecosystem: Themes: I built a dynamic theme engine with two main themes. Modern Dark: The default OS features premium glassmorphism, background blurs, and other stuff, and has like a pink accent color. Retro: It changes the OS back to what it looked like in like 1995 by replacing animations and toggles with grey borders, checkboxes, and the blue desktop background. The New Welcome Screen: That old, basic onboarding screen looked ass so it was completely scrapped. I replaced it with a better and cleaner on that also remembers their preference if they check “Don’t show this on startup.”
WebOS 2 Devlog #2: UI & UX Debugging + UI Improvements This was quite a short session mainly focused on debugging. Here are the changes for this session. New Setup Wizard: The Welcome Screen has been completely redesigned into a classic two-pane setup wizard. (In Retro mode, it even has the iconic sideways teal text on the sidebar). State Persistence: The OS now remembers your settings. Your preferences for military time, desktop icon labels, and whether you want to see the welcome screen on boot are all permanently saved to localStorage. Calculator & Layout Fixes: The calculator now properly displays full math expressions (e.g., 3 + 5) instead of instantly wiping the screen. Before it still worked but it just showed the numbers and the answer-it didnt show what the user was doing. I also fixed a ton of bugs. Apps that are maximized now perfectly snap to the taskbar without overlapping, and the File Explorer drag-to-select doesn’t glitch when you move the window because before the drag-to-select used to activate when i was dragging the window.
WebOS 2 Devlog #3: Building a UNIX Terminal + some other improvements This was a major update today for WebOS 2.0 as i built a genuinely realistic CLI. It’s looks and acts like a Mac Terminal (cus i use mac). Here is what i implemented: In the terminal, i implemented the following commands: help, clear, pwd, ls, cd, cat, touch, mkdir, rm, echo, whoami, date, history, and nano. This part itseld wasnt so difficult cus I had previously done something similar before but it was still challenging nonetheless. I wanted the CLI to be as realistic as possible so I implemented (with a little bit of help from gemini) a custom AST-style parser. It fully supports logical command chaining (&&, ||, ;), quotation marks usage (both single and double), and file redirection (>, ») straight into the virtual hard drive. Autocomplete: This was probably the hardest thing i tried to build and i am happy with how it turned out. I implemented a zsh-style Tab completion system. Pressing Tab auto-fills the longest common prefix and then shows all the possible options directly beneath your active prompt. This is one of the things I a most proud of because after using it, it was essentially very similar to the mac Terminal. This autocomplete works both for commands and files/folders. Errors and stuff: The terminal behaves exactly like real bash. If you type ls -la (-la is not implemented [yet?]) or cd too many args, it won’t just blindly execute or fail silently (it originally did so i had to change it), but it will spit back the same error message you’d expect to see on a real machine. GUI/CLI Integration: When i was implementing nano, i tried to think of how to implement a CLI editor. But i then realised, i can just connect the nano command to the notepad that I alreadu made. So typing nano test.txt in the terminal now just launches the Notepad app and opens the file for editing. And I made some other changes to stuff like the file manager but the terminal implementation above is the biggest change.
WebOS 2 Devlog #4: Initial bootloading sequence + login (optional) When i looked at other projects i realised that they all have some kind of flashy bootloading sequences but mine didnt have any so i built one. I didn’t want it to be too flashy so i made a simple, straightforward sequence. I also knew what exactly I wanted so I managed to finish this in 4hrs on the dot or it would’ve taken a lot longer. This is what it consists of: Bootloader that takes into account the selected theme: Since I had two themes in my OS (Modern and Legacy), it didnt make sense for both to have the same loading screen. So the system now actually boots up differnetly before loading the UI. Depending on your settings, you’ll either get a quick Modern UEFI startup, or a 1995 Legacy BIOS sequence complete with memory checks, IDE drive detection, and ASCII loading bars (had to use some outside help [ai] for this one as I’m not that old to know all that stuff). Hardware Interrupts: Just like a real PC, if you hit esc while the system is booting, it triggers a hardware interrupt and drops you into a configuration screen. Interactive OS Installation: If it’s your first time booting up (or you reset your system), you now have to actually “install” the OS. You can type in your preferred Username, network Hostname, and set an Administrator Password right inside the terminal. You even get the option to format your virtual hard drive. Login: If you set a password (which is optoinal) during setup, the boot sequence will actually halt and lock the system until you type it in. (Don’t worry, I added a recover command bypass in case anyone forgets it). Terminal Integration: The CLI terminal now dynamically reads your setup data. Instead of a normal prompt that you used to get with the default user@stardance or sth, you’ll see your actual custom username@hostname:~/$. Loading text: as the os loads and goes through the bootloading sequence some highly advanced random computer text ‘loads’ to add a little bit to the realism. Some of them are actual data from the host computer such as ram, gpu, and stuff like that. I had lots of other text and loading content that came from the the user’s actual real life hardware and software data, which added to the realism I had to research and use ai to make this because I had no knowledge of how computers were back then. There’s more but it wont fit here so you’ll just have to see it when i host it after my next ship.
WebOS 2 Devlog #5: File manager overhaul + custom dialog box I realised that always having the custom browser alerts was kinda boring and interrupting so i made my own dialogue box. I also changed the file manager to include some essential functions that it was missing to make it more like an OS (see below). Here are the changes i made: I abandoned the old array-based folders. I made it so that it now reads and writes directly to localStorage using stricter pathing (e.g., webos-file-Root/Documents/file.txt). I also built a native getUniqueName() function. If you create a duplicate file or folder, there’s no like a (1), (2), etc. at the end of it, which prevents data overwrites. This makes it more like a real OS Drag-and-Drop: I alos removed the old custom JavaScript coordinate trackers for file movement. It now uses the native HTML5 Drag-and-Drop API. You can physically pick up a file from the Explorer window, drag it out, and drop it directly onto the visual Desktop wallpaper. Custom Dialog Box: Native browser popups (alert(), confirm()) look hella ugly and break the flow so i built a custom dialog engine using JavaScript Promises. Now, when the system needs confirmation a custom window that fits with the theme appears. Because it uses async/await, the JavaScript pauses and waits for user acceoting or declining without freezing the browser. List View & Item Properties: I introduced a hybrid Grid/List view (just like a real os like mac). Because tracking file metadata (like Date Modified) from the start would have been way to complicated, I just built this engine where when the File Explorer encounters a file without a timestamp, it instantly generates metadata key (os-meta-path) using Date.now() and saves it permanently, which means that it allows for Date sorting without breaking anything.
WebOS 2 Devlog #6: UI, UX and functionality improvements This update focuses heavily on stabilizing what i already have and also refining the less finer aspects of the UI. Here is what i did: Theme improvenets: I overhauled the .theme-retro class. stuff were contradicting each other with one thing saying this and the other saying that (too many to even give an example). I also changed some other minor stuff too like increased the grid size in the desktop to prevent icons from overlapping. But this was the main change: System Security & Identity Manager: Implemented a global sanitizeIdentity utility (Regex: /[^a-zA-Z0-9_-]/g) to remove spaces and illegal characters from usernames and hostnames when the user sets it before writing to localStorage because if i have sth like ‘John Doe’ as the username and ‘my school computer’ as the host name, the terminal command would look sth like John Doe@my school computer. And this just looks hella ugly. Dedicated Identity UI: removed the raw identity inputs out of the Settings menu like i had before and moved them into a dedicated Identity Manager window because its more secure that way. I also added an authenticaiton wall before this window pops up. To do this, i wrote an async while loop for identity verification. All the users now have successfully pass the password prompt (or use the recover override to bypass the password) before it allows them to modify any identity settings. Bootloader improvements: btn-shutdown now properly halts system processes (clearing systemClockInterval and locking pointer events) instead of just hiding the UI like it did before where it just had like a black screen with text on it saying shutting down and stuff. It now has like a loading screen and all that stuff. Context Booting: i also implemented sessionStorage.setItem(‘boot_context’, ‘warm’) to track system restarts so different boots have like different bootloading sequences (the point below this). This didn’t take too long as i could just copy and past what i had in other sequenes and just take the text. Differnet Boot Sequences: The bootloader now reads the sessionStorage context. A Cold Boot triggers the full POST memory checks and hardware scans (dont know what this is. had to use ai for the sequences cus i didnt know what the data was). A Warm Boot (restart) bypasses POST and executes a different initialization sequence. THis makes the user more immersed in the environment.
WebOS 2 Devlog #7: Web Browser Implementation I reached the final couple of phases of my project and this is one is one of the crucial ones: building a web browser. My plan was to use iframe. But the thing about building a webbrowser inside a webbrowser or inside a sandboxed environment like a website is most websites (about 99%) like google, youtube, or github use X-Frame-Options and Content-Security-Policy: frame-ancestors ‘none’ which means they specifically block their websites from being displayed in cases like this ot prevent clickjacking. So every time i tried loading a webpage, it just says this webpage refused to connect or sth. I used ai to try bypassing it but it didnt work, so with the help of the same aforementioned ai, i implemented a solution. The solution: Since I cannot disable host browser security policies, and i dont have a backend proxy server, I had an idea to just build my own native ‘browser’: EpochOS IntraNet (just decided on the name EpochOS btw). This didnt take too long cus i had someone (ai) helping me cus it was almost midnight and i was tired as hell. Here are the features: I wrote a parser that intercepts navigation requests. If the user navigates to webos://home or webos://directory, the engine injects a large data:text/html;charset=utf-8 string directly into the iframe’s src attribute. This opens a local, HTML dashboard without triggering cross-origin blocks. Essentially, i wrote html in js and injected that html into the iframe src, so i essentially made my own ‘web-page’. Standard links inside a data URI iframe will try to navigate the iframe itself, which doesn’t update the OS address bar. To fix this, I set up a window.addEventListener(‘message’) listener on the parent OS. The buttons inside the iframe use parent.postMessage() to pass the target URL up to the OS, allowing the JavaScript engine to handle the routing and update the UI properly. A real browser alse doesn’t lose a page’s state (like scroll position) when you switch tabs. And im trying to make a real browser. So, to achieve this, the browser engine now doesn’t share a single iframe but rather new ones get created: Every time the user clicks the “New Tab” button, a new node is generated and appended to the container. Switching tabs simply toggles the CSS display property between none and block. This keeps inactive pages fully loaded in memory. Because cross-origin security rules (the ones i mentioned before) lock us out of accessing the iframe’s native window.history object, I had to build a custom history router. Every tab object in the JS array maintains its own history array and a historyIndex pointer. The back/forward buttons just decrement or increment this pointer and re-apply the URL to the iframe. Kinda genius ngl (this was an idea from ai btw) But for a browser to be useful, it needs to have some proper webpages. After some scouring, i found some webpages that do work in iframe and dont have the restrictions that websites like google do. I’m not gonna tell you what websites those are, you just have to see yourself. I found like 10 or sth so there’ll be plenty of stuff to do. Other features of the browser include: bookmarking, reloading (i also added a reloading spinner btw) and some more stuff.
WebOS 2 Devlog #8: Migrated to ES6 arch. and split css into any files I just realised that essentially all my code is squished into three files-index.html, index.css, and index.js. And all of them were quite big. Like the js file had more than 2,000 lines, and css had more than a 1,000 lines. I dont know why i havent noticed it before but im glad that i did now because i was plannign to do a deep debugging session next and it wouldve been hella hard to do in a 2000+ line file. Plus, a single bug in e.g. the calculator could crash the file manager, and debugging required scrolling through thousands of lines of code. So, i decided to migrate the index.js into an ES6 architecture and split the index.css into multiple manageable files. That’s all i can say for this devlog ig. There was nothing new except some lines of code i had to add after the migration to make sure everything is working. There were no really new features added. But there were many things that delayed me: i accidentally deleted a block of code in the index.css without moving it and didnt notice it so some styles were broken and i had to like retrace my steps and stuff to fix all the problems it caused. That’s all ig. The project is almost coming to an end! Can’t wait to ship it :)
WebOS 2 Devlog #9: Implemented color accents and some browser improvements I was originally going to do some debugging and finish of this project but i was looking through other peoples’ webos projects and realised there was much i could improve. I then got like a huge brainwave about new stuff to implement so ig it’ll be a bit longer before I ship this project. One of these ideas was adding color accents because right now my modern theme is limited only to a light pinkish color. Here are the changes i made: Change 1: Accents In the settings screen, i added an option to choose the system accents. I also gave some basic presets and added an option to pick a color by adding a color picker option. Implementing this was quite simple, just replace all hardcoded pink colors with –os-accent (which i added in css). I linked htis –os-accents attribute/class to the color that the user chooses in js and made ti that all the places where the accent pops up, the color variable there is replaced with –os-accents. So if the user changes the accent in settings, the places where –os-accent is set changes color automatically. Challenge 1: Contrasting invisible text The problem: Swapping a single hex code for an accent color that the user chooses breaks all translucent UI elements (like shadows). Furthermore, if a user picks a bright color (like Mint Green or Yellow), the hardcoded white text on the title bars becomes completely invisible. The Solution: I implemented a Hex-to-RGB engine that injects raw RGB values directly into the CSS :root. This solves the first part of the problem. To solve the text contrast issue, I implemented the WCAG Relative Luminance algorithm ( used a bit of outside help here iykwim ;)). The OS now mathematically calculates the perceived brightness of the user’s chosen color. If the relative luminance passes a threshold of 0.179, the OS flips the title bar text to pitch black so its legible comfortable. Change 2: i was just playing around in the webbrowser and exploring, and i found some stuff that needed to be fixed: when building a simulated web browser using tags, embedding sites like google resulted in a “Refused to Connect” error. These servers send an X-Frame-Options: DENY header. Because client-side JavaScript is legally blind to server headers, the OS couldn’t detect the block to show the custom error screen I made. I knew this error existed and knew this was a thing but only after experiencing it like a real user did i realise how annoyinf this was and it made my os seem broken. Solution 1 (attempt): I initially tried routing requests through a third-party API to read the headers, but ad-blockers and privacy shields just made the API requests not work, crashing the entire browser app (at least thats what i think is the cause). The Solution: I used a massive Regex blocklist, such that the browser now instantly intercepts requests to 99% of top-tier websites that block iframes (like youtube or google), and routs the user to a custom error page. (did these stuff with the help of some ai only) Next Problem: When a user searches Google inside the iframe and clicks a link in the embedded page, the OS address bar wouldn’t update. This is a browser restriction. Browsers mathematically lock JavaScript out of reading cross-origin URLs for security reasons. At this point i just stopped instead of trying to waste my time trying to break through some military grade (i think?) restrictions. Change 3: Before, only iframe compatible websites worked but i had an idea to route all queries (except the ones in websites format) through a google search. Apparently, google.com doesn work in iframe but the google search works. So now if i type hello world, it just redirects me to a google search page with hello world searched. P.S. I made some other tiny changes aswell but i cant rlly remember them now sry
WebOS 2 Devlog #10: icon implementation + taskbar remodeling When i looked at the webos, i realised it missed something to look like an actual os. It wasnt realistic enough. So, i decided to do two changes to make it more realistic. Here is what it did: Change 1: I added some real user data in the taskbar. More specifically, the host device’s actual network and battery status and date. I used the the browser’s native navigator.onLine and the navigator.getBattery() APIs. I also made it such that the os actively listens for network connection drops such as when wifi is disconnected and battery charging/level events, and updates the data accordingly. Change 2: I also noticed that my entire os is filled with emojis for stuff like calculator, file manages (all the apps essentially), the taskbar, the browser, the sites in the browser, etc. THis made it look really unprofessional so i fixed it. I replace all system emojis with Google Material Symbols to make it look a lot better. I did face one challenge however, the emojis in my website in my web browser weren’t being replaced by icons for some reason and I then realised that the iframe sites acts as a sandbox and they dont inherit the imported apis from the main html file. So I just injected a tag and imported the Google Material Symbols API directly in the isolated HTML code in my js file. Change 3: The goal of this change was ot allow the user to snap the taskbar to the top of the screen (Linux style). This was the part that took longer than expected. I originally just added an optoin in the settings to move my taskbar to the top of the screen but the pill-like, floating taskbar i had was really ugly when it was at the top. So, i spent like more than an hour and half trying out new designs and redesigning the taskbar so it looks good both when its at the top and the bottom and finalised a design that actually looks much better than what i had before. It now takes up like the entire bottom/top of the screen instead of floating in the middle liek before. That was all the changes made since the last devlog.
WebOS 2 Devlog #11: Reset btn + Notepad IDE + other changes This was a long long coding session. Had to stay awake till like 2am. Here are the changes i made. Ill try to keep everythign concise because theres a 4000 char limit and i have lot more to say than that. Change 1: I added a factory reset button in settings that directs the user to the webos setup screen like the one they get when they first enter the website. When testing this feature, i realised that random variables from completely different web projects started appearing in the File Manager. Because browsers share localStorage databases across the same local port (e.g., 127.0.0.1:5500), the OS was inheriting the ghosts of old projects. The solution: I had to upgrade the Initial Setup Utility. When formatting the Virtual Hard Drive, the system now temporarily caches the user’s OS credentials in memory that they entered, executes a total localStorage.clear() wipe to delete all the localStorage varialbles, and then safely restores the username and stuff before continuing normally. Change 2: Notepad IDE This was the part that took the longest (and its still not done). I wanted to create something absolutely unique that i havent seen in any other webos projects that i saw. And i realised, why dont i make an IDE in me webos? Not an actual IDE ofc but the goal was to allow users to write raw HTML/JS in the Notepad, save it as a .app file, and double-click it on the desktop to launch it as a fully functioning, program. Attempt 1 (Failure): I initially tried parsing the saved text and running it directly in the OS context using eval(). It was an absolute security and stability nightmare. The custom app had root access to the OS memory and instantly overwrote the osState object, completely crashing the Window Manager within seconds. Attempt 2 (Failure): I tried fixing attempt 1 but messed up the entire code in the process so i had to revert to that commit and this time, i tried putting the apps in Web Components and the Shadow DOM. While this successfully isolated the CSS so custom apps didn’t break the OS styling, the JavaScript still executed in the global window scope. Running two different custom apps simultaneously caused variable collisions that bricked the taskbar. It was too complex and fundamentally flawed. I wiped the slate clean again. Attempt 3 (Success): I realised that the answer was looking straignt at me. I was so stupid. I can just take the code and slap it on to an iframe, and it runs it, just like how i made the web browser. The solution was that When a user double-clicks a custom .app, the OS takes the raw code and converts it into a text/html Blob. It then passes that Blob through URL.createObjectURL(), creating a localized URL. By feeding that URL into an , the custom app boots perfectly. I am really proud of this feature. It’s still not fully done but i had to make a devlog since the tracked time almost reached 10hrs.
WebOS 2 Devlog #12: Debugging Session + retro theme redesign In this session I started debugging the os and wow i found a lot of bugs. Im not going to get into them because it would take too long but some of them include how the bootloading sequence absolutely breaks if the user presses escape before the setup is finished because the cache isnt cleared properly so when the user gets the setup agian, he wont we able to configure some stuff like the password because the cache wasnt cleared properly. I also redesigned the retro theme because it looked ugly because the accents i implemented in the modern theme appeared in the retro theme which didnt fit together. Moreover, some of the aspects of the retro theme, such as the top part of the web browser or the settings screen were just uncomfortable to look at. Changing the retro theme was such a pain because everytime i thought i fixed it, a new discrepancy appears and at one point after i fixed it, my retro-theme.css was so messy i couldnt be bothered to fix it so i just inputted the messy working version into gemini and it cleaned it up. Anyway that was all i changed this time. And I did more and more changes but many of them are small and it would take too long to explain in a devlog. p.s. didnt know which pic to attach so its just a simple screenshot of the desktop.
WebOS 2 Devlog #13: Easter Eggs Pt. 1 I was looking forward to this a looooot. I’m not giving any spoilers whatsoever but I was so locked in tday and yesterday coding easter eggs into the OS. I added like 2 easter eggs (might seem less but trust me they’re very developed), one’s a very simple one but the other one is my favourite and is the reason this devlog took so long. It’s still not finished and im only lik halfway done w/ it but I’m not going to go into any details because it will spoil the fun but im sure you’ll enjoy it. Also, im not done with making easter eggs and i just made this devlog cus the time is almost 10hrs. I still have to finish the second easter egg and do more on top of that. The next one will hopefully be the final easter egg session (unless i get another absolute brainwave). p.s to prevent spoilers, the attached pic is just a screenshot once again
WebOS 2 Devlog #14: Easter Eggs Pt. 2 I am now done with making the easter eggs and in total i made 5 of them, which may seem less but some of them are really really complex and developed. I stayed up till 2am making these 😭. Out of these 5, three of them are simple easter eggs, one is more complex but still quite simple and the final one is essentialyl the absolut highlight. It is the reason why the easter egg section took me so long. I am not going to go into detail to avoid spoilers. Anyway i hope you have fun with the easter eggs :) p.s the attached pic is a screen shot again cus i dont want to give spoilers
WebOS 2 Devlog #15: System Daemon implementation To keep the users more engaged so even when they saw everythign, they would still spend more time doing stuff, I wanted to build something alive for the desktop environment that would interact with the user. So, instead of a standard app, I built a system daemon! If you dont know what that is, it is a digital pet that hangs out on your desktop and does random stuff. I dont hav ea name for him yet so ill just call him daemon for now. When he’s healthy, he flies around the screen and shouts random stuff at you. But I didn’t want him to just be a visual gimmick. He interacts with the actual operating system itself and has states: He is hungry: Because I previously built a drag-and-drop system for the File Explorer, I hooked him into it. You can drag actual text files or folders out of your explorer and drop them on his face. He will chew them up and literally delete them from the virtual hard drive (localStorage). He has a digestive tract: I built a array for his stomach that records what he has last eaten. If he ate a file you actually needed, you can rapid-click his face 5 times. He will regurgitate the raw file data perfectly back onto your desktop. He has boundaries: I ‘taught’ him to recognize core OS files. If you try to feed him Notepad.app or the System Settings, he will violently reject them and yell at you. He has one more state but that relates to the easter egg so i wont provide any additional details in order to not spoil it Oh, and i changed his appearance for the retro theme. anywhat that’s all for this change. I didn’t get into the nitty gritty of how I built him because I am so excited to finish this project. Just a few more features and then I’m done.
WebOS 2 Devlog #16: Widget implementation + debugging In this session, i made multiple changes to the OS to improve the overall UX. I had to pull another all nighter again 🥲. Here is what i changed: Change 1: Debugging Everytime i enabled the system daemon in the settngs, the entire os reloaded which was quite annoying so I ripped out the location.reload() in the Settings app. I also moved him to the body so he didn’t get trapped behind windows, because most of the time the daemon was floating behind windows and i couldnt really see him. I also gave the Welcome screen a massive 9999999 z-index so the daemon would float behind it because my previous step was too effective and he was infront of every single screen including like the bootloading screen. Challenges: I ran into z-index hell because I didn’t plan the stacking initially. He was either in the very front or at the very back and it was all a bit weird. Change 2: Widget implementation I initially wanted to implement sticky notes as a widget which was inspired my the mac sticky notes so i coded all of that in first but I realised i can take it a step further and code in multiple widgets. Challenge: But the thing was i hardcoded the sticky notes widget so i had to recode everything and integrate all of the widgets at once I added a simple analog clock widget I added a calendar widget I initially added a system monitor with like the ram and cpu data but the thing was due to the security restrictions, I can’t get the actualy live hardware data so it would have to be a simulation, which i didnt want so I replace the system monitor with a live weather widget which uses the BigDataCloud and Open-Meteo APIs to provide weather data. Change 3: Originally I had all hte widgets in the context menu on after the other but they looked like a list and a bit redundant. So i removed all then in the html file and added one ‘Add a widget…’ option which connects to a screen with all the widget options
WebOS 2 Devlog #17: Media player + Audio spectrum widget implementation It has been a massive coding session. And I barely managed to keep the time below 10 hours and I still went over it. But, on the bright side, the OS now has a fully functional, media player and an audio spectrum widget! In the media player, anyone can listen to radios, and lots of music. But the reason it took 10 hours is because implementing these stuff required facing some serious bugs-some of them for genuinely stupid mistakes-and rebuilding the audio engine the right way (you’ll see what I mean). Here is a breakdown of how these new features work, what went wrong, and some other stuff: Overview of features The Media Player: The new Media Player is a audio application that routes requests to three distinct APIs to fetch music that the user can listen two: Audius: This is a “decentralized music streaming platform for artists, labels, and fans.” And it’s free! I fetches some of the music from this API. Radio-Browser: This is a platform that is, in a nutshell, Wikipedia for radios. I fetched thousands of live, global radio broadcasts using this API Apple iTunes (Preview): This was a golden find because I didn’t know this existed (not for free anyway). This API pulls top hits and previews of music. Granted, it’s not full music tracks but the songs are much more famous and popular. The Audio Spectrum Widget To complement the player, I also added an Audio Spectrum visualizer. It uses the Web Audio API, or more specifically, its AudioContext and an AnalyserNode to get the frequency data from the audio element. That data is then mapped to an HTML5 element. Using requestAnimationFrame, I made it such that the spectrum repaints 40 individual frequency bars roughly 60 times a second, which creates the audio visualiser waveform thing. Challenges The Geolocation failure: The OS was originally hardcoded to fetch radio stations from my address because I hardcoded that for testing purposes. But I stupidly forgot to remove that so when attempting to make this dynamic by using vpns I spent like 40 minutes trying to figure out why ut kept showing stations from my local area and not japan (where my VPN was connected to). And the reason for that is the hardcoded address I mentioned earlier. Moreover, some of the API queries were too specific, causing the media player to return empty for smaller regions like the Bahamas. To fix it i used the BigDataCloud API to quietly ping the user’s IP address, cache their true country code, and inject it into the API queries. the broken audio spectrum: Initially, the audio visualizer was completely blank. Even when fixed, the baseline would just disappear the second music started playing. The canvas drawing logic was also aggressively using clearRect to wipe the entire widget, which erased the idle state baseline. To fix it, I changed the baseline math so that the baseline sits firmly at the bottom of the widget. I also remade the drawing loop to explicitly redraw the baseline before checking the isPlaying state, so the frequency bars can work smoothly. retro theme problems: I completely forgot about the retro theme as i was just focused on building the player and the widget. So, in the end i had to make the stuff retro theme aswell. I encountered some problems there like some white on white text and some styles not applying which turned out to be because my dumbass brain mispelled the ids and classes Oh, and I found some other big bugs. The dragging engine was hella laggy. Like the response time was like 3 seconds before it registered. I would go deeped but im abt to cross the 4000 character devlog word limit but in a nutshell I realised it was because the mousemove event listener was directly updating the inline CSS (style.left and style.top) on every single microscopic mouse movement so it was really laggy.
WebOS 2 Devlog #18: Debugging session I swear random bugs keep popping up no matter how much debugging I do. There’s always something that’s wrong or doesn’t work but that’s just how it is. In this session which was longer than expected, i fixed a lot of different bugs. Here is a summary of the changes i did: I spent lots of time rewriting the mathematics for the desktop icon layout, and also changed the strict grid-snapping to free-form placement cus it felt it was quite annoying not to be able to place stuff on the desktop wherever you want. Unfortunately, it took too long and i abandoned the idea and just moved on without making any changes. I also spent some time cleaning up the code and tried to optimizing the code. Some other bugs I fixed include: Desktop icons were randomly rearranging themselves every time a file was saved. I found out that the reason was that since the localStorage returns keys randomly, everytime i wrote sth to localStorage, the items were randomized so the ordier they appeared on the desktop changed. So i rewrote the logic to sort the stuff alphabetically before displaying. The Notepad app was also blindly overwriting existing files with the same name. I fixed it by adding a localStorage query to intercept matching keys and to display an osConfirm dialog, forcing the user to explicitly authorize the overwrite. The internal browser was throwing captchas all the time and failed to load error screens for blocked domains. Since Google aggressively blocks embeds and flags them as bot traffic, i changed the default browser to Bing, which was much better and i didn’t get captchas everytime i search somehting up I also modified the system daemon engine so that it introduces itself when a user first view the OS. The weather widget was pulling the location not from where the user was but rather where my ISP was routing my traffic through. So if i lived in a village and ISP routes my traffic through like New York, the weather that showed up was that of New York. To fix this, i swapped the logic to request exact hardware GPS coordinates via navigator.geolocation, while falling back to the IP routing API if the user denies the browser prompt. If the location is inaccurate the user can enable the location permission in the browser and the weather widget then shows the correct location. The visualizer widget was working perfectly but i had the idea to add a text container above the bars which shows what the user is playing. I made way way more changes but many of them conform to the easter eggs and mainly about the theme that gets unlocked (small spoiler there ;)) so i won’t really get too much into it.
WebOS 2 Devlog #19: README.md + ARCHITECTURE.md + additional customisation features I’m in the final stages of the project and in this long session, I did many things. Firstly, I wrote a README.md with all the necessary stuff and i also made an ARCHITECTURE.md file which explains the nitty gritty insides of the WebOS so anyone can understand how the website works. Other than that I added a couple of other stuff. Firstly, i realised that even though I have accents to customize the desktop, I don’t have a wallpaper gallery (except the nasa apod) which I found was quite necessary. At first, i coded my own wallpapers like a synthwave grid wallpaper, pinstripe wallpaper for the legace theme, a tranforming aurora wallpaper and like 3 more but after i coded them, they just looked so damn ugly. So i scratched the idea of me coding my own wallpapers and added three categories of wallpapers in the wallpaper dropdown with each category having three 4k wallpapers in them so every time you pick that category, you get a random wallpaper from the three. I also added an about section in the settings which has a buttton that leads to the github page.
WebOS 2 Devlog #20: Updated README.md and ARCHITECTURE.md + changed properties window I just realised I had a properties window in the OS and that was quite outdated so I changed to include some new info like the Last Modified date which updates everytime the user saves something because i added a localStorage.setItem that saves the timestamp. I also updated the README and ARCHITECTURE files to make them sound better and to add some additional info. Anyway, this devlog is probably the last on for this project! Hope you enjoy :)
WebOS 2 Devlog #21: Final Submission Just did some final changes to the welcome text and am about to ship it
Ships:
I created a simple operating system with HTML, CSS, and Javascript that runs on you web browser. It has a nostalgic look and feel with old-styled buttons and looks. To make it more like an OS, a calculator and a notepad have been created and implemented in the app. Moreover, to allow the user to personalise as much as they want, many settings have been included, from custom wallpapers to wallpapers that come from NASA itself and more. This was my first large scale project that I have coded so it’s an interesting experience for me. Before this, I only used to do challenges on platforms like Codewars and other than some small side projects, I don’t have a practical experience. Therefore, i think this project has taught me a lot on how to built stuff yourself. I hope you like my project :)
EpochOS is a fully functional operating system built entirely with vanilla JavaScript, HTML, and CSS. It doesnt require any client side installations or anything and runs directly in your browser. Its features include a file explorer, a browser, a media player, many essential applications, lots of customisation, widgets, and an actual ecosystem that mimics a real operating system. It also has no backend so it’s all run locally on your browser using the browser’s localStorage. Some things you should know before you test this out: Firstly, please don’t finish rating this project until you experience all the features because there are many hidden features that might change your opinion. An example is easter eggs. I implemented many easter eggs which you must experience before voting because these easter eggs are very devloped. If you can’t find them or are stuck on one of the easter eggs, read ARCHITECTURE.md and at the very bottom, i listed all the easter eggs so you can check them out. In fact, read the ARCHITECTURE.md because it provides valuable info about many of the features in the OS and how they work so make sure to read that aswell Secondly, this OS is not compatible with mobile or tablet devices and is optimized for desktop only. So please keep that in mind when you are testing it. Thank you so much for testing this project and hope you enjoy it :)...
|
1792846447.5722446
|
1792932847.5722446
|
|
16318
|
BloomDesk by @NITHIN | Stardance
|
NITHIN
|
2
|
5.0
|
8
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T05:01:44Z", "hours": 1.0, "multiplier": 8.56, "payout": 8, "blessing": "neutral", "text": "BloomDesk is a browser-based personal operating system built as a single HTML file. It runs entirely offline and tracks your notes, mood, focus sessions, and activity over time. The interface responds to how you work, shifting its visual state based on your behavior. All data is stored locally in your browser with no server required.", "repo": "https://github.com/Nithinfgs/BloomDesk", "demo": "https://glittery-crepe-01b1da.netlify.app/"}, {"ship_num": 2, "ts": "2026-06-12T14:21:57Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What I made: NovaOS, a single-file web-based desktop environment a fake \"OS\" that runs entirely in the browser with draggable windows, a taskbar, Start menu, and several built-in apps (Notepad, Calculator, Terminal, Devlog, Settings). Challenges: Getting window dragging, resizing, and z-index focus stacking to all work smoothly together without conflicts was tricky, especially making sure the taskbar stayed in sync with open/minimized windows. Building a mini Terminal that could actually parse commands and trigger real actions (like changing themes or opening apps) took some extra logic too. What I'm proud of: The Terminal app it feels like a real hidden feature beyond the basic requirements, since you can type commands to control the OS itself. I'm also happy with how the glassy/gradient visual style came together to give it its own identity.", "repo": "https://github.com/Nithinfgs/BloomDesk", "demo": "https://glittery-crepe-01b1da.netlify.app/"}]...
|
[{"post_id": 14152, "ts": "202 [{"post_id": 14152, "ts": "2026-06-23T04:08:38Z", "hours": 0.0, "text": "I’ve officially renamed and reworked the project into BloomDesk.What started as an earlier experiment has now been rebuilt with a completely different direction and identity.Instead of feeling like a traditional operating system or a futuristic dashboard, BloomDesk is becoming a cozy, living creative workspace that feels more human and personal.I’ve been reworking both the design and the feature set to make it feel unique rather than another WebOS clone."}, {"post_id": 7564, "ts": "2026-06-12T17:24:37Z", "hours": 0.0, "text": "Added a secure password generator and a snippet vault. Focused on building tools that save time on everyday tasks."}, {"post_id": 7480, "ts": "2026-06-12T14:09:35Z", "hours": 4.0, "text": "Just completed"}]...
|
Title: BloomDesk by @NITHIN | Stardance
Devlogs:
Title: BloomDesk by @NITHIN | Stardance
Devlogs:
Just completed
Added a secure password generator and a snippet vault. Focused on building tools that save time on everyday tasks.
I’ve officially renamed and reworked the project into BloomDesk.What started as an earlier experiment has now been rebuilt with a completely different direction and identity.Instead of feeling like a traditional operating system or a futuristic dashboard, BloomDesk is becoming a cozy, living creative workspace that feels more human and personal.I’ve been reworking both the design and the feature set to make it feel unique rather than another WebOS clone.
Ships:
What I made: NovaOS, a single-file web-based desktop environment a fake "OS" that runs entirely in the browser with draggable windows, a taskbar, Start menu, and several built-in apps (Notepad, Calculator, Terminal, Devlog, Settings). Challenges: Getting window dragging, resizing, and z-index focus stacking to all work smoothly together without conflicts was tricky, especially making sure the taskbar stayed in sync with open/minimized windows. Building a mini Terminal that could actually parse commands and trigger real actions (like changing themes or opening apps) took some extra logic too. What I'm proud of: The Terminal app it feels like a real hidden feature beyond the basic requirements, since you can type commands to control the OS itself. I'm also happy with how the glassy/gradient visual style came together to give it its own identity.
BloomDesk is a browser-based personal operating system built as a single HTML file. It runs entirely offline and tracks your notes, mood, focus sessions, and activity over time. The interface responds to how you work, shifting its visual state based on your behavior. All data is stored locally in your browser with no server required....
|
1792882103.4341521
|
1793746103.4341521
|
|
16473
|
Chill Record Player by @miles_s_aguilar | Stardanc Chill Record Player by @miles_s_aguilar | Stardance...
|
|
2
|
83.25
|
623
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T18:29:14Z", "hours": 30.0, "multiplier": 19.74, "payout": 466, "blessing": "neutral", "text": "I made a website for playing vinyls! I think an important aspect of enjoying music is being able to experience it physically, through interacting personally with the forms it comes in. Now obviously, this record player is online, so I did my best to bring that physical experience into a virtual website. Hopefully everything is self-explanatory on the site, and I incorperated a lot of feedback from the first round!! In the future, I plan to make this a standalone app, giving people the ability to upload their own music. Also, I’ll try to fix performance issues as I understand this website can be a bit resource-itensive.", "repo": "https://github.com/stackofdoggos/Chill-Music-Player", "demo": "https://milesaguilar.com/music/"}, {"ship_num": 2, "ts": "2026-06-21T07:05:21Z", "hours": 10.0, "multiplier": 16.59, "payout": 157, "blessing": "neutral", "text": "Hey everyone, I made a 3D vinyl player online to play classical music. Please try it!!! It’s fully hosted on my personal website at https://milesaguilar.com/music One of the most challenging aspects of this project was making everything feel as tactile as possible. To do this, I needed to balance realism with how annoying things would be to use. To this end, I spent a lot of time thinking about which controls were most intuitive. In the future, I plan to let people upload their own vinyls and have more furniture in the room. This is mostly just a proof of concept to see if people find this interesting", "repo": "https://github.com/stackofdoggos/Chill-Music-Player", "demo": "https://milesaguilar.com/music/"}]...
|
[{"post_id": 39588, "ts": "202 [{"post_id": 39588, "ts": "2026-08-02T17:44:39Z", "hours": 8.6531, "text": "Devlog #12: Chill Record Player I think the video I attatched was too large so I’m now rewriting this devlog ;-; Anyways, I’ve spent the last week implementing the Yandhi intro as I mentioned last devlog/product idea. I spent a ton of time modelling/keyframing it in Blender, then integrating it with the website to infinitely loop, then dissasemble the vinyl when a user enters the website. What took the longest was definitely the smooth yet neat transition where the inside of the record turns into the room, so please check it out!! PS caustics take foreverrrr to render…"}, {"post_id": 35320, "ts": "2026-07-26T17:17:22Z", "hours": 0.3014, "text": "CONCEPT: Loading Screen Hey all! This isn’t gonna be a normal devlog, but rather a quick update on something I’ll be hoping to add to the app. I’ve been tossing around a couple loading screen ideas but I think I have a really cool one. I want to mimic the Yandhi opening where an exploded view of a CD comes together and begins to spin. I think I can recreate that with my record player (or maybe just one vinyl, although that would be boring-ish?) Since this animation is a little long, I’ll probably only have it play when the user hasn’t logged on in awhile or something."}, {"post_id": 35076, "ts": "2026-07-26T08:21:15Z", "hours": 8.665, "text": "Devlog #11: Chill Record Player Spent all day adding a new table, and then using TypeScript to change the texture on it. I’m a bit worried about how I’m dividing the texturing between Blender and ts, as I have no rhyme or reason right now between which textures I delegate to which platform. Usually, the procedurally-generated textures are loaded in ts though. I also smoothed the grain on the bookshelf. The rug looks bad so I’ll work on that next, and then prepare the website for a MacOS app and implement more of the features I talked about in Devlog #9!!"}, {"post_id": 33809, "ts": "2026-07-24T01:31:18Z", "hours": 7.1611, "text": "Devlog #10: Chill Record Player Made a much more simplified loading screen and recorded some sound effects. Truthfully, I haven’t had that much time to work on the website. AND, I wasn’t able to export my original idea for a loading screen without a watermark. I’m gonna try and make something better than this…"}, {"post_id": 27539, "ts": "2026-07-13T06:03:22Z", "hours": 1.7986, "text": "Devlog #9: Chill Record Player A little hard to tell, but I updated the model of the bookshelf to be more visually interesting (extended the rails and added a metal base) and I also re-UV-unwrapped the bookshelf so the wood texture looks less stretched. I think I’m going to try and code something that blurs the texture a little though as the black parts are a little too dark for my taste. I was also thinking of adding this really cool animation I saw (see below) on Twitter to my loading screen, so keep an eye out for that!"}, {"post_id": 26712, "ts": "2026-07-11T17:41:40Z", "hours": 10.0772, "text": "Devlog #8: Chill Record Player I implemented more major performance enhancements, specifically aimed at increasing performance on retinal displays. Since retinal displays have so many pixels, computers bundle individual pixels together into logical pixels. The ratio at which this happens is called DPR. A higher DPR means sharper images but lower performance. I capped the DPR at 2x on “High”. Other changes were: Capped FPS at 60 -> 45 Added performance benchmarking to determine optimal settings for device Brought back temporal blur post-fx scan with extra leeway gained by reducing FPS Made “reflections on” default behavior Pushed more work to the loading screen Further performance changes planned before standalone app release Seeing if there’s a way to smush the 8x post-fx render stack into fewer passes Decimating more geometry Further ideas planned before app release: MAJOR: Letting user add more music MAJOR: Letting user add own props MAJOR: Tutorial/more tooltips MAJOR: Fixing flip animations upon un-focusing MAJOR: Adding zoom view to baskets MAJOR: Fixing audio bug between tracks (hard to pin down and test fixes, I’ll work on that tomorrow probably) MINOR: Generating normal maps for textures and replacing procedurally-generated floor MINOR: Modelling a better-looking table with legs that aren’t just metal poles lol MINOR: Fixing weird blur bug on the vinyl cover MINOR: Adding above-vinyl view that shows users where the start and end of every track is in different colors, allowing greater control over what songs can be played and when (see image below)"}, {"post_id": 26221, "ts": "2026-07-10T21:41:53Z", "hours": 6.5947, "text": "HOTFIX: Performance Enhancement So I was messing around with the website today and realized it was maxing out my GPU, which I thought was ridiculous. It turns out I had been vastly underestimating the performance impacts of some of the effects I had on the website, as well as the meshes I was using. I decimated a model I had on top of the bookshelf but it was simply too many tris, so I removed it and implemented other code that made the default graphical settings less taxing."}, {"post_id": 24858, "ts": "2026-07-08T18:26:22Z", "hours": 0.8017, "text": "Devlog #7: Chill Record Player Last one before ship #2! Got everything in order, including uploading things to my site and adding some more props. Also fixed some pathing issues. I also kinda got rid of the blur… After adding HDRIs, it looked kinda like Garry’s mod lol"}, {"post_id": 24323, "ts": "2026-07-07T20:36:35Z", "hours": 12.4606, "text": "Devlog #6: Chill Music Player Added a bonsai tree and started modelling other objects I want in the room. Pulled an all-nighter for this. While I was doing this, I realized that the file format I was using to render the room (glb) doesnt support specific node setups and textures. This essentially limited the realism of the textures I was trying to create. To alleviate this, I’ll have to rely heavily on realistic lighting and things like glossiness. So, I decided that the lighting should be handled by an HDR and reflections be rendered in real time (I wonder how bad the performance hit will be on this). However, I also want to keep the day-night slider. This poses an issue, as HDRs are static images. This means I’ll need to write code to interpolate (probably just a linear ramp) between a couple HDRs throughout the day. Now, I don’t know if this will give me the same very warm lighting I have now. I also intend to add reflections to the glass cover of the record player after I implement HDRs, but we’ll see… Other changes: Removed emitted dots Performance changes Worked on modeling a new table behind the scenes (I modeled my dining room table a year ago but p sure I deleted it unforch)"}, {"post_id": 23214, "ts": "2026-07-06T01:09:10Z", "hours": 14.3861, "text": "Devlog #5: Chill Record Player After a monumental amount of work, I’ve ported the geometry of the room (which I had originally written in typescript) into Blender. Hopefully, this gives me more control over adding more complex geometry into the scene like plants on the ground and trinkets on the desk before I export it as a GLB file. I really can’t emphasize enough how long this took; this literally doubled the amount of time I’ve spent on this project. Anyways, some of you may have noticed that the scene in Blender looks pretty plain, though, and that’s intentional! I’m gonna handle the lighting and some of the texturing in typescript. Some of the other features I’ve added/fixes I’ve done are a nicer settings panel, warm lighting, and reducing the crackle from the record player, which I heard was a little annoying. I’ve also added post-processing to the camera, including chromatic abberation, some bloom, and a grain filter which becomes more noticeable during sunset.. My next goal will be to add as much detail to the scene as I can in Blender to really make the scene come alive. That definitely means replacing the cactus-ish plant on top of the bookshelf lol."}, {"post_id": 22020, "ts": "2026-07-04T08:14:47Z", "hours": 2.7978, "text": "Devlog #4: Chill Record Player Since my ship, I’ve been working on more features such as a day-night slider (which I hope I can sync to the user’s time at some point), a remodeled bookshelf (this took awhile), and a better lighting system. I also added bins below the bookshelf for bulk storage of records after I friend recommended I do that. Some features people have been asking for and my thoughts: Hosting your own music: until I set up a dedicated DB for this, this is not going to be possible. Once I make this a standalone app I’ll definitely implement that. Also note that I can’t add non-classical music here because 99.99% of non-classical music that is popular right now is not in the public domain. Tutorial: Yes! I’ll work on accessability Favoriting records: Yes, with the new bookshelf I can implement that For now, I’m going to try and make the room feel warmer/more cozy by using volumetric shaders and introducing subsurface scattering on my models if I can do that without hurting performance. Follow to stay updated!!!!"}, {"post_id": 12970, "ts": "2026-06-21T07:01:31Z", "hours": 0.865, "text": "Devlog 3: Before first ship! added a custom shader which allows the user to switch between what time of day it is. will get rid of the slider in a future ship but its the best i could do for now…"}, {"post_id": 11517, "ts": "2026-06-18T20:15:15Z", "hours": 3.5244, "text": "Devlog 2: A super chill music website Over the past few days, I’ve been slowly chipping away at some QOL features. Users can now see which keystrokes can be used at any given moment and users can now inspect vinyls. Other features that were improved were the ability to move the arm of the record player with higher precision, and a top-down view which enhances that experience. Unfortunately, I had to change the records to be public domain in preparation for my first ship. MBDTF will not be avaliable, but maybe I’ll let users locally host their own vinyls! Ideas ideas ideas… Maybe this could also become a standalone app. Planned features (either before or after first ship) Custom shaders -> Moody lighting or time of day slider with lamp u can turn on and off Ability to locally host music or add your own Way more records Ability to change record order More views for inspecting your records Improve the top-down angle to show when tracks begin and end on a record Ability to customize painting"}, {"post_id": 7310, "ts": "2026-06-12T05:42:23Z", "hours": 5.2231, "text": "A super chill music website Recently, I’ve been kind of inspired by this Brian Eno quote: “Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become its signature. CD distortion, the jitteriness of digital video, the crap sound of 8-bit — all of these will be cherished and emulated as soon as they can be avoided. It’s the sound of failure: so much modern art is the sound of things going out of control, of a medium pushing to its limits and breaking apart. The distorted guitar sound is the sound of something too loud for the medium supposed to carry it. The blues singer with the cracked voice is the sound of an emotional cry too powerful for the throat that releases it. The excitement of grainy film, of bleached-out black and white, is the excitement of witnessing events too momentous for the medium assigned to record them.” For this reason, I’ve decided to build a chill music website for listening to vinyl records. Imo, the feel of interacting with music is just as important as listening to the music itself, and in an age of ultra-high-fidelity lossless downloads on Spotify, I think there’s something special about vinyl (and this is coming from someone who listens to a ton of Spotify). It’s taken a while to get this 3D view set up, and there are still a lot of bugs and sound effects I want to fix or implement to bring everything to life, but the challenge has been making the experience feel as tactile as possible. I look forward to seeing where this’ll go :)"}]...
|
Title: Chill Record Player by @miles_s_aguilar | S Title: Chill Record Player by @miles_s_aguilar | Stardance
Devlogs:
A super chill music website Recently, I’ve been kind of inspired by this Brian Eno quote: “Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become its signature. CD distortion, the jitteriness of digital video, the crap sound of 8-bit — all of these will be cherished and emulated as soon as they can be avoided. It’s the sound of failure: so much modern art is the sound of things going out of control, of a medium pushing to its limits and breaking apart. The distorted guitar sound is the sound of something too loud for the medium supposed to carry it. The blues singer with the cracked voice is the sound of an emotional cry too powerful for the throat that releases it. The excitement of grainy film, of bleached-out black and white, is the excitement of witnessing events too momentous for the medium assigned to record them.” For this reason, I’ve decided to build a chill music website for listening to vinyl records. Imo, the feel of interacting with music is just as important as listening to the music itself, and in an age of ultra-high-fidelity lossless downloads on Spotify, I think there’s something special about vinyl (and this is coming from someone who listens to a ton of Spotify). It’s taken a while to get this 3D view set up, and there are still a lot of bugs and sound effects I want to fix or implement to bring everything to life, but the challenge has been making the experience feel as tactile as possible. I look forward to seeing where this’ll go :)
Devlog 2: A super chill music website Over the past few days, I’ve been slowly chipping away at some QOL features. Users can now see which keystrokes can be used at any given moment and users can now inspect vinyls. Other features that were improved were the ability to move the arm of the record player with higher precision, and a top-down view which enhances that experience. Unfortunately, I had to change the records to be public domain in preparation for my first ship. MBDTF will not be avaliable, but maybe I’ll let users locally host their own vinyls! Ideas ideas ideas… Maybe this could also become a standalone app. Planned features (either before or after first ship) Custom shaders -> Moody lighting or time of day slider with lamp u can turn on and off Ability to locally host music or add your own Way more records Ability to change record order More views for inspecting your records Improve the top-down angle to show when tracks begin and end on a record Ability to customize painting
Devlog 3: Before first ship! added a custom shader which allows the user to switch between what time of day it is. will get rid of the slider in a future ship but its the best i could do for now…
Devlog #4: Chill Record Player Since my ship, I’ve been working on more features such as a day-night slider (which I hope I can sync to the user’s time at some point), a remodeled bookshelf (this took awhile), and a better lighting system. I also added bins below the bookshelf for bulk storage of records after I friend recommended I do that. Some features people have been asking for and my thoughts: Hosting your own music: until I set up a dedicated DB for this, this is not going to be possible. Once I make this a standalone app I’ll definitely implement that. Also note that I can’t add non-classical music here because 99.99% of non-classical music that is popular right now is not in the public domain. Tutorial: Yes! I’ll work on accessability Favoriting records: Yes, with the new bookshelf I can implement that For now, I’m going to try and make the room feel warmer/more cozy by using volumetric shaders and introducing subsurface scattering on my models if I can do that without hurting performance. Follow to stay updated!!!!
Devlog #5: Chill Record Player After a monumental amount of work, I’ve ported the geometry of the room (which I had originally written in typescript) into Blender. Hopefully, this gives me more control over adding more complex geometry into the scene like plants on the ground and trinkets on the desk before I export it as a GLB file. I really can’t emphasize enough how long this took; this literally doubled the amount of time I’ve spent on this project. Anyways, some of you may have noticed that the scene in Blender looks pretty plain, though, and that’s intentional! I’m gonna handle the lighting and some of the texturing in typescript. Some of the other features I’ve added/fixes I’ve done are a nicer settings panel, warm lighting, and reducing the crackle from the record player, which I heard was a little annoying. I’ve also added post-processing to the camera, including chromatic abberation, some bloom, and a grain filter which becomes more noticeable during sunset.. My next goal will be to add as much detail to the scene as I can in Blender to really make the scene come alive. That definitely means replacing the cactus-ish plant on top of the bookshelf lol.
Devlog #6: Chill Music Player Added a bonsai tree and started modelling other objects I want in the room. Pulled an all-nighter for this. While I was doing this, I realized that the file format I was using to render the room (glb) doesnt support specific node setups and textures. This essentially limited the realism of the textures I was trying to create. To alleviate this, I’ll have to rely heavily on realistic lighting and things like glossiness. So, I decided that the lighting should be handled by an HDR and reflections be rendered in real time (I wonder how bad the performance hit will be on this). However, I also want to keep the day-night slider. This poses an issue, as HDRs are static images. This means I’ll need to write code to interpolate (probably just a linear ramp) between a couple HDRs throughout the day. Now, I don’t know if this will give me the same very warm lighting I have now. I also intend to add reflections to the glass cover of the record player after I implement HDRs, but we’ll see… Other changes: Removed emitted dots Performance changes Worked on modeling a new table behind the scenes (I modeled my dining room table a year ago but p sure I deleted it unforch)
Devlog #7: Chill Record Player Last one before ship #2! Got everything in order, including uploading things to my site and adding some more props. Also fixed some pathing issues. I also kinda got rid of the blur… After adding HDRIs, it looked kinda like Garry’s mod lol
HOTFIX: Performance Enhancement So I was messing around with the website today and realized it was maxing out my GPU, which I thought was ridiculous. It turns out I had been vastly underestimating the performance impacts of some of the effects I had on the website, as well as the meshes I was using. I decimated a model I had on top of the bookshelf but it was simply too many tris, so I removed it and implemented other code that made the default graphical settings less taxing.
Devlog #8: Chill Record Player I implemented more major performance enhancements, specifically aimed at increasing performance on retinal displays. Since retinal displays have so many pixels, computers bundle individual pixels together into logical pixels. The ratio at which this happens is called DPR. A higher DPR means sharper images but lower performance. I capped the DPR at 2x on “High”. Other changes were: Capped FPS at 60 -> 45 Added performance benchmarking to determine optimal settings for device Brought back temporal blur post-fx scan with extra leeway gained by reducing FPS Made “reflections on” default behavior Pushed more work to the loading screen Further performance changes planned before standalone app release Seeing if there’s a way to smush the 8x post-fx render stack into fewer passes Decimating more geometry Further ideas planned before app release: MAJOR: Letting user add more music MAJOR: Letting user add own props MAJOR: Tutorial/more tooltips MAJOR: Fixing flip animations upon un-focusing MAJOR: Adding zoom view to baskets MAJOR: Fixing audio bug between tracks (hard to pin down and test fixes, I’ll work on that tomorrow probably) MINOR: Generating normal maps for textures and replacing procedurally-generated floor MINOR: Modelling a better-looking table with legs that aren’t just metal poles lol MINOR: Fixing weird blur bug on the vinyl cover MINOR: Adding above-vinyl view that shows users where the start and end of every track is in different colors, allowing greater control over what songs can be played and when (see image below)
Devlog #9: Chill Record Player A little hard to tell, but I updated the model of the bookshelf to be more visually interesting (extended the rails and added a metal base) and I also re-UV-unwrapped the bookshelf so the wood texture looks less stretched. I think I’m going to try and code something that blurs the texture a little though as the black parts are a little too dark for my taste. I was also thinking of adding this really cool animation I saw (see below) on Twitter to my loading screen, so keep an eye out for that!
Devlog #10: Chill Record Player Made a much more simplified loading screen and recorded some sound effects. Truthfully, I haven’t had that much time to work on the website. AND, I wasn’t able to export my original idea for a loading screen without a watermark. I’m gonna try and make something better than this…
Devlog #11: Chill Record Player Spent all day adding a new table, and then using TypeScript to change the texture on it. I’m a bit worried about how I’m dividing the texturing between Blender and ts, as I have no rhyme or reason right now between which textures I delegate to which platform. Usually, the procedurally-generated textures are loaded in ts though. I also smoothed the grain on the bookshelf. The rug looks bad so I’ll work on that next, and then prepare the website for a MacOS app and implement more of the features I talked about in Devlog #9!!
CONCEPT: Loading Screen Hey all! This isn’t gonna be a normal devlog, but rather a quick update on something I’ll be hoping to add to the app. I’ve been tossing around a couple loading screen ideas but I think I have a really cool one. I want to mimic the Yandhi opening where an exploded view of a CD comes together and begins to spin. I think I can recreate that with my record player (or maybe just one vinyl, although that would be boring-ish?) Since this animation is a little long, I’ll probably only have it play when the user hasn’t logged on in awhile or something.
Devlog #12: Chill Record Player I think the video I attatched was too large so I’m now rewriting this devlog ;-; Anyways, I’ve spent the last week implementing the Yandhi intro as I mentioned last devlog/product idea. I spent a ton of time modelling/keyframing it in Blender, then integrating it with the website to infinitely loop, then dissasemble the vinyl when a user enters the website. What took the longest was definitely the smooth yet neat transition where the inside of the record turns into the room, so please check it out!! PS caustics take foreverrrr to render…
Ships:
Hey everyone, I made a 3D vinyl player online to play classical music. Please try it!!! It’s fully hosted on my personal website at https://milesaguilar.com/music One of the most challenging aspects of this project was making everything feel as tactile as possible. To do this, I needed to balance realism with how annoying things would be to use. To this end, I spent a lot of time thinking about which controls were most intuitive. In the future, I plan to let people upload their own vinyls and have more furniture in the room. This is mostly just a proof of concept to see if people find this interesting
I made a website for playing vinyls! I think an important aspect of enjoying music is being able to experience it physically, through interacting personally with the forms it comes in. Now obviously, this record player is online, so I did my best to bring that physical experience into a virtual website. Hopefully everything is self-explanatory on the site, and I incorperated a lot of feedback from the first round!! In the future, I plan to make this a standalone app, giving people the ability to upload their own music. Also, I’ll try to fix performance issues as I understand this website can be a bit resource-itensive....
|
1792817597.8548055
|
1792903997.8548055
|
|
16818
|
My very own WebOS by @avycado13 | Stardance
|
avycado13
|
2
|
9.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T21:26:40Z", "hours": 1.0, "multiplier": 2.51, "payout": 2, "blessing": "neutral", "text": "I made an OS Kernel in the web! i also ported it to run natively and i want to have almost complete feautre parity between them!", "repo": "https://github.com/avycado13/webos", "demo": "http://finicky-knot.surge.sh/"}, {"ship_num": 2, "ts": "2026-07-01T01:01:21Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an os that works in both wasm in the browser and in x86. it doesnt have a window manager yet but it has a console and a basic file system. I plan on adding more advanced functionality and maybe even a gui!", "repo": "https://github.com/avycado13/webos", "demo": "http://finicky-knot.surge.sh/"}]...
|
[{"post_id": 24979, "ts": "202 [{"post_id": 24979, "ts": "2026-07-08T21:25:26Z", "hours": 0.4697, "text": "random work to polish it up. not much changed"}, {"post_id": 19771, "ts": "2026-07-01T04:54:49Z", "hours": 0.3511, "text": "i added better readme"}, {"post_id": 19648, "ts": "2026-07-01T00:58:24Z", "hours": 2.2219, "text": "I added more browser support including a console in a canvas and a filesystem and shell. the filesystem is just a vector where each file is just a string for path and a vector of u8s for its bytes."}, {"post_id": 18696, "ts": "2026-06-29T21:39:11Z", "hours": 2.1514, "text": "i got it to work in the browser!! next i should add canvas rendering and also maybe some actual programs and a filesystem"}, {"post_id": 7286, "ts": "2026-06-12T04:33:38Z", "hours": 3.1797, "text": "I followed https://os.phil-opp.com/ and now i am going to try to get this to run on the web and add a basic shell"}]...
|
Title: My very own WebOS by @avycado13 | Stardance Title: My very own WebOS by @avycado13 | Stardance
Devlogs:
I followed https://os.phil-opp.com/ and now i am going to try to get this to run on the web and add a basic shell
i got it to work in the browser!! next i should add canvas rendering and also maybe some actual programs and a filesystem
I added more browser support including a console in a canvas and a filesystem and shell. the filesystem is just a vector where each file is just a string for path and a vector of u8s for its bytes.
i added better readme
random work to polish it up. not much changed
Ships:
I made an os that works in both wasm in the browser and in x86. it doesnt have a window manager yet but it has a console and a basic file system. I plan on adding more advanced functionality and maybe even a gui!
I made an OS Kernel in the web! i also ported it to run natively and i want to have almost complete feautre parity between them!...
|
1792828273.5479572
|
1792914673.5479572
|
|
16838
|
AlpineOS by @ashish-raj-singh | Stardance
|
ashish-raj-singh
|
2
|
23.0
|
72
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T08:32:33Z", "hours": 11.0, "multiplier": 6.36, "payout": 72, "blessing": "neutral", "text": "This is AlpineOS 2 (WebOS-2) upgraded from the previous version of AlpineOS 1 (WebOS-2) UPss Window animations are now smoother and more responsive. Introduced Widgets and are draggable anywhere on the desktop screen Truly FullScreen mode is here, previously the fullscreen was still not using the space behind the dock and menu bar at top, now it does Menu Bar improvements, now it has calender, wifi and a brightness slider which actually workd A new Settings app, which now has the personalization settings, and a new Widgets section where you can add widgets to your desktop Auto hide dock is now working, it simply hides the dock and shows on hovering th bottom of the desktop and it can be toggled in the settings app The Challenge? The main hurdle for me was understanding the actual OS, and its working as i hve tried to keep this project as realistic as i could understand other then that, the animations and drag and drop functionality was a bit challenging, so right now drag and drop us not supported as i have my exams coming up ans stardance is also going to end 30 sep to i dont have that much time The Excitement? this project was particularly exiting for me not because of the web technologies like used react heavily i have been a web dev for like a year main thing was the OS part, i have never worked on an OS before and this was a new experience for me, and i really loved it i tried to understand the real Operating System i leanred about scheduling algorithms like FCFS, SJF, memory management,how kernel works and communicated, how things are separated and modularized so much more What can you do? just right click on desktop and try to add a widget try to hide dock from the settings app, and hover at the bottom of the desktop and see the dock appear back try to minimize and maximize the windows and see the animations try increasing and decreasing the brightness from the menu bar", "repo": "https://github.com/ashish757/AlpineOS", "demo": "https://alpine-os-eight.vercel.app"}, {"ship_num": 2, "ts": "2026-06-13T12:16:11Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built AlpineOS, A fully functional, persistent, browser-based operating system, not just a CSS UI mockup it’s powered by a custom Redux “kernel” that actually manages background processes independently from the visual windows. live Activity Manager that tracks active PIDs and simulated CPU/Memory telemetry. It includes a persistent Virtual File System An draggable Window Manager Terminal engine that interacts with the File System Persistency , File and folders are persistennt and so it the state of the OS, you leave and come back just find that it has retained the state. The Challange? The architecture and state management were incredibly complex. Synchonizing the UI with the actual process mangement in the “kernal” Persistence, making the whole website persistence. Creatin an Task manager was fun and exciting, it felt like a real low level OS feature Excitement??? hell yeah my whole time I have been building, high-level websites and backend. I never tried a low level project, although this is not Low Level but it forced me to explore the architecture and concepts of hoow operating system works at Low level, how terminal connect with the file system. who doesn’t get excited by low level ?? Being able to selec multiple files and folder, not dragable yet, but soon will be What can i do? When you boot it up, don’t just click the icons and look and design and colors, stress test the ARCHITECTURE! Open the Terminal , use cd to change directory and try standard commands like mkdir, touch, ls, and interact with the file system Open the Activity Manager side-by-side with other apps to watch the active processes update and check the live charts (dummy) Right-click the desktop to open Personalization and change the wallpaper. Most importantly: Open a few windows, move them around the screen, and then hard refresh your browser or maybe just restart and Watch the persistence engine drop you right back where you left off.", "repo": "https://github.com/ashish757/AlpineOS", "demo": "https://alpine-os-eight.vercel.app"}]...
|
[{"post_id": 73046, "ts": "202 [{"post_id": 73046, "ts": "2026-09-24T08:31:29Z", "hours": 2.3342, "text": "Devlog 3 Launchpad as promised i have created the launchpad , but the serach functionlity is not working in it sorry i know its just s amll filter thing but i got my exmas this week, im in rush need to feactor the whole assets thing as i wasn initially importing the images but now i have moved it to the public and how just load them all updated the readme and added icon for the launchpad A lot can be done i think, but i am limited with this event ending 30 sep and also my exams are coming up SO BYE FOR NOWW, i really loved this project"}, {"post_id": 72817, "ts": "2026-09-23T19:47:31Z", "hours": 3.2872, "text": "Real OS true now this feels like a real operating system Widgets added widgets to the desktop, can be added from the settings right there are jsut widgets for clock and calander but same design can be used to simply add many more kinds of widgets Menu Bar menu bar now has the brightnes control slider and wifi options (obviously wifi are fake here) Dock can now be auto hidden from settings and only shows up when you hover in the bottom jsut like real macos Integrated the perosnalization in the settings app up next i will add a launch pad, some more little apps, fix a issue related to navigation in finder that i just found out"}, {"post_id": 71881, "ts": "2026-09-21T18:06:25Z", "hours": 1.4678, "text": "Devlog 2 i think i have laid a good foundation for process and window management i am now focusing on the UI and UX of the desktop environment and adding some more app, fetures, and more OS like fell Minimizing and maximizing windows implemented feature to minimize and maxiimize the windows maximizing feature existed but there were some bugs and it wasnt really fullscreen so i fixed that and now it works as expected improve Dock to open or focus the app by detecting wheter app is open or closed or minimized Started improving and adding animations used framer-motion to animate the appearance and disappearance of the windows later i will add transitions to other elements as well Created a settings app to handle the widgets , appearance and general setting all i one place also fixed an infinite render issue in ActivityManagerApp that was caused by the useEffect"}, {"post_id": 70213, "ts": "2026-09-18T18:31:33Z", "hours": 4.1772, "text": "Devlog 1 (after shipping webos1) so its been like 2 months since i last worked on this project so i just revised the whole codebase once Realism so when i decided to build this my main goal was to make it as realistic as possible by realistic i mean to make use of concepts that is used in real linux OS, not just UI but the actual inner workking What went down any application when opened in OS has two parts The window The process Like for notepad app, there is a wrapper window which has the close button and menu options and then there is the actual notepad process which handles things related to the creation and saving of the notes file what was the problem In real OS whenever we try to close a window, the window wrapper simply sends a closing signal to the actual process saying hey process user wants to close you for now. after this the process either saves logs, current changes or show user a confirmation dialog before closing but in my webOS i was jsut closign the process when user clicked the close button on the window wrapper, which is not realistic at all There are three kinds of closing signals that a process can receive SIGTERM SIGKILL SIGQUIT i will not get into the details of these signals but they mean different things , like SIGTERM is a request to terminate the process whereas SIGKILL forces the process to terminate. Solution so i basically added a new property to the window state to track if a window has requested to close the process process actively listen to such state change from the window and replies accordingly and closes the app performs tasks like askeing user to save changes, show warning dialog etc before closing the process there are still some bugs and a lot of things to improve in this thing but i will do that in the next devlog"}, {"post_id": 8020, "ts": "2026-06-13T11:46:24Z", "hours": 3.6642, "text": "#update number 0.0000033 The old man, Terminal Now terminal supports file system operations, can create and delete folders and files Textpad now it can open text files and edit those and save, can create new files as well Activity Manger , task manager Shows the currently running processes in the os, also gives and option to forcefully terminate any process, shows CPU and RAM usage (dummy but mindful of currently running processes) Menu bar menu bar now has specific and dynamic context menu options for each app although its not available yet for each app, but the logic is implemented, I just need to write json config for the ui to display Personalization Right click on desktop and click on Personalization to change wallpaper, will support more customization soon Boot added a cool mock up to mimic shutdown and booting process of OS,"}, {"post_id": 7578, "ts": "2026-06-12T17:50:11Z", "hours": 3.2947, "text": "DevLOG FOURRR What do we got this time well well I now have a complete basic file management system build, I can create text files, edit them, open them, save them in any specific location , delete it, terminal now can run more commands ‘’‘ls, mkdir, rm. touch, echo, clear, etc’’’’ context menus It was time taking and exhausting as every section of the operating system required different type of context menus. It was so much messed up. I ended up creating something central where a single config can decide and make a whole context menu, Desktop is ALIVE Long awaited something I wanted to do is to display what there is in the desktop directory directly onto the desktop after making the complete file system."}, {"post_id": 7422, "ts": "2026-06-12T11:20:38Z", "hours": 0.8694, "text": "Dev Log Threeeee Added a browser as of now only a few websites are accessible like wikipedia.org, other websites reject the connection in a iframe, I am looking for solution to this, I was thinking to maybe compile a rust model web browser using ecmascript and run a browser in browser, looks tough for limited time I have for this project , will definitely give it a shot ( if you guys got any idea let me know ) yayyyy File system is now persistent well despite coolest feature this was fairly easy redux-persistence saved the day, used indexDB as localstorage is synchronous and only allows 5MB of storage -> the files created in desktop folder now show up on the desktop on top of wallpaper NEXT GOAL add some more commands in terminal like ls, touch, mkdir, rm ability to create and save text files make files and folders drag-able (DREAMYYYY) personlization options"}, {"post_id": 7393, "ts": "2026-06-12T10:04:18Z", "hours": 0.6861, "text": "Dev Log 2 Implemented resizing and maximizing of windows (easypzy lemon squeeze) Added some dummy options in the menu bar (will soon make them functional too 😉) Improved UI of file manager (Finder)"}, {"post_id": 7245, "ts": "2026-06-12T02:47:35Z", "hours": 3.4803, "text": "AlpineOS, lightweight web os for study and space research(will be coming soon) The name inspiration come from the alpine images of docker “light weight” I am trying to build is os such that user can sort of study about space. as of now I have build some basic file system, dragable windows, I have setup basic architecture for applications, processes, and files and folders hope fully in my next DEVlog, I will have implemented /fixed resizable windows control panel file and folder persistence some cool apps on space theme preventing windows from going out of screen, will try to make terminal somewhat working improve the UI ability to minimize the windows drag and drop upload of files like text, pdf, word excel etc,"}]...
|
Title: AlpineOS by @ashish-raj-singh | Stardance
Title: AlpineOS by @ashish-raj-singh | Stardance
Devlogs:
AlpineOS, lightweight web os for study and space research(will be coming soon) The name inspiration come from the alpine images of docker “light weight” I am trying to build is os such that user can sort of study about space. as of now I have build some basic file system, dragable windows, I have setup basic architecture for applications, processes, and files and folders hope fully in my next DEVlog, I will have implemented /fixed resizable windows control panel file and folder persistence some cool apps on space theme preventing windows from going out of screen, will try to make terminal somewhat working improve the UI ability to minimize the windows drag and drop upload of files like text, pdf, word excel etc,
Dev Log 2 Implemented resizing and maximizing of windows (easypzy lemon squeeze) Added some dummy options in the menu bar (will soon make them functional too 😉) Improved UI of file manager (Finder)
Dev Log Threeeee Added a browser as of now only a few websites are accessible like wikipedia.org, other websites reject the connection in a iframe, I am looking for solution to this, I was thinking to maybe compile a rust model web browser using ecmascript and run a browser in browser, looks tough for limited time I have for this project , will definitely give it a shot ( if you guys got any idea let me know ) yayyyy File system is now persistent well despite coolest feature this was fairly easy redux-persistence saved the day, used indexDB as localstorage is synchronous and only allows 5MB of storage -> the files created in desktop folder now show up on the desktop on top of wallpaper NEXT GOAL add some more commands in terminal like ls, touch, mkdir, rm ability to create and save text files make files and folders drag-able (DREAMYYYY) personlization options
DevLOG FOURRR What do we got this time well well I now have a complete basic file management system build, I can create text files, edit them, open them, save them in any specific location , delete it, terminal now can run more commands ‘’‘ls, mkdir, rm. touch, echo, clear, etc’’’’ context menus It was time taking and exhausting as every section of the operating system required different type of context menus. It was so much messed up. I ended up creating something central where a single config can decide and make a whole context menu, Desktop is ALIVE Long awaited something I wanted to do is to display what there is in the desktop directory directly onto the desktop after making the complete file system.
#update number 0.0000033 The old man, Terminal Now terminal supports file system operations, can create and delete folders and files Textpad now it can open text files and edit those and save, can create new files as well Activity Manger , task manager Shows the currently running processes in the os, also gives and option to forcefully terminate any process, shows CPU and RAM usage (dummy but mindful of currently running processes) Menu bar menu bar now has specific and dynamic context menu options for each app although its not available yet for each app, but the logic is implemented, I just need to write json config for the ui to display Personalization Right click on desktop and click on Personalization to change wallpaper, will support more customization soon Boot added a cool mock up to mimic shutdown and booting process of OS,
Devlog 1 (after shipping webos1) so its been like 2 months since i last worked on this project so i just revised the whole codebase once Realism so when i decided to build this my main goal was to make it as realistic as possible by realistic i mean to make use of concepts that is used in real linux OS, not just UI but the actual inner workking What went down any application when opened in OS has two parts The window The process Like for notepad app, there is a wrapper window which has the close button and menu options and then there is the actual notepad process which handles things related to the creation and saving of the notes file what was the problem In real OS whenever we try to close a window, the window wrapper simply sends a closing signal to the actual process saying hey process user wants to close you for now. after this the process either saves logs, current changes or show user a confirmation dialog before closing but in my webOS i was jsut closign the process when user clicked the close button on the window wrapper, which is not realistic at all There are three kinds of closing signals that a process can receive SIGTERM SIGKILL SIGQUIT i will not get into the details of these signals but they mean different things , like SIGTERM is a request to terminate the process whereas SIGKILL forces the process to terminate. Solution so i basically added a new property to the window state to track if a window has requested to close the process process actively listen to such state change from the window and replies accordingly and closes the app performs tasks like askeing user to save changes, show warning dialog etc before closing the process there are still some bugs and a lot of things to improve in this thing but i will do that in the next devlog
Devlog 2 i think i have laid a good foundation for process and window management i am now focusing on the UI and UX of the desktop environment and adding some more app, fetures, and more OS like fell Minimizing and maximizing windows implemented feature to minimize and maxiimize the windows maximizing feature existed but there were some bugs and it wasnt really fullscreen so i fixed that and now it works as expected improve Dock to open or focus the app by detecting wheter app is open or closed or minimized Started improving and adding animations used framer-motion to animate the appearance and disappearance of the windows later i will add transitions to other elements as well Created a settings app to handle the widgets , appearance and general setting all i one place also fixed an infinite render issue in ActivityManagerApp that was caused by the useEffect
Real OS true now this feels like a real operating system Widgets added widgets to the desktop, can be added from the settings right there are jsut widgets for clock and calander but same design can be used to simply add many more kinds of widgets Menu Bar menu bar now has the brightnes control slider and wifi options (obviously wifi are fake here) Dock can now be auto hidden from settings and only shows up when you hover in the bottom jsut like real macos Integrated the perosnalization in the settings app up next i will add a launch pad, some more little apps, fix a issue related to navigation in finder that i just found out
Devlog 3 Launchpad as promised i have created the launchpad , but the serach functionlity is not working in it sorry i know its just s amll filter thing but i got my exmas this week, im in rush need to feactor the whole assets thing as i wasn initially importing the images but now i have moved it to the public and how just load them all updated the readme and added icon for the launchpad A lot can be done i think, but i am limited with this event ending 30 sep and also my exams are coming up SO BYE FOR NOWW, i really loved this project
Ships:
I built AlpineOS, A fully functional, persistent, browser-based operating system, not just a CSS UI mockup it’s powered by a custom Redux “kernel” that actually manages background processes independently from the visual windows. live Activity Manager that tracks active PIDs and simulated CPU/Memory telemetry. It includes a persistent Virtual File System An draggable Window Manager Terminal engine that interacts with the File System Persistency , File and folders are persistennt and so it the state of the OS, you leave and come back just find that it has retained the state. The Challange? The architecture and state management were incredibly complex. Synchonizing the UI with the actual process mangement in the “kernal” Persistence, making the whole website persistence. Creatin an Task manager was fun and exciting, it felt like a real low level OS feature Excitement??? hell yeah my whole time I have been building, high-level websites and backend. I never tried a low level project, although this is not Low Level but it forced me to explore the architecture and concepts of hoow operating system works at Low level, how terminal connect with the file system. who doesn’t get excited by low level ?? Being able to selec multiple files and folder, not dragable yet, but soon will be What can i do? When you boot it up, don’t just click the icons and look and design and colors, stress test the ARCHITECTURE! Open the Terminal , use cd to change directory and try standard commands like mkdir, touch, ls, and interact with the file system Open the Activity Manager side-by-side with other apps to watch the active processes update and check the live charts (dummy) Right-click the desktop to open Personalization and change the wallpaper. Most importantly: Open a few windows, move them around the screen, and then hard refresh your browser or maybe just restart and Watch the persistence engine drop you right back where you left off.
This is AlpineOS 2 (WebOS-2) upgraded from the previous version of AlpineOS 1 (WebOS-2) UPss Window animations are now smoother and more responsive. Introduced Widgets and are draggable anywhere on the desktop screen Truly FullScreen mode is here, previously the fullscreen was still not using the space behind the dock and menu bar at top, now it does Menu Bar improvements, now it has calender, wifi and a brightness slider which actually workd A new Settings app, which now has the personalization settings, and a new Widgets section where you can add widgets to your desktop Auto hide dock is now working, it simply hides the dock and shows on hovering th bottom of the desktop and it can be toggled in the settings app The Challenge? The main hurdle for me was understanding the actual OS, and its working as i hve tried to keep this project as realistic as i could understand other then that, the animations and drag and drop functionality was a bit challenging, so right now drag and drop us not supported as i have my exams coming up ans stardance is also going to end 30 sep to i dont have that much time The Excitement? this project was particularly exiting for me not because of the web technologies like used react heavily i have been a web dev for like a year main thing was the OS part, i have never worked on an OS before and this was a new experience for me, and i really loved it i tried to understand the real Operating System i leanred about scheduling algorithms like FCFS, SJF, memory management,how kernel works and communicated, how things are separated and modularized so much more What can you do? just right click on desktop and try to add a widget try to hide dock from the settings app, and hover at the bottom of the desktop and see the dock appear back try to minimize and maximize the windows and see the animations try increasing and decreasing the brightness from the menu bar...
|
1792828621.1527221
|
1792915021.1527221
|
|
16885
|
Hackfetch by @xerneas | Stardance
|
|
2
|
124.4
|
1751
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T11:04:00Z", "hours": 63.0, "multiplier": 19.6, "payout": 1381, "blessing": "neutral", "text": "HACKFETCH V2.0 it’s been a few weeks since ship #1 and hackfetch is a completely different tool now. faster, smaller, quieter, actually correct, and now lives in places besides your terminal window. v2.0.0 is out. what changed: fits in your tmux status bar with one line of config. same story for lualine. hackfetch -status prints a compact one-liner meant to be shelled out to every minute. fits everywhere else too. now on the AUR (yay -S hackfetch-bin) alongside the existing brew tap, curl installer, powershell installer, and go install. seven install channels total. runs in ~20ms on repeat calls thanks to an on-disk cache. tmux polling every minute is basically free now. was ~700ms cold before. runs in ~0.7s cold thanks to a parallel API fetch. was ~1.7s before. shows a smooth truecolor gradient on any modern terminal. auto-detects $COLORTERM. falls back to 256-color on older ones. -doctor walks a colored checklist of your setup and tells you exactly what’s broken. green if fine, orange if not, non-zero exit if you wanna script it. new pizza logo because hack club runs on pizza. seven logos total. streak is finally correct after silently saying “1 day” for a month. /summaries is gone from hackatime so hackfetch now reconstructs streak from every coding session in your history via /heartbeats/spans. real streak: 9 days for me right now. 7-day sparkline baked into the fetch (with -v) and available as -status –sparkline for the tmux bar. default fetch got leaner. slack handle, machines count, and the sparkline moved behind -v so the normal fetch stays focused on hours + project + language. loading spinner on the api fetch so you know something is happening. and then the cache made it show up almost never. one install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Arch family: yay -S hackfetch-bin macOS / Linuxbrew: brew install xerneas3318/tap/hackfetch For more install methods check out the github page: https://github.com/xerneas3318/hackfetch teasing the next big thing: hackfetch -leaderboard is coming next, using the public leaderboard endpoints i found in hackatime’s routes file. compete with friends on daily and weekly hours right from your terminal. private friend groups on a hackclub nest box after that. if you try it, thanks. send me some feedback", "repo": "https://github.com/xerneas3318/hackfetch", "demo": "https://github.com/xerneas3318/hackfetch/releases"}, {"ship_num": 2, "ts": "2026-07-07T00:01:54Z", "hours": 27.0, "multiplier": 17.78, "payout": 370, "blessing": "neutral", "text": "Every fetch tool tells you your OS. Mine tells you your streak. hackfetch is a Hack Club themed terminal fetch tool. Inspired by neofetch (originally bash, now archived) and fastfetch (its C successor), written in pure Go. Instead of just showing your kernel and CPU, it pulls live stats from your Hackatime account: today’s hours, weekly total, current streak, top project, top language. Right in your terminal. Six Hack Club themed ASCII logos (including my GOAT orpheus). Fourteen color schemes (pride, trans, bi, pan included). Live watch mode that refreshes while you code. And as of today, you can export the whole thing as a PNG, JPG, or SVG card and post it anywhere. One line to install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Tell me how it was! Follow and like for updates.", "repo": "https://github.com/xerneas3318/hackfetch", "demo": "https://github.com/xerneas3318/hackfetch/releases"}]...
|
[{"post_id": 39919, "ts": "202 [{"post_id": 39919, "ts": "2026-08-03T07:26:53Z", "hours": 6.6894, "text": "Hackfetdch natively in your readme hackfetch -readme it spits out a markdown stats card ready to paste straight into your github profile README. pipe it into a file and commit: hackfetch -readme > stats.md this is the cool bit or drop it in your README.md between two html comments and set up a github action to run it on a schedule so it auto refreshes every day. your profile now has a live coding stats card next to your pinned repos with no cron server, no vercel deploy, no api key stashed in secrets. its literally just markdown. zero extra api calls too. the readme card reads from the same cached hackatime response the normal fetch uses so if you just ran hackfetch it takes ~20ms. the streak emoji is a lil detail i had fun with. 3+ days gets a 🔥 upgrade with brew upgrade hackfetch or yay -S hackfetch-bin (once aur maintenance wraps up) or curl the installer curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh"}, {"post_id": 39223, "ts": "2026-08-02T01:40:31Z", "hours": 7.6967, "text": "HACKFETCH BATTLES??? two features in one release. hackfetch already knows a scary amount about you (thanks hackatime) so why not turn that into more features. hackfetch vs @ someone head to head compare. give it a hackatime username and hackfetch fetches both your histories in parallel, buckets them into today / this week / all time / streak, and prints them side by side with a winner arrow on every row. accepts @name , name , or a full profile url like hackatime.hackclub.com/@name . also works positional: hackfetch vs @you . use it to settle arguments, motivate yourself, or realize your friend has coded 265 hours and you should probably close discord. hackfetch -records personal bests. computed entirely from data hackfetch already fetches (streak + sparkline already use it), so zero new api calls $ hackfetch -records ✦ personal records @you biggest day 12h 41m on 2026-07-18 longest streak 25 days ended 2026-07-01 longest session 43m on 2026-07-17 days coded 86 first day 2026-04-24 99 days ago lifetime 208h 29m the “longest streak” tracks your all time best not just your current one. and “first day” tells you how long ago you started so you can feel old. grab it brew upgrade hackfetch yay -S hackfetch-bin install curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Next devlog is gonna be a fun one, I have an idea cooking up"}, {"post_id": 38323, "ts": "2026-07-31T17:22:26Z", "hours": 9.4408, "text": "big thank you for everyone’s feedback! fresh out of the oven: hackfetch v2.1.1 (aka the reviewer bug fix pass) what got fixed: shell detection used to just read $SHELL which is your login shell. if you log in as bash but run fish, hackfetch was calling you a bash user. it now checks $FISH_VERSION / $ZSH_VERSION / $BASH_VERSION and falls back to asking the OS who your parent process actually is editor detection was two bugs in a trench coat. it wasnt stripping args so zeditor --wait showed up as “zeditor –wait” instead of “Zed”, and if you had no $EDITOR set it defaulted to nano even if you had literally never opened nano. now it strips flags, maps launcher names to human ones (zeditor -> Zed, code -> VS Code, cursor -> Cursor, hx -> Helix etc), and says “-” instead of nano if nothing is set. top project label was ambiguous. it was pulling weekly stats but the row just said “top project” so people thought it meant all time. now weekly rows read top proj 7d , top lang 7d , top ed 7d , top cat 7d . setup dialog was scaring people. it always printed “file exists but has no api_key” whenever it reached the setup flow, even if the api_key line was actually there but just failing to parse. loadConfig is now more forgiving (inline comments, quoted values, case insensitive keys) and setup tells you WHY its stuck instead of gaslighting you about your own config. also short circuits if you run hackfetch -setup when youre already set up. people said they wanted a gay flag color was already there under the name pride but that wasnt obvious. gay is now an alias so both work. grab it: brew upgrade hackfetch or yay -S hackfetch-bin or curl / powershell installer if you don’t have it yet curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh again thank you to everyone who took the time to actually run it and tell me what was broken!"}, {"post_id": 34562, "ts": "2026-07-25T12:00:09Z", "hours": 10.5769, "text": "hackfetch COLLAB?? so my last two devlogs teased two features. shipping both today. -leaderboard last devlog i said “compete with your friends on hackatime hours is coming soon.” i thought i was gonna have to build a whole nest server for it. turns out /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist and are public on hackatime. just a single call!! so hackfetch -leaderboard daily (or weekly) now shows the top 10: ✦ daily leaderboard Last 24 hours 🥇 1. soaphia14 11h 12m 🥈 2. AnastKara 10h 32m 🥉 3. RoSerMar 10h 6m 4. euledone 10h 5. TheShovel 10h 6. Dylhouse 9h 1m 7. Dexrn 8h 59m 8. HexFud 8h 31m 9. zeddash 8h 29m 10. Trtotomotoro 8h 26m every username is an OSC 8 clickable link to that person’s hackatime profile. modern terminals (iterm2, kitty, wezterm, alacritty, gnome-terminal) render it as an actual hyperlink you can click. terminals without OSC 8 just show the plain text so it doesnt look broken. if you’re on the board it highlights your row in orange and adds (you) next to your name. json addon the other thing. someone else competing in stardance messaged me the other day about integrating hackatime into their own project and needed help figuring out the api (YAY). helping them made me realize hackfetch is doing a bunch of work (auth, caching, streak reconstruction, per-day bucketing) that other tools would love to piggyback on. so now: $ hackfetch -json { \"version\": \"2\", \"fetched_at\": \"2026-07-25T17:00: 20.900829+05:30\", \"system\": { \"user\": \"xerneas\", \"host\": \"Macbook-Pro\", \"os\": \"macOS 26.5.2\", ... }, \"hackatime\": { \"slack\": \"@U0B8FHHRQPJ\", \"streak\": 12, \"today_seconds\": 15820, \"week_seconds\": 237501, \"top_project\": { \"name\": \"hackfetch\", \" \"top_language\": { \"name\": \"Go\", \"seconds\": 97418 }, \"week_chart\": [36967, 31651, 33841, 284 \"machines\": 3 } } week_chart is 7 numbers = daily seconds oldest to newest same as the sparkline. top_language skips the unknown/other buckets. everything lines up with what the normal fetch would show, just parseable. ship landed in v2.1.0. brew update && brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then try: hackfetch -leaderboard weekly hackfetch -json | jq For a general install use: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh"}, {"post_id": 32880, "ts": "2026-07-22T10:20:45Z", "hours": 8.6689, "text": "my streak was lying to me for a month went to add a simple 7-day sparkline. by the end of the night i had rewritten how hackfetch talks to hackatime and my streak field is finally accurate for the first time in weeks. the plan was get the status from the last 7 days. draw ▁▂▃▄▅▆▇█ bars except the endpoint i needed straight up 404s. /users/current/summaries doesnt exist on the current hackatime deployment. Which means every single time i ran hackfetch it was quietly making a 30-day range call that always failed, then falling back to a placeholder that said “if today has activity, streak = 1”. thats it. no matter how long ive actually been on a streak, the fetch would just show 1 day. 🤦 my streak has said 1 day for the last 2 weeks even though ive been coding literally every day. never noticed because 1 day looks kinda plausible (i added 1 day as a fallback so that it didn’t show an error a couple weeks ago and forgot ) the fix: went digging in hackatimes rails routes on github. turns out theres a whole /api/v1/ namespace i was never using. and one of the endpoints is /api/v1/users/:id/heartbeats/spans. one call, ~150kb of json, every coding session ive ever logged with start_time, end_time, duration. 2000+ spans. which is exactly what i need for both features. bucket the timestamps by local calendar day, count unique days for streak, sum durations per day for the sparkline. one request covers both. and while i was already in the api layer i noticed fetchUser was making a whole separate call for my slack handle, which is silly because that data is already in the weekly stats response we cache. so i piggybacked it. weve gone from 4 api calls per fetch to 3. the sparkline: 7-day chart ▄▄▇▅▄▅▃ 65h 28m oldest on the left, newest on the right. that tall bar in the middle is a big lock-in session from earlier in the week. the two shorter ones on the right are today (still coding) and yesterday (took a break). opt in for -status --sparkline if you want it in your tmux bar too: 2h 9m today · streak 9 · ▄▄▇▅▄▅▃ 65h 28m teasing a backend: I’m planning on building a whole leaderboard server on a free hack club nest box so people can compete on their hackatime hours. while i was poking around the routes file for the streak fix i noticed something. /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist. public. no auth needed. no server needed. no cron sync. hackatime literally already has it directly. so hackfetch -leaderboard is coming soon (private friend groups and personal competitions can come later) last devlog before my next ship after the ship the devlogs are going to be huge. stay tuned :P"}, {"post_id": 32268, "ts": "2026-07-21T10:28:54Z", "hours": 9.7706, "text": "caching or i owe hackclub money so heres what my day looked like: nvim was calling hackfetch -status on every redraw for my lualine. tmux was calling it every 60 seconds for the status bar. i had 3 tmux sessions open. and every time i actually opened a new terminal, hackfetch fired again on shell start. quick napkin math: nvim redraws are basically continuous when im typing, tmux was hitting the api 3x/minute across sessions, plus every terminal open = another fetch. we’re talking hundreds of calls to hackatime in a normal work session. from ONE user. me hackatime is a free hack club service and i was starting to feel bad lol. the fix: cache the response ~/.cache/hackfetch/last.json stores the last snapshot with a timestamp. every fetch checks that file first. if its fresh enough, skip the network entirely and just render from disk. TTL is different depending on the caller: hackfetch (one-shot): 30 seconds. long enough that a normal re-run inside a devlog attempt is instant, short enough that you dont get badly stale numbers. hackfetch -status: 60 seconds tmux polls roughly this often anyway so its basically free now. hackfetch -watch: ignores the cache, always fresh (thats the whole point of watch mode). opt out with -no-cache or HACKFETCH_CACHE_TTL=0 if you want. also HACKFETCH_CACHE_TTL=300 to be even more polite. So yea tmux is now basically free . but the real win writing this made me realize the cache does more than save milliseconds: every fetch was a full TLS handshake, wifi radio spin up, etc. now most fetches touch the disk once and nothing else. macbook fan appreciates it. offline. if your wifi drops mid coding session you keep working from the cache instead of showing a spinner forever. tmux bar just keeps saying what it said 40 seconds ago. battery again but for the hackatime server. hackfetch stops asking the api 5-10x more than they need to. multiply by everyone who has it in their tmux config and thats a real thing. atomic write via .tmp + rename so nothing ever reads a half-written file. cache is user-only (0600), because it does contain your top project name. bonus: -doctor while i was fixing the polite-to-the-api stuff i added -doctor , which walks a checklist and tells you whats broken: hackfetch doctor ✓ wakatime config exists /Users/xerneas/.wakatime.cfg ✓ api_key present loaded from config ✓ wakatime-cli found /Users/xerneas/.wakatime/wakatime-cli ✓ hackatime api reachable today: 28m ✓ terminal supports truecolor $COLORTERM=truecolor ✓ browser opener available /usr/bin/open green if its working, orange if its not, and non-zero exit if anything failed so you can script it. this was going to be a small self-diagnosis feature and it caught a real bug in the api client on the very first run i did while writing it lol (a string field where hackatime returns an int, so one of the fields was silently missing from every fetch since v1.0). fixed that too. ship both landed in v1.10.0. update as usual: brew update brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then run hackfetch -doctor first, and if anything is broken it’ll tell you exactly what."}, {"post_id": 31673, "ts": "2026-07-20T08:45:06Z", "hours": 8.4247, "text": "hackfetch is now TMUX + NVIM COMPATIBLE new thing today: hackfetch will just show up wherever you already look. tmux status bar. nvim statusline. any tool that can shell out to a command and put text on a screen. The addition was simple: hackfetch -status prints one line: 2h 11m today · hackfetch (45m) · streak 12 just the numbers, for tools that already have their own rendering. hackfetch is a data source now, not just a display. in tmux two lines in ~/.tmux.conf : set -g status-interval 60 thats it. every tmux session, every window, refreshing once a minute. i dropped it in a pink Catppuccin capsule to the left of my existing date capsule and now i cant stop glancing at it lol. in neovim (lualine) same story, five lines of lua: sections = { lualine_z = { function () return vim . fn . system ( \"hackfetch -status\" ): gsub ( \" \\n \" , \"\" ) end } } } shells out on every redraw. works with airline too, or any custom statusline that lets you plug in a function. the fun part making hackfetch call safe for “something tmux runs every 60s forever” meant fixing three assumptions the normal fetch was making. this was way harder than it should have been ngl. setup cant block. if you dont have ~/.wakatime.cfg, normal hackfetch throws you into an interactive setup wizard (ask me how i know). in status mode that would freeze your tmux bar until you notice and Ctrl+C it. so status mode is fully non interactive now. no config → print nothing → tmux shows nothing → no deadlock 🙏 api errors cant leak into your bar. hackatime offline? old behavior would dump HTTP 500 timeout into your status area which looks INSANE. now status mode exits silently instead so your bar stays clean every call has to be cheap. hackfetch’s parallel fetch alr seconds, and the shared HTTP client keeps connections alive across the 4 API calls it fires, so tmux polling every 60s is easy on the API. a proper local file cache is on the list for later but honestly not needed for now (i’m lazy) ship landed in v1.9.0. if you already have it: brew update brew upgrade hackfetch or arch family: yay -Syu hackfetch-bin (for more installs for ur specific os check out the github pls) then drop the tmux or lualine snippet above into your dotfiles and its just there in every terminal. no plugin. no config. no daemon. just a flag."}, {"post_id": 31042, "ts": "2026-07-19T03:42:21Z", "hours": 8.7494, "text": "Hackfetch Gets Real Colors New thing today: hackfetch now emits 24-bit color when your terminal supports it, and spreads gradients smoothly across each row instead of cycling through the palette one character at a time. Before and after Old behavior: for a per-char scheme like rainbow , each character got exactly one palette entry, wrapping around every N characters. On a 30-column row with a 3-color palette, that looked like ten cycles of red, green, blue, red, green, blue… basically RGB static. New behavior: the palette spreads across the row once, and characters between palette entries get interpolated in-between colors. Same 3-color palette on a 30-column row now shows red, olive, green, teal, blue, magenta, back to red. Why the rebuild Terminals speak two color modes: 256-color ( \\x1b[38;5;Nm ): pick from a fixed palette of 256 preset RGB values. 24-bit / truecolor ( \\x1b[38;2;R;G;Bm ): specify any of ~16 million RGB values directly. The old code always used 256-color. That meant every character had to snap to one of the palette entries. No in-betweens possible. The new code checks $COLORTERM (set to truecolor by iTerm2, kitty, WezTerm, Alacritty, GNOME Terminal, and most modern terminals) and emits 24-bit escapes when supported. When it’s not, it falls back to the old cycled-palette behavior automatically. You can force it either way with HACKFETCH_TRUECOLOR=1 or =0 . Where you’ll notice it The built-in rainbow scheme has 23 palette stops, so the difference on that one is small. You just see a smoother color distribution and less banding. The change is dramatic on: custom themes with few stops (try 3 colors in your ~/.config/hackfetch/colors.json for the wildest gradient) the stardance palette (11 stops, per-char), where sparkles now flow through the spectrum in order instead of landing on random-looking colors any per-line scheme ( pride , trans , bi , pan , sunset , ocean , forest ) since they now emit exact RGB values instead of nearest-256-color Bonus: the SVG, PNG, and JPG export paths use the smooth interpolation too, so exported cards look better regardless of your terminal. Ship Landed in v1.8.0 . brew update brew upgrade hackfetch Or on the Arch family: yay -Syu hackfetch-bin Try hackfetch rocket forest and just watch."}, {"post_id": 30475, "ts": "2026-07-18T02:33:55Z", "hours": 10.1122, "text": "One More Way to Install (and Pizza) Two small things today: hackfetch is now on the AUR, and there’s a new logo. hackfetch on the AUR A reviewer on my last ship said they had a hard time getting hackfetch running on CachyOS (an Arch-based Linux distro). Instead of trying to reproduce their exact issue, I figured the cleanest fix was to publish hackfetch through the package manager Arch users already trust. So hackfetch is now up as hackfetch-bin on the AUR: aur.archlinux.org/packages/hackfetch-bin If you’re on Arch, CachyOS, Manjaro, EndeavourOS, Garuda, or any other Arch-based distro: yay -S hackfetch-bin Or with paru: paru -S hackfetch-bin The package pulls the pre-built binary straight from the GitHub release, so there’s no waiting on a source build. Works on both x86_64 and aarch64 . Add it up and hackfetch is now installable one command from: brew (macOS and Linuxbrew) apt / dnf / yum / pacman / zypper / apk (all through the curl installer) the AUR (Arch family) go install (any platform with Go) the PowerShell installer (Windows) This thing is getting kind of hard to NOT install. Pizza logo Hack Club runs on pizza. Now hackfetch does too. hackfetch pizza It’s a triangular slice viewed from the tip, HACK CLUB baked into the middle, and a rolled crust at the wide edge. The tricky part was the crust. I went through three drafts trying to make it curve at the bottom without breaking the connection to the slice’s diagonal sides (turns out you can’t cleanly connect diagonal characters to horizontal ones in a monospace grid). Landed on a two-row rolled crust where the diagonals keep going and the interior fills with a double horizontal band. Pairs surprisingly well with sunset: hackfetch pizza sunset Turns your terminal into a golden-hour pizza box. Ship Both landed in v1.7.3 . If you’re on Arch-family: yay -S hackfetch-bin Elsewhere: brew update brew upgrade hackfetch Now try hackfetch pizza and tell me if the crust looks right."}, {"post_id": 29524, "ts": "2026-07-16T14:40:13Z", "hours": 3.2108, "text": "Hackfetch Is Now Actually Fast Last log I added a loading spinner so you’d have something to look at while hackfetch was hitting the Hackatime API. This week I made it so you barely have time to see the spinner at all (undoing all my work lol) The problem hackfetch was making four separate calls to Hackatime for every fetch: /users/current/heartbeats/most_recent (for your slack handle) /users/current/summaries (for your streak) /users/current/statusbar/today (for today's coding time) /users/current/stats/last_7_days (for weekly stats) Doing them one after another meant the total wait was the sum of all four. Turns out that’s about 1.7 seconds on a normal connection. Not the end of the world, but very noticeable when you just want to open a terminal. The fix: run them all at the same time Now hackfetch fires all four calls in parallel using goroutines, waits for the slowest one to come back, and then builds the fetch from the responses. Total wait drops from “sum of all four” to “just the slowest one.” Before: ~1.7 seconds After: ~0.7 seconds 60% faster . Every single fetch. Every single time. One tiny bonus optimization While I was in there, I also switched to a single shared HTTP client with a bigger connection pool. The default Go setup caps you at 2 open connections per host, which is fine when you’re calling one endpoint at a time but hurts when you’re firing four at once. Now the parallel calls can share connections instead of stacking up on each other. Nothing about the fetch itself changed. Same info, same layout, same colors. Just faster. Ship Shipped in v1.7.2. If you have hackfetch installed: brew update brew upgrade hackfetch time hackfetch Watch the spinner barely have time to appear."}, {"post_id": 29398, "ts": "2026-07-16T10:18:00Z", "hours": 13.6781, "text": "Loading Spinner and Splitting Up main.go Thanks so much to everyone who took the time to comment, rate, and drop feedback on my latest ship. All of it was genuinely so helpful and I’ve been spending the last couple days fixing things up a bit. I totally forgot to devlog so I’m actually losing a couple hours since it’s been over ten hours since my last one :sob A loading spinner while Hackatime fetches One reviewer pointed out that hackfetch takes a couple of seconds when it’s pulling your Hackatime stats for the first time, and there was no signal that anything was happening. Now there is. ⠋ fetching Hackatime... The spinner cycles through 10 braille frames and the whole line clears out the instant the fetch finishes. Same fetch, way less awkward pause. Two small details that make it feel right: It only shows when stderr is actually a terminal, so it doesn’t spam control codes into your log files if you redirect output. It prints one frame immediately, so fast fetches still flash something instead of nothing. hackfetch runs it around the API calls automatically. No config, no opt-in. It’s just there. Splitting up main.go Another reviewer said the 1.5k-line file was too much. They were completely right. hackfetch had grown into one giant main.go that held the logos, the color schemes, the Hackatime API client, the terminal render, the SVG exporter, the PNG rasterizer, everything. Refactored today into files that each do one thing: logos.go: the ASCII logos colors.go: color schemes and the ANSI → hex table config.go: reads ~/.wakatime.cfg hackatime.go: the API client, caching, and language inference sysinfo.go: OS, shell, editor, terminal setup.go: the -setup flow render.go: terminal render, watch loop, and layout export.go: SVG, PNG, and JPG exporters main.go: just flag parsing and the entry point (~100 lines instead of 1,600) Same binary, same behavior, zero user-visible change. But next time I want to add a new logo or a new color scheme, I know exactly which file to open. Also way friendlier for anyone who wants to hack on it. Ship Both landed in v1.7.1. If you already have it: brew update brew upgrade hackfetch Or the curl installer will pull v1.7.1 the next time you run it. Try it."}, {"post_id": 23812, "ts": "2026-07-06T23:42:52Z", "hours": 7.1119, "text": "New feature today: hackfetch can turn itself into a shareable image. The goal was simple: your terminal fetch should be more than a terminal thing. If it looks cool on your screen, you should be able to post it in a Slack channel or drop it in a devlog without ever having to take a screenshot. hackfetch -export card.svg Run that and instead of printing to your terminal, hackfetch writes an SVG file that looks exactly like the fetch on your screen: logo on the left, stats on the right, rounded corners, monospace font, every color preserved. Getting the general SVG output was the easy part. Draw a rectangle, put text inside it, done. The hard part was preserving the colors. Terminals speak ANSI 256-color codes. SVGs speak hex color strings. They don’t line up one-to-one, so a naive export just drops every color and produces a black-and-white version of the fetch. Not very shareable. The fix: a lookup table from ANSI 256-color codes to hex values, plus a rendering path that emits every styled character as its own SVG element with the correct fill color. That’s actually a lot of tspans. Schemes like per-char, where every single glyph has its own gradient stop, can produce hundreds of colored elements per fetch. But it works. The SVG renders smoothly in any browser and looks identical to what shows up in your terminal. Use It Anywhere Some things you can do with the exported card: open it in a browser to see it drop it into a Slack channel or a devlog convert it to PNG with rsvg-convert if you need a raster image hackfetch -export card.svg trans Open it. Post it. Ship it."}, {"post_id": 19472, "ts": "2026-06-30T20:03:24Z", "hours": 2.2483, "text": "Live Hackfetch New milestone today: hackfetch can now stay open and update itself while you code. The goal was simple: run hackfetch once, leave it in the corner of your terminal, and watch the numbers move in real time as you work. hackfetch -watch Your today-hours tick up. Your top project changes when you switch repos. Your streak rolls over at midnight. All without running the command a second time. The static render was already in place from the regular one-shot fetch. The new part was redrawing without scrolling. That sounds simple. It is not. In a terminal, every time you print something, it appends to the bottom of the screen. By default, refreshing the fetch would just print a second copy of itself underneath the first, then a third, then a fourth. Within a minute you’d have a wall of identical fetches scrolling away into the past. The trick is ANSI escape codes. There’s a sequence that means “move the cursor up N lines” and one that means “clear the rest of the screen from here down.” Together they let you erase the previous fetch and redraw a new one in the same spot. Same screen, fresh data, no scroll. Why every 30 seconds? Two reasons: Hackatime aggregates heartbeats in 1-minute buckets internally, so polling faster than that doesn’t tell you anything new 30 seconds is fast enough to feel “live” without hammering the API for no reason Ctrl+C to quit. Resizing the terminal doesn’t break it. Pair it with a gradient color scheme and the whole thing turns into a tiny dashboard for your coding session: hackfetch -watch sunset"}, {"post_id": 16604, "ts": "2026-06-27T00:38:28Z", "hours": 0.5825, "text": "Hackfetch Installs Itself Anywhere Hackfetch crossed another milestone today: you no longer need Go installed to use it. Or Homebrew. Or anything, really. The goal was simple: one command, any Linux, any Mac, no prerequisites. curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Run that on Ubuntu, Fedora, Alpine, Arch, openSUSE, whatever you have, and a few seconds later hackfetch is on your PATH. Getting the basic installer working was the easy part. Detect your OS, detect your CPU architecture, grab the matching binary from GitHub Releases, drop it in /usr/local/bin. Standard installer stuff. The harder problem was the script itself failing on some Linuxes. I’d written the first version in Bash, with set -euo pipefail at the top and $'\\033[1m' style escape sequences sprinkled through. Worked great on my Mac. Worked great on Ubuntu. Then I checked which shell Alpine Linux ships by default. Not Bash. The whole script would die on line one for anyone on a minimal container. So I rewrote it in POSIX sh, which is the one shell every Unix system actually has. No Bash-isms, no fancy quoting, no pipefail. Smaller, dumber, way more portable. Speaking Seven Package Managers The next problem: the script needs curl and tar to do its job. If you don’t have them, normally you’d just be stuck. Instead, the installer now detects your system’s package manager and installs the missing prereqs for you: apt (Debian, Ubuntu) dnf (Fedora, RHEL) yum (CentOS, older RHEL) pacman (Arch) zypper (openSUSE) apk (Alpine) brew (macOS) They all do the same thing. They all use different words for it. The installer knows all seven. One line. Any Linux. No prereqs."}, {"post_id": 15120, "ts": "2026-06-24T15:57:10Z", "hours": 0.4172, "text": "Hackfetch Meets Orpheus! If you’ve been around Hack Club for more than five minutes, you know Orpheus. The little dinosaur shows up everywhere: stickers, websites, T-shirts, hackathon merch. Until today, he wasn’t in hackfetch. That’s been bugging me since v1.0. The goal was simple: give Orpheus a spot in the logo lineup, the same way flag, bot, and rocket already have one. hackfetch orpheus Drawing him was the harder part. Every logo in hackfetch has to fit inside a fixed width of 33 characters, otherwise the system info column next to it gets pushed off the screen. 33 characters is not a lot of room to draw a recognizable dinosaur, especially one with personality. I tried him head-on first. It didn’t work. Round dinosaur faces in ASCII end up looking like blobs because you don’t have curves, only corners. So I redrew him in profile. The result: a snout sticking out to one side one big eye (◉) that catches the light a HACK CLUB body underneath two tiny stubby legs at the bottom Nine lines tall. No wasted rows. He plays especially well with the gradient color schemes: hackfetch orpheus -color forest hackfetch orpheus -color sunset Forest makes him look like he’s wandering through tall grass. Sunset gives him a “main character in the closing shot” vibe. The mascot finally has a seat at the terminal. Long overdue! Also if any better artists want to have a crack at it, I’m super open to that, and I can credit you in my repo as a collaborator! THNX!"}, {"post_id": 14410, "ts": "2026-06-23T15:08:46Z", "hours": 6.8756, "text": "Hackfetch Can Finally Fetch Hackfetch crossed a pretty big milestone today: it actually fetches things. The goal is simple: build a Neofetch-style dashboard for Hack Club. Run a single command and get a snapshot of your machine alongside your Hack Club activity. hackfetch and instantly see information like: OS Hostname Username Shell Terminal Editor Hackatime stats Getting the system information was the easy part. Go makes it straightforward to grab things like the current user, hostname, operating system, and environment variables. The harder problem was rendering everything cleanly beside an ASCII logo. Each logo has different dimensions and line lengths, so I ended up building a small layout engine that calculates the width of every logo row and pads it dynamically before printing the corresponding information. Without that, the text column slowly drifts into the logo and the entire fetch screen looks broken. Hooking into Hackatime The more interesting work was integrating with the Hackatime API.Hackfetch reads your API key from: ~/.wakatime.cfg authenticates with Hackatime, and pulls fresh coding statistics every time you run the command.Right now it can display: Today’s coding time Weekly coding time Current streak Top project Most-used language No browser. No dashboard. Just a terminal command."}, {"post_id": 7579, "ts": "2026-06-12T17:50:14Z", "hours": 0.5989, "text": "In honor of pride month, I have added a pride color scheme to my custom hackfetch. It is currently installable via brew. On macs, simply run: brew install xerneas3318/tap/hackfetch Currently working on better support for more operating systems. Follow and like to stay updated!"}, {"post_id": 7526, "ts": "2026-06-12T15:50:51Z", "hours": 8.7181, "text": "Introducing hackfetch a tiny terminal fetch tool for hackatime. Run hackfetch and get your hours today, weekly total, streak, top project, and top language right in your terminal. 5 logos. 8 color schemes. mix and match: hackfetch stardance rainbow How it works: hackfetch reads your hackatime key from ~/.wakatime.cfg, fetches your Hackatime summaries and heartbeats, then renders your stats directly in the terminal."}]...
|
Title: Hackfetch by @xerneas | Stardance
Devlogs: Title: Hackfetch by @xerneas | Stardance
Devlogs:
Introducing hackfetch a tiny terminal fetch tool for hackatime. Run hackfetch and get your hours today, weekly total, streak, top project, and top language right in your terminal. 5 logos. 8 color schemes. mix and match: hackfetch stardance rainbow How it works: hackfetch reads your hackatime key from ~/.wakatime.cfg, fetches your Hackatime summaries and heartbeats, then renders your stats directly in the terminal.
In honor of pride month, I have added a pride color scheme to my custom hackfetch. It is currently installable via brew. On macs, simply run: brew install xerneas3318/tap/hackfetch Currently working on better support for more operating systems. Follow and like to stay updated!
Hackfetch Can Finally Fetch Hackfetch crossed a pretty big milestone today: it actually fetches things. The goal is simple: build a Neofetch-style dashboard for Hack Club. Run a single command and get a snapshot of your machine alongside your Hack Club activity. hackfetch and instantly see information like: OS Hostname Username Shell Terminal Editor Hackatime stats Getting the system information was the easy part. Go makes it straightforward to grab things like the current user, hostname, operating system, and environment variables. The harder problem was rendering everything cleanly beside an ASCII logo. Each logo has different dimensions and line lengths, so I ended up building a small layout engine that calculates the width of every logo row and pads it dynamically before printing the corresponding information. Without that, the text column slowly drifts into the logo and the entire fetch screen looks broken. Hooking into Hackatime The more interesting work was integrating with the Hackatime API.Hackfetch reads your API key from: ~/.wakatime.cfg authenticates with Hackatime, and pulls fresh coding statistics every time you run the command.Right now it can display: Today’s coding time Weekly coding time Current streak Top project Most-used language No browser. No dashboard. Just a terminal command.
Hackfetch Meets Orpheus! If you’ve been around Hack Club for more than five minutes, you know Orpheus. The little dinosaur shows up everywhere: stickers, websites, T-shirts, hackathon merch. Until today, he wasn’t in hackfetch. That’s been bugging me since v1.0. The goal was simple: give Orpheus a spot in the logo lineup, the same way flag, bot, and rocket already have one. hackfetch orpheus Drawing him was the harder part. Every logo in hackfetch has to fit inside a fixed width of 33 characters, otherwise the system info column next to it gets pushed off the screen. 33 characters is not a lot of room to draw a recognizable dinosaur, especially one with personality. I tried him head-on first. It didn’t work. Round dinosaur faces in ASCII end up looking like blobs because you don’t have curves, only corners. So I redrew him in profile. The result: a snout sticking out to one side one big eye (◉) that catches the light a HACK CLUB body underneath two tiny stubby legs at the bottom Nine lines tall. No wasted rows. He plays especially well with the gradient color schemes: hackfetch orpheus -color forest hackfetch orpheus -color sunset Forest makes him look like he’s wandering through tall grass. Sunset gives him a “main character in the closing shot” vibe. The mascot finally has a seat at the terminal. Long overdue! Also if any better artists want to have a crack at it, I’m super open to that, and I can credit you in my repo as a collaborator! THNX!
Hackfetch Installs Itself Anywhere Hackfetch crossed another milestone today: you no longer need Go installed to use it. Or Homebrew. Or anything, really. The goal was simple: one command, any Linux, any Mac, no prerequisites. curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Run that on Ubuntu, Fedora, Alpine, Arch, openSUSE, whatever you have, and a few seconds later hackfetch is on your PATH. Getting the basic installer working was the easy part. Detect your OS, detect your CPU architecture, grab the matching binary from GitHub Releases, drop it in /usr/local/bin. Standard installer stuff. The harder problem was the script itself failing on some Linuxes. I’d written the first version in Bash, with set -euo pipefail at the top and $'\033[1m' style escape sequences sprinkled through. Worked great on my Mac. Worked great on Ubuntu. Then I checked which shell Alpine Linux ships by default. Not Bash. The whole script would die on line one for anyone on a minimal container. So I rewrote it in POSIX sh, which is the one shell every Unix system actually has. No Bash-isms, no fancy quoting, no pipefail. Smaller, dumber, way more portable. Speaking Seven Package Managers The next problem: the script needs curl and tar to do its job. If you don’t have them, normally you’d just be stuck. Instead, the installer now detects your system’s package manager and installs the missing prereqs for you: apt (Debian, Ubuntu) dnf (Fedora, RHEL) yum (CentOS, older RHEL) pacman (Arch) zypper (openSUSE) apk (Alpine) brew (macOS) They all do the same thing. They all use different words for it. The installer knows all seven. One line. Any Linux. No prereqs.
Live Hackfetch New milestone today: hackfetch can now stay open and update itself while you code. The goal was simple: run hackfetch once, leave it in the corner of your terminal, and watch the numbers move in real time as you work. hackfetch -watch Your today-hours tick up. Your top project changes when you switch repos. Your streak rolls over at midnight. All without running the command a second time. The static render was already in place from the regular one-shot fetch. The new part was redrawing without scrolling. That sounds simple. It is not. In a terminal, every time you print something, it appends to the bottom of the screen. By default, refreshing the fetch would just print a second copy of itself underneath the first, then a third, then a fourth. Within a minute you’d have a wall of identical fetches scrolling away into the past. The trick is ANSI escape codes. There’s a sequence that means “move the cursor up N lines” and one that means “clear the rest of the screen from here down.” Together they let you erase the previous fetch and redraw a new one in the same spot. Same screen, fresh data, no scroll. Why every 30 seconds? Two reasons: Hackatime aggregates heartbeats in 1-minute buckets internally, so polling faster than that doesn’t tell you anything new 30 seconds is fast enough to feel “live” without hammering the API for no reason Ctrl+C to quit. Resizing the terminal doesn’t break it. Pair it with a gradient color scheme and the whole thing turns into a tiny dashboard for your coding session: hackfetch -watch sunset
New feature today: hackfetch can turn itself into a shareable image. The goal was simple: your terminal fetch should be more than a terminal thing. If it looks cool on your screen, you should be able to post it in a Slack channel or drop it in a devlog without ever having to take a screenshot. hackfetch -export card.svg Run that and instead of printing to your terminal, hackfetch writes an SVG file that looks exactly like the fetch on your screen: logo on the left, stats on the right, rounded corners, monospace font, every color preserved. Getting the general SVG output was the easy part. Draw a rectangle, put text inside it, done. The hard part was preserving the colors. Terminals speak ANSI 256-color codes. SVGs speak hex color strings. They don’t line up one-to-one, so a naive export just drops every color and produces a black-and-white version of the fetch. Not very shareable. The fix: a lookup table from ANSI 256-color codes to hex values, plus a rendering path that emits every styled character as its own SVG element with the correct fill color. That’s actually a lot of tspans. Schemes like per-char, where every single glyph has its own gradient stop, can produce hundreds of colored elements per fetch. But it works. The SVG renders smoothly in any browser and looks identical to what shows up in your terminal. Use It Anywhere Some things you can do with the exported card: open it in a browser to see it drop it into a Slack channel or a devlog convert it to PNG with rsvg-convert if you need a raster image hackfetch -export card.svg trans Open it. Post it. Ship it.
Loading Spinner and Splitting Up main.go Thanks so much to everyone who took the time to comment, rate, and drop feedback on my latest ship. All of it was genuinely so helpful and I’ve been spending the last couple days fixing things up a bit. I totally forgot to devlog so I’m actually losing a couple hours since it’s been over ten hours since my last one :sob A loading spinner while Hackatime fetches One reviewer pointed out that hackfetch takes a couple of seconds when it’s pulling your Hackatime stats for the first time, and there was no signal that anything was happening. Now there is. ⠋ fetching Hackatime... The spinner cycles through 10 braille frames and the whole line clears out the instant the fetch finishes. Same fetch, way less awkward pause. Two small details that make it feel right: It only shows when stderr is actually a terminal, so it doesn’t spam control codes into your log files if you redirect output. It prints one frame immediately, so fast fetches still flash something instead of nothing. hackfetch runs it around the API calls automatically. No config, no opt-in. It’s just there. Splitting up main.go Another reviewer said the 1.5k-line file was too much. They were completely right. hackfetch had grown into one giant main.go that held the logos, the color schemes, the Hackatime API client, the terminal render, the SVG exporter, the PNG rasterizer, everything. Refactored today into files that each do one thing: logos.go: the ASCII logos colors.go: color schemes and the ANSI → hex table config.go: reads ~/.wakatime.cfg hackatime.go: the API client, caching, and language inference sysinfo.go: OS, shell, editor, terminal setup.go: the -setup flow render.go: terminal render, watch loop, and layout export.go: SVG, PNG, and JPG exporters main.go: just flag parsing and the entry point (~100 lines instead of 1,600) Same binary, same behavior, zero user-visible change. But next time I want to add a new logo or a new color scheme, I know exactly which file to open. Also way friendlier for anyone who wants to hack on it. Ship Both landed in v1.7.1. If you already have it: brew update brew upgrade hackfetch Or the curl installer will pull v1.7.1 the next time you run it. Try it.
Hackfetch Is Now Actually Fast Last log I added a loading spinner so you’d have something to look at while hackfetch was hitting the Hackatime API. This week I made it so you barely have time to see the spinner at all (undoing all my work lol) The problem hackfetch was making four separate calls to Hackatime for every fetch: /users/current/heartbeats/most_recent (for your slack handle) /users/current/summaries (for your streak) /users/current/statusbar/today (for today's coding time) /users/current/stats/last_7_days (for weekly stats) Doing them one after another meant the total wait was the sum of all four. Turns out that’s about 1.7 seconds on a normal connection. Not the end of the world, but very noticeable when you just want to open a terminal. The fix: run them all at the same time Now hackfetch fires all four calls in parallel using goroutines, waits for the slowest one to come back, and then builds the fetch from the responses. Total wait drops from “sum of all four” to “just the slowest one.” Before: ~1.7 seconds After: ~0.7 seconds 60% faster . Every single fetch. Every single time. One tiny bonus optimization While I was in there, I also switched to a single shared HTTP client with a bigger connection pool. The default Go setup caps you at 2 open connections per host, which is fine when you’re calling one endpoint at a time but hurts when you’re firing four at once. Now the parallel calls can share connections instead of stacking up on each other. Nothing about the fetch itself changed. Same info, same layout, same colors. Just faster. Ship Shipped in v1.7.2. If you have hackfetch installed: brew update brew upgrade hackfetch time hackfetch Watch the spinner barely have time to appear.
One More Way to Install (and Pizza) Two small things today: hackfetch is now on the AUR, and there’s a new logo. hackfetch on the AUR A reviewer on my last ship said they had a hard time getting hackfetch running on CachyOS (an Arch-based Linux distro). Instead of trying to reproduce their exact issue, I figured the cleanest fix was to publish hackfetch through the package manager Arch users already trust. So hackfetch is now up as hackfetch-bin on the AUR: aur.archlinux.org/packages/hackfetch-bin If you’re on Arch, CachyOS, Manjaro, EndeavourOS, Garuda, or any other Arch-based distro: yay -S hackfetch-bin Or with paru: paru -S hackfetch-bin The package pulls the pre-built binary straight from the GitHub release, so there’s no waiting on a source build. Works on both x86_64 and aarch64 . Add it up and hackfetch is now installable one command from: brew (macOS and Linuxbrew) apt / dnf / yum / pacman / zypper / apk (all through the curl installer) the AUR (Arch family) go install (any platform with Go) the PowerShell installer (Windows) This thing is getting kind of hard to NOT install. Pizza logo Hack Club runs on pizza. Now hackfetch does too. hackfetch pizza It’s a triangular slice viewed from the tip, HACK CLUB baked into the middle, and a rolled crust at the wide edge. The tricky part was the crust. I went through three drafts trying to make it curve at the bottom without breaking the connection to the slice’s diagonal sides (turns out you can’t cleanly connect diagonal characters to horizontal ones in a monospace grid). Landed on a two-row rolled crust where the diagonals keep going and the interior fills with a double horizontal band. Pairs surprisingly well with sunset: hackfetch pizza sunset Turns your terminal into a golden-hour pizza box. Ship Both landed in v1.7.3 . If you’re on Arch-family: yay -S hackfetch-bin Elsewhere: brew update brew upgrade hackfetch Now try hackfetch pizza and tell me if the crust looks right.
Hackfetch Gets Real Colors New thing today: hackfetch now emits 24-bit color when your terminal supports it, and spreads gradients smoothly across each row instead of cycling through the palette one character at a time. Before and after Old behavior: for a per-char scheme like rainbow , each character got exactly one palette entry, wrapping around every N characters. On a 30-column row with a 3-color palette, that looked like ten cycles of red, green, blue, red, green, blue… basically RGB static. New behavior: the palette spreads across the row once, and characters between palette entries get interpolated in-between colors. Same 3-color palette on a 30-column row now shows red, olive, green, teal, blue, magenta, back to red. Why the rebuild Terminals speak two color modes: 256-color ( \x1b[38;5;Nm ): pick from a fixed palette of 256 preset RGB values. 24-bit / truecolor ( \x1b[38;2;R;G;Bm ): specify any of ~16 million RGB values directly. The old code always used 256-color. That meant every character had to snap to one of the palette entries. No in-betweens possible. The new code checks $COLORTERM (set to truecolor by iTerm2, kitty, WezTerm, Alacritty, GNOME Terminal, and most modern terminals) and emits 24-bit escapes when supported. When it’s not, it falls back to the old cycled-palette behavior automatically. You can force it either way with HACKFETCH_TRUECOLOR=1 or =0 . Where you’ll notice it The built-in rainbow scheme has 23 palette stops, so the difference on that one is small. You just see a smoother color distribution and less banding. The change is dramatic on: custom themes with few stops (try 3 colors in your ~/.config/hackfetch/colors.json for the wildest gradient) the stardance palette (11 stops, per-char), where sparkles now flow through the spectrum in order instead of landing on random-looking colors any per-line scheme ( pride , trans , bi , pan , sunset , ocean , forest ) since they now emit exact RGB values instead of nearest-256-color Bonus: the SVG, PNG, and JPG export paths use the smooth interpolation too, so exported cards look better regardless of your terminal. Ship Landed in v1.8.0 . brew update brew upgrade hackfetch Or on the Arch family: yay -Syu hackfetch-bin Try hackfetch rocket forest and just watch.
hackfetch is now TMUX + NVIM COMPATIBLE new thing today: hackfetch will just show up wherever you already look. tmux status bar. nvim statusline. any tool that can shell out to a command and put text on a screen. The addition was simple: hackfetch -status prints one line: 2h 11m today · hackfetch (45m) · streak 12 just the numbers, for tools that already have their own rendering. hackfetch is a data source now, not just a display. in tmux two lines in ~/.tmux.conf : set -g status-interval 60 thats it. every tmux session, every window, refreshing once a minute. i dropped it in a pink Catppuccin capsule to the left of my existing date capsule and now i cant stop glancing at it lol. in neovim (lualine) same story, five lines of lua: sections = { lualine_z = { function () return vim . fn . system ( "hackfetch -status" ): gsub ( " \n " , "" ) end } } } shells out on every redraw. works with airline too, or any custom statusline that lets you plug in a function. the fun part making hackfetch call safe for “something tmux runs every 60s forever” meant fixing three assumptions the normal fetch was making. this was way harder than it should have been ngl. setup cant block. if you dont have ~/.wakatime.cfg, normal hackfetch throws you into an interactive setup wizard (ask me how i know). in status mode that would freeze your tmux bar until you notice and Ctrl+C it. so status mode is fully non interactive now. no config → print nothing → tmux shows nothing → no deadlock 🙏 api errors cant leak into your bar. hackatime offline? old behavior would dump HTTP 500 timeout into your status area which looks INSANE. now status mode exits silently instead so your bar stays clean every call has to be cheap. hackfetch’s parallel fetch alr seconds, and the shared HTTP client keeps connections alive across the 4 API calls it fires, so tmux polling every 60s is easy on the API. a proper local file cache is on the list for later but honestly not needed for now (i’m lazy) ship landed in v1.9.0. if you already have it: brew update brew upgrade hackfetch or arch family: yay -Syu hackfetch-bin (for more installs for ur specific os check out the github pls) then drop the tmux or lualine snippet above into your dotfiles and its just there in every terminal. no plugin. no config. no daemon. just a flag.
caching or i owe hackclub money so heres what my day looked like: nvim was calling hackfetch -status on every redraw for my lualine. tmux was calling it every 60 seconds for the status bar. i had 3 tmux sessions open. and every time i actually opened a new terminal, hackfetch fired again on shell start. quick napkin math: nvim redraws are basically continuous when im typing, tmux was hitting the api 3x/minute across sessions, plus every terminal open = another fetch. we’re talking hundreds of calls to hackatime in a normal work session. from ONE user. me hackatime is a free hack club service and i was starting to feel bad lol. the fix: cache the response ~/.cache/hackfetch/last.json stores the last snapshot with a timestamp. every fetch checks that file first. if its fresh enough, skip the network entirely and just render from disk. TTL is different depending on the caller: hackfetch (one-shot): 30 seconds. long enough that a normal re-run inside a devlog attempt is instant, short enough that you dont get badly stale numbers. hackfetch -status: 60 seconds tmux polls roughly this often anyway so its basically free now. hackfetch -watch: ignores the cache, always fresh (thats the whole point of watch mode). opt out with -no-cache or HACKFETCH_CACHE_TTL=0 if you want. also HACKFETCH_CACHE_TTL=300 to be even more polite. So yea tmux is now basically free . but the real win writing this made me realize the cache does more than save milliseconds: every fetch was a full TLS handshake, wifi radio spin up, etc. now most fetches touch the disk once and nothing else. macbook fan appreciates it. offline. if your wifi drops mid coding session you keep working from the cache instead of showing a spinner forever. tmux bar just keeps saying what it said 40 seconds ago. battery again but for the hackatime server. hackfetch stops asking the api 5-10x more than they need to. multiply by everyone who has it in their tmux config and thats a real thing. atomic write via .tmp + rename so nothing ever reads a half-written file. cache is user-only (0600), because it does contain your top project name. bonus: -doctor while i was fixing the polite-to-the-api stuff i added -doctor , which walks a checklist and tells you whats broken: hackfetch doctor ✓ wakatime config exists /Users/xerneas/.wakatime.cfg ✓ api_key present loaded from config ✓ wakatime-cli found /Users/xerneas/.wakatime/wakatime-cli ✓ hackatime api reachable today: 28m ✓ terminal supports truecolor $COLORTERM=truecolor ✓ browser opener available /usr/bin/open green if its working, orange if its not, and non-zero exit if anything failed so you can script it. this was going to be a small self-diagnosis feature and it caught a real bug in the api client on the very first run i did while writing it lol (a string field where hackatime returns an int, so one of the fields was silently missing from every fetch since v1.0). fixed that too. ship both landed in v1.10.0. update as usual: brew update brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then run hackfetch -doctor first, and if anything is broken it’ll tell you exactly what.
my streak was lying to me for a month went to add a simple 7-day sparkline. by the end of the night i had rewritten how hackfetch talks to hackatime and my streak field is finally accurate for the first time in weeks. the plan was get the status from the last 7 days. draw ▁▂▃▄▅▆▇█ bars except the endpoint i needed straight up 404s. /users/current/summaries doesnt exist on the current hackatime deployment. Which means every single time i ran hackfetch it was quietly making a 30-day range call that always failed, then falling back to a placeholder that said “if today has activity, streak = 1”. thats it. no matter how long ive actually been on a streak, the fetch would just show 1 day. 🤦 my streak has said 1 day for the last 2 weeks even though ive been coding literally every day. never noticed because 1 day looks kinda plausible (i added 1 day as a fallback so that it didn’t show an error a couple weeks ago and forgot ) the fix: went digging in hackatimes rails routes on github. turns out theres a whole /api/v1/ namespace i was never using. and one of the endpoints is /api/v1/users/:id/heartbeats/spans. one call, ~150kb of json, every coding session ive ever logged with start_time, end_time, duration. 2000+ spans. which is exactly what i need for both features. bucket the timestamps by local calendar day, count unique days for streak, sum durations per day for the sparkline. one request covers both. and while i was already in the api layer i noticed fetchUser was making a whole separate call for my slack handle, which is silly because that data is already in the weekly stats response we cache. so i piggybacked it. weve gone from 4 api calls per fetch to 3. the sparkline: 7-day chart ▄▄▇▅▄▅▃ 65h 28m oldest on the left, newest on the right. that tall bar in the middle is a big lock-in session from earlier in the week. the two shorter ones on the right are today (still coding) and yesterday (took a break). opt in for -status --sparkline if you want it in your tmux bar too: 2h 9m today · streak 9 · ▄▄▇▅▄▅▃ 65h 28m teasing a backend: I’m planning on building a whole leaderboard server on a free hack club nest box so people can compete on their hackatime hours. while i was poking around the routes file for the streak fix i noticed something. /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist. public. no auth needed. no server needed. no cron sync. hackatime literally already has it directly. so hackfetch -leaderboard is coming soon (private friend groups and personal competitions can come later) last devlog before my next ship after the ship the devlogs are going to be huge. stay tuned :P
hackfetch COLLAB?? so my last two devlogs teased two features. shipping both today. -leaderboard last devlog i said “compete with your friends on hackatime hours is coming soon.” i thought i was gonna have to build a whole nest server for it. turns out /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist and are public on hackatime. just a single call!! so hackfetch -leaderboard daily (or weekly) now shows the top 10: ✦ daily leaderboard Last 24 hours 🥇 1. soaphia14 11h 12m 🥈 2. AnastKara 10h 32m 🥉 3. RoSerMar 10h 6m 4. euledone 10h 5. TheShovel 10h 6. Dylhouse 9h 1m 7. Dexrn 8h 59m 8. HexFud 8h 31m 9. zeddash 8h 29m 10. Trtotomotoro 8h 26m every username is an OSC 8 clickable link to that person’s hackatime profile. modern terminals (iterm2, kitty, wezterm, alacritty, gnome-terminal) render it as an actual hyperlink you can click. terminals without OSC 8 just show the plain text so it doesnt look broken. if you’re on the board it highlights your row in orange and adds (you) next to your name. json addon the other thing. someone else competing in stardance messaged me the other day about integrating hackatime into their own project and needed help figuring out the api (YAY). helping them made me realize hackfetch is doing a bunch of work (auth, caching, streak reconstruction, per-day bucketing) that other tools would love to piggyback on. so now: $ hackfetch -json { "version": "2", "fetched_at": "2026-07-25T17:00: 20.900829+05:30", "system": { "user": "xerneas", "host": "Macbook-Pro", "os": "macOS 26.5.2", ... }, "hackatime": { "slack": "@U0B8FHHRQPJ", "streak": 12, "today_seconds": 15820, "week_seconds": 237501, "top_project": { "name": "hackfetch", " "top_language": { "name": "Go", "seconds": 97418 }, "week_chart": [36967, 31651, 33841, 284 "machines": 3 } } week_chart is 7 numbers = daily seconds oldest to newest same as the sparkline. top_language skips the unknown/other buckets. everything lines up with what the normal fetch would show, just parseable. ship landed in v2.1.0. brew update && brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then try: hackfetch -leaderboard weekly hackfetch -json | jq For a general install use: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh
big thank you for everyone’s feedback! fresh out of the oven: hackfetch v2.1.1 (aka the reviewer bug fix pass) what got fixed: shell detection used to just read $SHELL which is your login shell. if you log in as bash but run fish, hackfetch was calling you a bash user. it now checks $FISH_VERSION / $ZSH_VERSION / $BASH_VERSION and falls back to asking the OS who your parent process actually is editor detection was two bugs in a trench coat. it wasnt stripping args so zeditor --wait showed up as “zeditor –wait” instead of “Zed”, and if you had no $EDITOR set it defaulted to nano even if you had literally never opened nano. now it strips flags, maps launcher names to human ones (zeditor -> Zed, code -> VS Code, cursor -> Cursor, hx -> Helix etc), and says “-” instead of nano if nothing is set. top project label was ambiguous. it was pulling weekly stats but the row just said “top project” so people thought it meant all time. now weekly rows read top proj 7d , top lang 7d , top ed 7d , top cat 7d . setup dialog was scaring people. it always printed “file exists but has no api_key” whenever it reached the setup flow, even if the api_key line was actually there but just failing to parse. loadConfig is now more forgiving (inline comments, quoted values, case insensitive keys) and setup tells you WHY its stuck instead of gaslighting you about your own config. also short circuits if you run hackfetch -setup when youre already set up. people said they wanted a gay flag color was already there under the name pride but that wasnt obvious. gay is now an alias so both work. grab it: brew upgrade hackfetch or yay -S hackfetch-bin or curl / powershell installer if you don’t have it yet curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh again thank you to everyone who took the time to actually run it and tell me what was broken!
HACKFETCH BATTLES??? two features in one release. hackfetch already knows a scary amount about you (thanks hackatime) so why not turn that into more features. hackfetch vs @ someone head to head compare. give it a hackatime username and hackfetch fetches both your histories in parallel, buckets them into today / this week / all time / streak, and prints them side by side with a winner arrow on every row. accepts @name , name , or a full profile url like hackatime.hackclub.com/@name . also works positional: hackfetch vs @you . use it to settle arguments, motivate yourself, or realize your friend has coded 265 hours and you should probably close discord. hackfetch -records personal bests. computed entirely from data hackfetch already fetches (streak + sparkline already use it), so zero new api calls $ hackfetch -records ✦ personal records @you biggest day 12h 41m on 2026-07-18 longest streak 25 days ended 2026-07-01 longest session 43m on 2026-07-17 days coded 86 first day 2026-04-24 99 days ago lifetime 208h 29m the “longest streak” tracks your all time best not just your current one. and “first day” tells you how long ago you started so you can feel old. grab it brew upgrade hackfetch yay -S hackfetch-bin install curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Next devlog is gonna be a fun one, I have an idea cooking up
Hackfetdch natively in your readme hackfetch -readme it spits out a markdown stats card ready to paste straight into your github profile README. pipe it into a file and commit: hackfetch -readme > stats.md this is the cool bit or drop it in your README.md between two html comments and set up a github action to run it on a schedule so it auto refreshes every day. your profile now has a live coding stats card next to your pinned repos with no cron server, no vercel deploy, no api key stashed in secrets. its literally just markdown. zero extra api calls too. the readme card reads from the same cached hackatime response the normal fetch uses so if you just ran hackfetch it takes ~20ms. the streak emoji is a lil detail i had fun with. 3+ days gets a 🔥 upgrade with brew upgrade hackfetch or yay -S hackfetch-bin (once aur maintenance wraps up) or curl the installer curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh
Ships:
Every fetch tool tells you your OS. Mine tells you your streak. hackfetch is a Hack Club themed terminal fetch tool. Inspired by neofetch (originally bash, now archived) and fastfetch (its C successor), written in pure Go. Instead of just showing your kernel and CPU, it pulls live stats from your Hackatime account: today’s hours, weekly total, current streak, top project, top language. Right in your terminal. Six Hack Club themed ASCII logos (including my GOAT orpheus). Fourteen color schemes (pride, trans, bi, pan included). Live watch mode that refreshes while you code. And as of today, you can export the whole thing as a PNG, JPG, or SVG card and post it anywhere. One line to install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Tell me how it was! Follow and like for updates.
HACKFETCH V2.0 it’s been a few weeks since ship #1 and hackfetch is a completely different tool now. faster, smaller, quieter, actually correct, and now lives in places besides your terminal window. v2.0.0 is out. what changed: fits in your tmux status bar with one line of config. same story for lualine. hackfetch -status prints a compact one-liner meant to be shelled out to every minute. fits everywhere else too. now on the AUR (yay -S hackfetch-bin) alongside the existing brew tap, curl installer, powershell installer, and go install. seven install channels total. runs in ~20ms on repeat calls thanks to an on-disk cache. tmux polling every minute is basically free now. was ~700ms cold before. runs in ~0.7s cold thanks to a parallel API fetch. was ~1.7s before. shows a smooth truecolor gradient on any modern terminal. auto-detects $COLORTERM. falls back to 256-color on older ones. -doctor walks a colored checklist of your setup and tells you exactly what’s broken. green if fine, orange if not, non-zero exit if you wanna script it. new pizza logo because hack club runs on pizza. seven logos total. streak is finally correct after silently saying “1 day” for a month. /summaries is gone from hackatime so hackfetch now reconstructs streak from every coding session in your history via /heartbeats/spans. real streak: 9 days for me right now. 7-day sparkline baked into the fetch (with -v) and available as -status –sparkline for the tmux bar. default fetch got leaner. slack handle, machines count, and the sparkline moved behind -v so the normal fetch stays focused on hours + project + language. loading spinner on the api fetch so you know something is happening. and then the cache made it show up almost never. one install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Arch family: yay -S hackfetch-bin macOS / Linuxbrew: brew install xerneas3318/tap/hackfetch For more install methods check out the github page: https://github.com/xerneas3318/hackfetch teasing the next big thing: hackfetch -leaderboard is coming next, using the public leaderboard endpoints i found in hackatime’s routes file. compete with friends on daily and weekly hours right from your terminal. private friend groups on a hackclub nest box after that. if you try it, thanks. send me some feedback...
|
1792878603.0227313
|
1793742603.0227313
|
|
16968
|
My very own WebOS by @Sair | Stardance
|
Sair
|
2
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T11:30:11Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own WebOS named SairOS. Functions that were for WebOS 1 mission: Live clock Notes app Calculator My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Functions for the WebOS 2 mission: Settings(where you can change the wallpaper) Calculator Boot animation with sound effect I recommend pressing ctrl+shift+R in github page if something does not work. Also the green button is both maximise and minimise buttons.", "repo": "https://github.com/Sairsides/SairOS", "demo": "https://sairsides.github.io/SairOS/"}, {"ship_num": 2, "ts": "2026-06-15T18:02:30Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own WebOS named SairOS. Functions: Live clock Notes app Calculator Settings(where you can change the wallpaper) My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Most challenging part was making my first own Welcome window, after I finished it and understood how everything works, I did not have problem making more windows. I really had fun making a this protect!", "repo": "https://github.com/Sairsides/SairOS", "demo": "https://sairsides.github.io/SairOS/"}]...
|
[{"post_id": 15602, "ts": "202 [{"post_id": 15602, "ts": "2026-06-25T11:22:34Z", "hours": 0.7783, "text": "Added boot animation with sound. Fixed maximise and minimise bug with window(btw green button is both maximise and minimise button)"}, {"post_id": 9376, "ts": "2026-06-15T18:29:55Z", "hours": 0.2731, "text": "Fixed buttons, now there are 2 working buttons, close and maximize buttons"}, {"post_id": 9338, "ts": "2026-06-15T17:46:47Z", "hours": 1.3722, "text": "Added calculator, Settings, and connection to https://sairsides.github.io/"}, {"post_id": 9188, "ts": "2026-06-15T12:49:35Z", "hours": 1.0311, "text": "Made hover animation. An app(note app). To open it you need to double click like in a real OS. Added also little details like, that the window and go under or over the top bar. If for example the Welcome Window is blocking the Notes app, just click the Notes app to bring it back to the front. Did not make the other buttons work yet."}, {"post_id": 8717, "ts": "2026-06-14T14:12:33Z", "hours": 1.2919, "text": "Fixed a bug with the background. Welcome window is now draggable, closable and openable. You can open the Welcome Window by pressing the SairOS on the top bar. Next I suppose I will make the other buttons work also."}, {"post_id": 8406, "ts": "2026-06-13T23:38:10Z", "hours": 1.97, "text": "Today I added a window, wallpaper, top bar with an OS name and a live ticking clock with JS. Next time I will make windows closable, openable and draggable."}, {"post_id": 7498, "ts": "2026-06-12T14:38:08Z", "hours": 1.1861, "text": "Progress so far, added SairOS logo and basic Welcome Screen. Next i will add Wallpaper, Window, Top bar, Tracking time with JS. You can also check out the the OS here: https://sairsides.github.io/SairOS/"}]...
|
Title: My very own WebOS by @Sair | Stardance
Dev Title: My very own WebOS by @Sair | Stardance
Devlogs:
Progress so far, added SairOS logo and basic Welcome Screen. Next i will add Wallpaper, Window, Top bar, Tracking time with JS. You can also check out the the OS here: https://sairsides.github.io/SairOS/
Today I added a window, wallpaper, top bar with an OS name and a live ticking clock with JS. Next time I will make windows closable, openable and draggable.
Fixed a bug with the background. Welcome window is now draggable, closable and openable. You can open the Welcome Window by pressing the SairOS on the top bar. Next I suppose I will make the other buttons work also.
Made hover animation. An app(note app). To open it you need to double click like in a real OS. Added also little details like, that the window and go under or over the top bar. If for example the Welcome Window is blocking the Notes app, just click the Notes app to bring it back to the front. Did not make the other buttons work yet.
Added calculator, Settings, and connection to https://sairsides.github.io/
Fixed buttons, now there are 2 working buttons, close and maximize buttons
Added boot animation with sound. Fixed maximise and minimise bug with window(btw green button is both maximise and minimise button)
Ships:
I made my own WebOS named SairOS. Functions: Live clock Notes app Calculator Settings(where you can change the wallpaper) My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Most challenging part was making my first own Welcome window, after I finished it and understood how everything works, I did not have problem making more windows. I really had fun making a this protect!
I made my own WebOS named SairOS. Functions that were for WebOS 1 mission: Live clock Notes app Calculator My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Functions for the WebOS 2 mission: Settings(where you can change the wallpaper) Calculator Boot animation with sound effect I recommend pressing ctrl+shift+R in github page if something does not work. Also the green button is both maximise and minimise buttons....
|
1792835587.4127922
|
1792921987.4127922
|
|
17012
|
Health decoder by @vatsamalakar | Stardance
|
vatsamalakar
|
2
|
2.0
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T19:50:21Z", "hours": 1.0, "multiplier": 2.11, "payout": 3, "blessing": "neutral", "text": "Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.", "repo": "https://github.com/vatsamalakar/HealthDecoder", "demo": "https://health-decoder-kappa.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-13T20:05:23Z", "hours": 1.0, "multiplier": 1.39, "payout": 1, "blessing": "neutral", "text": "Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.", "repo": "https://github.com/vatsamalakar/HealthDecoder", "demo": "https://health-decoder-kappa.vercel.app/"}]...
|
[{"post_id": 23534, "ts": "202 [{"post_id": 23534, "ts": "2026-07-06T15:43:31Z", "hours": 1.3706, "text": "I worked on deploying Health Decoder to Vercel, making it accessible online so users can upload and decode their health insurance plans without needing to install or run the project themselves!"}, {"post_id": 8267, "ts": "2026-06-13T19:12:49Z", "hours": 0.9917, "text": "I have been working on Health Decoder which lets you add your health insurance and then you recieve a broken down response that outlines the copay, premium, coverage, and more in terms that are easier to understand. I also added an AI chatbot so that users can ask questions about their insurance plan and receive grounded answers, as the chatbot will only refer to their insurance plan when answering."}]...
|
Title: Health decoder by @vatsamalakar | Stardance Title: Health decoder by @vatsamalakar | Stardance
Devlogs:
I have been working on Health Decoder which lets you add your health insurance and then you recieve a broken down response that outlines the copay, premium, coverage, and more in terms that are easier to understand. I also added an AI chatbot so that users can ask questions about their insurance plan and receive grounded answers, as the chatbot will only refer to their insurance plan when answering.
I worked on deploying Health Decoder to Vercel, making it accessible online so users can upload and decode their health insurance plans without needing to install or run the project themselves!
Ships:
Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.
Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq....
|
1792882097.4261076
|
1793746097.4261076
|
|
17103
|
NebulaOS by @azure | Stardance
|
azure
|
2
|
18.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T04:12:01Z", "hours": 1.0, "multiplier": 5.63, "payout": 5, "blessing": "neutral", "text": "I Created a web os space themed with 5 apps and 3 backgrounds with an app bar, drop downs, and music player with tileable windows and adjustable sizes", "repo": "https://github.com/BraedynL0530/web-os", "demo": "https://web-os-hh4f.vercel.app/boot"}, {"ship_num": 2, "ts": "2026-06-21T07:22:03Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a web OS, it has an app launcher, basic window management such as dragging, resizing, closing, maximizing and ok snapping, music player with YouTube links, various apps, changeable backgrounds, an app launcher at bottom, meant to look like riced linux but im not the best at frontend. its spaced themed, some of the apis aren’t consistent like weather rate limits and privacy may mess it up, currently media server so music player isn’t working, debugging that now. when it does work it’ll be instant as backed is separate.", "repo": "https://github.com/BraedynL0530/web-os", "demo": "https://web-os-hh4f.vercel.app/boot"}]...
|
[{"post_id": 23926, "ts": "202 [{"post_id": 23926, "ts": "2026-07-07T04:11:07Z", "hours": 0.375, "text": "Final finished the playlist issue now it should run fine, music works, slight ui changes nothing too noticeable."}, {"post_id": 22611, "ts": "2026-07-05T05:07:25Z", "hours": 0.5686, "text": "removed refrences to backend opting for invisible i frame as i couldnt figure it out, it now has quing and autoplay/loops videos now. working on cleaning up ui, and ill try to get titles of music."}, {"post_id": 12971, "ts": "2026-06-21T07:05:12Z", "hours": 0.4353, "text": "Polishing for deployment."}, {"post_id": 12944, "ts": "2026-06-21T05:43:49Z", "hours": 0.8317, "text": "final devlog, i added window management, ship ill add the jpgs for backgrounds in, i tried to fit all the apps in menu in here but gave up so it looks like this, had a minor hitch topbar was hiding controls so i had to add more offset for that. final-ish desktop environment look"}, {"post_id": 12913, "ts": "2026-06-21T04:32:34Z", "hours": 4.0825, "text": "GIANT dev log heres what i added: fixed media handling, now it displays song title, saves, and more, made windows fit no matter if they are maximized or not. added calculator, notes, terminal, and snake(the game) apps. added a few gifs, fixed weather api. Added background handling into settings menu despite no images a bunch of styling, but mainly debugging the window issue which was stupid simple fix i didn’t see but that took forever, and media server being inconstant, one issue was that local storage wouldn’t save as an array causing the frontend to crash and just dispaly black, more with snake logic and matching it to screen. and a few minor issues like weather api not working rate limits, and more. everything is functional as of now, next ill add background images then tiling/window management because its pretty cluttered right now. but this feels like it took less time than it says, mainly debugging, styling, and a few new apps."}, {"post_id": 12350, "ts": "2026-06-20T04:39:19Z", "hours": 4.1592, "text": "Test devlog, wakatime has been glitched at 2:51/ 59minutes in my ide seeing if this fixes it"}, {"post_id": 11083, "ts": "2026-06-18T03:50:36Z", "hours": 1.2617, "text": "i fixed the dragging issues, windows now work fully and fixed the background issue on whiteboard, all controls work as well, added a dropdown(css and functionality isn’t fully finished) and re aligned some things in top bar. no real issues on this one other than i cant draw with an mouse, i wanna make music work next and app searching would be nice, ill try to finish all of this by today or tomorrow"}, {"post_id": 10909, "ts": "2026-06-17T21:41:36Z", "hours": 1.1758, "text": "WIP: desktop environment, Filler is for icons, forgot about drop-down and i think i wanna add a background to time and move it to the right, works well. i had trouble with using components functions from desktop because i didn’t realize React doesn’t work like python with component.method() so i had to refactor a small chunk of code but now that works, another issue i haven’t fixed yet is: weather isn’t displaying, and currently react-dragable doesn’t work with Vite so i need to re configure or make my own. its coming out pretty good though. ill fix CSS then dragable, and add more apps, Hopefully a background too and test out music."}, {"post_id": 8453, "ts": "2026-06-14T01:47:08Z", "hours": 1.6211, "text": "Created app launcher, made windows draggable, added routing so i can test tho blank screens as half finished, fixed music API and made backend for it using an old project and decided to stream instead of downloading in backed and keeping it in local storage(not yet but it will) so that everyone doesn’t have to share the same music and i don’t need to host all the mp3s. also added an whiteboard app and placeholders for others. one struggle is tiling not sure how ill do that just yet, and another was deciding how i would get music since HTML is limited to browser i cant just sync browser visuals to music or control it i need to stream the music. also spelling was an issue for a bit and i still cant see my desktop due to references to stuff that’s incomplete and no CSS. good work so far though, i plan to polish add more apps and try to get a simple tiling system along with just floating windows next. and having desktop visible. same SS for now, promise next one will have a visual update (;ŏ﹏ŏ;)"}, {"post_id": 7872, "ts": "2026-06-13T04:11:13Z", "hours": 0.6658, "text": "created window manager now i can close, min/max windows, and display apps in theory no data or CSS to back it up. top-bar has features basically done i do need to finish and get assets for the drop down in it so placeholders for now. one issue ive been having is that react is very annoying and a lot of moving parts to set up stuff im more used to python. going to develop some apps and backend, set up nav, fix dragging because i didnt add that ablity yet, and create launcher and bg next. img is still boot screen i think i should add stars in background as well."}, {"post_id": 7779, "ts": "2026-06-13T00:07:28Z", "hours": 1.3011, "text": "Improved boot menu, i added ASCII Saturn to right of terminal and made loading bar inside terminal window. started work on window manager, placeholder for api.js, added clock in top-bar placeholder for more features, and begin work for windows.jsx. i realized react doesn’t work like python so i cant dynamically render apps like i wanted to in windows so ill have to have to change how apps will be rendered. no CSS for top bar yet. i plan to complete top-bar features next update and have working windows/app launching."}, {"post_id": 7309, "ts": "2026-06-12T05:37:36Z", "hours": 1.2728, "text": "Creating the welcome/bootscreen rough draft complete., made desktop and project skeleton with dynamic apps/launching for future starting topbar. react is hard and i need to sync animations better as well as continue work on more features. ill complete topbar and windows next."}]...
|
Title: NebulaOS by @azure | Stardance
Devlogs:
Cr Title: NebulaOS by @azure | Stardance
Devlogs:
Creating the welcome/bootscreen rough draft complete., made desktop and project skeleton with dynamic apps/launching for future starting topbar. react is hard and i need to sync animations better as well as continue work on more features. ill complete topbar and windows next.
Improved boot menu, i added ASCII Saturn to right of terminal and made loading bar inside terminal window. started work on window manager, placeholder for api.js, added clock in top-bar placeholder for more features, and begin work for windows.jsx. i realized react doesn’t work like python so i cant dynamically render apps like i wanted to in windows so ill have to have to change how apps will be rendered. no CSS for top bar yet. i plan to complete top-bar features next update and have working windows/app launching.
created window manager now i can close, min/max windows, and display apps in theory no data or CSS to back it up. top-bar has features basically done i do need to finish and get assets for the drop down in it so placeholders for now. one issue ive been having is that react is very annoying and a lot of moving parts to set up stuff im more used to python. going to develop some apps and backend, set up nav, fix dragging because i didnt add that ablity yet, and create launcher and bg next. img is still boot screen i think i should add stars in background as well.
Created app launcher, made windows draggable, added routing so i can test tho blank screens as half finished, fixed music API and made backend for it using an old project and decided to stream instead of downloading in backed and keeping it in local storage(not yet but it will) so that everyone doesn’t have to share the same music and i don’t need to host all the mp3s. also added an whiteboard app and placeholders for others. one struggle is tiling not sure how ill do that just yet, and another was deciding how i would get music since HTML is limited to browser i cant just sync browser visuals to music or control it i need to stream the music. also spelling was an issue for a bit and i still cant see my desktop due to references to stuff that’s incomplete and no CSS. good work so far though, i plan to polish add more apps and try to get a simple tiling system along with just floating windows next. and having desktop visible. same SS for now, promise next one will have a visual update (;ŏ﹏ŏ;)
WIP: desktop environment, Filler is for icons, forgot about drop-down and i think i wanna add a background to time and move it to the right, works well. i had trouble with using components functions from desktop because i didn’t realize React doesn’t work like python with component.method() so i had to refactor a small chunk of code but now that works, another issue i haven’t fixed yet is: weather isn’t displaying, and currently react-dragable doesn’t work with Vite so i need to re configure or make my own. its coming out pretty good though. ill fix CSS then dragable, and add more apps, Hopefully a background too and test out music.
i fixed the dragging issues, windows now work fully and fixed the background issue on whiteboard, all controls work as well, added a dropdown(css and functionality isn’t fully finished) and re aligned some things in top bar. no real issues on this one other than i cant draw with an mouse, i wanna make music work next and app searching would be nice, ill try to finish all of this by today or tomorrow
Test devlog, wakatime has been glitched at 2:51/ 59minutes in my ide seeing if this fixes it
GIANT dev log heres what i added: fixed media handling, now it displays song title, saves, and more, made windows fit no matter if they are maximized or not. added calculator, notes, terminal, and snake(the game) apps. added a few gifs, fixed weather api. Added background handling into settings menu despite no images a bunch of styling, but mainly debugging the window issue which was stupid simple fix i didn’t see but that took forever, and media server being inconstant, one issue was that local storage wouldn’t save as an array causing the frontend to crash and just dispaly black, more with snake logic and matching it to screen. and a few minor issues like weather api not working rate limits, and more. everything is functional as of now, next ill add background images then tiling/window management because its pretty cluttered right now. but this feels like it took less time than it says, mainly debugging, styling, and a few new apps.
final devlog, i added window management, ship ill add the jpgs for backgrounds in, i tried to fit all the apps in menu in here but gave up so it looks like this, had a minor hitch topbar was hiding controls so i had to add more offset for that. final-ish desktop environment look
Polishing for deployment.
removed refrences to backend opting for invisible i frame as i couldnt figure it out, it now has quing and autoplay/loops videos now. working on cleaning up ui, and ill try to get titles of music.
Final finished the playlist issue now it should run fine, music works, slight ui changes nothing too noticeable.
Ships:
I made a web OS, it has an app launcher, basic window management such as dragging, resizing, closing, maximizing and ok snapping, music player with YouTube links, various apps, changeable backgrounds, an app launcher at bottom, meant to look like riced linux but im not the best at frontend. its spaced themed, some of the apis aren’t consistent like weather rate limits and privacy may mess it up, currently media server so music player isn’t working, debugging that now. when it does work it’ll be instant as backed is separate.
I Created a web os space themed with 5 apps and 3 backgrounds with an app bar, drop downs, and music player with tileable windows and adjustable sizes...
|
1792878561.4045687
|
1793742561.4045687
|