|
46961
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793947986.219686
|
1794811986.219686
|
|
46962
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793947987.107166
|
1794811987.107166
|
|
46963
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793947987.9919739
|
1794811987.9919739
|
|
13054
|
My awesome macropad! by @shz | Stardance
|
shz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @shz | Stardance
|
1793947988.8525112
|
1794552788.8525112
|
|
33722
|
Frictionless by @JPR | Stardance
|
JPR
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @JPR | Stardance
|
1793947989.7749732
|
1794811989.7749732
|
|
20705
|
Untitled by @ayaansid27 | Stardance
|
ayaansid27
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @ayaansid27 | Stardance
|
1793947992.5141401
|
1794552792.5141401
|
|
46987
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793947993.4064314
|
1794811993.4064314
|
|
30194
|
my APOD site by @blackbird | Stardance
|
|
2
|
9.31
|
33
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T15:57:56Z", "hours": 6.0, "multiplier": 5.59, "payout": 33, "blessing": "neutral", "text": "I added the final change of this site, which was the test clock that syncs to your device. This was a lot simpler than I thought due to already-existing clock features. One of the hardest parts was doing the planet, which I had to look up a tutorial for and took much longer than otherwise thought to center correctly. The memo feature at the bottom of the page took the longest to implement, but there were no large snags in the work, other than a quickly-figured-out issue where the page didn’t reload with the notes.", "repo": "https://github.com/flyingchickensaucer/NASA_Site", "demo": "https://flyingchickensaucer.github.io/NASA_Site/"}, {"ship_num": 2, "ts": "2026-07-04T04:54:25Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a NASA Astronomy Picture of the Day site built with Vite and vanilla JS. It pulls the day’s image or video, title, and explanation from NASA’s API, has a date picker to browse any past day, and a space theme with shooting stars. The toughest part was that the shooting stars had three separate bugs, each from a different layer: they flew backward, spawned offset from the cursor, and all burst at once after leaving the tab. I’m really proud of how I navigated fixing those issues.", "repo": "https://github.com/flyingchickensaucer/NASA_Site", "demo": "https://flyingchickensaucer.github.io/NASA_Site/"}]...
|
[{"post_id": 22473, "ts": "202 [{"post_id": 22473, "ts": "2026-07-04T23:05:14Z", "hours": 0.3131, "text": "There is a request to change my readme to the raw version before reshipping."}, {"post_id": 22199, "ts": "2026-07-04T15:36:13Z", "hours": 5.8992, "text": "I mostly made a few changes to personalize the site. A notes section was added to the bottom, as I enjoy being able to write memos for myself to keep. These notes will pop up on the same day the next year, and they are saved in a bubble at the bottom of the page which will open the page up to that day when clicked. I added a semi-transparent planet to the background to learn more about gradients, which took a massive amount of time, and a lot of trial and error for positioning the ring vs the main body. To Do: make a clock that can sync time from the device (planning on doing something similar for personal website so this will be good practice)"}, {"post_id": 21949, "ts": "2026-07-04T04:41:00Z", "hours": 1.6069, "text": "Made the page look a lot more space-y with a dark gradient theme and a starfield background. Allowed the user to switch the date to a previous one and the corresponding image of that day. Added shooting stars that streak by on their own and move from your cursor when you click the background. Bugs I fixed: Shooting stars flew backward (gradient was on the wrong end) Stars spawned offset from the cursor (was positioning by the corner) All shooting stars appeared at once after leaving the tab (paused the spawner with the Page Visibility API)"}, {"post_id": 21621, "ts": "2026-07-03T17:40:59Z", "hours": 0.9769, "text": "Wow, the picture actually shows!"}, {"post_id": 21566, "ts": "2026-07-03T16:19:53Z", "hours": 0.9031, "text": "Starting my NASA Astronomy Picture of the Day page. This is a small site that will pull NASA’s APOD API and show the day’s title, image or video, and explanation. For this session I decided to deploy-first and get a live (but nearly empty) page onto GitHub Pages before building any features. Set up: the Vite scaffold, a .gitignore keeping my .env safe, .env.example, vite.config.js so Pages serves assets from the right path (otherwise 404s), and a GitHub Actions workflow that builds and publishes to Pages. First deploy actually failed on the Pages step because Pages wasn’t enabled yet. I enabled it, re-ran, green check, live page confirmed. Next session: fetch and render the APOD data"}]...
|
Title: my APOD site by @blackbird | Stardance
Dev Title: my APOD site by @blackbird | Stardance
Devlogs:
Starting my NASA Astronomy Picture of the Day page. This is a small site that will pull NASA’s APOD API and show the day’s title, image or video, and explanation. For this session I decided to deploy-first and get a live (but nearly empty) page onto GitHub Pages before building any features. Set up: the Vite scaffold, a .gitignore keeping my .env safe, .env.example, vite.config.js so Pages serves assets from the right path (otherwise 404s), and a GitHub Actions workflow that builds and publishes to Pages. First deploy actually failed on the Pages step because Pages wasn’t enabled yet. I enabled it, re-ran, green check, live page confirmed. Next session: fetch and render the APOD data
Wow, the picture actually shows!
Made the page look a lot more space-y with a dark gradient theme and a starfield background. Allowed the user to switch the date to a previous one and the corresponding image of that day. Added shooting stars that streak by on their own and move from your cursor when you click the background. Bugs I fixed: Shooting stars flew backward (gradient was on the wrong end) Stars spawned offset from the cursor (was positioning by the corner) All shooting stars appeared at once after leaving the tab (paused the spawner with the Page Visibility API)
I mostly made a few changes to personalize the site. A notes section was added to the bottom, as I enjoy being able to write memos for myself to keep. These notes will pop up on the same day the next year, and they are saved in a bubble at the bottom of the page which will open the page up to that day when clicked. I added a semi-transparent planet to the background to learn more about gradients, which took a massive amount of time, and a lot of trial and error for positioning the ring vs the main body. To Do: make a clock that can sync time from the device (planning on doing something similar for personal website so this will be good practice)
There is a request to change my readme to the raw version before reshipping.
Ships:
I made a NASA Astronomy Picture of the Day site built with Vite and vanilla JS. It pulls the day’s image or video, title, and explanation from NASA’s API, has a date picker to browse any past day, and a space theme with shooting stars. The toughest part was that the shooting stars had three separate bugs, each from a different layer: they flew backward, spawned offset from the cursor, and all burst at once after leaving the tab. I’m really proud of how I navigated fixing those issues.
I added the final change of this site, which was the test clock that syncs to your device. This was a lot simpler than I thought due to already-existing clock features. One of the hardest parts was doing the planet, which I had to look up a tutorial for and took much longer than otherwise thought to center correctly. The memo feature at the bottom of the page took the longest to implement, but there were no large snags in the work, other than a quickly-figured-out issue where the page didn’t reload with the notes....
|
1793947994.260406
|
1794034394.260406
|
|
8624
|
My awesome macropad! by @Rajpoot | Stardance
|
Rajpoot
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Rajpoot | Stardanc Title: My awesome macropad! by @Rajpoot | Stardance...
|
1793947995.4960108
|
1794552795.4960108
|
|
46988
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793947996.4105523
|
1794811996.4105523
|
|
46990
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793947997.2690067
|
1794811997.2690067
|
|
39881
|
My very own WebOS by @Mohamed_Qupy | Stardance
|
Mohamed_Qupy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Mohamed_Qupy | Starda Title: My very own WebOS by @Mohamed_Qupy | Stardance...
|
1793947998.1300437
|
1794552798.1300437
|
|
57770
|
DinoBot 🦖🦖 by @folk0297 | Stardance
|
folk0297
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T08:17:25Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made DinoBot, it is a fun Slack bot that lets users discover dinosaur facts, get random dinosaurs, and compare different dinos using simple slash commands. it was quite a fun project and i would recommend this to make one time if you are a beginner. you can follow the guide it make things A LOT EASIER. The most challenging part was connecting the bot to Slack, handling commands correctly, and deploying it on Nest to keep it running. I’m most proud of turning a simple idea into a working 24/7 Slack bot that people can actually use and interact with.", "repo": "https://github.com/folks0297/dinoBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0C0ASD4QNP"}]...
|
[{"post_id": 62175, "ts": "202 [{"post_id": 62175, "ts": "2026-09-05T13:10:55Z", "hours": 1.5608, "text": "devlog #1 of my project no. 3. so in this project i have made my own slack bot called DinoBot .i have added some slash commands like : /dino-fact , as the name suggest it tells the facts of a specific dino which name you will type. /dino-random , it chooses the random dino from the data and tell facts about it /dino-compare , it will show the comparison between two dinos which name you are gonna type here. honestly,it was very fun project and i really enjoyed making it specially setting things up in terminal for the first time was pretty fun!! i hope you guys will try it too:)"}]...
|
Title: DinoBot 🦖🦖 by @folk0297 | Stardance
Devlog Title: DinoBot 🦖🦖 by @folk0297 | Stardance
Devlogs:
devlog #1 of my project no. 3. so in this project i have made my own slack bot called DinoBot .i have added some slash commands like : /dino-fact , as the name suggest it tells the facts of a specific dino which name you will type. /dino-random , it chooses the random dino from the data and tell facts about it /dino-compare , it will show the comparison between two dinos which name you are gonna type here. honestly,it was very fun project and i really enjoyed making it specially setting things up in terminal for the first time was pretty fun!! i hope you guys will try it too:)
Ships:
I made DinoBot, it is a fun Slack bot that lets users discover dinosaur facts, get random dinosaurs, and compare different dinos using simple slash commands. it was quite a fun project and i would recommend this to make one time if you are a beginner. you can follow the guide it make things A LOT EASIER. The most challenging part was connecting the bot to Slack, handling commands correctly, and deploying it on Nest to keep it running. I’m most proud of turning a simple idea into a working 24/7 Slack bot that people can actually use and interact with....
|
1793947999.025751
|
1794034399.025751
|
|
46991
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948000.1818464
|
1794812000.1818464
|
|
22297
|
My first slack bot! by @kashmala | Stardance
|
kashmala
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @kashmala | Stardanc Title: My first slack bot! by @kashmala | Stardance...
|
1793948001.0366077
|
1794552801.0366077
|
|
42125
|
Soop WebOS by @sooperss | Stardance
|
sooperss
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Soop WebOS by @sooperss | Stardance
|
1793948001.9341505
|
1794812001.9341505
|
|
6950
|
Pulse by @ishaangulati | Stardance
|
ishaangulati
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T18:16:15Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Pulse is a social paper trading app built specifically for teens. The problem is simple: most people under 18 legally can’t open a brokerage account, and even for those who can, throwing real money at stocks before you understand what you’re doing is a terrible idea. But the existing alternatives, paper trading apps and stock simulators, are all built for adults and feel like spreadsheets. There’s no social element, no reason to come back, no one to compete with. Pulse fixes that by combining real-time paper trading with a social layer designed around how teens actually use apps. You get a virtual portfolio seeded with fake money and you trade real stocks at live market prices. Every buy, every sell, every position is tracked exactly like it would be in a real brokerage. You build intuition for how markets move, what volatility actually feels like, and how hard it is to time an exit, without ever risking a dollar. This update shipped the social infrastructure that makes all of that actually fun. You can follow other traders and watch their moves appear in your feed in real time. You can create a group with your friends, see eachother on a shared leaderboard, and compete on portfolio returns over time. You can put a face to your handle with a profile picture. And the whole UI got rebuilt from the ground up to feel faster and cleaner. The most challenging part was the social feed. The naive approach of re-fetching on every action felt laggy and broke the illusion that anything was live. So the feed runs on Firestore real-time listeners, meaning updates push to every client the moment they’re written. That introduced a new problem: follow and unfollow actions felt slow because they waited on the server before updating the UI. I switched to optimistic updates, where the UI changes immediately and then syncs in the background, with rollback logic if the write fails. Getting that rollback to behave correctly in edge cases, like a user rapidly tapping follow/unfollow, took way more debugging than I expected. The leaderboard had its own set of problems. Calculating portfolio returns client-side worked fine with two or three users in a group but got noticeably slow as groups got bigger. I moved the PnL calculation server-side and trigger a recalculation on every trade write instead. The client just reads the result. Much faster and the rankings update in real time without anyone doing math on their phone. Profile pictures had a sneaky issue too: users were uploading full-resolution photos straight from their camera roll and Firebase Storage costs scale with bytes stored and transferred. I added client-side image compression before the upload and hard cap everything at 200 KB. The quality is still totally fine and the cost difference is significant. What I’m most proud of is that this is a real shipped iOS app on the App Store with over 100 users that actual teenagers are using to learn investing. It’s not a demo, it’s not a prototype running on localhost. The live market data is real, the social features work, and the leaderboard updates when your friend makes a trade from across the country. Building something that functions at that level while also being genuinely fun to use is what I set out to do. To test it, download Pulse from the App Store on an iPhone, create an account, and you’ll start with a virtual portfolio. Place a few trades on any stock you recognize, then find another user to follow and watch their activity show up in your feed. If you want to test the group leaderboard, create a group and share the code. Check it out at tinyurl.com/pulseofficial", "repo": "https://github.com/ishaan-gulati/pulse_official", "demo": "https://apps.apple.com/us/app/pulse-social-paper-trading/id6760734269"}]...
|
[{"post_id": 11407, "ts": "202 [{"post_id": 11407, "ts": "2026-06-18T17:52:13Z", "hours": 6.8383, "text": "Pulse devlog, v1.1. Pulse just got a social layer. The big focus this update was making the app actually feel alive. Paper trading in isolation is fine for learning, but competing and building with friends is what makes it stick, so I spent this session wiring up the core social infrastructure. Friends & Following lets you find and follow other traders and see their activity in your feed in real time. Follow relationships are stored in Firestore with live listeners so updates come through instantly without polling. Groups lets you create a crew and compete on portfolio returns. Leaderboard rankings are calculated server-side on write so the client never has to do heavy math. Profile Pictures mean you can finally put a face to the handle. Images get compressed under 200 KB on the client before uploading to keep storage costs reasonable. UI Improvements include a full app redesign, a contrast pass across every screen, and a spacing system refactor that brought load time down around 18%. Up next: DMs, trade reactions, push notifications for follower activity, and a proper onboarding flow for new users. Check it out at tinyurl.com/pulseofficial"}]...
|
Title: Pulse by @ishaangulati | Stardance
Devlogs Title: Pulse by @ishaangulati | Stardance
Devlogs:
Pulse devlog, v1.1. Pulse just got a social layer. The big focus this update was making the app actually feel alive. Paper trading in isolation is fine for learning, but competing and building with friends is what makes it stick, so I spent this session wiring up the core social infrastructure. Friends & Following lets you find and follow other traders and see their activity in your feed in real time. Follow relationships are stored in Firestore with live listeners so updates come through instantly without polling. Groups lets you create a crew and compete on portfolio returns. Leaderboard rankings are calculated server-side on write so the client never has to do heavy math. Profile Pictures mean you can finally put a face to the handle. Images get compressed under 200 KB on the client before uploading to keep storage costs reasonable. UI Improvements include a full app redesign, a contrast pass across every screen, and a spacing system refactor that brought load time down around 18%. Up next: DMs, trade reactions, push notifications for follower activity, and a proper onboarding flow for new users. Check it out at tinyurl.com/pulseofficial
Ships:
Pulse is a social paper trading app built specifically for teens. The problem is simple: most people under 18 legally can’t open a brokerage account, and even for those who can, throwing real money at stocks before you understand what you’re doing is a terrible idea. But the existing alternatives, paper trading apps and stock simulators, are all built for adults and feel like spreadsheets. There’s no social element, no reason to come back, no one to compete with. Pulse fixes that by combining real-time paper trading with a social layer designed around how teens actually use apps. You get a virtual portfolio seeded with fake money and you trade real stocks at live market prices. Every buy, every sell, every position is tracked exactly like it would be in a real brokerage. You build intuition for how markets move, what volatility actually feels like, and how hard it is to time an exit, without ever risking a dollar. This update shipped the social infrastructure that makes all of that actually fun. You can follow other traders and watch their moves appear in your feed in real time. You can create a group with your friends, see eachother on a shared leaderboard, and compete on portfolio returns over time. You can put a face to your handle with a profile picture. And the whole UI got rebuilt from the ground up to feel faster and cleaner. The most challenging part was the social feed. The naive approach of re-fetching on every action felt laggy and broke the illusion that anything was live. So the feed runs on Firestore real-time listeners, meaning updates push to every client the moment they’re written. That introduced a new problem: follow and unfollow actions felt slow because they waited on the server before updating the UI. I switched to optimistic updates, where the UI changes immediately and then syncs in the background, with rollback logic if the write fails. Getting that rollback to behave correctly in edge cases, like a user rapidly tapping follow/unfollow, took way more debugging than I expected. The leaderboard had its own set of problems. Calculating portfolio returns client-side worked fine with two or three users in a group but got noticeably slow as groups got bigger. I moved the PnL calculation server-side and trigger a recalculation on every trade write instead. The client just reads the result. Much faster and the rankings update in real time without anyone doing math on their phone. Profile pictures had a sneaky issue too: users were uploading full-resolution photos straight from their camera roll and Firebase Storage costs scale with bytes stored and transferred. I added client-side image compression before the upload and hard cap everything at 200 KB. The quality is still totally fine and the cost difference is significant. What I’m most proud of is that this is a real shipped iOS app on the App Store with over 100 users that actual teenagers are using to learn investing. It’s not a demo, it’s not a prototype running on localhost. The live market data is real, the social features work, and the leaderboard updates when your friend makes a trade from across the country. Building something that functions at that level while also being genuinely fun to use is what I set out to do. To test it, download Pulse from the App Store on an iPhone, create an account, and you’ll start with a virtual portfolio. Place a few trades on any stock you recognize, then find another user to follow and watch their activity show up in your feed. If you want to test the group leaderboard, create a group and share the code. Check it out at tinyurl.com/pulseofficial...
|
1793948002.7953012
|
1794034402.7953012
|
|
39307
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948003.9309566
|
1794812003.9309566
|
|
9262
|
Interactive Desmos Art by @sirha | Stardance
|
sirha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Interactive Desmos Art by @sirha | Stardanc Title: Interactive Desmos Art by @sirha | Stardance...
|
1793948004.7997262
|
1794552804.7997262
|
|
4510
|
My awesome macropad! by @Arifd | Stardance
|
Arifd
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Arifd | Stardance
|
1793948005.6860023
|
1794812005.6860023
|
|
7297
|
fpv drone by @Thronyone | Stardance
|
Thronyone
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: fpv drone by @Thronyone | Stardance
|
1793948006.55185
|
1794552806.55185
|
|
596
|
ai without ai by @lazerkat | Stardance
|
lazerkat
|
1
|
6.73
|
93
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-02T23:05:02Z", "hours": 6.0, "multiplier": 15.16, "payout": 93, "blessing": "neutral", "text": "I made an “ai” which can respond to simple questions using pre-written answers. I am proud of the time I spent writing it. I might update it more.", "repo": "https://github.com/betelguesestudios/coolrepoforstardance", "demo": "https://betelguesestudios.github.io/coolrepoforstardance/"}]...
|
[{"post_id": 1910, "ts": "2026 [{"post_id": 1910, "ts": "2026-06-04T04:12:43Z", "hours": 0.4253, "text": "268 q&a’s… people have asked it some… interesting things…"}, {"post_id": 1860, "ts": "2026-06-04T02:13:21Z", "hours": 0.3033, "text": "adding someone’s inputs :)"}, {"post_id": 1085, "ts": "2026-06-02T22:01:25Z", "hours": 0.4047, "text": "207 q&a’s….. very cool"}, {"post_id": 497, "ts": "2026-06-01T23:39:41Z", "hours": 0.3811, "text": "there are now 196 answers and questions. also miracle musical reference"}, {"post_id": 486, "ts": "2026-06-01T23:08:56Z", "hours": 0.4564, "text": "server has been set up for messages i haven’t made responses for"}, {"post_id": 466, "ts": "2026-06-01T22:29:37Z", "hours": 0.6047, "text": "more (many more) inputs :)"}, {"post_id": 167, "ts": "2026-06-01T02:26:13Z", "hours": 0.3389, "text": "added bro variants"}, {"post_id": 164, "ts": "2026-06-01T01:54:33Z", "hours": 1.0786, "text": "jumpscare part :3"}, {"post_id": 160, "ts": "2026-06-01T00:43:51Z", "hours": 0.3953, "text": "august 12 2036 the heat death of the universe (added lore)"}, {"post_id": 156, "ts": "2026-06-01T00:14:26Z", "hours": 0.5928, "text": "secret things you can say to it"}, {"post_id": 147, "ts": "2026-05-31T23:10:02Z", "hours": 0.3008, "text": "styling the page ( https://betelguesestudios.github.io/coolrepoforstardance/ )"}, {"post_id": 142, "ts": "2026-05-31T22:47:09Z", "hours": 0.5422, "text": "more answers to questions! there are now 67 answers :)"}, {"post_id": 133, "ts": "2026-05-31T22:02:33Z", "hours": 1.0258, "text": "adding tons of responses :)"}]...
|
Title: ai without ai by @lazerkat | Stardance
Dev Title: ai without ai by @lazerkat | Stardance
Devlogs:
adding tons of responses :)
more answers to questions! there are now 67 answers :)
styling the page ( https://betelguesestudios.github.io/coolrepoforstardance/ )
secret things you can say to it
august 12 2036 the heat death of the universe (added lore)
jumpscare part :3
added bro variants
more (many more) inputs :)
server has been set up for messages i haven’t made responses for
there are now 196 answers and questions. also miracle musical reference
207 q&a’s….. very cool
adding someone’s inputs :)
268 q&a’s… people have asked it some… interesting things…
Ships:
I made an “ai” which can respond to simple questions using pre-written answers. I am proud of the time I spent writing it. I might update it more....
|
1793948007.4481912
|
1794034407.4481912
|
|
8157
|
Untitled by @aadipthapaliya | Stardance
|
aadipthapaliya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @aadipthapaliya | Stardance
|
1793948008.6511092
|
1794552808.6511092
|
|
50585
|
Capital Chaos Website by @sol4r_on_hackclub | Star Capital Chaos Website by @sol4r_on_hackclub | Stardance...
|
sol4r_on_hackclub
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Capital Chaos Website by @sol4r_on_hackclub Title: Capital Chaos Website by @sol4r_on_hackclub | Stardance...
|
1793948009.524927
|
1794812009.524927
|
|
26329
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948010.384871
|
1794812010.384871
|
|
31398
|
Doors MC by @Kubik | Stardance
|
Kubik
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Doors MC by @Kubik | Stardance
|
1793948011.2404048
|
1794812011.2404048
|
|
759
|
Melanotaenia 4.0 by @abigail_L | Stardance
|
abigail_L
|
1
|
8.0
|
26
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T02:58:49Z", "hours": 8.0, "multiplier": 3.46, "payout": 26, "blessing": "neutral", "text": "Hello I have made a doodle jump parody with a twist called “Melanotaenia 4.0”. The twist for the game is that the player can change into four colors and can only touch a platform if they themself is the same color as the platform. The idea of this game was first made for the Hack Club juice Jam March 2025, but I gave up on the project. To me this is an incredible milestone because I started over with only the idea and actually completed it. How to Play: Goal is to go as high as possible to get the highest score Controls: Left arrow ( < ) = Move Left Right arrow (>) = Move Right Up arrow (^) = Jump Q = Orange E = Green R = Purple W = Yellow Sidenote: There is also a demo video at the bottom of my readme on github.", "repo": "https://github.com/Abbby1007/Melanotaenia-4.0", "demo": "https://abbby1007.itch.io/melanotaenia-40"}]...
|
[{"post_id": 12040, "ts": "202 [{"post_id": 12040, "ts": "2026-06-19T17:14:26Z", "hours": 0.6139, "text": "I have finished the Game. From the last devlog I added a background and created a stylized game title. I also finalized the itch.io Page and the Github Read me Also Excuse my previous screen recordings for the previous devlogs. The screenshot format changed so now the vidoes are zoomed in."}, {"post_id": 2193, "ts": "2026-06-04T15:38:14Z", "hours": 0.3764, "text": "Was busy today so not that much progress was made. Today I decided to add purple and yellow, while also making a parallax scrolling background. I am gonna take a short break on this game, so I can look at it with fresh eyes when I return. My goal when I return is to work on the title screen (title, buttons) and making the game look nicer. I might also work on sound design With the break from this game I am gonna try to enter my first game Jam."}, {"post_id": 1347, "ts": "2026-06-03T09:23:18Z", "hours": 0.9219, "text": "I added my own custom sprite for the player and platform (excuse the art I am not a great artist). I have decided to make my theme related to space. So the player will be a star that changes color. I still need to fix the look a lot, but I wanted to get it into demo version. I will be sharing this with friends and have them test it out on itch.io."}, {"post_id": 1243, "ts": "2026-06-03T03:03:19Z", "hours": 1.2667, "text": "So far for the game I have added a title screen (start and quit) and high score system. I believe I am done for now with all of the basic mechanics. My goal now is to work on the look of the game (Character, platforms, title screen, etc)"}, {"post_id": 538, "ts": "2026-06-02T00:35:07Z", "hours": 1.1203, "text": "I was switching between making this game a platformer or a doodle jump clone. I have decided to do a doodle Jump clone. Here I have an infinite loop for the platform generation."}, {"post_id": 219, "ts": "2026-06-01T09:59:07Z", "hours": 1.5039, "text": "I have made it to where the player bounces on a platform when in contact. Also if the player is not the correct color the scene/level resets"}, {"post_id": 185, "ts": "2026-06-01T06:33:44Z", "hours": 1.7511, "text": "I have completed the player’s ability to change color, based on key input"}]...
|
Title: Melanotaenia 4.0 by @abigail_L | Stardance
Title: Melanotaenia 4.0 by @abigail_L | Stardance
Devlogs:
I have completed the player’s ability to change color, based on key input
I have made it to where the player bounces on a platform when in contact. Also if the player is not the correct color the scene/level resets
I was switching between making this game a platformer or a doodle jump clone. I have decided to do a doodle Jump clone. Here I have an infinite loop for the platform generation.
So far for the game I have added a title screen (start and quit) and high score system. I believe I am done for now with all of the basic mechanics. My goal now is to work on the look of the game (Character, platforms, title screen, etc)
I added my own custom sprite for the player and platform (excuse the art I am not a great artist). I have decided to make my theme related to space. So the player will be a star that changes color. I still need to fix the look a lot, but I wanted to get it into demo version. I will be sharing this with friends and have them test it out on itch.io.
Was busy today so not that much progress was made. Today I decided to add purple and yellow, while also making a parallax scrolling background. I am gonna take a short break on this game, so I can look at it with fresh eyes when I return. My goal when I return is to work on the title screen (title, buttons) and making the game look nicer. I might also work on sound design With the break from this game I am gonna try to enter my first game Jam.
I have finished the Game. From the last devlog I added a background and created a stylized game title. I also finalized the itch.io Page and the Github Read me Also Excuse my previous screen recordings for the previous devlogs. The screenshot format changed so now the vidoes are zoomed in.
Ships:
Hello I have made a doodle jump parody with a twist called “Melanotaenia 4.0”. The twist for the game is that the player can change into four colors and can only touch a platform if they themself is the same color as the platform. The idea of this game was first made for the Hack Club juice Jam March 2025, but I gave up on the project. To me this is an incredible milestone because I started over with only the idea and actually completed it. How to Play: Goal is to go as high as possible to get the highest score Controls: Left arrow ( < ) = Move Left Right arrow (>) = Move Right Up arrow (^) = Jump Q = Orange E = Green R = Purple W = Yellow Sidenote: There is also a demo video at the bottom of my readme on github....
|
1793948012.1253297
|
1794034412.1253297
|
|
29929
|
Half Gamer by @Vishy | Stardance
|
Vishy
|
0
|
1.0
|
0
|
[]
|
[{"post_id": 21031, "ts": "202 [{"post_id": 21031, "ts": "2026-07-02T20:05:14Z", "hours": 1.0, "text": "Routing PCB Hello everyone, it may look like I spent no time, but none of the time lapses I recorded want to attach (I cant attach them) but I have spent so long learning how to do this, and I am getting the hang of it. So earlier I was creating the schematic, which is basically what parts I want and the connection. Now I am working on the setup of the pcb and where everything will go. All of this is fairly new so if you have suggestions or need help feel free to comment. Thanks!"}]...
|
Title: Half Gamer by @Vishy | Stardance
Devlogs:
Title: Half Gamer by @Vishy | Stardance
Devlogs:
Routing PCB Hello everyone, it may look like I spent no time, but none of the time lapses I recorded want to attach (I cant attach them) but I have spent so long learning how to do this, and I am getting the hang of it. So earlier I was creating the schematic, which is basically what parts I want and the connection. Now I am working on the setup of the pcb and where everything will go. All of this is fairly new so if you have suggestions or need help feel free to comment. Thanks!...
|
1793948013.3107543
|
1794812013.3107543
|
|
4406
|
My awesome macropad! by @r_joelvarghese | Stardanc My awesome macropad! by @r_joelvarghese | Stardance...
|
r_joelvarghese
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @r_joelvarghese | S Title: My awesome macropad! by @r_joelvarghese | Stardance...
|
1793948014.1639714
|
1794812014.1639714
|
|
7614
|
UniScan by @dexrn | Stardance
|
dexrn
|
1
|
265.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T13:28:22Z", "hours": 265.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "UniScan is a super modular police/radio scanner hoster, so that people can listen to their scanners remotely, and even allow others to listen too! In addition to also remotely controlling the scanners in the future. It’s written in C#, using Avalonia, Dotnetty, R3, and many other libraries. Note that the web build is currently broken due to what seems to be some upstream issue, I’ll be working to hopefully figure out a fix for that on my free time. Luckily, this project is published natively for just about every platform, even your TV! (if it runs Android TV that is, :P) This project has been going since March , and is still in progress to this day. However, it is in a good enough state to where people can start to test it and give their feedback. HOWEVER : Since I do not know anyone who can host their scanner, testers will have to host their own if they want to play with the online functionality (which is the main part of UniScan, for now until an Internal Server is implemented) The only supported scanner will be the Uniden SDS100 after this is shipped (and I still have to publish the module for it, but that will hopefully happen tomorrow, sorry!!!), with more to come after. A lot of this will be a huge community effort to implement support modules for their scanners/radios so more people can use UniScan with their scanner. I urge anyone who has friends that are into listening to scanners to atleast make this project known to them should they be potentially interested, as this will be a large part of the driving force for continued development on this project. This has been one of my largest projects other than Project Lodestone, with even more hours than shown on Stardance just during the prototyping and initial coding… Most of the difficulty comes from trying to do things right the first time, having abstractions and extensibility where possible, and making sure the systems I implement are usable in the core. I would say the hardest part was figuring out the best way to tackle serverside UI, because the server needs to be able to render the current scanner’s state to send it to the client (otherwise, you won’t see any info about it!!!) As well as learning the networking aspect… The next roadblock will be adding audio support, as I need to figure out how to send audio and properly receive it… Sending is the hard part because I believe most of the libraries to encode data from audio devices are platform-specific, and this all needs to be configurable from a JSON file. Controlling the scanner is also very important, but I’m not comfortable with implementing this before I implement authentication and users, which will require a lot of refactors for the packet handling. This will involve implementing server configuration to manage the users, meaning more SSR UI for some parts, In addition to SDS200 implementation, as it does communication over UDP and RTSP for audio as one of its modes (in addition to hardwired via USB), but this isn’t a core part of the project right now. There is still a lot on the roadmap, and I hope to get everything finished as soon as possible… However, commits will be sparser because I won’t have to devote 100% of my time to this project due to Stardance. The roadmap also requires You… as I need tons of feedback from people who are genuinely interested and have ideas, find bugs, or have any questions that need to be answered, all of which will shape the future of this project. I also would love to have any and all contributors, I do not have a CONTRIBUTORS.MD written yet though, but my only limit for now is the codebase being ensloppified by some vibe coding PRs for the most part. I intend to add proper packaging once audio is implemented (1.0.0-alpha-pre), so that includes installation through flatpak, distro package manager, the Google Play Store (if possible), F-Droid, a Windows setup tool, macOS .app into a DMG, etc.", "repo": "https://github.com/UniScanProject/UniScan", "demo": "https://github.com/UniScanProject/UniScan/releases"}]...
|
[{"post_id": 85507, "ts": "202 [{"post_id": 85507, "ts": "2026-10-31T13:01:57Z", "hours": 2.3803, "text": "Final devlog before I ship this I have released a usable build that can connect to servers and receive and display scanner info to GitHub! Check it out: https://github.com/UniScanProject/UniScan/releases The readme has been updated with install instructions, much more info, and some screenshots as well. NOTE though that you’ll have to host your own server to do any server testing as I don’t have anyone who can host a test server. In the future I will host my own for all to test with though. I am also working on a Uniden support module so that people with Uniden scanners can plug theirs in and host their own server with it. I’ve also created a repo on Tangled, if anyone here prefers that (but no release on there yet.) https://tangled.org/dexrn.me/UniScan"}, {"post_id": 85353, "ts": "2026-10-31T05:52:50Z", "hours": 8.3292, "text": "In a quest to get this thing shipped before SD ends, I have added a header to the device view finally, so you’re not stuck once you subscribe to one device lol"}, {"post_id": 83606, "ts": "2026-10-28T07:26:58Z", "hours": 8.9808, "text": "Implemented a bunch of network stuff and got Settings working enough for this commit Now for audio stuff, and a fix with the device state management I really, really hope I can get this finished before SD ends…"}, {"post_id": 82178, "ts": "2026-10-24T05:35:57Z", "hours": 5.6564, "text": "Implemented settings, and made transport configurable! Here’s it listening on multiple TCP ports Now to implement websocket (array part of config:) {\"$type\":\"TCP\",\"interface\":\"0.0.0.0\",\"port\":6141}, {\"$type\":\"TCP\",\"interface\":\"0.0.0.0\",\"port\":6142}, {\"$type\":\"TCP\",\"interface\":\"0.0.0.0\",\"port\":6143}, {\"$type\":\"TCP\",\"interface\":\"0.0.0.0\",\"port\":6144}, {\"$type\":\"TCP\",\"interface\":\"0.0.0.0\",\"port\":6145}, {\"$type\":\"TCP\",\"interface\":\"0.0.0.0\",\"port\":6146}, {\"$type\":\"TCP\",\"interface\":\"0.0.0.0\",\"port\":6147}, {\"$type\":\"TCP\",\"interface\":\"0.0.0.0\",\"port\":6148}"}, {"post_id": 81208, "ts": "2026-10-20T09:19:45Z", "hours": 9.0592, "text": "Coming in the next full update will also be UI modes This is so that the UI is optimized for every device and their input methods This is the Mobile one, and the main page will (when its finished) have all remotes including non-connected ones and a button to add more remotes and such."}, {"post_id": 80144, "ts": "2026-10-16T11:58:28Z", "hours": 3.9517, "text": "Working on settings…! After this there will be configuration on the serverside and then after that, audio streaming!"}, {"post_id": 79731, "ts": "2026-10-15T07:54:37Z", "hours": 6.7103, "text": "New logo! (credits at end) I intend to make the logo customizable by allowing you to change the color of various elements, and choose between different logos (since no other software ive seen does this) Maybe even change the color of the scanner display when someone is talking even… Thanks to Unomelon for the base, which I used to draw the scanner. Check out Unomelon here: https://bsky.app/profile/unomelon.bsky.social , and his very cool game Allumeria here: https://allumeria.com/ (wasnt asked to add this but I think the game is really cool and am somewhat active in the community)"}, {"post_id": 77782, "ts": "2026-10-08T08:12:30Z", "hours": 5.2025, "text": "Finally committed the latest Shiki changes, will release UniScan’s next commit tomorrow."}, {"post_id": 76647, "ts": "2026-10-04T07:57:18Z", "hours": 11.0072, "text": "Have been working on more Shiki refactors and a nice language system for servers in UniScan to provide language strings without being able to overwrite client language strings Reworked most of the TaskPipelineBuilder with many more accepting delegate types and have done some cleanup since Tomorrow I will finish up releasing the next Shiki version and then I think I will be able to release the next UniScan commit and then keep working for an alpha release."}, {"post_id": 73501, "ts": "2026-09-25T07:49:46Z", "hours": 9.2694, "text": "getting yelled at by starpheus because I haven’t made devlog yet spent all nighter last night refactoring shiki’s modulemanagement project and then today I refactored lots of shiki’s taskpipeline project, as well as some work being done on Shiki’s Result and family (shiki is the side project library with most of it’s code originating from UniScan, and UniScan heavily depends on it) Now the browser initialization is much cleaner (but not perfect of course) (first screenshot is new, second is old) Removed HostEnvironment because we usually only grab the parts from DI anyway"}, {"post_id": 73041, "ts": "2026-09-24T08:06:31Z", "hours": 11.4114, "text": "For funzies, here’s the dev build running inside a rooted Oculus Quest 2 (thanks to my friend for testing this) This is also a good test of the netcode over a long distance (they’re in Malaysia while I’m in the US) Getting close to committing this all alongside Shiki and such… Long cleanup process."}, {"post_id": 70021, "ts": "2026-09-18T09:20:00Z", "hours": 2.1572, "text": "Here’s a showcase of my Uniden SDS100 scanning, with UniScan showing the details in real time! I programmed in some garbage test channels so you won’t see any channels talking in this video. Everything shown here is sent by the server and updated by the server… Still somewhat far from complete as I have to figure out more stuff (mainly more stuff for the client to deal with, like hiding state display textblock on null bindings and more UI features/styling)."}, {"post_id": 69912, "ts": "2026-09-18T01:47:47Z", "hours": 10.1983, "text": "Okayyy so I was able to actually completely gut DeviceState and now it’s actually just a class which is also used to serialize individual states. This also means I can nuke reflection from the serialization process since I can just make IDeviceState forced to inherit IStateSerializer which will be much more dynamic!!! This means literally any states can be sent to the client and as long as the server or the module has the UI to render the states, it will work. This also allows states to be diffed and only the changed parts to be sent Second screenshot shows the UI sent by the server, note that the Volume: 0 is actually all being handled on the client via binding strings (where the server only sends the client the device states and the binding strings will look up those states itself)"}, {"post_id": 67990, "ts": "2026-09-14T10:18:38Z", "hours": 0.7964, "text": "And now we can finally start seeing the fruits of our labor"}, {"post_id": 67864, "ts": "2026-09-14T04:29:36Z", "hours": 7.07, "text": "IT FINALLY WORKS The UI shit I built on the server now syncs to the client correctly, and the flow isn’t actually too bad! Although this will be improved by also having a registry…registry…(yeah I know it’s weird) on the client so that UI elements can have values bind to them, and all the server has to do is send the client data to those registries"}, {"post_id": 65237, "ts": "2026-09-10T07:13:02Z", "hours": 3.4144, "text": "Went on a small side-tangent. Icons! (dw still working on the SSR device stuff)"}, {"post_id": 63401, "ts": "2026-09-07T06:50:20Z", "hours": 5.6181, "text": "Sorry, haven’t been super active due to life. Fixed a few bugs in the meantime and implemented most of the SSR binding stuff, but it’s far from finished, hell I haven’t even gotten to test it yet. Will be gone for a bit tomorrow, and the next day I will be at a different house for a few days albeit with my computer."}, {"post_id": 61349, "ts": "2026-09-04T07:02:15Z", "hours": 5.4761, "text": "While I didn’t get to scanner state displaying yet, I did refactor the classes that handle how remotes connect, disconnect, etc so that it’s not spread around the codebase. This fixes a few bugs related to state management due to how originally these viewmodels were constructed separately of eachother. Tomorrow I will be gone for a few hrs but should be back soon enough to hopefully make some more refactors and/or start on the remote display. Pictured is the new disconnect button in the remote on the sidebar"}, {"post_id": 60741, "ts": "2026-09-03T09:41:59Z", "hours": 2.8389, "text": "The client can now disconnect itself, and more styling has been added to the SSR UI (shown here is a Container which is centered and has a slight margin) tomorrow will be some more work on the SSR UI and then finally getting the scanner state to show on the client. I’m not too pleased with the idea that the server may change the look of the device pages on the clients, though… I still feel like there could be some better way to go about this."}, {"post_id": 60674, "ts": "2026-09-03T06:03:58Z", "hours": 7.28, "text": "I FINALLY GOT SSR WORKING MY GOD still too primitive to do anything atm, working on it."}, {"post_id": 59441, "ts": "2026-09-01T09:14:39Z", "hours": 2.6186, "text": "A friend of mine was able to test it on iOS, we got it working. Gonna have them send in the PR later and set up CI for it."}, {"post_id": 58714, "ts": "2026-08-31T07:59:18Z", "hours": 3.1222, "text": "Started working on state sync, will continue tomorrow probably States are synced now but I need to think about how to deal with scanner groups and channels and such because there are different types of channels (such as P25, conventional, etc) among other type issues and I want to reduce the need for any modules on the client if I can."}, {"post_id": 56408, "ts": "2026-08-28T05:18:41Z", "hours": 1.9061, "text": "UniScan Client v0.1.0, UniScan Server (Host) v0.1.1 Lots of changes, most of them are backend changes, but there are also a handful of frontend changes too! https://github.com/UniScanProject/UniScan/releases/tag/UniScan.Client.App%2F0.1.0 Remotes are now stored per file instead of one large file, and the UI has been neatened up. The server now sends metadata containing a logo, various information, an MOTD, links, etc. The UI has been updated to display this information too. There are more changes than this, but there are too many to list here without hitting the 4000 char limit. Attached is a small video showing some of the new UI stuffs. By no means is it bug free, but the PR reached a point where it could be merged to allow for other important tasks to be focused on (like y’know, showing the actual scanner info)"}, {"post_id": 55440, "ts": "2026-08-27T08:29:55Z", "hours": 1.0639, "text": "I think this looks pretty nice apparently Avalonia has some nuget package that adds ItemsRepeater which does what I was originally trying to do in a cleaner way"}, {"post_id": 55410, "ts": "2026-08-27T06:57:46Z", "hours": 0.9983, "text": "Here’s the announcements UI, I think I’m almost done on this branch and then I’ll continue on main."}, {"post_id": 55287, "ts": "2026-08-27T00:47:49Z", "hours": 2.4511, "text": "Need opinions on this UI The server logo now shows where possible, so on the home view and in the sidebar In the remote view, there is a top ‘window’(?) that holds (from top to bottom): logo (to the side: title, description), server links and then the bottom floating window thing holds the server MOTD I still need to find a place to hold the server announcements… Alongside this were a ton of internal refactors, and the subscribe button now works (but the server still won’t properly send the current state) Been trying to post this since yesterday (I re-recorded the video today), but Hackatime has been down."}, {"post_id": 54227, "ts": "2026-08-25T03:48:43Z", "hours": 5.8811, "text": "Remotes are now stored per file instead of all inside one file. Additionally, server info is now properly cached! I had to rewrite most of the remote initialization flow, but now it’s much better. Adding and removing remotes automatically saves to disk because I can observe the list. This isn’t the end of this overhaul, but we’re getting closer… I think I want to refactor more of UniScanClient next. This is happening on another branch: https://github.com/UniScanProject/UniScan/tree/feat/use_server_provided_display_names After this branch is merged into main, I will make the available server info also show since we have the entire RemoteInfo being sent, which includes announcements, a description, a logo, etc."}, {"post_id": 53539, "ts": "2026-08-24T04:08:25Z", "hours": 3.6514, "text": "Working on dropping display names from client remotes As well as some refactor of the connection flow using my new TaskPipeline Once this is done, the server will be able to send branding, announcements, and other useful information on connect for the client to display!"}, {"post_id": 52159, "ts": "2026-08-22T07:56:54Z", "hours": 1.7483, "text": "Just released a new version, now you can make remotes from the UI finally. Here’s a video showing the creation flow. Note that the list is dynamic based on classes implementing IConnectionMethodFactoryViewModel with attribute ConnectionMethodFactoryViewModelAttribute"}, {"post_id": 52085, "ts": "2026-08-22T04:54:12Z", "hours": 2.8142, "text": "working on fixing the fact that you can’t really make remotes"}, {"post_id": 51645, "ts": "2026-08-21T13:05:32Z", "hours": 3.4047, "text": "FINALLY I GOT IT DONE IM SO TIRED New loading screen!!!! And OPFS file handles are now keyed by int im going to sleep now https://uniscan.dexrn.me"}, {"post_id": 51484, "ts": "2026-08-21T06:59:47Z", "hours": 0.3158, "text": "Much nicer loading screen"}, {"post_id": 51332, "ts": "2026-08-20T22:40:12Z", "hours": 2.3814, "text": "Alright I’ve committed and now you can access UniScan through https://uniscan.dexrn.me Note that since this is still an early version, you can’t really do much. You can also install it as a PWA on iOS, Android, and most desktop browsers. (pictured is UniScan as a PWA in ungoogled-chromium) Hopefully tomorrow I will fix the crash with adding remotes by making some sort of map of connection type -> UI widget to define the settings for them. (meant to post this yesterday, but GH was still working on some cert garbage)"}, {"post_id": 50726, "ts": "2026-08-20T02:11:03Z", "hours": 1.7997, "text": "UniScan now works in browser! I’ve also added a nice crash handler since unhandled exceptions act weird in the browser. Just polishing up now, will commit and set up Actions to host this. Once it’s up, the link will be https://uniscan.dexrn.me (The crash shown in the video is a real issue and will be fixed later.)"}, {"post_id": 50685, "ts": "2026-08-20T00:10:14Z", "hours": 2.6617, "text": "FINALLY I GOT OPFS WORKING GG"}, {"post_id": 50163, "ts": "2026-08-19T08:34:19Z", "hours": 0.6781, "text": "OK I GOT IT SOMEWHAT WORKING IN BROWSER FINALLY still need to keep implementing OPFS stuff though. serilog 01:32:29 [ERR | UniScan.Client.Core.Config.Remote.RemotesListFile] Failed to save remotes to remotes.json System.Exception: Entry not found at SpawnDev.SpawnJS.SpawnJSRuntime.<_InteropCallApplyAsync>d__132`1[[SpawnDev.SpawnJS.JSObjects.FileSystemSyncAccessHandle, SpawnDev.SpawnJS, Version=2.1.8.0, Culture=neutral, PublicKeyToken=null]].MoveNext()"}, {"post_id": 50120, "ts": "2026-08-19T06:14:18Z", "hours": 1.0522, "text": "I think this looks pretty good for a little loading screen. I’ll probably add a try/catch if possible and show an error dialog when some fatal exception is thrown… The “Loading…” text is temporary and is done in Avalonia, will make a proper loading screen there sometime later."}, {"post_id": 50073, "ts": "2026-08-19T03:53:07Z", "hours": 1.5272, "text": "Using this time to test out M3 web (even though it’s in maintenance mode) This is just for the loading screen while it downloads all the WASMs. The cell tower is temporary until I can either make my own logo or find someone who will make one for me."}, {"post_id": 49405, "ts": "2026-08-18T06:53:24Z", "hours": 0.5689, "text": "Waiting on a bug to be fixed in SpawnJS.WebWorkers and then hopefully next update will include web support + a website for y’all to test the client!!! Couldn’t do much today since I was so busy, however since I’m home now I can work on UniScan at a better time than 12 in the morning."}, {"post_id": 48708, "ts": "2026-08-17T06:57:16Z", "hours": 2.0306, "text": "Didn’t get to release last night, as a new bug popped up. 11>MessagePack.GeneratedMessagePackResolver.g.cs(74,74): Error CS0426 : The type name 'Shiki' does not exist in the type 'GeneratedMessagePackResolver'11>------- Finished building project: UniScan.Network. Succeeded: False. Errors: 1. Was able to fix it with some property in the AssemblyInfo. (see: github.com/MessagePack-CSharp/MessagePack-CSharp/issues/2133) I changed the Identifier to be a Slug instead for the devices. Working on browser stuff real quick and will commit sometime soon."}, {"post_id": 47901, "ts": "2026-08-16T05:27:47Z", "hours": 1.0794, "text": "Not fully happy with the manner in which this works, but the virtual scanner does work! Will publish some if not all of it tonight, but no version tag for this yet until I fix my refactoring."}, {"post_id": 47322, "ts": "2026-08-15T06:23:55Z", "hours": 1.4389, "text": "Working on a virtual scanner module to help development by simulating a scanner, hope to have it ready by tomorrow. This also means any future contributors will be able to start contributing even if they do not own a scanner!"}, {"post_id": 46716, "ts": "2026-08-14T05:00:44Z", "hours": 0.8869, "text": "spun up entire android emulator just to realize it was some debug code I forgot to remove that was causing it to throw and die because afaik currentdirectory is / for android apps? gonna release this and then start working on remote adding from UI I think"}, {"post_id": 46099, "ts": "2026-08-13T02:11:59Z", "hours": 5.3278, "text": "UniScan source is now up, you can view it at https://github.com/UniScanProject/UniScan UniScan Client & Server v0.0.2 https://github.com/UniScanProject/UniScan/releases/tag/UniScan.Client.App%2F0.0.2 https://github.com/UniScanProject/UniScan/releases/tag/UniScan.Server.Host%2F0.0.2 Added CI for UniScan.Server.Host UniScan.Client.Core Use DI for PacketRegistry Update RemoteFactory.Create to pass PacketRegistry instance from DI Breaking Changes Updated RemoteServer constructors to take an instance of PacketRegistry Removed InternalUniScanClientPacketConfigurator Packets are now registered from AssembliesPacketSource InternalUniScanClientModule no longer adds an IPacketConfigurator to DI as this class has been removed. UniScan.Network Breaking Changes Renamed ScannerInfoPacket -> ScannerRegistrationPacket The new ID for this packet is UniScan:packet/clientbound/device/registration This fixes a bug where there were two instances of the same packet ID used for different packets in the codebase Removed BuiltinPacketRegistrar Removed IPacketConfigurator Moved PacketRegistry and RegistryPacketAttribute to UniScan.Network.Registry Created IPacketSource and AssembliesPacketSource AssembliesPacketSource collects all classes that inherit IPacket and have the RegistryPacket attribute. Removed the singleton Instance property from PacketRegistry Created PacketRegistry.RegisterFromSource and PacketRegistry.RegisterFromSource<TPacketSource> PacketRegistry.RegisterFromSource takes a given IPacketSource and registers all the packets it provides. PacketRegistry.RegisterFromSource<TPacketSource> creates a new instance of the given TPacketSource type and passes it to PacketRegistry.RegisterFromSource UniScan.Server.Core SubscribePacketHandler now sends the newly renamed ScannerRegistrationPacket Breaking Changes Removed PacketRegistry.RegisterFromSource InternalUniScanServerModule no longer adds an IPacketConfigurator to DI as this class has been removed. Packets are now registered from AssembliesPacketSource UniScan.Server.Host Now creates its own PacketRegistry and passes it to the UniScanServer constructor. UniScan.Tests Now creates its own PacketRegistry and passes it to the ClientSocket constructor."}, {"post_id": 44449, "ts": "2026-08-10T06:23:32Z", "hours": 11.9661, "text": "Been working on cleaning up the codebase in preparation for the initial commit. (thanks @CT5 for some of the motivation) https://github.com/UniScanProject/UniScan will be the project’s home. This does NOT mean it is ready to use, it is far from so. However, it means I will be able to publish releases and such, and everyone will be able to read the code. I will also be working on a Module alongside the core project, which acts as a virtual scanner, for testing of course. My next steps will be getting the virtual scanner module good enough to use as testing, then figure out what to do about the UI, as I don’t really want to force modules onto users. My idea here is that we send a UI ‘definition’(?) to the client for it to render, and let modules hook into them. Means we can also have each button call to the server when pressed if it’s meant to perform a server-side action. I am also planning a scope increase to include SDRs and two-way radios in the distant future. Would like y’alls opinions."}, {"post_id": 28082, "ts": "2026-07-14T03:34:16Z", "hours": 15.6422, "text": "Doing better at Avalonia so I was able to fix some issues and make the Home screen actually contain something useful, with this being a list of all connected remotes and their devices in one place. Oh, and a ton of netcode setup which I forgot to post in this devlog, will show it in the next one."}, {"post_id": 18787, "ts": "2026-06-30T00:07:21Z", "hours": 34.5525, "text": "so far so good! I might want to make the Identifier text slightly smaller….. Now onto making “subscriptions” work, couldn’t come up with a better name than this though. It takes me so long to do anything because I constantly have the urge to refactor things, as well as trying to get stuff perfect the first time."}, {"post_id": 7411, "ts": "2026-06-12T10:42:10Z", "hours": 11.1469, "text": "FINALLY HOLY SHIT WHY IS IT SUCH PAIN TO DO ASYNC INIT IN AVALONIA I wouldnt need to do this if the browser wasnt so picky with OPFS and async………. UGH basically now during OnFrameworkInitializationCompleted I just run task in background that calls my async function at end of async function it sets Content of root view to newly created MainViewModel"}, {"post_id": 6029, "ts": "2026-06-10T03:40:35Z", "hours": 2.2417, "text": "Finally getting remotes closer to working Now you can add them from the GUI (but you can’t connect to them yet…)"}, {"post_id": 5432, "ts": "2026-06-09T06:21:20Z", "hours": 0.9203, "text": "didn’t notice at the time but I was writing out the length with the wrong endianness fixed it and now dotnetty doesn’t silently ignore it"}, {"post_id": 5404, "ts": "2026-06-09T04:53:56Z", "hours": 10.0017, "text": "testing the socket, seems like packets aren’t being handled just yet but at least we’re getting somewhere"}]...
|
Title: UniScan by @dexrn | Stardance
Devlogs:
tes Title: UniScan by @dexrn | Stardance
Devlogs:
testing the socket, seems like packets aren’t being handled just yet but at least we’re getting somewhere
didn’t notice at the time but I was writing out the length with the wrong endianness fixed it and now dotnetty doesn’t silently ignore it
Finally getting remotes closer to working Now you can add them from the GUI (but you can’t connect to them yet…)
FINALLY HOLY SHIT WHY IS IT SUCH PAIN TO DO ASYNC INIT IN AVALONIA I wouldnt need to do this if the browser wasnt so picky with OPFS and async………. UGH basically now during OnFrameworkInitializationCompleted I just run task in background that calls my async function at end of async function it sets Content of root view to newly created MainViewModel
so far so good! I might want to make the Identifier text slightly smaller….. Now onto making “subscriptions” work, couldn’t come up with a better name than this though. It takes me so long to do anything because I constantly have the urge to refactor things, as well as trying to get stuff perfect the first time.
Doing better at Avalonia so I was able to fix some issues and make the Home screen actually contain something useful, with this being a list of all connected remotes and their devices in one place. Oh, and a ton of netcode setup which I forgot to post in this devlog, will show it in the next one.
Been working on cleaning up the codebase in preparation for the initial commit. (thanks @CT5 for some of the motivation) https://github.com/UniScanProject/UniScan will be the project’s home. This does NOT mean it is ready to use, it is far from so. However, it means I will be able to publish releases and such, and everyone will be able to read the code. I will also be working on a Module alongside the core project, which acts as a virtual scanner, for testing of course. My next steps will be getting the virtual scanner module good enough to use as testing, then figure out what to do about the UI, as I don’t really want to force modules onto users. My idea here is that we send a UI ‘definition’(?) to the client for it to render, and let modules hook into them. Means we can also have each button call to the server when pressed if it’s meant to perform a server-side action. I am also planning a scope increase to include SDRs and two-way radios in the distant future. Would like y’alls opinions.
UniScan source is now up, you can view it at https://github.com/UniScanProject/UniScan UniScan Client & Server v0.0.2 https://github.com/UniScanProject/UniScan/releases/tag/UniScan.Client.App%2F0.0.2 https://github.com/UniScanProject/UniScan/releases/tag/UniScan.Server.Host%2F0.0.2 Added CI for UniScan.Server.Host UniScan.Client.Core Use DI for PacketRegistry Update RemoteFactory.Create to pass PacketRegistry instance from DI Breaking Changes Updated RemoteServer constructors to take an instance of PacketRegistry Removed InternalUniScanClientPacketConfigurator Packets are now registered from AssembliesPacketSource InternalUniScanClientModule no longer adds an IPacketConfigurator to DI as this class has been removed. UniScan.Network Breaking Changes Renamed ScannerInfoPacket -> ScannerRegistrationPacket The new ID for this packet is UniScan:packet/clientbound/device/registration This fixes a bug where there were two instances of the same packet ID used for different packets in the codebase Removed BuiltinPacketRegistrar Removed IPacketConfigurator Moved PacketRegistry and RegistryPacketAttribute to UniScan.Network.Registry Created IPacketSource and AssembliesPacketSource AssembliesPacketSource collects all classes that inherit IPacket and have the RegistryPacket attribute. Removed the singleton Instance property from PacketRegistry Created PacketRegistry.RegisterFromSource and PacketRegistry.RegisterFromSource<TPacketSource> PacketRegistry.RegisterFromSource takes a given IPacketSource and registers all the packets it provides. PacketRegistry.RegisterFromSource<TPacketSource> creates a new instance of the given TPacketSource type and passes it to PacketRegistry.RegisterFromSource UniScan.Server.Core SubscribePacketHandler now sends the newly renamed ScannerRegistrationPacket Breaking Changes Removed PacketRegistry.RegisterFromSource InternalUniScanServerModule no longer adds an IPacketConfigurator to DI as this class has been removed. Packets are now registered from AssembliesPacketSource UniScan.Server.Host Now creates its own PacketRegistry and passes it to the UniScanServer constructor. UniScan.Tests Now creates its own PacketRegistry and passes it to the ClientSocket constructor.
spun up entire android emulator just to realize it was some debug code I forgot to remove that was causing it to throw and die because afaik currentdirectory is / for android apps? gonna release this and then start working on remote adding from UI I think
Working on a virtual scanner module to help development by simulating a scanner, hope to have it ready by tomorrow. This also means any future contributors will be able to start contributing even if they do not own a scanner!
Not fully happy with the manner in which this works, but the virtual scanner does work! Will publish some if not all of it tonight, but no version tag for this yet until I fix my refactoring.
Didn’t get to release last night, as a new bug popped up. 11>MessagePack.GeneratedMessagePackResolver.g.cs(74,74): Error CS0426 : The type name 'Shiki' does not exist in the type 'GeneratedMessagePackResolver'11>------- Finished building project: UniScan.Network. Succeeded: False. Errors: 1. Was able to fix it with some property in the AssemblyInfo. (see: github.com/MessagePack-CSharp/MessagePack-CSharp/issues/2133) I changed the Identifier to be a Slug instead for the devices. Working on browser stuff real quick and will commit sometime soon.
Waiting on a bug to be fixed in SpawnJS.WebWorkers and then hopefully next update will include web support + a website for y’all to test the client!!! Couldn’t do much today since I was so busy, however since I’m home now I can work on UniScan at a better time than 12 in the morning.
Using this time to test out M3 web (even though it’s in maintenance mode) This is just for the loading screen while it downloads all the WASMs. The cell tower is temporary until I can either make my own logo or find someone who will make one for me.
I think this looks pretty good for a little loading screen. I’ll probably add a try/catch if possible and show an error dialog when some fatal exception is thrown… The “Loading…” text is temporary and is done in Avalonia, will make a proper loading screen there sometime later.
OK I GOT IT SOMEWHAT WORKING IN BROWSER FINALLY still need to keep implementing OPFS stuff though. serilog 01:32:29 [ERR | UniScan.Client.Core.Config.Remote.RemotesListFile] Failed to save remotes to remotes.json System.Exception: Entry not found at SpawnDev.SpawnJS.SpawnJSRuntime.<_InteropCallApplyAsync>d__132`1[[SpawnDev.SpawnJS.JSObjects.FileSystemSyncAccessHandle, SpawnDev.SpawnJS, Version=2.1.8.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
FINALLY I GOT OPFS WORKING GG
UniScan now works in browser! I’ve also added a nice crash handler since unhandled exceptions act weird in the browser. Just polishing up now, will commit and set up Actions to host this. Once it’s up, the link will be https://uniscan.dexrn.me (The crash shown in the video is a real issue and will be fixed later.)
Alright I’ve committed and now you can access UniScan through https://uniscan.dexrn.me Note that since this is still an early version, you can’t really do much. You can also install it as a PWA on iOS, Android, and most desktop browsers. (pictured is UniScan as a PWA in ungoogled-chromium) Hopefully tomorrow I will fix the crash with adding remotes by making some sort of map of connection type -> UI widget to define the settings for them. (meant to post this yesterday, but GH was still working on some cert garbage)
Much nicer loading screen
FINALLY I GOT IT DONE IM SO TIRED New loading screen!!!! And OPFS file handles are now keyed by int im going to sleep now https://uniscan.dexrn.me
working on fixing the fact that you can’t really make remotes
Just released a new version, now you can make remotes from the UI finally. Here’s a video showing the creation flow. Note that the list is dynamic based on classes implementing IConnectionMethodFactoryViewModel with attribute ConnectionMethodFactoryViewModelAttribute
Working on dropping display names from client remotes As well as some refactor of the connection flow using my new TaskPipeline Once this is done, the server will be able to send branding, announcements, and other useful information on connect for the client to display!
Remotes are now stored per file instead of all inside one file. Additionally, server info is now properly cached! I had to rewrite most of the remote initialization flow, but now it’s much better. Adding and removing remotes automatically saves to disk because I can observe the list. This isn’t the end of this overhaul, but we’re getting closer… I think I want to refactor more of UniScanClient next. This is happening on another branch: https://github.com/UniScanProject/UniScan/tree/feat/use_server_provided_display_names After this branch is merged into main, I will make the available server info also show since we have the entire RemoteInfo being sent, which includes announcements, a description, a logo, etc.
Need opinions on this UI The server logo now shows where possible, so on the home view and in the sidebar In the remote view, there is a top ‘window’(?) that holds (from top to bottom): logo (to the side: title, description), server links and then the bottom floating window thing holds the server MOTD I still need to find a place to hold the server announcements… Alongside this were a ton of internal refactors, and the subscribe button now works (but the server still won’t properly send the current state) Been trying to post this since yesterday (I re-recorded the video today), but Hackatime has been down.
Here’s the announcements UI, I think I’m almost done on this branch and then I’ll continue on main.
I think this looks pretty nice apparently Avalonia has some nuget package that adds ItemsRepeater which does what I was originally trying to do in a cleaner way
UniScan Client v0.1.0, UniScan Server (Host) v0.1.1 Lots of changes, most of them are backend changes, but there are also a handful of frontend changes too! https://github.com/UniScanProject/UniScan/releases/tag/UniScan.Client.App%2F0.1.0 Remotes are now stored per file instead of one large file, and the UI has been neatened up. The server now sends metadata containing a logo, various information, an MOTD, links, etc. The UI has been updated to display this information too. There are more changes than this, but there are too many to list here without hitting the 4000 char limit. Attached is a small video showing some of the new UI stuffs. By no means is it bug free, but the PR reached a point where it could be merged to allow for other important tasks to be focused on (like y’know, showing the actual scanner info)
Started working on state sync, will continue tomorrow probably States are synced now but I need to think about how to deal with scanner groups and channels and such because there are different types of channels (such as P25, conventional, etc) among other type issues and I want to reduce the need for any modules on the client if I can.
A friend of mine was able to test it on iOS, we got it working. Gonna have them send in the PR later and set up CI for it.
I FINALLY GOT SSR WORKING MY GOD still too primitive to do anything atm, working on it.
The client can now disconnect itself, and more styling has been added to the SSR UI (shown here is a Container which is centered and has a slight margin) tomorrow will be some more work on the SSR UI and then finally getting the scanner state to show on the client. I’m not too pleased with the idea that the server may change the look of the device pages on the clients, though… I still feel like there could be some better way to go about this.
While I didn’t get to scanner state displaying yet, I did refactor the classes that handle how remotes connect, disconnect, etc so that it’s not spread around the codebase. This fixes a few bugs related to state management due to how originally these viewmodels were constructed separately of eachother. Tomorrow I will be gone for a few hrs but should be back soon enough to hopefully make some more refactors and/or start on the remote display. Pictured is the new disconnect button in the remote on the sidebar
Sorry, haven’t been super active due to life. Fixed a few bugs in the meantime and implemented most of the SSR binding stuff, but it’s far from finished, hell I haven’t even gotten to test it yet. Will be gone for a bit tomorrow, and the next day I will be at a different house for a few days albeit with my computer.
Went on a small side-tangent. Icons! (dw still working on the SSR device stuff)
IT FINALLY WORKS The UI shit I built on the server now syncs to the client correctly, and the flow isn’t actually too bad! Although this will be improved by also having a registry…registry…(yeah I know it’s weird) on the client so that UI elements can have values bind to them, and all the server has to do is send the client data to those registries
And now we can finally start seeing the fruits of our labor
Okayyy so I was able to actually completely gut DeviceState and now it’s actually just a class which is also used to serialize individual states. This also means I can nuke reflection from the serialization process since I can just make IDeviceState forced to inherit IStateSerializer which will be much more dynamic!!! This means literally any states can be sent to the client and as long as the server or the module has the UI to render the states, it will work. This also allows states to be diffed and only the changed parts to be sent Second screenshot shows the UI sent by the server, note that the Volume: 0 is actually all being handled on the client via binding strings (where the server only sends the client the device states and the binding strings will look up those states itself)
Here’s a showcase of my Uniden SDS100 scanning, with UniScan showing the details in real time! I programmed in some garbage test channels so you won’t see any channels talking in this video. Everything shown here is sent by the server and updated by the server… Still somewhat far from complete as I have to figure out more stuff (mainly more stuff for the client to deal with, like hiding state display textblock on null bindings and more UI features/styling).
For funzies, here’s the dev build running inside a rooted Oculus Quest 2 (thanks to my friend for testing this) This is also a good test of the netcode over a long distance (they’re in Malaysia while I’m in the US) Getting close to committing this all alongside Shiki and such… Long cleanup process.
getting yelled at by starpheus because I haven’t made devlog yet spent all nighter last night refactoring shiki’s modulemanagement project and then today I refactored lots of shiki’s taskpipeline project, as well as some work being done on Shiki’s Result and family (shiki is the side project library with most of it’s code originating from UniScan, and UniScan heavily depends on it) Now the browser initialization is much cleaner (but not perfect of course) (first screenshot is new, second is old) Removed HostEnvironment because we usually only grab the parts from DI anyway
Have been working on more Shiki refactors and a nice language system for servers in UniScan to provide language strings without being able to overwrite client language strings Reworked most of the TaskPipelineBuilder with many more accepting delegate types and have done some cleanup since Tomorrow I will finish up releasing the next Shiki version and then I think I will be able to release the next UniScan commit and then keep working for an alpha release.
Finally committed the latest Shiki changes, will release UniScan’s next commit tomorrow.
New logo! (credits at end) I intend to make the logo customizable by allowing you to change the color of various elements, and choose between different logos (since no other software ive seen does this) Maybe even change the color of the scanner display when someone is talking even… Thanks to Unomelon for the base, which I used to draw the scanner. Check out Unomelon here: https://bsky.app/profile/unomelon.bsky.social , and his very cool game Allumeria here: https://allumeria.com/ (wasnt asked to add this but I think the game is really cool and am somewhat active in the community)
Working on settings…! After this there will be configuration on the serverside and then after that, audio streaming!
Coming in the next full update will also be UI modes This is so that the UI is optimized for every device and their input methods This is the Mobile one, and the main page will (when its finished) have all remotes including non-connected ones and a button to add more remotes and such.
Implemented settings, and made transport configurable! Here’s it listening on multiple TCP ports Now to implement websocket (array part of config:) {"$type":"TCP","interface":"0.0.0.0","port":6141}, {"$type":"TCP","interface":"0.0.0.0","port":6142}, {"$type":"TCP","interface":"0.0.0.0","port":6143}, {"$type":"TCP","interface":"0.0.0.0","port":6144}, {"$type":"TCP","interface":"0.0.0.0","port":6145}, {"$type":"TCP","interface":"0.0.0.0","port":6146}, {"$type":"TCP","interface":"0.0.0.0","port":6147}, {"$type":"TCP","interface":"0.0.0.0","port":6148}
Implemented a bunch of network stuff and got Settings working enough for this commit Now for audio stuff, and a fix with the device state management I really, really hope I can get this finished before SD ends…
In a quest to get this thing shipped before SD ends, I have added a header to the device view finally, so you’re not stuck once you subscribe to one device lol
Final devlog before I ship this I have released a usable build that can connect to servers and receive and display scanner info to GitHub! Check it out: https://github.com/UniScanProject/UniScan/releases The readme has been updated with install instructions, much more info, and some screenshots as well. NOTE though that you’ll have to host your own server to do any server testing as I don’t have anyone who can host a test server. In the future I will host my own for all to test with though. I am also working on a Uniden support module so that people with Uniden scanners can plug theirs in and host their own server with it. I’ve also created a repo on Tangled, if anyone here prefers that (but no release on there yet.) https://tangled.org/dexrn.me/UniScan
Ships:
UniScan is a super modular police/radio scanner hoster, so that people can listen to their scanners remotely, and even allow others to listen too! In addition to also remotely controlling the scanners in the future. It’s written in C#, using Avalonia, Dotnetty, R3, and many other libraries. Note that the web build is currently broken due to what seems to be some upstream issue, I’ll be working to hopefully figure out a fix for that on my free time. Luckily, this project is published natively for just about every platform, even your TV! (if it runs Android TV that is, :P) This project has been going since March , and is still in progress to this day. However, it is in a good enough state to where people can start to test it and give their feedback. HOWEVER : Since I do not know anyone who can host their scanner, testers will have to host their own if they want to play with the online functionality (which is the main part of UniScan, for now until an Internal Server is implemented) The only supported scanner will be the Uniden SDS100 after this is shipped (and I still have to publish the module for it, but that will hopefully happen tomorrow, sorry!!!), with more to come after. A lot of this will be a huge community effort to implement support modules for their scanners/radios so more people can use UniScan with their scanner. I urge anyone who has friends that are into listening to scanners to atleast make this project known to them should they be potentially interested, as this will be a large part of the driving force for continued development on this project. This has been one of my largest projects other than Project Lodestone, with even more hours than shown on Stardance just during the prototyping and initial coding… Most of the difficulty comes from trying to do things right the first time, having abstractions and extensibility where possible, and making sure the systems I implement are usable in the core. I would say the hardest part was figuring out the best way to tackle serverside UI, because the server needs to be able to render the current scanner’s state to send it to the client (otherwise, you won’t see any info about it!!!) As well as learning the networking aspect… The next roadblock will be adding audio support, as I need to figure out how to send audio and properly receive it… Sending is the hard part because I believe most of the libraries to encode data from audio devices are platform-specific, and this all needs to be configurable from a JSON file. Controlling the scanner is also very important, but I’m not comfortable with implementing this before I implement authentication and users, which will require a lot of refactors for the packet handling. This will involve implementing server configuration to manage the users, meaning more SSR UI for some parts, In addition to SDS200 implementation, as it does communication over UDP and RTSP for audio as one of its modes (in addition to hardwired via USB), but this isn’t a core part of the project right now. There is still a lot on the roadmap, and I hope to get everything finished as soon as possible… However, commits will be sparser because I won’t have to devote 100% of my time to this project due to Stardance. The roadmap also requires You… as I need tons of feedback from people who are genuinely interested and have ideas, find bugs, or have any questions that need to be answered, all of which will shape the future of this project. I also would love to have any and all contributors, I do not have a CONTRIBUTORS.MD written yet though, but my only limit for now is the codebase being ensloppified by some vibe coding PRs for the most part. I intend to add proper packaging once audio is implemented (1.0.0-alpha-pre), so that includes installation through flatpak, distro package manager, the Google Play Store (if possible), F-Droid, a Windows setup tool, macOS .app into a DMG, etc....
|
1793948015.0566144
|
1794034415.0566144
|
|
22805
|
Deleted Project by @NellowTCS | Stardance
|
NellowTCS
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Deleted Project by @NellowTCS | Stardance
|
1793948019.4685786
|
1794812019.4685786
|
|
30312
|
My very own WebOS by @avoidantMert | Stardance
|
avoidantMert
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @avoidantMert | Starda Title: My very own WebOS by @avoidantMert | Stardance...
|
1793948020.3473058
|
1794552820.3473058
|
|
43200
|
Spotify acrylic transparent background by @ahnafpy Spotify acrylic transparent background by @ahnafpy | Stardance...
|
ahnafpy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Spotify acrylic transparent background by @ Title: Spotify acrylic transparent background by @ahnafpy | Stardance...
|
1793948021.2582397
|
1794552821.2582397
|
|
23851
|
My very own WebOS by @Ali-was-taken | Stardance
|
Ali-was-taken
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Ali-was-taken | Stard Title: My very own WebOS by @Ali-was-taken | Stardance...
|
1793948022.1414907
|
1794812022.1414907
|
|
24838
|
Infinite OS by @TheShovel | Stardance
|
TheShovel
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T11:49:50Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an operating system where everything is generated on the spot. You cant install apps, you cant access the web, unless you generate an app that does that. Infinite apps, infinite widgets, infinite possibilities (even though those possibilities are pretty sloppy). What was challenging was making a small model that has very little cloud usage, be able to produce something usable while being fast, and cheap.", "repo": "https://github.com/TheShovel/infinite-os", "demo": "https://theshovel.rocks/infinite-os/"}]...
|
[{"post_id": 16202, "ts": "202 [{"post_id": 16202, "ts": "2026-06-26T10:21:08Z", "hours": 2.0097, "text": "Hiiii Hope your day is going well and stuff :) Today i have added widgets! You can now right click on the desktop, and generate widgets that stay where you left them even when you restart! They have access to the theme and system apis just like any other app, but they are made to sit comfortably on your desktop. I have also been working on some quality of life and introduction features! Now there is a user manual, that you can access through the welcome screen. It tells you everything you need to know to use the OS! I have also added some stuff to the settings, like organizing your right click menu, factory reset and other misc stuff that is minor and more to polish things up. Oki thank you byeeeee :D"}, {"post_id": 15634, "ts": "2026-06-25T12:56:09Z", "hours": 2.1692, "text": "sup gamers, its me, theshovel, back at it again with a devlog for the worst operating system ever made i have worked on the speed and quality of the app generating. I have also implemented more system apis like more customization stuff like light and dark mode, also some sound and storage apis so the apps can use local storage. I also worked on the visuals a bit, making it more consistent. The apps now have a design that they follow. This allows for apps to change theme when you change your accent color or between dark and light mode. The major issue right now is that im using a free google api for the app generating. Due to that, i have to lower the maximum output tokens so the user doesnt get rate limited. Due to that, apps might end up being simpler than you expect. The model behind it is still robust enough to give some pretty good output for that tiny amount of token allowence, but even then it might be simpler than youd expect."}, {"post_id": 14634, "ts": "2026-06-23T20:18:55Z", "hours": 1.8264, "text": "I have started the project! So far, i have gotten the bare minimum working. You can click the menu icon, you can type in the name of the app, and a free api endpoint running qwen coder will build the app for you. Because I didnt want to be lazy and just use iFrames, i made it create a div inside the window with the generated code. This works, but it could be a security issue. Do i care though? No lmao I have also started implementing some apis, like the notification api, which an app can call and it will show you a notification. Im going to continue working on this by adding more custom apis and making the operating system more fleshed out. Probably will also have to write some more examples for the llm to use, right now there are a few but they are very simple."}]...
|
Title: Infinite OS by @TheShovel | Stardance
Devl Title: Infinite OS by @TheShovel | Stardance
Devlogs:
I have started the project! So far, i have gotten the bare minimum working. You can click the menu icon, you can type in the name of the app, and a free api endpoint running qwen coder will build the app for you. Because I didnt want to be lazy and just use iFrames, i made it create a div inside the window with the generated code. This works, but it could be a security issue. Do i care though? No lmao I have also started implementing some apis, like the notification api, which an app can call and it will show you a notification. Im going to continue working on this by adding more custom apis and making the operating system more fleshed out. Probably will also have to write some more examples for the llm to use, right now there are a few but they are very simple.
sup gamers, its me, theshovel, back at it again with a devlog for the worst operating system ever made i have worked on the speed and quality of the app generating. I have also implemented more system apis like more customization stuff like light and dark mode, also some sound and storage apis so the apps can use local storage. I also worked on the visuals a bit, making it more consistent. The apps now have a design that they follow. This allows for apps to change theme when you change your accent color or between dark and light mode. The major issue right now is that im using a free google api for the app generating. Due to that, i have to lower the maximum output tokens so the user doesnt get rate limited. Due to that, apps might end up being simpler than you expect. The model behind it is still robust enough to give some pretty good output for that tiny amount of token allowence, but even then it might be simpler than youd expect.
Hiiii Hope your day is going well and stuff :) Today i have added widgets! You can now right click on the desktop, and generate widgets that stay where you left them even when you restart! They have access to the theme and system apis just like any other app, but they are made to sit comfortably on your desktop. I have also been working on some quality of life and introduction features! Now there is a user manual, that you can access through the welcome screen. It tells you everything you need to know to use the OS! I have also added some stuff to the settings, like organizing your right click menu, factory reset and other misc stuff that is minor and more to polish things up. Oki thank you byeeeee :D
Ships:
I made an operating system where everything is generated on the spot. You cant install apps, you cant access the web, unless you generate an app that does that. Infinite apps, infinite widgets, infinite possibilities (even though those possibilities are pretty sloppy). What was challenging was making a small model that has very little cloud usage, be able to produce something usable while being fast, and cheap....
|
1793948023.0037913
|
1794034423.0037913
|
|
11626
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948024.1771622
|
1794812024.1771622
|
|
11843
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948026.9713778
|
1794812026.9713778
|
|
43201
|
Memory-Manipulation-DLL by @ahnafpy | Stardance
|
ahnafpy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Memory-Manipulation-DLL by @ahnafpy | Stard Title: Memory-Manipulation-DLL by @ahnafpy | Stardance...
|
1793948027.8414745
|
1794552827.8414745
|
|
11619
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948028.728852
|
1794812028.728852
|
|
12976
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948029.6030533
|
1794812029.6030533
|
|
20940
|
Brainrot OS by @secret | Stardance
|
secret
|
2
|
10.0
|
52
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T19:03:51Z", "hours": 6.0, "multiplier": 8.1, "payout": 52, "blessing": "neutral", "text": "I present to you: Brainrot OS, now in it’s final form. It has many new features since the last ship. Completely overhauled UI, many-many new features like a calculator, settings, themes and wallpapers, a dock and a spotlight-styled search bar. Be sure to try it out!", "repo": "https://github.com/dominik-vrg/webOS", "demo": "https://dominik-vrg.github.io/brainrot-os/"}, {"ship_num": 2, "ts": "2026-06-18T19:50:49Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Brainrot OS This is my web-based OS project for the Stardance Challange. My OS is called Brainrot OS. BOOT It features a meme/brainrot themed boot animation when opening the webpage. DESKTOP After the system “boots”, there are three applications on the desktop, but also a working clock and a date display. !!The setting feature doesn’t work yet!! All of the applications open a draggable window. APPS brainrot.exe - just opens a draggable window with some text notes - a simple, but functional note taking app do not open - this is a minigame, when you open the app, it opens a window with a big red button that says do not click, if you click it, multiple error windows start popping up and you have to close all of them I’ve used Claude AI to help with design (colors/theme), help with scripting, because I am new to JavaScript and text generation for the errors minigame and boot screen.", "repo": "https://github.com/dominik-vrg/webOS", "demo": "https://dominik-vrg.github.io/brainrot-os/"}]...
|
[{"post_id": 20191, "ts": "202 [{"post_id": 20191, "ts": "2026-07-01T18:58:28Z", "hours": 6.4189, "text": "Brainrot OS - devlog #4 The OS got a full overhaul! UI has been fully reworked into a more aesthetic one Many new features, including a settings panel with design and other preferences, a spotlight-style search bar, a working calculator app, and a working dock that tracks if apps are running Check out the readme on github for more info. And be sure to try it out!"}, {"post_id": 11486, "ts": "2026-06-18T19:21:41Z", "hours": 1.1589, "text": "Brainrot OS - devlog #3 Added a simple notes app Added a game called do not open, when the user open it and clicks on the red button, many brainrot themed errors pop up, and the user has to exit all of them Added a boot animation when opening the webpage"}, {"post_id": 11365, "ts": "2026-06-18T16:21:12Z", "hours": 0.8794, "text": "Brainrot OS - devlog #2 Adjusted the top bar and its elements Added a year and date display Settings button (doesn’t do anything yet, will work on it soon) Made the icons movable, they snap to a grid on the desktop Made the first “app” window larger"}, {"post_id": 10811, "ts": "2026-06-17T18:53:15Z", "hours": 1.9356, "text": "Brainrot OS - devlog #1 Created the basic desktop Added a top bar with a working clock Added an icon (not movable yet) Added a draggable window"}]...
|
Title: Brainrot OS by @secret | Stardance
Devlogs Title: Brainrot OS by @secret | Stardance
Devlogs:
Brainrot OS - devlog #1 Created the basic desktop Added a top bar with a working clock Added an icon (not movable yet) Added a draggable window
Brainrot OS - devlog #2 Adjusted the top bar and its elements Added a year and date display Settings button (doesn’t do anything yet, will work on it soon) Made the icons movable, they snap to a grid on the desktop Made the first “app” window larger
Brainrot OS - devlog #3 Added a simple notes app Added a game called do not open, when the user open it and clicks on the red button, many brainrot themed errors pop up, and the user has to exit all of them Added a boot animation when opening the webpage
Brainrot OS - devlog #4 The OS got a full overhaul! UI has been fully reworked into a more aesthetic one Many new features, including a settings panel with design and other preferences, a spotlight-style search bar, a working calculator app, and a working dock that tracks if apps are running Check out the readme on github for more info. And be sure to try it out!
Ships:
Brainrot OS This is my web-based OS project for the Stardance Challange. My OS is called Brainrot OS. BOOT It features a meme/brainrot themed boot animation when opening the webpage. DESKTOP After the system “boots”, there are three applications on the desktop, but also a working clock and a date display. !!The setting feature doesn’t work yet!! All of the applications open a draggable window. APPS brainrot.exe - just opens a draggable window with some text notes - a simple, but functional note taking app do not open - this is a minigame, when you open the app, it opens a window with a big red button that says do not click, if you click it, multiple error windows start popping up and you have to close all of them I’ve used Claude AI to help with design (colors/theme), help with scripting, because I am new to JavaScript and text generation for the errors minigame and boot screen.
I present to you: Brainrot OS, now in it’s final form. It has many new features since the last ship. Completely overhauled UI, many-many new features like a calculator, settings, themes and wallpapers, a dock and a spotlight-styled search bar. Be sure to try it out!...
|
1793948030.4937763
|
1794034430.4937763
|
|
11972
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948031.7114341
|
1794812031.7114341
|
|
33808
|
Personal Website-AngelDoesThings by @angel_okeke47 Personal Website-AngelDoesThings by @angel_okeke475 | Stardance...
|
angel_okeke475
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-27T23:06:43Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal website to put all my projects in. The most challenging part of this process was using CSS and getting it consistent across all pages. The majority of the hours I spent on the project were positioning CSS components and making them consistent. All in all, I’m really proud of myself because this project helped me learn how to use Figma and two coding languages :)", "repo": "https://github.com/angelokeke475-code/AngelDoesStuff", "demo": "https://angelokeke475-code.github.io/AngelDoesStuff/"}]...
|
[{"post_id": 83426, "ts": "202 [{"post_id": 83426, "ts": "2026-10-27T23:00:17Z", "hours": 6.8061, "text": "Devlog #02 Hello everyone :) Long time no see! I’m proud to say I’ve completed my website (for now). New Features -Complete Engineering Page -Complete Music Page -Art Page -Links to my other portfolios and profiles"}, {"post_id": 28879, "ts": "2026-07-15T13:39:53Z", "hours": 1.0053, "text": "Devlog #01 Hello! This is my first ever devlog! I am currently working on my personal portfolio website because Google Sites isn’t cutting it for my engineering projects. Progress I learned how to use Figma and made a style guide and a mockup for my homepage (I’m still working out the Figma extenstion so the hours I spent aren’t reflected–it was a really long time :( ) I did the HTML course on FreeCodeCamp to get a better understanding of the language I coded the homepage and put placeholders based on the mockup Next Objectives Create the other pages in Figma Create their HTML place holders Start working on the CSS code Thanks for reading and stay tuned for more updates!"}]...
|
Title: Personal Website-AngelDoesThings by @angel_ Title: Personal Website-AngelDoesThings by @angel_okeke475 | Stardance
Devlogs:
Devlog #01 Hello! This is my first ever devlog! I am currently working on my personal portfolio website because Google Sites isn’t cutting it for my engineering projects. Progress I learned how to use Figma and made a style guide and a mockup for my homepage (I’m still working out the Figma extenstion so the hours I spent aren’t reflected–it was a really long time :( ) I did the HTML course on FreeCodeCamp to get a better understanding of the language I coded the homepage and put placeholders based on the mockup Next Objectives Create the other pages in Figma Create their HTML place holders Start working on the CSS code Thanks for reading and stay tuned for more updates!
Devlog #02 Hello everyone :) Long time no see! I’m proud to say I’ve completed my website (for now). New Features -Complete Engineering Page -Complete Music Page -Art Page -Links to my other portfolios and profiles
Ships:
I made a personal website to put all my projects in. The most challenging part of this process was using CSS and getting it consistent across all pages. The majority of the hours I spent on the project were positioning CSS components and making them consistent. All in all, I’m really proud of myself because this project helped me learn how to use Figma and two coding languages :)...
|
1793948032.59453
|
1794034432.59453
|
|
10751
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948033.7502491
|
1794812033.7502491
|
|
43202
|
The calculator by @Zake | Stardance
|
Zake
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: The calculator by @Zake | Stardance
|
1793948034.6053565
|
1794552834.6053565
|
|
10590
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948035.5011904
|
1794812035.5011904
|
|
43203
|
My own site! by @ameya_bonthu | Stardance
|
ameya_bonthu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @ameya_bonthu | Stardance
|
1793948036.3710449
|
1794552836.3710449
|
|
11207
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948037.2663882
|
1794812037.2663882
|
|
43206
|
safnware by @edison_ailey_1 | Stardance
|
edison_ailey_1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: safnware by @edison_ailey_1 | Stardance
|
1793948038.1312706
|
1794552838.1312706
|
|
13385
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793948039.017096
|
1794812039.017096
|