|
17651
|
Untitled by @YALFitian | Stardance
|
YALFitian
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @YALFitian | Stardance
|
1793407677.9310496
|
1794012477.9310496
|
|
17652
|
My very own WebOS by @SavvyG | Stardance
|
SavvyG
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @SavvyG | Stardance
|
1793422369.0845654
|
1794027169.0845654
|
|
17653
|
My awesome macropad! by @tridev | Stardance
|
tridev
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @tridev | Stardance
|
1793767831.2140248
|
1794372631.2140248
|
|
17654
|
SmurfCatPad by @julianvito908 | Stardance
|
julianvito908
|
0
|
1.8
|
0
|
[]
|
[{"post_id": 25503, "ts": "202 [{"post_id": 25503, "ts": "2026-07-09T20:25:28Z", "hours": 1.8, "text": "basically made the pcb and schematics"}]...
|
Title: SmurfCatPad by @julianvito908 | Stardance
Title: SmurfCatPad by @julianvito908 | Stardance
Devlogs:
basically made the pcb and schematics...
|
1793357552.436479
|
1793962352.436479
|
|
17655
|
My first slack bot! by @Maniboxif | Stardance
|
Maniboxif
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Maniboxif | Stardan Title: My first slack bot! by @Maniboxif | Stardance...
|
1793767885.951943
|
1794372685.951943
|
|
17656
|
My first slack bot! by @ahaimoud77 | Stardance
|
ahaimoud77
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @ahaimoud77 | Starda Title: My first slack bot! by @ahaimoud77 | Stardance...
|
1793494543.9154646
|
1794099343.9154646
|
|
17657
|
My very own WebOS by @KrishnaAstronomer | Stardanc My very own WebOS by @KrishnaAstronomer | Stardance...
|
KrishnaAstronomer
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @KrishnaAstronomer | S Title: My very own WebOS by @KrishnaAstronomer | Stardance...
|
1793479709.0102909
|
1794084509.0102909
|
|
17658
|
My first slack bot! by @KrithikaYasa | Stardance
|
KrithikaYasa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @KrithikaYasa | Star Title: My first slack bot! by @KrithikaYasa | Stardance...
|
1793188333.9759078
|
1793793133.9759078
|
|
17659
|
Frictionless by @bobaducks101 | Stardance
|
bobaducks101
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @bobaducks101 | Stardance
|
1793483374.2657897
|
1794088174.2657897
|
|
17660
|
My awesome macropad! by @levifrederickharper | Sta My awesome macropad! by @levifrederickharper | Stardance...
|
levifrederickharper
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @levifrederickharpe Title: My awesome macropad! by @levifrederickharper | Stardance...
|
1793220748.0182607
|
1793825548.0182607
|
|
17661
|
Untitled project by @Absidee | Stardance
|
Absidee
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Absidee | Stardance
|
1793347006.6844423
|
1793951806.6844423
|
|
17662
|
My awesome macropad! by @kiranmaideekonda | Starda My awesome macropad! by @kiranmaideekonda | Stardance...
|
kiranmaideekonda
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @kiranmaideekonda | Title: My awesome macropad! by @kiranmaideekonda | Stardance...
|
1793407877.174008
|
1794012677.174008
|
|
17663
|
Pipe Organ Simulation by @Cy | Stardance
|
Cy
|
1
|
13.0
|
127
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T06:06:35Z", "hours": 13.0, "multiplier": 10.0, "payout": 127, "blessing": "neutral", "text": "I have made a Pipe Organ Synth Simulation to create organ sounds for my music. The reason why I have made this Is because I searched online for a certain sounding organ that I have heard in a song and found nothing. The most challenging part of this whole program would be trying to make the sound and trying to figure out what button is off out of the 100 buttons when there is a problem with one. It was also very tedious copy and pasting and slightly modifying the same code for all of those buttons. I am really proud of how the sound turned out because I was a little scared that it would just sound like sine waves just clashing together (you can make that sound still), but with the slight bit of noise makes it sound like pumping air. What people should know when testing my program for the first time is to load the light.json preset and modify it little by little by using whole numbers for the wave width buttons.", "repo": "https://github.com/Cybrock9000/Organ-Simulation", "demo": "https://cyberwolfgames.itch.io/cys-pipe-organ-simulation"}]...
|
[{"post_id": 30531, "ts": "202 [{"post_id": 30531, "ts": "2026-07-18T05:45:20Z", "hours": 1.4642, "text": "I have polished up the ui and added a couple more features like a button to have the sound wave to auto scroll and more fade options. all code is open source and is (mostly) easy to read and i am going to ship this project now :)"}, {"post_id": 29988, "ts": "2026-07-17T06:37:16Z", "hours": 1.5622, "text": "DEMO RELEASED!!!!!!!!!!!!!!!! I have done some minor things to finish up this project like: saving and loading sounds, setting the duration of the output and adding a button to clear the grid to start new. The demo is a exe that works on pcs that dont have python too. More info on how to use in the Read Me ."}, {"post_id": 28741, "ts": "2026-07-15T05:46:26Z", "hours": 5.1436, "text": "Like I said in my devlog with my engine, I have found Terraria and it is amazing. so that is why i have been off for a while. But I have done so much today with both the engine and this simulation like: double the amount of waves you can mess with (96 buttons total in that grid), there is attack fade and noise toggles, you can now test and hear your sound in the program without trying to find it in the files. and now my code is one super long (1490 lines) repeating ‘mess’. BUT, it works and runs fast. Expect a demo soon :) ."}, {"post_id": 14223, "ts": "2026-06-23T07:21:18Z", "hours": 4.5286, "text": "So, I have done quite a bit with this project compared to the engine this past week. It is pretty much just a wave maker that creates interesting sounds by changing quite a few variables. I want to make it so its purpose is to recreate organ sounds (like the wave you see in the pic). But once you touch any variable, I will ether sound good or blow you brains out. So this will be a project that I will dabble in every so often to figure out how to fix it. (maybe use preset waves and modify those)"}]...
|
Title: Pipe Organ Simulation by @Cy | Stardance
D Title: Pipe Organ Simulation by @Cy | Stardance
Devlogs:
So, I have done quite a bit with this project compared to the engine this past week. It is pretty much just a wave maker that creates interesting sounds by changing quite a few variables. I want to make it so its purpose is to recreate organ sounds (like the wave you see in the pic). But once you touch any variable, I will ether sound good or blow you brains out. So this will be a project that I will dabble in every so often to figure out how to fix it. (maybe use preset waves and modify those)
Like I said in my devlog with my engine, I have found Terraria and it is amazing. so that is why i have been off for a while. But I have done so much today with both the engine and this simulation like: double the amount of waves you can mess with (96 buttons total in that grid), there is attack fade and noise toggles, you can now test and hear your sound in the program without trying to find it in the files. and now my code is one super long (1490 lines) repeating ‘mess’. BUT, it works and runs fast. Expect a demo soon :) .
DEMO RELEASED!!!!!!!!!!!!!!!! I have done some minor things to finish up this project like: saving and loading sounds, setting the duration of the output and adding a button to clear the grid to start new. The demo is a exe that works on pcs that dont have python too. More info on how to use in the Read Me .
I have polished up the ui and added a couple more features like a button to have the sound wave to auto scroll and more fade options. all code is open source and is (mostly) easy to read and i am going to ship this project now :)
Ships:
I have made a Pipe Organ Synth Simulation to create organ sounds for my music. The reason why I have made this Is because I searched online for a certain sounding organ that I have heard in a song and found nothing. The most challenging part of this whole program would be trying to make the sound and trying to figure out what button is off out of the 100 buttons when there is a problem with one. It was also very tedious copy and pasting and slightly modifying the same code for all of those buttons. I am really proud of how the sound turned out because I was a little scared that it would just sound like sine waves just clashing together (you can make that sound still), but with the slight bit of noise makes it sound like pumping air. What people should know when testing my program for the first time is to load the light.json preset and modify it little by little by using whole numbers for the wave width buttons....
|
1793717526.7572713
|
1793803926.7572713
|
|
17664
|
SLA/FDM Figurines by @aydC | Stardance
|
aydC
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: SLA/FDM Figurines by @aydC | Stardance
|
1793569740.6050794
|
1794174540.6050794
|
|
17665
|
My very own WebOS by @anish_sn | Stardance
|
anish_sn
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @anish_sn | Stardance
|
1793382522.692302
|
1793987322.692302
|
|
17666
|
Dungeons and Dragons The Game by @Orin | Stardance
|
Orin
|
0
|
1.07
|
0
|
[]
|
[{"post_id": 10029, "ts": "202 [{"post_id": 10029, "ts": "2026-06-16T16:21:55Z", "hours": 1.0731, "text": "Dungeons and Dragons The Game"}]...
|
Title: Dungeons and Dragons The Game by @Orin | St Title: Dungeons and Dragons The Game by @Orin | Stardance
Devlogs:
Dungeons and Dragons The Game...
|
1793487281.8165085
|
1794092081.8165085
|
|
17667
|
Untitled by @gavinkluch | Stardance
|
gavinkluch
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @gavinkluch | Stardance
|
1793281762.1810305
|
1793886562.1810305
|
|
17668
|
Commuter bike frame by @dbanera | Stardance
|
dbanera
|
0
|
1.3
|
0
|
[]
|
[{"post_id": 12320, "ts": "202 [{"post_id": 12320, "ts": "2026-06-20T03:16:25Z", "hours": 0.7, "text": "Added more reference geometry for cranks and sprocket. Modified the head tube lug a bit and made the chainstay and seatstays. Will be making the lugs soon"}, {"post_id": 12237, "ts": "2026-06-19T23:52:13Z", "hours": 0.6, "text": "reference geometry, frame geometry, tubes, and head tube caded. Will run with 50mm down tube and 40mm top tube and seat tubes. Bonding tolerance is 0.016in with 7mm walls set in parameters. Probably going to print this in some sort of PPS-CF for FDM or Nylon 12 if I can do it on an SLS machine"}]...
|
Title: Commuter bike frame by @dbanera | Stardance Title: Commuter bike frame by @dbanera | Stardance
Devlogs:
reference geometry, frame geometry, tubes, and head tube caded. Will run with 50mm down tube and 40mm top tube and seat tubes. Bonding tolerance is 0.016in with 7mm walls set in parameters. Probably going to print this in some sort of PPS-CF for FDM or Nylon 12 if I can do it on an SLS machine
Added more reference geometry for cranks and sprocket. Modified the head tube lug a bit and made the chainstay and seatstays. Will be making the lugs soon...
|
1793195484.1816287
|
1793800284.1816287
|
|
17669
|
Untitled by @garg2harry | Stardance
|
garg2harry
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @garg2harry | Stardance
|
1793332079.1719053
|
1793936879.1719053
|
|
17670
|
Frictionless by @varshith_chimakurthi | Stardance
|
varshith_chimakurthi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @varshith_chimakurthi | Sta Title: Frictionless by @varshith_chimakurthi | Stardance...
|
1793379085.9415584
|
1793983885.9415584
|
|
17671
|
gooberpad by @sircheetodust | Stardance
|
sircheetodust
|
0
|
15.38
|
0
|
[]
|
[{"post_id": 53453, "ts": "202 [{"post_id": 53453, "ts": "2026-08-24T00:38:46Z", "hours": 2.0383, "text": "that feeling when you have a working goober pad, but all of your AP chem notes are STILL not done =0 I finally finished soldering everything! This thing works and im very excited to see it in its case. It took 40 min to get firmware working(w lapse for not adding that to the time), but overall, it was easy. Only issue was all keybindings were messed up(pause button alt f4s you, volume down makes volume go up, etc.). My friend is waiting for filament so he can print the case, but i hope to ship by next weekend!"}, {"post_id": 52635, "ts": "2026-08-22T21:22:11Z", "hours": 1.5, "text": "if breathing solder fumes causes memory loss, imagine what breathing solder fumes can do? Been a while! I got everything manufactured and shipped. I soldered all of the diodes and the encoder. Beginning to feel confident with my soldering skills. Ill try to finish soldering everything by tomorrow(8/23/26) my hands are so shaky wtf"}, {"post_id": 26974, "ts": "2026-07-12T02:54:09Z", "hours": 1.9175, "text": "Finished firmware(finally) and worked on readme. I finally finished the firmware, I added a cool picture to the screen which I struggled with. I also started working on getting info on the readme. I hope to ship this week!"}, {"post_id": 26659, "ts": "2026-07-11T16:31:32Z", "hours": 1.78, "text": "I started working on firmware(finally!). Firmware documentation for KMK seems to be a bit difficult to navigate so AI is assisting me there. I also set up my github repository and made a render of the final product!"}, {"post_id": 23694, "ts": "2026-07-06T20:04:13Z", "hours": 0.4139, "text": "i finished cad. I have no idea how firmware works and it is very confusing. send help 😭"}, {"post_id": 23137, "ts": "2026-07-05T22:16:11Z", "hours": 0.65, "text": "it now looks tuff I made some cool looking holes in it. I think I am nearing readiness for shipping…"}, {"post_id": 22516, "ts": "2026-07-05T01:07:51Z", "hours": 1.2503, "text": "I finally finished getting the basic cad blocked out. I want to get a voronoi effect on the body so it looks cool."}, {"post_id": 21146, "ts": "2026-07-02T23:03:49Z", "hours": 1.6006, "text": "LED’s were gonna look horrible around the perimeter so i just scrapped them and hoocked up the encoder. Undid bevels to allow for screw stuff and im working on the case again"}, {"post_id": 11641, "ts": "2026-06-18T23:24:46Z", "hours": 1.1614, "text": "CAD-ing has begun Ive started cadding a case in fusion. I also am making the board in fusion so that I have a better preview of what Im making. Devtime(from lapse) isn’t updating for some reason, I think its around 1 hr 30 min"}, {"post_id": 10777, "ts": "2026-06-17T18:07:15Z", "hours": 1.4692, "text": "I routed the PCB and started to cad it in fusion"}, {"post_id": 8470, "ts": "2026-06-14T02:32:52Z", "hours": 0.5653, "text": "I redid the schematic I am kinda bad at this so i have to redo the OLED wiring tomorrow(Shoutout to frog dude for catching it)"}, {"post_id": 7849, "ts": "2026-06-13T02:50:04Z", "hours": 1.0311, "text": "I learned how to use kicad I am going to make my button pad a 3x3 with encoder"}]...
|
Title: gooberpad by @sircheetodust | Stardance
De Title: gooberpad by @sircheetodust | Stardance
Devlogs:
I learned how to use kicad I am going to make my button pad a 3x3 with encoder
I redid the schematic I am kinda bad at this so i have to redo the OLED wiring tomorrow(Shoutout to frog dude for catching it)
I routed the PCB and started to cad it in fusion
CAD-ing has begun Ive started cadding a case in fusion. I also am making the board in fusion so that I have a better preview of what Im making. Devtime(from lapse) isn’t updating for some reason, I think its around 1 hr 30 min
LED’s were gonna look horrible around the perimeter so i just scrapped them and hoocked up the encoder. Undid bevels to allow for screw stuff and im working on the case again
I finally finished getting the basic cad blocked out. I want to get a voronoi effect on the body so it looks cool.
it now looks tuff I made some cool looking holes in it. I think I am nearing readiness for shipping…
i finished cad. I have no idea how firmware works and it is very confusing. send help 😭
I started working on firmware(finally!). Firmware documentation for KMK seems to be a bit difficult to navigate so AI is assisting me there. I also set up my github repository and made a render of the final product!
Finished firmware(finally) and worked on readme. I finally finished the firmware, I added a cool picture to the screen which I struggled with. I also started working on getting info on the readme. I hope to ship this week!
if breathing solder fumes causes memory loss, imagine what breathing solder fumes can do? Been a while! I got everything manufactured and shipped. I soldered all of the diodes and the encoder. Beginning to feel confident with my soldering skills. Ill try to finish soldering everything by tomorrow(8/23/26) my hands are so shaky wtf
that feeling when you have a working goober pad, but all of your AP chem notes are STILL not done =0 I finally finished soldering everything! This thing works and im very excited to see it in its case. It took 40 min to get firmware working(w lapse for not adding that to the time), but overall, it was easy. Only issue was all keybindings were messed up(pause button alt f4s you, volume down makes volume go up, etc.). My friend is waiting for filament so he can print the case, but i hope to ship by next weekend!...
|
1793498064.7274776
|
1794102864.7274776
|
|
17672
|
My awesome macropad! by @sahasra_kadarla12 | Stard My awesome macropad! by @sahasra_kadarla12 | Stardance...
|
sahasra_kadarla12
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @sahasra_kadarla12 Title: My awesome macropad! by @sahasra_kadarla12 | Stardance...
|
1793357385.8811646
|
1793962185.8811646
|
|
17673
|
WebOs by @lima6 | Stardance
|
lima6
|
1
|
16.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T12:31:29Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "WebOS A lightweight, interactive and simplistic web operating system environment built entirely with vanilla HTML, CSS, and JavaScript. This project simulates a desktop interface featuring draggable windows, dynamic theme personalisation and an expandable photos app. Key Features: Window Management: Fully draggable application windows with boundary clamping to prevent windows from escaping the viewport bounds. Features a dynamic layering system that moves active windows to the front on click. Customisation: 9 distinct selectable accent themes, as well as live-updating text input that modifies the operating system branding in the taskbar. Dark Mode: A unified dark mode toggle that dynamically applies a overlay to tint and dim active theme wallpaper backgrounds without hardcoding separate colour tables. Photos App: Single-click preview capability within the primary photo viewer. Double-click event listener that creates separate picture windows. I plan to expand this project by completing the Hackclub Stardance mission WebOs 2 sometime soon.", "repo": "https://github.com/lima6-tech/WebOs", "demo": "https://lima6.itch.io/webos-lima6"}]...
|
[{"post_id": 15018, "ts": "202 [{"post_id": 15018, "ts": "2026-06-24T12:22:20Z", "hours": 0.3097, "text": "Added Settings App Added a settings app. Features: 9 different accent themes. An editable operating system branding in the taskbar. Dark Mode: A dark mode toggle that applies a overlay to tint and dim active theme wallpaper backgrounds."}, {"post_id": 14960, "ts": "2026-06-24T09:18:32Z", "hours": 0.5006, "text": "Added two apps Moved on from the main desktop to adding two generic apps. About App: shows different sets of text and includes a sidebar to navigate them. Photos App: displays images with a thumbnail sidebar. The images can be opened up into their own window by double-clicking"}, {"post_id": 14327, "ts": "2026-06-23T12:43:25Z", "hours": 14.9892, "text": "Framework I have forgotten to post devlogs, so here is my progress so far: created the main desktop with a top taskbar with a clock, as well as a welcome window which can be dragged and closed."}]...
|
Title: WebOs by @lima6 | Stardance
Devlogs:
Frame Title: WebOs by @lima6 | Stardance
Devlogs:
Framework I have forgotten to post devlogs, so here is my progress so far: created the main desktop with a top taskbar with a clock, as well as a welcome window which can be dragged and closed.
Added two apps Moved on from the main desktop to adding two generic apps. About App: shows different sets of text and includes a sidebar to navigate them. Photos App: displays images with a thumbnail sidebar. The images can be opened up into their own window by double-clicking
Added Settings App Added a settings app. Features: 9 different accent themes. An editable operating system branding in the taskbar. Dark Mode: A dark mode toggle that applies a overlay to tint and dim active theme wallpaper backgrounds.
Ships:
WebOS A lightweight, interactive and simplistic web operating system environment built entirely with vanilla HTML, CSS, and JavaScript. This project simulates a desktop interface featuring draggable windows, dynamic theme personalisation and an expandable photos app. Key Features: Window Management: Fully draggable application windows with boundary clamping to prevent windows from escaping the viewport bounds. Features a dynamic layering system that moves active windows to the front on click. Customisation: 9 distinct selectable accent themes, as well as live-updating text input that modifies the operating system branding in the taskbar. Dark Mode: A unified dark mode toggle that dynamically applies a overlay to tint and dim active theme wallpaper backgrounds without hardcoding separate colour tables. Photos App: Single-click preview capability within the primary photo viewer. Double-click event listener that creates separate picture windows. I plan to expand this project by completing the Hackclub Stardance mission WebOs 2 sometime soon....
|
1793720838.3330495
|
1793807238.3330495
|
|
17674
|
Orion Bot by @KoushikT | Stardance
|
KoushikT
|
2
|
6.0
|
18
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-12T23:03:57Z", "hours": 1.0, "multiplier": 3.61, "payout": 4, "blessing": "neutral", "text": "I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and what it is like on Mars right now. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars. This is my first project in the organization, and my first ever time using slack. It runs on Nest, with code I made on VSCODE. I wish you all love it! Thanks!", "repo": "https://github.com/Koushik919-del/orionbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}, {"ship_num": 2, "ts": "2026-06-21T18:09:43Z", "hours": 5.0, "multiplier": 2.63, "payout": 14, "blessing": "neutral", "text": "I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and pictures from the Mars rover. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars.", "repo": "https://github.com/Koushik919-del/orionbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 24423, "ts": "202 [{"post_id": 24423, "ts": "2026-07-07T23:28:45Z", "hours": 0.7861, "text": "Made it so it doesn’t have any more errors or not too much loading time with nest"}, {"post_id": 14564, "ts": "2026-06-23T18:48:06Z", "hours": 0.3, "text": "Fixed up a few problems like the README. And make sure not to use it all channels. Only use it DMs to yourself or in the bot-spam."}, {"post_id": 12710, "ts": "2026-06-20T19:11:46Z", "hours": 1.9322, "text": "Finally finished, go to Slack now to test it out. the commands are /mars, /apod, and /iss!"}, {"post_id": 11420, "ts": "2026-06-18T18:01:59Z", "hours": 1.0906, "text": "I am now adding the feature where we can see the weather on Mars."}, {"post_id": 10229, "ts": "2026-06-16T21:12:45Z", "hours": 2.25, "text": "This is like a Slack Bot that will help you know where the ISS is, and also how Mars’ weather is. It still is in progress."}]...
|
Title: Orion Bot by @KoushikT | Stardance
Devlogs Title: Orion Bot by @KoushikT | Stardance
Devlogs:
This is like a Slack Bot that will help you know where the ISS is, and also how Mars’ weather is. It still is in progress.
I am now adding the feature where we can see the weather on Mars.
Finally finished, go to Slack now to test it out. the commands are /mars, /apod, and /iss!
Fixed up a few problems like the README. And make sure not to use it all channels. Only use it DMs to yourself or in the bot-spam.
Made it so it doesn’t have any more errors or not too much loading time with nest
Ships:
I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and pictures from the Mars rover. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars.
I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and what it is like on Mars right now. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars. This is my first project in the organization, and my first ever time using slack. It runs on Nest, with code I made on VSCODE. I wish you all love it! Thanks!...
|
1793713804.003167
|
1793800204.003167
|
|
17675
|
LibreAuth by @stormz | Stardance
|
stormz
|
0
|
3.33
|
0
|
[]
|
[{"post_id": 7758, "ts": "2026 [{"post_id": 7758, "ts": "2026-06-12T23:12:27Z", "hours": 3.3256, "text": "Currently working on a hackpad for the mission."}]...
|
Title: LibreAuth by @stormz | Stardance
Devlogs:
Title: LibreAuth by @stormz | Stardance
Devlogs:
Currently working on a hackpad for the mission....
|
1793437031.1397913
|
1794041831.1397913
|
|
17676
|
My awesome macropad! by @Fluffypocket | Stardance
|
Fluffypocket
|
0
|
0.25
|
0
|
[]
|
[{"post_id": 10055, "ts": "202 [{"post_id": 10055, "ts": "2026-06-16T17:07:47Z", "hours": 0.2508, "text": "I Just designed the PCB for my Macropad!"}]...
|
Title: My awesome macropad! by @Fluffypocket | Sta Title: My awesome macropad! by @Fluffypocket | Stardance
Devlogs:
I Just designed the PCB for my Macropad!...
|
1793857785.5597775
|
1794462585.5597775
|
|
17677
|
My very own WebOS by @geeta_mothukuri | Stardance
|
geeta_mothukuri
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @geeta_mothukuri | Sta Title: My very own WebOS by @geeta_mothukuri | Stardance...
|
1793324871.7184403
|
1793929671.7184403
|
|
17678
|
Mole in a Hole by @lima6 | Stardance
|
lima6
|
1
|
3.0
|
46
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T09:35:20Z", "hours": 3.0, "multiplier": 17.27, "payout": 46, "blessing": "neutral", "text": "Mole in a Hole Version 2.1: New update of the Mole in a Hole released + shipped! Updates: Added a new brick - the monster brick. Destroyed when it’s “parent” monster is destroyed - meaning the player has to defeat certain monsters in order to proceed. Redid section - overhauled the entire mushroom sector with new and more exciting puzzles and challenges. The difficulty has been increased. Bug fixes - fixed some fade transition bugs. Updated springs - updated the (mushroom) springs to make them more flexible - they can bounce the player to the left or right Please try out our game and feel free to comment! (I would like to know if anyone can beat the game - it’s not long).", "repo": "https://github.com/justtjasonn/Mole_in_a_hole", "demo": "https://lima6.itch.io/mole-in-a-hole"}]...
|
[{"post_id": 16174, "ts": "202 [{"post_id": 16174, "ts": "2026-06-26T08:55:13Z", "hours": 2.3042, "text": "Redid section Overhauled the entire mushroom sector with new and more exciting puzzles and challenges. The difficulty has been increased. This update includes: Bug fixes - fixed some fade transition bugs. Updated springs - updated the (mushroom) springs to make them more flexible. Changed the boost from just y to Vector(x, y) so the spring can bounce the player to the left or right."}, {"post_id": 7768, "ts": "2026-06-12T23:53:48Z", "hours": 0.4086, "text": "Monster Brick Added a new brick - the monster brick. Is destroyed when it’s “parent” monster is destroyed - meaning the player has to defeat certain monsters in order to proceed."}]...
|
Title: Mole in a Hole by @lima6 | Stardance
Devlo Title: Mole in a Hole by @lima6 | Stardance
Devlogs:
Monster Brick Added a new brick - the monster brick. Is destroyed when it’s “parent” monster is destroyed - meaning the player has to defeat certain monsters in order to proceed.
Redid section Overhauled the entire mushroom sector with new and more exciting puzzles and challenges. The difficulty has been increased. This update includes: Bug fixes - fixed some fade transition bugs. Updated springs - updated the (mushroom) springs to make them more flexible. Changed the boost from just y to Vector(x, y) so the spring can bounce the player to the left or right.
Ships:
Mole in a Hole Version 2.1: New update of the Mole in a Hole released + shipped! Updates: Added a new brick - the monster brick. Destroyed when it’s “parent” monster is destroyed - meaning the player has to defeat certain monsters in order to proceed. Redid section - overhauled the entire mushroom sector with new and more exciting puzzles and challenges. The difficulty has been increased. Bug fixes - fixed some fade transition bugs. Updated springs - updated the (mushroom) springs to make them more flexible - they can bounce the player to the left or right Please try out our game and feel free to comment! (I would like to know if anyone can beat the game - it’s not long)....
|
1793703027.6723413
|
1793789427.6723413
|
|
17679
|
CanQuest App by @Rei | Stardance
|
Rei
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: CanQuest App by @Rei | Stardance
|
1793825455.2325666
|
1794430255.2325666
|
|
17680
|
My very own WebOS by @Sid-Chetan | Stardance
|
Sid-Chetan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Sid-Chetan | Stardanc Title: My very own WebOS by @Sid-Chetan | Stardance...
|
1793191698.6966615
|
1793796498.6966615
|
|
17681
|
Untitled by @J | Stardance
|
J
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @J | Stardance
|
1793454545.421582
|
1794059345.421582
|
|
17682
|
My very own WebOS by @cubie | Stardance
|
cubie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @cubie | Stardance
|
1793562501.3205218
|
1794167301.3205218
|
|
17683
|
My very own WebOS by @cubie | Stardance
|
cubie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @cubie | Stardance
|
1793425829.5952601
|
1794030629.5952601
|
|
17684
|
Frictionless by @Nikhil_G_FRC_2714 | Stardance
|
Nikhil_G_FRC_2714
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @Nikhil_G_FRC_2714 | Starda Title: Frictionless by @Nikhil_G_FRC_2714 | Stardance...
|
1793224592.7508585
|
1793829392.7508585
|
|
17685
|
Nipkow mechanical telivision by @mgwestra | Starda Nipkow mechanical telivision by @mgwestra | Stardance...
|
mgwestra
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Nipkow mechanical telivision by @mgwestra | Title: Nipkow mechanical telivision by @mgwestra | Stardance...
|
1793184462.7374532
|
1793789262.7374532
|
|
17686
|
My awesome macropad! by @dorttepeselin | Stardance
|
dorttepeselin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @dorttepeselin | St Title: My awesome macropad! by @dorttepeselin | Stardance...
|
1793400541.692139
|
1794005341.692139
|
|
17687
|
Extinction by @v81d | Stardance
|
v81d
|
2
|
16.0
|
126
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T18:42:16Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Extinction is now much more customizable with the newly added “Parameters” tab! The entire classification system has been reworked to be more memory-efficient and accurate in general, so Extinction should be able to block AI-generated articles much more effectively now. It was quite brain-damaging (to be honest) trying to figure out what changes I could possibly make to improve such a simple algorithm, but I ended up gaining a lot more knowledge about logistic functions (and sigmoids in general) and how useful math can be when making something like this. It was worth it. I also fixed several issues along the way while updating the options page. As I mentioned in my last devlog, there was a signal calibration logic error along with a potential division-by-zero error in calculating the fluency score of a text. Now with those pesky bugs out of the way, I can actually focus on improving the things that really matter for this project, such as keeping it fast and lightweight . Yes, the size of the package is really only around 100 KB (which is pretty lightweight), but some features still feel a little over-complicated. I enjoy looking at my code and feeling proud about all the new things I’ve learned, but, at the end of the day, the whole point of this extension is to tackle the problems most other AI detectors couldn’t: being easy on memory and all that. I do not plan on making Extinction ML-based. That defeats the whole purpose and will most certainly kill this experiment (or rather a proof-of-concept). That said, the main goal of the next ship will most likely be making some optimizations for both the UI and the detection system. As for this ship, most of the changes are related to the new options tab. To be fully transparent, the default values for these fields were NOT selected by a machine/algorithm, since that would probably hit the gray area of “machine learning.” All of the defaults were chosen by me, a real person! Since they are all based on observation rather than extreme experimentation (which I cannot carry out anyway), accuracy may vary depending on what you’re reading. If anyone happens to discover a better combination, feel free to let me know or make a pull request! Anyway, that wraps it up for my second ship. If you’d like to try out Extinction, you can install it officially from the Mozilla Add-ons store (if you’re on Firefox or a Firefox-based browser) OR build it from source using the GitHub repo. Unfortunately, Extinction will not be available on the Chrome Web Store because of the $5 registration fee (that I can’t pay right now). Things aren’t very appealing for Safari users either, since Apple places a $99/year registration fee (which is arguably a total rip-off that I’m not willing to give into at all). For now, Chrome and Safari users can stick to building and installing from source. Good news for Chrome users though: custom extensions don’t seem to be ephemeral or suddenly disappear the moment you exit the app, so once you’ve built it, you’ll be good until the next release. Thank you for checking out Extinction. I hope it’s as useful to you as it is to me! :)", "repo": "https://github.com/v81d/extinction", "demo": "https://addons.mozilla.org/en-US/firefox/addon/extinction"}, {"ship_num": 2, "ts": "2026-06-27T19:54:16Z", "hours": 10.0, "multiplier": 15.86, "payout": 126, "blessing": "neutral", "text": "Extinction is an ultra-lightweight AI content blocker browser extension powered by regex-based pattern matching and linguistic analysis. But why block AI? Well, the answer is quite simple. The World Wide Web is becoming increasingly plagued with low-quality AI-generated content. The content AI produces is often misleading or blatantly incorrect. While some may not particularly see this is an issue, many people wish to escape from or completely hide such content. What makes Extinction any different? Traditional AI content detectors rely on machine learning and heavy analysis to product a result. Besides the irony of using such a mechanism, these AI detectors are often less trustworthy when it comes to respecting user privacy. Since the content is fed into an external API, users cannot reliably confirm that the data they send is kept confidential. Extinction, on the other hand, does not send any data to an external endpoint; all analyses are done locally, meaning there is no compromise in user privacy. It does not use machine-learning to classify text, but rather simple pattern matching with regular expressions (regexes) paired with sentence variation analyses. Keep in mind that Extinction is not (and will never be) 100% foolproof, as with all AI detectors in general. There will always be false positives and false negatives, but we will try our best to improve Extinction over time and make it as accurate as possible without sacrificing user privacy or Extinction’s quality of being lightweight. The extension comes with an exclusion list to prevent trusted sites from being flagged.", "repo": "https://github.com/v81d/extinction", "demo": "https://addons.mozilla.org/en-US/firefox/addon/extinction"}]...
|
[{"post_id": 21531, "ts": "202 [{"post_id": 21531, "ts": "2026-07-03T15:31:14Z", "hours": 0.6372, "text": "Expanded the options page even further! You can now basically customize every single parameter that Extinction’s underlying system uses. Funny thing, I actually caught two bugs when adding the signal calibrator and lexical diversity / burstiness weight fields. The first bug: the signal calibration math actually didn’t allow for decimal calibrators because it was doing plain exponentiation (meaning negative signals would fail in that step). To fix this, I added a very basic change that would simply preserve the sign of the signal during calibration. That way, negative signals stay negative and positive signals stay positive. The second bug: if both the lexical diversity weight AND the burstiness weight are 0, there would be a division-by-zero error when calculating fluency score (which is the value that represents how natural-sounding the text is). Pretty simple fix. I just added a check using a ternary operation."}, {"post_id": 21139, "ts": "2026-07-02T22:57:42Z", "hours": 2.2169, "text": "Added even more fields to the parameter options! You can now edit the suspicion threshold along with some more sensitive options like the adjustment offset (basically the horizontal shift of the logistic function that is used to normalize the score). Also, while adding this, I realized I forgot to actually enforce the default value for all fields outside of just the options page. (Essentially, if you were to install the extension and never open the parameters tab, all the variables in there would default to null when it actually analyzes web pages.) Made sure to include a fix for that in these changes! I also learned a little more about sigmoid functions in general while trying to come up with a good enough caption for the new field, so that’s a nice bonus. Also had to add a little note at the top of the page because the defaults for these fields were not really chosen based on tested accuracy (they are simply based on my own observations of what seems to produce the most satisfactory results). By the way, I’d like to take some time to acknowledge the amazing feedback I got after my first ship! For Chrome users wanting justice after seeing that this extension is only published on AMO, I should mention that publishing to the Chrome Web Store requires a $5 fee, which I (unfortunately) cannot pay at this time. For now, Chrome/Safari users can stick to following the official build instructions listed in the README. In the future, I’ll also try to optimize Extinction’s detection system since I’m starting to feel like its status of being “lightweight” is slowly slipping away as I add new features. Anyway, thank you all for your wonderful comments, and I hope to fulfill as many of your suggestions as I can! :)"}, {"post_id": 19329, "ts": "2026-06-30T16:37:16Z", "hours": 0.9333, "text": "Added a “Suspicion threshold” option so anyone who uses Extinction can customize the detector’s aggressiveness. I also plan on making many of the other weights configurable as well in the near future!"}, {"post_id": 17802, "ts": "2026-06-28T18:47:17Z", "hours": 2.5872, "text": "Made a decent amount of changes today with Extinction’s classification algorithm and a few UI elements. Detections should be more accurate now with these new changes. (For those who want more detail: I added Type-Token Ratio calculations for determining lexical diversity along with better-tuned weights/constants. Also now using a sigmoid function for score normalization. A decent amount of math involved with this, but I’d say it works a lot better now.)"}, {"post_id": 17115, "ts": "2026-06-27T19:45:30Z", "hours": 10.2406, "text": "Finally reached a working version of Extinction, a lightweight AI content blocker extension that uses regex pattern matching and basic sentence analysis for detection (not LLM-based like almost every other AI detector, so it’s fully local). It’s definitely not foolproof, but it does a sufficiently decent job at detecting AI-generated articles despite its significant limitations. It also comes with a configurable exception list to exclude domains and pages from detections! (This is a project I’ve been working on for several months, but I’ve been making a lot more progress ever since Stardance began!)"}]...
|
Title: Extinction by @v81d | Stardance
Devlogs:
F Title: Extinction by @v81d | Stardance
Devlogs:
Finally reached a working version of Extinction, a lightweight AI content blocker extension that uses regex pattern matching and basic sentence analysis for detection (not LLM-based like almost every other AI detector, so it’s fully local). It’s definitely not foolproof, but it does a sufficiently decent job at detecting AI-generated articles despite its significant limitations. It also comes with a configurable exception list to exclude domains and pages from detections! (This is a project I’ve been working on for several months, but I’ve been making a lot more progress ever since Stardance began!)
Made a decent amount of changes today with Extinction’s classification algorithm and a few UI elements. Detections should be more accurate now with these new changes. (For those who want more detail: I added Type-Token Ratio calculations for determining lexical diversity along with better-tuned weights/constants. Also now using a sigmoid function for score normalization. A decent amount of math involved with this, but I’d say it works a lot better now.)
Added a “Suspicion threshold” option so anyone who uses Extinction can customize the detector’s aggressiveness. I also plan on making many of the other weights configurable as well in the near future!
Added even more fields to the parameter options! You can now edit the suspicion threshold along with some more sensitive options like the adjustment offset (basically the horizontal shift of the logistic function that is used to normalize the score). Also, while adding this, I realized I forgot to actually enforce the default value for all fields outside of just the options page. (Essentially, if you were to install the extension and never open the parameters tab, all the variables in there would default to null when it actually analyzes web pages.) Made sure to include a fix for that in these changes! I also learned a little more about sigmoid functions in general while trying to come up with a good enough caption for the new field, so that’s a nice bonus. Also had to add a little note at the top of the page because the defaults for these fields were not really chosen based on tested accuracy (they are simply based on my own observations of what seems to produce the most satisfactory results). By the way, I’d like to take some time to acknowledge the amazing feedback I got after my first ship! For Chrome users wanting justice after seeing that this extension is only published on AMO, I should mention that publishing to the Chrome Web Store requires a $5 fee, which I (unfortunately) cannot pay at this time. For now, Chrome/Safari users can stick to following the official build instructions listed in the README. In the future, I’ll also try to optimize Extinction’s detection system since I’m starting to feel like its status of being “lightweight” is slowly slipping away as I add new features. Anyway, thank you all for your wonderful comments, and I hope to fulfill as many of your suggestions as I can! :)
Expanded the options page even further! You can now basically customize every single parameter that Extinction’s underlying system uses. Funny thing, I actually caught two bugs when adding the signal calibrator and lexical diversity / burstiness weight fields. The first bug: the signal calibration math actually didn’t allow for decimal calibrators because it was doing plain exponentiation (meaning negative signals would fail in that step). To fix this, I added a very basic change that would simply preserve the sign of the signal during calibration. That way, negative signals stay negative and positive signals stay positive. The second bug: if both the lexical diversity weight AND the burstiness weight are 0, there would be a division-by-zero error when calculating fluency score (which is the value that represents how natural-sounding the text is). Pretty simple fix. I just added a check using a ternary operation.
Ships:
Extinction is an ultra-lightweight AI content blocker browser extension powered by regex-based pattern matching and linguistic analysis. But why block AI? Well, the answer is quite simple. The World Wide Web is becoming increasingly plagued with low-quality AI-generated content. The content AI produces is often misleading or blatantly incorrect. While some may not particularly see this is an issue, many people wish to escape from or completely hide such content. What makes Extinction any different? Traditional AI content detectors rely on machine learning and heavy analysis to product a result. Besides the irony of using such a mechanism, these AI detectors are often less trustworthy when it comes to respecting user privacy. Since the content is fed into an external API, users cannot reliably confirm that the data they send is kept confidential. Extinction, on the other hand, does not send any data to an external endpoint; all analyses are done locally, meaning there is no compromise in user privacy. It does not use machine-learning to classify text, but rather simple pattern matching with regular expressions (regexes) paired with sentence variation analyses. Keep in mind that Extinction is not (and will never be) 100% foolproof, as with all AI detectors in general. There will always be false positives and false negatives, but we will try our best to improve Extinction over time and make it as accurate as possible without sacrificing user privacy or Extinction’s quality of being lightweight. The extension comes with an exclusion list to prevent trusted sites from being flagged.
Extinction is now much more customizable with the newly added “Parameters” tab! The entire classification system has been reworked to be more memory-efficient and accurate in general, so Extinction should be able to block AI-generated articles much more effectively now. It was quite brain-damaging (to be honest) trying to figure out what changes I could possibly make to improve such a simple algorithm, but I ended up gaining a lot more knowledge about logistic functions (and sigmoids in general) and how useful math can be when making something like this. It was worth it. I also fixed several issues along the way while updating the options page. As I mentioned in my last devlog, there was a signal calibration logic error along with a potential division-by-zero error in calculating the fluency score of a text. Now with those pesky bugs out of the way, I can actually focus on improving the things that really matter for this project, such as keeping it fast and lightweight . Yes, the size of the package is really only around 100 KB (which is pretty lightweight), but some features still feel a little over-complicated. I enjoy looking at my code and feeling proud about all the new things I’ve learned, but, at the end of the day, the whole point of this extension is to tackle the problems most other AI detectors couldn’t: being easy on memory and all that. I do not plan on making Extinction ML-based. That defeats the whole purpose and will most certainly kill this experiment (or rather a proof-of-concept). That said, the main goal of the next ship will most likely be making some optimizations for both the UI and the detection system. As for this ship, most of the changes are related to the new options tab. To be fully transparent, the default values for these fields were NOT selected by a machine/algorithm, since that would probably hit the gray area of “machine learning.” All of the defaults were chosen by me, a real person! Since they are all based on observation rather than extreme experimentation (which I cannot carry out anyway), accuracy may vary depending on what you’re reading. If anyone happens to discover a better combination, feel free to let me know or make a pull request! Anyway, that wraps it up for my second ship. If you’d like to try out Extinction, you can install it officially from the Mozilla Add-ons store (if you’re on Firefox or a Firefox-based browser) OR build it from source using the GitHub repo. Unfortunately, Extinction will not be available on the Chrome Web Store because of the $5 registration fee (that I can’t pay right now). Things aren’t very appealing for Safari users either, since Apple places a $99/year registration fee (which is arguably a total rip-off that I’m not willing to give into at all). For now, Chrome and Safari users can stick to building and installing from source. Good news for Chrome users though: custom extensions don’t seem to be ephemeral or suddenly disappear the moment you exit the app, so once you’ve built it, you’ll be good until the next release. Thank you for checking out Extinction. I hope it’s as useful to you as it is to me! :)...
|
1793854171.508607
|
1793940571.508607
|
|
17688
|
VimoveAI by @ErtanBulutErdem | Stardance
|
ErtanBulutErdem
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: VimoveAI by @ErtanBulutErdem | Stardance
|
1793379036.621119
|
1793983836.621119
|
|
17689
|
My very own WebOS by @Maryy | Stardance
|
Maryy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Maryy | Stardance
|
1793299711.6542847
|
1793904511.6542847
|
|
17690
|
ISACU V0.0.1 by @ | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ISACU V0.0.1 by @ | Stardance
|
1793317689.1341052
|
1793922489.1341052
|
|
17691
|
MiniBot by @TanD | Stardance
|
TanD
|
0
|
8.48
|
0
|
[]
|
[{"post_id": 14885, "ts": "202 [{"post_id": 14885, "ts": "2026-06-24T05:20:21Z", "hours": 8.4808, "text": "Built a quick arduino bot! It has the bare minimum at the moment, with a cardboard chassis and unsoldered wiring. It’s the first arduino project that I worked on completely by myself, so I wanted to start off kind of basic. I’m planning on adding a pi 5 for object detection, so it can follow me around, and carry stuff I don’t want to. DEFINITELY need to work on it a lot more!"}]...
|
Title: MiniBot by @TanD | Stardance
Devlogs:
Buil Title: MiniBot by @TanD | Stardance
Devlogs:
Built a quick arduino bot! It has the bare minimum at the moment, with a cardboard chassis and unsoldered wiring. It’s the first arduino project that I worked on completely by myself, so I wanted to start off kind of basic. I’m planning on adding a pi 5 for object detection, so it can follow me around, and carry stuff I don’t want to. DEFINITELY need to work on it a lot more!...
|
1793868730.388567
|
1794473530.388567
|
|
17692
|
My very own WebOS by @torren | Stardance
|
torren
|
2
|
32.0
|
49
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T01:54:12Z", "hours": 15.0, "multiplier": 4.89, "payout": 49, "blessing": "neutral", "text": "so i built serenityos, a little web-based operating system that runs right in your browser. it’s got a desktop, draggable windows, a dock, and a bunch of mini apps — all vanilla html/css/js, no frameworks, no build step. for this mission i added 3 new features: browser — a mini web browser inside the os. type a url, hit go, it loads in a window. paint — a canvas you can actually draw on. pick a color, change the brush size, and save your doodle as a png. new animated ui — gave the whole thing a fresh look with real motion: headings that reveal word-by-word as you scroll and buttons that drift toward your cursor. what was challenging: doing the animations in plain javascript was the tricky part — no framer motion or gsap, so i had to hand-roll the word-by-word reveals with intersection observers and the magnetic buttons with pointer math. getting the paint canvas to map mouse coords correctly when the window resizes also took a few tries. what i’m proud of: how cohesive it all feels now — the landing page, the docs, and the desktop all look like one product. and the fact that it’s 100% vanilla js but still feels smooth and alive. how to test it: head to serenityux.vercel.app → hit launch os → then click around the dock. open browser and load a site, open paint and draw something, or mess with the calculator, notes, and timer. everything saves locally so your notes stick around when you come back.", "repo": "", "demo": ""}, {"ship_num": 2, "ts": "2026-06-14T17:27:46Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "SerenityOS is a fully functional web-based operating system with 9 interactive draggable windows (About, Projects, Portfolio, Contact, Notes, To-Do, Calculator, Timer, Messages) built entirely with vanilla JavaScript, zero dependencies, and achieving 90+ Lighthouse with <50KB bundle size. Building it required solving complex event propagation issues with button reliability, window positioning algorithms to prevent off-screen placement, and localStorage timing with the messages system—all demanding deep understanding of DOM lifecycle and JavaScript async behavior. I’m proud of proving you don’t need frameworks to build ambitious, polished applications while maintaining excellent performance and design. To test: visit https://serenityux.vercel.app , enter your name, launch, then try sending a message through Contact to see it appear in Messages app, add tasks to To-Do that persist on refresh, use the Calculator and Timer, drag windows around, and check your portfolio content. Everything works instantly with no installation required.", "repo": "", "demo": ""}]...
|
[{"post_id": 44953, "ts": "202 [{"post_id": 44953, "ts": "2026-08-11T01:51:51Z", "hours": 14.7233, "text": "been improving serenityos lately and honestly it’s in a way better place now. gave the whole thing a fresh look, clean type, calm colors, feels like one cohesive product from the landing all the way into the desktop. also shipped 3 new features: a browser you can actually surf in, a paint app for doodling (save as png too), and a new animated ui with word-by-word reveals and buttons that drift toward your cursor. cleaned up a bunch of old jank along the way. more soon :)"}, {"post_id": 8799, "ts": "2026-06-14T16:41:02Z", "hours": 0.6833, "text": "This session focused on polishing SerenityOS for production launch and fixing critical bugs that were blocking user-facing features. Started by diagnosing and fixing the messages system - the Contact form was saving messages to localStorage, but they weren’t displaying in the Messages app due to a DOM timing issue. Wrapped the contact handler in setTimeout to ensure proper initialization, and implemented a dynamic renderMessages() function that rebuilds the DOM on demand. Tested the full flow end-to-end: Contact form → localStorage → Messages app, confirming persistence and deletion both work. Next tackled calculator button overflow - buttons were massively oversized and breaking the window layout. Reduced padding from 10px to 6px, gap from 6px to 4px, and display font-size from 2em to 1.5em while adding min-width constraints. Buttons now fit perfectly within the window. Compacted the Projects app since it was taking up unnecessary vertical space - reduced font sizes, cut spacing between projects, and shortened descriptions so all five projects display without scrolling. Updated the README following professional shipping guidelines: punchy one-liner, prominent demo link, six specific features, technical depth explaining architecture, quick start in three lines, browser support, and creator info. No boilerplate or template text. Completely rewrote portfolio content across all apps (About, Projects, Portfolio) with real information: full bio, three-skill categories (technical, business, leadership), detailed project descriptions with achievements, and actual work experience. Discovered and fixed the most critical bug: window positioning logic was placing new windows off-screen or stacked too far right. Changed from 3-column to 2-column grid with viewport bounds checking, ensuring all apps stay visible. Tested all four previously-missing apps (To-Do, Calculator, Timer, Messages) - they now open and display correctly. Updated README screenshot reference, committed everything, and pushed to production. All 9 apps verified working, <50KB bundle maintained, 90+ Lighthouse score confirmed. SerenityOS is now feature-complete and deployment-ready."}, {"post_id": 8124, "ts": "2026-06-13T15:48:46Z", "hours": 1.3342, "text": "This session focused on crushing the last critical bugs that were holding back the messaging system and refining the overall UI. The main issue was that messages sent from the Contact form weren’t appearing in the Messages app - after investigation, we discovered a DOM timing issue where event listeners were being attached before elements were ready. We fixed this by wrapping the contact form handler in a setTimeout, ensuring proper initialization and allowing messages to persist reliably in localStorage and render dynamically with full delete functionality. Alongside this, we tackled the calculator button overflow problem that was making the app unusable on smaller screens. The buttons were massively oversized, so we reduced padding from 10px to 6px, gap from 6px to 4px, and display font-size from 2em to 1.5em while adding min-width constraints to prevent flex expansion. Finally, we compacted the Projects window since its content was taking up too much vertical space - we reduced overall font sizes, cut spacing from 16px to 10px between items, and shortened descriptions so all five projects now display without any scrolling needed. Everything is now working smoothly: the message system is bulletproof, calculator buttons fit perfectly, and all windows are properly optimized. The bundle remains under 50KB, localStorage operations are instant, and the entire OS feels polished and professional. We’ve got all eight apps functioning, draggable/resizable windows with proper layering, persistent data storage, a real-time system clock, and smooth animations throughout—SerenityOS is now feature-complete and ready for use."}, {"post_id": 7857, "ts": "2026-06-13T03:12:50Z", "hours": 1.1425, "text": "Fixed critical bugs preventing windows from displaying on the OS desktop - the issue was the container wasn’t filling the viewport properly. Updated CSS to set 100vw × 100vh with fixed positioning, which immediately resolved the problem. Also implemented smart window positioning using a grid algorithm to prevent overlap, and added auto-opening About & Projects windows on startup so the desktop doesn’t look empty. Tested all functionality and deployed. 50 minutes of focused debugging and UX improvements."}, {"post_id": 7785, "ts": "2026-06-13T00:20:03Z", "hours": 13.7236, "text": "Built the SerenityUX Web-based OS project: Part 1: Welcome screen with animations Parts 2-3: Desktop with draggable windows Currently working on Part 4: Creating apps"}]...
|
Title: My very own WebOS by @torren | Stardance
D Title: My very own WebOS by @torren | Stardance
Devlogs:
Built the SerenityUX Web-based OS project: Part 1: Welcome screen with animations Parts 2-3: Desktop with draggable windows Currently working on Part 4: Creating apps
Fixed critical bugs preventing windows from displaying on the OS desktop - the issue was the container wasn’t filling the viewport properly. Updated CSS to set 100vw × 100vh with fixed positioning, which immediately resolved the problem. Also implemented smart window positioning using a grid algorithm to prevent overlap, and added auto-opening About & Projects windows on startup so the desktop doesn’t look empty. Tested all functionality and deployed. 50 minutes of focused debugging and UX improvements.
This session focused on crushing the last critical bugs that were holding back the messaging system and refining the overall UI. The main issue was that messages sent from the Contact form weren’t appearing in the Messages app - after investigation, we discovered a DOM timing issue where event listeners were being attached before elements were ready. We fixed this by wrapping the contact form handler in a setTimeout, ensuring proper initialization and allowing messages to persist reliably in localStorage and render dynamically with full delete functionality. Alongside this, we tackled the calculator button overflow problem that was making the app unusable on smaller screens. The buttons were massively oversized, so we reduced padding from 10px to 6px, gap from 6px to 4px, and display font-size from 2em to 1.5em while adding min-width constraints to prevent flex expansion. Finally, we compacted the Projects window since its content was taking up too much vertical space - we reduced overall font sizes, cut spacing from 16px to 10px between items, and shortened descriptions so all five projects now display without any scrolling needed. Everything is now working smoothly: the message system is bulletproof, calculator buttons fit perfectly, and all windows are properly optimized. The bundle remains under 50KB, localStorage operations are instant, and the entire OS feels polished and professional. We’ve got all eight apps functioning, draggable/resizable windows with proper layering, persistent data storage, a real-time system clock, and smooth animations throughout—SerenityOS is now feature-complete and ready for use.
This session focused on polishing SerenityOS for production launch and fixing critical bugs that were blocking user-facing features. Started by diagnosing and fixing the messages system - the Contact form was saving messages to localStorage, but they weren’t displaying in the Messages app due to a DOM timing issue. Wrapped the contact handler in setTimeout to ensure proper initialization, and implemented a dynamic renderMessages() function that rebuilds the DOM on demand. Tested the full flow end-to-end: Contact form → localStorage → Messages app, confirming persistence and deletion both work. Next tackled calculator button overflow - buttons were massively oversized and breaking the window layout. Reduced padding from 10px to 6px, gap from 6px to 4px, and display font-size from 2em to 1.5em while adding min-width constraints. Buttons now fit perfectly within the window. Compacted the Projects app since it was taking up unnecessary vertical space - reduced font sizes, cut spacing between projects, and shortened descriptions so all five projects display without scrolling. Updated the README following professional shipping guidelines: punchy one-liner, prominent demo link, six specific features, technical depth explaining architecture, quick start in three lines, browser support, and creator info. No boilerplate or template text. Completely rewrote portfolio content across all apps (About, Projects, Portfolio) with real information: full bio, three-skill categories (technical, business, leadership), detailed project descriptions with achievements, and actual work experience. Discovered and fixed the most critical bug: window positioning logic was placing new windows off-screen or stacked too far right. Changed from 3-column to 2-column grid with viewport bounds checking, ensuring all apps stay visible. Tested all four previously-missing apps (To-Do, Calculator, Timer, Messages) - they now open and display correctly. Updated README screenshot reference, committed everything, and pushed to production. All 9 apps verified working, <50KB bundle maintained, 90+ Lighthouse score confirmed. SerenityOS is now feature-complete and deployment-ready.
been improving serenityos lately and honestly it’s in a way better place now. gave the whole thing a fresh look, clean type, calm colors, feels like one cohesive product from the landing all the way into the desktop. also shipped 3 new features: a browser you can actually surf in, a paint app for doodling (save as png too), and a new animated ui with word-by-word reveals and buttons that drift toward your cursor. cleaned up a bunch of old jank along the way. more soon :)
Ships:
SerenityOS is a fully functional web-based operating system with 9 interactive draggable windows (About, Projects, Portfolio, Contact, Notes, To-Do, Calculator, Timer, Messages) built entirely with vanilla JavaScript, zero dependencies, and achieving 90+ Lighthouse with <50KB bundle size. Building it required solving complex event propagation issues with button reliability, window positioning algorithms to prevent off-screen placement, and localStorage timing with the messages system—all demanding deep understanding of DOM lifecycle and JavaScript async behavior. I’m proud of proving you don’t need frameworks to build ambitious, polished applications while maintaining excellent performance and design. To test: visit https://serenityux.vercel.app , enter your name, launch, then try sending a message through Contact to see it appear in Messages app, add tasks to To-Do that persist on refresh, use the Calculator and Timer, drag windows around, and check your portfolio content. Everything works instantly with no installation required.
so i built serenityos, a little web-based operating system that runs right in your browser. it’s got a desktop, draggable windows, a dock, and a bunch of mini apps — all vanilla html/css/js, no frameworks, no build step. for this mission i added 3 new features: browser — a mini web browser inside the os. type a url, hit go, it loads in a window. paint — a canvas you can actually draw on. pick a color, change the brush size, and save your doodle as a png. new animated ui — gave the whole thing a fresh look with real motion: headings that reveal word-by-word as you scroll and buttons that drift toward your cursor. what was challenging: doing the animations in plain javascript was the tricky part — no framer motion or gsap, so i had to hand-roll the word-by-word reveals with intersection observers and the magnetic buttons with pointer math. getting the paint canvas to map mouse coords correctly when the window resizes also took a few tries. what i’m proud of: how cohesive it all feels now — the landing page, the docs, and the desktop all look like one product. and the fact that it’s 100% vanilla js but still feels smooth and alive. how to test it: head to serenityux.vercel.app → hit launch os → then click around the dock. open browser and load a site, open paint and draw something, or mess with the calculator, notes, and timer. everything saves locally so your notes stick around when you come back....
|
1793728431.9131649
|
1793814831.9131649
|
|
17693
|
Untitled project by @Prathyana | Stardance
|
Prathyana
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Prathyana | Stardance
|
1793404361.4875104
|
1794009161.4875104
|
|
17694
|
Code Grabber by @theEclipse | Stardance
|
theEclipse
|
1
|
2.41
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T21:06:44Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Code Grabber, a Chrome extension that connects to your Gmail and watches for verification codes. When it finds one, a small popup appears on whatever site you’re on, letting you fill it in with the push of a button, no Ctrl-Tabbing needed. The hardest part was making the fill work properly, since some sites are built with React and Vue, and they ignore a simple value change and need the right native input events fired to register it. I’m most proud of the fact that nothing ever happens automatically — the extension only has read-only Gmail access, and every code fill requires the user to say yes to the fill. To test it, download the zip from the website, load it unpacked via chrome://extensions with Developer Mode on, set up a free Google Cloud OAuth Client ID, which can be a bit tricky, but just follow the instructions on the website or README and you should be fine. Then simply connect your Gmail via the toolbar, and the extension will start working. One thing to note is that the extension only checks every minute, but I added a button where you can instantly check for a code in your inbox.", "repo": "https://github.com/TheEclipse1/Code-Grabber", "demo": "https://github.com/TheEclipse1/Code-Grabber/releases/tag/v1.0.0"}]...
|
[{"post_id": 11775, "ts": "202 [{"post_id": 11775, "ts": "2026-06-19T05:01:17Z", "hours": 1.4083, "text": "Google Chrome Support"}, {"post_id": 7906, "ts": "2026-06-13T05:55:23Z", "hours": 1.4508, "text": "Gmail support"}]...
|
Title: Code Grabber by @theEclipse | Stardance
De Title: Code Grabber by @theEclipse | Stardance
Devlogs:
Gmail support
Google Chrome Support
Ships:
I built Code Grabber, a Chrome extension that connects to your Gmail and watches for verification codes. When it finds one, a small popup appears on whatever site you’re on, letting you fill it in with the push of a button, no Ctrl-Tabbing needed. The hardest part was making the fill work properly, since some sites are built with React and Vue, and they ignore a simple value change and need the right native input events fired to register it. I’m most proud of the fact that nothing ever happens automatically — the extension only has read-only Gmail access, and every code fill requires the user to say yes to the fill. To test it, download the zip from the website, load it unpacked via chrome://extensions with Developer Mode on, set up a free Google Cloud OAuth Client ID, which can be a bit tricky, but just follow the instructions on the website or README and you should be fine. Then simply connect your Gmail via the toolbar, and the extension will start working. One thing to note is that the extension only checks every minute, but I added a button where you can instantly check for a code in your inbox....
|
1793775372.150765
|
1793861772.150765
|
|
17695
|
Bomber Rush by @Riptide | Stardance
|
Riptide
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Bomber Rush by @Riptide | Stardance
|
1793418836.7889686
|
1794023636.7889686
|
|
17696
|
My first slack bot! by @Rishikh | Stardance
|
Rishikh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Rishikh | Stardance
|
1793436660.0265276
|
1794041460.0265276
|
|
17697
|
Untitled by @Prathyana | Stardance
|
Prathyana
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Prathyana | Stardance
|
1793299838.4710226
|
1793904638.4710226
|
|
17698
|
BirdHouses by @sukiwyatt | Stardance
|
sukiwyatt
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BirdHouses by @sukiwyatt | Stardance
|
1793206625.4152787
|
1793811425.4152787
|
|
17699
|
My awesome macropad! by @aadjotsidhu | Stardance
|
aadjotsidhu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @aadjotsidhu | Star Title: My awesome macropad! by @aadjotsidhu | Stardance...
|
1793508956.886864
|
1794113756.886864
|
|
17700
|
FlashPoint by @zakkbob | Stardance
|
zakkbob
|
0
|
34.95
|
0
|
[]
|
[{"post_id": 24285, "ts": "202 [{"post_id": 24285, "ts": "2026-07-07T19:05:09Z", "hours": 6.2364, "text": "Split app into distinct parts I have split the app into four parts - decks, review, sync, settings. Decks Currently just shows an ‘open’ button to review cards. Will eventually show a navigable deck tree. Review For reviewing due cards. Sync Syncs with Anki desktop. Settings Settings and stuff… (haven’t decided yet)"}, {"post_id": 18401, "ts": "2026-06-29T15:17:52Z", "hours": 0.9689, "text": "Basic anki sync achieved! Cards are now downloaded from Anki on my laptop when the app is opened and loaded into memory for review. How I achieved this I am running an anki plugin on my laptop called anki-connect which provides a REST API for interacting with cards, decks, notes etc… The process looks like this: Retrieve deck names For each deck, retrieve card IDs Retrieve each card by ID Attached is a video showing 3 cards being synced. Issues to be addressed in future Each card is retrieved with an independent API request even though its possible to retrieve them in bulk Why: My current implementation loads the entire response body into memory at once then deserialises it. Each card in the response is roughly 1KB, so loading many at once would require more memory than the ESP32 has. Fix: Implement a streaming approach instead where cards are saved to the SD card as they are received, reducing memory usage. Cards are lost when the app is exited Why: I wanted a quick CardStore implementation to test the sync with so cards are only stored in memory. Fix: Implement a CardStore which saves them to the SD Card"}, {"post_id": 18312, "ts": "2026-06-29T12:47:23Z", "hours": 9.3814, "text": "Trying to get anki integration working Currently trying to get the XTeink to load cards from my laptop through the anki-connect plugin’s api. Here’s a screenshot of the log from it attempting to load the decks and cards. Sadly it crashed right after so I’m still working on that. After I get this working I can start working on storing the cards so they can be reviewed offline."}, {"post_id": 16422, "ts": "2026-06-26T18:32:47Z", "hours": 2.2381, "text": "Purged SQLite from the code and implemented an in-memory store instead I’ve made an interface called CardStore so I can implement multiple ways of storing cards. In future, I might use this to benchmark and compare different methods but for now I’m using an in-memory store so I can quickly test things out. I’ve made a plan for the persistent card storage, but I’ll get to that later. For now I’m going to work on the initial sync with Anki. This will be much easier than the partial sync (where cards have been added, edited, removed, and reviewed)."}, {"post_id": 15716, "ts": "2026-06-25T15:54:18Z", "hours": 0.8769, "text": "My 4 yr old brother helped design a new logo I was trying to design an icon for the flashcard app when he came over and asked if he could help. He says it’s a ‘super cool rocket block smiley face’."}, {"post_id": 15189, "ts": "2026-06-24T18:06:44Z", "hours": 10.0975, "text": "Went on a massive detour trying to get SQLite onto the ESP32 Anki allows you to export all your cards into a single .apkg file, which is essentially a zip file containing media files along with Anki’s SQLite database. I want it to be possible to import apkg files directly into flashpoint so I figured if I could get SQLite working on the XTeink X4 directly then this would be easy. Issue #1 - I have no idea what I’m doing I have never used PlatformIO before, so I wasn’t sure how to actually include libraries. Initially, I tried just adding #include <sqlite.h> where I needed it, but this failed to build so I installed SQLite onto my laptop which didn’t work either. I discovered that since the XTeink X4 uses an ESP32 I needed specific libraries for it — I found siara-cc/Sqlite3Esp32 and added it to the dependencies section in platformio.ini (PlatformIO’s config file). This brings us to Issue #2. Issue #2 - The ESP32 is so small! The ESP32 only has 16MiB of flash memory. This is enough to store around 48 novels, 4 photos, or 1/20th of a YouTube video*. This memory is typically used to store configuration, assets, and firmware. Here is the partition scheme used in CrossInk (the project I forked). # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, # 20KiB - For settings, like the WiFi password otadata, data, ota, 0xe000, 0x2000, # 8KiB - Tracks OTA update progress app0, app, ota_0, 0x10000, 0x640000, # 6.25MiB - First firmware partition app1, app, ota_1, 0x650000,0x640000, # 6.25MiB - Second firmware partition spiffs, data, spiffs, 0xc90000,0x360000, # 3.375MiB - Filesystem for assets, such as those in the webserver coredump, data, coredump,0xFF0000,0x10000, # 64KiB - Crash reports for debugging Overall, this reduces the space actually available for the firmware down to 6.25MiB. SQLite adds roughly 470KiB to the firmware image, bringing it beyond the 6.25MiB partition limit. To solve this I shrunk the spiffs partition, which allowed me to expand app0 and app1 to 7MiB and build an image with SQLite. However, I realised that I still couldn’t use SQLite yet. Issue #3 - SQLite doesn’t understand the filesystem I’m using Under many abstractions, it seems that CrossInk uses SdFat to manage the filesystem, rather than the simpler SD library. As I understand it, this means that files cannot be accessed using stdio.h commands like fopen() and instead must be accessed through the SdFat library. This means that for SQLite to work I would need to write a sort of ‘translation’ class which maps SQLite’s desired filesystem actions onto SdFat methods. This is called a VFS (Virtual File System), and looks very tedious to implement. In a last ditch effort, I tried to use the SD library and SdFat library simultaneously, which resulted in the whole device crashing whenever I opened my flashcards (pictured below) - this is not very useful. I’m sure I’m misunderstanding something and there’s probably an easier solution which works, but I’ve decided to try a different approach instead. A different Approach CrossInk already persists structured data in many places. For example, bookmarks appear to be stored in a binary file format using some sort of serialisation utility. I’ll look into this and probably implement my own storage solution which only stores the data I need rather than using an entire SQLite database. In hindsight, SQLite was probably the wrong decision, but it led me to better understand PlatformIO, ESP32 partition tables, and CrossInk’s storage architecture. Notes Rough calculations: 75,000 word novels, 4.7 characters per word, one-byte characters 4MiB photos 10-minute 720p video, which is around 332MB according to this website"}, {"post_id": 8291, "ts": "2026-06-13T19:44:07Z", "hours": 2.8533, "text": "Created a card review screen You can now review cards! Well, technically there’s only one to review, but it’s a great card."}, {"post_id": 8080, "ts": "2026-06-13T14:20:47Z", "hours": 1.2139, "text": "Implemented a placeholder screen The button now takes you somewhere, but nothing much happens yet."}, {"post_id": 8045, "ts": "2026-06-13T12:46:25Z", "hours": 1.0808, "text": "We have a menu button! I figured out how to add a button to the main menu (I designed a little icon for it too). Next, I’m going to make it do something. I’m new to embedded development so I’m still trying to get my head around the build process as well as how CrossPoint is structured"}]...
|
Title: FlashPoint by @zakkbob | Stardance
Devlogs Title: FlashPoint by @zakkbob | Stardance
Devlogs:
We have a menu button! I figured out how to add a button to the main menu (I designed a little icon for it too). Next, I’m going to make it do something. I’m new to embedded development so I’m still trying to get my head around the build process as well as how CrossPoint is structured
Implemented a placeholder screen The button now takes you somewhere, but nothing much happens yet.
Created a card review screen You can now review cards! Well, technically there’s only one to review, but it’s a great card.
Went on a massive detour trying to get SQLite onto the ESP32 Anki allows you to export all your cards into a single .apkg file, which is essentially a zip file containing media files along with Anki’s SQLite database. I want it to be possible to import apkg files directly into flashpoint so I figured if I could get SQLite working on the XTeink X4 directly then this would be easy. Issue #1 - I have no idea what I’m doing I have never used PlatformIO before, so I wasn’t sure how to actually include libraries. Initially, I tried just adding #include <sqlite.h> where I needed it, but this failed to build so I installed SQLite onto my laptop which didn’t work either. I discovered that since the XTeink X4 uses an ESP32 I needed specific libraries for it — I found siara-cc/Sqlite3Esp32 and added it to the dependencies section in platformio.ini (PlatformIO’s config file). This brings us to Issue #2. Issue #2 - The ESP32 is so small! The ESP32 only has 16MiB of flash memory. This is enough to store around 48 novels, 4 photos, or 1/20th of a YouTube video*. This memory is typically used to store configuration, assets, and firmware. Here is the partition scheme used in CrossInk (the project I forked). # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, # 20KiB - For settings, like the WiFi password otadata, data, ota, 0xe000, 0x2000, # 8KiB - Tracks OTA update progress app0, app, ota_0, 0x10000, 0x640000, # 6.25MiB - First firmware partition app1, app, ota_1, 0x650000,0x640000, # 6.25MiB - Second firmware partition spiffs, data, spiffs, 0xc90000,0x360000, # 3.375MiB - Filesystem for assets, such as those in the webserver coredump, data, coredump,0xFF0000,0x10000, # 64KiB - Crash reports for debugging Overall, this reduces the space actually available for the firmware down to 6.25MiB. SQLite adds roughly 470KiB to the firmware image, bringing it beyond the 6.25MiB partition limit. To solve this I shrunk the spiffs partition, which allowed me to expand app0 and app1 to 7MiB and build an image with SQLite. However, I realised that I still couldn’t use SQLite yet. Issue #3 - SQLite doesn’t understand the filesystem I’m using Under many abstractions, it seems that CrossInk uses SdFat to manage the filesystem, rather than the simpler SD library. As I understand it, this means that files cannot be accessed using stdio.h commands like fopen() and instead must be accessed through the SdFat library. This means that for SQLite to work I would need to write a sort of ‘translation’ class which maps SQLite’s desired filesystem actions onto SdFat methods. This is called a VFS (Virtual File System), and looks very tedious to implement. In a last ditch effort, I tried to use the SD library and SdFat library simultaneously, which resulted in the whole device crashing whenever I opened my flashcards (pictured below) - this is not very useful. I’m sure I’m misunderstanding something and there’s probably an easier solution which works, but I’ve decided to try a different approach instead. A different Approach CrossInk already persists structured data in many places. For example, bookmarks appear to be stored in a binary file format using some sort of serialisation utility. I’ll look into this and probably implement my own storage solution which only stores the data I need rather than using an entire SQLite database. In hindsight, SQLite was probably the wrong decision, but it led me to better understand PlatformIO, ESP32 partition tables, and CrossInk’s storage architecture. Notes Rough calculations: 75,000 word novels, 4.7 characters per word, one-byte characters 4MiB photos 10-minute 720p video, which is around 332MB according to this website
My 4 yr old brother helped design a new logo I was trying to design an icon for the flashcard app when he came over and asked if he could help. He says it’s a ‘super cool rocket block smiley face’.
Purged SQLite from the code and implemented an in-memory store instead I’ve made an interface called CardStore so I can implement multiple ways of storing cards. In future, I might use this to benchmark and compare different methods but for now I’m using an in-memory store so I can quickly test things out. I’ve made a plan for the persistent card storage, but I’ll get to that later. For now I’m going to work on the initial sync with Anki. This will be much easier than the partial sync (where cards have been added, edited, removed, and reviewed).
Trying to get anki integration working Currently trying to get the XTeink to load cards from my laptop through the anki-connect plugin’s api. Here’s a screenshot of the log from it attempting to load the decks and cards. Sadly it crashed right after so I’m still working on that. After I get this working I can start working on storing the cards so they can be reviewed offline.
Basic anki sync achieved! Cards are now downloaded from Anki on my laptop when the app is opened and loaded into memory for review. How I achieved this I am running an anki plugin on my laptop called anki-connect which provides a REST API for interacting with cards, decks, notes etc… The process looks like this: Retrieve deck names For each deck, retrieve card IDs Retrieve each card by ID Attached is a video showing 3 cards being synced. Issues to be addressed in future Each card is retrieved with an independent API request even though its possible to retrieve them in bulk Why: My current implementation loads the entire response body into memory at once then deserialises it. Each card in the response is roughly 1KB, so loading many at once would require more memory than the ESP32 has. Fix: Implement a streaming approach instead where cards are saved to the SD card as they are received, reducing memory usage. Cards are lost when the app is exited Why: I wanted a quick CardStore implementation to test the sync with so cards are only stored in memory. Fix: Implement a CardStore which saves them to the SD Card
Split app into distinct parts I have split the app into four parts - decks, review, sync, settings. Decks Currently just shows an ‘open’ button to review cards. Will eventually show a navigable deck tree. Review For reviewing due cards. Sync Syncs with Anki desktop. Settings Settings and stuff… (haven’t decided yet)...
|
1793551817.4128115
|
1794156617.4128115
|