|
41830
|
My very own WebOS by @kirixber | Stardance
|
kirixber
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @kirixber | Stardance
|
1793148618.0843272
|
1793753418.0843272
|
|
27064
|
Mission #0717 by @vandenelis | Stardance
|
vandenelis
|
1
|
22.0
|
263
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-13T13:01:46Z", "hours": 22.0, "multiplier": 12.13, "payout": 263, "blessing": "neutral", "text": "I made a small app for a one-day adventure. The project features 3 sections: Geoguessr (find the described place and do a challenge there), Color Catch (upload photos of items of certain colors and categories) and Photo Booth (recreate the given photo and upload you version). Originally, it was made as a gift for my partner (and in Lithuanian), but it’s possible to easily modify the system and personalise everything for other users. Every challenge contributes to a global progress bar. The initial idea is to use it for earning the big prize - in my case, TLT concert tickets :D. Since there is no actual virtual prize, the user is free to think of a personalised reward at any point of completion. This was a great way to not only brighten a friend’s day, but also learn how to use React Native and Expo Go. I strictly limited the amount of AI used for that natural “trial and error” process, so Claude Code was used only for minor debugging and certain reference points. The knowledge gained will let me further work on more ambitious app ideas I’ve had for ages! –What to know before trying for yourself– As of now, and, to be fair, probably forever, the production version is made only for Android 7.0+. You can install it in the Github repo Latest Release page. –Possible areas of improvement– If there would be actual users of the app, I could translate everything into English. Make a tutorial/info page. Create a “full-completion” celebrating pop-up.", "repo": "https://github.com/bulviakas/mission-0717", "demo": "https://github.com/bulviakas/mission-0717/releases/tag/v1.0.0"}]...
|
[{"post_id": 46005, "ts": "202 [{"post_id": 46005, "ts": "2026-08-12T21:12:24Z", "hours": 3.9936, "text": "READY TO SHIP!!! The occasion for this amazing app has already long passed and I’m happy to share that the gift was a total success ! ;D Now in between vacation and other side-quests, I’ve managed to tidy everything up enough to be able to share all this with the wider audience. The app itself has undergone minor tweaks - a title on the home page and a custom app icon . Took me quite a bit to figure out how the .apk packages work, though. I’m hoping that I managed to successfully create a signed copy of my creation and it is accessable for everybody in the repo Releases section. Lastly, the easiest, yet the most daunting part was writing the actual README. It might not be the most pleasant looking description in the world, but it’s mine and that’s what matters :) Now fingers crossed I did everything correctly for shipping…"}, {"post_id": 29370, "ts": "2026-07-16T08:43:55Z", "hours": 4.7308, "text": "ALL CHALLENGE SECTIONS DONE The long-dreaded film roll update turned out to be way easier than expected. I really wanted to maximise the Photo Booth experience, that’s why I made the photos show up on the roll after task completion. Now it actually looks like those photo strips in real life! This morning I also built the third section - Color Catch. The concept is to photograph certain objects of certain colours and complete the collection. That is why the rainbow section screen is the perfect way to go! I didn’t really want to overwhelm the adventure more by adding less frequent categories for hunting (like animals or clothing (find a purple animal xd)), so I simplified it to 6 photos from 4 categories (2 for nature and random). The photo upload logic is similar to the Photo challenges. To be fair, it was surprisingly satisfying rewriting the challenge types after it got messy. Instead of separate MapChallenge and PhotoChallenge elements, I put the shared logic into BaseChallenge and just extended that interface with section specific parameters. The only thing is have trouble fixing is the color challenge modal size. For some reason, everywhere except the Expo Go app on my phone, the photos are square ant the window wraps them beautifully. But on my mobile, the aspect ratio is off and there are a lot of free space for no apparent reason. I tried everything, but maybe this is one of those things, that fixes itself up after a short break :)"}, {"post_id": 28893, "ts": "2026-07-15T14:22:46Z", "hours": 8.3133, "text": "FIRST SECTION FINISHED!!! The “Goeguessr” section (where the challenges are to find the described place and complete a quest at it) is now complete. The only missing (though optional) part is the collection of stickers after completion of every task, however, for now I’m moving on to the other part of the adventure. Below there’s a screenshot of one of the final quest version. A for the Photo Booth , I’m super proud of the film roll design for the photo challenges. Nothing too complicated, just playing around with color-matching and margins :p Now I continue to work on creating the actual Booth challenges. The idea is to give an example drawing of a duo pose and the user has to replicate it and upload the photo to the app. Completed challenges display the taken picture on the film roll. So writing their logic is currently the first point on my To-do list."}, {"post_id": 27593, "ts": "2026-07-13T09:48:48Z", "hours": 4.6497, "text": "For these past few days, I’ve been getting familiar with Expo Go and React Native, since I’ve never done mobile or much web development before. Now about the project itself, I’m building a fun little temporary app as a gift for my partner - basically a guide for a whole-day date. The idea is that there are 3 sections: memorable spot searching, photographing specific colours to form a puzzle and replicating silly couple photography poses. For every challenge, the user collects custom design stickers (which are made irl too!) and with enough progress unlocks the big prize - tickets to a favourite concert! Now I’m focusing on building the “Geoguessr” quest. The main screen base is done, map challenge page layout is mostly done, I even managed to successfully implement task completion. Some design touch ups are still due and I actually need to write the challenges. But it’s a great start!"}]...
|
Title: Mission #0717 by @vandenelis | Stardance
D Title: Mission #0717 by @vandenelis | Stardance
Devlogs:
For these past few days, I’ve been getting familiar with Expo Go and React Native, since I’ve never done mobile or much web development before. Now about the project itself, I’m building a fun little temporary app as a gift for my partner - basically a guide for a whole-day date. The idea is that there are 3 sections: memorable spot searching, photographing specific colours to form a puzzle and replicating silly couple photography poses. For every challenge, the user collects custom design stickers (which are made irl too!) and with enough progress unlocks the big prize - tickets to a favourite concert! Now I’m focusing on building the “Geoguessr” quest. The main screen base is done, map challenge page layout is mostly done, I even managed to successfully implement task completion. Some design touch ups are still due and I actually need to write the challenges. But it’s a great start!
FIRST SECTION FINISHED!!! The “Goeguessr” section (where the challenges are to find the described place and complete a quest at it) is now complete. The only missing (though optional) part is the collection of stickers after completion of every task, however, for now I’m moving on to the other part of the adventure. Below there’s a screenshot of one of the final quest version. A for the Photo Booth , I’m super proud of the film roll design for the photo challenges. Nothing too complicated, just playing around with color-matching and margins :p Now I continue to work on creating the actual Booth challenges. The idea is to give an example drawing of a duo pose and the user has to replicate it and upload the photo to the app. Completed challenges display the taken picture on the film roll. So writing their logic is currently the first point on my To-do list.
ALL CHALLENGE SECTIONS DONE The long-dreaded film roll update turned out to be way easier than expected. I really wanted to maximise the Photo Booth experience, that’s why I made the photos show up on the roll after task completion. Now it actually looks like those photo strips in real life! This morning I also built the third section - Color Catch. The concept is to photograph certain objects of certain colours and complete the collection. That is why the rainbow section screen is the perfect way to go! I didn’t really want to overwhelm the adventure more by adding less frequent categories for hunting (like animals or clothing (find a purple animal xd)), so I simplified it to 6 photos from 4 categories (2 for nature and random). The photo upload logic is similar to the Photo challenges. To be fair, it was surprisingly satisfying rewriting the challenge types after it got messy. Instead of separate MapChallenge and PhotoChallenge elements, I put the shared logic into BaseChallenge and just extended that interface with section specific parameters. The only thing is have trouble fixing is the color challenge modal size. For some reason, everywhere except the Expo Go app on my phone, the photos are square ant the window wraps them beautifully. But on my mobile, the aspect ratio is off and there are a lot of free space for no apparent reason. I tried everything, but maybe this is one of those things, that fixes itself up after a short break :)
READY TO SHIP!!! The occasion for this amazing app has already long passed and I’m happy to share that the gift was a total success ! ;D Now in between vacation and other side-quests, I’ve managed to tidy everything up enough to be able to share all this with the wider audience. The app itself has undergone minor tweaks - a title on the home page and a custom app icon . Took me quite a bit to figure out how the .apk packages work, though. I’m hoping that I managed to successfully create a signed copy of my creation and it is accessable for everybody in the repo Releases section. Lastly, the easiest, yet the most daunting part was writing the actual README. It might not be the most pleasant looking description in the world, but it’s mine and that’s what matters :) Now fingers crossed I did everything correctly for shipping…
Ships:
I made a small app for a one-day adventure. The project features 3 sections: Geoguessr (find the described place and do a challenge there), Color Catch (upload photos of items of certain colors and categories) and Photo Booth (recreate the given photo and upload you version). Originally, it was made as a gift for my partner (and in Lithuanian), but it’s possible to easily modify the system and personalise everything for other users. Every challenge contributes to a global progress bar. The initial idea is to use it for earning the big prize - in my case, TLT concert tickets :D. Since there is no actual virtual prize, the user is free to think of a personalised reward at any point of completion. This was a great way to not only brighten a friend’s day, but also learn how to use React Native and Expo Go. I strictly limited the amount of AI used for that natural “trial and error” process, so Claude Code was used only for minor debugging and certain reference points. The knowledge gained will let me further work on more ambitious app ideas I’ve had for ages! –What to know before trying for yourself– As of now, and, to be fair, probably forever, the production version is made only for Android 7.0+. You can install it in the Github repo Latest Release page. –Possible areas of improvement– If there would be actual users of the app, I could translate everything into English. Make a tutorial/info page. Create a “full-completion” celebrating pop-up....
|
1793667017.6446111
|
1793753417.6446111
|
|
12366
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889417.4150853
|
1793753417.4150853
|
|
11668
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889416.6075695
|
1793753416.6075695
|
|
17460
|
David's Website Part 2 by @davidv3767 | Starda David's Website Part 2 by @davidv3767 | Stardance...
|
davidv3767
|
1
|
4.0
|
11
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-31T16:08:47Z", "hours": 4.0, "multiplier": 2.94, "payout": 11, "blessing": "neutral", "text": "I made updates to my website to make it more me! Specifically, I added the math hub, along with a few styling updates to the website. Overall, this functions as a place to get to know me! Hope you enjoy it… also you should complete the challenges (or else… nothing, but please do them for me).", "repo": "https://github.com/davidv3767/portfolio", "demo": "https://davidv3767.github.io/portfolio/index.html"}]...
|
[{"post_id": 38261, "ts": "202 [{"post_id": 38261, "ts": "2026-07-31T15:51:05Z", "hours": 0.3067, "text": "Devlog #5: Just Did the ReadMe What I Did: The ReadMe… ok I’m done! Having some problems, so this version won’t be up for a bit but should be up shortly."}, {"post_id": 29528, "ts": "2026-07-16T14:55:30Z", "hours": 0.6444, "text": "Devlog #4: It Is Done… For Now What I Did: I basically added one more tab yapping about calculators, and then ran out of ideas! So, I AM DONE! If you have any feedback, let me know. (And yes, I am sure there is something I can add, just help me brainstorm!) Github Commit(s): https://github.com/davidv3767/portfolio/commit/6d0881d0b79f643ad743cbb6f94bf98fab8c9584 Next Up: Wait… I have to update the ReadMe! Be right back!"}, {"post_id": 26230, "ts": "2026-07-10T21:55:41Z", "hours": 0.9458, "text": "Devlog #3: Try Out My Little Challenge What I Did: I created a small challenge with some small riddles (along with hints, of course) and multiple pages for you raters to try and solve my challenge! If you do, make sure to type the security key somewhere! Github Commit(s): https://github.com/davidv3767/portfolio/commit/3bb2d6406381e010e63c8724120324b1f967c78f Next Up: In my next session, I will continue coding the wonderful hub!"}, {"post_id": 23591, "ts": "2026-07-06T17:13:04Z", "hours": 1.1678, "text": "Devlog #2: The Rise of the Hub What I Did: I created the main page with a little warm-up, and laid the foundations to my little math hunt I plan to make! I also edited the main website pages to make changes, including fixing the links to blend in with the text! Github Commit(s): https://github.com/davidv3767/portfolio/commit/b2b1ade62fd3d18bbac3da03cf2c2f3e601632aa Next Up: In my next session, I will continue coding the wonderful hub!"}, {"post_id": 23094, "ts": "2026-07-05T20:42:22Z", "hours": 0.5542, "text": "Devlog #1: Unlocking the Hub What I Did: After some edits to previous pages, I created the math hub button needed to create the start of my beautiful math hub! Github Commit(s): https://github.com/davidv3767/portfolio/commit/e003d03746309ec5d91b26e06931d9e147a9bb4a Next Up: In my next session, I will start coding the wonderful hub!"}]...
|
Title: David's Website Part 2 by @davidv3767 | Title: David's Website Part 2 by @davidv3767 | Stardance
Devlogs:
Devlog #1: Unlocking the Hub What I Did: After some edits to previous pages, I created the math hub button needed to create the start of my beautiful math hub! Github Commit(s): https://github.com/davidv3767/portfolio/commit/e003d03746309ec5d91b26e06931d9e147a9bb4a Next Up: In my next session, I will start coding the wonderful hub!
Devlog #2: The Rise of the Hub What I Did: I created the main page with a little warm-up, and laid the foundations to my little math hunt I plan to make! I also edited the main website pages to make changes, including fixing the links to blend in with the text! Github Commit(s): https://github.com/davidv3767/portfolio/commit/b2b1ade62fd3d18bbac3da03cf2c2f3e601632aa Next Up: In my next session, I will continue coding the wonderful hub!
Devlog #3: Try Out My Little Challenge What I Did: I created a small challenge with some small riddles (along with hints, of course) and multiple pages for you raters to try and solve my challenge! If you do, make sure to type the security key somewhere! Github Commit(s): https://github.com/davidv3767/portfolio/commit/3bb2d6406381e010e63c8724120324b1f967c78f Next Up: In my next session, I will continue coding the wonderful hub!
Devlog #4: It Is Done… For Now What I Did: I basically added one more tab yapping about calculators, and then ran out of ideas! So, I AM DONE! If you have any feedback, let me know. (And yes, I am sure there is something I can add, just help me brainstorm!) Github Commit(s): https://github.com/davidv3767/portfolio/commit/6d0881d0b79f643ad743cbb6f94bf98fab8c9584 Next Up: Wait… I have to update the ReadMe! Be right back!
Devlog #5: Just Did the ReadMe What I Did: The ReadMe… ok I’m done! Having some problems, so this version won’t be up for a bit but should be up shortly.
Ships:
I made updates to my website to make it more me! Specifically, I added the math hub, along with a few styling updates to the website. Overall, this functions as a place to get to know me! Hope you enjoy it… also you should complete the challenges (or else… nothing, but please do them for me)....
|
1793667016.4271324
|
1793753416.4271324
|
|
12791
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889415.7989812
|
1793753415.7989812
|
|
41827
|
My very own WebOS by @conoron2110 | Stardance
|
conoron2110
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @conoron2110 | Stardan Title: My very own WebOS by @conoron2110 | Stardance...
|
1793148615.0243104
|
1793753415.0243104
|
|
35564
|
PLEASE DELETE by @Lokpriyanth | Stardance
|
Lokpriyanth
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: PLEASE DELETE by @Lokpriyanth | Stardance
|
1792889414.9903772
|
1793753414.9903772
|
|
30164
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889414.177934
|
1793753414.177934
|
|
24828
|
My first slack bot! by @zachwilkinson-rowe | Stard My first slack bot! by @zachwilkinson-rowe | Stardance...
|
zachwilkinson-rowe
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @zachwilkinson-rowe Title: My first slack bot! by @zachwilkinson-rowe | Stardance...
|
1792889413.3659322
|
1793753413.3659322
|
|
41823
|
My awesome macropad! by @iliassss | Stardance
|
iliassss
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @iliassss | Stardan Title: My awesome macropad! by @iliassss | Stardance...
|
1793148612.9602695
|
1793753412.9602695
|
|
38759
|
Frictionless by @nano | Stardance
|
nano
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @nano | Stardance
|
1792889412.5441146
|
1793753412.5441146
|
|
2686
|
. by @zazzie | Stardance
|
zazzie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: . by @zazzie | Stardance
|
1792889411.716442
|
1793753411.716442
|
|
41820
|
WarioWare Game by @Starry_Night_PJ | Stardance
|
Starry_Night_PJ
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @Starry_Night_PJ | Starda Title: WarioWare Game by @Starry_Night_PJ | Stardance...
|
1793148610.8933187
|
1793753410.8933187
|
|
28659
|
Frictionless by @T0NY | Stardance
|
T0NY
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @T0NY | Stardance
|
1792889410.885038
|
1793753410.885038
|
|
38219
|
yayy game by @marygoat | Stardance
|
marygoat
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: yayy game by @marygoat | Stardance
|
1792889410.0611386
|
1793753410.0611386
|
|
36198
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889409.232016
|
1793753409.232016
|
|
41819
|
Untitled by @Cubit010 | Stardance
|
Cubit010
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Cubit010 | Stardance
|
1793148608.861778
|
1793753408.861778
|
|
11885
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889408.4021335
|
1793753408.4021335
|
|
41818
|
Frictionless by @NIMITHPOOJARY | Stardance
|
NIMITHPOOJARY
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @NIMITHPOOJARY | Stardance
|
1793148607.9359136
|
1793753407.9359136
|
|
12681
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889407.5917838
|
1793753407.5917838
|
|
32671
|
My own site! by @nisarga | Stardance
|
nisarga
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @nisarga | Stardance
|
1792889406.7801516
|
1793753406.7801516
|
|
33863
|
SAT Math Prep App by @avishi39 | Stardance
|
avishi39
|
0
|
2.0
|
0
|
[]
|
[{"post_id": 27797, "ts": "202 [{"post_id": 27797, "ts": "2026-07-13T17:47:32Z", "hours": 0.0, "text": "Devlog #3 Found and fixed the issue with this problem!! When b is the unknown, there are actually two possible x values (+ and -). The code was only listing ONE possible x value, and by extension, respectively, only one possible y value, as the solution. So when trying to input a solution, there was a 50/50 chance that I would put in a correct solution that was not recognized by the program. To fix this, I’ve replaced the single number variable “solution” with a number array “solutions”, and now push each solution (even if just one) to the array; with that, I changed the checkAnswer() function from a one-time comparison to a for-of loop to iterate through all possible solutions and see if the user-provided answer is equivalent to any one. If the randint() function has selected “b” to be the unknown: If the question requires x as the solution, I make the solutions ±x If the question requires y as the solution, I calculate two different y values with ±x This question type is now working. Time to move on to a different one!!"}, {"post_id": 27674, "ts": "2026-07-13T13:35:34Z", "hours": 1.0, "text": "Devlog #2 Finished what I call “problem type C”: a system of equations with one unknown constant– solution will be either the x or y coordinate of the point of intersection. It seems to be working for the most part but there are times where the solution will be completely incorrect. I’ll have to pinpoint which iterations of the question give me that bug (next devlog will fix the bug hopefully)"}, {"post_id": 26813, "ts": "2026-07-11T20:31:30Z", "hours": 1.0, "text": "Made the first kind of question! The app will generate completely randomly-generated (mathematically, not with AI) questions based off this question setup :p"}]...
|
Title: SAT Math Prep App by @avishi39 | Stardance
Title: SAT Math Prep App by @avishi39 | Stardance
Devlogs:
Made the first kind of question! The app will generate completely randomly-generated (mathematically, not with AI) questions based off this question setup :p
Devlog #2 Finished what I call “problem type C”: a system of equations with one unknown constant– solution will be either the x or y coordinate of the point of intersection. It seems to be working for the most part but there are times where the solution will be completely incorrect. I’ll have to pinpoint which iterations of the question give me that bug (next devlog will fix the bug hopefully)
Devlog #3 Found and fixed the issue with this problem!! When b is the unknown, there are actually two possible x values (+ and -). The code was only listing ONE possible x value, and by extension, respectively, only one possible y value, as the solution. So when trying to input a solution, there was a 50/50 chance that I would put in a correct solution that was not recognized by the program. To fix this, I’ve replaced the single number variable “solution” with a number array “solutions”, and now push each solution (even if just one) to the array; with that, I changed the checkAnswer() function from a one-time comparison to a for-of loop to iterate through all possible solutions and see if the user-provided answer is equivalent to any one. If the randint() function has selected “b” to be the unknown: If the question requires x as the solution, I make the solutions ±x If the question requires y as the solution, I calculate two different y values with ±x This question type is now working. Time to move on to a different one!!...
|
1792889405.8702664
|
1793753405.8702664
|
|
41817
|
My awesome macropad! by @Jodybrody | Stardance
|
Jodybrody
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Jodybrody | Starda Title: My awesome macropad! by @Jodybrody | Stardance...
|
1793148605.7542496
|
1793753405.7542496
|
|
6053
|
Untitled project by @endbend | Stardance
|
endbend
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @endbend | Stardance
|
1792889404.7054589
|
1793753404.7054589
|
|
41816
|
"Moravské dráhy" website by @olivercz | St "Moravské dráhy" website by @olivercz | Stardance...
|
olivercz
|
0
|
2.64
|
0
|
[]
|
[{"post_id": 37441, "ts": "202 [{"post_id": 37441, "ts": "2026-07-30T05:49:14Z", "hours": 2.6383, "text": "so its kinda almost done, i just need my friend to finish the list of people on the credit tab, and then ill put it all in there and then ill ship it! easy as that."}]...
|
Title: "Moravské dráhy" website by @oliver Title: "Moravské dráhy" website by @olivercz | Stardance
Devlogs:
so its kinda almost done, i just need my friend to finish the list of people on the credit tab, and then ill put it all in there and then ill ship it! easy as that....
|
1793148603.9530032
|
1793753403.9530032
|
|
47125
|
vaiskiainen-bot by @vaiskiainen | Stardance
|
vaiskiainen
|
0
|
0.8
|
0
|
[]
|
[{"post_id": 45911, "ts": "202 [{"post_id": 45911, "ts": "2026-08-12T17:54:11Z", "hours": 0.2858, "text": "Added an embed and buttons I added an embed and buttons to commands in my personal Discord bot"}, {"post_id": 45858, "ts": "2026-08-12T16:10:14Z", "hours": 0.5131, "text": "Basic bot + slash command working I got the basic structure and a slash command working for my Discord Bot"}]...
|
Title: vaiskiainen-bot by @vaiskiainen | Stardance Title: vaiskiainen-bot by @vaiskiainen | Stardance
Devlogs:
Basic bot + slash command working I got the basic structure and a slash command working for my Discord Bot
Added an embed and buttons I added an embed and buttons to commands in my personal Discord bot...
|
1792889403.863726
|
1793753403.863726
|
|
43468
|
ThirdEye by @shivakaushal | Stardance
|
shivakaushal
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ThirdEye by @shivakaushal | Stardance
|
1792889403.03805
|
1793753403.03805
|
|
41815
|
My own site! by @prasanthbhaireddy22 | Stardance
|
prasanthbhaireddy22
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @prasanthbhaireddy22 | Star Title: My own site! by @prasanthbhaireddy22 | Stardance...
|
1793148601.9094026
|
1793753401.9094026
|
|
41814
|
My awesome macropad! by @kumu | Stardance
|
kumu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @kumu | Stardance
|
1793148601.0136292
|
1793753401.0136292
|
|
48349
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889399.418802
|
1793753399.418802
|
|
41813
|
Hall-Sensor Based Interactive Record Player by @Sn Hall-Sensor Based Interactive Record Player by @Snoopsawg | Stardance...
|
Snoopsawg
|
0
|
3.0
|
0
|
[]
|
[{"post_id": 57280, "ts": "202 [{"post_id": 57280, "ts": "2026-08-29T11:58:28Z", "hours": 1.5711, "text": "Final Product!"}, {"post_id": 38664, "ts": "2026-08-01T05:25:55Z", "hours": 1.4239, "text": "Troubleshooting help! Hey, I just started wiring up my record player I’m using an Arduino Nano, DFPlayer Mini, 8 Ω 0.5 W speaker, and a FAT32 microSD card with 0001.mp3 in the root directory. The speaker makes a brief hum on power-up, but no audio plays. I’m using the DFRobotDFPlayerMini library over SoftwareSerial. My SD Card is 32GB FAT32, and I’ve tried 2 of them. The DFPlayer blinks for a second when the card goes in but when I ran a diagnostic code it said Files Detected: -1 Does anyone know what the problem might be? Arduino pin 11 (SoftwareSerial TX) → 1kΩ resistor → DFPlayer RX DFPlayer TX → Arduino pin 10 (SoftwareSerial RX) DFPlayer VCC → Arduino 5V DFPlayer GND → Arduino GND DFPlayer ↔ Speaker Speaker wire 1 → DFPlayer SPK_1 Speaker wire 2 → DFPlayer SPK_2 Hall sensor (A3144) ↔ ArduinoSensor VCC → Arduino 5V (direct jumper, not through breadboard rail) Sensor GND → Arduino GND (direct jumper) Sensor OUT → Arduino D3 (moved from D2 during testing) DFPlayer BUSY pin ↔ Arduino (added for diagnostics) DFPlayer BUSY (a.k.a. IO2) → Arduino D4```"}]...
|
Title: Hall-Sensor Based Interactive Record Player Title: Hall-Sensor Based Interactive Record Player by @Snoopsawg | Stardance
Devlogs:
Troubleshooting help! Hey, I just started wiring up my record player I’m using an Arduino Nano, DFPlayer Mini, 8 Ω 0.5 W speaker, and a FAT32 microSD card with 0001.mp3 in the root directory. The speaker makes a brief hum on power-up, but no audio plays. I’m using the DFRobotDFPlayerMini library over SoftwareSerial. My SD Card is 32GB FAT32, and I’ve tried 2 of them. The DFPlayer blinks for a second when the card goes in but when I ran a diagnostic code it said Files Detected: -1 Does anyone know what the problem might be? Arduino pin 11 (SoftwareSerial TX) → 1kΩ resistor → DFPlayer RX DFPlayer TX → Arduino pin 10 (SoftwareSerial RX) DFPlayer VCC → Arduino 5V DFPlayer GND → Arduino GND DFPlayer ↔ Speaker Speaker wire 1 → DFPlayer SPK_1 Speaker wire 2 → DFPlayer SPK_2 Hall sensor (A3144) ↔ ArduinoSensor VCC → Arduino 5V (direct jumper, not through breadboard rail) Sensor GND → Arduino GND (direct jumper) Sensor OUT → Arduino D3 (moved from D2 during testing) DFPlayer BUSY pin ↔ Arduino (added for diagnostics) DFPlayer BUSY (a.k.a. IO2) → Arduino D4```
Final Product!...
|
1793148598.6779845
|
1793753398.6779845
|
|
7160
|
My first slack bot! by @Churu | Stardance
|
Churu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Churu | Stardance
|
1792889398.5968914
|
1793753398.5968914
|
|
15091
|
tv-pad by @ThaoVi | Stardance
|
ThaoVi
|
1
|
6.57
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-12T21:36:32Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a a 9-key macropad with an OLED display used for note taking on a 2 in 1 laptop. Default keymap includes copy, cut, paste shortcuts as well as music control. My first hardware project! The designing part was manageable with the guide but the building part was very hard since the assembly guide is incomplete. I realized that my pcb made it so that my oled pins went through the xiao so the xiao is floating haha. Sadly only three keys out of nine work right now, but the oled display works so i plan to make fun animations on it!", "repo": "https://github.com/TVDVT/Macropad-for-2-in-1-laptop-notetaking", "demo": ""}]...
|
[{"post_id": 83981, "ts": "202 [{"post_id": 83981, "ts": "2026-10-29T00:29:43Z", "hours": 2.5692, "text": "Firmware updates All of my 9 keys finally work and i made 3 new layers!"}, {"post_id": 79165, "ts": "2026-10-12T21:04:57Z", "hours": 3.6883, "text": "BUILDING I was working in 5 min intervals for the sticky streak but gave up today and decided to finish everything today :D. While building I realized that my oled display pins went through the XIAO.. so i had to improvise a bit and make the xiao float. I flashed the xiao and i have only 3 out of 9 keys working oops. The hole in my case for the display was also too small so i had to use my soldering iron to melt it and expand it im a bit worried for my lungs tbh Now ima try to figure out how to make the other keys and the oled display work wee Update The screen and all my keys work! I was using qmk keycodes that didn’t work on windows that’s why 6 of the keys weren’t working :D"}, {"post_id": 42785, "ts": "2026-08-07T17:49:47Z", "hours": 0.8653, "text": "Firmware I finished my case so I have been trying to figure out how to do the firmware on QMK, so I thought about switching to KMK since I already know how to code in Python. In the end I just stuck with QMK since I was already almost done. Here is my layout:"}, {"post_id": 26294, "ts": "2026-07-11T00:31:02Z", "hours": 2.3172, "text": "Case I have been working on Onshape to make the case. Getting famiiliar with the platform took a long time before I could do something. I finished the case but I should adjust the USB port, it can be done later. I had to adjust it because I figured that I had flipped XIAO on my PCB but didn’t do it on my 3D model so I wasted a little bit of time. Right now my switches are in place but there still is a strange gap between the key holes and the switches so I have to fix that. I also have to add the LED screen in the assembly. I think I will be done after that!"}, {"post_id": 10762, "ts": "2026-06-17T17:39:20Z", "hours": 0.7964, "text": "I think I’m done we ith the PCB, I moved the XIAO so that it wouldn’t bother the oled display while keeping the OLED centered. For the OLED dimensions I downloaded the footprint from the ressources page, I didn’t see it before."}, {"post_id": 10621, "ts": "2026-06-17T14:00:46Z", "hours": 1.2981, "text": "PCB routing I had to spend a long time trying to fix rounting errors all because I didn’t see two connections.. I’m almost done routing the PCB now. I just need to find the right measurements for the OLED and then get it centered at the top. Then I’ll start the case!"}, {"post_id": 10019, "ts": "2026-06-16T15:45:45Z", "hours": 0.3514, "text": "I added 9 switches for basic keyboard shortcuts and used the matrix layout as recommended in the guide. I also added an OLED display but I don’t know what it will be for yet."}, {"post_id": 6412, "ts": "2026-06-10T19:47:10Z", "hours": 0.2517, "text": "i finished the macropad guide , something went wrong at the end but i will figure it out another time how do i log time for that on hackatime though i have no idea, i’ve been trying to figure it out but i’m so lost"}]...
|
Title: tv-pad by @ThaoVi | Stardance
Devlogs:
i f Title: tv-pad by @ThaoVi | Stardance
Devlogs:
i finished the macropad guide , something went wrong at the end but i will figure it out another time how do i log time for that on hackatime though i have no idea, i’ve been trying to figure it out but i’m so lost
I added 9 switches for basic keyboard shortcuts and used the matrix layout as recommended in the guide. I also added an OLED display but I don’t know what it will be for yet.
PCB routing I had to spend a long time trying to fix rounting errors all because I didn’t see two connections.. I’m almost done routing the PCB now. I just need to find the right measurements for the OLED and then get it centered at the top. Then I’ll start the case!
I think I’m done we ith the PCB, I moved the XIAO so that it wouldn’t bother the oled display while keeping the OLED centered. For the OLED dimensions I downloaded the footprint from the ressources page, I didn’t see it before.
Case I have been working on Onshape to make the case. Getting famiiliar with the platform took a long time before I could do something. I finished the case but I should adjust the USB port, it can be done later. I had to adjust it because I figured that I had flipped XIAO on my PCB but didn’t do it on my 3D model so I wasted a little bit of time. Right now my switches are in place but there still is a strange gap between the key holes and the switches so I have to fix that. I also have to add the LED screen in the assembly. I think I will be done after that!
Firmware I finished my case so I have been trying to figure out how to do the firmware on QMK, so I thought about switching to KMK since I already know how to code in Python. In the end I just stuck with QMK since I was already almost done. Here is my layout:
BUILDING I was working in 5 min intervals for the sticky streak but gave up today and decided to finish everything today :D. While building I realized that my oled display pins went through the XIAO.. so i had to improvise a bit and make the xiao float. I flashed the xiao and i have only 3 out of 9 keys working oops. The hole in my case for the display was also too small so i had to use my soldering iron to melt it and expand it im a bit worried for my lungs tbh Now ima try to figure out how to make the other keys and the oled display work wee Update The screen and all my keys work! I was using qmk keycodes that didn’t work on windows that’s why 6 of the keys weren’t working :D
Firmware updates All of my 9 keys finally work and i made 3 new layers!
Ships:
I made a a 9-key macropad with an OLED display used for note taking on a 2 in 1 laptop. Default keymap includes copy, cut, paste shortcuts as well as music control. My first hardware project! The designing part was manageable with the guide but the building part was very hard since the assembly guide is incomplete. I realized that my pcb made it so that my oled pins went through the xiao so the xiao is floating haha. Sadly only three keys out of nine work right now, but the oled display works so i plan to make fun animations on it!...
|
1793666998.5831122
|
1793753398.5831122
|
|
48331
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889397.792922
|
1793753397.792922
|
|
48325
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889396.9714882
|
1793753396.9714882
|
|
48313
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889396.1570184
|
1793753396.1570184
|
|
48310
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889395.3198428
|
1793753395.3198428
|
|
48307
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792889394.5182517
|
1793753394.5182517
|
|
41812
|
My own site! by @Jodybrody | Stardance
|
Jodybrody
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Jodybrody | Stardance
|
1793148594.1511085
|
1793753394.1511085
|
|
41811
|
My first slack bot! by @dy_dx | Stardance
|
dy_dx
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @dy_dx | Stardance
|
1793148592.0353727
|
1793753392.0353727
|
|
41810
|
Tettris game by @harshaaaaa | Stardance
|
harshaaaaa
|
0
|
1.03
|
0
|
[]
|
[{"post_id": 38728, "ts": "202 [{"post_id": 38728, "ts": "2026-08-01T08:50:58Z", "hours": 0.7506, "text": "did some testing"}, {"post_id": 38689, "ts": "2026-08-01T06:25:50Z", "hours": 0.2833, "text": "Making Tetris Game and adding it more old retro games touch"}]...
|
Title: Tettris game by @harshaaaaa | Stardance
De Title: Tettris game by @harshaaaaa | Stardance
Devlogs:
Making Tetris Game and adding it more old retro games touch
did some testing...
|
1793148591.1225102
|
1793753391.1225102
|
|
48233
|
My own site! by @param_trimbake | Stardance
|
param_trimbake
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T15:26:17Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my personal update. It shows all of my education and everything.", "repo": "https://github.com/param3026/param-space-portfolio", "demo": "https://spacepersonal.netlify.app"}]...
|
[{"post_id": 52418, "ts": "202 [{"post_id": 52418, "ts": "2026-08-22T15:24:57Z", "hours": 1.0414, "text": "Create a personal site that tells about who I am and all that stuff."}]...
|
Title: My own site! by @param_trimbake | Stardance Title: My own site! by @param_trimbake | Stardance
Devlogs:
Create a personal site that tells about who I am and all that stuff.
Ships:
This is my personal update. It shows all of my education and everything....
|
1793666990.654382
|
1793753390.654382
|
|
41808
|
interconnecta by @Ramithu | Stardance
|
Ramithu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: interconnecta by @Ramithu | Stardance
|
1793148587.6572456
|
1793753387.6572456
|
|
39318
|
The Station of Appreciation for Understimulation b The Station of Appreciation for Understimulation by @Brandt | Stardance...
|
Brandt
|
1
|
2.0
|
12
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T19:09:54Z", "hours": 2.0, "multiplier": 6.12, "payout": 12, "blessing": "neutral", "text": "2 hours of coding and I’m fully done with my first browser extension! I mostly made this to teach myself how to make extensions for both Chromium and Firefox (which are actually extremely similar, good to know!) All it does is listen for when a new YouTube tab is opened, checks how many you already have open, and closes it if there are too many. It also uses the storage API to save the user preference of how many they can have open at a time. Hopefully this helps to stop someone’s (and my) future unhealthy binging session. Making this was basically a sequence of copying generic code from Chrome’s docs, making some slight tweaks by looking at docs, rinse and repeat. AI was occasionally used when debugging the insanely vague error messages JS gives.", "repo": "https://codeberg.org/eggers/sau", "demo": "https://codeberg.org/eggers/SAU/releases"}]...
|
[{"post_id": 34227, "ts": "202 [{"post_id": 34227, "ts": "2026-07-24T19:08:57Z", "hours": 2.0336, "text": "2 hours of coding and I’m fully done with my first browser extension! I mostly made this to teach myself how to make extensions for both Chromium and Firefox (which are actually extremely similar, good to know!) All it does is listen for when a new YouTube tab is opened, checks how many you already have open, and closes it if there are too many. It also uses the storage API to save the user preference of how many they can have open at a time. Hopefully this helps to stop someone’s (and my) future unhealthy binging session. Making this was basically a sequence of copying generic code from Chrome’s docs, making some slight tweaks by looking at docs, rinse and repeat. AI was occasionally used when debugging the insanely vague error messages JS gives."}]...
|
Title: The Station of Appreciation for Understimul Title: The Station of Appreciation for Understimulation by @Brandt | Stardance
Devlogs:
2 hours of coding and I’m fully done with my first browser extension! I mostly made this to teach myself how to make extensions for both Chromium and Firefox (which are actually extremely similar, good to know!) All it does is listen for when a new YouTube tab is opened, checks how many you already have open, and closes it if there are too many. It also uses the storage API to save the user preference of how many they can have open at a time. Hopefully this helps to stop someone’s (and my) future unhealthy binging session. Making this was basically a sequence of copying generic code from Chrome’s docs, making some slight tweaks by looking at docs, rinse and repeat. AI was occasionally used when debugging the insanely vague error messages JS gives.
Ships:
2 hours of coding and I’m fully done with my first browser extension! I mostly made this to teach myself how to make extensions for both Chromium and Firefox (which are actually extremely similar, good to know!) All it does is listen for when a new YouTube tab is opened, checks how many you already have open, and closes it if there are too many. It also uses the storage API to save the user preference of how many they can have open at a time. Hopefully this helps to stop someone’s (and my) future unhealthy binging session. Making this was basically a sequence of copying generic code from Chrome’s docs, making some slight tweaks by looking at docs, rinse and repeat. AI was occasionally used when debugging the insanely vague error messages JS gives....
|
1793666987.1205158
|
1793753387.1205158
|
|
41807
|
Frictionless by @Ramithu | Stardance
|
Ramithu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @Ramithu | Stardance
|
1793148585.4885273
|
1793753385.4885273
|
|
41806
|
My first slack bot! by @asiancat01234 | Stardance
|
asiancat01234
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @asiancat01234 | Sta Title: My first slack bot! by @asiancat01234 | Stardance...
|
1793148583.6985936
|
1793753383.6985936
|
|
41805
|
Detonum by @rishabh_bhatia248 | Stardance
|
rishabh_bhatia248
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Detonum by @rishabh_bhatia248 | Stardance
|
1793148582.8438652
|
1793753382.8438652
|
|
26886
|
mast by @toqtu | Stardance
|
toqtu
|
1
|
32.0
|
465
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T18:27:27Z", "hours": 32.0, "multiplier": 14.7, "payout": 465, "blessing": "neutral", "text": "I built a parser for mathematical expressions that turns math input into an abstract syntax tree. From there, you can do things like simplifying or differentiating the expression. Learning about parsing methods was genuinely interesting — once I understood the theory behind lexing and parsing, implementation was fairly straightforward. After getting the basic parsing working, I wanted to build a simple web interface for it. Looking back, the interface ended up taking a lot more time than I expected. During this project I learned a lot about compiler design and language theory as well as web development and application deployment. All in all I am quite happy with the result.", "repo": "https://github.com/fritl/mast", "demo": "https://mast.toqtou.me"}]...
|
[{"post_id": 30710, "ts": "202 [{"post_id": 30710, "ts": "2026-07-18T14:50:01Z", "hours": 9.0289, "text": "Finish Website I added the following to the website Button for evaluation an expression Reload ast and LaTeX only if there is no input for 500ms Tutorial on the Home page to show all features Info page for additional information A footer with info about the build (commit, branch, time) Improve colors especially for light mode I also noticed that my project can’t be cloned on windows because windows doesn’t allow * in filenames. I updated the filenames but old commits still can’t be checked out easily."}, {"post_id": 29568, "ts": "2026-07-16T16:29:13Z", "hours": 10.2408, "text": "New Website Starting Over I wasn’t happy with the website Claude generated for me, so instead of iterating on it further, I decided to build it myself from scratch. Why SolidJS I’m not a web dev. I’ve written JavaScript before, but never really worked with a framework on a personal project. For this one I picked SolidJS, for two reasons: I didn’t want to use React, and I’d heard Solid does similar things but better. Building Everything From Scratch One tradeoff with SolidJS became obvious fast: there’s no real ecosystem of UI libraries to lean on. Every component and every line of CSS in this project, I wrote myself. Dev Setup To make local development easier, I added a Dockerfile and a docker-compose setup. What’s Left The site isn’t finished yet. The main thing still missing is buttons for a few actions."}, {"post_id": 22913, "ts": "2026-07-05T15:34:35Z", "hours": 3.0433, "text": "Web demo I wrote a small API for my project using FastAPI, then handed the code to Claude. After a few iterations, I had a fairly good looking web interface for interacting with my project. I also experimented with making all tree nodes circular. It turns out circles grow very quickly as numbers get bigger, so keeping every circle the same size caused the text to overflow. Switching to ellipses solved this. I also spent some time reducing the number of parentheses in the output to make it more readable."}, {"post_id": 22050, "ts": "2026-07-04T09:28:57Z", "hours": 2.2544, "text": "Differentiation My math program can now symbolically compute the derivative of an expression. Challenges One tricky case was finding the derivative of x^x . Since x^x = e^(x*ln(x)) , rewriting it in that form let the existing exponential and product rules handle it correctly. Restrictions Differentiation works well, but outputs aren’t always in the simplest form. Differentiating (x^2)/2 , for instance, currently gives 0.5*2*x instead of the simplified x . Simplifying this is a lot harder than it looks at first because it is really hard to determine whether an action results in a simpler form or not. Next up I’ll pause the AST experiments here for now. There’s a lot more that could be done, but I want to make it demoable. Next step: a small web UI so people can try it out directly."}, {"post_id": 21399, "ts": "2026-07-03T10:06:38Z", "hours": 1.8942, "text": "Functions and Exponents I’ve just added support for exponents and standard mathematical functions, including sin , cos , tan , ln , log , and sqrt . The implementation was fairly straightforward. The lexer simply tokenizes the ^ character into a Power token. Extending the lexer from there was just a matter of adding the token rule and implementing the corresponding evaluation logic. The Precedence Gotcha I did run into one classic mathematical quirk with my parser rules. Currently, -x^2 is parsed as (-x)^2 because the unary minus operator mistakenly has higher precedence than the exponent. Standard mathematical convention dictates it should be evaluated as -(x^2) . While I plan to fix this in the parser proper, the current workaround is just to use explicit parentheses when writing negative exponents. Next Up: Symbolic Differentiation As a final step for this milestone, I want to implement symbolic differentiation utilizing the chain rule. This will allow the engine to take simple expressions like x^2 or sin(2x) and automatically differentiate them into 2*x and 2*cos(2x) respectively."}, {"post_id": 20247, "ts": "2026-07-01T19:53:28Z", "hours": 1.1408, "text": "Simplification I added some trivial simplification rules to my math parser. It checks for simple rules like x+0 -> x or x+x -> 2x . Of course, you could go way deeper on simplification. My current implementation can’t simplify 2*x + 3*x -> 5*x , since my rules only match syntactically identical terms, not terms that differ by a coefficient. To handle cases like this, you’d need some sort of term-collection method that groups like terms together before combining them. You could also expand expressions first and then simplify, which would let the parser recognize things like (x+1)^2 - (x^2+2x+1) -> 0 . My simple rules won’t bring expressions into their absolute simplest form, and they certainly don’t produce a standardized form that lets you check two expressions for equality. But they do make the program’s output noticeably more readable."}, {"post_id": 19462, "ts": "2026-06-30T19:52:16Z", "hours": 0.9978, "text": "Input evaluation You can now evaluate inputs, e.g. (3+2)*6 outputs 30 . This works by recursively evaluating the AST nodes — operator precedence comes for free from the tree structure. All variables found in the input are collected, and the user is prompted to assign a value to each one. This somewhat defeats the purpose of variables for now, but it’s a stepping stone — variables become essential once symbolic differentiation or a proper UI come into play."}, {"post_id": 19155, "ts": "2026-06-30T12:21:49Z", "hours": 3.2844, "text": "Lexing + Parising For my math parser I implemented the lexer and the parser. The lexer splits the mathematical input into tokens. The recursive descent parser parses those tokens into an abstract syntax tree. For me the most interesting part was learning about different parsing techniques which also tought me a lot about compilers. Next up I will implement the evaluation of expressions to calculate inputs like 2 + 3 * 5. Due to the design of the tree it should already respect pemdas."}]...
|
Title: mast by @toqtu | Stardance
Devlogs:
Lexing Title: mast by @toqtu | Stardance
Devlogs:
Lexing + Parising For my math parser I implemented the lexer and the parser. The lexer splits the mathematical input into tokens. The recursive descent parser parses those tokens into an abstract syntax tree. For me the most interesting part was learning about different parsing techniques which also tought me a lot about compilers. Next up I will implement the evaluation of expressions to calculate inputs like 2 + 3 * 5. Due to the design of the tree it should already respect pemdas.
Input evaluation You can now evaluate inputs, e.g. (3+2)*6 outputs 30 . This works by recursively evaluating the AST nodes — operator precedence comes for free from the tree structure. All variables found in the input are collected, and the user is prompted to assign a value to each one. This somewhat defeats the purpose of variables for now, but it’s a stepping stone — variables become essential once symbolic differentiation or a proper UI come into play.
Simplification I added some trivial simplification rules to my math parser. It checks for simple rules like x+0 -> x or x+x -> 2x . Of course, you could go way deeper on simplification. My current implementation can’t simplify 2*x + 3*x -> 5*x , since my rules only match syntactically identical terms, not terms that differ by a coefficient. To handle cases like this, you’d need some sort of term-collection method that groups like terms together before combining them. You could also expand expressions first and then simplify, which would let the parser recognize things like (x+1)^2 - (x^2+2x+1) -> 0 . My simple rules won’t bring expressions into their absolute simplest form, and they certainly don’t produce a standardized form that lets you check two expressions for equality. But they do make the program’s output noticeably more readable.
Functions and Exponents I’ve just added support for exponents and standard mathematical functions, including sin , cos , tan , ln , log , and sqrt . The implementation was fairly straightforward. The lexer simply tokenizes the ^ character into a Power token. Extending the lexer from there was just a matter of adding the token rule and implementing the corresponding evaluation logic. The Precedence Gotcha I did run into one classic mathematical quirk with my parser rules. Currently, -x^2 is parsed as (-x)^2 because the unary minus operator mistakenly has higher precedence than the exponent. Standard mathematical convention dictates it should be evaluated as -(x^2) . While I plan to fix this in the parser proper, the current workaround is just to use explicit parentheses when writing negative exponents. Next Up: Symbolic Differentiation As a final step for this milestone, I want to implement symbolic differentiation utilizing the chain rule. This will allow the engine to take simple expressions like x^2 or sin(2x) and automatically differentiate them into 2*x and 2*cos(2x) respectively.
Differentiation My math program can now symbolically compute the derivative of an expression. Challenges One tricky case was finding the derivative of x^x . Since x^x = e^(x*ln(x)) , rewriting it in that form let the existing exponential and product rules handle it correctly. Restrictions Differentiation works well, but outputs aren’t always in the simplest form. Differentiating (x^2)/2 , for instance, currently gives 0.5*2*x instead of the simplified x . Simplifying this is a lot harder than it looks at first because it is really hard to determine whether an action results in a simpler form or not. Next up I’ll pause the AST experiments here for now. There’s a lot more that could be done, but I want to make it demoable. Next step: a small web UI so people can try it out directly.
Web demo I wrote a small API for my project using FastAPI, then handed the code to Claude. After a few iterations, I had a fairly good looking web interface for interacting with my project. I also experimented with making all tree nodes circular. It turns out circles grow very quickly as numbers get bigger, so keeping every circle the same size caused the text to overflow. Switching to ellipses solved this. I also spent some time reducing the number of parentheses in the output to make it more readable.
New Website Starting Over I wasn’t happy with the website Claude generated for me, so instead of iterating on it further, I decided to build it myself from scratch. Why SolidJS I’m not a web dev. I’ve written JavaScript before, but never really worked with a framework on a personal project. For this one I picked SolidJS, for two reasons: I didn’t want to use React, and I’d heard Solid does similar things but better. Building Everything From Scratch One tradeoff with SolidJS became obvious fast: there’s no real ecosystem of UI libraries to lean on. Every component and every line of CSS in this project, I wrote myself. Dev Setup To make local development easier, I added a Dockerfile and a docker-compose setup. What’s Left The site isn’t finished yet. The main thing still missing is buttons for a few actions.
Finish Website I added the following to the website Button for evaluation an expression Reload ast and LaTeX only if there is no input for 500ms Tutorial on the Home page to show all features Info page for additional information A footer with info about the build (commit, branch, time) Improve colors especially for light mode I also noticed that my project can’t be cloned on windows because windows doesn’t allow * in filenames. I updated the filenames but old commits still can’t be checked out easily.
Ships:
I built a parser for mathematical expressions that turns math input into an abstract syntax tree. From there, you can do things like simplifying or differentiating the expression. Learning about parsing methods was genuinely interesting — once I understood the theory behind lexing and parsing, implementation was fairly straightforward. After getting the basic parsing working, I wanted to build a simple web interface for it. Looking back, the interface ended up taking a lot more time than I expected. During this project I learned a lot about compiler design and language theory as well as web development and application deployment. All in all I am quite happy with the result....
|
1793666981.5451753
|
1793753381.5451753
|
|
41804
|
Midnight Thoughts by @suyogjadhav | Stardance
|
suyogjadhav
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Midnight Thoughts by @suyogjadhav | Stardan Title: Midnight Thoughts by @suyogjadhav | Stardance...
|
1793148580.7741988
|
1793753380.7741988
|