|
69093
|
ProblemLab by @pengpengjin1 | Stardance
|
pengpengjin1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ProblemLab by @pengpengjin1 | Stardance
|
1793472516.2329626
|
1794336516.2329626
|
|
69092
|
My own site! by @hanistan | Stardance
|
hanistan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @hanistan | Stardance
|
1793760555.3583024
|
1794365355.3583024
|
|
69091
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793764341.3195128
|
1794628341.3195128
|
|
69090
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793764339.562689
|
1794628339.562689
|
|
69089
|
kitai by @myreester | Stardance
|
myreester
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: kitai by @myreester | Stardance
|
1793760551.052362
|
1794365351.052362
|
|
69088
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793764338.6865585
|
1794628338.6865585
|
|
69087
|
ChoreBoard by @simonhacker | Stardance
|
simonhacker
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ChoreBoard by @simonhacker | Stardance
|
1793760550.1751685
|
1794365350.1751685
|
|
69086
|
My own site! by @tyreke | Stardance
|
tyreke
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @tyreke | Stardance
|
1793760549.3019307
|
1794365349.3019307
|
|
69085
|
Light In Night by @Arnav_Borude | Stardance
|
Arnav_Borude
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Light In Night by @Arnav_Borude | Stardance
|
1793760546.7373438
|
1794365346.7373438
|
|
69084
|
My first slack bot! by @Gabrielle | Stardance
|
Gabrielle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Gabrielle | Stardan Title: My first slack bot! by @Gabrielle | Stardance...
|
1793760545.024723
|
1794365345.024723
|
|
69083
|
My awesome macropad! by @avab | Stardance
|
avab
|
0
|
0.52
|
0
|
[]
|
[{"post_id": 78865, "ts": "202 [{"post_id": 78865, "ts": "2026-10-11T20:08:11Z", "hours": 0.515, "text": "Downloaded KiCad, followed the Hackpad guide to draw the schematic and route the PCB."}]...
|
Title: My awesome macropad! by @avab | Stardance
Title: My awesome macropad! by @avab | Stardance
Devlogs:
Downloaded KiCad, followed the Hackpad guide to draw the schematic and route the PCB....
|
1793760542.4412534
|
1794365342.4412534
|
|
69082
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793764337.8332725
|
1794628337.8332725
|
|
69081
|
Catputer AI by @ethandacat | Stardance
|
ethandacat
|
0
|
1.06
|
0
|
[]
|
[{"post_id": 78645, "ts": "202 [{"post_id": 78645, "ts": "2026-10-11T05:02:34Z", "hours": 1.0575, "text": "Added more AI providers, added fun UI for fun ig uhh yeah also you get to see a cat stuffie happi happi happi"}]...
|
Title: Catputer AI by @ethandacat | Stardance
Dev Title: Catputer AI by @ethandacat | Stardance
Devlogs:
Added more AI providers, added fun UI for fun ig uhh yeah also you get to see a cat stuffie happi happi happi...
|
1793760538.089017
|
1794365338.089017
|
|
69080
|
Questions by @syedakhter | Stardance
|
syedakhter
|
1
|
2.0
|
1
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T01:49:03Z", "hours": 2.0, "multiplier": 1.0, "payout": 1, "blessing": "neutral", "text": "This projects name is questions it has questions about math Ela and some general questions", "repo": "https://github.com/8051987-eng/-Questions", "demo": "https://8051987-eng.github.io/-Questions/"}]...
|
[{"post_id": 78515, "ts": "202 [{"post_id": 78515, "ts": "2026-10-11T01:47:37Z", "hours": 2.3153, "text": "Questions amth ela and general"}]...
|
Title: Questions by @syedakhter | Stardance
Devlo Title: Questions by @syedakhter | Stardance
Devlogs:
Questions amth ela and general
Ships:
This projects name is questions it has questions about math Ela and some general questions...
|
1793688665.042337
|
1793775065.042337
|
|
69079
|
Capybara Fact Nerd by @blairchen387 | Stardance
|
blairchen387
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Capybara Fact Nerd by @blairchen387 | Stard Title: Capybara Fact Nerd by @blairchen387 | Stardance...
|
1793472494.1042998
|
1794336494.1042998
|
|
69078
|
Random Password Generator by @KevinW | Stardance
|
KevinW
|
1
|
11.0
|
62
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T01:47:52Z", "hours": 11.0, "multiplier": 6.19, "payout": 62, "blessing": "neutral", "text": "I learned how to use HTML, JavaScript, and CSS to create a random password generator. I learned how to generate random passwords and use different settings tocustomize them. For me, the most challenging was using Javascript to make random passswords and making sure the code worked correctly. Connecting the HTML, CSS, and javascript together was also a challenge. I am proud that I created a random password generator from scratch considering this was my very first project. People should open the project in a web browser and try generating passwords using the different settings I created. They can change the password length, select which types of characters to include, and generate multiple passwords to see how it changes.", "repo": "https://github.com/wujunfan0/Password-Generator", "demo": "https://wujunfan0.github.io/Password-Generator/"}]...
|
[{"post_id": 78510, "ts": "202 [{"post_id": 78510, "ts": "2026-10-11T01:29:44Z", "hours": 10.5742, "text": "I just finished creating my very first website using HTML, Javascript, and CSS. I wanted to learn how to make something that is useful and practical so I decided to create a random password generator as I always have trouble thinking of passwords. This is my first webpage and I made it through countless hours of trial and error. Because of helpful articles and tutorials online, I was able to successfully complete this project. When you enter the webpage, you are met with a box in the middle of the screen displaying various different selections as well as a password strength bar. You are able to check off elements that you want the password generator to include as well as adjusting the length of it. Below the password, there is a password strength bar that automatically adjusts the level of strength it determines for your password corresponding to the length."}]...
|
Title: Random Password Generator by @KevinW | Star Title: Random Password Generator by @KevinW | Stardance
Devlogs:
I just finished creating my very first website using HTML, Javascript, and CSS. I wanted to learn how to make something that is useful and practical so I decided to create a random password generator as I always have trouble thinking of passwords. This is my first webpage and I made it through countless hours of trial and error. Because of helpful articles and tutorials online, I was able to successfully complete this project. When you enter the webpage, you are met with a box in the middle of the screen displaying various different selections as well as a password strength bar. You are able to check off elements that you want the password generator to include as well as adjusting the length of it. Below the password, there is a password strength bar that automatically adjusts the level of strength it determines for your password corresponding to the length.
Ships:
I learned how to use HTML, JavaScript, and CSS to create a random password generator. I learned how to generate random passwords and use different settings tocustomize them. For me, the most challenging was using Javascript to make random passswords and making sure the code worked correctly. Connecting the HTML, CSS, and javascript together was also a challenge. I am proud that I created a random password generator from scratch considering this was my very first project. People should open the project in a web browser and try generating passwords using the different settings I created. They can change the password length, select which types of characters to include, and generate multiple passwords to see how it changes....
|
1793008390.061616
|
1793872390.061616
|
|
69077
|
PADD by @Aayan_Fardin | Stardance
|
Aayan_Fardin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: PADD by @Aayan_Fardin | Stardance
|
1793760528.7894018
|
1794365328.7894018
|
|
69076
|
My awesome macropad! by @AlexandervanZyl1701D | St My awesome macropad! by @AlexandervanZyl1701D | Stardance...
|
AlexandervanZyl1701D
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @AlexandervanZyl170 Title: My awesome macropad! by @AlexandervanZyl1701D | Stardance...
|
1793760522.8018732
|
1794365322.8018732
|
|
69075
|
Alarm Clockx by @Aayan_Fardin | Stardance
|
Aayan_Fardin
|
0
|
8.9
|
0
|
[]
|
[{"post_id": 86180, "ts": "202 [{"post_id": 86180, "ts": "2026-11-01T03:37:33Z", "hours": 8.8972, "text": "This was my first time using KiCad. I had used EasyEDA once before, so I had a little experience. After opening KiCad, I downloaded the XIAO ESP32C3 symbol and footprint. But I couldn’t understand how to give it a label. I was like, wait, what!! What is meant by name and attach? Finally, I figured out that it basically means to write it out and just attach it. But you have to rename the files after unzipping the schematic symbol and footprint. Anyways, the rest of the connections were easy for me because my previous experience with EasyEDA helped me a lot. Then, after some time, I realized that I GOTTA MAKE A CHANGE. But just then, an idea came to my mind: I could just attach a battery. YEAA. But which battery? I spent some time researching which battery would be good and came up with a single 18650 Li-ion battery. The reason I chose a single battery was that I saw that two 18650 batteries output nearly 7.5V, which might mean I would need another buck converter to step down the voltage. And I didn’t want that. But a single battery outputs nearly 4.5V, which I guess is enough to power up the ESP32 and my clock. Then I added a 01x02 connector for the battery case. And here, 01 means 1 row and 02 means 2 pins in one row. And now I have to add my footprints. AND HERE is the main problem I faced. I didn’t know how to add footprints in KiCad. In EasyEDA, most of the footprints are already linked to the symbols, so I could directly move to the PCB layout. But then I clicked somewhere, and it showed me my footprint, as you can see. At first, I was like, “Wait, I can see the footprint, BUT WHERE IS THE BUTTON FOR ADDING THIS FOOTPRINT TO THE SYMBOL!!” Then, after some time, I went to YouTube and searched for it. Finally, I understood how to add it. Then I added my footprints, and one thing I realized is that KiCad footprints are WAY MORE detailed than EASYEDA’s. It’s late at night now. And finally, the weekend has started, and my homework is almost finished. Now I sat down to continue my work. SO I just realized that my PCB layout seems a bit big, as you can see. So I decided to make it smaller because then it will fit into the body more easily. But again, I gotta wire some of the lines. Then came the Most challenging part, the cad. And I didn’t even made one. so I first downloaded a stl file for a display from google and uploaded it into assembly then I aligned them. AFter so many trial and error, I FINALLY made THE CAD. LET’s GOO. And after that the firmware comes. But since i didn’t had much time I just managed to display the time and wait not only that, also I made custom BUZZER SOUND. Its like you add frequency and which results in different sounds"}]...
|
Title: Alarm Clockx by @Aayan_Fardin | Stardance
Title: Alarm Clockx by @Aayan_Fardin | Stardance
Devlogs:
This was my first time using KiCad. I had used EasyEDA once before, so I had a little experience. After opening KiCad, I downloaded the XIAO ESP32C3 symbol and footprint. But I couldn’t understand how to give it a label. I was like, wait, what!! What is meant by name and attach? Finally, I figured out that it basically means to write it out and just attach it. But you have to rename the files after unzipping the schematic symbol and footprint. Anyways, the rest of the connections were easy for me because my previous experience with EasyEDA helped me a lot. Then, after some time, I realized that I GOTTA MAKE A CHANGE. But just then, an idea came to my mind: I could just attach a battery. YEAA. But which battery? I spent some time researching which battery would be good and came up with a single 18650 Li-ion battery. The reason I chose a single battery was that I saw that two 18650 batteries output nearly 7.5V, which might mean I would need another buck converter to step down the voltage. And I didn’t want that. But a single battery outputs nearly 4.5V, which I guess is enough to power up the ESP32 and my clock. Then I added a 01x02 connector for the battery case. And here, 01 means 1 row and 02 means 2 pins in one row. And now I have to add my footprints. AND HERE is the main problem I faced. I didn’t know how to add footprints in KiCad. In EasyEDA, most of the footprints are already linked to the symbols, so I could directly move to the PCB layout. But then I clicked somewhere, and it showed me my footprint, as you can see. At first, I was like, “Wait, I can see the footprint, BUT WHERE IS THE BUTTON FOR ADDING THIS FOOTPRINT TO THE SYMBOL!!” Then, after some time, I went to YouTube and searched for it. Finally, I understood how to add it. Then I added my footprints, and one thing I realized is that KiCad footprints are WAY MORE detailed than EASYEDA’s. It’s late at night now. And finally, the weekend has started, and my homework is almost finished. Now I sat down to continue my work. SO I just realized that my PCB layout seems a bit big, as you can see. So I decided to make it smaller because then it will fit into the body more easily. But again, I gotta wire some of the lines. Then came the Most challenging part, the cad. And I didn’t even made one. so I first downloaded a stl file for a display from google and uploaded it into assembly then I aligned them. AFter so many trial and error, I FINALLY made THE CAD. LET’s GOO. And after that the firmware comes. But since i didn’t had much time I just managed to display the time and wait not only that, also I made custom BUZZER SOUND. Its like you add frequency and which results in different sounds...
|
1793760512.7990615
|
1794365312.7990615
|
|
69074
|
the Cheet Sheet by @wxie223 | Stardance
|
wxie223
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: the Cheet Sheet by @wxie223 | Stardance
|
1793472481.9707868
|
1794336481.9707868
|
|
69073
|
My own site! by @acharava000 | Stardance
|
acharava000
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @acharava000 | Stardance
|
1793760509.3564873
|
1794365309.3564873
|
|
69072
|
My very own WebOS by @tetsu | Stardance
|
tetsu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @tetsu | Stardance
|
1793760506.7714157
|
1794365306.7714157
|
|
69071
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793764336.9851425
|
1794628336.9851425
|
|
69070
|
My awesome macropad! by @aadit123 | Stardance
|
aadit123
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @aadit123 | Stardan Title: My awesome macropad! by @aadit123 | Stardance...
|
1793760504.0469391
|
1794365304.0469391
|
|
69069
|
BLARE by @B06 | Stardance
|
B06
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BLARE by @B06 | Stardance
|
1793760499.707382
|
1794365299.707382
|
|
69068
|
My own site! by @Fabicho | Stardance
|
Fabicho
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Fabicho | Stardance
|
1793760496.4717784
|
1794365296.4717784
|
|
69067
|
PhantomPod by @AoujHaider | Stardance
|
AoujHaider
|
0
|
22.43
|
0
|
[]
|
[{"post_id": 84651, "ts": "202 [{"post_id": 84651, "ts": "2026-10-30T00:24:38Z", "hours": 1.5558, "text": "did some repo work and fixed MAJOR PCB issues"}, {"post_id": 83068, "ts": "2026-10-26T19:41:03Z", "hours": 0.9611, "text": "i just finished the PCB, I do not think that I’ll be done with this by the 31st"}, {"post_id": 82934, "ts": "2026-10-26T09:26:50Z", "hours": 2.6667, "text": "PCB Error fixes, wire routing, LED placement."}, {"post_id": 81040, "ts": "2026-10-19T17:20:59Z", "hours": 0.8431, "text": "Very nice"}, {"post_id": 80503, "ts": "2026-10-17T21:49:22Z", "hours": 3.7158, "text": "still working on the pcb, just need to log in my hours"}, {"post_id": 80129, "ts": "2026-10-16T09:50:20Z", "hours": 4.1878, "text": "just logging in my hours, i forgot to use lapse when designing this ;("}, {"post_id": 79893, "ts": "2026-10-15T18:05:35Z", "hours": 1.9364, "text": "Finished designing the case and stuff for the DCD, the empty space is for the “cassette” I’m designing so i will update it when I’m done, If anyone has some design changes they would like to make feel free to comment"}, {"post_id": 79336, "ts": "2026-10-13T15:32:34Z", "hours": 4.6767, "text": "I have finally finished up my schematics for my project AFTER 2 DAYS."}, {"post_id": 78996, "ts": "2026-10-12T09:17:06Z", "hours": 1.8869, "text": "I’ve finished the brainstorm and design phase of my project. It’s basically a digital version of a cassette tape (ikik reinventing the wheel) but i wanted to give the cassette player (Inspired by the Sony TPS L2) a more modern touch, Modern being an oled screen, more minimally designed buttons (thinking about using haptics) small and slim form factor plus some cyberpunk-esk design elements (i haven’t added that to the design yet). On paper it doesn’t feel as exciting or brilliant but from the survey i did 60-70% of the people i surveyed would buy this if it’s resonably priced. Please let me know if you would make any changes or want anything added into it,"}]...
|
Title: PhantomPod by @AoujHaider | Stardance
Devl Title: PhantomPod by @AoujHaider | Stardance
Devlogs:
I’ve finished the brainstorm and design phase of my project. It’s basically a digital version of a cassette tape (ikik reinventing the wheel) but i wanted to give the cassette player (Inspired by the Sony TPS L2) a more modern touch, Modern being an oled screen, more minimally designed buttons (thinking about using haptics) small and slim form factor plus some cyberpunk-esk design elements (i haven’t added that to the design yet). On paper it doesn’t feel as exciting or brilliant but from the survey i did 60-70% of the people i surveyed would buy this if it’s resonably priced. Please let me know if you would make any changes or want anything added into it,
I have finally finished up my schematics for my project AFTER 2 DAYS.
Finished designing the case and stuff for the DCD, the empty space is for the “cassette” I’m designing so i will update it when I’m done, If anyone has some design changes they would like to make feel free to comment
just logging in my hours, i forgot to use lapse when designing this ;(
still working on the pcb, just need to log in my hours
Very nice
PCB Error fixes, wire routing, LED placement.
i just finished the PCB, I do not think that I’ll be done with this by the 31st
did some repo work and fixed MAJOR PCB issues...
|
1793760493.580735
|
1794365293.580735
|
|
69066
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793764336.1444392
|
1794628336.1444392
|
|
69065
|
Having fun messing with Godot Networking by @Flame Having fun messing with Godot Networking by @FlameWing | Stardance...
|
FlameWing
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-20T00:52:46Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Pretty simple Godot game that shows the concepts of Godot’s networking tools. Simple host/join, with player data syncing across clients. Simple chatting, and spawning physics bodies. Also, local server broadcasting to easily join servers hosted on your local network. One of the first times I used Godot, and had a fun time learning the technical side of it. Got to learn how to use both Godot’s High Level Multiplayer, and Godot’s lower level networking to handle local broadcasting.", "repo": "https://github.com/FlameWing-Code/Godot-Networking-Testing", "demo": "https://github.com/FlameWing-Code/Godot-Networking-Testing/releases/tag/v1"}]...
|
[{"post_id": 81125, "ts": "202 [{"post_id": 81125, "ts": "2026-10-19T23:50:39Z", "hours": 3.1672, "text": "Added local server broadcasting When you host a game, it will constantly send a small packet to 255.255.255.255, which gets sent to every device in the local network. Its a small little packet that simply contains the server’s username and the port their hosting on. Clients can pick up this packet, and it gets displayed so you can join easily. Had to rely on godot’s lower level networking, compared to the rest of the project."}, {"post_id": 78633, "ts": "2026-10-11T04:19:44Z", "hours": 2.6972, "text": "Got chat and usernames working"}]...
|
Title: Having fun messing with Godot Networking by Title: Having fun messing with Godot Networking by @FlameWing | Stardance
Devlogs:
Got chat and usernames working
Added local server broadcasting When you host a game, it will constantly send a small packet to 255.255.255.255, which gets sent to every device in the local network. Its a small little packet that simply contains the server’s username and the port their hosting on. Clients can pick up this packet, and it gets displayed so you can join easily. Had to rely on godot’s lower level networking, compared to the rest of the project.
Ships:
Pretty simple Godot game that shows the concepts of Godot’s networking tools. Simple host/join, with player data syncing across clients. Simple chatting, and spawning physics bodies. Also, local server broadcasting to easily join servers hosted on your local network. One of the first times I used Godot, and had a fun time learning the technical side of it. Got to learn how to use both Godot’s High Level Multiplayer, and Godot’s lower level networking to handle local broadcasting....
|
1793677691.3181298
|
1793764091.3181298
|
|
69064
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793764334.9881928
|
1794628334.9881928
|
|
69063
|
CyberDeck by @Grant19 | Stardance
|
Grant19
|
0
|
1.38
|
0
|
[]
|
[{"post_id": 78922, "ts": "202 [{"post_id": 78922, "ts": "2026-10-12T01:53:57Z", "hours": 0.5167, "text": "Lots of modeling, and planning, still looking for feedback, ideas welcome. This is what im thinking Right now"}, {"post_id": 78506, "ts": "2026-10-11T00:51:43Z", "hours": 0.8667, "text": "Started my Cyberdeck! Did part of the 3d model, if anyone has ideas for software for it or ideas message feel free to comment (I also planned and brainstormed, it didnt take me an hour to model just that)"}]...
|
Title: CyberDeck by @Grant19 | Stardance
Devlogs: Title: CyberDeck by @Grant19 | Stardance
Devlogs:
Started my Cyberdeck! Did part of the 3d model, if anyone has ideas for software for it or ideas message feel free to comment (I also planned and brainstormed, it didnt take me an hour to model just that)
Lots of modeling, and planning, still looking for feedback, ideas welcome. This is what im thinking Right now...
|
1793760489.255508
|
1794365289.255508
|
|
69062
|
InvertedPendulumBalancer by @evanreittinger | Star InvertedPendulumBalancer by @evanreittinger | Stardance...
|
evanreittinger
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: InvertedPendulumBalancer by @evanreittinger Title: InvertedPendulumBalancer by @evanreittinger | Stardance...
|
1793760487.5234404
|
1794365287.5234404
|
|
69061
|
playground by @buraibenceb2026 | Stardance
|
buraibenceb2026
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: playground by @buraibenceb2026 | Stardance
|
1793760481.2009394
|
1794365281.2009394
|
|
69060
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793764334.1406252
|
1794628334.1406252
|
|
69059
|
My personal site! by @sisuisthebest | Stardance
|
sisuisthebest
|
0
|
1.75
|
0
|
[]
|
[{"post_id": 78529, "ts": "202 [{"post_id": 78529, "ts": "2026-10-11T03:29:57Z", "hours": 1.7531, "text": "Added simple home page and music recommendations, as well as some css files for styling."}]...
|
Title: My personal site! by @sisuisthebest | Stard Title: My personal site! by @sisuisthebest | Stardance
Devlogs:
Added simple home page and music recommendations, as well as some css files for styling....
|
1793760478.5400665
|
1794365278.5400665
|
|
69058
|
Parallax by @rishaansd | Stardance
|
rishaansd
|
1
|
28.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-26T04:25:39Z", "hours": 28.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Parallax Physics Tutor Parallax is a physics tutor for students interested in learning the AP Physics 1 curriculum. The app uses a gamified approach, including a simulator to learn projectile motion and a boss battle at the end of the unit, to make physics an enjoyable science class. The app currently has the first unit of AP Physics 1: Kinematics. Use the app You can play it at https://parallax-physics.vercel.app/ You can watch the DEMO video at https://www.youtube.com/watch?v=TFTet9wMoyI Why I built it I am a student interested in the STEM field. One class I hope to take is AP Physics C. In order to prepare for AP Physics C, I decided to take the AP Physics 1 course. A major gap I noticed in learning AP Physics 1 is the passive lessons from traditional textbooks and online courses. I often find myself reading long textbook chapters or watching several videos, leaving me bored with physics. I know that physics can involve simulations and labs, so I wanted to focus on the fun aspects of physics while still letting students prepare for the AP Physics 1 exam efficiently. Features Galaxy map: All of the lessons, including the final boss battle, are organized into a galaxy map. The map is shaped in a parabola, like a projectile’s path. 5 lessons: Each lesson is structured with multiple cards: a hook, concept, check questions, and a lesson summary. Some lessons have more concept and check cards than others. Students earn stars depending on the number of mistakes they make on the check cards. A student can earn a minimum of 1 star and a maximum of 3 stars on a completed lesson. Progression and high scores: Once the user completes a lesson and returns to the home screen, their highest number of stars for that lesson is displayed below the lesson button. This encourages students to redo lessons and review concepts in order to get a perfect star score. The lesson then unlocks the next lesson and lights up the path to it. Projectile simulator: Once a student unlocks lesson 1.5, they gain access to the simulator for projectile motion. They can use the simulator to experiment with different angles and speeds of a projectile to see how it affects the path the projectile takes. Boss battle: The boss battle unlocks after all 5 lessons are completed. Each correct answer earns one shot at the boss, and the student has to set the speed and angle of the projectile to hit the boss. A player defeats the boss when it is hit 10 times. The player can also have a highscore on the boss by answering questions 3 in a row and avoiding mistakes! Saved progress: The user’s stars are saved in their device’s browser. It will continue to stay saved as long as the user uses the exact same device. (This is also a next step!) Biggest challenge The biggest challenge I faced was completing the animation for the projectile motion simulator. My first attempt was to use a for loop that incremented time by 1 every time to keep the ball moving. But when it ran, the ball teleported to the end of the screen. I learned that JavaScript has a function called requestAnimationFrame which continues making a chain until requestAnimationFrame is not called. When I called requestAnimationFrame(drawFrame());, the page crashed with the error “Maximum call stack size exceeded” because drawFrame called itself instantly, forever. I learned that functions can be called in one of two ways: with parentheses, which run them instantly, or without parentheses, so another function calls them only at a certain time. Next, when I pressed the “fire” button two times, the speed doubled, because there was no condition to stop the chain after the projectile hit the ground. To fix this, I only allowed a call for the next frame when the ball was flying. What’s next The remain 7 units of AP Physics 1, user accounts on Supabase, and an AI tutor that gives hints instead of answers.", "repo": "https://github.com/Rishaan-Dukhande/parallax-physics/tree/stardance", "demo": "https://parallax-physics.vercel.app/"}]...
|
[{"post_id": 82878, "ts": "202 [{"post_id": 82878, "ts": "2026-10-26T04:17:21Z", "hours": 3.1544, "text": "#I finished Parallax! Oct 25, 2026 - Day 20! Today, I focused on some finishing touches. I added SVG lines to connect all the lesson nodes in the home galaxy. A completed lesson draws a solid cyan line towards the next lesson. Incomplete lessons have a faded dashed line connection between them. The lines connect in a parabolic shape. I also completed the README and made a video to showcase my project! Key Learnings: To draw lines using SVG, you need to use the createElementNS(ns, “object(usually line)”) function. Then, you can set attributes for the (x1, y1) and (x2,y2) coordinates to draw a line. AI usage: I used AI to help me understand concepts when I got stuck for over 5 minutes on a topic and test my code. I used AI to teach me the concept, then I coded everything by myself and asked for feedback on the code to improve it. In this session, I had AI help with some CSS and explaining the createElementNS concept."}, {"post_id": 82531, "ts": "2026-10-25T04:36:58Z", "hours": 7.2194, "text": "Almost Complete! Summary In the last 3 days, I finished the projectile motion simulator and added sliders, created a boss battle at the end of the unit, and created a home screen with lessons in a parabola galaxy The projectile motion simulator has two sliders — angle and speed — which a user can use to change the motion of a projectile. This was moved to lesson 1.5, the lesson about motion in 2-Dimensions, and allows users to learn through experimentation The boss battle uses questions from all the lessons. Once a user answers a question correctly, they get a chance to use the same projectile motion simulator to hit the boss. If they are within 25px of the boss, the boss loses 1hp. If the user answers a question incorrectly, they lose a life. At the end, the user either completes Unit 1 or has to try again. I plan to add several units in the future, following the AP Physics 1 layout, where defeating a boss will create a new unit Throughout the project, I also had to write several CSS classes myself! You can read the DEVLOG for more info on the project! Key Learnings: Oct 22, 2026 When you use a for each loop to create elements, if you set any characteristics of one singular element, then it will only save the characteristics of the last time it was set to different values Spelling mistakes are common. A way to avoid this is to use autocomplete by pressing tab on the computer. This will autocomplete a variable name without any misspellings Functions should do basic tasks. The home button should just set up the screen. The event handlers are created for changing things ONLY after a lesson has been selected. At first, I merged everything into the home function, so it would display the second lesson and overwrite the first lesson. This means that the user is forced into the second lesson without a choice. (Second lesson was the last lesson currently developed) Oct 23, 2026 I forgot to use appendChild() to add all elements to the app. This is a reminder to use replaceChildren to empty a screen and appendChild() to add an element to the screen If you use two different variables to refer to the same button or element, and add an event listener to the different variables, there are multiple event listeners happening at once. This means that there should be only one event listener for every button, and you don’t call an event listener because it is a function that automatically runs when there is a “click” (the chosen input) Buttons should be set in a specific state when entering a screen, not at the top of a file where they are constantly enabled or disabled. This will make buttons not function properly Oct 24, 2026 I needed both the simulator.js and main.js files to check the same app element. I learned that we can use getElementById separately in both files to get and change the same element I practiced using export and import between the simulator.js and main.js files. I exported drawScene() and hitCount and imported them into main.js so that main.js can call the simulator Since main.js can’t change the hitCount in simulator.js but only see it, I used what a car odometer uses as well. I first find the number of hits the player has made and subtract it from the 10hp the boss starts with to display the boss’s health throughout the boss battle To check if an element has a class, you can use classList.contains() I had originally made the question list a local variable in showBossQuestion(). This was a problem because every single time the user presses the nextQuestionButton, a new question should be displayed. To fix this, I made the questions list a global variable AI usage: used AI to help me understand concepts when I got stuck for over 5 minutes on a topic and test my code. I used AI to teach me the concept, then I coded everything by myself and asked for feedback on the code to improve it. AI was used to test the app and write lessons 1.3-1.5"}, {"post_id": 81716, "ts": "2026-10-22T06:31:30Z", "hours": 4.0947, "text": "Projectile motion simulator + lesson template Summary: Over the course of the last 3-4 days, I created a projectile motion simulation where the user can control speed and angle of the projectile. The code uses real kinematic equations to solve for the new position of the projectile given time. This then maps to a mapCanvas(t) function that allows the equations to give the coordinates for a working website and canvas HTML element. Finally, I created a drawFrame() function to actually paint the simulation so that it looks like the projectile is consistently moving to human eyes. Intro to Challenges: There were many bugs along the way. This included learning curves such as learning the requestAnimationFrame() function, making sliders, and even writing some part of CSS ! Oct 18, 2026 - Day 13, 1. One important concept is that the canvas starts (0,0) from the top left corner of the grid, so subtracting y actually makes an object/line move upward. 2. I learned to use the function beginPath() to create a new drawing object. Without using beginPath(), an drawing connects a the previous drawing to the new drawing with a line. Additionally, the fill() function needs to be used to actually draw a point. 3. I learned that css uses different punctuation for different rules: selector (plain word) - looks for elements with tag .selector - looks for elements whose classes list contains the word #selector - looks for the element with the ID :selector - does the css action only while it is in the state 4. You can test with console.log. To open it on a website/app screen, you can use CMD+OPT+J Oct 19, 2026 - Day 14, In javaScript, when a function is called with parentheses: drawFrame(), it runs immediately. When a function is just called by its name, it runs when another function tells it to: requestAnimationFrame(drawFrame) (no parentheses)! 2. I forgot to use the fill() function again. fill() is important because it actually “paints” the drawing. Oct 20, 2026 - Day 15, I got confused that y increases to make a drawing go downwards. This caused me to write the falling logic incorrectly. I switched the case where falling = true with falling = false. After making the falling variable, I wasn’t using it in any way. The falling variable also needed to be used in the eventHandler for the launch button to make sure that multiple cycles of drawFrame() weren’t running at the same time: a. When drawFrame() is run several times, it causes the speed to increase by n times as much if n represents the number of times you click the launch button To fix this, I used the falling variable in the EventHandler. I decided that it is easier to just not do anything if the button is in mid-flight and the user wants to re-launch the ball/projectile. Oct 21, 2026 - Day 16, Sliders are There are two events possible to use in an event listener (of a slider): a. “input” - a live update. The event triggers continously while a slider is being dragged b. “change” - only triggers and runs the event listener when you let go of the element (slider). This prevents changing while you are holding the slider Sliders don’t have a closing tag. They don’t have . This means that textContent can’t be used on sliders because they are not containers. Therfore, there has to be a new variable to act as the label for the slider element (or any input element for that matter) Span is inline, div begins on the next line Inner workings of requestAnimationFrame() - when this function is called, it let’s the function end and immediately return to where it was called. It then continues until it reaches the end of the code in the file. The requestAnimationFrame() just tells the compiler to call the function again AFTER everything ran. This was important because it was the reason the disabling of the sliders was not working."}, {"post_id": 80582, "ts": "2026-10-18T06:21:27Z", "hours": 1.5964, "text": "Creating an answerCheck function and progress.js file to save lesson stars Summary: Today, I first deployed the app on vercel! Then, I created progress.js; This file has a function to loadProgress() and saveStars(). Finally, I added function calls to main.js to use the functions in the functionality of the app. AI usage: used AI to help me understand concepts when I got stuck for over 5 minutes on a topic and test my code. In this specific session, I had a lot of obstacles, especially with learning new javascript functions and syntax. There were 6 attempts just to solve the progress.js page, and AI helped me understand javascript better, as shown in the key learnings below. Key Learnings: 1. You need to use the \"export\" keyword so that a function in one page can be used by other files 2. In javaScript, you don't have to manually create tables/lists like how you use the \"new\" keyword in java. If you say scores[\"math\"] = 60 and math does not exist, then it will create a new row called \"math\" in the table and assign the value of 60 to the key. 3. Through 6 attempts, I learned a lot of Java Script syntax features: a. A dot is used to get an attribute in javascript, something that belongs to an object. However, tables in javascript use brackets just like lists: table[]; b. You can save a whole table using .setItem(key, value). Remember that the value has to be a string. We can use .stringify(obj) for this. c. Javascript has two error words: null and undefined. Null happens from an intentionally missing object. For example, when an object has been declared but is empty. Undefined, by contrast, is used when the object has never been created and their is no instance of it. d. Extra JavaScript functions are as follows: i. stringify --> turn an object into a string ii. parse --> turn a string back into an object iii. setItem --> changes the item in a table iv. getItem --> gets the item currently in a table 4. If you need to import multiple things from the same page/file, you can use a comma in the import instead of using multiple lines. Next Steps: I am going to create an interactive projectile simulator!"}, {"post_id": 80089, "ts": "2026-10-16T06:13:45Z", "hours": 1.0003, "text": "Mini-quiz completion and Stars! Summary Today, I finished the mini-quiz in the first lesson. I have included colors to indicate wrong and write answers (that comes from the css) and I created 4 buttons that are clickable and display the answer choices. Additionally, I added stars to the lesson to act as the lesson score. This depends on their score on the lesson quiz. Key Learnings: When I gave the buttons the choice–correct or choice–wrong class, they now had a class and a property of disabled. The property for disabled buttons in CSS is button:disabled, which is more specific than just the .choice-correct class. This makes the CSS default to the rules in the button:disabled property, which dims the opacity. To fix this, I hand-coded a third class that works with both properties to keep the buttons fully highlighted in a color to indicate wrong and right. You can use the “”.repeat(n) function to repeat any string in the quotation marks n times in a row. Remember: It is easy to get confused with spelling. The property is .disabled (past tense). This should also be used in correct ways. It is important to think about when something should or shouldn’t be disabled (common mistake today). Next Steps: Now that I have developed one whole lesson, I will use the same code to develop a total of 5 lessons to cover Unit 1: Kinematics of the AP Physics 1 curriculum. Then, I will create a home screen. If I have time, I will make the first-ever deployment to Vercel and see the app in action! AI usage (if your interested) AI usage: I used AI to help me understand concepts when I got stuck for over 5 minutes on a topic. I always try to write code myself, but I learn the concept I am struggling with after using AI."}, {"post_id": 79716, "ts": "2026-10-15T06:19:45Z", "hours": 0.9108, "text": "Day 9 - Creating the first lesson + quiz Today, I created the official first lesson of parallax. The first lesson follows the AP Physics 1 college curriculum. This starts with the Kinematics Unit. The first topic covered in the unit is Scalars and Vectors. Learned: 1. Today I learned that we use the === operator to check if both the datatype and value of two variables being compared is the exact same. 2. I also learned that when creating elements in a .js file, you can name elements anything, such as questionText instead of “p”. It is important to do this so that the compiler/program does not crash because only one const element can have the same name. 3. I learned that there is a hidden property that works on elements such as div. This is just like how disabled works on buttons! 4. I learned the syntax of a forEach loop: element.forEach((element, index) => {}); AI usage: After writing my first draft of the lesson code and checking the mini-quiz inside the first lesson, I had multiple errors. I used AI to explain the errors, which are documented in the key learning above. Additionally, I used AI to verify the code and test the app itself with its capabilities."}, {"post_id": 79477, "ts": "2026-10-14T06:26:48Z", "hours": 0.51, "text": "Make the App look good! Today, I added a stylesheet (made by AI) to make my app look more modern and appealing. Since I am coding the structure of the app, this is ok. Along the way, I learned how to incorporate CSS as classes in both HTML and JavaScript. I also learned that JavaScript uses the classListadd method to add classes, while HTML is just a direct type-in. I am hoping to learn more CSS in the process. My next step is to add new components such as a sidebar and more interactive features."}, {"post_id": 79255, "ts": "2026-10-13T06:39:14Z", "hours": 9.2656, "text": "Home screen + Learning React/HTML For the first few hours of the project, I spent directing AI on how to create an amazing AI tutor. However, I decided to restart from scratch to create an app that is self-coded. I worked on the new app from scratch for 2 hours, and I was able to create one lesson. I focused on the lesson structure and added a start, next, and back button. I am planning to focus on the structure of the app before appealing to aesthetics."}]...
|
Title: Parallax by @rishaansd | Stardance
Devlogs Title: Parallax by @rishaansd | Stardance
Devlogs:
Home screen + Learning React/HTML For the first few hours of the project, I spent directing AI on how to create an amazing AI tutor. However, I decided to restart from scratch to create an app that is self-coded. I worked on the new app from scratch for 2 hours, and I was able to create one lesson. I focused on the lesson structure and added a start, next, and back button. I am planning to focus on the structure of the app before appealing to aesthetics.
Make the App look good! Today, I added a stylesheet (made by AI) to make my app look more modern and appealing. Since I am coding the structure of the app, this is ok. Along the way, I learned how to incorporate CSS as classes in both HTML and JavaScript. I also learned that JavaScript uses the classListadd method to add classes, while HTML is just a direct type-in. I am hoping to learn more CSS in the process. My next step is to add new components such as a sidebar and more interactive features.
Day 9 - Creating the first lesson + quiz Today, I created the official first lesson of parallax. The first lesson follows the AP Physics 1 college curriculum. This starts with the Kinematics Unit. The first topic covered in the unit is Scalars and Vectors. Learned: 1. Today I learned that we use the === operator to check if both the datatype and value of two variables being compared is the exact same. 2. I also learned that when creating elements in a .js file, you can name elements anything, such as questionText instead of “p”. It is important to do this so that the compiler/program does not crash because only one const element can have the same name. 3. I learned that there is a hidden property that works on elements such as div. This is just like how disabled works on buttons! 4. I learned the syntax of a forEach loop: element.forEach((element, index) => {}); AI usage: After writing my first draft of the lesson code and checking the mini-quiz inside the first lesson, I had multiple errors. I used AI to explain the errors, which are documented in the key learning above. Additionally, I used AI to verify the code and test the app itself with its capabilities.
Mini-quiz completion and Stars! Summary Today, I finished the mini-quiz in the first lesson. I have included colors to indicate wrong and write answers (that comes from the css) and I created 4 buttons that are clickable and display the answer choices. Additionally, I added stars to the lesson to act as the lesson score. This depends on their score on the lesson quiz. Key Learnings: When I gave the buttons the choice–correct or choice–wrong class, they now had a class and a property of disabled. The property for disabled buttons in CSS is button:disabled, which is more specific than just the .choice-correct class. This makes the CSS default to the rules in the button:disabled property, which dims the opacity. To fix this, I hand-coded a third class that works with both properties to keep the buttons fully highlighted in a color to indicate wrong and right. You can use the “”.repeat(n) function to repeat any string in the quotation marks n times in a row. Remember: It is easy to get confused with spelling. The property is .disabled (past tense). This should also be used in correct ways. It is important to think about when something should or shouldn’t be disabled (common mistake today). Next Steps: Now that I have developed one whole lesson, I will use the same code to develop a total of 5 lessons to cover Unit 1: Kinematics of the AP Physics 1 curriculum. Then, I will create a home screen. If I have time, I will make the first-ever deployment to Vercel and see the app in action! AI usage (if your interested) AI usage: I used AI to help me understand concepts when I got stuck for over 5 minutes on a topic. I always try to write code myself, but I learn the concept I am struggling with after using AI.
Creating an answerCheck function and progress.js file to save lesson stars Summary: Today, I first deployed the app on vercel! Then, I created progress.js; This file has a function to loadProgress() and saveStars(). Finally, I added function calls to main.js to use the functions in the functionality of the app. AI usage: used AI to help me understand concepts when I got stuck for over 5 minutes on a topic and test my code. In this specific session, I had a lot of obstacles, especially with learning new javascript functions and syntax. There were 6 attempts just to solve the progress.js page, and AI helped me understand javascript better, as shown in the key learnings below. Key Learnings: 1. You need to use the "export" keyword so that a function in one page can be used by other files 2. In javaScript, you don't have to manually create tables/lists like how you use the "new" keyword in java. If you say scores["math"] = 60 and math does not exist, then it will create a new row called "math" in the table and assign the value of 60 to the key. 3. Through 6 attempts, I learned a lot of Java Script syntax features: a. A dot is used to get an attribute in javascript, something that belongs to an object. However, tables in javascript use brackets just like lists: table[]; b. You can save a whole table using .setItem(key, value). Remember that the value has to be a string. We can use .stringify(obj) for this. c. Javascript has two error words: null and undefined. Null happens from an intentionally missing object. For example, when an object has been declared but is empty. Undefined, by contrast, is used when the object has never been created and their is no instance of it. d. Extra JavaScript functions are as follows: i. stringify --> turn an object into a string ii. parse --> turn a string back into an object iii. setItem --> changes the item in a table iv. getItem --> gets the item currently in a table 4. If you need to import multiple things from the same page/file, you can use a comma in the import instead of using multiple lines. Next Steps: I am going to create an interactive projectile simulator!
Projectile motion simulator + lesson template Summary: Over the course of the last 3-4 days, I created a projectile motion simulation where the user can control speed and angle of the projectile. The code uses real kinematic equations to solve for the new position of the projectile given time. This then maps to a mapCanvas(t) function that allows the equations to give the coordinates for a working website and canvas HTML element. Finally, I created a drawFrame() function to actually paint the simulation so that it looks like the projectile is consistently moving to human eyes. Intro to Challenges: There were many bugs along the way. This included learning curves such as learning the requestAnimationFrame() function, making sliders, and even writing some part of CSS ! Oct 18, 2026 - Day 13, 1. One important concept is that the canvas starts (0,0) from the top left corner of the grid, so subtracting y actually makes an object/line move upward. 2. I learned to use the function beginPath() to create a new drawing object. Without using beginPath(), an drawing connects a the previous drawing to the new drawing with a line. Additionally, the fill() function needs to be used to actually draw a point. 3. I learned that css uses different punctuation for different rules: selector (plain word) - looks for elements with tag .selector - looks for elements whose classes list contains the word #selector - looks for the element with the ID :selector - does the css action only while it is in the state 4. You can test with console.log. To open it on a website/app screen, you can use CMD+OPT+J Oct 19, 2026 - Day 14, In javaScript, when a function is called with parentheses: drawFrame(), it runs immediately. When a function is just called by its name, it runs when another function tells it to: requestAnimationFrame(drawFrame) (no parentheses)! 2. I forgot to use the fill() function again. fill() is important because it actually “paints” the drawing. Oct 20, 2026 - Day 15, I got confused that y increases to make a drawing go downwards. This caused me to write the falling logic incorrectly. I switched the case where falling = true with falling = false. After making the falling variable, I wasn’t using it in any way. The falling variable also needed to be used in the eventHandler for the launch button to make sure that multiple cycles of drawFrame() weren’t running at the same time: a. When drawFrame() is run several times, it causes the speed to increase by n times as much if n represents the number of times you click the launch button To fix this, I used the falling variable in the EventHandler. I decided that it is easier to just not do anything if the button is in mid-flight and the user wants to re-launch the ball/projectile. Oct 21, 2026 - Day 16, Sliders are There are two events possible to use in an event listener (of a slider): a. “input” - a live update. The event triggers continously while a slider is being dragged b. “change” - only triggers and runs the event listener when you let go of the element (slider). This prevents changing while you are holding the slider Sliders don’t have a closing tag. They don’t have . This means that textContent can’t be used on sliders because they are not containers. Therfore, there has to be a new variable to act as the label for the slider element (or any input element for that matter) Span is inline, div begins on the next line Inner workings of requestAnimationFrame() - when this function is called, it let’s the function end and immediately return to where it was called. It then continues until it reaches the end of the code in the file. The requestAnimationFrame() just tells the compiler to call the function again AFTER everything ran. This was important because it was the reason the disabling of the sliders was not working.
Almost Complete! Summary In the last 3 days, I finished the projectile motion simulator and added sliders, created a boss battle at the end of the unit, and created a home screen with lessons in a parabola galaxy The projectile motion simulator has two sliders — angle and speed — which a user can use to change the motion of a projectile. This was moved to lesson 1.5, the lesson about motion in 2-Dimensions, and allows users to learn through experimentation The boss battle uses questions from all the lessons. Once a user answers a question correctly, they get a chance to use the same projectile motion simulator to hit the boss. If they are within 25px of the boss, the boss loses 1hp. If the user answers a question incorrectly, they lose a life. At the end, the user either completes Unit 1 or has to try again. I plan to add several units in the future, following the AP Physics 1 layout, where defeating a boss will create a new unit Throughout the project, I also had to write several CSS classes myself! You can read the DEVLOG for more info on the project! Key Learnings: Oct 22, 2026 When you use a for each loop to create elements, if you set any characteristics of one singular element, then it will only save the characteristics of the last time it was set to different values Spelling mistakes are common. A way to avoid this is to use autocomplete by pressing tab on the computer. This will autocomplete a variable name without any misspellings Functions should do basic tasks. The home button should just set up the screen. The event handlers are created for changing things ONLY after a lesson has been selected. At first, I merged everything into the home function, so it would display the second lesson and overwrite the first lesson. This means that the user is forced into the second lesson without a choice. (Second lesson was the last lesson currently developed) Oct 23, 2026 I forgot to use appendChild() to add all elements to the app. This is a reminder to use replaceChildren to empty a screen and appendChild() to add an element to the screen If you use two different variables to refer to the same button or element, and add an event listener to the different variables, there are multiple event listeners happening at once. This means that there should be only one event listener for every button, and you don’t call an event listener because it is a function that automatically runs when there is a “click” (the chosen input) Buttons should be set in a specific state when entering a screen, not at the top of a file where they are constantly enabled or disabled. This will make buttons not function properly Oct 24, 2026 I needed both the simulator.js and main.js files to check the same app element. I learned that we can use getElementById separately in both files to get and change the same element I practiced using export and import between the simulator.js and main.js files. I exported drawScene() and hitCount and imported them into main.js so that main.js can call the simulator Since main.js can’t change the hitCount in simulator.js but only see it, I used what a car odometer uses as well. I first find the number of hits the player has made and subtract it from the 10hp the boss starts with to display the boss’s health throughout the boss battle To check if an element has a class, you can use classList.contains() I had originally made the question list a local variable in showBossQuestion(). This was a problem because every single time the user presses the nextQuestionButton, a new question should be displayed. To fix this, I made the questions list a global variable AI usage: used AI to help me understand concepts when I got stuck for over 5 minutes on a topic and test my code. I used AI to teach me the concept, then I coded everything by myself and asked for feedback on the code to improve it. AI was used to test the app and write lessons 1.3-1.5
#I finished Parallax! Oct 25, 2026 - Day 20! Today, I focused on some finishing touches. I added SVG lines to connect all the lesson nodes in the home galaxy. A completed lesson draws a solid cyan line towards the next lesson. Incomplete lessons have a faded dashed line connection between them. The lines connect in a parabolic shape. I also completed the README and made a video to showcase my project! Key Learnings: To draw lines using SVG, you need to use the createElementNS(ns, “object(usually line)”) function. Then, you can set attributes for the (x1, y1) and (x2,y2) coordinates to draw a line. AI usage: I used AI to help me understand concepts when I got stuck for over 5 minutes on a topic and test my code. I used AI to teach me the concept, then I coded everything by myself and asked for feedback on the code to improve it. In this session, I had AI help with some CSS and explaining the createElementNS concept.
Ships:
Parallax Physics Tutor Parallax is a physics tutor for students interested in learning the AP Physics 1 curriculum. The app uses a gamified approach, including a simulator to learn projectile motion and a boss battle at the end of the unit, to make physics an enjoyable science class. The app currently has the first unit of AP Physics 1: Kinematics. Use the app You can play it at https://parallax-physics.vercel.app/ You can watch the DEMO video at https://www.youtube.com/watch?v=TFTet9wMoyI Why I built it I am a student interested in the STEM field. One class I hope to take is AP Physics C. In order to prepare for AP Physics C, I decided to take the AP Physics 1 course. A major gap I noticed in learning AP Physics 1 is the passive lessons from traditional textbooks and online courses. I often find myself reading long textbook chapters or watching several videos, leaving me bored with physics. I know that physics can involve simulations and labs, so I wanted to focus on the fun aspects of physics while still letting students prepare for the AP Physics 1 exam efficiently. Features Galaxy map: All of the lessons, including the final boss battle, are organized into a galaxy map. The map is shaped in a parabola, like a projectile’s path. 5 lessons: Each lesson is structured with multiple cards: a hook, concept, check questions, and a lesson summary. Some lessons have more concept and check cards than others. Students earn stars depending on the number of mistakes they make on the check cards. A student can earn a minimum of 1 star and a maximum of 3 stars on a completed lesson. Progression and high scores: Once the user completes a lesson and returns to the home screen, their highest number of stars for that lesson is displayed below the lesson button. This encourages students to redo lessons and review concepts in order to get a perfect star score. The lesson then unlocks the next lesson and lights up the path to it. Projectile simulator: Once a student unlocks lesson 1.5, they gain access to the simulator for projectile motion. They can use the simulator to experiment with different angles and speeds of a projectile to see how it affects the path the projectile takes. Boss battle: The boss battle unlocks after all 5 lessons are completed. Each correct answer earns one shot at the boss, and the student has to set the speed and angle of the projectile to hit the boss. A player defeats the boss when it is hit 10 times. The player can also have a highscore on the boss by answering questions 3 in a row and avoiding mistakes! Saved progress: The user’s stars are saved in their device’s browser. It will continue to stay saved as long as the user uses the exact same device. (This is also a next step!) Biggest challenge The biggest challenge I faced was completing the animation for the projectile motion simulator. My first attempt was to use a for loop that incremented time by 1 every time to keep the ball moving. But when it ran, the ball teleported to the end of the screen. I learned that JavaScript has a function called requestAnimationFrame which continues making a chain until requestAnimationFrame is not called. When I called requestAnimationFrame(drawFrame());, the page crashed with the error “Maximum call stack size exceeded” because drawFrame called itself instantly, forever. I learned that functions can be called in one of two ways: with parentheses, which run them instantly, or without parentheses, so another function calls them only at a certain time. Next, when I pressed the “fire” button two times, the speed doubled, because there was no condition to stop the chain after the projectile hit the ground. To fix this, I only allowed a call for the next frame when the ball was flying. What’s next The remain 7 units of AP Physics 1, user accounts on Supabase, and an AI tutor that gives hints instead of answers....
|
1793742930.2247465
|
1793829330.2247465
|
|
69057
|
My pet, Frank by @Lionroar28 | Stardance
|
Lionroar28
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My pet, Frank by @Lionroar28 | Stardance
|
1793472457.7881842
|
1794336457.7881842
|
|
69056
|
Shadows of the Sea by @marcustop51 | Stardance
|
marcustop51
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Shadows of the Sea by @marcustop51 | Starda Title: Shadows of the Sea by @marcustop51 | Stardance...
|
1793760472.9193423
|
1794365272.9193423
|
|
69055
|
annoyer by @elipseday | Stardance
|
elipseday
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: annoyer by @elipseday | Stardance
|
1793760470.373329
|
1794365270.373329
|
|
69054
|
portfolio by @anarc | Stardance
|
anarc
|
0
|
1.85
|
0
|
[]
|
[{"post_id": 78504, "ts": "202 [{"post_id": 78504, "ts": "2026-10-11T00:33:40Z", "hours": 1.8456, "text": "im working on this website’s contents."}]...
|
Title: portfolio by @anarc | Stardance
Devlogs:
i Title: portfolio by @anarc | Stardance
Devlogs:
im working on this website’s contents....
|
1793760460.5375788
|
1794365260.5375788
|
|
69053
|
My own site! by @Hunair | Stardance
|
Hunair
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Hunair | Stardance
|
1793760456.3312538
|
1794365256.3312538
|
|
69052
|
Ballistic Launch Calculator by @CSmith | Stardance
|
CSmith
|
0
|
2.54
|
0
|
[]
|
[{"post_id": 79197, "ts": "202 [{"post_id": 79197, "ts": "2026-10-13T00:04:56Z", "hours": 2.5422, "text": "Created a proof of concept This is very ugly, and just to prove that my algorithm will work in Javascript. This will also provide a “backbone” that will be torn down and rebuilt. It i just some prompt boxes and two ugly lines of formulas, but here is the code: function degrees(radians) { return radians * (180 / Math.PI); } var v = Number(prompt(\"Enter initial velocity (m/s):\")); var d = Number(prompt(\"Enter distance (m):\")); var h = Number(prompt(\"Enter height (m):\")); var g = Number(prompt(\"Enter absolute acceleration due to gravity (m/s^2):\")); var thetaHR = Math.atan((d*v**2+v**2*Math.sqrt(d**2-4*((g*d**2)/(2*v**2))*((g*d**2)/(2*v**2)+h)))/(g*d**2)); var thetaLR = Math.atan((d*v**2-v**2*Math.sqrt(d**2-4*((g*d**2)/(2*v**2))*((g*d**2)/(2*v**2)+h)))/(g*d**2)); var thetaH = degrees(thetaHR); var thetaL = degrees(thetaLR); alert(\"High angle: \" + thetaH + \" degrees\\nLow angle: \" + thetaL + \" degrees\");"}]...
|
Title: Ballistic Launch Calculator by @CSmith | St Title: Ballistic Launch Calculator by @CSmith | Stardance
Devlogs:
Created a proof of concept This is very ugly, and just to prove that my algorithm will work in Javascript. This will also provide a “backbone” that will be torn down and rebuilt. It i just some prompt boxes and two ugly lines of formulas, but here is the code: function degrees(radians) { return radians * (180 / Math.PI); } var v = Number(prompt("Enter initial velocity (m/s):")); var d = Number(prompt("Enter distance (m):")); var h = Number(prompt("Enter height (m):")); var g = Number(prompt("Enter absolute acceleration due to gravity (m/s^2):")); var thetaHR = Math.atan((d*v**2+v**2*Math.sqrt(d**2-4*((g*d**2)/(2*v**2))*((g*d**2)/(2*v**2)+h)))/(g*d**2)); var thetaLR = Math.atan((d*v**2-v**2*Math.sqrt(d**2-4*((g*d**2)/(2*v**2))*((g*d**2)/(2*v**2)+h)))/(g*d**2)); var thetaH = degrees(thetaHR); var thetaL = degrees(thetaLR); alert("High angle: " + thetaH + " degrees\nLow angle: " + thetaL + " degrees");...
|
1793760453.7125885
|
1794365253.7125885
|
|
69051
|
Star Swimming by @mrosecooper | Stardance
|
mrosecooper
|
0
|
3.26
|
0
|
[]
|
[{"post_id": 78760, "ts": "202 [{"post_id": 78760, "ts": "2026-10-11T14:55:05Z", "hours": 2.2008, "text": "minigame 1 is going horribly i fear. half the code its asking me to copy paste into it or whatever isnt doing what its supposed to and obviously is me doing stuff wrong here but i cant for the life of me figure out what exactly is wrong with it and every time i change it it gets worse sadly, ill fix it though i persevere or wtv, ive decided ill go through all the tutorial and then go back and fix stuff (prolly not the best way to go about it but wtv)"}, {"post_id": 78702, "ts": "2026-10-11T11:07:37Z", "hours": 1.0544, "text": "i created title screen and made the buttons actually do something ! i expect that making this entire thing will take me a long long time considering how new i am to all this .. dear god (i also still gotta verify my identity to make everything public but im at my fathers home so i cannot, oh well, ill do it when im home)"}]...
|
Title: Star Swimming by @mrosecooper | Stardance
Title: Star Swimming by @mrosecooper | Stardance
Devlogs:
i created title screen and made the buttons actually do something ! i expect that making this entire thing will take me a long long time considering how new i am to all this .. dear god (i also still gotta verify my identity to make everything public but im at my fathers home so i cannot, oh well, ill do it when im home)
minigame 1 is going horribly i fear. half the code its asking me to copy paste into it or whatever isnt doing what its supposed to and obviously is me doing stuff wrong here but i cant for the life of me figure out what exactly is wrong with it and every time i change it it gets worse sadly, ill fix it though i persevere or wtv, ive decided ill go through all the tutorial and then go back and fix stuff (prolly not the best way to go about it but wtv)...
|
1793760448.0833092
|
1794365248.0833092
|
|
69050
|
Old West Study Blog by @howdyysheriff | Stardance
|
howdyysheriff
|
0
|
0.32
|
0
|
[]
|
[{"post_id": 78447, "ts": "202 [{"post_id": 78447, "ts": "2026-10-10T20:20:02Z", "hours": 0.3214, "text": "first devlog! well, howdy Hack Club! this is my first devlog for my first H project for my first blog and first time coding with ZERO AI. yes, im challenging myself here XD. well, this was just a beggining, so it has the semantics, color pallete and a name. i still have a lot to figure tho lol. well, here is my first hello world in my new blog!"}]...
|
Title: Old West Study Blog by @howdyysheriff | Sta Title: Old West Study Blog by @howdyysheriff | Stardance
Devlogs:
first devlog! well, howdy Hack Club! this is my first devlog for my first H project for my first blog and first time coding with ZERO AI. yes, im challenging myself here XD. well, this was just a beggining, so it has the semantics, color pallete and a name. i still have a lot to figure tho lol. well, here is my first hello world in my new blog!...
|
1793760444.5091233
|
1794365244.5091233
|
|
69049
|
Wish sender by @sarthak_jnj | Stardance
|
sarthak_jnj
|
2
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T16:51:24Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It is supposed to be a bot that automatically runs with your device startup, checks it’s own history and then executes the command to send a specific message & image to a defined contact on WhatsApp. I personally kept it at 9 days as a small fun project to tease a friend during a 9-day long indian traditional festival. The messages, phone number, file location and photos can easily be replaced. The difficulty for me was the new experience, making projects itself is a new thing for me I’ve recently added to my timeline, and i prefer hardware mostly so I’m not much experienced with software work and working with so many libraries, that’s why this project is more of a reminder that “you have to do this today too. just keep an eye if something goes wrong” rather than something dealing with itself in the background. What i am proud of can be that i learnt the JSON thing for this project solely but practice rather than any theory reading. and even tho i used an AI to guide me, i genuinely found a lot of troubles and came up with 3-4 creative workarounds by the end and completely made the structure myself even if i asked the specific commands from AI. For those trying this, it is easy to use as it is, just make sure you already have logged into WhatsApp, adjust the pixel locations according to your device as given in README.md, increase time.sleep() if you think your device/network is taking too long. adjust the file location before running it and don’t use it to actually mess with someone, it’s supposed to be something for a joke, not to irritate anyone (unless they’re a close friend) (Fixed the demo)", "repo": "https://github.com/Sarthak-jnj/Just-a-wishing-bot", "demo": "https://github.com/Sarthak-jnj/Just-a-wishing-bot/blob/main/Demo.zip"}, {"ship_num": 2, "ts": "2026-10-11T14:16:50Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It is supposed to be a bot that automatically runs with your device startup, checks it’s own history and then executes the command to send a specific message & image to a defined contact on WhatsApp. I personally kept it at 9 days as a small fun project to tease a friend during a 9-day long indian traditional festival. The messages, phone number, file location and photos can easily be replaced. The difficulty for me was the new experience, making projects itself is a new thing for me I’ve recently added to my timeline, and i prefer hardware mostly so I’m not much experienced with software work and working with so many libraries, that’s why this project is more of a reminder that “you have to do this today too. just keep an eye if something goes wrong” rather than something dealing with itself in the background. What i am proud of can be that i learnt the JSON thing for this project solely but practice rather than any theory reading. and even tho i used an AI to guide me, i genuinely found a lot of troubles and came up with 3-4 creative workarounds by the end and completely made the structure myself even if i asked the specific commands from AI. For those trying this, it is easy to use as it is, just make sure you already have logged into WhatsApp, adjust the pixel locations according to your device as given in README.md, increase time.sleep() if you think your device/network is taking too long. adjust the file location before running it and don’t use it to actually mess with someone, it’s supposed to be something for a joke, not to irritate anyone (unless they’re a close friend)", "repo": "https://github.com/Sarthak-jnj/Just-a-wishing-bot", "demo": "https://github.com/Sarthak-jnj/Just-a-wishing-bot/blob/main/Demo.zip"}]...
|
[{"post_id": 81289, "ts": "202 [{"post_id": 81289, "ts": "2026-10-20T17:20:08Z", "hours": 0.3531, "text": "Just worked up with a needed demo to quick install the files."}, {"post_id": 78728, "ts": "2026-10-11T12:36:51Z", "hours": 1.4719, "text": "Devlog Post-final Yeah…..so i discovered some more issues. primarily the WhatsApp’s internal safeguard to prevent automated bots from attaching files. had to work around that. should definetly be final devlog tho."}, {"post_id": 78665, "ts": "2026-10-11T07:05:07Z", "hours": 0.4492, "text": "Devlog final: Finished it up and set the GitHub repository, although forgot to record that on lapse. run a test once to ensure it’s working too. Link on the project page"}, {"post_id": 78424, "ts": "2026-10-10T19:29:56Z", "hours": 1.8186, "text": "Devlog 1 Pretty much completed the thing; it took me more time than expected. Since it’s late, I’ll just finish up a few remaining adjustments tomorrow morning and post a GitHub repo. A basic WhatsApp bot that scans the date every time you turn your computer on and will send a wish to any defined number through WhatsApp, if you turn your pc on a second time the same day it won’t trigger. Feel free to use it as a meme with friends or genuinely with family (once i finish up tomorrow). Was kinda a micro-fun-project, nothing serious."}]...
|
Title: Wish sender by @sarthak_jnj | Stardance
De Title: Wish sender by @sarthak_jnj | Stardance
Devlogs:
Devlog 1 Pretty much completed the thing; it took me more time than expected. Since it’s late, I’ll just finish up a few remaining adjustments tomorrow morning and post a GitHub repo. A basic WhatsApp bot that scans the date every time you turn your computer on and will send a wish to any defined number through WhatsApp, if you turn your pc on a second time the same day it won’t trigger. Feel free to use it as a meme with friends or genuinely with family (once i finish up tomorrow). Was kinda a micro-fun-project, nothing serious.
Devlog final: Finished it up and set the GitHub repository, although forgot to record that on lapse. run a test once to ensure it’s working too. Link on the project page
Devlog Post-final Yeah…..so i discovered some more issues. primarily the WhatsApp’s internal safeguard to prevent automated bots from attaching files. had to work around that. should definetly be final devlog tho.
Just worked up with a needed demo to quick install the files.
Ships:
It is supposed to be a bot that automatically runs with your device startup, checks it’s own history and then executes the command to send a specific message & image to a defined contact on WhatsApp. I personally kept it at 9 days as a small fun project to tease a friend during a 9-day long indian traditional festival. The messages, phone number, file location and photos can easily be replaced. The difficulty for me was the new experience, making projects itself is a new thing for me I’ve recently added to my timeline, and i prefer hardware mostly so I’m not much experienced with software work and working with so many libraries, that’s why this project is more of a reminder that “you have to do this today too. just keep an eye if something goes wrong” rather than something dealing with itself in the background. What i am proud of can be that i learnt the JSON thing for this project solely but practice rather than any theory reading. and even tho i used an AI to guide me, i genuinely found a lot of troubles and came up with 3-4 creative workarounds by the end and completely made the structure myself even if i asked the specific commands from AI. For those trying this, it is easy to use as it is, just make sure you already have logged into WhatsApp, adjust the pixel locations according to your device as given in README.md, increase time.sleep() if you think your device/network is taking too long. adjust the file location before running it and don’t use it to actually mess with someone, it’s supposed to be something for a joke, not to irritate anyone (unless they’re a close friend)
It is supposed to be a bot that automatically runs with your device startup, checks it’s own history and then executes the command to send a specific message & image to a defined contact on WhatsApp. I personally kept it at 9 days as a small fun project to tease a friend during a 9-day long indian traditional festival. The messages, phone number, file location and photos can easily be replaced. The difficulty for me was the new experience, making projects itself is a new thing for me I’ve recently added to my timeline, and i prefer hardware mostly so I’m not much experienced with software work and working with so many libraries, that’s why this project is more of a reminder that “you have to do this today too. just keep an eye if something goes wrong” rather than something dealing with itself in the background. What i am proud of can be that i learnt the JSON thing for this project solely but practice rather than any theory reading. and even tho i used an AI to guide me, i genuinely found a lot of troubles and came up with 3-4 creative workarounds by the end and completely made the structure myself even if i asked the specific commands from AI. For those trying this, it is easy to use as it is, just make sure you already have logged into WhatsApp, adjust the pixel locations according to your device as given in README.md, increase time.sleep() if you think your device/network is taking too long. adjust the file location before running it and don’t use it to actually mess with someone, it’s supposed to be something for a joke, not to irritate anyone (unless they’re a close friend) (Fixed the demo)...
|
1793688663.8879604
|
1793775063.8879604
|
|
69048
|
offload by @pch | Stardance
|
pch
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: offload by @pch | Stardance
|
1793760442.2435896
|
1794365242.2435896
|
|
69047
|
Noxpad by @dxrbuilder | Stardance
|
dxrbuilder
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Noxpad by @dxrbuilder | Stardance
|
1793757374.5462341
|
1794362174.5462341
|
|
69046
|
My very own WebOS by @palancarbruno | Stardance
|
palancarbruno
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @palancarbruno | Stard Title: My very own WebOS by @palancarbruno | Stardance...
|
1793757371.9421766
|
1794362171.9421766
|
|
69045
|
alarm by @zaib | Stardance
|
zaib
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: alarm by @zaib | Stardance
|
1793757361.3399794
|
1794362161.3399794
|
|
69044
|
alarm by @zaib | Stardance
|
zaib
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: alarm by @zaib | Stardance
|
1793757359.587035
|
1794362159.587035
|