|
18751
|
StudySpark ✨ by @SrisWorld | Stardance
|
SrisWorld
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: StudySpark ✨ by @SrisWorld | Stardance
|
1793883122.4733021
|
1794487922.4733021
|
|
18752
|
My very own WebOS by @mohiyuddinmohammed | Stardan My very own WebOS by @mohiyuddinmohammed | Stardance...
|
mohiyuddinmohammed
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @mohiyuddinmohammed | Title: My very own WebOS by @mohiyuddinmohammed | Stardance...
|
1793418850.9992304
|
1794023650.9992304
|
|
18753
|
Untitled by @TechAchu | Stardance
|
TechAchu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @TechAchu | Stardance
|
1793804074.9596305
|
1794408874.9596305
|
|
18754
|
BLANK PROJECT by @datadecay | Stardance
|
datadecay
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BLANK PROJECT by @datadecay | Stardance
|
1793933594.9335518
|
1794538394.9335518
|
|
18755
|
My awesome macropad! by @paksultanqairat | Stardan My awesome macropad! by @paksultanqairat | Stardance...
|
paksultanqairat
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @paksultanqairat | Title: My awesome macropad! by @paksultanqairat | Stardance...
|
1793433120.6777205
|
1794037920.6777205
|
|
18756
|
My awesome macropad! by @CrimsonKing | Stardance
|
CrimsonKing
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @CrimsonKing | Star Title: My awesome macropad! by @CrimsonKing | Stardance...
|
1793303754.4970522
|
1793908554.4970522
|
|
18757
|
Frictionless by @uditha | Stardance
|
uditha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @uditha | Stardance
|
1793519813.8345456
|
1794124613.8345456
|
|
18758
|
Hackpad by @matt_choe2 | Stardance
|
matt_choe2
|
0
|
9.08
|
0
|
[]
|
[{"post_id": 76831, "ts": "202 [{"post_id": 76831, "ts": "2026-10-04T19:15:39Z", "hours": 1.2492, "text": "Hackpad Devlog 4 Submitted!! Forgot to record like 3 hours of work Made firmware - coded Bongo Cat that tracks global WPM for the OLED"}, {"post_id": 71604, "ts": "2026-09-21T04:30:49Z", "hours": 4.8014, "text": "Hackpad Devlog 3 finishing up the top half of the enclosure, just need to make something for the OLED adjusted some dimensions flipped resistors to backside of PCB"}, {"post_id": 67654, "ts": "2026-09-13T20:08:17Z", "hours": 1.8578, "text": "Hackpad Devlog 2 Imported models of PCB, OLED, switches, rotary encoder Edited bottom half of enclosure Working on top half (not pictured in full assembly photo)"}, {"post_id": 47780, "ts": "2026-08-15T23:11:50Z", "hours": 1.1764, "text": "Hackpad Devlog 1 (Should have more hours but didn’t use Lapse when designing the PCB) Started creating enclosure for PCB on Fusion Made basic extrudes, still deciding on heatset inserts vs threaded holes for top half"}]...
|
Title: Hackpad by @matt_choe2 | Stardance
Devlogs Title: Hackpad by @matt_choe2 | Stardance
Devlogs:
Hackpad Devlog 1 (Should have more hours but didn’t use Lapse when designing the PCB) Started creating enclosure for PCB on Fusion Made basic extrudes, still deciding on heatset inserts vs threaded holes for top half
Hackpad Devlog 2 Imported models of PCB, OLED, switches, rotary encoder Edited bottom half of enclosure Working on top half (not pictured in full assembly photo)
Hackpad Devlog 3 finishing up the top half of the enclosure, just need to make something for the OLED adjusted some dimensions flipped resistors to backside of PCB
Hackpad Devlog 4 Submitted!! Forgot to record like 3 hours of work Made firmware - coded Bongo Cat that tracks global WPM for the OLED...
|
1793292497.5108397
|
1793897297.5108397
|
|
18759
|
@AP.OS_com by @Aishani | Stardance
|
Aishani
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: @AP.OS_com by @Aishani | Stardance
|
1793890258.3387914
|
1794495058.3387914
|
|
18760
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793940749.8350043
|
1794804749.8350043
|
|
18761
|
Untitled project by @rivalz9028 | Stardance
|
rivalz9028
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @rivalz9028 | Stardance
|
1793397333.5191565
|
1794002133.5191565
|
|
18762
|
Untitled by @Rabii | Stardance
|
Rabii
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Rabii | Stardance
|
1793310925.7023594
|
1793915725.7023594
|
|
18763
|
War Games by @Tactor | Stardance
|
Tactor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: War Games by @Tactor | Stardance
|
1793915434.7236066
|
1794779434.7236066
|
|
18764
|
origamiking3612.com by @OrigamiKing3612 | Stardanc origamiking3612.com by @OrigamiKing3612 | Stardance...
|
OrigamiKing3612
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: origamiking3612.com by @OrigamiKing3612 | S Title: origamiking3612.com by @OrigamiKing3612 | Stardance...
|
1793570205.3053277
|
1794175005.3053277
|
|
18765
|
Cosmoscope by @naviAtHackClub | Stardance
|
naviAtHackClub
|
0
|
3.34
|
0
|
[]
|
[{"post_id": 27296, "ts": "202 [{"post_id": 27296, "ts": "2026-07-12T19:13:16Z", "hours": 3.3369, "text": "My Backend is Finallyyy Coming Together The biggest milestone I’ve reached since starting this project is getting the backend fully working . For this project, instead of one large file, I split each feature into its own module, so the app can independently fetch NASA’s Astronomy Picture of the Day, ISS coordinates, upcoming rocket launches, and more. I would say that writing the features was actually one of the easier parts of my project. On the other hand, parsing through what the API requests returned and seeing the data I wanted was sooooo tedious . I probably spent a good hour just doing that. I also had a lot of trouble getting everything to communicate properly. I spent much longer than I thought I would tracking down import errors, reorganizing project structure, and adjusting each and every module to make sure it returned data in a consistent format . It definitely wasn’t the most fun , but it was definitely satisfying seeing a clean codebase that is a lot cleaner and easier to build upon . A decision I’m particularly happy about was calculating the moon phase locally instead of relying on another API. It not only tested my math skills , but it also saved API requests , meaning this feature will always work without worrying about rate limits . The next stage of my project is moving to the frontend . Right now the page has all the possibility for function , but I want to turn into something that’s actually fun to explore with smooth transitions, full screen sections, and interactive animations instead of just a long page of text . In all honesty, I completely forgot about devlogs, which is partly why this one was so long. In the future I will be updating more regularly. See you guys later! P.S. I would really appreciate any tips you guys have for me :D"}]...
|
Title: Cosmoscope by @naviAtHackClub | Stardance
Title: Cosmoscope by @naviAtHackClub | Stardance
Devlogs:
My Backend is Finallyyy Coming Together The biggest milestone I’ve reached since starting this project is getting the backend fully working . For this project, instead of one large file, I split each feature into its own module, so the app can independently fetch NASA’s Astronomy Picture of the Day, ISS coordinates, upcoming rocket launches, and more. I would say that writing the features was actually one of the easier parts of my project. On the other hand, parsing through what the API requests returned and seeing the data I wanted was sooooo tedious . I probably spent a good hour just doing that. I also had a lot of trouble getting everything to communicate properly. I spent much longer than I thought I would tracking down import errors, reorganizing project structure, and adjusting each and every module to make sure it returned data in a consistent format . It definitely wasn’t the most fun , but it was definitely satisfying seeing a clean codebase that is a lot cleaner and easier to build upon . A decision I’m particularly happy about was calculating the moon phase locally instead of relying on another API. It not only tested my math skills , but it also saved API requests , meaning this feature will always work without worrying about rate limits . The next stage of my project is moving to the frontend . Right now the page has all the possibility for function , but I want to turn into something that’s actually fun to explore with smooth transitions, full screen sections, and interactive animations instead of just a long page of text . In all honesty, I completely forgot about devlogs, which is partly why this one was so long. In the future I will be updating more regularly. See you guys later! P.S. I would really appreciate any tips you guys have for me :D...
|
1793965747.9501653
|
1794570547.9501653
|
|
18766
|
sub 250g RC plane by @Gibson | Stardance
|
Gibson
|
0
|
1.85
|
0
|
[]
|
[{"post_id": 10772, "ts": "202 [{"post_id": 10772, "ts": "2026-06-17T18:02:46Z", "hours": 0.6, "text": "I have made a cradle that the plane can sit on during take off and the cradle will be left behind after take off to minimise weight and drag during flight. The cradle is quite simple and chunky because it will be discarded after take off so there is no point making it aero, and I don’t want it to break so it is designed to be chunky."}, {"post_id": 9950, "ts": "2026-06-16T14:06:17Z", "hours": 1.2522, "text": "resoldered a faulty servo and built the wings . I have been working on this project before I joined hackclub, so here is some background info on my plane. . I designed this plane on fusion 360, it took probably at least 60ish hours including all the tests and iterations, but I don’t know how to upload that so that 60 hours down the drain. This is the 7th iteration after doing countless tests on cfd. . My initial goal was 100kph, but I decided to go even bigger after doing cfd testing (that took absolutely ages on my laptop). I designed the wings to be printed in spiral vase mode which was also a pain cuz the slicer just kept putting holes in my wing which is super annoying. There are still some jagged edges on the trailing edge, but I have given up with trying to fix that. The fixed model to hair loss ratio was just not worth it. . The tail was designed to have built in hinges which worked surprisingly well with just PLA. they just need a bit of a wiggle and they worked fine (slightly stiff but still usable). . I printed the whole plane in LW PLA and the wing root plus the tail in normal PLA for a bit more strength, but looking at it; I think the wing root would work just fine in LW PLA and that would save another 10 grams. . The motor I am using right now is not great for the purpose of this aircraft, because it is designed for efficiency, but it is the only one I have lying around right now. I will swap it out with something more suitable for this aircraft in the future when further developing this plane."}]...
|
Title: sub 250g RC plane by @Gibson | Stardance
D Title: sub 250g RC plane by @Gibson | Stardance
Devlogs:
resoldered a faulty servo and built the wings . I have been working on this project before I joined hackclub, so here is some background info on my plane. . I designed this plane on fusion 360, it took probably at least 60ish hours including all the tests and iterations, but I don’t know how to upload that so that 60 hours down the drain. This is the 7th iteration after doing countless tests on cfd. . My initial goal was 100kph, but I decided to go even bigger after doing cfd testing (that took absolutely ages on my laptop). I designed the wings to be printed in spiral vase mode which was also a pain cuz the slicer just kept putting holes in my wing which is super annoying. There are still some jagged edges on the trailing edge, but I have given up with trying to fix that. The fixed model to hair loss ratio was just not worth it. . The tail was designed to have built in hinges which worked surprisingly well with just PLA. they just need a bit of a wiggle and they worked fine (slightly stiff but still usable). . I printed the whole plane in LW PLA and the wing root plus the tail in normal PLA for a bit more strength, but looking at it; I think the wing root would work just fine in LW PLA and that would save another 10 grams. . The motor I am using right now is not great for the purpose of this aircraft, because it is designed for efficiency, but it is the only one I have lying around right now. I will swap it out with something more suitable for this aircraft in the future when further developing this plane.
I have made a cradle that the plane can sit on during take off and the cradle will be left behind after take off to minimise weight and drag during flight. The cradle is quite simple and chunky because it will be discarded after take off so there is no point making it aero, and I don’t want it to break so it is designed to be chunky....
|
1793339805.661299
|
1793944605.661299
|
|
18767
|
Untitled by @A_L_E_K_S_E_Y | Stardance
|
A_L_E_K_S_E_Y
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @A_L_E_K_S_E_Y | Stardance
|
1793479786.1713645
|
1794084586.1713645
|
|
18768
|
My very own WebOS by @jaigopaldas6 | Stardance
|
jaigopaldas6
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T22:01:47Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a WebOS which has a native AI assistant. The primary challenge was the iframe limitations that google has, because i wanted to use google workspace apps such as google drive or google docs, these limitations prevented me from doing so, so I had to make my own customs apps to replace them. What users should know: - the AI assistant needs your own API key, you can use either a anthropic or a openAI key, if you don’t have access to one, no worries as the AI assistant is the primary focus of the OS, it’s just a cool edition. another thing is that the app does have a password setting, but you can add your own custom password, so when you first login, it will be without a password until you set one", "repo": "https://github.com/X452fire/star-dance-challenge", "demo": "https://clinquant-crostata-7d6e7b.netlify.app/"}]...
|
[{"post_id": 10253, "ts": "202 [{"post_id": 10253, "ts": "2026-06-16T21:52:22Z", "hours": 0.9097, "text": "changed up the features and added a lock screen and the top bar, removed the google OAuth and workspace app’s as they weren’t functional due to iframe limitations, made custom replacement apps for the google workspace apps."}, {"post_id": 9709, "ts": "2026-06-16T03:51:17Z", "hours": 0.5106, "text": "working on the account settings and user login with the google OAuth"}, {"post_id": 9349, "ts": "2026-06-15T18:05:09Z", "hours": 0.8639, "text": "I’m working on the OS front and backend, that runs in the users local browser, coded in html"}]...
|
Title: My very own WebOS by @jaigopaldas6 | Starda Title: My very own WebOS by @jaigopaldas6 | Stardance
Devlogs:
I’m working on the OS front and backend, that runs in the users local browser, coded in html
working on the account settings and user login with the google OAuth
changed up the features and added a lock screen and the top bar, removed the google OAuth and workspace app’s as they weren’t functional due to iframe limitations, made custom replacement apps for the google workspace apps.
Ships:
I made a WebOS which has a native AI assistant. The primary challenge was the iframe limitations that google has, because i wanted to use google workspace apps such as google drive or google docs, these limitations prevented me from doing so, so I had to make my own customs apps to replace them. What users should know: - the AI assistant needs your own API key, you can use either a anthropic or a openAI key, if you don’t have access to one, no worries as the AI assistant is the primary focus of the OS, it’s just a cool edition. another thing is that the app does have a password setting, but you can add your own custom password, so when you first login, it will be without a password until you set one...
|
1793822130.4251523
|
1793908530.4251523
|
|
18769
|
Dungeon Python game by @jshrihankumar | Stardance
|
jshrihankumar
|
1
|
11.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T15:19:34Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a 2D dungeon crawler game using Python and Pygame. In the game, the player moves through a randomly generated dungeon made of rooms and corridors. The goal is to reach the exit while avoiding enemies and collecting healing items. The dungeon changes every time you play, so each run feels different. The game also includes basic enemy AI, where enemies either wander around or chase the player if they get close. The hardest part of making this game was the dungeon generation system. At first, a lot of the maps I made had problems like rooms not connecting or the exit being unreachable. It took a lot of testing and fixing to make sure every dungeon is actually playable. Another challenge was the enemy AI because I didn’t use advanced pathfinding, so I had to make a simpler system that still feels like the enemies are chasing you. Balancing the game was also tricky because changing small things like damage or enemy count could make the game too easy or too hard. I’m proud that I was able to build a full working game that actually feels different every time you play. The dungeon generation works, the enemies behave in a somewhat smart way, and there are clear win and lose conditions. I also like that I kept everything in one Python file but still made it work as a complete game. To test the game, use W, A, S, D to move around. Try to avoid the red enemies because they will damage you if they touch you. Pick up green items to heal yourself. The goal is to reach the yellow/gold exit tile to win. If your health drops to zero, you lose and can restart the game.", "repo": "https://github.com/jshrihankumar-dev/dungeon", "demo": "https://dungeon-crawler-master--shrihanjadigam.replit.app/"}]...
|
[{"post_id": 8870, "ts": "2026 [{"post_id": 8870, "ts": "2026-06-14T19:26:48Z", "hours": 11.4539, "text": "Devlog: Building a Roguelike RPG in Pure Python The original goal was pretty simple: build a fully playable terminal roguelike from scratch in one Python file. No game engine, no outside frameworks, just the standard library and a lot of free time. Most of the systems worked fine on their own for a while. Combat felt decent, dungeon generation was working, and items loaded correctly. But getting everything to actually work together was way harder than expected. FOV, enemy AI, status effects, and saving all needed to talk to each other and there were a lot of moments where killing an enemy would crash the save, or a spell would try to hit something that didn’t exist anymore. That couldn’t stay broken once boss fights and multi-floor progression needed to actually function. So most of the work became just making all the pieces cooperate reliably. The Goal For the game to actually feel good: Procedural dungeons should feel different every single run Combat should have real depth, resistances, crits, status effects and all that Enemies should do more than just walk straight at you The save system should handle any game state without breaking Bosses should actually feel scary, not just be big HP sponges For the code side: Everything needs to serialize to and from JSON cleanly No weird dependency loops between the combat engine, dungeon, and player What Changed The dungeon generator now uses BSP room placement instead of just scattering rooms randomly. Enemy AI got split into 9 different behavior types including chase, patrol, ranged, ambush, support, berserk, flee, guard, and idle, instead of one giant mess of if statements. Status effects now tick on both the player and enemies every turn separately. I also completely rewrote the FOV using shadowcasting across all 8 octants which honestly took way longer than it should have. What Actually Broke Pretty much everything had issues at some point. The shadowcasting FOV has a bug on the northeast octant where some walls stay invisible when they should be visible. Still figuring that one out. Saving in the middle of combat sometimes drops enemy status effect potency on reload. The duration saves fine but potency resets to 1 for some reason. The floor 6 shop occasionally spawns completely empty if the floor RNG hits a certain seed. No idea why yet. Boss loot is guaranteed to drop but sometimes lands on a wall tile if the boss dies in a bad spot. What’s Next Fixing the FOV bug, patching the save and load status issue, and adding actual targeting for spells so they stop just auto hitting the nearest visible enemy. After that probably more boss phases and a high score system. It’s playable and honestly pretty fun. Just not finished yet."}]...
|
Title: Dungeon Python game by @jshrihankumar | Sta Title: Dungeon Python game by @jshrihankumar | Stardance
Devlogs:
Devlog: Building a Roguelike RPG in Pure Python The original goal was pretty simple: build a fully playable terminal roguelike from scratch in one Python file. No game engine, no outside frameworks, just the standard library and a lot of free time. Most of the systems worked fine on their own for a while. Combat felt decent, dungeon generation was working, and items loaded correctly. But getting everything to actually work together was way harder than expected. FOV, enemy AI, status effects, and saving all needed to talk to each other and there were a lot of moments where killing an enemy would crash the save, or a spell would try to hit something that didn’t exist anymore. That couldn’t stay broken once boss fights and multi-floor progression needed to actually function. So most of the work became just making all the pieces cooperate reliably. The Goal For the game to actually feel good: Procedural dungeons should feel different every single run Combat should have real depth, resistances, crits, status effects and all that Enemies should do more than just walk straight at you The save system should handle any game state without breaking Bosses should actually feel scary, not just be big HP sponges For the code side: Everything needs to serialize to and from JSON cleanly No weird dependency loops between the combat engine, dungeon, and player What Changed The dungeon generator now uses BSP room placement instead of just scattering rooms randomly. Enemy AI got split into 9 different behavior types including chase, patrol, ranged, ambush, support, berserk, flee, guard, and idle, instead of one giant mess of if statements. Status effects now tick on both the player and enemies every turn separately. I also completely rewrote the FOV using shadowcasting across all 8 octants which honestly took way longer than it should have. What Actually Broke Pretty much everything had issues at some point. The shadowcasting FOV has a bug on the northeast octant where some walls stay invisible when they should be visible. Still figuring that one out. Saving in the middle of combat sometimes drops enemy status effect potency on reload. The duration saves fine but potency resets to 1 for some reason. The floor 6 shop occasionally spawns completely empty if the floor RNG hits a certain seed. No idea why yet. Boss loot is guaranteed to drop but sometimes lands on a wall tile if the boss dies in a bad spot. What’s Next Fixing the FOV bug, patching the save and load status issue, and adding actual targeting for spells so they stop just auto hitting the nearest visible enemy. After that probably more boss phases and a high score system. It’s playable and honestly pretty fun. Just not finished yet.
Ships:
I made a 2D dungeon crawler game using Python and Pygame. In the game, the player moves through a randomly generated dungeon made of rooms and corridors. The goal is to reach the exit while avoiding enemies and collecting healing items. The dungeon changes every time you play, so each run feels different. The game also includes basic enemy AI, where enemies either wander around or chase the player if they get close. The hardest part of making this game was the dungeon generation system. At first, a lot of the maps I made had problems like rooms not connecting or the exit being unreachable. It took a lot of testing and fixing to make sure every dungeon is actually playable. Another challenge was the enemy AI because I didn’t use advanced pathfinding, so I had to make a simpler system that still feels like the enemies are chasing you. Balancing the game was also tricky because changing small things like damage or enemy count could make the game too easy or too hard. I’m proud that I was able to build a full working game that actually feels different every time you play. The dungeon generation works, the enemies behave in a somewhat smart way, and there are clear win and lose conditions. I also like that I kept everything in one Python file but still made it work as a complete game. To test the game, use W, A, S, D to move around. Try to avoid the red enemies because they will damage you if they touch you. Pick up green items to heal yourself. The goal is to reach the yellow/gold exit tile to win. If your health drops to zero, you lose and can restart the game....
|
1793940684.717731
|
1794027084.717731
|
|
18770
|
My first slack bot! by @TnkerLabz | Stardance
|
TnkerLabz
|
0
|
2.86
|
0
|
[]
|
[{"post_id": 22344, "ts": "202 [{"post_id": 22344, "ts": "2026-07-04T19:27:01Z", "hours": 2.8558, "text": "GEM 1.0 is officially completed after approximately 4 hours. The guide was extremely helpful, though my browser is full of questions like “How do I find my public key?”😂. In the end, it was all worth it, especially since the end product is my first-ever Slack bot that can respond to messages 24/7 (thanks to NEST 🙏). Now GEM responds to 8 different types of commands, including a /gem-help command that will give you a guide to each command and what they’d do! At first, I didn’t know what to expect from this project, but later I would learn that that’s kind of the point. It’s a great project to familiarize yourself with Stardance and the different apps connected to it, and I can’t wait to do more of these projects. Slowly but surely, navigating these apps becomes more fluid, and my technical skills improve as I go. Overall Ranking: ⭐⭐⭐ Future Plans: I’d love to continue and build on this project overtime, so that GEM becomes my personal AI assistant, similar to Tony Stark’s JARVIS, having it respond to a wider variety of commands, programming a command-by-voice option, and giving it a personality. Follow me here and on Instagram as @TnkerLabz for more detailed updates! I’ll be posting more progressive and detailed updates on my next project 👀. Coming soon… my first hardware project"}]...
|
Title: My first slack bot! by @TnkerLabz | Stardan Title: My first slack bot! by @TnkerLabz | Stardance
Devlogs:
GEM 1.0 is officially completed after approximately 4 hours. The guide was extremely helpful, though my browser is full of questions like “How do I find my public key?”😂. In the end, it was all worth it, especially since the end product is my first-ever Slack bot that can respond to messages 24/7 (thanks to NEST 🙏). Now GEM responds to 8 different types of commands, including a /gem-help command that will give you a guide to each command and what they’d do! At first, I didn’t know what to expect from this project, but later I would learn that that’s kind of the point. It’s a great project to familiarize yourself with Stardance and the different apps connected to it, and I can’t wait to do more of these projects. Slowly but surely, navigating these apps becomes more fluid, and my technical skills improve as I go. Overall Ranking: ⭐⭐⭐ Future Plans: I’d love to continue and build on this project overtime, so that GEM becomes my personal AI assistant, similar to Tony Stark’s JARVIS, having it respond to a wider variety of commands, programming a command-by-voice option, and giving it a personality. Follow me here and on Instagram as @TnkerLabz for more detailed updates! I’ll be posting more progressive and detailed updates on my next project 👀. Coming soon… my first hardware project...
|
1793962244.746536
|
1794567044.746536
|
|
18771
|
BigBrother Bot by @jachym_fukal | Stardance
|
jachym_fukal
|
1
|
25.0
|
395
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T11:15:10Z", "hours": 25.0, "multiplier": 15.87, "payout": 395, "blessing": "neutral", "text": "BigBrother is a 1984-themed Slack bot that turns your workspace into Oceania. It runs five modules: Surveillance tracks message activity across channels and maintains a leaderboard of who’s been most “active” (watched). Telescreen broadcasts Orwellian announcements to the workspace. Police runs sentiment analysis on messages and flags thoughtcrime — positivity is suspicious. Truth rewrites real news headlines in Party-approved doublespeak using NewsAPI + Groq. DM lets you talk directly to Big Brother, who responds in full authoritarian character via LLM. Built with Node.js + Bolt.js over Hack Club Stardance. Big Brother is always watching — especially in #1984.", "repo": "https://github.com/Projachmann/Slack_Bot", "demo": "https://hackclub.enterprise.slack.com/archives/C09F6AAP1PF"}]...
|
[{"post_id": 22745, "ts": "202 [{"post_id": 22745, "ts": "2026-07-05T10:14:25Z", "hours": 0.5808, "text": "Wrote the README and stopped the prerequisites file from lying about itself The repo had no README and prerequisites.md was three stray lines ( axios , node-cron , fs ) that didn’t actually match what package.json declared or what main.js fails fast on at boot. Rewrote prerequisites.md as a pure library install reference — packages, versions, and one npm install command — then wrote a README that follows the structure the Stardance judges actually want: one-sentence description, hero image slot, a try-it link, quick start, features, local setup, and a “how it works” section that earns its keep by naming real decisions (Socket Mode over HTTP so it runs behind any network, self-rescheduling crons with re-rolling fire times, file-locked JSON as a tiny DB instead of SQLite, sequential Groq calls to dodge rate limits). The friction was the Node version. There’s no engines field in package.json and no .nvmrc , so I didn’t want to just assert “Node 18+” without evidence. Grepping package-lock.json for \"engines\" turned up ~100 matches and the binding constraint is @slack/bolt ‘s transitive deps all declaring \"node\": \">=18\" — so that’s the honest floor, stated as such. Also swapped the watched channel ID in Code/main.js from C0BBBCER55W to C09F6AAP1PF to match the workspace in the invite link I was handed. Caught one real issue while reviewing: the “Try it” link was a channel permalink ( /archives/C09F6... ), which a non-member hits a sign-in wall on, flagged it, left it in since it’s an internal members link."}, {"post_id": 22442, "ts": "2026-07-04T22:13:14Z", "hours": 2.0994, "text": "Made Big Brother stop lying about your loyalty score The /bigbrother-loyalty command was silently corrupting its own scoreboard. Every call overwrote the user’s stored score with whatever the current calculation produced — which meant a citizen who hit 200 points last week would see their displayed rank drop to 50 after a quiet few days. The scoreboard was a ledger of “most recent” instead of “best ever”, which is the opposite of how a loyalty panopticon should work. The fix in Code/Surveillance.js was small but mattered: scoreboard() now only writes when the new score strictly beats the stored high, and stamps an achievedAt ISO timestamp on each new record. While in there, I also wired /bigbrother-scoreboard to refresh the caller’s score before displaying, so running it actually updates your entry — previously it just read stale data. The refresh is wrapped in try/catch so a transient Slack or HuggingFace failure doesn’t break the leaderboard read. That scoreboard bug was the tip of a much longer audit. The same session surfaced and fixed ~50 defects across the codebase: Surveillance.presenceCheck was returning undefined (not 0 ) on unknown presence values, producing NaN loyalty scores that then broke the sort; Telescreen.propaganda() would crash with TypeError if broadcasts.json was empty; Truth.getNews() called .map() on a potentially-missing articles array; concurrent readFile / writeFile pairs on the same JSON file were last-writer-wins. Added a 12-line per-file async mutex in Code/lock.js and wrapped every read-merge-write critical section. Also added .env validation at boot — previously a missing HF_TOKEN would surface as an undefined auth header 45 minutes into a Slack session instead of failing at startup."}, {"post_id": 22127, "ts": "2026-07-04T12:55:36Z", "hours": 1.0925, "text": "Added DM support: BigBrother can now talk back Users can now DM the bot and get a response in character as BigBrother, powered by Llama 3.3 on Groq. The bot keeps a per-user conversation history (capped at 30 messages) so it actually remembers what you said earlier in the conversation. History lives in memory, so it resets on restart, intentional, didn’t feel worth the complexity of persisting it. The interesting part was Slack’s permission system. Adding the im:history , im:read , and im:write scopes wasn’t enough on its own, you also need to separately subscribe to the message.im event under Event Subscriptions. The scopes let the bot act on DMs, the event subscription is what actually delivers them. Spent a while staring at logs with no “DM received” entries before finding that."}, {"post_id": 19901, "ts": "2026-07-01T10:23:39Z", "hours": 0.3794, "text": "Replaced every console.log in the bot with a leveled logger. The old setup was five files each printing things like “Message received!”, “Responding…”, and “Messages saved!” with no way to tell which file was talking or which run produced which line. Replaced it all with a single Code/Logger.js that adds timestamps, severity ( debug / info / warn / error ), a subsystem tag per file, and structured metadata. Errors now print a full stack trace on a second dimmed line instead of [object Object] . The visual difference is the whole point. Before, /bigbrother-loyalty produced four console.log lines with no correlation. After, it produces one timestamped line per stage — fetch, score, scoreboard write — and you can grep by subsystem or level. The interesting bug: my first Logger.js had a guard that re-checked whether meta was undefined, but I also had a fallback that promoted a non- Error second argument into meta . The two branches collided and swallowed the error stack entirely. Caught it in a two-line test snippet before staging, would have been invisible until the first real API failure. Also stopped logging the full Hugging Face response on every sentiment check. Now it only prints the per-label scores rounded to three decimals, same diagnostic value, way less noise."}, {"post_id": 19331, "ts": "2026-06-30T16:42:16Z", "hours": 3.2917, "text": "Two Minute Hate, now interactive Built a /bigbrother-hate command for the Slack bot that escalates the existing 11:00 Two Minute Hate through 3 stages (Whisper → Roar → Frenzy) based on call count, with in-character stage-transition announcements and increasing-intensity bot posts. The interesting part was the difficulty curve. Base thresholds are 5 and 15 calls, but they get multiplied each day by yesterday / 7-day-mean, clamped 0.5–2.0. So if Monday had 20 calls and Tuesday only 15, Wednesday’s threshold drops to ~62% of the base — easier to escalate on quiet days. First pass forgot to reset usageCount and stage on the daily recompute, so the bot stayed pinned at Frenzy forever after one good session. Caught it on the second test run. Wired it to the existing 11:00–11:02 cron window so calls outside it get an in-character refusal. Also added hateLevel.json to .gitignore since it’s pure runtime state. Next: DMing the bot, probably tackling that before adding more interactive bits."}, {"post_id": 15891, "ts": "2026-06-25T20:30:07Z", "hours": 1.0044, "text": "The /bigbrother-loyalty command now doubles as a live leaderboard, every call re-ranks and displays the top 10 most loyal Party members. Plugging into the existing loyalty score pipeline meant the scoreboard itself was straightforward to build, but getting the Slack Block Kit formatting right for a clean ranked list took longer than expected. Ended up iterating through a few layouts before settling on one that doesn’t look terrible."}, {"post_id": 15796, "ts": "2026-06-25T17:55:42Z", "hours": 1.48, "text": "Loyalty scoring now factors in message sentiment. I added positive/negative sentiment saving by reusing the existing 7-day message cache logic, then wired the Surveillance module to read those sentiment files the same way it already reads other JSON, no new infrastructure needed. The score itself now reflects not just how active a user is, but whether they’re saying good or bad things about the Party."}, {"post_id": 15297, "ts": "2026-06-24T20:53:30Z", "hours": 1.2728, "text": "Stopped reloading 10 channels every time someone checks their loyalty score The surveillance system was fetching all messages from all 10 channels on every single /bigbrother-loyalty call. That meant a ~ 50 second wait every time. Not great when Big Brother is supposed to feel instant and omniscient. The fix: the bot now keeps a local JSON file of all messages. When someone requests their score, it only fetches messages newer than the newest one already saved, then deletes anything older than 7 days to keep the file lean. On top of that, a cron job rewrites the whole file once a day so it never drifts out of sync. Score lookups that took a minute now finish in a couple seconds. The panopticon is finally fast enough to be scary."}, {"post_id": 15241, "ts": "2026-06-24T19:04:42Z", "hours": 1.0067, "text": "Get more than one 1984 themed headline The /bigbrother-news command could technically accept a count, but it always returned exactly one rewrite no matter what you passed. First, rewriteHeadline was looping over the headlines array but always sending headline[0] to Groq, so it was rewriting the same headline count times. Second, the function returned an array but respond() was getting that array passed directly as text, which Slack rejects with a 500 because it expects a string. Fixed both, headline[i] in the loop, .join(\"\\n\") before responding. Also added a .replace(/^[\"\"]|[\"\"]$/g, \"\") strip because the model randomly decides whether to wrap its output in quotes or not and I’d rather it just didn’t. The original code also only ever called rewriteHeadline with a single headline and had no loop at all, scaling it up to handle multiple rewrites sequentially meant restructuring the whole function."}, {"post_id": 14697, "ts": "2026-06-23T21:56:43Z", "hours": 1.3711, "text": "Added the Ministry of Truth module Fetches real news headlines via NewsAPI, pipes them through Llama 3.3 on Groq, and rewrites them as state propaganda. The results are genuinely unsettling because they’re based on actual news. A Tesla autopilot crash became “Citizen Misalignment with Vehicle Guidance Systems Results in Regrettable Isolated Incident in Texas Residential Sector” which I think is funnier than anything I could have written myself. The bug that got me: I passed the respond function itself as the text value instead of the actual result. Slack received an empty object, returned invalid_payload , and I spent way too long staring at the Groq response before noticing the slash command handler was the problem, not the API call."}, {"post_id": 13886, "ts": "2026-06-22T19:11:41Z", "hours": 1.8572, "text": "Built the Thought Police module for my 1984 themed Slack bot Added a Thought Police module that watches messages in a specific channel, scores their sentiment using HuggingFace’s RoBERTa model, and fires a Big Brother-themed response if the message is negative or positive enough. The bot replies in-thread which feels way more unsettling than posting standalone, like it’s whispering directly at you. Hit a bunch of friction getting here though. The Perspective API I originally planned to use got sunset, then the HuggingFace inference endpoint URL changed mid-build and started returning ENOTFOUND , turned out the old api-inference.huggingface.co domain was dead and needed to be swapped to router.huggingface.co . Then the response labels came back lowercase ( negative instead of Negative ) which broke the score parsing silently, the bot was running but returning undefined for everything."}, {"post_id": 13233, "ts": "2026-06-21T17:45:42Z", "hours": 1.8667, "text": "Automated propaganda broadcasts for my 1984-themed Slack bot, random timing every day, plus a daily Two Minutes Hate at 11:00. Imagine you are the head of Propaganda of an authoritarian state and you need to automate propaganda releases. Well, this is how I felt today after trying to automate this exact process. In the book 1984 propaganda is everywhere, so I replicated that. The hardest part for me was the writing of the propaganda. This is because I, as unexpected as it sounds, am not the head of Propaganda in an authoritarian state, so after around 10 minutes I asked my good friend Claude if he could write me some propaganda. Claude generated 50 different messages. If anybody has some propaganda messages I could use just DM me on Slack or write it in the comments! The next step for me is to become the head of police and automate the flagging of negative sentiments."}, {"post_id": 13042, "ts": "2026-06-21T10:16:59Z", "hours": 1.3825, "text": "Slash commands in Slack don’t convert @mentions to user IDs and I learned that the hard way. My /bigbrother-loyalty command was getting @jachym.fukal as plain text instead of <@U09L3LVPJ82> , so the regex I wrote was completely useless. The workspace also has 30k+ users so just fetching the whole user list isn’t an option either. For now the command just takes a raw user ID, which isn’t pretty but works. Next step is figuring out a cleaner way to handle this."}, {"post_id": 12760, "ts": "2026-06-20T21:25:02Z", "hours": 1.5308, "text": "Sieving through all channels would have taken hours. Now I am only using 10, which are the most used ones on the Hackclub workspace. So I wrote a code that scans these 10 channels for messages of a specific user, which I want to use for a loyalty score in the future. But the problem isn’t completely solved, because the script needs around 50 seconds to look through these 10 channels. So now I am in a bit of a pickle. I am thinking about saving the data from the last scan and then only retrieving new data from the channels."}, {"post_id": 12445, "ts": "2026-06-20T09:39:50Z", "hours": 4.9919, "text": "Added the first version of the bot’s surveillance system. My original plan was to scan every channel in the Hack Club workspace weekly and fetch message history from all channels whenever a slash command was used. After looking into it, I realized the workspace has so many channels that a single command could take hours to finish, making the approach impractical. For now, I switched to a manually curated list of channels that the bot will monitor while I investigate a more scalable solution."}]...
|
Title: BigBrother Bot by @jachym_fukal | Stardance Title: BigBrother Bot by @jachym_fukal | Stardance
Devlogs:
Added the first version of the bot’s surveillance system. My original plan was to scan every channel in the Hack Club workspace weekly and fetch message history from all channels whenever a slash command was used. After looking into it, I realized the workspace has so many channels that a single command could take hours to finish, making the approach impractical. For now, I switched to a manually curated list of channels that the bot will monitor while I investigate a more scalable solution.
Sieving through all channels would have taken hours. Now I am only using 10, which are the most used ones on the Hackclub workspace. So I wrote a code that scans these 10 channels for messages of a specific user, which I want to use for a loyalty score in the future. But the problem isn’t completely solved, because the script needs around 50 seconds to look through these 10 channels. So now I am in a bit of a pickle. I am thinking about saving the data from the last scan and then only retrieving new data from the channels.
Slash commands in Slack don’t convert @mentions to user IDs and I learned that the hard way. My /bigbrother-loyalty command was getting @jachym.fukal as plain text instead of <@U09L3LVPJ82> , so the regex I wrote was completely useless. The workspace also has 30k+ users so just fetching the whole user list isn’t an option either. For now the command just takes a raw user ID, which isn’t pretty but works. Next step is figuring out a cleaner way to handle this.
Automated propaganda broadcasts for my 1984-themed Slack bot, random timing every day, plus a daily Two Minutes Hate at 11:00. Imagine you are the head of Propaganda of an authoritarian state and you need to automate propaganda releases. Well, this is how I felt today after trying to automate this exact process. In the book 1984 propaganda is everywhere, so I replicated that. The hardest part for me was the writing of the propaganda. This is because I, as unexpected as it sounds, am not the head of Propaganda in an authoritarian state, so after around 10 minutes I asked my good friend Claude if he could write me some propaganda. Claude generated 50 different messages. If anybody has some propaganda messages I could use just DM me on Slack or write it in the comments! The next step for me is to become the head of police and automate the flagging of negative sentiments.
Built the Thought Police module for my 1984 themed Slack bot Added a Thought Police module that watches messages in a specific channel, scores their sentiment using HuggingFace’s RoBERTa model, and fires a Big Brother-themed response if the message is negative or positive enough. The bot replies in-thread which feels way more unsettling than posting standalone, like it’s whispering directly at you. Hit a bunch of friction getting here though. The Perspective API I originally planned to use got sunset, then the HuggingFace inference endpoint URL changed mid-build and started returning ENOTFOUND , turned out the old api-inference.huggingface.co domain was dead and needed to be swapped to router.huggingface.co . Then the response labels came back lowercase ( negative instead of Negative ) which broke the score parsing silently, the bot was running but returning undefined for everything.
Added the Ministry of Truth module Fetches real news headlines via NewsAPI, pipes them through Llama 3.3 on Groq, and rewrites them as state propaganda. The results are genuinely unsettling because they’re based on actual news. A Tesla autopilot crash became “Citizen Misalignment with Vehicle Guidance Systems Results in Regrettable Isolated Incident in Texas Residential Sector” which I think is funnier than anything I could have written myself. The bug that got me: I passed the respond function itself as the text value instead of the actual result. Slack received an empty object, returned invalid_payload , and I spent way too long staring at the Groq response before noticing the slash command handler was the problem, not the API call.
Get more than one 1984 themed headline The /bigbrother-news command could technically accept a count, but it always returned exactly one rewrite no matter what you passed. First, rewriteHeadline was looping over the headlines array but always sending headline[0] to Groq, so it was rewriting the same headline count times. Second, the function returned an array but respond() was getting that array passed directly as text, which Slack rejects with a 500 because it expects a string. Fixed both, headline[i] in the loop, .join("\n") before responding. Also added a .replace(/^[""]|[""]$/g, "") strip because the model randomly decides whether to wrap its output in quotes or not and I’d rather it just didn’t. The original code also only ever called rewriteHeadline with a single headline and had no loop at all, scaling it up to handle multiple rewrites sequentially meant restructuring the whole function.
Stopped reloading 10 channels every time someone checks their loyalty score The surveillance system was fetching all messages from all 10 channels on every single /bigbrother-loyalty call. That meant a ~ 50 second wait every time. Not great when Big Brother is supposed to feel instant and omniscient. The fix: the bot now keeps a local JSON file of all messages. When someone requests their score, it only fetches messages newer than the newest one already saved, then deletes anything older than 7 days to keep the file lean. On top of that, a cron job rewrites the whole file once a day so it never drifts out of sync. Score lookups that took a minute now finish in a couple seconds. The panopticon is finally fast enough to be scary.
Loyalty scoring now factors in message sentiment. I added positive/negative sentiment saving by reusing the existing 7-day message cache logic, then wired the Surveillance module to read those sentiment files the same way it already reads other JSON, no new infrastructure needed. The score itself now reflects not just how active a user is, but whether they’re saying good or bad things about the Party.
The /bigbrother-loyalty command now doubles as a live leaderboard, every call re-ranks and displays the top 10 most loyal Party members. Plugging into the existing loyalty score pipeline meant the scoreboard itself was straightforward to build, but getting the Slack Block Kit formatting right for a clean ranked list took longer than expected. Ended up iterating through a few layouts before settling on one that doesn’t look terrible.
Two Minute Hate, now interactive Built a /bigbrother-hate command for the Slack bot that escalates the existing 11:00 Two Minute Hate through 3 stages (Whisper → Roar → Frenzy) based on call count, with in-character stage-transition announcements and increasing-intensity bot posts. The interesting part was the difficulty curve. Base thresholds are 5 and 15 calls, but they get multiplied each day by yesterday / 7-day-mean, clamped 0.5–2.0. So if Monday had 20 calls and Tuesday only 15, Wednesday’s threshold drops to ~62% of the base — easier to escalate on quiet days. First pass forgot to reset usageCount and stage on the daily recompute, so the bot stayed pinned at Frenzy forever after one good session. Caught it on the second test run. Wired it to the existing 11:00–11:02 cron window so calls outside it get an in-character refusal. Also added hateLevel.json to .gitignore since it’s pure runtime state. Next: DMing the bot, probably tackling that before adding more interactive bits.
Replaced every console.log in the bot with a leveled logger. The old setup was five files each printing things like “Message received!”, “Responding…”, and “Messages saved!” with no way to tell which file was talking or which run produced which line. Replaced it all with a single Code/Logger.js that adds timestamps, severity ( debug / info / warn / error ), a subsystem tag per file, and structured metadata. Errors now print a full stack trace on a second dimmed line instead of [object Object] . The visual difference is the whole point. Before, /bigbrother-loyalty produced four console.log lines with no correlation. After, it produces one timestamped line per stage — fetch, score, scoreboard write — and you can grep by subsystem or level. The interesting bug: my first Logger.js had a guard that re-checked whether meta was undefined, but I also had a fallback that promoted a non- Error second argument into meta . The two branches collided and swallowed the error stack entirely. Caught it in a two-line test snippet before staging, would have been invisible until the first real API failure. Also stopped logging the full Hugging Face response on every sentiment check. Now it only prints the per-label scores rounded to three decimals, same diagnostic value, way less noise.
Added DM support: BigBrother can now talk back Users can now DM the bot and get a response in character as BigBrother, powered by Llama 3.3 on Groq. The bot keeps a per-user conversation history (capped at 30 messages) so it actually remembers what you said earlier in the conversation. History lives in memory, so it resets on restart, intentional, didn’t feel worth the complexity of persisting it. The interesting part was Slack’s permission system. Adding the im:history , im:read , and im:write scopes wasn’t enough on its own, you also need to separately subscribe to the message.im event under Event Subscriptions. The scopes let the bot act on DMs, the event subscription is what actually delivers them. Spent a while staring at logs with no “DM received” entries before finding that.
Made Big Brother stop lying about your loyalty score The /bigbrother-loyalty command was silently corrupting its own scoreboard. Every call overwrote the user’s stored score with whatever the current calculation produced — which meant a citizen who hit 200 points last week would see their displayed rank drop to 50 after a quiet few days. The scoreboard was a ledger of “most recent” instead of “best ever”, which is the opposite of how a loyalty panopticon should work. The fix in Code/Surveillance.js was small but mattered: scoreboard() now only writes when the new score strictly beats the stored high, and stamps an achievedAt ISO timestamp on each new record. While in there, I also wired /bigbrother-scoreboard to refresh the caller’s score before displaying, so running it actually updates your entry — previously it just read stale data. The refresh is wrapped in try/catch so a transient Slack or HuggingFace failure doesn’t break the leaderboard read. That scoreboard bug was the tip of a much longer audit. The same session surfaced and fixed ~50 defects across the codebase: Surveillance.presenceCheck was returning undefined (not 0 ) on unknown presence values, producing NaN loyalty scores that then broke the sort; Telescreen.propaganda() would crash with TypeError if broadcasts.json was empty; Truth.getNews() called .map() on a potentially-missing articles array; concurrent readFile / writeFile pairs on the same JSON file were last-writer-wins. Added a 12-line per-file async mutex in Code/lock.js and wrapped every read-merge-write critical section. Also added .env validation at boot — previously a missing HF_TOKEN would surface as an undefined auth header 45 minutes into a Slack session instead of failing at startup.
Wrote the README and stopped the prerequisites file from lying about itself The repo had no README and prerequisites.md was three stray lines ( axios , node-cron , fs ) that didn’t actually match what package.json declared or what main.js fails fast on at boot. Rewrote prerequisites.md as a pure library install reference — packages, versions, and one npm install command — then wrote a README that follows the structure the Stardance judges actually want: one-sentence description, hero image slot, a try-it link, quick start, features, local setup, and a “how it works” section that earns its keep by naming real decisions (Socket Mode over HTTP so it runs behind any network, self-rescheduling crons with re-rolling fire times, file-locked JSON as a tiny DB instead of SQLite, sequential Groq calls to dodge rate limits). The friction was the Node version. There’s no engines field in package.json and no .nvmrc , so I didn’t want to just assert “Node 18+” without evidence. Grepping package-lock.json for "engines" turned up ~100 matches and the binding constraint is @slack/bolt ‘s transitive deps all declaring "node": ">=18" — so that’s the honest floor, stated as such. Also swapped the watched channel ID in Code/main.js from C0BBBCER55W to C09F6AAP1PF to match the workspace in the invite link I was handed. Caught one real issue while reviewing: the “Try it” link was a channel permalink ( /archives/C09F6... ), which a non-member hits a sign-in wall on, flagged it, left it in since it’s an internal members link.
Ships:
BigBrother is a 1984-themed Slack bot that turns your workspace into Oceania. It runs five modules: Surveillance tracks message activity across channels and maintains a leaderboard of who’s been most “active” (watched). Telescreen broadcasts Orwellian announcements to the workspace. Police runs sentiment analysis on messages and flags thoughtcrime — positivity is suspicious. Truth rewrites real news headlines in Party-approved doublespeak using NewsAPI + Groq. DM lets you talk directly to Big Brother, who responds in full authoritarian character via LLM. Built with Node.js + Bolt.js over Hack Club Stardance. Big Brother is always watching — especially in #1984....
|
1793857650.0135188
|
1793944050.0135188
|
|
18772
|
Frictionless by @kotagirinaidhrua | Stardance
|
kotagirinaidhrua
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @kotagirinaidhrua | Stardan Title: Frictionless by @kotagirinaidhrua | Stardance...
|
1793480087.354773
|
1794084887.354773
|
|
18773
|
Untitled project by @Shiro | Stardance
|
Shiro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Shiro | Stardance
|
1793353755.3048446
|
1793958555.3048446
|
|
18774
|
My first slack bot! by @pol_yen201 | Stardance
|
pol_yen201
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @pol_yen201 | Starda Title: My first slack bot! by @pol_yen201 | Stardance...
|
1793879667.6860967
|
1794743667.6860967
|
|
18775
|
My awesome macropad! by @XD | Stardance
|
XD
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @XD | Stardance
|
1793458061.9142656
|
1794062861.9142656
|
|
18776
|
X by @Jubz | Stardance
|
Jubz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: X by @Jubz | Stardance
|
1793929670.8126638
|
1794793670.8126638
|
|
18777
|
Submarine by @Artur | Stardance
|
Artur
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Submarine by @Artur | Stardance
|
1793296336.416048
|
1793901136.416048
|
|
18778
|
My very own WebOS by @Chris_BuildSetter | Stardanc My very own WebOS by @Chris_BuildSetter | Stardance...
|
Chris_BuildSetter
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Chris_BuildSetter | S Title: My very own WebOS by @Chris_BuildSetter | Stardance...
|
1793987289.1110806
|
1794592089.1110806
|
|
18779
|
Jablumpad by @Petr | Stardance
|
Petr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Jablumpad by @Petr | Stardance
|
1793890504.5913224
|
1794754504.5913224
|
|
18780
|
MeloCraft by @Slayer | Stardance
|
Slayer
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: MeloCraft by @Slayer | Stardance
|
1793926049.147352
|
1794790049.147352
|
|
18781
|
Untitled by @Gibson | Stardance
|
Gibson
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Gibson | Stardance
|
1793512256.7595143
|
1794117056.7595143
|
|
18782
|
My awesome macropad! by @NatalioChladeko | Stardan My awesome macropad! by @NatalioChladeko | Stardance...
|
NatalioChladeko
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @NatalioChladeko | Title: My awesome macropad! by @NatalioChladeko | Stardance...
|
1793415322.1788595
|
1794020122.1788595
|
|
18783
|
My first slack bot! by @rayhan_theruvath | Stardan My first slack bot! by @rayhan_theruvath | Stardance...
|
rayhan_theruvath
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @rayhan_theruvath | Title: My first slack bot! by @rayhan_theruvath | Stardance...
|
1793955074.596393
|
1794559874.596393
|
|
18784
|
My very own WebOS by @aduwahi | Stardance
|
aduwahi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @aduwahi | Stardance
|
1793987385.1116245
|
1794592185.1116245
|
|
18785
|
My awesome macropad! by @andreib | Stardance
|
andreib
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @andreib | Stardanc Title: My awesome macropad! by @andreib | Stardance...
|
1793443865.626646
|
1794048665.626646
|
|
18786
|
Macropad Attempt #1 by @Hanna | Stardance
|
Hanna
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Macropad Attempt #1 by @Hanna | Stardance
|
1793375345.6862938
|
1793980145.6862938
|
|
18787
|
My first slack bot! by @fayrouz | Stardance
|
fayrouz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @fayrouz | Stardance
|
1793415277.8748221
|
1794020077.8748221
|
|
18788
|
IIASVC by @iceman | Stardance
|
iceman
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: IIASVC by @iceman | Stardance
|
1793868796.246662
|
1794473596.246662
|
|
18789
|
A301 Differential Sweve by @Newo | Stardance
|
Newo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: A301 Differential Sweve by @Newo | Stardanc Title: A301 Differential Sweve by @Newo | Stardance...
|
1793850955.406261
|
1794455755.406261
|
|
18790
|
AI assistant by @Siddhanth | Stardance
|
Siddhanth
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: AI assistant by @Siddhanth | Stardance
|
1793512081.2341323
|
1794116881.2341323
|
|
18791
|
NemOS (ARG) by @Nemo_Donut | Stardance
|
Nemo_Donut
|
1
|
23.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T21:59:50Z", "hours": 23.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I made NemOS , a browser-based operating system experience built with HTML, CSS, and JavaScript. It starts as a retro desktop environment with draggable windows, a boot sequence, desktop icons, and a file explorer, but it’s also the beginning of a narrative horror project. Players explore recovered files belonging to a person known as Nemo and slowly uncover the story behind Project NULL, a mysterious subject called 13, and a corrupted archive full of missing memories. Lore incomplete right now will come back in webOS part 2! What was challenging? The most challenging part was creating a desktop environment from scratch without using any frameworks. I had to build window dragging, resizing, focus management, icon selection, application launching, file viewing, and the boot sequence myself. I also spent a lot of time making the UI behave like a real operating system while keeping everything inside a web browser. Designing a system that could later support a branching story and unlockable files was another challenge. What are you proud of? I’m proud that I turned a simple webOS project into something with its own identity and story. Instead of making only a desktop simulator, I built a frikin lore lmao this for an interactive archive where the operating system itself becomes part of the narrative. I’m also proud that most of the functionality was built from scratch, including the window system, archive explorer, boot loader, and lore-driven interface. What should people know so they can test your project? When the website loads, wait for the boot sequence to finish and respond to the access prompt. After entering the desktop, open README_FIRST.txt by double-clicking it. Reading and closing that file unlocks ARCHIVE_EXPLORER.exe , which contains the recovered archive records. The current build is Part 1 of a larger project, so it focuses on the desktop environment, archive system, and the beginning of the story rather than the complete narrative.", "repo": "https://github.com/adonutartist/NemOS", "demo": "https://nemos-rose.vercel.app/"}]...
|
[{"post_id": 12167, "ts": "202 [{"post_id": 12167, "ts": "2026-06-19T21:33:05Z", "hours": 4.4411, "text": "DEVLOG #5 Hello ya’ll I am back with good new and well a smol bad news ;-; So first good news is that i am done with part 1 of the webOS so I will ship this project today! Bad news is that the lore is very incomplete right now ;-; I plan to continue this in the webOS part 2!! Today i polished the file explorer kind of app added all necessary functions too… edited the not files too for more lore immersion… I hope it gets reviewed soon so that I can start working on part 2 of this project! Cyaaa Goooodnight!"}, {"post_id": 11608, "ts": "2026-06-18T22:02:56Z", "hours": 4.6942, "text": "DEVLOG #4 Hello everyone!! I am back again with a crazy idea!!!! So I saw so many people creating webOS its just sooo common so I added a twisterrrr to my one!! I added a lore to the webOS yep yep you heard that right a frikin lore to a WebOS!!!! So I have this oc of mine I created he has a pretty disturbing backstory and so I am gonna integrate that into the webOS not gonna spoil any story elements here so that you try it out yourself when I release it! I added bootscreen too to make it looks so daaammmm cooolio! I changed the welcome message and also added new app which is a file explorer still needs more work but yeh its in development!! I am thinking to ship it as my submission for webOS 1 with like half of the lore and then in webOS 2 imma ship it with the other half combined! Pretty excited with this idea lmao!!!! Cyaaaa! Goooodnight!!!"}, {"post_id": 10920, "ts": "2026-06-17T21:53:42Z", "hours": 4.8289, "text": "DEVLOG #3 Hello y’all! I am back again with yet another devlog and again laaaaats of progress which included first app making and some quality of life feature :3! So firstly I have completed part 4 of the WebOS 1 guide and hence tomorrow I may ship this project lmao xD I feel like I am speedrunning this xDDD I created a note taking app called txt.nemo it has a icon which u can single click to select and double click to open, it also has local storage so if u close the app or refresh browser or reopen browser then it will still save your notes. I also made a selection box for single click. I added dragging boundaries so that the windows can’t be dragged out of the screen, this also solves the bug of window being stuck if under top bar. I added resize feature to the windows too and also min height and width for each window! I am really happy with what i have till now xD I never knew I could HTML and css and javascript stuff so easily lol xD its so fun!!!! Cyaaaaa!! Gooooodnight!!"}, {"post_id": 10237, "ts": "2026-06-16T21:21:57Z", "hours": 4.2569, "text": "DEVLOG #2 Hello y’all! I am back with yet another devlog and lots of progress which included bug fixing some pixel art making etc etc! So first I downloaded VS code for windows then I cloned the NemOS repo to my computer and started working on it through VS code because this feels much easier! I can easily see preview of my webOS anytime I want and I don’t need to bash my brain over a silly lil bug of codespace lol xD I completed part 3 of the WebOS 1 guide! Now i have a draggable window, close and open buttons and both have cool pixel art I made for them on piskel :3 I am trying to figure out how to add minimize and resize features as they’re not given on the guide… hopefully I am able to implement those features tomorrow :p Now enjoy this screenshot of my webOS it features my best background art!!! Cyaaaa!! Gooooodnight!!!!"}, {"post_id": 9509, "ts": "2026-06-15T21:29:07Z", "hours": 4.4247, "text": "DEVLOG #1 Hello y’all!! I am back lol yeh I didn’t take even a single day of break after shipping DONUT PAD and started working on this new project called the NemOS :] I am following the WebOS 1 guide and I am done with the first 2 sections but sadly had to stop there because of this frikin big error which didn’t come from the code but the extension itself ;-; So basically I was using github codespace to make this and if you know about it even a lil bit then you would know that you need to preview your website after every smoool change. For this I was using the live preview extension made by microsoft but after like using it for like 3 hours it crashed or whatever you wanna call it ;-; it kept showing me some typo error and IP address when i tried to preview my website which was so dayummm annoying I searched google reddit etc etc no cure people have reported such problems before but no cure available ;-; I don’t know what to do now I really wanted to show y’all my cool art pieces I added as wallpaper and stuff but this frikin errror ruined my day xd Imma try to come back to this tomorrow with a fresh mind ;-; so cya for now ;-; Gudnight!"}]...
|
Title: NemOS (ARG) by @Nemo_Donut | Stardance
Dev Title: NemOS (ARG) by @Nemo_Donut | Stardance
Devlogs:
DEVLOG #1 Hello y’all!! I am back lol yeh I didn’t take even a single day of break after shipping DONUT PAD and started working on this new project called the NemOS :] I am following the WebOS 1 guide and I am done with the first 2 sections but sadly had to stop there because of this frikin big error which didn’t come from the code but the extension itself ;-; So basically I was using github codespace to make this and if you know about it even a lil bit then you would know that you need to preview your website after every smoool change. For this I was using the live preview extension made by microsoft but after like using it for like 3 hours it crashed or whatever you wanna call it ;-; it kept showing me some typo error and IP address when i tried to preview my website which was so dayummm annoying I searched google reddit etc etc no cure people have reported such problems before but no cure available ;-; I don’t know what to do now I really wanted to show y’all my cool art pieces I added as wallpaper and stuff but this frikin errror ruined my day xd Imma try to come back to this tomorrow with a fresh mind ;-; so cya for now ;-; Gudnight!
DEVLOG #2 Hello y’all! I am back with yet another devlog and lots of progress which included bug fixing some pixel art making etc etc! So first I downloaded VS code for windows then I cloned the NemOS repo to my computer and started working on it through VS code because this feels much easier! I can easily see preview of my webOS anytime I want and I don’t need to bash my brain over a silly lil bug of codespace lol xD I completed part 3 of the WebOS 1 guide! Now i have a draggable window, close and open buttons and both have cool pixel art I made for them on piskel :3 I am trying to figure out how to add minimize and resize features as they’re not given on the guide… hopefully I am able to implement those features tomorrow :p Now enjoy this screenshot of my webOS it features my best background art!!! Cyaaaa!! Gooooodnight!!!!
DEVLOG #3 Hello y’all! I am back again with yet another devlog and again laaaaats of progress which included first app making and some quality of life feature :3! So firstly I have completed part 4 of the WebOS 1 guide and hence tomorrow I may ship this project lmao xD I feel like I am speedrunning this xDDD I created a note taking app called txt.nemo it has a icon which u can single click to select and double click to open, it also has local storage so if u close the app or refresh browser or reopen browser then it will still save your notes. I also made a selection box for single click. I added dragging boundaries so that the windows can’t be dragged out of the screen, this also solves the bug of window being stuck if under top bar. I added resize feature to the windows too and also min height and width for each window! I am really happy with what i have till now xD I never knew I could HTML and css and javascript stuff so easily lol xD its so fun!!!! Cyaaaaa!! Gooooodnight!!
DEVLOG #4 Hello everyone!! I am back again with a crazy idea!!!! So I saw so many people creating webOS its just sooo common so I added a twisterrrr to my one!! I added a lore to the webOS yep yep you heard that right a frikin lore to a WebOS!!!! So I have this oc of mine I created he has a pretty disturbing backstory and so I am gonna integrate that into the webOS not gonna spoil any story elements here so that you try it out yourself when I release it! I added bootscreen too to make it looks so daaammmm cooolio! I changed the welcome message and also added new app which is a file explorer still needs more work but yeh its in development!! I am thinking to ship it as my submission for webOS 1 with like half of the lore and then in webOS 2 imma ship it with the other half combined! Pretty excited with this idea lmao!!!! Cyaaaa! Goooodnight!!!
DEVLOG #5 Hello ya’ll I am back with good new and well a smol bad news ;-; So first good news is that i am done with part 1 of the webOS so I will ship this project today! Bad news is that the lore is very incomplete right now ;-; I plan to continue this in the webOS part 2!! Today i polished the file explorer kind of app added all necessary functions too… edited the not files too for more lore immersion… I hope it gets reviewed soon so that I can start working on part 2 of this project! Cyaaa Goooodnight!
Ships:
What did you make? I made NemOS , a browser-based operating system experience built with HTML, CSS, and JavaScript. It starts as a retro desktop environment with draggable windows, a boot sequence, desktop icons, and a file explorer, but it’s also the beginning of a narrative horror project. Players explore recovered files belonging to a person known as Nemo and slowly uncover the story behind Project NULL, a mysterious subject called 13, and a corrupted archive full of missing memories. Lore incomplete right now will come back in webOS part 2! What was challenging? The most challenging part was creating a desktop environment from scratch without using any frameworks. I had to build window dragging, resizing, focus management, icon selection, application launching, file viewing, and the boot sequence myself. I also spent a lot of time making the UI behave like a real operating system while keeping everything inside a web browser. Designing a system that could later support a branching story and unlockable files was another challenge. What are you proud of? I’m proud that I turned a simple webOS project into something with its own identity and story. Instead of making only a desktop simulator, I built a frikin lore lmao this for an interactive archive where the operating system itself becomes part of the narrative. I’m also proud that most of the functionality was built from scratch, including the window system, archive explorer, boot loader, and lore-driven interface. What should people know so they can test your project? When the website loads, wait for the boot sequence to finish and respond to the access prompt. After entering the desktop, open README_FIRST.txt by double-clicking it. Reading and closing that file unlocks ARCHIVE_EXPLORER.exe , which contains the recovered archive records. The current build is Part 1 of a larger project, so it focuses on the desktop environment, archive system, and the beginning of the story rather than the complete narrative....
|
1793847122.0571148
|
1793933522.0571148
|
|
18792
|
My very own WebOS by @rushilw07 | Stardance
|
rushilw07
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @rushilw07 | Stardance
|
1793861494.7054958
|
1794466294.7054958
|
|
18793
|
Frictionless by @jam | Stardance
|
jam
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @jam | Stardance
|
1793292892.4655266
|
1793897692.4655266
|
|
18794
|
3ButtonLED by @Layaan | Stardance
|
Layaan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 3ButtonLED by @Layaan | Stardance
|
1793458575.8870304
|
1794063375.8870304
|
|
18795
|
Mango by @rayisalive67_2 | Stardance
|
rayisalive67_2
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Mango by @rayisalive67_2 | Stardance
|
1793332510.930138
|
1793937310.930138
|
|
18796
|
My awesome macropad! by @blair_c | Stardance
|
blair_c
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @blair_c | Stardanc Title: My awesome macropad! by @blair_c | Stardance...
|
1793893879.372724
|
1794757879.372724
|
|
18797
|
NovaDeck by @talktograntw | Stardance
|
talktograntw
|
0
|
0.42
|
0
|
[]
|
[{"post_id": 8938, "ts": "2026 [{"post_id": 8938, "ts": "2026-06-14T21:09:15Z", "hours": 0.4161, "text": "Started working on my handheld cyberdeck build today. The plan is a 3D printed enclosure with a Raspberry Pi 5, 7” HDMI display, built-in arcade joystick and buttons using a USB encoder, and a power bank for portability. Spent today figuring out the parts list, control layout, and overall design direction. Going for a clean minimal aesthetic. Next step is CAD work for the case."}]...
|
Title: NovaDeck by @talktograntw | Stardance
Devl Title: NovaDeck by @talktograntw | Stardance
Devlogs:
Started working on my handheld cyberdeck build today. The plan is a 3D printed enclosure with a Raspberry Pi 5, 7” HDMI display, built-in arcade joystick and buttons using a USB encoder, and a power bank for portability. Spent today figuring out the parts list, control layout, and overall design direction. Going for a clean minimal aesthetic. Next step is CAD work for the case....
|
1793994462.536108
|
1794599262.536108
|
|
18798
|
GradeBeacon by @Ash-ioL | Stardance
|
Ash-ioL
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: GradeBeacon by @Ash-ioL | Stardance
|
1793965981.176017
|
1794570781.176017
|
|
18799
|
LitePad by @chiron_dev8 | Stardance
|
chiron_dev8
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T20:15:58Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "LitePad! LitePad is a 6 key, 2x3 keypad with a rotary encoder, OLED display and an RGB LED using QMK firmware. The aim for this project is to create a simple macropad to control govee smart LED bulbs via a host PC! Features: Awesome case! 128x32 OLED Display EC11 Rotary Encoder 1 WS2812B RGB LED 6 Keys CAD Model: Uses 4 M3 Screws to hold the two parts of the case together. The PCB is placed inside the case with a cutout for every component and USB port. Designed in Autodesk Fusion in a Windows 11 VM (I use gentoo linux but I hate FreeCAD) Firmware: Currently unfinished as I am new to QMK. I will soon add features to communicate with a host PC with serial which will then control the govee lights. Currently it sits around and does nothing. What you need to make this keypad thingy: 6x Cherry MX switches 6x DSA Keycaps 4x M3 16mm bolts 6x 1N4148 Diodes 1x WS2812B LED 1x 0.91\" 128x32 OLED Display 1x EC11 Rotary Encoder 1x XIAO RP2040 1x Case (1x Bottom part, 1x Top part) Some love <3 Extras: Thank you to Hack Club for being awesome and supporting me :) (Also I need work experience…)", "repo": "https://github.com/Chiron8/LitePad", "demo": ""}]...
|
[{"post_id": 8896, "ts": "2026 [{"post_id": 8896, "ts": "2026-06-14T20:12:00Z", "hours": 0.5736, "text": "I have finished version 1 of LitePad! When I have built it, I will start working on the Govee integration!"}]...
|
Title: LitePad by @chiron_dev8 | Stardance
Devlog Title: LitePad by @chiron_dev8 | Stardance
Devlogs:
I have finished version 1 of LitePad! When I have built it, I will start working on the Govee integration!
Ships:
LitePad! LitePad is a 6 key, 2x3 keypad with a rotary encoder, OLED display and an RGB LED using QMK firmware. The aim for this project is to create a simple macropad to control govee smart LED bulbs via a host PC! Features: Awesome case! 128x32 OLED Display EC11 Rotary Encoder 1 WS2812B RGB LED 6 Keys CAD Model: Uses 4 M3 Screws to hold the two parts of the case together. The PCB is placed inside the case with a cutout for every component and USB port. Designed in Autodesk Fusion in a Windows 11 VM (I use gentoo linux but I hate FreeCAD) Firmware: Currently unfinished as I am new to QMK. I will soon add features to communicate with a host PC with serial which will then control the govee lights. Currently it sits around and does nothing. What you need to make this keypad thingy: 6x Cherry MX switches 6x DSA Keycaps 4x M3 16mm bolts 6x 1N4148 Diodes 1x WS2812B LED 1x 0.91" 128x32 OLED Display 1x EC11 Rotary Encoder 1x XIAO RP2040 1x Case (1x Bottom part, 1x Top part) Some love <3 Extras: Thank you to Hack Club for being awesome and supporting me :) (Also I need work experience…)...
|
1793933343.249548
|
1794019743.249548
|
|
18800
|
Untitled project by @rachitmor | Stardance
|
rachitmor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @rachitmor | Stardance
|
1793814874.537971
|
1794419674.537971
|