|
71542
|
mini keyboard by @sashuM | Stardance
|
sashuM
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mini keyboard by @sashuM | Stardance
|
1793065630.4123454
|
1793670430.4123454
|
|
47062
|
mini keyboard by @siddhantk | Stardance
|
siddhantk
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mini keyboard by @siddhantk | Stardance
|
1793166684.3610604
|
1793771484.3610604
|
|
58268
|
mini keyboard hehe by @guardep | Stardance
|
guardep
|
0
|
9.87
|
0
|
[]
|
[{"post_id": 67071, "ts": "202 [{"post_id": 67071, "ts": "2026-09-13T03:43:49Z", "hours": 3.045, "text": "finished the PCB design after some iterations. I am now heading on to the Case design portion of the project. i moved from OnShape and moved to fusion since i was able to get my educational license. i am hoping that since i have a printer i can quickly model new cases incase some measurements are wrong so that i can just screw on the board and the same thing for the top plate."}, {"post_id": 65963, "ts": "2026-09-11T13:34:41Z", "hours": 5.0633, "text": "There has been a couple of upgrades, not it is just to finish tracign and doing final desgin touches and then i can start 3d modeling"}, {"post_id": 64388, "ts": "2026-09-08T18:31:53Z", "hours": 0.8625, "text": "this is actually helping me some about 3d modeling and how to build PCB. This has been a really challenging project this time, will continue to improve, but for now i think 2 hours of continuous work and constant remodeling is enough"}, {"post_id": 64291, "ts": "2026-09-08T16:05:09Z", "hours": 0.8956, "text": "I cant follow the instructions for building the case for this since it is different to the on eon the guide. Here we go to design the case"}]...
|
Title: mini keyboard hehe by @guardep | Stardance
Title: mini keyboard hehe by @guardep | Stardance
Devlogs:
I cant follow the instructions for building the case for this since it is different to the on eon the guide. Here we go to design the case
this is actually helping me some about 3d modeling and how to build PCB. This has been a really challenging project this time, will continue to improve, but for now i think 2 hours of continuous work and constant remodeling is enough
There has been a couple of upgrades, not it is just to finish tracign and doing final desgin touches and then i can start 3d modeling
finished the PCB design after some iterations. I am now heading on to the Case design portion of the project. i moved from OnShape and moved to fusion since i was able to get my educational license. i am hoping that since i have a printer i can quickly model new cases incase some measurements are wrong so that i can just screw on the board and the same thing for the top plate....
|
1793483347.4493687
|
1794088147.4493687
|
|
43182
|
mini keyboard(??= by @AnibalCR | Stardance
|
AnibalCR
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mini keyboard(??= by @AnibalCR | Stardance
|
1793206477.8429983
|
1793811277.8429983
|
|
45697
|
mini keyboard+ ellectric guitar pedals by @zhowie_ mini keyboard+ ellectric guitar pedals by @zhowie_ | Stardance...
|
zhowie_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mini keyboard+ ellectric guitar pedals by @ Title: mini keyboard+ ellectric guitar pedals by @zhowie_ | Stardance...
|
1793346904.194912
|
1793951704.194912
|
|
50061
|
mini maraca cracker by @Nolan-L-from-Milorad | Sta mini maraca cracker by @Nolan-L-from-Milorad | Stardance...
|
Nolan-L-from-Milorad
|
1
|
18.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-26T00:16:40Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve done it! I’ve been wanting to make a decently high power output stereo amplifier for a while now and when I was looking for ICs to use I found the LM1875 a tiny 30 watt amplifier IC in a tiny 5 pin TO-220 package the main black body is a mere 10 mm * 8 mm big so I took the time to build two of them into a stereo amplifier and blew up some earbuds on the way (LOL) and rocked the entire house. The heatsink on the back does get pretty warm at higher volumes if you use it for a while though keeps under 60 degrees celsius so well within the LM1875 max tempreture (of 150 degrees celsius sustained) The internals are built onto a prototype board and housed in a 3D printed enclosure The big aluminium heatsink out the back of the maraca cracker 2,000 (name courtesy of DankPods) was salvaged from and old power supply. “this thing is hillarious if you hook it up to a tiny speaker”", "repo": "https://gitlab.com/miloradceo/maracacracker", "demo": ""}]...
|
[{"post_id": 82482, "ts": "202 [{"post_id": 82482, "ts": "2026-10-24T23:06:03Z", "hours": 2.825, "text": "I’m ready to ship! . I’ve made a gitlab repo and spent quite some time making a schematic for the device (like >1.5 hours) I also took some nice photos with my Nikon D3200. I feel this is always the part of the project I dread most spending hours taking photos, making documentation, schematics and other tiny things that just take so much longer than you think they would"}, {"post_id": 80269, "ts": "2026-10-17T01:39:04Z", "hours": 4.19, "text": "I did a tonne of minor case work for the device and got it all buttoned up and added a power LED. . I also filmed and edited a video advertising and showing off the maraca cracker 2000 with my friend and totally did not rip off dankpods in the process by blowing up earbuds and overdriving speakers that I couldn’t lapse BECAUSE LAPSE DOESN’T WORK ON LINUX (please fix this nothing works about it I have brought this up multiple times in stardance-help in slack and I’ve gotten nothing) . NEXT: I need to pull all the documentation (that I still need to make) and files into a gitlab repo"}, {"post_id": 74738, "ts": "2026-09-28T03:07:51Z", "hours": 2.2236, "text": "After more case work we have a top for it and the best branding known to humankind MARACA CRACKER 2,000!!!!!!! I’m really happy to see this project come together as well as it has I did a majour boo-boo where I moddeled the case as if the amp was 15mm wider and on the remodel I mucked up the case’s screw holes that I now realise I really need two more of. will do more soon"}, {"post_id": 70447, "ts": "2026-09-19T06:33:51Z", "hours": 1.0833, "text": "More case work with fusion, not terribly interesting but it must be done :( The volume knob now fits and the audio input is screwed into the case as well. I’m contemplating the design for the final case too. I must first do the basic case then make it look nice once that is done I can add cool patterns, text and MARACA CRACKER 2,000!!!!! MUST MAKE DADDY DANKPODS PROUD (lol) I’ll blow up some dirtybuds in the demo video too! (or at least try)"}, {"post_id": 61955, "ts": "2026-09-05T04:22:53Z", "hours": 4.3492, "text": "I recently locked in and did a tonne (kinda forgot to post a bit) But I started designing a case in fusion 360 (FreeCad stinks) I also put screw terminals on the side with a DC barrel jack for power input (edit I put a picture in as I realized I completely forgot to add one LOL :3)"}, {"post_id": 49446, "ts": "2026-08-18T09:13:08Z", "hours": 1.4833, "text": "I’ve kept myself busy! I’ve soldered in the socket and part of the right channel, the rest of the circuit’s parts have been pushed in and I will solder them in the morning. additionally I have soldered up left / right RCA jacks and a volume knob out of two trimpots vertically mounted and attached with a board at the top. This is all going surprisingly well considering the complexity of building a dual-channel amplifier with just the datasheet’s schematic to go off of!"}, {"post_id": 49123, "ts": "2026-08-17T19:12:18Z", "hours": 2.1742, "text": "My goal for this project is to build a small high power amplifier that also doesn’t look trash and start fires. BUT STILL PLAYS SCARLET FIRE I just dropped $50 NZD at jaycar for parts for this project 💀 somehow I managed to perfectly assemble one channel just out of following the datasheet’s example schematic, I know I’m amazed too but miracles happen! attached is the schematic I was using and a picture of what I built"}]...
|
Title: mini maraca cracker by @Nolan-L-from-Milora Title: mini maraca cracker by @Nolan-L-from-Milorad | Stardance
Devlogs:
My goal for this project is to build a small high power amplifier that also doesn’t look trash and start fires. BUT STILL PLAYS SCARLET FIRE I just dropped $50 NZD at jaycar for parts for this project 💀 somehow I managed to perfectly assemble one channel just out of following the datasheet’s example schematic, I know I’m amazed too but miracles happen! attached is the schematic I was using and a picture of what I built
I’ve kept myself busy! I’ve soldered in the socket and part of the right channel, the rest of the circuit’s parts have been pushed in and I will solder them in the morning. additionally I have soldered up left / right RCA jacks and a volume knob out of two trimpots vertically mounted and attached with a board at the top. This is all going surprisingly well considering the complexity of building a dual-channel amplifier with just the datasheet’s schematic to go off of!
I recently locked in and did a tonne (kinda forgot to post a bit) But I started designing a case in fusion 360 (FreeCad stinks) I also put screw terminals on the side with a DC barrel jack for power input (edit I put a picture in as I realized I completely forgot to add one LOL :3)
More case work with fusion, not terribly interesting but it must be done :( The volume knob now fits and the audio input is screwed into the case as well. I’m contemplating the design for the final case too. I must first do the basic case then make it look nice once that is done I can add cool patterns, text and MARACA CRACKER 2,000!!!!! MUST MAKE DADDY DANKPODS PROUD (lol) I’ll blow up some dirtybuds in the demo video too! (or at least try)
After more case work we have a top for it and the best branding known to humankind MARACA CRACKER 2,000!!!!!!! I’m really happy to see this project come together as well as it has I did a majour boo-boo where I moddeled the case as if the amp was 15mm wider and on the remodel I mucked up the case’s screw holes that I now realise I really need two more of. will do more soon
I did a tonne of minor case work for the device and got it all buttoned up and added a power LED. . I also filmed and edited a video advertising and showing off the maraca cracker 2000 with my friend and totally did not rip off dankpods in the process by blowing up earbuds and overdriving speakers that I couldn’t lapse BECAUSE LAPSE DOESN’T WORK ON LINUX (please fix this nothing works about it I have brought this up multiple times in stardance-help in slack and I’ve gotten nothing) . NEXT: I need to pull all the documentation (that I still need to make) and files into a gitlab repo
I’m ready to ship! . I’ve made a gitlab repo and spent quite some time making a schematic for the device (like >1.5 hours) I also took some nice photos with my Nikon D3200. I feel this is always the part of the project I dread most spending hours taking photos, making documentation, schematics and other tiny things that just take so much longer than you think they would
Ships:
I’ve done it! I’ve been wanting to make a decently high power output stereo amplifier for a while now and when I was looking for ICs to use I found the LM1875 a tiny 30 watt amplifier IC in a tiny 5 pin TO-220 package the main black body is a mere 10 mm * 8 mm big so I took the time to build two of them into a stereo amplifier and blew up some earbuds on the way (LOL) and rocked the entire house. The heatsink on the back does get pretty warm at higher volumes if you use it for a while though keeps under 60 degrees celsius so well within the LM1875 max tempreture (of 150 degrees celsius sustained) The internals are built onto a prototype board and housed in a 3D printed enclosure The big aluminium heatsink out the back of the maraca cracker 2,000 (name courtesy of DankPods) was salvaged from and old power supply. “this thing is hillarious if you hook it up to a tiny speaker”...
|
1793566070.0971963
|
1793652470.0971963
|
|
18221
|
mini music player! by @sleepymeep | Stardance
|
sleepymeep
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mini music player! by @sleepymeep | Stardan Title: mini music player! by @sleepymeep | Stardance...
|
1793328463.9869251
|
1793933263.9869251
|
|
25609
|
mini swerve modules and chasis by @NIKOLAI_GOGOL44 mini swerve modules and chasis by @NIKOLAI_GOGOL444 | Stardance...
|
NIKOLAI_GOGOL444
|
1
|
86.0
|
429
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T14:40:20Z", "hours": 86.0, "multiplier": 5.0, "payout": 429, "blessing": "neutral", "text": "I made a miniature functional swerve chasis modeled after frc swerve drive trains. I am proud of it being my first actual finished project, and challenging thing along the way was definitely learning the new software required to make this.", "repo": "https://github.com/NIKOLAI-GOGOL444/mini-swerve-drive-train", "demo": ""}]...
|
[{"post_id": 31281, "ts": "202 [{"post_id": 31281, "ts": "2026-07-19T15:46:26Z", "hours": 4.2267, "text": "Programming complete! PCB time. Today I fixed the issue of module 3’s wheel being offset, and tuned the PID loop. Now the robot finally works well enough to begin pcb design! Designing a pcb will make the final push of testing and programming much easier. I probably wont have may devlogs here for awhile because Im documenting my PCB as a seperate project on hackclub horizons so I can qualify for polaris, but once the pcb is done ill do a final post for this project. This has been very fun, i will definitely do another project before summer ends on stardance."}, {"post_id": 30958, "ts": "2026-07-18T23:34:22Z", "hours": 9.0239, "text": "pid tuning + finding some problems! found some issues in the code varriable defenitions that did not relate to the actual robot, ex some pins were switched that made modules steer backwards rather than the direction intended, mod 3 displacement was wrong. still some issues, like modules 4 and 3 are pretty tense, will have to open them up and see if anythings wrong. probably going to start pcb design about now anyway because I think the code is fine, and I need 20 hours in time to buy a ticket to polaris. anyway super super tired, havent slept in 20 hours :’-)"}, {"post_id": 30569, "ts": "2026-07-18T07:58:33Z", "hours": 7.6264, "text": "pid tuning + debugging. i did some bug fixes with the kinematics code, such as fixing radians to angle conversion that i forgot to add, added a step that accounts from slight added drive speed from steering that happens in coaxial swerve drive, and spent 3 hours trying to fix my multiplexer only to realize i accidentially changed the adress. oops! then, I finally began tuning the pid loop, only to discover that turning is weak because the gears that are attached to the steer motors have bad grip on the shaft, because when I made them i forgot to add wiggle room, so during assembly i would sand the insides, making them too loose. so fixed that and reprinted, now in my next time log i will add the new gears and finish tuning the pid, if thats done then this projects time on stardance is complete! when i finish this project, I defenitley want to do some cool stuf with RFs. defo gonna do another project here on stardance."}, {"post_id": 29394, "ts": "2026-07-16T10:07:22Z", "hours": 9.3406, "text": "BIG devlog tonight! swerve drive kinematics code + some testing! today, I pulled through and did all the kinematics code for the swerve drive. it required using the offsets of the modules from the center, the drive joystick inputs, and the steer joystick inputs to calculate vector length and magnitude, then use those to derive a target angle and speed for each module, then speed is scaled down to fit the (0,4095) PWM range for my motors. the target angle is optimized to switch to a smaller rotation if the angle is above 90 degrees, then it is plugged into a PID loop that helps the steer motor achieve the angle. im super tired its like 6 am over here, so Im going to sleep. tomorrow I will have to replace an encoder that went bad on module two, and tune the PID loop. after that, this project will be complete, and I will begin the second half, which is pcb creation, and I will be documenting that on horizons as a seperate hardware project. :-)"}, {"post_id": 28682, "ts": "2026-07-15T02:36:36Z", "hours": 5.5006, "text": "code and elecronic fixes + new weird issue I dont really remember what I did last night on the robot, I do remember though that one of my encoders went bad so I had to buy a new one, that should come soon. also, all four of my drive motors have stopped reacting to pwm inputs. after peering more, the motors themselves are fine, and even the h brigde is fine because the motors will sometimes twitch abit during startup from floating values. I think It is the code, will look into that tonight. on a good note I have daisychained power to all 4 of my motor controllers, and begun planning out how I want to program my swerves and learning the mathematics needed for that, so Im pretty excited to do that. hopefully I can wrap this project up soon so I can start working On the ISEF project I wanna do with radio waves :-)"}, {"post_id": 27614, "ts": "2026-07-13T11:04:04Z", "hours": 8.6331, "text": "booting difficulties + figured it out + swerve kinematics planning! I was having alot of trouble getting the code to flash to my ESP32. the board would dissapear, loose connection, etc. this began happening after adding alot more components to the board, which eventually led to me learning that some of the pins on my board are completely unuseable due to connections to PSRAM. I need almost all the pins on the board for my project, so I am switching to a different ESP32 model that doesnt have psram, as my project doesnt need all that processing strength. after that, I began learning the kinematics needed to program a swerve drive train, and began taking notes and making plans for code structure, etc."}, {"post_id": 26480, "ts": "2026-07-11T09:26:15Z", "hours": 4.3925, "text": "Soldering electronics to breadboarded system + some coding! Today I soldered all the electronics to the breadboarded system that I haven’t yet, so the breadboarded system is complete and ready to be programmed for 4 modules! I also ran out of I/O pins on my esp32, so I added an I/O extension chip breakout board to the system so I could have enough pins for my drive motors’ encoders, which will be very important for autonomous programs later os For coding, I changed my functions and rewrote some of the code to be suitable for 4 modules, such as changing the drive and steer functions to take an int variable argument of 1 through 4, to control different modules. I also did the same thing for the encoders. I’m tired, so I will sleep, and tomorrow I plan to program the I/O extension chip and the drive encoders, then hopefully get my hands on some 18AWGg wire so I can daisy chain the battery to my four motor controllers, so I can see how just the basic code without any trig math works on my swerve drive train, then just go from there. hopefully this coding stage doesnt take so long, so I can design a pcb! the messy breadboard is stressing me out >_<, also I wanna make my first pcb, working on this project has helped me learn alot more about data protocols and chips, also how to read datasheets, so Id love to figure out kicad and make something using that knowledge, Oh and I really wanna make the pcb cute with decals n stuff lol. Wow, that was a long devlog prob my longest. Oh, one more thing: I’m pretty sure one of my modules steer motors is broken, so I’ll have to open it up and see what is wrong; probably will have an update on that tomorrow."}, {"post_id": 25817, "ts": "2026-07-10T08:58:52Z", "hours": 8.2981, "text": "completed chasis + starting code! I completed the chasis, and I will begin programming. I just noticed my code isnt working for one module and radio system, so im debugging that, then ill probably go to bed and solder the other 3 modules to the system, then program it. I want to have a working system and code before I try making a pcb, so ill have to deal with this wire mess for now :’-)"}, {"post_id": 24585, "ts": "2026-07-08T09:05:41Z", "hours": 1.88, "text": "assembling final chasis began! I finished the first swerve today and screwed it into the chasis as you can see in the picture, and I would have done the other three tonight, however my printer (my moms technicaly, shes a teacher and she bought it for her class using a grant, but she lets me use it lol) is clogged! my mother doesnt want me to touch it so she will fix it soon, so until then I cant print anything :’-( should be fixed in a few days though."}, {"post_id": 23972, "ts": "2026-07-07T06:36:46Z", "hours": 4.15, "text": "assembling some swerve V6 + one minor issue + soldering some components!: I assembled about two swerves, before running out of filament, so ill keep printing once I get my hands on a new roll. as for the meshing issues, they have been fixed now! the gears mesh perfectly. however, there is too much wiggle room for the 48t gear in the bottom shell, which causes meshing issues when the 48t gear shifts out of the center, so Ill have to fix that, but after that the design is perfect! yaaay! other than that, I disasembled the older swerve model ive been using for programming, and soldered its components plus the steer motors."}, {"post_id": 23304, "ts": "2026-07-06T05:39:11Z", "hours": 4.5336, "text": "Finished swerves V^! should be the final deisgn, as I went in and fixed all the design errors I was avoiding. everything looks perfect! hopefuly this is the last iteration, ill print it ASAP and see. (ignore the missing leg thingy, in the redesign both are identical!) these files will be on the repository soon."}, {"post_id": 22707, "ts": "2026-07-05T08:43:38Z", "hours": 7.0681, "text": "swerves V6! began working on (FIINAALL) swerve iteration. V5 wouldve been final if I hadnt ignored super obvi meshing issues.. anyway as you can see meshing is perfect. as you can see by the second photo I got a whole lot done. moral of the story, dont ignore obvious problems until they become a hassle to fix and have you awake at 4:41 am :’-)"}, {"post_id": 22029, "ts": "2026-07-04T08:42:20Z", "hours": 0.9167, "text": "trying to fix meshing issues. after some research, its likely due to innacuracies of the shaft holder for the drive gears, and misalignment of my bevels. its super late, so ill make some cad fixes tomorrow."}, {"post_id": 22009, "ts": "2026-07-04T07:38:40Z", "hours": 0.7833, "text": "greasing modules + meshing issues! idk why theres meshing issues tbh. im gonna look at the cad and see what I can do :’-("}, {"post_id": 21781, "ts": "2026-07-03T21:44:04Z", "hours": 4.3769, "text": "today I worked on assembling swerves for my final assembly, and I also soddered some encoders for the swerves."}, {"post_id": 19440, "ts": "2026-06-30T19:17:59Z", "hours": 5.1442, "text": "moving project to stardance from forge, and code updates! today, I moved my projects logs and info to stardance as best I could, because shipping ends today and Id like to ship. my logs from forge are on my repository, and I now have a demo in my stardance if anyone is intrested in viewing the cad. also, last night I worked on the code alot, specifically the system that will use nrf pa lina modules to transmit controller commands to the robot. its not working, and after working around the code abit, I suspect it is because I havent soddered 10uf capacitors to the gnd and 3.3v pins of my nrf pa lina modules, so I will try that soon and update how it goes. the updated code with radio transmission is posted in my repository however, if you would like to see it."}]...
|
Title: mini swerve modules and chasis by @NIKOLAI_ Title: mini swerve modules and chasis by @NIKOLAI_GOGOL444 | Stardance
Devlogs:
moving project to stardance from forge, and code updates! today, I moved my projects logs and info to stardance as best I could, because shipping ends today and Id like to ship. my logs from forge are on my repository, and I now have a demo in my stardance if anyone is intrested in viewing the cad. also, last night I worked on the code alot, specifically the system that will use nrf pa lina modules to transmit controller commands to the robot. its not working, and after working around the code abit, I suspect it is because I havent soddered 10uf capacitors to the gnd and 3.3v pins of my nrf pa lina modules, so I will try that soon and update how it goes. the updated code with radio transmission is posted in my repository however, if you would like to see it.
today I worked on assembling swerves for my final assembly, and I also soddered some encoders for the swerves.
greasing modules + meshing issues! idk why theres meshing issues tbh. im gonna look at the cad and see what I can do :’-(
trying to fix meshing issues. after some research, its likely due to innacuracies of the shaft holder for the drive gears, and misalignment of my bevels. its super late, so ill make some cad fixes tomorrow.
swerves V6! began working on (FIINAALL) swerve iteration. V5 wouldve been final if I hadnt ignored super obvi meshing issues.. anyway as you can see meshing is perfect. as you can see by the second photo I got a whole lot done. moral of the story, dont ignore obvious problems until they become a hassle to fix and have you awake at 4:41 am :’-)
Finished swerves V^! should be the final deisgn, as I went in and fixed all the design errors I was avoiding. everything looks perfect! hopefuly this is the last iteration, ill print it ASAP and see. (ignore the missing leg thingy, in the redesign both are identical!) these files will be on the repository soon.
assembling some swerve V6 + one minor issue + soldering some components!: I assembled about two swerves, before running out of filament, so ill keep printing once I get my hands on a new roll. as for the meshing issues, they have been fixed now! the gears mesh perfectly. however, there is too much wiggle room for the 48t gear in the bottom shell, which causes meshing issues when the 48t gear shifts out of the center, so Ill have to fix that, but after that the design is perfect! yaaay! other than that, I disasembled the older swerve model ive been using for programming, and soldered its components plus the steer motors.
assembling final chasis began! I finished the first swerve today and screwed it into the chasis as you can see in the picture, and I would have done the other three tonight, however my printer (my moms technicaly, shes a teacher and she bought it for her class using a grant, but she lets me use it lol) is clogged! my mother doesnt want me to touch it so she will fix it soon, so until then I cant print anything :’-( should be fixed in a few days though.
completed chasis + starting code! I completed the chasis, and I will begin programming. I just noticed my code isnt working for one module and radio system, so im debugging that, then ill probably go to bed and solder the other 3 modules to the system, then program it. I want to have a working system and code before I try making a pcb, so ill have to deal with this wire mess for now :’-)
Soldering electronics to breadboarded system + some coding! Today I soldered all the electronics to the breadboarded system that I haven’t yet, so the breadboarded system is complete and ready to be programmed for 4 modules! I also ran out of I/O pins on my esp32, so I added an I/O extension chip breakout board to the system so I could have enough pins for my drive motors’ encoders, which will be very important for autonomous programs later os For coding, I changed my functions and rewrote some of the code to be suitable for 4 modules, such as changing the drive and steer functions to take an int variable argument of 1 through 4, to control different modules. I also did the same thing for the encoders. I’m tired, so I will sleep, and tomorrow I plan to program the I/O extension chip and the drive encoders, then hopefully get my hands on some 18AWGg wire so I can daisy chain the battery to my four motor controllers, so I can see how just the basic code without any trig math works on my swerve drive train, then just go from there. hopefully this coding stage doesnt take so long, so I can design a pcb! the messy breadboard is stressing me out >_<, also I wanna make my first pcb, working on this project has helped me learn alot more about data protocols and chips, also how to read datasheets, so Id love to figure out kicad and make something using that knowledge, Oh and I really wanna make the pcb cute with decals n stuff lol. Wow, that was a long devlog prob my longest. Oh, one more thing: I’m pretty sure one of my modules steer motors is broken, so I’ll have to open it up and see what is wrong; probably will have an update on that tomorrow.
booting difficulties + figured it out + swerve kinematics planning! I was having alot of trouble getting the code to flash to my ESP32. the board would dissapear, loose connection, etc. this began happening after adding alot more components to the board, which eventually led to me learning that some of the pins on my board are completely unuseable due to connections to PSRAM. I need almost all the pins on the board for my project, so I am switching to a different ESP32 model that doesnt have psram, as my project doesnt need all that processing strength. after that, I began learning the kinematics needed to program a swerve drive train, and began taking notes and making plans for code structure, etc.
code and elecronic fixes + new weird issue I dont really remember what I did last night on the robot, I do remember though that one of my encoders went bad so I had to buy a new one, that should come soon. also, all four of my drive motors have stopped reacting to pwm inputs. after peering more, the motors themselves are fine, and even the h brigde is fine because the motors will sometimes twitch abit during startup from floating values. I think It is the code, will look into that tonight. on a good note I have daisychained power to all 4 of my motor controllers, and begun planning out how I want to program my swerves and learning the mathematics needed for that, so Im pretty excited to do that. hopefully I can wrap this project up soon so I can start working On the ISEF project I wanna do with radio waves :-)
BIG devlog tonight! swerve drive kinematics code + some testing! today, I pulled through and did all the kinematics code for the swerve drive. it required using the offsets of the modules from the center, the drive joystick inputs, and the steer joystick inputs to calculate vector length and magnitude, then use those to derive a target angle and speed for each module, then speed is scaled down to fit the (0,4095) PWM range for my motors. the target angle is optimized to switch to a smaller rotation if the angle is above 90 degrees, then it is plugged into a PID loop that helps the steer motor achieve the angle. im super tired its like 6 am over here, so Im going to sleep. tomorrow I will have to replace an encoder that went bad on module two, and tune the PID loop. after that, this project will be complete, and I will begin the second half, which is pcb creation, and I will be documenting that on horizons as a seperate hardware project. :-)
pid tuning + debugging. i did some bug fixes with the kinematics code, such as fixing radians to angle conversion that i forgot to add, added a step that accounts from slight added drive speed from steering that happens in coaxial swerve drive, and spent 3 hours trying to fix my multiplexer only to realize i accidentially changed the adress. oops! then, I finally began tuning the pid loop, only to discover that turning is weak because the gears that are attached to the steer motors have bad grip on the shaft, because when I made them i forgot to add wiggle room, so during assembly i would sand the insides, making them too loose. so fixed that and reprinted, now in my next time log i will add the new gears and finish tuning the pid, if thats done then this projects time on stardance is complete! when i finish this project, I defenitley want to do some cool stuf with RFs. defo gonna do another project here on stardance.
pid tuning + finding some problems! found some issues in the code varriable defenitions that did not relate to the actual robot, ex some pins were switched that made modules steer backwards rather than the direction intended, mod 3 displacement was wrong. still some issues, like modules 4 and 3 are pretty tense, will have to open them up and see if anythings wrong. probably going to start pcb design about now anyway because I think the code is fine, and I need 20 hours in time to buy a ticket to polaris. anyway super super tired, havent slept in 20 hours :’-)
Programming complete! PCB time. Today I fixed the issue of module 3’s wheel being offset, and tuned the PID loop. Now the robot finally works well enough to begin pcb design! Designing a pcb will make the final push of testing and programming much easier. I probably wont have may devlogs here for awhile because Im documenting my PCB as a seperate project on hackclub horizons so I can qualify for polaris, but once the pcb is done ill do a final post for this project. This has been very fun, i will definitely do another project before summer ends on stardance.
Ships:
I made a miniature functional swerve chasis modeled after frc swerve drive trains. I am proud of it being my first actual finished project, and challenging thing along the way was definitely learning the new software required to make this....
|
1793598505.2928126
|
1793684905.2928126
|
|
7821
|
mini timer by @pia-potato | Stardance
|
pia-potato
|
0
|
0.53
|
0
|
[]
|
[{"post_id": 3376, "ts": "2026 [{"post_id": 3376, "ts": "2026-06-06T08:30:26Z", "hours": 0.5347, "text": "Here’s my mini pomodoro timer so far! It works as a small application window and can run on the side while you work. Next, I’m planning to work on graphics and design."}]...
|
Title: mini timer by @pia-potato | Stardance
Devl Title: mini timer by @pia-potato | Stardance
Devlogs:
Here’s my mini pomodoro timer so far! It works as a small application window and can run on the side while you work. Next, I’m planning to work on graphics and design....
|
1793443656.519952
|
1794048456.519952
|
|
63115
|
mini ultrasonic radar by @Aalabhya | Stardance
|
Aalabhya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mini ultrasonic radar by @Aalabhya | Starda Title: mini ultrasonic radar by @Aalabhya | Stardance...
|
1793048062.2065341
|
1793652862.2065341
|
|
64696
|
mini war game by @ryandutt17989 | Stardance
|
ryandutt17989
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mini war game by @ryandutt17989 | Stardance
|
1793065921.5714421
|
1793670721.5714421
|
|
42443
|
miniKeeb by @sox123 | Stardance
|
sox123
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: miniKeeb by @sox123 | Stardance
|
1793177233.26474
|
1793782033.26474
|
|
43793
|
mini_consol by @kdenis | Stardance
|
kdenis
|
1
|
28.27
|
331
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-21T08:49:31Z", "hours": 28.0, "multiplier": 11.7, "payout": 331, "blessing": "neutral", "text": "What did you make? I built a DIY mini handheld console powered by an Arduino Nano! My main goal was to dive into embedded systems development and get hands-on experience with hardware and C++. Because of this, I focused on core functionality rather than super complex games. When you turn it on, you’re greeted with a scrolling “mini console” text, followed by a game selection menu. During gameplay, pressing the designated pause button opens a pause menu where you can either resume (saving your current progress) or exit to the main menu. I included two games: Snake and Flappy Bird. What was challenging? Generating non-blocking audio feedback was definitely the hardest part. I implemented button click sounds using PWM to control the volume, which took a lot of time to tune since working with audio signals is trickier than controlling a motor. It required pseudo-multitasking using millis() to keep the gameplay smooth while playing sounds. Also, in Snake, I initially didn’t use a grid-based movement system and implemented pixel-by-pixel movement instead. Because of this, collision detection with food can occasionally miss. What are you proud of? I’m really proud of the software architecture and code structure in several parts of the project. I focused on clean OOP principles, solid encapsulation, and clear code organization (though a few spots are still a bit messy!). I’m also proud that i didn’t use delay funtion and of my Settings.h file What should people know so they can test your project? To test or build it, you just need to know how to connect the display and buttons to an Arduino Nano. Inside the Settings.h file, you can easily customize pin configurations, volume, colors, display sizes, and game speeds. I also added comments throughout the codebase to make it easy to follow along!", "repo": "https://github.com/deniska-design/mini_consol", "demo": "https://www.youtube.com/watch?v=uTfua7OpIts"}]...
|
[{"post_id": 53755, "ts": "202 [{"post_id": 53755, "ts": "2026-08-24T13:03:26Z", "hours": 0.2725, "text": "DevLog №10 prepared everything for shiping. added wiring.png and AI usage declaration in my README file."}, {"post_id": 50404, "ts": "2026-08-19T15:50:50Z", "hours": 2.895, "text": "DevLog №9 ###What’s New Walls & Pipes Mechanics: Added moving wall obstacles. Score Counter: Integrated a score tracking system. ###How It Works Score Logic: To keep things simple and efficient, the score increases automatically whenever a wall reaches the left edge of the screen. Illusion of Movement: The bird stays in place while the walls continuously cycle and reset from the right edge back to the left. This creates a smooth side-scrolling illusion! It was a fairly straightforward feature to implement, but it instantly made the project feel much more like a complete game!"}, {"post_id": 48980, "ts": "2026-08-17T15:48:49Z", "hours": 2.9033, "text": "Devlog №8 Bird Physics & Rendering Flicker-Free Rendering To prevent screen flickering caused by redrawing the entire screen, I optimized the loop by clearing only the bird’s exact position before rendering its new frame. Physics Implementation Movement relies on both velocity and acceleration : Acceleration continuously increases the downward velocity (gravity). Jump mechanic resets the downward velocity to initial on every input. Next Steps: Wall Generation Obstacle Setup I need to create an array of one dynamic wall . Recycling Logic As soon as a wall reaches the left edge of the screen, it will wrap around to the right . The height/position will randomize each time it reappears to form a continuous level."}, {"post_id": 46939, "ts": "2026-08-14T14:36:32Z", "hours": 1.1725, "text": "Devlog №7 implemted PMW to control sound volume"}, {"post_id": 46796, "ts": "2026-08-14T09:32:51Z", "hours": 0.7017, "text": "Devlog №6 Today I quickly set up the startup text so it scrolls smoothly, and that’s pretty much it. Nothing complicated, really—took me literally half an hour. Next up: finish tuning the PWM to quiet down the audio, and then I’ll probably work on making a more interesting splash screen."}, {"post_id": 46404, "ts": "2026-08-13T16:12:02Z", "hours": 8.6364, "text": "Devlog №5 I added sound effects for every button press on my mini-console! Sounds like a super quick and easy task, right? Well, it should have been. But a few architectural bumps in the road ended up eating way more time than expected. What went wrong (and how I fixed it) Hardware Pin Conflict: My buzzer was originally soldered to a pin used by SPI . As soon as the display initialized, things went sideways. Game Loop vs. Main Loop Architecture: My game logic was running inside an infinite loop within a standalone function, while the sound playback logic lived in the main loop calling that function. Solution: soldered the buzzer to another pin and quick architecture refactor solved both problems pretty easily — I spent about an hour on each issue. The Biggest Problem: A very loud buzzer remains the biggest and unsolved issue. I tried to tame it in software using PWM (Pulse Width Modulation) to decrease the volume. But PWM control is tricky on its own, and since the buzzer relies on a fixed frequency to generate tone, layering custom PWM over it completely broke the audio pitch. Next Up: Implement smooth scrolling text for the console startup screen. Conquer this cursed PWM/volume issue once and for all. Start writing a Flappy Bird clone"}, {"post_id": 43336, "ts": "2026-08-08T15:14:08Z", "hours": 3.9092, "text": "DevLog №4 What’s New Pause Menu Implemented: Players can now pause the game at any time with two options: -> Continue: Return to the game with all current progress intact. -> Exit to Menu: Quit to the main menu (resets all game progress). Technical Challenges The main challenge was handling this within my current architecture, which relies on a main loop with a nested switch statement for state management. I needed a reliable way for these states to communicate and handle game object lifecycles properly: -> Persisting Objects: Retaining game objects in memory when resuming from pause. -> Cleaning Up: Safely destroying objects and resetting state when returning to the main menu (either voluntarily or on Game Over). Next Goals -> Add sound effects using the built-in piezo buzzer. -> Implement a new mini-game: Flappy Bird."}, {"post_id": 42572, "ts": "2026-08-07T12:00:33Z", "hours": 3.4556, "text": "DevLog №3 : What I worked on: Started implementing the Pause state during gameplay. To make this work properly, the game needs to preserve the current state of both the Snake and Food objects when transitioning into pause and back. Slightly refactored the main loop architecture and updated the SnakeGameHandle function. The Struggle: decided to write a helper function to update values inside my StateMachine (handling states like Game, Menu, Pause, Snake, FlappyBird).Blaming it on late-night fatigue, I wrote the function in the most overcomplicated way possible… and called it even worse. The result? Every time I exited the Snake game, I was greeted by a blank black screen because the Menu state was never getting assigned correctly. I spent over an hour staring at the code, completely stumped as to why it was breaking. I think it happened because of self-assignment The Fix: Decided to get some sleep. Woke up the next morning with a fresh head and fixed the black screen issue in 20 minutes. Next Goal: Finish up the Pause feature completely"}, {"post_id": 41914, "ts": "2026-08-06T13:03:12Z", "hours": 1.4547, "text": "devlog #2: added StateHandle file to handle all the actions(menu, games) in my main loop in main.cpp. Now my main loop is shorter and more understandable"}, {"post_id": 41835, "ts": "2026-08-06T09:24:37Z", "hours": 3.1758, "text": "Devlog #1: I uploaded all the files I had written before I found out about Hack Club. After that, I spent most of my time figuring out how to detect collisions between the snake and the food. Since I originally built everything pixel-by-pixel instead of using a grid system, comparing screen positions directly required too many pixel checks. To optimize this and avoid checking every single pixel pair, I had to tweak the logic. Even though it was tricky to adjust without a strict grid, the collision detection is working now and the game is totally playable"}]...
|
Title: mini_consol by @kdenis | Stardance
Devlogs Title: mini_consol by @kdenis | Stardance
Devlogs:
Devlog #1: I uploaded all the files I had written before I found out about Hack Club. After that, I spent most of my time figuring out how to detect collisions between the snake and the food. Since I originally built everything pixel-by-pixel instead of using a grid system, comparing screen positions directly required too many pixel checks. To optimize this and avoid checking every single pixel pair, I had to tweak the logic. Even though it was tricky to adjust without a strict grid, the collision detection is working now and the game is totally playable
devlog #2: added StateHandle file to handle all the actions(menu, games) in my main loop in main.cpp. Now my main loop is shorter and more understandable
DevLog №3 : What I worked on: Started implementing the Pause state during gameplay. To make this work properly, the game needs to preserve the current state of both the Snake and Food objects when transitioning into pause and back. Slightly refactored the main loop architecture and updated the SnakeGameHandle function. The Struggle: decided to write a helper function to update values inside my StateMachine (handling states like Game, Menu, Pause, Snake, FlappyBird).Blaming it on late-night fatigue, I wrote the function in the most overcomplicated way possible… and called it even worse. The result? Every time I exited the Snake game, I was greeted by a blank black screen because the Menu state was never getting assigned correctly. I spent over an hour staring at the code, completely stumped as to why it was breaking. I think it happened because of self-assignment The Fix: Decided to get some sleep. Woke up the next morning with a fresh head and fixed the black screen issue in 20 minutes. Next Goal: Finish up the Pause feature completely
DevLog №4 What’s New Pause Menu Implemented: Players can now pause the game at any time with two options: -> Continue: Return to the game with all current progress intact. -> Exit to Menu: Quit to the main menu (resets all game progress). Technical Challenges The main challenge was handling this within my current architecture, which relies on a main loop with a nested switch statement for state management. I needed a reliable way for these states to communicate and handle game object lifecycles properly: -> Persisting Objects: Retaining game objects in memory when resuming from pause. -> Cleaning Up: Safely destroying objects and resetting state when returning to the main menu (either voluntarily or on Game Over). Next Goals -> Add sound effects using the built-in piezo buzzer. -> Implement a new mini-game: Flappy Bird.
Devlog №5 I added sound effects for every button press on my mini-console! Sounds like a super quick and easy task, right? Well, it should have been. But a few architectural bumps in the road ended up eating way more time than expected. What went wrong (and how I fixed it) Hardware Pin Conflict: My buzzer was originally soldered to a pin used by SPI . As soon as the display initialized, things went sideways. Game Loop vs. Main Loop Architecture: My game logic was running inside an infinite loop within a standalone function, while the sound playback logic lived in the main loop calling that function. Solution: soldered the buzzer to another pin and quick architecture refactor solved both problems pretty easily — I spent about an hour on each issue. The Biggest Problem: A very loud buzzer remains the biggest and unsolved issue. I tried to tame it in software using PWM (Pulse Width Modulation) to decrease the volume. But PWM control is tricky on its own, and since the buzzer relies on a fixed frequency to generate tone, layering custom PWM over it completely broke the audio pitch. Next Up: Implement smooth scrolling text for the console startup screen. Conquer this cursed PWM/volume issue once and for all. Start writing a Flappy Bird clone
Devlog №6 Today I quickly set up the startup text so it scrolls smoothly, and that’s pretty much it. Nothing complicated, really—took me literally half an hour. Next up: finish tuning the PWM to quiet down the audio, and then I’ll probably work on making a more interesting splash screen.
Devlog №7 implemted PMW to control sound volume
Devlog №8 Bird Physics & Rendering Flicker-Free Rendering To prevent screen flickering caused by redrawing the entire screen, I optimized the loop by clearing only the bird’s exact position before rendering its new frame. Physics Implementation Movement relies on both velocity and acceleration : Acceleration continuously increases the downward velocity (gravity). Jump mechanic resets the downward velocity to initial on every input. Next Steps: Wall Generation Obstacle Setup I need to create an array of one dynamic wall . Recycling Logic As soon as a wall reaches the left edge of the screen, it will wrap around to the right . The height/position will randomize each time it reappears to form a continuous level.
DevLog №9 ###What’s New Walls & Pipes Mechanics: Added moving wall obstacles. Score Counter: Integrated a score tracking system. ###How It Works Score Logic: To keep things simple and efficient, the score increases automatically whenever a wall reaches the left edge of the screen. Illusion of Movement: The bird stays in place while the walls continuously cycle and reset from the right edge back to the left. This creates a smooth side-scrolling illusion! It was a fairly straightforward feature to implement, but it instantly made the project feel much more like a complete game!
DevLog №10 prepared everything for shiping. added wiring.png and AI usage declaration in my README file.
Ships:
What did you make? I built a DIY mini handheld console powered by an Arduino Nano! My main goal was to dive into embedded systems development and get hands-on experience with hardware and C++. Because of this, I focused on core functionality rather than super complex games. When you turn it on, you’re greeted with a scrolling “mini console” text, followed by a game selection menu. During gameplay, pressing the designated pause button opens a pause menu where you can either resume (saving your current progress) or exit to the main menu. I included two games: Snake and Flappy Bird. What was challenging? Generating non-blocking audio feedback was definitely the hardest part. I implemented button click sounds using PWM to control the volume, which took a lot of time to tune since working with audio signals is trickier than controlling a motor. It required pseudo-multitasking using millis() to keep the gameplay smooth while playing sounds. Also, in Snake, I initially didn’t use a grid-based movement system and implemented pixel-by-pixel movement instead. Because of this, collision detection with food can occasionally miss. What are you proud of? I’m really proud of the software architecture and code structure in several parts of the project. I focused on clean OOP principles, solid encapsulation, and clear code organization (though a few spots are still a bit messy!). I’m also proud that i didn’t use delay funtion and of my Settings.h file What should people know so they can test your project? To test or build it, you just need to know how to connect the display and buttons to an Arduino Nano. Inside the Settings.h file, you can easily customize pin configurations, volume, colors, display sizes, and game speeds. I also added comments throughout the codebase to make it easy to follow along!...
|
1793602658.824995
|
1793689058.824995
|
|
63922
|
miniaturity's personal website by @miniaturity miniaturity's personal website by @miniaturity | Stardance...
|
miniaturity
|
0
|
8.36
|
0
|
[]
|
[{"post_id": 72031, "ts": "202 [{"post_id": 72031, "ts": "2026-09-22T01:08:41Z", "hours": 5.1069, "text": "starting work on homepage made a cool ripple background that inverts. cards revolve around the center in a circle added dialogue that appears when you hover over certain areas added lastfm component (gets my last track through cloudflare workers) it looks real empty.. just for now"}, {"post_id": 71127, "ts": "2026-09-20T10:27:25Z", "hours": 1.9581, "text": "my favorite pokemon + titlecard added my favorite pokemon card! it’s an interactable full-art that shines as you hover over it! added my name + some logos"}, {"post_id": 70906, "ts": "2026-09-20T00:23:18Z", "hours": 1.2947, "text": "first devlog: interactive sine-wave foreground created a sine-wave foreground element that reacts to your mouses position. using the distance from the mouse to each element, i increased the amplitude of the wave the closer the pointer is. also has (pseudo) random animated sine waves flowing through."}]...
|
Title: miniaturity's personal website by @mini Title: miniaturity's personal website by @miniaturity | Stardance
Devlogs:
first devlog: interactive sine-wave foreground created a sine-wave foreground element that reacts to your mouses position. using the distance from the mouse to each element, i increased the amplitude of the wave the closer the pointer is. also has (pseudo) random animated sine waves flowing through.
my favorite pokemon + titlecard added my favorite pokemon card! it’s an interactable full-art that shines as you hover over it! added my name + some logos
starting work on homepage made a cool ripple background that inverts. cards revolve around the center in a circle added dialogue that appears when you hover over certain areas added lastfm component (gets my last track through cloudflare workers) it looks real empty.. just for now...
|
1793055198.827013
|
1793659998.827013
|
|
71820
|
minigames by @kevinbms | Stardance
|
kevinbms
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: minigames by @kevinbms | Stardance
|
1793224053.1620574
|
1793828853.1620574
|
|
70692
|
minimOS by @rbl | Stardance
|
rbl
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: minimOS by @rbl | Stardance
|
1793199034.7264533
|
1793803834.7264533
|
|
64209
|
minimal clock by @Synt-0 | Stardance
|
Synt-0
|
0
|
1.54
|
0
|
[]
|
[{"post_id": 71883, "ts": "202 [{"post_id": 71883, "ts": "2026-09-21T18:08:51Z", "hours": 1.5442, "text": "i finished the schematic (i forgot to record so 1hr not recorded ) and the pcb need to go on with the case model (it was today when i found out kicad had raytracing man it took 10s another one 87sec idk why in my pentium gold with igpu ! )"}]...
|
Title: minimal clock by @Synt-0 | Stardance
Devlo Title: minimal clock by @Synt-0 | Stardance
Devlogs:
i finished the schematic (i forgot to record so 1hr not recorded ) and the pcb need to go on with the case model (it was today when i found out kicad had raytracing man it took 10s another one 87sec idk why in my pentium gold with igpu ! )...
|
1793058778.2074478
|
1793663578.2074478
|
|
65650
|
minimalOS by @hanrokarate052 | Stardance
|
hanrokarate052
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: minimalOS by @hanrokarate052 | Stardance
|
1793090923.3418293
|
1793695723.3418293
|
|
48302
|
minimalistic-sufucatic-tab by @alihassnainxdot | S minimalistic-sufucatic-tab by @alihassnainxdot | Stardance...
|
alihassnainxdot
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: minimalistic-sufucatic-tab by @alihassnainx Title: minimalistic-sufucatic-tab by @alihassnainxdot | Stardance...
|
1793224297.713331
|
1793829097.713331
|
|
24210
|
minspace by @_minspace | Stardance
|
_minspace
|
0
|
13.4
|
0
|
[]
|
[{"post_id": 19681, "ts": "202 [{"post_id": 19681, "ts": "2026-07-01T02:16:24Z", "hours": 13.4028, "text": "Devlog #1: HOW HAVE I DONE NOTHING IN 13 HOURS. was too scared to post this devlog because I’ve lowkey done nothing … but then I looked and saw 13 HOURS?? anyways, this is what I did for my personal website this last week!!: 1 Design This was the fun part!! Most of the time spent this past week was designing my character who the entire website is pretty much themed around and the palette for everything!! I mean, they’re not on the site yet.. but.. they exist pinkie promise. i also designed venus (the little cute goldfish who’s the cursor!! isnt he the cutest!!) and the favicon! 2 Coding… god I hate javascript –Ok guys i promise I’ve coded a website before, but whenever it came to javascript I lowkey just … copied junk from like w3schools or something 💀 so actually trying to learn what to do was like trying to put a circle in a square hole in my little dumb brain. the main thing was the cursor, omg.. that might have taken the entire 13 hours like genuinely i contemplated giving up like 80 times 💀💀 dont even get me started on the stupid draggable thing.. i’m glad i did it now so I wouldn’t crash out later but JEEZ I WAS CRASHING OUT NOW 😭✌️ NEWSFLASH!! CODING IS… KINDA HARD ACTUALLY thank god for youtube and the probably 30 year old redditors named like u/poopfart and u/discordekitten for posting the most comprehensive tutorials on the internet ily What’s Next? I’m planning on implementing one of the main events next: the banner!! it’s not even on the site yet but.. it’s in the works! I’m planning on having my little character be interactive in it but idk how.. see yall in another week probably LMBO my LAPSE so you can see my timelapses of art: https://lapse.hackclub.com/user/@minmin my GIT REPO: https://github.com/ggolf-wangg/minspace the in-progress SITE: https://minspace.neocities.org/ TLDR: absolute HTMLarp tries and fails for 13 hours to just change the cursor and nothing else this video is so embarrassing there’s LITERALLY nothing there 😭😭"}]...
|
Title: minspace by @_minspace | Stardance
Devlogs Title: minspace by @_minspace | Stardance
Devlogs:
Devlog #1: HOW HAVE I DONE NOTHING IN 13 HOURS. was too scared to post this devlog because I’ve lowkey done nothing … but then I looked and saw 13 HOURS?? anyways, this is what I did for my personal website this last week!!: 1 Design This was the fun part!! Most of the time spent this past week was designing my character who the entire website is pretty much themed around and the palette for everything!! I mean, they’re not on the site yet.. but.. they exist pinkie promise. i also designed venus (the little cute goldfish who’s the cursor!! isnt he the cutest!!) and the favicon! 2 Coding… god I hate javascript –Ok guys i promise I’ve coded a website before, but whenever it came to javascript I lowkey just … copied junk from like w3schools or something 💀 so actually trying to learn what to do was like trying to put a circle in a square hole in my little dumb brain. the main thing was the cursor, omg.. that might have taken the entire 13 hours like genuinely i contemplated giving up like 80 times 💀💀 dont even get me started on the stupid draggable thing.. i’m glad i did it now so I wouldn’t crash out later but JEEZ I WAS CRASHING OUT NOW 😭✌️ NEWSFLASH!! CODING IS… KINDA HARD ACTUALLY thank god for youtube and the probably 30 year old redditors named like u/poopfart and u/discordekitten for posting the most comprehensive tutorials on the internet ily What’s Next? I’m planning on implementing one of the main events next: the banner!! it’s not even on the site yet but.. it’s in the works! I’m planning on having my little character be interactive in it but idk how.. see yall in another week probably LMBO my LAPSE so you can see my timelapses of art: https://lapse.hackclub.com/user/@minmin my GIT REPO: https://github.com/ggolf-wangg/minspace the in-progress SITE: https://minspace.neocities.org/ TLDR: absolute HTMLarp tries and fails for 13 hours to just change the cursor and nothing else this video is so embarrassing there’s LITERALLY nothing there 😭😭...
|
1793551797.1380153
|
1794156597.1380153
|
|
60555
|
mint link by @juhkiranjan | Stardance
|
juhkiranjan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mint link by @juhkiranjan | Stardance
|
1793036866.715911
|
1793641666.715911
|
|
60845
|
mintyp3 by @abhinavbandaru | Stardance
|
abhinavbandaru
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mintyp3 by @abhinavbandaru | Stardance
|
1793037063.03669
|
1793641863.03669
|
|
51199
|
mip - money ive spent by @kunshyuh | Stardance
|
kunshyuh
|
0
|
2.27
|
0
|
[]
|
[{"post_id": 51189, "ts": "202 [{"post_id": 51189, "ts": "2026-08-20T18:07:24Z", "hours": 0.8153, "text": "uhm the expense history is finally showing expenses and the next code will be for SQL Database and small tweaks to the app and final update will be a html based local host to use this"}, {"post_id": 50517, "ts": "2026-08-19T18:17:53Z", "hours": 0.5692, "text": "uhh the add expense button is finally working with a lot of options of types of expenses, also added a seperate for all the past expenses done in the current month, still not asthetic or minimal but it will take time"}, {"post_id": 50147, "ts": "2026-08-19T07:53:40Z", "hours": 0.8889, "text": "have added income, spent, remaining and add expense button!! its not minimal yet"}]...
|
Title: mip - money ive spent by @kunshyuh | Starda Title: mip - money ive spent by @kunshyuh | Stardance
Devlogs:
have added income, spent, remaining and add expense button!! its not minimal yet
uhh the add expense button is finally working with a lot of options of types of expenses, also added a seperate for all the past expenses done in the current month, still not asthetic or minimal but it will take time
uhm the expense history is finally showing expenses and the next code will be for SQL Database and small tweaks to the app and final update will be a html based local host to use this...
|
1793379277.0217814
|
1793984077.0217814
|
|
57871
|
mirari by @AbhrajitGogoi | Stardance
|
AbhrajitGogoi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mirari by @AbhrajitGogoi | Stardance
|
1792929274.92774
|
1793793274.92774
|
|
57268
|
mirrorbot by @denis | Stardance
|
denis
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mirrorbot by @denis | Stardance
|
1793426057.1375268
|
1794030857.1375268
|
|
14704
|
misinformation-detector by @syntaxbrew_dev | Stard misinformation-detector by @syntaxbrew_dev | Stardance...
|
syntaxbrew_dev
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: misinformation-detector by @syntaxbrew_dev Title: misinformation-detector by @syntaxbrew_dev | Stardance...
|
1792893135.951015
|
1793757135.951015
|
|
3964
|
miso by @masonnishimura123 | Stardance
|
masonnishimura123
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: miso by @masonnishimura123 | Stardance
|
1793188535.0374296
|
1793793335.0374296
|
|
52193
|
mission completed by @jasika | Stardance
|
jasika
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mission completed by @jasika | Stardance
|
1793425989.318386
|
1794030789.318386
|
|
18322
|
mission z by @devansh_thakur_736 | Stardance
|
devansh_thakur_736
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mission z by @devansh_thakur_736 | Stardanc Title: mission z by @devansh_thakur_736 | Stardance...
|
1793246089.2979577
|
1793850889.2979577
|
|
61160
|
missons by @johnathonl | Stardance
|
johnathonl
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: missons by @johnathonl | Stardance
|
1793037242.6649306
|
1793642042.6649306
|
|
64828
|
mit-topper-pov by @tejasv | Stardance
|
tejasv
|
1
|
2.79
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T21:16:44Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created mit-pov, a browser-based desktop OS software, but with the perspective taken from an MIT topper’s point of view rather than the default OS design. The first screen that appeared after launch was the welcome page, which then transitioned to the actual desktop. The desktop comprises a wallpaper, a top bar, a clock, and icons on the bottom bar, which open windows with drag-and-drop. The applications were Transcript.exe (GPA and coursework in the form of a real-life transcript), Trophy Case.exe (showcasing achievements), and Projects.exe (portfolio cards in the form of a portfolio). The new application the user has not seen in the tutorial is the Terminal.exe, which is a fake interactive terminal where the user can type in commands, such as whoami, and receive an appropriate response in the terminal emulator. What were the biggest challenges? The biggest challenge was implementing the window mechanic. It had to have drag-and-drop, focus listening, and opening/closing functions, and all of them had to share the same set of rules or have some of them overridden due to specific cases, such as having multiple windows open at the same time and having their z-index sorted out. What are you most proud of? I am most proud of the fact that the application was not just a modified version of the given tutorial. It involved using React and TypeScript framework rather than the default JavaScript code and, thus, constituted a different project at its core. What should users know before testing? The users do not have to log in or type in any credentials before launching. The first step would be to open applications by clicking on the icons on the bottom bar and playing around with them, including dragging windows. Then, the user should try to open the Terminal.exe and type some commands to see the easter eggs.", "repo": "https://github.com/tejasvswipe/mit-pov-webos", "demo": "https://mit-pov-webos.vercel.app"}]...
|
[{"post_id": 75507, "ts": "202 [{"post_id": 75507, "ts": "2026-09-30T09:49:16Z", "hours": 0.2667, "text": "ADDED PLENTY OF FEATURES TO MAKE IN 80% HUMAN AND REWRITE README BY MY SELF"}, {"post_id": 75288, "ts": "2026-09-29T17:16:52Z", "hours": 0.3272, "text": "Debugged the code"}, {"post_id": 74768, "ts": "2026-09-28T06:19:37Z", "hours": 1.1936, "text": "added new feature , spotify integrity , alarm , llm support, now this website has 12 features , vroooommm!!!!! MIT i am coming"}, {"post_id": 72408, "ts": "2026-09-22T21:06:06Z", "hours": 0.7753, "text": "an ui ux update with real features mit-pov-webos.vercel.app"}, {"post_id": 72348, "ts": "2026-09-22T18:36:53Z", "hours": 0.3078, "text": "developin’ the backend for the GOAT for the MIT aspirants and beautiful , rizzy frontend in the , for the cool aspirants only"}]...
|
Title: mit-topper-pov by @tejasv | Stardance
Devl Title: mit-topper-pov by @tejasv | Stardance
Devlogs:
developin’ the backend for the GOAT for the MIT aspirants and beautiful , rizzy frontend in the , for the cool aspirants only
an ui ux update with real features mit-pov-webos.vercel.app
added new feature , spotify integrity , alarm , llm support, now this website has 12 features , vroooommm!!!!! MIT i am coming
Debugged the code
ADDED PLENTY OF FEATURES TO MAKE IN 80% HUMAN AND REWRITE README BY MY SELF
Ships:
I created mit-pov, a browser-based desktop OS software, but with the perspective taken from an MIT topper’s point of view rather than the default OS design. The first screen that appeared after launch was the welcome page, which then transitioned to the actual desktop. The desktop comprises a wallpaper, a top bar, a clock, and icons on the bottom bar, which open windows with drag-and-drop. The applications were Transcript.exe (GPA and coursework in the form of a real-life transcript), Trophy Case.exe (showcasing achievements), and Projects.exe (portfolio cards in the form of a portfolio). The new application the user has not seen in the tutorial is the Terminal.exe, which is a fake interactive terminal where the user can type in commands, such as whoami, and receive an appropriate response in the terminal emulator. What were the biggest challenges? The biggest challenge was implementing the window mechanic. It had to have drag-and-drop, focus listening, and opening/closing functions, and all of them had to share the same set of rules or have some of them overridden due to specific cases, such as having multiple windows open at the same time and having their z-index sorted out. What are you most proud of? I am most proud of the fact that the application was not just a modified version of the given tutorial. It involved using React and TypeScript framework rather than the default JavaScript code and, thus, constituted a different project at its core. What should users know before testing? The users do not have to log in or type in any credentials before launching. The first step would be to open applications by clicking on the icons on the bottom bar and playing around with them, including dragging windows. Then, the user should try to open the Terminal.exe and type some commands to see the easter eggs....
|
1793051343.5365715
|
1793915343.5365715
|
|
52450
|
mix it fix it by @Tallurisaikumar | Stardance
|
Tallurisaikumar
|
1
|
13.0
|
100
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T06:22:44Z", "hours": 13.0, "multiplier": 7.96, "payout": 100, "blessing": "neutral", "text": "I made a puzzle sliding game called “mix it. fix it.” where the user can choose a random image or insert his/her image and make it into a puzzle which he/she can solve it by moving the pieces into their correct position. I included some extra features like streaks, XP, levels, coins, missions, hints, undo, personal best, pause/restart, dark mode, keyboard, and mobile controls. What were the challenges? The most challenging part was to make the mechanics of the game work correctly. Every piece has to move only when it is next to the empty slot, and to test it all out on different sizes, like 5×5, 6×6, 7×7 to see if it worked. Another challenge was to make it compatible for both mobile and pc because their controls are different. What are you most proud of? I’m most proud of turning the project into something “real,” that makes it feel like an actual small game and not just a demo sliding puzzle experiment. Having XP, streaks, missions, hints, personal best, and puzzle sizes all make the game feel more complete, like a real game that makes you want to play more. Another thing that I am proud of is that the user can insert his/her photo into the game which creates a unique experience. What feedback would you give to other testers? First, I recommend to try a 2×2 puzzle first to get used to the controls. Tap/click on the piece that is next to the empty slot to move it there. After getting used to it, you can try bigger sizes like 4×4, 5×5, etc. Also, you can: -insert your own image, try different sizes of puzzles, hit the hint button when you are stuck, press undo to go back to your previous move, try keyboard controls, test on mobile if you have one, and try to beat your personal best! 💪 Pro tip: the bigger the size is, the harder it is!", "repo": "https://github.com/tallurisai9346-beep/Mix-it-Fix-it", "demo": "https://mix-it-fix-it.vercel.app/"}]...
|
[{"post_id": 52113, "ts": "202 [{"post_id": 52113, "ts": "2026-08-22T06:11:21Z", "hours": 0.3853, "text": "finally my game complete"}, {"post_id": 52081, "ts": "2026-08-22T04:47:27Z", "hours": 0.9117, "text": "my game complet"}, {"post_id": 52054, "ts": "2026-08-22T03:05:13Z", "hours": 6.4922, "text": "add this like bord size,and levels"}, {"post_id": 51850, "ts": "2026-08-21T18:32:28Z", "hours": 0.7711, "text": "now my main some complete out put is very good"}, {"post_id": 51747, "ts": "2026-08-21T16:01:12Z", "hours": 3.9742, "text": "my new project now name is mix it fix it game i typing html now"}]...
|
Title: mix it fix it by @Tallurisaikumar | Stardan Title: mix it fix it by @Tallurisaikumar | Stardance
Devlogs:
my new project now name is mix it fix it game i typing html now
now my main some complete out put is very good
add this like bord size,and levels
my game complet
finally my game complete
Ships:
I made a puzzle sliding game called “mix it. fix it.” where the user can choose a random image or insert his/her image and make it into a puzzle which he/she can solve it by moving the pieces into their correct position. I included some extra features like streaks, XP, levels, coins, missions, hints, undo, personal best, pause/restart, dark mode, keyboard, and mobile controls. What were the challenges? The most challenging part was to make the mechanics of the game work correctly. Every piece has to move only when it is next to the empty slot, and to test it all out on different sizes, like 5×5, 6×6, 7×7 to see if it worked. Another challenge was to make it compatible for both mobile and pc because their controls are different. What are you most proud of? I’m most proud of turning the project into something “real,” that makes it feel like an actual small game and not just a demo sliding puzzle experiment. Having XP, streaks, missions, hints, personal best, and puzzle sizes all make the game feel more complete, like a real game that makes you want to play more. Another thing that I am proud of is that the user can insert his/her photo into the game which creates a unique experience. What feedback would you give to other testers? First, I recommend to try a 2×2 puzzle first to get used to the controls. Tap/click on the piece that is next to the empty slot to move it there. After getting used to it, you can try bigger sizes like 4×4, 5×5, etc. Also, you can: -insert your own image, try different sizes of puzzles, hit the hint button when you are stuck, press undo to go back to your previous move, try keyboard controls, test on mobile if you have one, and try to beat your personal best! 💪 Pro tip: the bigger the size is, the harder it is!...
|
1792875258.8018405
|
1793739258.8018405
|
|
67524
|
mlstudio by @aydenzyang | Stardance
|
aydenzyang
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mlstudio by @aydenzyang | Stardance
|
1793112555.2118251
|
1793717355.2118251
|
|
69867
|
mm my website by @ashwin8630 | Stardance
|
ashwin8630
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mm my website by @ashwin8630 | Stardance
|
1793587638.6251087
|
1794192438.6251087
|
|
8850
|
moayed-game by @moayed_jouini | Stardance
|
moayed_jouini
|
0
|
0.0
|
0
|
[]
|
[{"post_id": 3016, "ts": "2026 [{"post_id": 3016, "ts": "2026-06-05T22:53:12Z", "hours": 0.0, "text": "that’s crazy to see my work in 1h"}]...
|
Title: moayed-game by @moayed_jouini | Stardance
Title: moayed-game by @moayed_jouini | Stardance
Devlogs:
that’s crazy to see my work in 1h...
|
1793494157.5588303
|
1794098957.5588303
|
|
1892
|
mobile tool by @Jk098 | Stardance
|
Jk098
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mobile tool by @Jk098 | Stardance
|
1793256478.5028615
|
1793861278.5028615
|
|
16571
|
mocha by @Glitchy | Stardance
|
Glitchy
|
1
|
101.0
|
1806
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T18:57:02Z", "hours": 101.0, "multiplier": 17.94, "payout": 1806, "blessing": "neutral", "text": "I made a package manager for Windows, which is somewhat backwards compatible with scoop packages. To be honest there’s still a lot of work that I want to do, but I have exams and college application coming up soon so I can’t. That’s not to say I’m not happy with the state of the ship. At the very least it has all the core features that a package manager should have, but there are still a lot of bugs which is why this is only v0.0.1. The biggest challenge by far was trying to figure out how Scoop does things internally. A lot of stuff just doesn’t have documentation, so you have to dig through the really messy PowerShell source code.", "repo": "https://github.com/Protract-123/mocha", "demo": "https://github.com/Protract-123/mocha/releases/latest"}]...
|
[{"post_id": 67579, "ts": "202 [{"post_id": 67579, "ts": "2026-09-13T18:33:17Z", "hours": 1.7761, "text": "So I wrote a README, added a license (MIT of course) and setup CI/CD so that releases are automatically built and deployed. Honestly I forgot how hard it is to write a good README. You need to get a lot of information through without it looking like a wall of text."}, {"post_id": 67267, "ts": "2026-09-13T10:36:48Z", "hours": 5.8047, "text": "I forgot to make a devlog in between so this will be like 2 bigger devlogs. I parallelized bucket updates, which speeds it up quite a bit. This also allowed me to try out parallelism even more, which I plan to apply throughout the CLI later on. I also added configuration options for the runners which mocha shim will use to run certain file types. For example, you can set the python-runner to select the python version that’ll be used to run python scripts that are shimmed. Downloads now have a progress bar, so you don’t need to wonder whether something is happening or not during a long download. Finally env_set is fully supported since I added the relevant variable parsing. This was pretty much just me cleaning out the TODO list before I ship. I also did a lot of smaller bug fixes and refactors as seen below. fix(commands): prevent app installation if already installed (cb27d07) fix(commands): fix config opening with “start” (74f3679) fix(commands): correctly handle non-apps when upgrading (f7419f6) fix: make LogOutput go to Stdout not Stderr (bc10357) fix: handle empty versions correctly (2287da9) fix(pkg): remove correct temp dir (33189b6) fix(shim): warn for unknown shim extension (622c2b4) fix: skip downloads with no hash by default (69d4e35) fix: use correct timeout for downloads (44e527b) fix: drop unnecessary return value from GetExecutableEntries (9fd845c) fix(config): remove unused option (1339971) fix(commands): don’t error for valid results (87c4d6c) refactor(config): rename variables/functions (f253d9d) fix: use unique temp directories (a159e23) refactor: use fmt.Fprintln directly (d2d54bf)"}, {"post_id": 65401, "ts": "2026-09-10T14:55:22Z", "hours": 2.5386, "text": "Lots of small bug fixes and changes, I’ll just list them out: feat(cmd): allow removal of multiple shims in one execution (f2fae3f) fix(manifest): correctly ignore invalid shortcut entries (6a08478) fix(fileops): use correct registry type (5d5d796) fix(config): seed config with defaults (9dfaaff) fix(cmd): use correct release sources (a2a9ba1) fix(cmd): use bucket from install info (5a9109b) I also added support for more file types being shimmed, which helps a lot with compatibility. The file types are .py , .bat , .cmd , .jar and .ps1 ."}, {"post_id": 52474, "ts": "2026-08-22T16:37:15Z", "hours": 4.6758, "text": "Lot of time going into this devlog, but it makes sense since I did do a lot. I did this sweeping refactor of the entire commands module which moved around a lot of code. Essentially each command now gets it’s own directory under the commands module that represents it’s children/parents. For example commands/shim/remove/cmd.go contains code for the mocha shim remove command. Each cmd.go contains a Command struct that has the relevant fields and functions attached to it. This structure just makes things more organized and also means adding test files will be a bit easier since functionality is now isolated. I also sorted out the shim binary. So essentially https://github.com/ScoopInstaller/Shim offers different version of the shim binary which can be installed. Previously I hard coded the code to install cpp v0.1.0 but now users can run mocha shim binary releases to see the options and mocha shim binary setup to install their chosen binary. This also means we actually get the latest releases from GitHub."}, {"post_id": 51141, "ts": "2026-08-20T17:11:51Z", "hours": 3.6722, "text": "Finally got a bit of time to do a bit of development. First thing I did was remove a field from install.json to match scoop . This means that mocha should be a drop in replacement for existing scoop installs. Then I added partial support for env_set and env_add_path . The main thing I need to do to complete the feature is parse variables and replace them with the appropriate paths. These 2 fields are some of the last manifest fields I need to support besides pre/post (un)install hooks."}, {"post_id": 34596, "ts": "2026-07-25T13:39:02Z", "hours": 2.5778, "text": "My summer break has ended so development is going to be a lot slower from now. I added mocha outdated so you can list outdated apps before upgrading them to a newer version. Besides that I tweaked a lot of stuff related to CLI output. For example I changed search to output one table, and simply outputting exact matches at the top of that table. I also changed a lot of messages which were using LogOutput to LogInfo so they use the correct color and output to stderr and not stdout ."}, {"post_id": 31801, "ts": "2026-07-20T14:04:04Z", "hours": 1.5481, "text": "Not sure why I didn’t do this earlier, but I’ve added success messages to commands where it makes sense. Also added a success color to the config so you can change what the success color is. I do still need to improve CLI output quite a bit, but it’s slowly getting there."}, {"post_id": 30693, "ts": "2026-07-18T14:02:54Z", "hours": 2.1922, "text": "I’m writing this one right before F1 Qualifying at Spa! Continuing with the trend of some of my recent work, I improved what table outputs look like to be a little bit more readable. We now use proper separators in the form of Unicode Box Drawing Characters . I also made column alignment configurable, which improves legibility for some commands like mocha bucket list and mocha cache show . I’ve attached an image of the scoop and mocha versions of bucket list so you can compare for yourself."}, {"post_id": 30286, "ts": "2026-07-17T18:51:34Z", "hours": 3.4797, "text": "I love refactoring!!!! I’ll probably end up spending another 20 hours just on refactoring because it’s so fun!!!! This time around I wanted to refactor the code so that our commands orchestrate stuff instead of the helper functions. For example, pkg.Install would first download a package, then install it, and then link it through shims and shortcuts all by itself. This causes issues because it means error messages become slightly worse, and it creates a class of bugs due to edge cases where we don’t necessarily want this order of orchestration. Hence I did a lot of refactoring in the pkg module. I also ended up adding a way to skip verification of downloads when downloading, installing or updating a package through --skip-verify . It’s a useful option in situations where there is a malformed manifest or simply no hash to begin with."}, {"post_id": 30054, "ts": "2026-07-17T10:28:53Z", "hours": 4.6269, "text": "mocha now supports a user defined theme for output colors. In the process I ended up doing a lot of stuff related to the config. First thing I did was swap to fatih/color for colored output, since it handles stuff like colors in command prompt and removing color when output is piped. Then I refactored the config module. Earlier I would pass around a MochaConfiguration object through every function. Now I use a config singleton that’s accessible from any function. Why? Because it means I don’t need to pass the object every time I want to log information. Also means I don’t need to pass mochaDir through almost every function in the codebase. Getting user defined themes was a bit complicated because I needed a good way to handle a default theme so output doesn’t look bad if parsing fails. I handled this by only using the configured theme if every color resolves properly. Otherwise output falls back to the already loaded default theme. Due to this you still get colored output even if there are errors or warning before the configuration and theme is loaded."}, {"post_id": 29066, "ts": "2026-07-15T18:30:47Z", "hours": 4.7214, "text": "So I’ve been doing a bit of refactoring, a bit of bug fixing and a bit of optimization. Essentially just polishing mocha before I work on the next feature. Here’s some of the stuff I did: created tests for ParseRefString to validate behavior cache manifest json between info calls since I/O is really slow bumped dependency versions refactored manifest/info.go Besides that I fixed the uninstall flow since it was really bugged after the latest changes. Essentially mocha would uninstall apps with incorrect info. It would also try to remove shims/shortcuts for apps which don’t have any active shims/shortcuts. I then added a bit of logging since the uninstall command didn’t give any user output for whatever reason (i forgot to earlier)."}, {"post_id": 27086, "ts": "2026-07-12T10:29:45Z", "hours": 6.4975, "text": "This is going to be the equivalent of 2 devlogs since I thought I made one earlier for persists but I didn’t. New feature! We now handle persist items in order to store data between versions. These are files which are persisted between versions of an app. Lets take git as an example to explain why persist exists. Say you want to make sure your git config isn’t deleted every time you update. The issue with this is that the config file is saved in the version specfic directory. To resolve this we can keep the config in $MOCHA_DIR/persist and then symlink the config to where it needs to be, which is essentially what persist tells us to do. Since we handled persist items last time we can now implement mocha upgrade to update apps. The way scoop handles updates is by first removing anything that references the app, like shortcuts or shims . Then we just follow the install process from scratch. This leaves the old version available in case a user wants to revert versions due to a bug, while also updating to the latest available version. This can be seen in the video below, which shows me updating llama.cpp-hip-radeon ."}, {"post_id": 23572, "ts": "2026-07-06T16:39:13Z", "hours": 3.53, "text": "We now create shortcuts! This means any GUI apps should show up properly in the start menu, just like they do when you install with scoop . All I really had to do was a bit of orchestration since I decided to vendor in an implementation from https://github.com/jxeng/shortcut Besides that I expanded the number of apps that are supported by implementing a bit of code that handle architecture specific bin fields, along with bin fields which store 2D arrays. I also cleared up some of the TODO items. I swapped the junction implementation to an implementation from https://github.com/nyaosorg/go-windows-junction since we were previously shelling out to CLI. That and I added a bit more zip bomb protection For the purposes of the video below I changed the location which shortcuts get put to my desktop. It’ll probably be configurable, and match scoop by putting shortcuts in the startup menu by default"}, {"post_id": 22839, "ts": "2026-07-05T13:36:18Z", "hours": 3.3089, "text": "As I mentioned in the previous devlog I added good help information to every bit of the CLI. It’s surprisingly difficult to write good help messages which explains everything to users in a few words I also changed the behaviour of the mocha cache clear command to not clear all cache by default. That’s now gated behind the --all flag in order to match scoop a bit more"}, {"post_id": 21420, "ts": "2026-07-03T11:02:24Z", "hours": 1.0722, "text": "Typically I don’t want to make devlogs for small stuff like this, but this is something I found really cool. So I was working on help messages for all the commands when I realized that mocha bucket list felt a bit slower than pretty much every other command. This is because we need to shell out to git 2 times per bucket, and I had 4 buckets added. While 8 git commands might not sound like a lot, it was enough to make mocha bucket list feel slow. So what I did is I parallelized the metadata fetching through an errgroup . Instead of fetching the metadata for each bucket in order, we fetch the metadata for all 4 buckets simultaneously. This led to a big performance uplift. About 3 times faster than the old version of mocha , and just over 12 times faster than scoop for this operation. See the video below."}, {"post_id": 21386, "ts": "2026-07-03T09:17:07Z", "hours": 2.2464, "text": "I finished up mocha uninstall and mocha list , which means you can actually manage installed apps instead of manually deleting them. There’s not much that goes into mocha uninstall . You just need to remove the relevant shims and app directories since the apps that mocha supports are all portable. mocha list is similarly simple. It’s just loops over the directories in $MOCHA_DIR/apps and looks for apps along with the versions installed for each app."}, {"post_id": 19910, "ts": "2026-07-01T10:53:02Z", "hours": 5.4625, "text": "So I added support for more apps by implementing more extractors. This means in theory any apps which don’t need a pre-install or post-install should work. To be more specific, I handle a few more properties on manifests. Those being extract_dir and innosetup , which inform how an app needs to be installed. I also implement 7zip and innounp as extractors to support more file formats which applications are distributed in. Of course there’s still a lot of work before I consider this ready for public use. I need to create commands for some basic operations like uninstalling, updating and listing apps. I also need to handle shortcuts otherwise GUI apps can’t be accessed from the start menu. Besides that I need to improve the user experience. As you can see in the video below mocha just sort of dumps everything to the console even if it’s not relevant. Help menus are also critical to get working properly."}, {"post_id": 18238, "ts": "2026-06-29T09:51:16Z", "hours": 3.7839, "text": "Finished up the code cleanup in commands , fileops and manifests . I did catch a few edge cases and some incorrect behavior in the process, which is why I always spend so much time reviewing code. I did use AI to assist with code review because I think it’s an area where AI shines. AI is really good at finding small errors or inconsistencies in the codebase which I probably wouldn’t notice. For example, it identified that the ManifestReferences argument was not a required argument for the download command, which meant no help message was displayed on incorrect usage like the other commands. One big thing I will work on eventually is console output. Right now errors are well formatted but a lot of the time commands just run stuff without providing a lot of insight into what actions they are taking which isn’t great. Even the help menu is pretty useless right now (see the image below). Extra context: A manifest reference is a pointer to an app (e.g. main/ [email protected] )"}, {"post_id": 17027, "ts": "2026-06-27T17:10:53Z", "hours": 5.3025, "text": "Before working on more features and expanding the amount of apps mocha actually supports I wanted to go through the codebase and do a lot of cleanup since the codebase is quite messy. There are silly mistakes in some files and bad implementations in others. Hence the time I spent during this period was focused on moving code to where it should be and cleaning up some edge cases, specifically related to the bucket , config and shim modules. A good example of this is moving the code to get the active config to the config module instead of leaving it in main.go . Next up will be refactoring the commands , fileops , and manifest modules. I don’t have much to show so I figured I would present a feature I added but didn’t show earlier: the ability to skip cache hits with the --force flag when installing or downloading an app. Some context I forgot to add initially: I renamed the app module to manifest since I felt it was more accurate to what it actually handles scope wise."}, {"post_id": 15814, "ts": "2026-06-25T18:17:50Z", "hours": 2.5558, "text": "Huge milestone!!! I’ve gotten mocha install working for very basic apps! This means the entire process of downloading a file, then extracting it, then creating a junction and finally creating a shim now works for basic pieces of software! So in terms of what I actually did this devlog, I added cache hits to the download command since it’s relevant to the install command. I then implemented the aforementioned .zip extraction and junction creation. Then all that was left was a bit of orchestration, getting everything to work together properly. See a working install of innounp using mocha install below!"}, {"post_id": 15668, "ts": "2026-06-25T14:03:10Z", "hours": 0.7572, "text": "mocha update is another command which does very little but is very important. All it does is update the known_buckets file, and run git pull on all added buckets to update them. It can also update just the buckets you specify if you pass in an argument. I do need to improve the output of the command since it outputs raw git right now, but at least it’s functional. See the demo below."}, {"post_id": 14392, "ts": "2026-06-23T14:41:51Z", "hours": 6.9436, "text": "Spent a bit longer between devlogs this time, but it was worth it. So I realized the error messages were really bad. I was pretty much just passing errors up the call stack without adding any context, which isn’t great since it means our error messages will be useless to people reading them I therefore went through every single file of the codebase and wrote good error messages which add a bit of context every time we pass it up the call stack. I also did a bit of refactoring where I thought it would be worth it. For example in the shim module I now set the PE subsystem of the shim binary while it’s in memory instead of writing to disk twice. A few good examples of what the new error messages look like can be seen in the video below."}, {"post_id": 13054, "ts": "2026-06-21T10:47:05Z", "hours": 3.4069, "text": "Shims are simple in concept, complicated in reality. So essentially a shim in mocha is just an executable which calls another executable. It’s similar to a shortcut in that sense, except it shows up in $PATH Thankfully the scoop project already has a repository with 4 different implementations for the shim binary, so I can just have mocha shim download one of those binaries. The complicated part was the PE Subsystem. The PE subsystem is basically a bit of info in each binary which tells Windows whether it’s a console application, or a GUI application. We need to set the PE subsystem of the shim exe to the PE subsystem of the binary we are calling for Windows to execute the binary properly. Hence I need to read and write raw binary data. All of this is just the implementation for exe shims. Scoop itself contains implementations for .bat/.cmd , .ps1 , .jar , .py and linux binaries , all of which have wildly different implementations compared to .exe shims. The video below shows the working set of mocha shim commands (those being add , remove and list )."}, {"post_id": 12032, "ts": "2026-06-19T16:57:37Z", "hours": 1.8778, "text": "mocha cache is a simple command. It shows you what files are currently in $MOCHA_DIR/cache directory and it clears them out. One thing I noticed was that scoop cache show actually displays raw bytes instead of human readable file sizes for each cache entry, which is a bit odd since the total they display is human readable. Therefore I made my implementation mocha cache list display human readable sizes since that’s a more reasonable default."}, {"post_id": 11234, "ts": "2026-06-18T11:50:44Z", "hours": 2.2589, "text": "Fuzzy search is really really good. While implementing mocha search I noticed the results returned by scoop search were in alphabetical order, which doesn’t make a lot of sense. If I do scoop search git the first result should probably be git As a result my implementation of search uses github.com/sahilm/fuzzy which is a small library which provides a fuzzy search implementation. Scoop also checks for binary name matches, e.g. package biodiff can provide a binary called git-biodiff and show up in search results. I decided to remove this for now, since I personally find it a bit unnecessary. scoop search also lists all search results, which is okay when results are sorted alphabetically but doesn’t make sense when searches are relevance based. Therefore, by default mocha search will list exact matches plus the 20 most relevant search results. This can be overridden by the --count argument, where setting it to 0 displays all results. A demonstration of mocha search vs scoop search can be seen in the video below."}, {"post_id": 10748, "ts": "2026-06-17T17:14:41Z", "hours": 2.1597, "text": "I finished up mocha download , which surprisingly does a bit more than simply downloading files. The first thing it does is well… download the file. This is a bit more complicated than it seems though, since we need to identify the right file to download based on cpu architecture. Hence the very cursed JSON parsing I had to create. After downloading a file, we also do a hash check. We support the 4 types of file hashes which scoop support, those being sha256 , sha512 , md5 and sha1 . Currently files get downloaded to the $MOCHA_DIR/cache directory like in scoop, however we don’t actually check if there’s anything cached which can lead to repeated downloads. That’s something I’ll need to fix later on"}, {"post_id": 10131, "ts": "2026-06-16T18:54:22Z", "hours": 1.4081, "text": "I was working on the mocha download command so I can sort out fetching files, and during it I realized my current app format makes things a bit weird. mocha cat previously took in a flag for bucket through -b and a name. Scoop on the other hand uses an application reference in the format bucket/name@version . Scoop’s format is really important for downloads and installs, so it didn’t make sense to not standardize it between mocha download and mocha cat . Hence this shorter devlog! See the video below for the new usage (version numbers are ignored for mocha cat )."}, {"post_id": 10004, "ts": "2026-06-16T15:21:57Z", "hours": 2.9753, "text": "I did a bit of refactoring to split the core functionality from the command files. This means that the code for downloading and deleting buckets is separated from the code for the various commands. I’m doing this primarily for better code organization, and also to prevent import cycles. I also finished up the config system I mentioned last time. It’ll be one of the bigger improvements over scoop, which has a basic set of configuration options. TOML was the obvious choice for the config format since it is really easy to read and write. I made sure that you can put it in any of the standard locations, such as %APPDATA% and .config or in $MOCHA_DIR . Running mocha config will open the configuration in your preferred app, and also generate the default config if a configuration hasn’t been detected in any of the valid locations. Currently the configuration can be used to make mocha cat run an external program for printing manifests to stdout . See the video below for an example using bat"}, {"post_id": 8826, "ts": "2026-06-14T17:52:54Z", "hours": 2.6147, "text": "So this is a spot where I think the improvements over scoop start becoming really apparent. The scoop cat command simply prints an app’s manifest to console. However due to the long startup time of PowerShell scripts (scoop is written in PowerShell) basic stuff like scoop cat takes a second. mocha cat on the other hand is nearly instantaneous since it’s a compiled binary with almost 0 startup time. You can see how this plays out in real usage in the video below. I also half baked a config system, but it’s not finished so I’ll talk about that in the next devlog."}, {"post_id": 8586, "ts": "2026-06-14T08:48:35Z", "hours": 2.85, "text": "I finished off the remaining mocha bucket subcommands, those being add , rm and list . These commands manage “buckets” which are pretty much just package sources. mocha bucket add uses git to clone the relevant bucket into the [MOCHA_DIR]/buckets directory. By default MOCHA_DIR is [USER]/mocha mocha bucket list simply loops over the [MOCHA_DIR]/buckets directory and gets relevant info for each bucket. mocha bucket rm removes a bucket by just deleting the folder containing the bucket. For example, removing the main bucket deletes [MOCHA_DIR]/buckets/main"}, {"post_id": 8208, "ts": "2026-06-13T17:32:25Z", "hours": 2.0261, "text": "I started off with something a bit simple: mocha bucket known The known bucket list in scoop is a list of buckets which are known by the package manager in advance. These buckets don’t require the full URL to be used when using scoop bucket sub-commands. For example instead of running scoop bucket add https://github.com/ScoopInstaller/Main you can instead run scoop bucket add main As seen in the video below, mocha bucket known doesn’t do much. First it downloads buckets.json if it doesn’t exist. Then it parses the json and outputs it to console."}]...
|
Title: mocha by @Glitchy | Stardance
Devlogs:
I s Title: mocha by @Glitchy | Stardance
Devlogs:
I started off with something a bit simple: mocha bucket known The known bucket list in scoop is a list of buckets which are known by the package manager in advance. These buckets don’t require the full URL to be used when using scoop bucket sub-commands. For example instead of running scoop bucket add https://github.com/ScoopInstaller/Main you can instead run scoop bucket add main As seen in the video below, mocha bucket known doesn’t do much. First it downloads buckets.json if it doesn’t exist. Then it parses the json and outputs it to console.
I finished off the remaining mocha bucket subcommands, those being add , rm and list . These commands manage “buckets” which are pretty much just package sources. mocha bucket add uses git to clone the relevant bucket into the [MOCHA_DIR]/buckets directory. By default MOCHA_DIR is [USER]/mocha mocha bucket list simply loops over the [MOCHA_DIR]/buckets directory and gets relevant info for each bucket. mocha bucket rm removes a bucket by just deleting the folder containing the bucket. For example, removing the main bucket deletes [MOCHA_DIR]/buckets/main
So this is a spot where I think the improvements over scoop start becoming really apparent. The scoop cat command simply prints an app’s manifest to console. However due to the long startup time of PowerShell scripts (scoop is written in PowerShell) basic stuff like scoop cat takes a second. mocha cat on the other hand is nearly instantaneous since it’s a compiled binary with almost 0 startup time. You can see how this plays out in real usage in the video below. I also half baked a config system, but it’s not finished so I’ll talk about that in the next devlog.
I did a bit of refactoring to split the core functionality from the command files. This means that the code for downloading and deleting buckets is separated from the code for the various commands. I’m doing this primarily for better code organization, and also to prevent import cycles. I also finished up the config system I mentioned last time. It’ll be one of the bigger improvements over scoop, which has a basic set of configuration options. TOML was the obvious choice for the config format since it is really easy to read and write. I made sure that you can put it in any of the standard locations, such as %APPDATA% and .config or in $MOCHA_DIR . Running mocha config will open the configuration in your preferred app, and also generate the default config if a configuration hasn’t been detected in any of the valid locations. Currently the configuration can be used to make mocha cat run an external program for printing manifests to stdout . See the video below for an example using bat
I was working on the mocha download command so I can sort out fetching files, and during it I realized my current app format makes things a bit weird. mocha cat previously took in a flag for bucket through -b and a name. Scoop on the other hand uses an application reference in the format bucket/name@version . Scoop’s format is really important for downloads and installs, so it didn’t make sense to not standardize it between mocha download and mocha cat . Hence this shorter devlog! See the video below for the new usage (version numbers are ignored for mocha cat ).
I finished up mocha download , which surprisingly does a bit more than simply downloading files. The first thing it does is well… download the file. This is a bit more complicated than it seems though, since we need to identify the right file to download based on cpu architecture. Hence the very cursed JSON parsing I had to create. After downloading a file, we also do a hash check. We support the 4 types of file hashes which scoop support, those being sha256 , sha512 , md5 and sha1 . Currently files get downloaded to the $MOCHA_DIR/cache directory like in scoop, however we don’t actually check if there’s anything cached which can lead to repeated downloads. That’s something I’ll need to fix later on
Fuzzy search is really really good. While implementing mocha search I noticed the results returned by scoop search were in alphabetical order, which doesn’t make a lot of sense. If I do scoop search git the first result should probably be git As a result my implementation of search uses github.com/sahilm/fuzzy which is a small library which provides a fuzzy search implementation. Scoop also checks for binary name matches, e.g. package biodiff can provide a binary called git-biodiff and show up in search results. I decided to remove this for now, since I personally find it a bit unnecessary. scoop search also lists all search results, which is okay when results are sorted alphabetically but doesn’t make sense when searches are relevance based. Therefore, by default mocha search will list exact matches plus the 20 most relevant search results. This can be overridden by the --count argument, where setting it to 0 displays all results. A demonstration of mocha search vs scoop search can be seen in the video below.
mocha cache is a simple command. It shows you what files are currently in $MOCHA_DIR/cache directory and it clears them out. One thing I noticed was that scoop cache show actually displays raw bytes instead of human readable file sizes for each cache entry, which is a bit odd since the total they display is human readable. Therefore I made my implementation mocha cache list display human readable sizes since that’s a more reasonable default.
Shims are simple in concept, complicated in reality. So essentially a shim in mocha is just an executable which calls another executable. It’s similar to a shortcut in that sense, except it shows up in $PATH Thankfully the scoop project already has a repository with 4 different implementations for the shim binary, so I can just have mocha shim download one of those binaries. The complicated part was the PE Subsystem. The PE subsystem is basically a bit of info in each binary which tells Windows whether it’s a console application, or a GUI application. We need to set the PE subsystem of the shim exe to the PE subsystem of the binary we are calling for Windows to execute the binary properly. Hence I need to read and write raw binary data. All of this is just the implementation for exe shims. Scoop itself contains implementations for .bat/.cmd , .ps1 , .jar , .py and linux binaries , all of which have wildly different implementations compared to .exe shims. The video below shows the working set of mocha shim commands (those being add , remove and list ).
Spent a bit longer between devlogs this time, but it was worth it. So I realized the error messages were really bad. I was pretty much just passing errors up the call stack without adding any context, which isn’t great since it means our error messages will be useless to people reading them I therefore went through every single file of the codebase and wrote good error messages which add a bit of context every time we pass it up the call stack. I also did a bit of refactoring where I thought it would be worth it. For example in the shim module I now set the PE subsystem of the shim binary while it’s in memory instead of writing to disk twice. A few good examples of what the new error messages look like can be seen in the video below.
mocha update is another command which does very little but is very important. All it does is update the known_buckets file, and run git pull on all added buckets to update them. It can also update just the buckets you specify if you pass in an argument. I do need to improve the output of the command since it outputs raw git right now, but at least it’s functional. See the demo below.
Huge milestone!!! I’ve gotten mocha install working for very basic apps! This means the entire process of downloading a file, then extracting it, then creating a junction and finally creating a shim now works for basic pieces of software! So in terms of what I actually did this devlog, I added cache hits to the download command since it’s relevant to the install command. I then implemented the aforementioned .zip extraction and junction creation. Then all that was left was a bit of orchestration, getting everything to work together properly. See a working install of innounp using mocha install below!
Before working on more features and expanding the amount of apps mocha actually supports I wanted to go through the codebase and do a lot of cleanup since the codebase is quite messy. There are silly mistakes in some files and bad implementations in others. Hence the time I spent during this period was focused on moving code to where it should be and cleaning up some edge cases, specifically related to the bucket , config and shim modules. A good example of this is moving the code to get the active config to the config module instead of leaving it in main.go . Next up will be refactoring the commands , fileops , and manifest modules. I don’t have much to show so I figured I would present a feature I added but didn’t show earlier: the ability to skip cache hits with the --force flag when installing or downloading an app. Some context I forgot to add initially: I renamed the app module to manifest since I felt it was more accurate to what it actually handles scope wise.
Finished up the code cleanup in commands , fileops and manifests . I did catch a few edge cases and some incorrect behavior in the process, which is why I always spend so much time reviewing code. I did use AI to assist with code review because I think it’s an area where AI shines. AI is really good at finding small errors or inconsistencies in the codebase which I probably wouldn’t notice. For example, it identified that the ManifestReferences argument was not a required argument for the download command, which meant no help message was displayed on incorrect usage like the other commands. One big thing I will work on eventually is console output. Right now errors are well formatted but a lot of the time commands just run stuff without providing a lot of insight into what actions they are taking which isn’t great. Even the help menu is pretty useless right now (see the image below). Extra context: A manifest reference is a pointer to an app (e.g. main/ [email protected] )
So I added support for more apps by implementing more extractors. This means in theory any apps which don’t need a pre-install or post-install should work. To be more specific, I handle a few more properties on manifests. Those being extract_dir and innosetup , which inform how an app needs to be installed. I also implement 7zip and innounp as extractors to support more file formats which applications are distributed in. Of course there’s still a lot of work before I consider this ready for public use. I need to create commands for some basic operations like uninstalling, updating and listing apps. I also need to handle shortcuts otherwise GUI apps can’t be accessed from the start menu. Besides that I need to improve the user experience. As you can see in the video below mocha just sort of dumps everything to the console even if it’s not relevant. Help menus are also critical to get working properly.
I finished up mocha uninstall and mocha list , which means you can actually manage installed apps instead of manually deleting them. There’s not much that goes into mocha uninstall . You just need to remove the relevant shims and app directories since the apps that mocha supports are all portable. mocha list is similarly simple. It’s just loops over the directories in $MOCHA_DIR/apps and looks for apps along with the versions installed for each app.
Typically I don’t want to make devlogs for small stuff like this, but this is something I found really cool. So I was working on help messages for all the commands when I realized that mocha bucket list felt a bit slower than pretty much every other command. This is because we need to shell out to git 2 times per bucket, and I had 4 buckets added. While 8 git commands might not sound like a lot, it was enough to make mocha bucket list feel slow. So what I did is I parallelized the metadata fetching through an errgroup . Instead of fetching the metadata for each bucket in order, we fetch the metadata for all 4 buckets simultaneously. This led to a big performance uplift. About 3 times faster than the old version of mocha , and just over 12 times faster than scoop for this operation. See the video below.
As I mentioned in the previous devlog I added good help information to every bit of the CLI. It’s surprisingly difficult to write good help messages which explains everything to users in a few words I also changed the behaviour of the mocha cache clear command to not clear all cache by default. That’s now gated behind the --all flag in order to match scoop a bit more
We now create shortcuts! This means any GUI apps should show up properly in the start menu, just like they do when you install with scoop . All I really had to do was a bit of orchestration since I decided to vendor in an implementation from https://github.com/jxeng/shortcut Besides that I expanded the number of apps that are supported by implementing a bit of code that handle architecture specific bin fields, along with bin fields which store 2D arrays. I also cleared up some of the TODO items. I swapped the junction implementation to an implementation from https://github.com/nyaosorg/go-windows-junction since we were previously shelling out to CLI. That and I added a bit more zip bomb protection For the purposes of the video below I changed the location which shortcuts get put to my desktop. It’ll probably be configurable, and match scoop by putting shortcuts in the startup menu by default
This is going to be the equivalent of 2 devlogs since I thought I made one earlier for persists but I didn’t. New feature! We now handle persist items in order to store data between versions. These are files which are persisted between versions of an app. Lets take git as an example to explain why persist exists. Say you want to make sure your git config isn’t deleted every time you update. The issue with this is that the config file is saved in the version specfic directory. To resolve this we can keep the config in $MOCHA_DIR/persist and then symlink the config to where it needs to be, which is essentially what persist tells us to do. Since we handled persist items last time we can now implement mocha upgrade to update apps. The way scoop handles updates is by first removing anything that references the app, like shortcuts or shims . Then we just follow the install process from scratch. This leaves the old version available in case a user wants to revert versions due to a bug, while also updating to the latest available version. This can be seen in the video below, which shows me updating llama.cpp-hip-radeon .
So I’ve been doing a bit of refactoring, a bit of bug fixing and a bit of optimization. Essentially just polishing mocha before I work on the next feature. Here’s some of the stuff I did: created tests for ParseRefString to validate behavior cache manifest json between info calls since I/O is really slow bumped dependency versions refactored manifest/info.go Besides that I fixed the uninstall flow since it was really bugged after the latest changes. Essentially mocha would uninstall apps with incorrect info. It would also try to remove shims/shortcuts for apps which don’t have any active shims/shortcuts. I then added a bit of logging since the uninstall command didn’t give any user output for whatever reason (i forgot to earlier).
mocha now supports a user defined theme for output colors. In the process I ended up doing a lot of stuff related to the config. First thing I did was swap to fatih/color for colored output, since it handles stuff like colors in command prompt and removing color when output is piped. Then I refactored the config module. Earlier I would pass around a MochaConfiguration object through every function. Now I use a config singleton that’s accessible from any function. Why? Because it means I don’t need to pass the object every time I want to log information. Also means I don’t need to pass mochaDir through almost every function in the codebase. Getting user defined themes was a bit complicated because I needed a good way to handle a default theme so output doesn’t look bad if parsing fails. I handled this by only using the configured theme if every color resolves properly. Otherwise output falls back to the already loaded default theme. Due to this you still get colored output even if there are errors or warning before the configuration and theme is loaded.
I love refactoring!!!! I’ll probably end up spending another 20 hours just on refactoring because it’s so fun!!!! This time around I wanted to refactor the code so that our commands orchestrate stuff instead of the helper functions. For example, pkg.Install would first download a package, then install it, and then link it through shims and shortcuts all by itself. This causes issues because it means error messages become slightly worse, and it creates a class of bugs due to edge cases where we don’t necessarily want this order of orchestration. Hence I did a lot of refactoring in the pkg module. I also ended up adding a way to skip verification of downloads when downloading, installing or updating a package through --skip-verify . It’s a useful option in situations where there is a malformed manifest or simply no hash to begin with.
I’m writing this one right before F1 Qualifying at Spa! Continuing with the trend of some of my recent work, I improved what table outputs look like to be a little bit more readable. We now use proper separators in the form of Unicode Box Drawing Characters . I also made column alignment configurable, which improves legibility for some commands like mocha bucket list and mocha cache show . I’ve attached an image of the scoop and mocha versions of bucket list so you can compare for yourself.
Not sure why I didn’t do this earlier, but I’ve added success messages to commands where it makes sense. Also added a success color to the config so you can change what the success color is. I do still need to improve CLI output quite a bit, but it’s slowly getting there.
My summer break has ended so development is going to be a lot slower from now. I added mocha outdated so you can list outdated apps before upgrading them to a newer version. Besides that I tweaked a lot of stuff related to CLI output. For example I changed search to output one table, and simply outputting exact matches at the top of that table. I also changed a lot of messages which were using LogOutput to LogInfo so they use the correct color and output to stderr and not stdout .
Finally got a bit of time to do a bit of development. First thing I did was remove a field from install.json to match scoop . This means that mocha should be a drop in replacement for existing scoop installs. Then I added partial support for env_set and env_add_path . The main thing I need to do to complete the feature is parse variables and replace them with the appropriate paths. These 2 fields are some of the last manifest fields I need to support besides pre/post (un)install hooks.
Lot of time going into this devlog, but it makes sense since I did do a lot. I did this sweeping refactor of the entire commands module which moved around a lot of code. Essentially each command now gets it’s own directory under the commands module that represents it’s children/parents. For example commands/shim/remove/cmd.go contains code for the mocha shim remove command. Each cmd.go contains a Command struct that has the relevant fields and functions attached to it. This structure just makes things more organized and also means adding test files will be a bit easier since functionality is now isolated. I also sorted out the shim binary. So essentially https://github.com/ScoopInstaller/Shim offers different version of the shim binary which can be installed. Previously I hard coded the code to install cpp v0.1.0 but now users can run mocha shim binary releases to see the options and mocha shim binary setup to install their chosen binary. This also means we actually get the latest releases from GitHub.
Lots of small bug fixes and changes, I’ll just list them out: feat(cmd): allow removal of multiple shims in one execution (f2fae3f) fix(manifest): correctly ignore invalid shortcut entries (6a08478) fix(fileops): use correct registry type (5d5d796) fix(config): seed config with defaults (9dfaaff) fix(cmd): use correct release sources (a2a9ba1) fix(cmd): use bucket from install info (5a9109b) I also added support for more file types being shimmed, which helps a lot with compatibility. The file types are .py , .bat , .cmd , .jar and .ps1 .
I forgot to make a devlog in between so this will be like 2 bigger devlogs. I parallelized bucket updates, which speeds it up quite a bit. This also allowed me to try out parallelism even more, which I plan to apply throughout the CLI later on. I also added configuration options for the runners which mocha shim will use to run certain file types. For example, you can set the python-runner to select the python version that’ll be used to run python scripts that are shimmed. Downloads now have a progress bar, so you don’t need to wonder whether something is happening or not during a long download. Finally env_set is fully supported since I added the relevant variable parsing. This was pretty much just me cleaning out the TODO list before I ship. I also did a lot of smaller bug fixes and refactors as seen below. fix(commands): prevent app installation if already installed (cb27d07) fix(commands): fix config opening with “start” (74f3679) fix(commands): correctly handle non-apps when upgrading (f7419f6) fix: make LogOutput go to Stdout not Stderr (bc10357) fix: handle empty versions correctly (2287da9) fix(pkg): remove correct temp dir (33189b6) fix(shim): warn for unknown shim extension (622c2b4) fix: skip downloads with no hash by default (69d4e35) fix: use correct timeout for downloads (44e527b) fix: drop unnecessary return value from GetExecutableEntries (9fd845c) fix(config): remove unused option (1339971) fix(commands): don’t error for valid results (87c4d6c) refactor(config): rename variables/functions (f253d9d) fix: use unique temp directories (a159e23) refactor: use fmt.Fprintln directly (d2d54bf)
So I wrote a README, added a license (MIT of course) and setup CI/CD so that releases are automatically built and deployed. Honestly I forgot how hard it is to write a good README. You need to get a lot of information through without it looking like a wall of text.
Ships:
I made a package manager for Windows, which is somewhat backwards compatible with scoop packages. To be honest there’s still a lot of work that I want to do, but I have exams and college application coming up soon so I can’t. That’s not to say I’m not happy with the state of the ship. At the very least it has all the core features that a package manager should have, but there are still a lot of bugs which is why this is only v0.0.1. The biggest challenge by far was trying to figure out how Scoop does things internally. A lot of stuff just doesn’t have documentation, so you have to dig through the really messy PowerShell source code....
|
1793581041.3960028
|
1793667441.3960028
|
|
68149
|
mochi by @LPcomix123 | Stardance
|
LPcomix123
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mochi by @LPcomix123 | Stardance
|
1793119724.8735902
|
1793724524.8735902
|
|
49972
|
mochi by @lore_jk | Stardance
|
lore_jk
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mochi by @lore_jk | Stardance
|
1793314598.014879
|
1793919398.014879
|
|
26162
|
mochiOS by @tas0dev | Stardance
|
tas0dev
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mochiOS by @tas0dev | Stardance
|
1793332234.5067215
|
1793937034.5067215
|
|
54696
|
mochi_robot_project by @lakshaykhatri780 | Stardan mochi_robot_project by @lakshaykhatri780 | Stardance...
|
lakshaykhatri780
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T20:28:58Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I am building Mochi, an interactive companion desk robot! So far, I have engineered the core non-blocking state machine framework and custom anime-style blinking expressions on the 0.96” OLED display using an ESP32. The biggest challenge was designing the multi-axis motion and transistor sound circuits without having all the hardware components yet. I am shipping this now to unlock project grant funding so I can buy the dual servo motors, ultrasonic sensor, and speaker modules needed to finish the physical PVC pipe body assembly!", "repo": "https://github.com/lakshaykhatri780-tech/mochi_robot_project", "demo": ""}]...
|
[{"post_id": 63770, "ts": "202 [{"post_id": 63770, "ts": "2026-09-07T18:46:22Z", "hours": 1.0558, "text": "Finally mochi shows expressions"}, {"post_id": 63494, "ts": "2026-09-07T11:50:31Z", "hours": 0.95, "text": "Wiring all my components on prefboard"}, {"post_id": 63428, "ts": "2026-09-07T08:36:10Z", "hours": 0.805, "text": "Making a custom circuit for my mochi"}, {"post_id": 62144, "ts": "2026-09-05T12:15:01Z", "hours": 2.0981, "text": "writting the codes for my mochi expressions"}]...
|
Title: mochi_robot_project by @lakshaykhatri780 | Title: mochi_robot_project by @lakshaykhatri780 | Stardance
Devlogs:
writting the codes for my mochi expressions
Making a custom circuit for my mochi
Wiring all my components on prefboard
Finally mochi shows expressions
Ships:
I am building Mochi, an interactive companion desk robot! So far, I have engineered the core non-blocking state machine framework and custom anime-style blinking expressions on the 0.96” OLED display using an ESP32. The biggest challenge was designing the multi-axis motion and transistor sound circuits without having all the hardware components yet. I am shipping this now to unlock project grant funding so I can buy the dual servo motors, ultrasonic sensor, and speaker modules needed to finish the physical PVC pipe body assembly!...
|
1793559583.123848
|
1793645983.123848
|
|
46591
|
mod by @danitzamerinoss1979 | Stardance
|
danitzamerinoss1979
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mod by @danitzamerinoss1979 | Stardance
|
1793390110.2650144
|
1793994910.2650144
|
|
63692
|
mod helper for minecraft by @Pranel | Stardance
|
Pranel
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mod helper for minecraft by @Pranel | Stard Title: mod helper for minecraft by @Pranel | Stardance...
|
1793054879.4310212
|
1793659679.4310212
|
|
63693
|
mod helper for minecraft by @Pranel | Stardance
|
Pranel
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mod helper for minecraft by @Pranel | Stard Title: mod helper for minecraft by @Pranel | Stardance...
|
1793054880.3616583
|
1793659680.3616583
|
|
63694
|
mod helper for minecraft by @Pranel | Stardance
|
Pranel
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: mod helper for minecraft by @Pranel | Stard Title: mod helper for minecraft by @Pranel | Stardance...
|
1793054882.3366919
|
1793659682.3366919
|
|
19677
|
modOS by @Huseyin | Stardance
|
Huseyin
|
3
|
73.0
|
239
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T22:11:11Z", "hours": 9.0, "multiplier": 4.19, "payout": 36, "blessing": "neutral", "text": "Welcome to modOS. This webOS is not one of those fancy ui webOS’s you saw… this is something more! Let us start from the code. It is entirely modular. All other webOS’s are hard-coded, meaning changing one thing might cause it to break. In modOS, the code being modular allowed me to build the following that is to come… A full API system for app development! Storing data in an account, meaning that you can access your files, settings, EVERYTHING, anywhere! Modular applications… You can install applications using the built-in “packer” package manager. REFER TO README FOR USAGE!!! Once again, modOS is for YOU! So any comments on how “I hate the UI!”, “Make it cooler!!”, “blah blah blah” will be returned. This UI is a TEMPLATE.", "repo": "https://github.com/krambo345/modOS", "demo": "https://modos.krambo.space"}, {"ship_num": 2, "ts": "2026-09-06T14:51:27Z", "hours": 47.0, "multiplier": 4.4, "payout": 203, "blessing": "neutral", "text": "modOS Sevda Çiçeği: A fully open-source, modular, and multi-platform webOS. Features: modOS, unlike other webOS projects, has a plentiful of unique features allowing more customization: Modular build. Developer friendly API’s Pre-built desktop Account service And many more! Usage: modOS can be used everywhere by anyone, making it a great option for people on the move. Development: modOS comes with API’s to allow integration and make it easier for developers to make new packages.", "repo": "https://github.com/krambo345/modOS", "demo": "https://modos.krambo.space"}, {"ship_num": 3, "ts": "2026-06-30T18:15:01Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Welcome to modOS v1.0.0 Cambaz. It is a full webOS that comes with the basics of a computer. This full (almost) stable release is modular, flexible, and heavily optimized to up stand multiple situations. There were many challenges when it came to converting what I did from the guide into a modular system. It came with many problems, errors, lack of sleep, so on and so forth. Thanks to Lil ’G(PT), I was able to automate small tasks like converting HTML apps to a format that could be published in JSON. Features of modOS Cambaz: A fully modular system, with the ability to publish your own JS files with others. A small “terminal” named run. Package/App manager. Bartender(the bar of modOS) WER (Window Manager of modOS) Automated system set up. Developer friendly design. An aesthetic that combines 2000s retro and today’s modern. From here, the future releases of modOS will focus on making a full, complete package manager which makes distributing and receiving applications across modOS more easy. NOTE: In order to use many of the special features of modOS, you have to download and run modOS locally on your device. The picture shows what you would get in an out-of-the-box experience.", "repo": "https://github.com/krambo345/modOS", "demo": "https://modos.krambo.space"}]...
|
[{"post_id": 84595, "ts": "202 [{"post_id": 84595, "ts": "2026-10-29T22:02:33Z", "hours": 2.7103, "text": "Finale As yall know, stardance is ending… here is final form of modOS."}, {"post_id": 68315, "ts": "2026-09-14T22:29:25Z", "hours": 2.7064, "text": "SO MUCH BETTER! modOS is now more than just a template for your OS. It now makes it easier to template your own web OS! New Additions Settings package Splash Screen(you can turn it off in settings!) Saving settings 💾 Uses With these new features, your modOS account will officially have a working function. You can open your environment wherever you want. Future Plans Saving installed packages Saving user-made files/folders(There is already a immature version, however it does not work). Package development IDE. Customized Splash Screen Notification Daemon D-Bus Events 😟 Problems That Occured Resetting custom CSS. New user check(supposed to work. literally no reason it should not) Send Recommendations/Suggestions Sorry for excess use of EMOJIS they are fun"}, {"post_id": 67589, "ts": "2026-09-13T18:52:38Z", "hours": 3.1647, "text": "A Path to Stable From the previous… and unsuccessful ship… I learned many things that could improve modOS(other than a temporary Firebase bug🙄) First of all, there were a lot of bugs. A plenty of the time reported on this devlog are from bug fixing. Secondly, seems like people want to be able to customize the preinstalled system. So I have been working on a settings package to allow managing your account and CUSTOMIZING your system! DISCOVERY❗! Apperiantly, because modOS is modular by design, and because you can import packages, and because you can edit those packages, it turns out app development in the sense of an IDE is by design built in to modOS! With this, I was able to resolve many package related bugs running in a live environment, and even build packages! This will be utilized even more to hopefully make a full modern IDE package for anyone to use and build packages!!! Check out the video below for demonstration! I am looking for ideas, so please hit me up with some!"}, {"post_id": 47520, "ts": "2026-08-15T14:07:54Z", "hours": 8.6556, "text": "Adding stuff As of now, modOS comes with pre-installed packages to get you, the user, started. These include terminal, desktop, bartender, wer(window manager), editor, and more! With these packages you can install more packages(that do not exist yet). Do you want to be a developer? modOS is made to be one of the most developer friendly webOS’s out there! With over 10 different API’s, you can build applications that are easily integrated into the system. You can check out the source code of each package I made for modOS via first, finding the package with ls packages (in terminal) and then reading them with cat packages/PACKAGE (also in terminal)! oooor just go to the krambools github repository https://github.com/krambo345/krambools Bootstrap recovery Bootstrap works right now, for me. However, if anyone else gets errors while booting modOS, they will have the opportunity to repair it via bootstrap recovery that is presented upon failure. link due to a situation, i can not put modOS link to the information. use this link to access modOS: https://modos.krambo.space Thank yall"}, {"post_id": 45147, "ts": "2026-08-11T13:30:21Z", "hours": 11.2347, "text": "BOOYAH! After so long, we finally have VISUAL IMPROVEMENT!!! Before we start, I would appreciate if y’all followed modOS! Link: modos.krambo.space New Additions: You can now install(via packer get) or remove(via packer remove) ANY PACKAGE(from existing directory, use packer fetch for a list) You get some propriety software for modOS so it is easier for you to do stuff :) Package delivered commands! Developers can implement their own commands and API’s to the modOS ecosystem! API integration into packages Dependencies work flow modOS-VT has officially been made modOS, with the original being retired under modOS-pre. It will be removed from GitHub soon. And MANY more minor updates! Things that are needed to be fixed Guest option does not work, special rules needed to be implemented. packer.get API blindly makes a new blob file every time it is used(potential memory leak) There is no settings feature(yet), so the accounts are pretty useless rn. Sorry. And yeah that’s it to my knowledge DEVELOPERS!!! You can officially use the modOS API to make an application for the modOS ecosystem! Sadly, we do not have any documentation, but you can see the existing packages I made for reference, I tried my best to make it easy on y’all! https://github.com/krambo345/krambools/tree/master Publishing If you are a developer that made an application for modOS(tysm!), there sadly is no official way to register the application to modOS(yet!). It is still being implemented. Please hold on to your application until there is a method. Follow this project to be updated for when it is implemented! Thank you! Disclaimers: AI has been heavily used in this part of the project due to the advanced levels of TS used(that I can’t do myself). In my defense, this is the first project I ever made using TypeScript and Vite. Almost every new feature exposes me to another new thing(and problem) to learn!"}, {"post_id": 42585, "ts": "2026-08-07T12:28:48Z", "hours": 7.7994, "text": "Tada! modOS-VT is SO close to being done! I feel it! Disclaimers AI was heavily used at this point of the project. The reason is that the code was starting to get very messy(and not cool looking), which is why I asked AI to REORGANIZE the code. It basically took what I wrote, made them more organized, and made the connections. It is more than likely that the AI added a few of lines itself. Alongside that, I used AI to COMPLETELY make a terminal system using xterm.js(node module). The reason is, xterm has one of the worst and most incomplete documentations I ever saw. I really couldn’t make it myself after three tries. And finally, I used AI to make a package installation/launching system, as that would lead me into parts of Java/Type Script that I previously had no experience with. I am still trying to learn how to make it myself, however. I am very sorry for the heavy usage of AI. This is a very niche project that you can not find a lot of information for. I believe the code still meets AI requirements of Stardance. New Additions There is a fully set-up(with a Firebase back end) account management system to signup or login users. There is a guest option for people who just want to try it out! System-wide terminal. It is made so different software can be built on it! Package installation and launching: This is HUGE! This is what was needed to make modOS MODULAR ! New API’s Very cool and clean looking code(developer friendly). Future Updates modOS-VT will be rebranded to just modOS. There will be some base packages that are needed to make. A README.md for developers with the instructions on making a package. And yeah that is what’s left for modOS-VT."}, {"post_id": 28076, "ts": "2026-07-14T03:22:04Z", "hours": 9.6597, "text": "Longer Yet Shorter [Dev Post 6] After some long work, modOS is finally getting easier to get done. But it’s not done just yet. What is new? modOS now has some basic API’s, which will be used in the future by developers to make applications that can be fully integrated into the ecosystem. Bootstrap is reaching completion, which will bring us to the next step: display. We also have one of the most important functions of an OS, file management! modOS utilizes zenfs/core to store files and folders(alongside their structure) in memory! This will allow the creation of file explorers, document making, and more! This is also a crucial piece to make a modular OS. What is needed? modOS still needs some more API’s, most which will come from packages. Due to that, the next dev post should be of packer, the official package manager for modOS. It will be the connectiong between users, database, and developers. User <--> Database <--> Developer Meaning dev’s will be able to publish packages, and user’s will be able to download them! And finally, we need an account session thingy to keep track of each user’s installed packages. This also will allow the usage of YOUR modOS anywhere! Final Regards pretty cool"}, {"post_id": 25326, "ts": "2026-07-09T15:28:04Z", "hours": 6.805, "text": "A New Beginning [Dev Post 5] Here is what I got done ever since I announced modOS Sevda Çiçeği! git init So we now have modOS-VT as a GitHub repository. It’s pretty cool. VT stands for Vite Type, indicating how the project utilizes Vite and TypeScript instead of just html and javascript. What is made? I made: A bootstrap, which initializes every service necessary for modOS runtime. Basic system. Firebase!!! Jeez, why did it take 7 hours? Well, my friend, modOS is completely modular. So there is a bit of contradiction when I need to make a bootstrap that launches things, if there is no things . I worked on making a placeholder for almost everything. Core Idea modOS will be just like any other Linux distribution. You have the base system that gives you whatever you need. And you install user-generated content with a package manager! It will be so cool! But right now, I am still working on making the base system part. PSST! Do you want to contribute to modOS by making an app for it? Well you absolutely can! Right now it’s a bit difficult as there is no modOS . However, you can develop applications using typescript any time! Later modOS versions will come with API’s that you can integrate your app into the modOS ecosystem. Challenges The main challenge was getting started with modOS… again… but when I did start, it starts flowing like butter. What I LOVE about modOS right now: Because modOS-VT is built on Vite, I can use packages and make it easier to use with GitHub pages! I did not have to make 15 commits for a bug fix while setting up GitHub pages! Final Regards Thank you. :)"}, {"post_id": 19732, "ts": "2026-07-01T03:52:27Z", "hours": 3.1253, "text": "Announcing modOS Sevda Çiçeği Concept After completing the pretty underdeveloped modOS Cambaz, I think it is time we move on to a full, stable, environment. Plans for modOS Sevda Çiçeği: A fully modular webOS where you can change everything from the window rules to the very development environment. A package manager for distributing, installing, and managing user created packages. A full modOS API for consistency and compatibality. And MANY more. Here is a checklist/roadmap for modOS that you can follow as I check off the tasks: https://docs.google.com/document/d/1H7caegzGowVeYkntmm87eaJ8XJtSyU1Pbvb5vVNmgYI/edit?usp=sharing Logged hours for this dev post come from earlier bug fixes and polishing to modOS Cambaz alongside the making of modOS Sevda Çiçeği"}, {"post_id": 19271, "ts": "2026-06-30T15:17:32Z", "hours": 6.3744, "text": "The End..? [Dev Post 4] With the guide finally being done, I announce modOS v1.0.0 Cambaz . Before I nerd out about everything added, here is more information about Mor ve Ötesi , the band behind Cambaz: https://en.wikipedia.org/wiki/Mor_ve_%C3%B6tesi Why is modOS different? Well, throughout the path of following the guide and making modOS, I completely rejected the idea of a hard-coded anything. Sure, it might be open-source, but what is the point of open-source if changing the source is going to take many hours of coding? modOS competes against a permanent webOS. The following features highlight how modOS achieves that: modOS does not have any hard-coded applications, bar, desktop, etc. Every app is found in a JSON file (apps.json located in /base/system/) which can be modified to install any application you want, easily! Currently this step is manual, and there is no official repository of verified applications. However, that is subject to change. Bartender (the bar system of modOS) is a JavaScript file (bartender.js found in /base/system/bartender.js) which can be modified to make the bar whatever you want! WER (Window Manager for modOS) is a script that inserts window functions such as the minimize and close buttons alongside the name of the window, icon, and movement system. The whole script is launched with initwindow(win) where win is the main window element. Got confused with the initwindow(win) command? Not to worry, modOS comes with the exec command, which follows the format exec(appname, icon) , where you can determine the name of the application ( REQUIRED ) and its icon ( NOT REQUIRED ). Whenever the command is run, the script ( exec.js found in /base/system/ ) looks through apps.json and pulls the necessary content and scripts, giving you a fully functional app. Note: If you decide to use a custom icon with an existing app, exec.js will still use the icon used in the database to maintain the developers creativity! So are you even more lazy? Cuz modOS desktop shows every app in apps.json for easier access. All you need is the ability to double click the app you want! Note: Psst! There are hidden applications. You need to run showhidden() to show them, and hidehidden() if you would like to hide them back. You can customize modOS off of the base CSS by editing config.css (config.css found in /system/user/) Default Applications List App Template: It is a template for you to make your own app! (hidden by default) run: An alternative for the developer console that comes with modern browsers. A great option for mobile users or older, unsupported browsers. Release Notes: Your updated news for modOS! Theme Song: The theme song of modOS! Plays Cambaz by Mor ve Ötesi. Future Updates A signup/login system is planned to be added for cross-platform sync ability (e.g. apps, settings, customizations, etc). This will be optional and you can still use modOS as a guest. modOS developer mode: A way for you to build applications for you and others on modOS! Window minimization: Currently, windows do get minimized. However, you really cannot un-minimize them without running the command document.querySelector(\".win\").style.display=\"block\" , which is unreliable and annoying. More applications: You will use modOS developer mode to develop applications for the ecosystem. No more work for me."}, {"post_id": 18381, "ts": "2026-06-29T14:53:03Z", "hours": 7.1789, "text": "A Big Jump [Dev Post 3] Here is an update of what I’ve been working on over the weekend. And there is a lot! Window Movement I followed the guide to make windows movable. However, there was a challenge. Challenge If I want to make modOS modular, how could I identify user-made windows? The guide showed a hard-coded movement system, but that would mean other people couldn’t make their own apps! Solution I used .querySelector to give every window of the same class movement functionality while keeping each instance separate. This means no matter how many windows of the same app you make, they’ll all be movable! So yes, you could have 30 copies of the same ping pong app ( not on modOS… yet ) and every window would work normally. Account Feature (Still in Progress) This is mainly what took most of the 7 hours I logged today. What was used? I used Firebase to establish a backend where user info would be stored. The info consists of a username, password, and user data. The first two are self-explanatory, but the data will store user changes to their OS so they can jump back in where they left off. Challenges The account creation script should theoretically work. However, I didn’t build the project around a package manager. Firebase works much better with one, meaning the project would need to be migrated to a framework like Vite. Solution There is a solution: create a new repository with Vite installed, then move everything over. I really didn’t want to deal with that right now, so the account feature will be implemented once the base build of modOS is complete. App Launching You can now use a terminal interface to launch apps! Challenges To keep apps modular while still being… apps, I couldn’t just say “open this app.” I needed users to be able to define a preferred name, icon, and content. The first two were easy, but I also needed a list of apps and their content. This way, future modOS developers can publish their applications to the modOS environment. Solution There is now an apps.json file with a full list of apps ( 1 app right now ). Whenever you launch an app via exec(name, icon) from the Dev Console, it checks whether the app exists in the JSON file and, if it does, fetches its corresponding content. A Step Towards Modular… modOS is officially MODULAR ! What is modular as of now? Many things! I scratched the modular clock idea from the previous Dev Post… AND REPLACED IT WITH A COMPLETELY MODULAR BAR!!! So now the entire bar is modular. :) Apps are now modular too! You can launch any app via exec(name, icon) in the Dev Console (often opened with F12) to render a new window with your preferred name and icon. The clock idea was scratched… BUT THE CLOCK ITSELF IS STILL MODULAR! Challenges Making things modular takes a lot of time. You don’t just write your program in HTML anymore—you have to generate it through JavaScript. To make it modular, individual variables need to go through their own processes before everything connects together. And of course… that usually comes with a bug or two. Solution Uh… yeah, that was the challenge. Doesn’t really need a solution. Releases From now on, every new release will be named after a song from a 2000s Turkish Alternative Rock band. The next major release will be called: modOS v0.x.x-alpha [Mor Ve Ötesi - Cambaz] Make sure you give it a listen. It’s a banger! Final Thoughts I think the project is going very well. It’s taking a lot of time, but it’s worthwhile since I’m learning new things about a programming language I’ve been using for five years now. I’m hoping to add more features, finish the base build, and finally move on to the backend side of things."}, {"post_id": 10467, "ts": "2026-06-17T06:18:54Z", "hours": 2.2683, "text": "Getting Started [Dev Post 2] Today, I did not do much visual progress. However, there is way more that goes on in the background. What’s new? We now have a bar tender. There is a clock now. But it’s not just any clock, this clock is MODULAR ! A very fancy weather widget with a very (not) fancy API. A MODULAR Clock? What does that mean? I’m glad you asked. Unlike a traditional clock, this clock actually is separated in multiple tags. That means you can move the tags around to change the order of the clock values. API This Dev Post is sponsored by wttr.in! With it’s simple, no sign-up, and no data limit, wttr.in is in my top 5 API’s. With a single fetch , we achieve great things like burnin’ hot weather. Notes: The clock is by definition modular, however not too accessible. This will be fixed with future updates. No, this Dev Post is not actually sponsored. You can check out the current state of modOS here ."}, {"post_id": 9757, "ts": "2026-06-16T05:59:35Z", "hours": 1.2353, "text": "modOS v0.0.1-alpha [Dev Post 1] This is a base release for an early preview of the main idea for modOS. Current “features” Website loads. Backgrounds. Base window infrastructure. Cool window hover/leave effect. :D Notes: Although the project is supposed to be modular, it is still in early development. So every line is hard-coded and is not modular."}]...
|
Title: modOS by @Huseyin | Stardance
Devlogs:
mod Title: modOS by @Huseyin | Stardance
Devlogs:
modOS v0.0.1-alpha [Dev Post 1] This is a base release for an early preview of the main idea for modOS. Current “features” Website loads. Backgrounds. Base window infrastructure. Cool window hover/leave effect. :D Notes: Although the project is supposed to be modular, it is still in early development. So every line is hard-coded and is not modular.
Getting Started [Dev Post 2] Today, I did not do much visual progress. However, there is way more that goes on in the background. What’s new? We now have a bar tender. There is a clock now. But it’s not just any clock, this clock is MODULAR ! A very fancy weather widget with a very (not) fancy API. A MODULAR Clock? What does that mean? I’m glad you asked. Unlike a traditional clock, this clock actually is separated in multiple tags. That means you can move the tags around to change the order of the clock values. API This Dev Post is sponsored by wttr.in! With it’s simple, no sign-up, and no data limit, wttr.in is in my top 5 API’s. With a single fetch , we achieve great things like burnin’ hot weather. Notes: The clock is by definition modular, however not too accessible. This will be fixed with future updates. No, this Dev Post is not actually sponsored. You can check out the current state of modOS here .
A Big Jump [Dev Post 3] Here is an update of what I’ve been working on over the weekend. And there is a lot! Window Movement I followed the guide to make windows movable. However, there was a challenge. Challenge If I want to make modOS modular, how could I identify user-made windows? The guide showed a hard-coded movement system, but that would mean other people couldn’t make their own apps! Solution I used .querySelector to give every window of the same class movement functionality while keeping each instance separate. This means no matter how many windows of the same app you make, they’ll all be movable! So yes, you could have 30 copies of the same ping pong app ( not on modOS… yet ) and every window would work normally. Account Feature (Still in Progress) This is mainly what took most of the 7 hours I logged today. What was used? I used Firebase to establish a backend where user info would be stored. The info consists of a username, password, and user data. The first two are self-explanatory, but the data will store user changes to their OS so they can jump back in where they left off. Challenges The account creation script should theoretically work. However, I didn’t build the project around a package manager. Firebase works much better with one, meaning the project would need to be migrated to a framework like Vite. Solution There is a solution: create a new repository with Vite installed, then move everything over. I really didn’t want to deal with that right now, so the account feature will be implemented once the base build of modOS is complete. App Launching You can now use a terminal interface to launch apps! Challenges To keep apps modular while still being… apps, I couldn’t just say “open this app.” I needed users to be able to define a preferred name, icon, and content. The first two were easy, but I also needed a list of apps and their content. This way, future modOS developers can publish their applications to the modOS environment. Solution There is now an apps.json file with a full list of apps ( 1 app right now ). Whenever you launch an app via exec(name, icon) from the Dev Console, it checks whether the app exists in the JSON file and, if it does, fetches its corresponding content. A Step Towards Modular… modOS is officially MODULAR ! What is modular as of now? Many things! I scratched the modular clock idea from the previous Dev Post… AND REPLACED IT WITH A COMPLETELY MODULAR BAR!!! So now the entire bar is modular. :) Apps are now modular too! You can launch any app via exec(name, icon) in the Dev Console (often opened with F12) to render a new window with your preferred name and icon. The clock idea was scratched… BUT THE CLOCK ITSELF IS STILL MODULAR! Challenges Making things modular takes a lot of time. You don’t just write your program in HTML anymore—you have to generate it through JavaScript. To make it modular, individual variables need to go through their own processes before everything connects together. And of course… that usually comes with a bug or two. Solution Uh… yeah, that was the challenge. Doesn’t really need a solution. Releases From now on, every new release will be named after a song from a 2000s Turkish Alternative Rock band. The next major release will be called: modOS v0.x.x-alpha [Mor Ve Ötesi - Cambaz] Make sure you give it a listen. It’s a banger! Final Thoughts I think the project is going very well. It’s taking a lot of time, but it’s worthwhile since I’m learning new things about a programming language I’ve been using for five years now. I’m hoping to add more features, finish the base build, and finally move on to the backend side of things.
The End..? [Dev Post 4] With the guide finally being done, I announce modOS v1.0.0 Cambaz . Before I nerd out about everything added, here is more information about Mor ve Ötesi , the band behind Cambaz: https://en.wikipedia.org/wiki/Mor_ve_%C3%B6tesi Why is modOS different? Well, throughout the path of following the guide and making modOS, I completely rejected the idea of a hard-coded anything. Sure, it might be open-source, but what is the point of open-source if changing the source is going to take many hours of coding? modOS competes against a permanent webOS. The following features highlight how modOS achieves that: modOS does not have any hard-coded applications, bar, desktop, etc. Every app is found in a JSON file (apps.json located in /base/system/) which can be modified to install any application you want, easily! Currently this step is manual, and there is no official repository of verified applications. However, that is subject to change. Bartender (the bar system of modOS) is a JavaScript file (bartender.js found in /base/system/bartender.js) which can be modified to make the bar whatever you want! WER (Window Manager for modOS) is a script that inserts window functions such as the minimize and close buttons alongside the name of the window, icon, and movement system. The whole script is launched with initwindow(win) where win is the main window element. Got confused with the initwindow(win) command? Not to worry, modOS comes with the exec command, which follows the format exec(appname, icon) , where you can determine the name of the application ( REQUIRED ) and its icon ( NOT REQUIRED ). Whenever the command is run, the script ( exec.js found in /base/system/ ) looks through apps.json and pulls the necessary content and scripts, giving you a fully functional app. Note: If you decide to use a custom icon with an existing app, exec.js will still use the icon used in the database to maintain the developers creativity! So are you even more lazy? Cuz modOS desktop shows every app in apps.json for easier access. All you need is the ability to double click the app you want! Note: Psst! There are hidden applications. You need to run showhidden() to show them, and hidehidden() if you would like to hide them back. You can customize modOS off of the base CSS by editing config.css (config.css found in /system/user/) Default Applications List App Template: It is a template for you to make your own app! (hidden by default) run: An alternative for the developer console that comes with modern browsers. A great option for mobile users or older, unsupported browsers. Release Notes: Your updated news for modOS! Theme Song: The theme song of modOS! Plays Cambaz by Mor ve Ötesi. Future Updates A signup/login system is planned to be added for cross-platform sync ability (e.g. apps, settings, customizations, etc). This will be optional and you can still use modOS as a guest. modOS developer mode: A way for you to build applications for you and others on modOS! Window minimization: Currently, windows do get minimized. However, you really cannot un-minimize them without running the command document.querySelector(".win").style.display="block" , which is unreliable and annoying. More applications: You will use modOS developer mode to develop applications for the ecosystem. No more work for me.
Announcing modOS Sevda Çiçeği Concept After completing the pretty underdeveloped modOS Cambaz, I think it is time we move on to a full, stable, environment. Plans for modOS Sevda Çiçeği: A fully modular webOS where you can change everything from the window rules to the very development environment. A package manager for distributing, installing, and managing user created packages. A full modOS API for consistency and compatibality. And MANY more. Here is a checklist/roadmap for modOS that you can follow as I check off the tasks: https://docs.google.com/document/d/1H7caegzGowVeYkntmm87eaJ8XJtSyU1Pbvb5vVNmgYI/edit?usp=sharing Logged hours for this dev post come from earlier bug fixes and polishing to modOS Cambaz alongside the making of modOS Sevda Çiçeği
A New Beginning [Dev Post 5] Here is what I got done ever since I announced modOS Sevda Çiçeği! git init So we now have modOS-VT as a GitHub repository. It’s pretty cool. VT stands for Vite Type, indicating how the project utilizes Vite and TypeScript instead of just html and javascript. What is made? I made: A bootstrap, which initializes every service necessary for modOS runtime. Basic system. Firebase!!! Jeez, why did it take 7 hours? Well, my friend, modOS is completely modular. So there is a bit of contradiction when I need to make a bootstrap that launches things, if there is no things . I worked on making a placeholder for almost everything. Core Idea modOS will be just like any other Linux distribution. You have the base system that gives you whatever you need. And you install user-generated content with a package manager! It will be so cool! But right now, I am still working on making the base system part. PSST! Do you want to contribute to modOS by making an app for it? Well you absolutely can! Right now it’s a bit difficult as there is no modOS . However, you can develop applications using typescript any time! Later modOS versions will come with API’s that you can integrate your app into the modOS ecosystem. Challenges The main challenge was getting started with modOS… again… but when I did start, it starts flowing like butter. What I LOVE about modOS right now: Because modOS-VT is built on Vite, I can use packages and make it easier to use with GitHub pages! I did not have to make 15 commits for a bug fix while setting up GitHub pages! Final Regards Thank you. :)
Longer Yet Shorter [Dev Post 6] After some long work, modOS is finally getting easier to get done. But it’s not done just yet. What is new? modOS now has some basic API’s, which will be used in the future by developers to make applications that can be fully integrated into the ecosystem. Bootstrap is reaching completion, which will bring us to the next step: display. We also have one of the most important functions of an OS, file management! modOS utilizes zenfs/core to store files and folders(alongside their structure) in memory! This will allow the creation of file explorers, document making, and more! This is also a crucial piece to make a modular OS. What is needed? modOS still needs some more API’s, most which will come from packages. Due to that, the next dev post should be of packer, the official package manager for modOS. It will be the connectiong between users, database, and developers. User <--> Database <--> Developer Meaning dev’s will be able to publish packages, and user’s will be able to download them! And finally, we need an account session thingy to keep track of each user’s installed packages. This also will allow the usage of YOUR modOS anywhere! Final Regards pretty cool
Tada! modOS-VT is SO close to being done! I feel it! Disclaimers AI was heavily used at this point of the project. The reason is that the code was starting to get very messy(and not cool looking), which is why I asked AI to REORGANIZE the code. It basically took what I wrote, made them more organized, and made the connections. It is more than likely that the AI added a few of lines itself. Alongside that, I used AI to COMPLETELY make a terminal system using xterm.js(node module). The reason is, xterm has one of the worst and most incomplete documentations I ever saw. I really couldn’t make it myself after three tries. And finally, I used AI to make a package installation/launching system, as that would lead me into parts of Java/Type Script that I previously had no experience with. I am still trying to learn how to make it myself, however. I am very sorry for the heavy usage of AI. This is a very niche project that you can not find a lot of information for. I believe the code still meets AI requirements of Stardance. New Additions There is a fully set-up(with a Firebase back end) account management system to signup or login users. There is a guest option for people who just want to try it out! System-wide terminal. It is made so different software can be built on it! Package installation and launching: This is HUGE! This is what was needed to make modOS MODULAR ! New API’s Very cool and clean looking code(developer friendly). Future Updates modOS-VT will be rebranded to just modOS. There will be some base packages that are needed to make. A README.md for developers with the instructions on making a package. And yeah that is what’s left for modOS-VT.
BOOYAH! After so long, we finally have VISUAL IMPROVEMENT!!! Before we start, I would appreciate if y’all followed modOS! Link: modos.krambo.space New Additions: You can now install(via packer get) or remove(via packer remove) ANY PACKAGE(from existing directory, use packer fetch for a list) You get some propriety software for modOS so it is easier for you to do stuff :) Package delivered commands! Developers can implement their own commands and API’s to the modOS ecosystem! API integration into packages Dependencies work flow modOS-VT has officially been made modOS, with the original being retired under modOS-pre. It will be removed from GitHub soon. And MANY more minor updates! Things that are needed to be fixed Guest option does not work, special rules needed to be implemented. packer.get API blindly makes a new blob file every time it is used(potential memory leak) There is no settings feature(yet), so the accounts are pretty useless rn. Sorry. And yeah that’s it to my knowledge DEVELOPERS!!! You can officially use the modOS API to make an application for the modOS ecosystem! Sadly, we do not have any documentation, but you can see the existing packages I made for reference, I tried my best to make it easy on y’all! https://github.com/krambo345/krambools/tree/master Publishing If you are a developer that made an application for modOS(tysm!), there sadly is no official way to register the application to modOS(yet!). It is still being implemented. Please hold on to your application until there is a method. Follow this project to be updated for when it is implemented! Thank you! Disclaimers: AI has been heavily used in this part of the project due to the advanced levels of TS used(that I can’t do myself). In my defense, this is the first project I ever made using TypeScript and Vite. Almost every new feature exposes me to another new thing(and problem) to learn!
Adding stuff As of now, modOS comes with pre-installed packages to get you, the user, started. These include terminal, desktop, bartender, wer(window manager), editor, and more! With these packages you can install more packages(that do not exist yet). Do you want to be a developer? modOS is made to be one of the most developer friendly webOS’s out there! With over 10 different API’s, you can build applications that are easily integrated into the system. You can check out the source code of each package I made for modOS via first, finding the package with ls packages (in terminal) and then reading them with cat packages/PACKAGE (also in terminal)! oooor just go to the krambools github repository https://github.com/krambo345/krambools Bootstrap recovery Bootstrap works right now, for me. However, if anyone else gets errors while booting modOS, they will have the opportunity to repair it via bootstrap recovery that is presented upon failure. link due to a situation, i can not put modOS link to the information. use this link to access modOS: https://modos.krambo.space Thank yall
A Path to Stable From the previous… and unsuccessful ship… I learned many things that could improve modOS(other than a temporary Firebase bug🙄) First of all, there were a lot of bugs. A plenty of the time reported on this devlog are from bug fixing. Secondly, seems like people want to be able to customize the preinstalled system. So I have been working on a settings package to allow managing your account and CUSTOMIZING your system! DISCOVERY❗! Apperiantly, because modOS is modular by design, and because you can import packages, and because you can edit those packages, it turns out app development in the sense of an IDE is by design built in to modOS! With this, I was able to resolve many package related bugs running in a live environment, and even build packages! This will be utilized even more to hopefully make a full modern IDE package for anyone to use and build packages!!! Check out the video below for demonstration! I am looking for ideas, so please hit me up with some!
SO MUCH BETTER! modOS is now more than just a template for your OS. It now makes it easier to template your own web OS! New Additions Settings package Splash Screen(you can turn it off in settings!) Saving settings 💾 Uses With these new features, your modOS account will officially have a working function. You can open your environment wherever you want. Future Plans Saving installed packages Saving user-made files/folders(There is already a immature version, however it does not work). Package development IDE. Customized Splash Screen Notification Daemon D-Bus Events 😟 Problems That Occured Resetting custom CSS. New user check(supposed to work. literally no reason it should not) Send Recommendations/Suggestions Sorry for excess use of EMOJIS they are fun
Finale As yall know, stardance is ending… here is final form of modOS.
Ships:
Welcome to modOS v1.0.0 Cambaz. It is a full webOS that comes with the basics of a computer. This full (almost) stable release is modular, flexible, and heavily optimized to up stand multiple situations. There were many challenges when it came to converting what I did from the guide into a modular system. It came with many problems, errors, lack of sleep, so on and so forth. Thanks to Lil ’G(PT), I was able to automate small tasks like converting HTML apps to a format that could be published in JSON. Features of modOS Cambaz: A fully modular system, with the ability to publish your own JS files with others. A small “terminal” named run. Package/App manager. Bartender(the bar of modOS) WER (Window Manager of modOS) Automated system set up. Developer friendly design. An aesthetic that combines 2000s retro and today’s modern. From here, the future releases of modOS will focus on making a full, complete package manager which makes distributing and receiving applications across modOS more easy. NOTE: In order to use many of the special features of modOS, you have to download and run modOS locally on your device. The picture shows what you would get in an out-of-the-box experience.
modOS Sevda Çiçeği: A fully open-source, modular, and multi-platform webOS. Features: modOS, unlike other webOS projects, has a plentiful of unique features allowing more customization: Modular build. Developer friendly API’s Pre-built desktop Account service And many more! Usage: modOS can be used everywhere by anyone, making it a great option for people on the move. Development: modOS comes with API’s to allow integration and make it easier for developers to make new packages.
Welcome to modOS. This webOS is not one of those fancy ui webOS’s you saw… this is something more! Let us start from the code. It is entirely modular. All other webOS’s are hard-coded, meaning changing one thing might cause it to break. In modOS, the code being modular allowed me to build the following that is to come… A full API system for app development! Storing data in an account, meaning that you can access your files, settings, EVERYTHING, anywhere! Modular applications… You can install applications using the built-in “packer” package manager. REFER TO README FOR USAGE!!! Once again, modOS is for YOU! So any comments on how “I hate the UI!”, “Make it cooler!!”, “blah blah blah” will be returned. This UI is a TEMPLATE....
|
1793570043.6845837
|
1793656443.6845837
|
|
47442
|
model rocket v2 by @simonrnr | Stardance
|
simonrnr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: model rocket v2 by @simonrnr | Stardance
|
1793181170.9715393
|
1793785970.9715393
|
|
1214
|
moderately small rocket by @j18lin | Stardance
|
j18lin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: moderately small rocket by @j18lin | Starda Title: moderately small rocket by @j18lin | Stardance...
|
1793332302.2107923
|
1793937102.2107923
|
|
70113
|
modern alarm clock for my bedside by @pr0totype | modern alarm clock for my bedside by @pr0totype | Stardance...
|
pr0totype
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: modern alarm clock for my bedside by @pr0to Title: modern alarm clock for my bedside by @pr0totype | Stardance...
|
1793605866.8134785
|
1794210666.8134785
|
|
61456
|
modern walkman style mp3 player by @ainavv | Stard modern walkman style mp3 player by @ainavv | Stardance...
|
ainavv
|
0
|
1.27
|
0
|
[]
|
[{"post_id": 68761, "ts": "202 [{"post_id": 68761, "ts": "2026-09-15T18:13:43Z", "hours": 0.3086, "text": "thinking about taking inspo from this, (vid on youtube by ube), looks fire"}, {"post_id": 68191, "ts": "2026-09-14T17:55:14Z", "hours": 0.3625, "text": "Keep on getting this error when I import my pcb .stp file to onshape please help"}, {"post_id": 67328, "ts": "2026-09-13T12:13:06Z", "hours": 0.5958, "text": "Started on the research for the mp3 player i had in mind for a long time. It consists of a 3.5” waveshare esp32 display and a few additions, like a rotary encoder for scrolling, 3.5mm jack for wired earphones and support for bluetooth earbuds too (partly why i went for a display module over making it from scratch). i’ll work on the outer shell and i’m thinking of adding a few other buttons, but i’m not really sure which ones yet, and where. looking forward to finishing this project."}]...
|
Title: modern walkman style mp3 player by @ainavv Title: modern walkman style mp3 player by @ainavv | Stardance
Devlogs:
Started on the research for the mp3 player i had in mind for a long time. It consists of a 3.5” waveshare esp32 display and a few additions, like a rotary encoder for scrolling, 3.5mm jack for wired earphones and support for bluetooth earbuds too (partly why i went for a display module over making it from scratch). i’ll work on the outer shell and i’m thinking of adding a few other buttons, but i’m not really sure which ones yet, and where. looking forward to finishing this project.
Keep on getting this error when I import my pcb .stp file to onshape please help
thinking about taking inspo from this, (vid on youtube by ube), looks fire...
|
1793040618.4818218
|
1793645418.4818218
|