|
52025
|
MyOs by @Polar | Stardance
|
Polar
|
2
|
11.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T16:45:25Z", "hours": 2.0, "multiplier": 1.98, "payout": 3, "blessing": "neutral", "text": "This is the second version of PolarOs! I upgraded the system by adding 2 new applications, a bottom taskbar that displays all suspended apps, and interactive “be creative” button. Now the dragging system is now smoother, and the whole desktop experience feels much more complete and stable.", "repo": "https://github.com/Polar-404-exe/MyOs", "demo": "https://polar-404-exe.github.io/MyOs/"}, {"ship_num": 2, "ts": "2026-09-02T21:27:02Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a simulation of a WebOS called PolarOS! It features a clean Aero-style layout with a working top bar and a custom desktom wallpaper. I has a real-time clock and 3 draggable apps. Everything is fully responsive and interactive!!", "repo": "https://github.com/Polar-404-exe/MyOs", "demo": "https://polar-404-exe.github.io/MyOs/"}]...
|
[{"post_id": 64317, "ts": "202 [{"post_id": 64317, "ts": "2026-09-08T16:36:41Z", "hours": 1.5169, "text": "I finished “for now” PolarOS. There are 3 draggable apps, in the right bar there are 2 apps, in the bottom bar it visualises the suspended apps and you can interact to the be creative button"}, {"post_id": 60492, "ts": "2026-09-02T21:16:57Z", "hours": 5.0075, "text": "I’ve finished the frist preview, now there are 3 apps and cool draggable windows!"}, {"post_id": 54022, "ts": "2026-08-24T19:24:10Z", "hours": 2.2722, "text": "now you can drag, close, open the welcomewindow!"}, {"post_id": 53371, "ts": "2026-08-23T21:53:53Z", "hours": 1.4033, "text": "I’m working on a WebOS!"}]...
|
Title: MyOs by @Polar | Stardance
Devlogs:
I’m wo Title: MyOs by @Polar | Stardance
Devlogs:
I’m working on a WebOS!
now you can drag, close, open the welcomewindow!
I’ve finished the frist preview, now there are 3 apps and cool draggable windows!
I finished “for now” PolarOS. There are 3 draggable apps, in the right bar there are 2 apps, in the bottom bar it visualises the suspended apps and you can interact to the be creative button
Ships:
I built a simulation of a WebOS called PolarOS! It features a clean Aero-style layout with a working top bar and a custom desktom wallpaper. I has a real-time clock and 3 draggable apps. Everything is fully responsive and interactive!!
This is the second version of PolarOs! I upgraded the system by adding 2 new applications, a bottom taskbar that displays all suspended apps, and interactive “be creative” button. Now the dragging system is now smoother, and the whole desktop experience feels much more complete and stable....
|
1794091849.2200758
|
1794178249.2200758
|
|
25627
|
esp32 jammer by @SohamKaran | Stardance
|
SohamKaran
|
0
|
14.1
|
0
|
[]
|
[{"post_id": 64314, "ts": "202 [{"post_id": 64314, "ts": "2026-09-08T16:32:20Z", "hours": 10.3008, "text": "after getting ll the components i program the board and then started prototyping it on a bread board but after many attemts it finally started working and now i am fixing some issue on pcb in kicad"}, {"post_id": 20590, "ts": "2026-07-02T06:33:18Z", "hours": 0.3336, "text": "hey yesterday I write the code and it took me about a hour but sadly at last moment the electricity gone and although the code saved but the recording not . so my another hour waisted and today I upload the code to GitHub and some other stuff in repo."}, {"post_id": 20078, "ts": "2026-07-01T16:24:45Z", "hours": 1.8333, "text": "on today i mainly work on my GitHub repo i write the readme and upload all required photos and i also write the bom and give all purchase link later i upload the Gerber file and all other essential files"}, {"post_id": 17728, "ts": "2026-06-28T17:16:46Z", "hours": 1.6342, "text": "today i think to build some crazy and decided about to make a esp 32 jammer which can jam Bluetooth and wifi signals at first i watch some tutorials on youtube and then draw the sch later i design the pcb and then add some images .I also create the repo n github"}]...
|
Title: esp32 jammer by @SohamKaran | Stardance
De Title: esp32 jammer by @SohamKaran | Stardance
Devlogs:
today i think to build some crazy and decided about to make a esp 32 jammer which can jam Bluetooth and wifi signals at first i watch some tutorials on youtube and then draw the sch later i design the pcb and then add some images .I also create the repo n github
on today i mainly work on my GitHub repo i write the readme and upload all required photos and i also write the bom and give all purchase link later i upload the Gerber file and all other essential files
hey yesterday I write the code and it took me about a hour but sadly at last moment the electricity gone and although the code saved but the recording not . so my another hour waisted and today I upload the code to GitHub and some other stuff in repo.
after getting ll the components i program the board and then started prototyping it on a bread board but after many attemts it finally started working and now i am fixing some issue on pcb in kicad...
|
1794106229.4752352
|
1794711029.4752352
|
|
53150
|
Yashiro's JSON by @pksmkwe26 | Stardance
|
pksmkwe26
|
1
|
14.0
|
48
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T16:31:26Z", "hours": 14.0, "multiplier": 3.54, "payout": 48, "blessing": "neutral", "text": "I made an Programming Language that uses JSON (You heard it right, JSON!!!) I initially showed the idea to my friend and he was traumatized as hell, So i decided to go with it. And i decided to write the interpreter with Dart to add more spice to the wound. It is a real sucess!! tho i faced many issues with variable declaration and parser, it was solved thankfully. It has two types of variable assigning let and lete, Lete being the executed variable. Loop and Networking were the hardest to do, It also has a tests section to see if something breaks something or not. It has custom function definations too and Math’s Bitwise Operators and stdin support as well. It also has an exception view to see the code crash and i plan to expand this project more. I hope you all like this project as much as my other ones.", "repo": "https://github.com/kwe26/yajson", "demo": "https://github.com/kwe26/yajson/releases/tag/1.0.0"}]...
|
[{"post_id": 64307, "ts": "202 [{"post_id": 64307, "ts": "2026-09-08T16:25:50Z", "hours": 2.0317, "text": "Devlog - 5 (Finale Before Shipping) An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language Networking Added net.server net.server As it suggests it can now open full HTTP Server at designated ports now! You can check out the example in server.yaj in root of the repository. The First Beta and Ship is now READY!!! https://github.com/kwe26/yajson/releases/tag/1.0.0 Test and tinker around with it, Let’s goo!! THANKS, I LOVE YOU ALL >3.!!!"}, {"post_id": 61675, "ts": "2026-09-04T18:22:33Z", "hours": 1.0083, "text": "Devlog - 4 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language Features added - Networking There are now Networking Modules too Networking Allows the User to do Networking tasks with --allow-network-access net.get net.post net.delete net.patch net.put It currently allows passing url, headers and body. Anyways, Thanks for reading Love you all 😘😘"}, {"post_id": 61002, "ts": "2026-09-03T18:17:09Z", "hours": 1.5583, "text": "Devlog - 3 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language New Features Loops Include Multiple .yaj files in one. io.rename <-> io.move More Tests added in tests/ Tests There are now more tests included such as Lists (add,remove,indexOf,getAt,removeAt,set, etc.) I/O Tests Include yaj files Switch Tests VarInVar Tests YaJSON [ { \"func\" : \"print\" , \"$1\" : \"Hello World, love you all!\" } ] Info YaJSON’s interpreter is written in dart, weird isn’t it? Future Goal Networking Shell Access GUI Visualizer . Cya, everyone Love you all ❤️ , Have a nice day/night ahead depending on your timezone and when you are reading right now.!!!"}, {"post_id": 60800, "ts": "2026-09-03T12:15:14Z", "hours": 6.6206, "text": "Devlog - 2 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language New Features Function Define and Calling Them Lists Manipulation File I/O Take Input from User Extended Permissions POE DUMP (Point of Execution my own term) Added Tests Changes lete can now execute and assign to variable and permissions of --allow-rw-access is required for File I/O Operations. The Variables can now be assigned like {hello: {b: 1}} and be accessed like ${hello.b} like this too. It’s too good looking now. - Variable Parser is now universal too. Tests It can conduct tests within the runtime and check for expected output. It also reports the pass percentage too. POE It’s an Counter of Total Executions Being made. It outputs the original parse value of the JSON so it could better used for predicting errors Thanks, Love you all"}, {"post_id": 54675, "ts": "2026-08-25T18:33:12Z", "hours": 2.4442, "text": "Devlog - 1 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language What is Currently Has? Print/Console Clear Basic Arithmatic Operations Declaring Variable and Constants Future Plans Make it to have Tests Making the Interpreter More Stable. Also, i think i can also make an Drag-an-drop Programming Interface. yeah, i created this to traumatize the Internet. And obv, The Interpreter is Writtern in Dart!!"}]...
|
Title: Yashiro's JSON by @pksmkwe26 | Stardanc Title: Yashiro's JSON by @pksmkwe26 | Stardance
Devlogs:
Devlog - 1 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language What is Currently Has? Print/Console Clear Basic Arithmatic Operations Declaring Variable and Constants Future Plans Make it to have Tests Making the Interpreter More Stable. Also, i think i can also make an Drag-an-drop Programming Interface. yeah, i created this to traumatize the Internet. And obv, The Interpreter is Writtern in Dart!!
Devlog - 2 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language New Features Function Define and Calling Them Lists Manipulation File I/O Take Input from User Extended Permissions POE DUMP (Point of Execution my own term) Added Tests Changes lete can now execute and assign to variable and permissions of --allow-rw-access is required for File I/O Operations. The Variables can now be assigned like {hello: {b: 1}} and be accessed like ${hello.b} like this too. It’s too good looking now. - Variable Parser is now universal too. Tests It can conduct tests within the runtime and check for expected output. It also reports the pass percentage too. POE It’s an Counter of Total Executions Being made. It outputs the original parse value of the JSON so it could better used for predicting errors Thanks, Love you all
Devlog - 3 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language New Features Loops Include Multiple .yaj files in one. io.rename <-> io.move More Tests added in tests/ Tests There are now more tests included such as Lists (add,remove,indexOf,getAt,removeAt,set, etc.) I/O Tests Include yaj files Switch Tests VarInVar Tests YaJSON [ { "func" : "print" , "$1" : "Hello World, love you all!" } ] Info YaJSON’s interpreter is written in dart, weird isn’t it? Future Goal Networking Shell Access GUI Visualizer . Cya, everyone Love you all ❤️ , Have a nice day/night ahead depending on your timezone and when you are reading right now.!!!
Devlog - 4 An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language Features added - Networking There are now Networking Modules too Networking Allows the User to do Networking tasks with --allow-network-access net.get net.post net.delete net.patch net.put It currently allows passing url, headers and body. Anyways, Thanks for reading Love you all 😘😘
Devlog - 5 (Finale Before Shipping) An Programming Language where Code is in JSON, YEAH LITERALLY JSON as a Programming Language Networking Added net.server net.server As it suggests it can now open full HTTP Server at designated ports now! You can check out the example in server.yaj in root of the repository. The First Beta and Ship is now READY!!! https://github.com/kwe26/yajson/releases/tag/1.0.0 Test and tinker around with it, Let’s goo!! THANKS, I LOVE YOU ALL >3.!!!
Ships:
I made an Programming Language that uses JSON (You heard it right, JSON!!!) I initially showed the idea to my friend and he was traumatized as hell, So i decided to go with it. And i decided to write the interpreter with Dart to add more spice to the wound. It is a real sucess!! tho i faced many issues with variable declaration and parser, it was solved thankfully. It has two types of variable assigning let and lete, Lete being the executed variable. Loop and Networking were the hardest to do, It also has a tests section to see if something breaks something or not. It has custom function definations too and Math’s Bitwise Operators and stdin support as well. It also has an exception view to see the code crash and i plan to expand this project more. I hope you all like this project as much as my other ones....
|
1794009059.1305983
|
1794095459.1305983
|
|
55136
|
GitMC by @rapidSpeed | Stardance
|
rapidSpeed
|
0
|
1.89
|
0
|
[]
|
[{"post_id": 64293, "ts": "202 [{"post_id": 64293, "ts": "2026-09-08T16:06:49Z", "hours": 1.8883, "text": "Implemented the workflows for java and bedrock! Finding a tunneling service for bedrock is a hassle especially one with no registration and no time limits. I had to settle on pinggy, which does have 1 hour limit, but no registration and easy setup is really attractive For now, i think this is enough and i will start working on the website for documentation."}]...
|
Title: GitMC by @rapidSpeed | Stardance
Devlogs:
Title: GitMC by @rapidSpeed | Stardance
Devlogs:
Implemented the workflows for java and bedrock! Finding a tunneling service for bedrock is a hassle especially one with no registration and no time limits. I had to settle on pinggy, which does have 1 hour limit, but no registration and easy setup is really attractive For now, i think this is enough and i will start working on the website for documentation....
|
1793782467.1399615
|
1794387267.1399615
|
|
42081
|
Vulcan Custom CNC by @GurshanB | Stardance
|
GurshanB
|
0
|
26.79
|
0
|
[]
|
[{"post_id": 64292, "ts": "202 [{"post_id": 64292, "ts": "2026-09-08T16:05:33Z", "hours": 10.1511, "text": "Devlog 4: Negative Progress??? Overview It’s been a while since my last devlog, and quite a few things have changed (mostly taking apart or fixing things rather than anything new ). I took apart the old frame and components, going through the arduous process of cataloging all the parts and screws. There were a bunch of small interference fixes across CAD, such as ball screw misalignment and incorrect COTS parts dimensions I also went through and fixed. I had to make a few test jigs to verify if the corner brackets fit correctly before realizing the dimensions for the little triangle parts that stick out were way off . I also came across some designs for TPU bellows/dust covers and have been playing around with them, but can’t get my print settings right just yet. What’s New Old frame taken apart Fixed ball screw alignment on x and y axis Added additional screws to Gantry structure Adjusted cutouts for Gantry corner brackets CADed table (same as old design, but done on Onshape Continued reformatting and organizing documentation Test prints for 3DP Bellows I’ve been procrastinating working on electronics and dust collection for a while, and I’ll be getting to them soon–never trust my estimates–after I wrap up documentation and 3DP testing. What’s Next Completing research documentation Bellows tests Maybe electronics (likely 2 devlogs from now)"}, {"post_id": 40992, "ts": "2026-08-04T21:23:34Z", "hours": 4.8236, "text": "Devlog #3 The Frame is Done (Mostly) Overview I’ve just about got the frame all CADed and checked for interferences. Just need to add dust collection and limit switches! What’s New Finished the gantry, spindle mount and spoilboard CAD Added fasteners to CAD Updated most lengths to reflect the parts I have Everything gone pretty well, but as I was messing around with the dimensions of the new design, I realized I will likely have to by new aluminum extrusion :(. The ball screws mount closest to the motor sit on the inside of the plates rather than outside as they were before, so I can either add a spacer between the other mount (less rigid) or lengthen the frame (will cost around $100-$200). Welp… I will probably use a spacer for now. What’s Next Limit switches and dust shoe mounting Enclosure design Table + Electronics enclosure design Subsystem design documentation Hope to move to electronics and building soon. Cya!"}, {"post_id": 39589, "ts": "2026-08-02T17:49:41Z", "hours": 4.8672, "text": "Devlog #2: These Ball Screws are Gonna Haunt Me Overview I’ve been working on redesigning the basic frame, and I’ve just about got the Z-axis CAD and ball screw mounting done. I’ve got plans in mind for the rest of the frame, but till then, here’s what I’ve got to show. What’s New Wrapped up the Z-axis CAD, adding the motor and ball screw mounts Laid out the aluminum extrusion base All pretty basic until I got to designing the ball screws for the X and Y axes. A year ago, I foolishly bought the parts for this machine when working with my old design :(. The ball screws were way oversized due to the 3D-printed mount I made (Image attached), and the mount for the screw nut would require me to take apart the whole gantry (screws facing the wrong direction). Cause I don’t want to order new parts, I’ve made a solution using some offset plates; it took a little playing around (second image). What’s Next I’ll be getting back to documentation on my repo soon! Figuring out how to accommodate the ball screw length; they’re still too long for the size of rails I have."}, {"post_id": 39073, "ts": "2026-08-01T19:19:42Z", "hours": 6.9453, "text": "Devlog #1: Documentation and Getting Started on CAD Just got started CADing the Z-axis assembly of my CNC alongside some other COTS parts + documentation. Documentation has taken way longer than I expected :( CAD: BK-15 and BF-15 ball screw mounts (for some reason the parts I have don’t properly match models online, so I made them myself) Started the Z-axis CAD (still need to model the ball screws and motor, but got the rails and carriage done) Configurable linear rails Documentation: Started the documentation for my design process, with info on the general design and linear motion components (check repo for more info; hope to get more on there by my next devlog) I originally attempted this project over a year ago, but didn’t have enough experience and rushed into thing buying some of the wrong parts. Hoping to reuse most of the parts I already have! I attached a photo of my older, unfinished design (imported from Fusion)"}]...
|
Title: Vulcan Custom CNC by @GurshanB | Stardance
Title: Vulcan Custom CNC by @GurshanB | Stardance
Devlogs:
Devlog #1: Documentation and Getting Started on CAD Just got started CADing the Z-axis assembly of my CNC alongside some other COTS parts + documentation. Documentation has taken way longer than I expected :( CAD: BK-15 and BF-15 ball screw mounts (for some reason the parts I have don’t properly match models online, so I made them myself) Started the Z-axis CAD (still need to model the ball screws and motor, but got the rails and carriage done) Configurable linear rails Documentation: Started the documentation for my design process, with info on the general design and linear motion components (check repo for more info; hope to get more on there by my next devlog) I originally attempted this project over a year ago, but didn’t have enough experience and rushed into thing buying some of the wrong parts. Hoping to reuse most of the parts I already have! I attached a photo of my older, unfinished design (imported from Fusion)
Devlog #2: These Ball Screws are Gonna Haunt Me Overview I’ve been working on redesigning the basic frame, and I’ve just about got the Z-axis CAD and ball screw mounting done. I’ve got plans in mind for the rest of the frame, but till then, here’s what I’ve got to show. What’s New Wrapped up the Z-axis CAD, adding the motor and ball screw mounts Laid out the aluminum extrusion base All pretty basic until I got to designing the ball screws for the X and Y axes. A year ago, I foolishly bought the parts for this machine when working with my old design :(. The ball screws were way oversized due to the 3D-printed mount I made (Image attached), and the mount for the screw nut would require me to take apart the whole gantry (screws facing the wrong direction). Cause I don’t want to order new parts, I’ve made a solution using some offset plates; it took a little playing around (second image). What’s Next I’ll be getting back to documentation on my repo soon! Figuring out how to accommodate the ball screw length; they’re still too long for the size of rails I have.
Devlog #3 The Frame is Done (Mostly) Overview I’ve just about got the frame all CADed and checked for interferences. Just need to add dust collection and limit switches! What’s New Finished the gantry, spindle mount and spoilboard CAD Added fasteners to CAD Updated most lengths to reflect the parts I have Everything gone pretty well, but as I was messing around with the dimensions of the new design, I realized I will likely have to by new aluminum extrusion :(. The ball screws mount closest to the motor sit on the inside of the plates rather than outside as they were before, so I can either add a spacer between the other mount (less rigid) or lengthen the frame (will cost around $100-$200). Welp… I will probably use a spacer for now. What’s Next Limit switches and dust shoe mounting Enclosure design Table + Electronics enclosure design Subsystem design documentation Hope to move to electronics and building soon. Cya!
Devlog 4: Negative Progress??? Overview It’s been a while since my last devlog, and quite a few things have changed (mostly taking apart or fixing things rather than anything new ). I took apart the old frame and components, going through the arduous process of cataloging all the parts and screws. There were a bunch of small interference fixes across CAD, such as ball screw misalignment and incorrect COTS parts dimensions I also went through and fixed. I had to make a few test jigs to verify if the corner brackets fit correctly before realizing the dimensions for the little triangle parts that stick out were way off . I also came across some designs for TPU bellows/dust covers and have been playing around with them, but can’t get my print settings right just yet. What’s New Old frame taken apart Fixed ball screw alignment on x and y axis Added additional screws to Gantry structure Adjusted cutouts for Gantry corner brackets CADed table (same as old design, but done on Onshape Continued reformatting and organizing documentation Test prints for 3DP Bellows I’ve been procrastinating working on electronics and dust collection for a while, and I’ll be getting to them soon–never trust my estimates–after I wrap up documentation and 3DP testing. What’s Next Completing research documentation Bellows tests Maybe electronics (likely 2 devlogs from now)...
|
1793818620.9219494
|
1794423420.9219494
|
|
57432
|
productivity macropad by @AbhrajitGogoi | Stardanc productivity macropad by @AbhrajitGogoi | Stardance...
|
AbhrajitGogoi
|
0
|
5.45
|
0
|
[]
|
[{"post_id": 64288, "ts": "202 [{"post_id": 64288, "ts": "2026-09-08T15:49:26Z", "hours": 1.2569, "text": "Phase 3 done Phase 4 started Learnt switch matrix and created a matrix on my own with my own logic about what i learnt. Though the footprints look awfully tacky. Can anyone please give me some feedback. IDK if i’m doing this right or wrong, theres no way to like know and velxio keeps crashing on me with basic switch press program 😭😭. Tomorrow going to route it and export it as a finished practise pcb"}, {"post_id": 63426, "ts": "2026-09-07T08:25:55Z", "hours": 1.1936, "text": "Completed Phase 1 and started phase 2: . Phase 2 includes trying out a real hands on. I tried to use velxio to code a pressed unpressed 4 pin tactile button in circuit python. . . BUT……. This thing jsut had to ragebait me. It took code only in c++ for god knows what reason. It did nothing- literally nothing with my python code. I even checked the documentation. It said it tool python too and my patience just blasted and i brought a c++ code to see if it took c++ or it was a problem with the software as a whole. IT TOOK C++ AND GAVE THE DESIRED RESULT. I lost my temper and said enough for today imma go study- . . if anyone knows any solution please help!!"}, {"post_id": 62225, "ts": "2026-09-05T14:15:35Z", "hours": 1.0153, "text": "Phase 0 over.. today learnt about I2C protocol and about ERC, DRC, vias, gerber, schematic and footprints. also i found a tool called vlexio ( https://velxio.dev/editor/ ) for simulating pcbs. Now I believe i have enough basics down to start messing around electronics. Tomorrow I’ll be starting phase 1. wish me the best!!"}, {"post_id": 61528, "ts": "2026-09-04T14:09:35Z", "hours": 0.9442, "text": "Phase 0: #1 Decided that I need to understand things to really make a worthwhile custom board. So I devised a learning plan with the help of AI. The knowledge gained here would carry forward into my future hardware projects. phase 0 starts with knowing what I am working with and its functioning. Today I learnt about GPIO and about its input and output high and low. Then can floating inputs and how pull up and pull down resistors help keep it fixed. However I do not quite get the secondary functions like ADC, I^2C, SPI and UART. Though matrix switching feels like a really smart move to convert dependence from n^2 to n for amount of pins required. Then came diodes and ghosting which I did not quite get. If anyone has read this far, it’s a request could you please clear this doubt of mine. I want to be more clear about the ghosting and matrix scanning part: matrix scanning works in cycles. The firmware first pulls the row pin to 0 and checks which of the column pins are 0. if the output (row pin) and input (column pin) are both at 0V what part does current play in reading as ghosting is explained as current flows backwards by finding an alternate pathway. If to read both are at 0 potential so no current should flow between them then how does it give a false reading when backward current flows. and Thank you for your help in advance. tomorrow I hope to be looking at quadrature encoders, schematic, footprint, net, trace, via , ERC, DRC and gerber and after that I at least hope I know what part (leds, switches, rotary encoders and oled) goes into which pin. wish me the best!!!! Ganbare"}, {"post_id": 60916, "ts": "2026-09-03T16:02:36Z", "hours": 1.0403, "text": "devlog #1 This was the my first time working with CAD, PCB and any EE thing. I must say it was quite interesting. For starters, I tried to follow along the hackclub basic hackpad tutorial to get a gist of it. summary of what I learnt: PLACED STUFF TOGETHER AND SOMEHOW MADE IT WORK. Now, I will actually start exploring and learning KiCAD, Fusion 360 and EE for real. I hope i do well. Wish me the best!!!!"}]...
|
Title: productivity macropad by @AbhrajitGogoi | S Title: productivity macropad by @AbhrajitGogoi | Stardance
Devlogs:
devlog #1 This was the my first time working with CAD, PCB and any EE thing. I must say it was quite interesting. For starters, I tried to follow along the hackclub basic hackpad tutorial to get a gist of it. summary of what I learnt: PLACED STUFF TOGETHER AND SOMEHOW MADE IT WORK. Now, I will actually start exploring and learning KiCAD, Fusion 360 and EE for real. I hope i do well. Wish me the best!!!!
Phase 0: #1 Decided that I need to understand things to really make a worthwhile custom board. So I devised a learning plan with the help of AI. The knowledge gained here would carry forward into my future hardware projects. phase 0 starts with knowing what I am working with and its functioning. Today I learnt about GPIO and about its input and output high and low. Then can floating inputs and how pull up and pull down resistors help keep it fixed. However I do not quite get the secondary functions like ADC, I^2C, SPI and UART. Though matrix switching feels like a really smart move to convert dependence from n^2 to n for amount of pins required. Then came diodes and ghosting which I did not quite get. If anyone has read this far, it’s a request could you please clear this doubt of mine. I want to be more clear about the ghosting and matrix scanning part: matrix scanning works in cycles. The firmware first pulls the row pin to 0 and checks which of the column pins are 0. if the output (row pin) and input (column pin) are both at 0V what part does current play in reading as ghosting is explained as current flows backwards by finding an alternate pathway. If to read both are at 0 potential so no current should flow between them then how does it give a false reading when backward current flows. and Thank you for your help in advance. tomorrow I hope to be looking at quadrature encoders, schematic, footprint, net, trace, via , ERC, DRC and gerber and after that I at least hope I know what part (leds, switches, rotary encoders and oled) goes into which pin. wish me the best!!!! Ganbare
Phase 0 over.. today learnt about I2C protocol and about ERC, DRC, vias, gerber, schematic and footprints. also i found a tool called vlexio ( https://velxio.dev/editor/ ) for simulating pcbs. Now I believe i have enough basics down to start messing around electronics. Tomorrow I’ll be starting phase 1. wish me the best!!
Completed Phase 1 and started phase 2: . Phase 2 includes trying out a real hands on. I tried to use velxio to code a pressed unpressed 4 pin tactile button in circuit python. . . BUT……. This thing jsut had to ragebait me. It took code only in c++ for god knows what reason. It did nothing- literally nothing with my python code. I even checked the documentation. It said it tool python too and my patience just blasted and i brought a c++ code to see if it took c++ or it was a problem with the software as a whole. IT TOOK C++ AND GAVE THE DESIRED RESULT. I lost my temper and said enough for today imma go study- . . if anyone knows any solution please help!!
Phase 3 done Phase 4 started Learnt switch matrix and created a matrix on my own with my own logic about what i learnt. Though the footprints look awfully tacky. Can anyone please give me some feedback. IDK if i’m doing this right or wrong, theres no way to like know and velxio keeps crashing on me with basic switch press program 😭😭. Tomorrow going to route it and export it as a finished practise pcb...
|
1793890462.6322172
|
1794754462.6322172
|
|
51432
|
WONDER by @samia | Stardance
|
samia
|
1
|
11.53
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T18:40:24Z", "hours": 5.0, "multiplier": 1.38, "payout": 6, "blessing": "neutral", "text": "I make WONDER. I was trying to find some knowledge about the planets in space but when I saw the info on the internet it was so boring to read all of that. So I thought, why don’t I make something that will give info about the planets but in a wonderful way. It makes people curious about what happens next, so the user will read more without getting bored.", "repo": "https://github.com/samia-siddique/wonder", "demo": "https://wonder-space.vercel.app/"}]...
|
[{"post_id": 64285, "ts": "202 [{"post_id": 64285, "ts": "2026-09-08T15:44:26Z", "hours": 6.5264, "text": "The Jupiter page on my Wonder website!"}, {"post_id": 50402, "ts": "2026-08-19T15:48:26Z", "hours": 4.6319, "text": "I created the WONDER, which makes learning about space easier and makes you wonder about the planets and space."}]...
|
Title: WONDER by @samia | Stardance
Devlogs:
I cr Title: WONDER by @samia | Stardance
Devlogs:
I created the WONDER, which makes learning about space easier and makes you wonder about the planets and space.
The Jupiter page on my Wonder website!
Ships:
I make WONDER. I was trying to find some knowledge about the planets in space but when I saw the info on the internet it was so boring to read all of that. So I thought, why don’t I make something that will give info about the planets but in a wonderful way. It makes people curious about what happens next, so the user will read more without getting bored....
|
1793987481.0244024
|
1794073881.0244024
|
|
32654
|
My personal site by @Pery | Stardance
|
Pery
|
4
|
10.0
|
59
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T15:44:08Z", "hours": 1.0, "multiplier": 3.54, "payout": 3, "blessing": "neutral", "text": "update is up and ready!", "repo": "https://github.com/davidperyro-stack/idontknowanything", "demo": "https://idontknowanything.vercel.app/"}, {"ship_num": 2, "ts": "2026-08-10T21:58:14Z", "hours": 4.0, "multiplier": 11.14, "payout": 48, "blessing": "neutral", "text": "Update finally done!", "repo": "https://github.com/davidperyro-stack/idontknowanything", "demo": "https://idontknowanything.vercel.app/"}, {"ship_num": 3, "ts": "2026-08-01T21:23:27Z", "hours": 3.0, "multiplier": 2.73, "payout": 8, "blessing": "neutral", "text": "Update is finally done!! since i improved the design, i think i can finally sleep well and actually show (flex) to my friends about this! (they will call me a nerd but whatever) hope yall like it and i will bring the blahaj back soon!!!", "repo": "https://github.com/davidperyro-stack/idontknowanything", "demo": "https://idontknowanything.vercel.app/"}, {"ship_num": 4, "ts": "2026-07-09T23:10:20Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My personal site is finally done. Because of this project im planning to do more projects because they kinda help me learn new things too! (like HTML and CSS)! hope yall like it! (im not really creative i know)", "repo": "https://github.com/davidperyro-stack/idontknowanything", "demo": "https://idontknowanything.vercel.app/"}]...
|
[{"post_id": 64283, "ts": "202 [{"post_id": 64283, "ts": "2026-09-08T15:42:52Z", "hours": 0.5419, "text": "devlog 4.2# Ive finally added stats about my site! how many days it was working and how many views it got! (special thanks to abacus.jasoncameron.dev for the how many people viewed my site thing)"}, {"post_id": 64253, "ts": "2026-09-08T14:57:39Z", "hours": 0.3589, "text": "devlog 4.1# Came back to my personal site (finally) to add my new projects! and since ive came back to this wonderful project of mine, im thinking to add new stuff too (photo album wont be updated for sure)"}, {"post_id": 44859, "ts": "2026-08-10T21:57:46Z", "hours": 0.7903, "text": "devlog 3.6# Finally finished the update (YES I DID IT. NO MORE PLOT TWISTS). added a button if you get bored of this site (if you get bored i will find you [im joking,please take it as joke]) and added a chess.html with my chess stats"}, {"post_id": 43995, "ts": "2026-08-09T14:09:08Z", "hours": 0.4147, "text": "devlog 3.5# Fixed something inside index.html. The “>|” thing was in middle of the site and his place was under everything added.because he was a bad boy i removed from the existence of this site. (also updated the clock and weather widget with more information)"}, {"post_id": 43268, "ts": "2026-08-08T13:02:35Z", "hours": 1.2294, "text": "devlog 3.4# Update is finally done! I fixed the layout of the about.html because the empty space made it ugly since i added the spotify API. Also added a steam API that shows if im online or if im playing something (of course everyday will appear CS2). The API`s chatGPT helped me to configure them and add them. In rest, in home page, ive added a clock that shows local time of my country and a weather widget that shows the weather of my city. For the weather i used openweather, i added the coordonates of the city and it shows. for the time i searched around the internet and found something simple. No API or anything, just external. edit This update ISNT done yet (because i said so :P)"}, {"post_id": 42548, "ts": "2026-08-07T11:14:28Z", "hours": 0.7089, "text": "devlog 3.3# _———– Wit the help of GPT i finally added the spotify thing. Ive used vercel site to deploy ( i removed the github pages so i have to update the project here too). now i have to change some stuff on css so it will be clean and no empty spaces"}, {"post_id": 42507, "ts": "2026-08-07T09:21:23Z", "hours": 0.4733, "text": "devlog 3.2# The photo album is done (sitll not showing what it looks like cuz i dont want to give any spoliers). Ive added the small story on every picture and a title for them. Now im working on about to make it richer. Ive added my fav quote and im thinking to add what song i listening in real time with spotify API (if i can)"}, {"post_id": 42491, "ts": "2026-08-07T08:10:38Z", "hours": 0.6497, "text": "Devlog 3.1# Updating the site agian. Im about to add a photo album. i wont show the site in this devlog and other devlogs so i wont make any spoiler :D. made a new .html. added to navbar the section easily (copy pasted and then added a link with photo-album.html). Now i added the pictures and im thinking to make it clickable so when you click it its bigger and a small story behind it"}, {"post_id": 39135, "ts": "2026-08-01T21:00:56Z", "hours": 0.4939, "text": "devlog 2.4# Update is done!!! added a a music (only in main page) and fixed the about page. because of “hero” section about page went crazy and renamed the section “about-page”"}, {"post_id": 38835, "ts": "2026-08-01T12:15:03Z", "hours": 0.9933, "text": "devlog 2.3# This is day 2 of updating my first project ever. So the terminal theme worked pretty well. just i needed help to the buttons by using AI cuz im dum. But everything worked fine!! Now (or later) i will add a contact section and probally add something with JS so it will be more interactive"}, {"post_id": 38494, "ts": "2026-07-31T22:05:25Z", "hours": 0.3558, "text": "devlog 2.2 finished index.html. Nothing else to say guys sorry… i will update project.html and about.html,probally i will add contacts too"}, {"post_id": 38427, "ts": "2026-07-31T19:48:14Z", "hours": 0.9778, "text": "Devlog 2.1: After the first ship. I came back to my very first project of mine to update it. Right now (in this picture) im updating the style. after it i will add my other projects. the design of this im trying to make like a terminal style. if it fails, i will try to do minimalistic or something else. right now i deleted everything for style.css and im making it start to finish. Also made some changes to index.html."}, {"post_id": 25589, "ts": "2026-07-09T22:45:39Z", "hours": 0.3631, "text": "update: my head hurts"}, {"post_id": 25576, "ts": "2026-07-09T22:17:45Z", "hours": 0.5833, "text": "FINALLY DID SOMETHING (still looks stupid but with style)"}, {"post_id": 25558, "ts": "2026-07-09T21:36:18Z", "hours": 0.9142, "text": "it looks sooooooooooo stupid qwq"}]...
|
Title: My personal site by @Pery | Stardance
Devl Title: My personal site by @Pery | Stardance
Devlogs:
it looks sooooooooooo stupid qwq
FINALLY DID SOMETHING (still looks stupid but with style)
update: my head hurts
Devlog 2.1: After the first ship. I came back to my very first project of mine to update it. Right now (in this picture) im updating the style. after it i will add my other projects. the design of this im trying to make like a terminal style. if it fails, i will try to do minimalistic or something else. right now i deleted everything for style.css and im making it start to finish. Also made some changes to index.html.
devlog 2.2 finished index.html. Nothing else to say guys sorry… i will update project.html and about.html,probally i will add contacts too
devlog 2.3# This is day 2 of updating my first project ever. So the terminal theme worked pretty well. just i needed help to the buttons by using AI cuz im dum. But everything worked fine!! Now (or later) i will add a contact section and probally add something with JS so it will be more interactive
devlog 2.4# Update is done!!! added a a music (only in main page) and fixed the about page. because of “hero” section about page went crazy and renamed the section “about-page”
Devlog 3.1# Updating the site agian. Im about to add a photo album. i wont show the site in this devlog and other devlogs so i wont make any spoiler :D. made a new .html. added to navbar the section easily (copy pasted and then added a link with photo-album.html). Now i added the pictures and im thinking to make it clickable so when you click it its bigger and a small story behind it
devlog 3.2# The photo album is done (sitll not showing what it looks like cuz i dont want to give any spoliers). Ive added the small story on every picture and a title for them. Now im working on about to make it richer. Ive added my fav quote and im thinking to add what song i listening in real time with spotify API (if i can)
devlog 3.3# _———– Wit the help of GPT i finally added the spotify thing. Ive used vercel site to deploy ( i removed the github pages so i have to update the project here too). now i have to change some stuff on css so it will be clean and no empty spaces
devlog 3.4# Update is finally done! I fixed the layout of the about.html because the empty space made it ugly since i added the spotify API. Also added a steam API that shows if im online or if im playing something (of course everyday will appear CS2). The API`s chatGPT helped me to configure them and add them. In rest, in home page, ive added a clock that shows local time of my country and a weather widget that shows the weather of my city. For the weather i used openweather, i added the coordonates of the city and it shows. for the time i searched around the internet and found something simple. No API or anything, just external. edit This update ISNT done yet (because i said so :P)
devlog 3.5# Fixed something inside index.html. The “>|” thing was in middle of the site and his place was under everything added.because he was a bad boy i removed from the existence of this site. (also updated the clock and weather widget with more information)
devlog 3.6# Finally finished the update (YES I DID IT. NO MORE PLOT TWISTS). added a button if you get bored of this site (if you get bored i will find you [im joking,please take it as joke]) and added a chess.html with my chess stats
devlog 4.1# Came back to my personal site (finally) to add my new projects! and since ive came back to this wonderful project of mine, im thinking to add new stuff too (photo album wont be updated for sure)
devlog 4.2# Ive finally added stats about my site! how many days it was working and how many views it got! (special thanks to abacus.jasoncameron.dev for the how many people viewed my site thing)
Ships:
My personal site is finally done. Because of this project im planning to do more projects because they kinda help me learn new things too! (like HTML and CSS)! hope yall like it! (im not really creative i know)
Update is finally done!! since i improved the design, i think i can finally sleep well and actually show (flex) to my friends about this! (they will call me a nerd but whatever) hope yall like it and i will bring the blahaj back soon!!!
Update finally done!
update is up and ready!...
|
1794070525.5196507
|
1794156925.5196507
|
|
27713
|
Project axis by @Small_doge | Stardance
|
Small_doge
|
0
|
3.28
|
0
|
[]
|
[{"post_id": 64273, "ts": "202 [{"post_id": 64273, "ts": "2026-09-08T15:27:58Z", "hours": 0.3842, "text": "I finally found the idea. First I will be using the JLCCNC cnc turning fabrication from aluminium. Second the idea is I will machine the pen and then make a M5 hole into it which will cover the hole + hold the clip from sheet metal that I will be bending with the help of a 3d printed bending guide. I hope this will work and I do think It’s a good idea, but first I’ll print this prototype :)."}, {"post_id": 63763, "ts": "2026-09-07T18:41:16Z", "hours": 0.4336, "text": "I 3d printed it and I really like it, but still the main thing is and I still need to think about the most is how to make the clip, but mainly should I have the top open or closed and many more ideas to think about. I also printed it in a bad orientation, definitely a good acknowledgment."}, {"post_id": 62425, "ts": "2026-09-05T19:28:50Z", "hours": 0.3575, "text": "It is ready to print version 2 of the pen and version 3 of the cartridge top cap. I added the clip and thought of a really exciting and interesting idea, that is making the top as a thread and adding a bolt like a m2 or a m3."}, {"post_id": 61715, "ts": "2026-09-04T19:10:44Z", "hours": 0.3836, "text": "All over again or is it? Yea, so I 3d printed the 1st prototype and I understand it now. First it was way too small and the thickness was so slim my printer almost couldn’t print it. After some time I was like how will I fit a spring in it, so I just made it like a normal pen without any fancy mechanism, just the simplest of them all. ( I do still need to make the clip for it )"}, {"post_id": 60927, "ts": "2026-09-03T16:22:13Z", "hours": 0.3336, "text": "I got a idea (making the bolt, which is the thing you use to slide it from a m2 bolt), so I tested it and it was bad, because I would have to have a bigger hole on the pen. Then I got a better idea and that is making the top cap as a barrel too, so 2 in 1. Then I adjusted some things and send it off to my printer."}, {"post_id": 60369, "ts": "2026-09-02T17:45:18Z", "hours": 0.925, "text": "First I decided on a bolt action pen for simplicity and some people like it more, also as I said before about the options I chose the first one which means it will have a 3d printed cap, because I don’t want the pen to be thick. Then i modeled some things around the pen, like a barrel onto the cartridge and the barrel cutout, which went trough some iterations. That’s all."}, {"post_id": 59571, "ts": "2026-09-01T13:51:44Z", "hours": 0.4656, "text": "Let me get you back to speed, so this was a project that I started before, but only put a little care into, so now I will do what I started. I bought pen cartridges with my own money, so i can model and test easily, so I did, also before I modeled how I want the pen to look like. In this blog I modeled the pen cartridge, that I now have at home and I modeled the top cap for one of my ideas. There are two ideas on the right is the cartridge with a 3d printed top cap and on the left is the original cap that it came with, both of those will go into my pen, but I still don’t know which one, so I’ll need to decide later, for now that’s all."}]...
|
Title: Project axis by @Small_doge | Stardance
De Title: Project axis by @Small_doge | Stardance
Devlogs:
Let me get you back to speed, so this was a project that I started before, but only put a little care into, so now I will do what I started. I bought pen cartridges with my own money, so i can model and test easily, so I did, also before I modeled how I want the pen to look like. In this blog I modeled the pen cartridge, that I now have at home and I modeled the top cap for one of my ideas. There are two ideas on the right is the cartridge with a 3d printed top cap and on the left is the original cap that it came with, both of those will go into my pen, but I still don’t know which one, so I’ll need to decide later, for now that’s all.
First I decided on a bolt action pen for simplicity and some people like it more, also as I said before about the options I chose the first one which means it will have a 3d printed cap, because I don’t want the pen to be thick. Then i modeled some things around the pen, like a barrel onto the cartridge and the barrel cutout, which went trough some iterations. That’s all.
I got a idea (making the bolt, which is the thing you use to slide it from a m2 bolt), so I tested it and it was bad, because I would have to have a bigger hole on the pen. Then I got a better idea and that is making the top cap as a barrel too, so 2 in 1. Then I adjusted some things and send it off to my printer.
All over again or is it? Yea, so I 3d printed the 1st prototype and I understand it now. First it was way too small and the thickness was so slim my printer almost couldn’t print it. After some time I was like how will I fit a spring in it, so I just made it like a normal pen without any fancy mechanism, just the simplest of them all. ( I do still need to make the clip for it )
It is ready to print version 2 of the pen and version 3 of the cartridge top cap. I added the clip and thought of a really exciting and interesting idea, that is making the top as a thread and adding a bolt like a m2 or a m3.
I 3d printed it and I really like it, but still the main thing is and I still need to think about the most is how to make the clip, but mainly should I have the top open or closed and many more ideas to think about. I also printed it in a bad orientation, definitely a good acknowledgment.
I finally found the idea. First I will be using the JLCCNC cnc turning fabrication from aluminium. Second the idea is I will machine the pen and then make a M5 hole into it which will cover the hole + hold the clip from sheet metal that I will be bending with the help of a 3d printed bending guide. I hope this will work and I do think It’s a good idea, but first I’ll print this prototype :)....
|
1793393373.1416795
|
1793998173.1416795
|
|
6439
|
Assembly by @hippoprogrammer | Stardance
|
hippoprogrammer
|
0
|
1.12
|
0
|
[]
|
[{"post_id": 6427, "ts": "2026 [{"post_id": 6427, "ts": "2026-06-10T20:14:44Z", "hours": 1.1175, "text": "Let’s make a reasonable development cycle x3 Having already created set deadlines for the various planned phases of my roadmap, I neglected to check if said deadlines were reasonable. Suffice to say, they very much were not! I’ve ended up delaying many of the planned features in v0.1.0 to v0.1.1 in the hopes of just getting something out there, but rest assured they will all be done! eventually"}]...
|
Title: Assembly by @hippoprogrammer | Stardance
D Title: Assembly by @hippoprogrammer | Stardance
Devlogs:
Let’s make a reasonable development cycle x3 Having already created set deadlines for the various planned phases of my roadmap, I neglected to check if said deadlines were reasonable. Suffice to say, they very much were not! I’ve ended up delaying many of the planned features in v0.1.0 to v0.1.1 in the hopes of just getting something out there, but rest assured they will all be done! eventually...
|
1794091867.8508618
|
1794696667.8508618
|
|
51711
|
Pratyush's Personal Portfolio Project by @RedP Pratyush's Personal Portfolio Project by @RedPanda | Stardance...
|
RedPanda
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T15:40:53Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Personal Portfolio! It’s cute,full of red pandas and has some JS. It was quite fun making it and all the pixel art is handmade by yours truly!", "repo": "https://github.com/Pratyush-M-code/Pratyush-M-code.github.io", "demo": "https://pratyush-m-code.github.io/"}]...
|
[{"post_id": 64269, "ts": "202 [{"post_id": 64269, "ts": "2026-09-08T15:23:37Z", "hours": 3.1611, "text": "Final Devlog! Finished with the final touches and added all my own information! I’m going to ship it!"}, {"post_id": 53994, "ts": "2026-08-24T18:39:20Z", "hours": 2.4333, "text": "DevLog #3 What I did. Made a cute red panda and redrew the bamboo multiple times to make it fit continuously. Made said Bamboo, gave up and then proceeded to take the one good section and copy it to make the pole. Finally figured out how to use flex CSS and fixed the margins and padding to make it look smooth as pixels. FINALLY DEPLOYED IT :- https://pratyush-m-code.github.io/ What I learned. Classes and ids are infact ridiculous, i am not going insane. I would like to add that everything should be made into a class and ids should be ** abolished ** . Flex CSS is pretty cool and solves problems that I didn’t know existed like the margins of my tree-project div being too wide that the text cut off. Lorem ipsum text is a life saver. There is no such thing as too much organization. Things can always be over complicated. P.S. Operas while coding are fantastic. Design Ok the panda does not add much, but i expect with further additions, the pixel jungle theme will begin to shine. I might dial down the colours tho. TODO Fix the scroll wheel as it looks hideous Add a lil leaves falling off from the mouse animation Add text about me,myself and I. Fix the test header and footer"}, {"post_id": 51701, "ts": "2026-08-21T15:05:29Z", "hours": 1.1094, "text": "Added base HTML, CSS files and made pixelateCorner Function. Worked on the base of the CSS file,fixing the colour scheme and making a proper base for future stuff. Made the basic website HTML and finalized the ids and classes of the divs (yet to be added). And made a pixlateCorner function to make the divs look nicer and more on theme."}, {"post_id": 50946, "ts": "2026-08-20T12:41:46Z", "hours": 1.1494, "text": "Devlog #1 - Initalized html, fixed hackatime and fooled around with css to make a cohesive theme."}]...
|
Title: Pratyush's Personal Portfolio Project b Title: Pratyush's Personal Portfolio Project by @RedPanda | Stardance
Devlogs:
Devlog #1 - Initalized html, fixed hackatime and fooled around with css to make a cohesive theme.
Added base HTML, CSS files and made pixelateCorner Function. Worked on the base of the CSS file,fixing the colour scheme and making a proper base for future stuff. Made the basic website HTML and finalized the ids and classes of the divs (yet to be added). And made a pixlateCorner function to make the divs look nicer and more on theme.
DevLog #3 What I did. Made a cute red panda and redrew the bamboo multiple times to make it fit continuously. Made said Bamboo, gave up and then proceeded to take the one good section and copy it to make the pole. Finally figured out how to use flex CSS and fixed the margins and padding to make it look smooth as pixels. FINALLY DEPLOYED IT :- https://pratyush-m-code.github.io/ What I learned. Classes and ids are infact ridiculous, i am not going insane. I would like to add that everything should be made into a class and ids should be ** abolished ** . Flex CSS is pretty cool and solves problems that I didn’t know existed like the margins of my tree-project div being too wide that the text cut off. Lorem ipsum text is a life saver. There is no such thing as too much organization. Things can always be over complicated. P.S. Operas while coding are fantastic. Design Ok the panda does not add much, but i expect with further additions, the pixel jungle theme will begin to shine. I might dial down the colours tho. TODO Fix the scroll wheel as it looks hideous Add a lil leaves falling off from the mouse animation Add text about me,myself and I. Fix the test header and footer
Final Devlog! Finished with the final touches and added all my own information! I’m going to ship it!
Ships:
I made a Personal Portfolio! It’s cute,full of red pandas and has some JS. It was quite fun making it and all the pixel art is handmade by yours truly!...
|
1794066443.8261876
|
1794152843.8261876
|
|
54752
|
WebOS 1 by @rayyans4890 | Stardance
|
rayyans4890
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T18:42:54Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a webos for a stardance project and i must say that i am pretty satisfied with this project for now i plan on updating this project and making this one piece themed by adding the wdigets based on one piece characters i am a very big fan of one piece so when i unlock webos 2 i will actually start putting more work in this such as adding more features and maybe base it around one piece more.", "repo": "https://github.com/rayyans4890-png/WebOS", "demo": "https://rayyans4890-png.github.io/WebOS/"}]...
|
[{"post_id": 64267, "ts": "202 [{"post_id": 64267, "ts": "2026-09-08T15:22:51Z", "hours": 1.1847, "text": "Completed all of the features and updated the javascrpit im gonna update the github and finally ship it now"}, {"post_id": 64222, "ts": "2026-09-08T14:04:01Z", "hours": 1.2889, "text": "Finally completed the CSS now gonna work alittle on the features in javascript and then im gonna ship"}, {"post_id": 62132, "ts": "2026-09-05T11:59:24Z", "hours": 1.5222, "text": "Started working on the project but for some reason the backgroup pic aint showing up i decided to round the corners for my widgets and plan on improving the project as a whole tmrw"}]...
|
Title: WebOS 1 by @rayyans4890 | Stardance
Devlog Title: WebOS 1 by @rayyans4890 | Stardance
Devlogs:
Started working on the project but for some reason the backgroup pic aint showing up i decided to round the corners for my widgets and plan on improving the project as a whole tmrw
Finally completed the CSS now gonna work alittle on the features in javascript and then im gonna ship
Completed all of the features and updated the javascrpit im gonna update the github and finally ship it now
Ships:
I made a webos for a stardance project and i must say that i am pretty satisfied with this project for now i plan on updating this project and making this one piece themed by adding the wdigets based on one piece characters i am a very big fan of one piece so when i unlock webos 2 i will actually start putting more work in this such as adding more features and maybe base it around one piece more....
|
1793775033.8997126
|
1794639033.8997126
|
|
56701
|
MIDL by @ibrahim- | Stardance
|
ibrahim-
|
2
|
14.0
|
228
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T15:22:22Z", "hours": 7.0, "multiplier": 16.78, "payout": 119, "blessing": "neutral", "text": "I present MIDL. I’ve always wanted to play old flash games from my childhood, but since 99% websites do not allow you to export save files, I would always lose my progress. MIDL aims to solve that. . All games were taken from InternetArchive, effort was made to ensure no site locked games were included (no site locks were bypassed). . Almost all of the features that the reviewers mentioned in the last ship have been implemented! . Features Flash emulation via Ruffle Downloading and loading of game save files Search function ANIMATIONS! Cloud save file storage (YOU CAN SAVE YOUR SAVE FILES IN THE CLOUD) Accounts system LEADERBOARD!! (with custom MIDL points, although not all games support our leaderboard) Player controls (play, pause fullscreen) Security (popup blocking) You can now upload your own SWF file! . Planned Features Game snapshot as a save file Emulators!", "repo": "https://github.com/ibfactor/midl", "demo": "https://midl.ibfr.org/"}, {"ship_num": 2, "ts": "2026-09-04T06:33:19Z", "hours": 7.0, "multiplier": 14.95, "payout": 109, "blessing": "neutral", "text": "I present MIDL. I’ve always wanted to play old flash games from my childhood, but since 99% websites do not allow you to export save files, I would always lose my progress. MIDL aims to solve that. . All games were taken from InternetArchive, effort was made to ensure no site locked games were included (no site locks were bypassed). . Features Flash emulation via Ruffle Downloading and loading of game save files Search function ANIMATIONS! Planned Features Saving game state (as it is) Cloud storage functionality Retro console emulators!", "repo": "https://github.com/ibfactor/midl", "demo": "https://midl.ibfr.org/"}]...
|
[{"post_id": 64264, "ts": "202 [{"post_id": 64264, "ts": "2026-09-08T15:19:16Z", "hours": 0.7286, "text": "Devlog #15 Added finishing touches, and more importantly (something I forgot to mention earlier), you can now upload and play your own .SWF files!"}, {"post_id": 64202, "ts": "2026-09-08T12:58:56Z", "hours": 0.4606, "text": "Devlog #14 Finally fixed the extra space issue and squashed a few visual bugs"}, {"post_id": 64107, "ts": "2026-09-08T09:34:56Z", "hours": 0.2803, "text": "Devlog #13 Need your advice I do not know what do to with this extra space. Experimented for like 15 minutes but idk atp, nothing looked good. or or or I could leave it as it is."}, {"post_id": 64061, "ts": "2026-09-08T06:07:13Z", "hours": 0.7936, "text": "Devlog #12 Leaderboards are here Fixed a bug that was introduced in the previous log (save feature was not working as expected)."}, {"post_id": 63710, "ts": "2026-09-07T17:24:51Z", "hours": 0.9033, "text": "Devlog #11 The my account page is finally complete. I also implemented max (high) score calculation, just need to make the leaderboard now. MP (MIDL points) are different from in-game points, and use a special algorithm for their calculation. (multiplying all high scores in all levels, by the number of levels, and multiplying that by the number of stars gained, all of these values depend on the game of course)"}, {"post_id": 63581, "ts": "2026-09-07T14:34:19Z", "hours": 0.2656, "text": "Devlog #10 I’ve added the following games (on the request of @NC and @Definitly-Not-Me ): Dragon Ball Z vs Naruto One Piece vs Naruto Learn to Fly"}, {"post_id": 63551, "ts": "2026-09-07T13:56:37Z", "hours": 1.4186, "text": "Devlog #9 Finally completed the cloud save feature! Used Express and LowDB in the backend. Next Up: add requested games, squash bugs, and most importantly, add a leaderboard!"}, {"post_id": 62212, "ts": "2026-09-05T14:01:31Z", "hours": 2.2394, "text": "Devlog #8 Finally created the authentication system using Express & LowDB, not committing to GitHub yet since I still have to set up the server. I’ve seen all the reviews and will implement them. Also added the close buttons to modals. The requested games will be added in the next devlog. :)"}, {"post_id": 60891, "ts": "2026-09-03T15:17:26Z", "hours": 0.3594, "text": "Devlog #7 Finally implemented the save manager"}, {"post_id": 60853, "ts": "2026-09-03T14:11:47Z", "hours": 2.2514, "text": "Devlog #6 I fixed a few bugs, added a few animations, and most importantly… Wasted 2 whole hours trying to get ruffle player state to restore after reloads…… which failed So plan B, we use the actual save files."}, {"post_id": 60299, "ts": "2026-09-02T16:00:31Z", "hours": 0.8422, "text": "Devlog #5 Done with the Ruffle player, added play/pause controls, fullscreen, and developed a custom solution for saving ruffle state (this is really exciting ), so now we can have flash games with cloud state saves :3"}, {"post_id": 60187, "ts": "2026-09-02T12:43:37Z", "hours": 1.2194, "text": "Devlog #4 Done with the game page and some animations <3 I need your help now, comment ANY obscure flash games you used to play so that they can be archived"}, {"post_id": 59766, "ts": "2026-09-01T18:13:57Z", "hours": 1.0086, "text": "Devlog #3 Finally done with some animations and the search bar"}, {"post_id": 59598, "ts": "2026-09-01T14:43:41Z", "hours": 1.3175, "text": "Devlog #2 Done with adding the games, the images, and styled the main home page. now I need your help, comment any obscure flash game you used to play so that it can be added and archived"}, {"post_id": 58977, "ts": "2026-08-31T15:32:12Z", "hours": 0.2656, "text": "I need YOUR help Do you know of any obscure flash games you used to play? Comment it so it can be added Done with the base styles and structure + created and filled the games database partially"}]...
|
Title: MIDL by @ibrahim- | Stardance
Devlogs:
I n Title: MIDL by @ibrahim- | Stardance
Devlogs:
I need YOUR help Do you know of any obscure flash games you used to play? Comment it so it can be added Done with the base styles and structure + created and filled the games database partially
Devlog #2 Done with adding the games, the images, and styled the main home page. now I need your help, comment any obscure flash game you used to play so that it can be added and archived
Devlog #3 Finally done with some animations and the search bar
Devlog #4 Done with the game page and some animations <3 I need your help now, comment ANY obscure flash games you used to play so that they can be archived
Devlog #5 Done with the Ruffle player, added play/pause controls, fullscreen, and developed a custom solution for saving ruffle state (this is really exciting ), so now we can have flash games with cloud state saves :3
Devlog #6 I fixed a few bugs, added a few animations, and most importantly… Wasted 2 whole hours trying to get ruffle player state to restore after reloads…… which failed So plan B, we use the actual save files.
Devlog #7 Finally implemented the save manager
Devlog #8 Finally created the authentication system using Express & LowDB, not committing to GitHub yet since I still have to set up the server. I’ve seen all the reviews and will implement them. Also added the close buttons to modals. The requested games will be added in the next devlog. :)
Devlog #9 Finally completed the cloud save feature! Used Express and LowDB in the backend. Next Up: add requested games, squash bugs, and most importantly, add a leaderboard!
Devlog #10 I’ve added the following games (on the request of @NC and @Definitly-Not-Me ): Dragon Ball Z vs Naruto One Piece vs Naruto Learn to Fly
Devlog #11 The my account page is finally complete. I also implemented max (high) score calculation, just need to make the leaderboard now. MP (MIDL points) are different from in-game points, and use a special algorithm for their calculation. (multiplying all high scores in all levels, by the number of levels, and multiplying that by the number of stars gained, all of these values depend on the game of course)
Devlog #12 Leaderboards are here Fixed a bug that was introduced in the previous log (save feature was not working as expected).
Devlog #13 Need your advice I do not know what do to with this extra space. Experimented for like 15 minutes but idk atp, nothing looked good. or or or I could leave it as it is.
Devlog #14 Finally fixed the extra space issue and squashed a few visual bugs
Devlog #15 Added finishing touches, and more importantly (something I forgot to mention earlier), you can now upload and play your own .SWF files!
Ships:
I present MIDL. I’ve always wanted to play old flash games from my childhood, but since 99% websites do not allow you to export save files, I would always lose my progress. MIDL aims to solve that. . All games were taken from InternetArchive, effort was made to ensure no site locked games were included (no site locks were bypassed). . Features Flash emulation via Ruffle Downloading and loading of game save files Search function ANIMATIONS! Planned Features Saving game state (as it is) Cloud storage functionality Retro console emulators!
I present MIDL. I’ve always wanted to play old flash games from my childhood, but since 99% websites do not allow you to export save files, I would always lose my progress. MIDL aims to solve that. . All games were taken from InternetArchive, effort was made to ensure no site locked games were included (no site locks were bypassed). . Almost all of the features that the reviewers mentioned in the last ship have been implemented! . Features Flash emulation via Ruffle Downloading and loading of game save files Search function ANIMATIONS! Cloud save file storage (YOU CAN SAVE YOUR SAVE FILES IN THE CLOUD) Accounts system LEADERBOARD!! (with custom MIDL points, although not all games support our leaderboard) Player controls (play, pause fullscreen) Security (popup blocking) You can now upload your own SWF file! . Planned Features Game snapshot as a save file Emulators!...
|
1794009073.0616965
|
1794095473.0616965
|
|
43778
|
BobAI by @Oleksandr | Stardance
|
Oleksandr
|
1
|
12.37
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T13:13:01Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "BobAI — a chatbot on my site. A GitHub Pages frontend (with a click-to-reveal welcome screen) talks to a FastAPI backend hosted on Hack Club Nest. The backend calls Hack Club’s HCAI API (routed through OpenRouter, currently running Gemini 2.5 Flash) instead of running a model locally, and I added tool-calling so BobAI can search the web for things like current weather instead of only working off static knowledge. I originally fine-tuned my own Llama 3.1 8B with DPO on Argilla’s UltraFeedback dataset, planning to self-host it. My RTX 4070 Super was more than capable of that part — the real problem was hosting a 5GB+ model for free. Hosting fell through repeatedly: Hugging Face Spaces dropped free Docker containers, Oracle Cloud registration failed three separate times, and Nest’s default 2GB RAM wasn’t enough — my request for 6GB got declined for server resource exhaustion. So I switched to a smaller model that only needed about 1GB of RAM to run on Nest. That solved the memory problem, but the server only gave me 2 CPU cores under heavy load, and replies were unusable — minutes per response, even for a tiny test model. I had to dig into actual cgroup CPU pressure stats to prove it wasn’t just “the server being slow” — the hardware genuinely couldn’t keep up. I’m proud that I shipped a working site through three full architecture pivots, and that I diagnosed the performance problem properly instead of just assuming “it’s probably fine” — I checked real metrics before concluding anything. I actually fine-tuned a model with DPO, even though it didn’t make it into the final version, and I picked up backend and frontend basics from zero along the way. It’s live at oleksandr1dovbenko.github.io/BobAI — click anywhere on the welcome screen to jump into the chat. It runs on Hack Club’s shared HCAI API, which had some downtime earlier, but it’s working properly now. Try something time-sensitive, like asking for the weather, to see the web-search tool-calling in action.", "repo": "https://github.com/oleksandr1dovbenko/BobAI", "demo": "https://oleksandr1dovbenko.github.io/BobAI/"}]...
|
[{"post_id": 64251, "ts": "202 [{"post_id": 64251, "ts": "2026-09-08T14:49:31Z", "hours": 1.5211, "text": "Rewrote index.html myself"}, {"post_id": 63456, "ts": "2026-09-07T10:07:00Z", "hours": 0.8522, "text": "Fully rewrote README.md myself without AI"}, {"post_id": 62150, "ts": "2026-09-05T12:26:14Z", "hours": 0.3836, "text": "Final part I edited the README.md , added a demo link to my BobAI repository, and have now prepared everything to ship the project!"}, {"post_id": 60833, "ts": "2026-09-03T13:40:17Z", "hours": 3.8619, "text": "New project architecture again I edited the project architecture. My request for 6GB of RAM was declined, primarily due to resource exhaustion on their servers :(. Because of that, the model that I fine-tuned myself is now useless for this setup. Now, my chatbot runs off the HCAI API. It’s a more boring way to do this project than making and hosting the model myself, but at least I can host it on Hack Club Nest easily! The full website is done and working perfectly. There’s a small intro to the project, a link to the Git repository, and even a cool animation. I want to be completely open with you—I used Claude to help me with the frontend stuff because I never learned JS, CSS, or HTML. The backend is also ready, and BobAI, powered by Gemini 2.5 Flash, works super fast and accurately. I also added tool calling, so BobAI can search for information on the internet just like ChatGPT. Right now, the HCAI API is down, which means BobAI can’t speak at the moment. But he worked yesterday without any problems! As soon as HCAI is back up and running, BobAI will be working seamlessly again."}, {"post_id": 44565, "ts": "2026-08-10T12:31:14Z", "hours": 1.1722, "text": "New project architecture I thought I would host the backend for my model on Hugging Face, but they don’t offer free Docker containers anymore. So, I tried Oracle Cloud. Unfortunately, they’ve been having registration issues for a year now, and I couldn’t even create an account (I tried 3 times :0). Because of that, I decided to go with Hack Club Nest. I already applied, and now I’m just waiting for the admins to approve my request. They usually offer 2 GB of RAM, but my AI needs a minimum of 5 GB to run. I asked for 6 GB in my application, hope they accept it! Honestly, I’m at absolute zero when it comes to web development, but… I already wrote an index.html for the frontend and an app.py for the backend. I used AI (Claude) to help me out, of course, since my main skill is ML, but this project is a great way for me to actually learn frontend and backend development too. I’ll be taking a break for the next 15 days because tomorrow I fly to another country and won’t have my PC with me. It’s a bit sad because I’ll lose a lot of time I could have spent on the project. But to be honest, there isn’t much left to do. Mostly just hosting and debugging if I run into any issues. Anyway, I’ll finish it up as soon as I get back home"}, {"post_id": 43499, "ts": "2026-08-08T20:04:33Z", "hours": 4.0019, "text": "Finished the first part of the project I fine-tuned the model with DPO, then tested it and it went pretty well. He answers questions with no problem. Then I pushed the model to Hugging Face Hub, to host it as the backend for my upcoming website. I wrote the README file, and at the end of today’s work I extended the gitignore and fixed one small thing in the model test."}, {"post_id": 42114, "ts": "2026-08-06T17:56:21Z", "hours": 0.5553, "text": "Project architecture At first, I thought I could train a big LLM on my PC with a lot of parameters and create something similar to ChatGPT, but I was wrong. My RTX 4070 Super is too weak to train such a large model. Because of that, I will use an open-source model and basically fine-tune it using DPO. I was thinking about how I should build this AI Chatbot. I thought I could use CulturaX as a dataset for my LLM, but that was a horrible idea. For now, I’ll choose Argilla’s UltraFeedback dataset, basically to give my model an understanding of good and bad responses. Today, I was thinking about the architecture of the future Chatbot. I actually used AI quite a lot to give me some advice."}]...
|
Title: BobAI by @Oleksandr | Stardance
Devlogs:
P Title: BobAI by @Oleksandr | Stardance
Devlogs:
Project architecture At first, I thought I could train a big LLM on my PC with a lot of parameters and create something similar to ChatGPT, but I was wrong. My RTX 4070 Super is too weak to train such a large model. Because of that, I will use an open-source model and basically fine-tune it using DPO. I was thinking about how I should build this AI Chatbot. I thought I could use CulturaX as a dataset for my LLM, but that was a horrible idea. For now, I’ll choose Argilla’s UltraFeedback dataset, basically to give my model an understanding of good and bad responses. Today, I was thinking about the architecture of the future Chatbot. I actually used AI quite a lot to give me some advice.
Finished the first part of the project I fine-tuned the model with DPO, then tested it and it went pretty well. He answers questions with no problem. Then I pushed the model to Hugging Face Hub, to host it as the backend for my upcoming website. I wrote the README file, and at the end of today’s work I extended the gitignore and fixed one small thing in the model test.
New project architecture I thought I would host the backend for my model on Hugging Face, but they don’t offer free Docker containers anymore. So, I tried Oracle Cloud. Unfortunately, they’ve been having registration issues for a year now, and I couldn’t even create an account (I tried 3 times :0). Because of that, I decided to go with Hack Club Nest. I already applied, and now I’m just waiting for the admins to approve my request. They usually offer 2 GB of RAM, but my AI needs a minimum of 5 GB to run. I asked for 6 GB in my application, hope they accept it! Honestly, I’m at absolute zero when it comes to web development, but… I already wrote an index.html for the frontend and an app.py for the backend. I used AI (Claude) to help me out, of course, since my main skill is ML, but this project is a great way for me to actually learn frontend and backend development too. I’ll be taking a break for the next 15 days because tomorrow I fly to another country and won’t have my PC with me. It’s a bit sad because I’ll lose a lot of time I could have spent on the project. But to be honest, there isn’t much left to do. Mostly just hosting and debugging if I run into any issues. Anyway, I’ll finish it up as soon as I get back home
New project architecture again I edited the project architecture. My request for 6GB of RAM was declined, primarily due to resource exhaustion on their servers :(. Because of that, the model that I fine-tuned myself is now useless for this setup. Now, my chatbot runs off the HCAI API. It’s a more boring way to do this project than making and hosting the model myself, but at least I can host it on Hack Club Nest easily! The full website is done and working perfectly. There’s a small intro to the project, a link to the Git repository, and even a cool animation. I want to be completely open with you—I used Claude to help me with the frontend stuff because I never learned JS, CSS, or HTML. The backend is also ready, and BobAI, powered by Gemini 2.5 Flash, works super fast and accurately. I also added tool calling, so BobAI can search for information on the internet just like ChatGPT. Right now, the HCAI API is down, which means BobAI can’t speak at the moment. But he worked yesterday without any problems! As soon as HCAI is back up and running, BobAI will be working seamlessly again.
Final part I edited the README.md , added a demo link to my BobAI repository, and have now prepared everything to ship the project!
Fully rewrote README.md myself without AI
Rewrote index.html myself
Ships:
BobAI — a chatbot on my site. A GitHub Pages frontend (with a click-to-reveal welcome screen) talks to a FastAPI backend hosted on Hack Club Nest. The backend calls Hack Club’s HCAI API (routed through OpenRouter, currently running Gemini 2.5 Flash) instead of running a model locally, and I added tool-calling so BobAI can search the web for things like current weather instead of only working off static knowledge. I originally fine-tuned my own Llama 3.1 8B with DPO on Argilla’s UltraFeedback dataset, planning to self-host it. My RTX 4070 Super was more than capable of that part — the real problem was hosting a 5GB+ model for free. Hosting fell through repeatedly: Hugging Face Spaces dropped free Docker containers, Oracle Cloud registration failed three separate times, and Nest’s default 2GB RAM wasn’t enough — my request for 6GB got declined for server resource exhaustion. So I switched to a smaller model that only needed about 1GB of RAM to run on Nest. That solved the memory problem, but the server only gave me 2 CPU cores under heavy load, and replies were unusable — minutes per response, even for a tiny test model. I had to dig into actual cgroup CPU pressure stats to prove it wasn’t just “the server being slow” — the hardware genuinely couldn’t keep up. I’m proud that I shipped a working site through three full architecture pivots, and that I diagnosed the performance problem properly instead of just assuming “it’s probably fine” — I checked real metrics before concluding anything. I actually fine-tuned a model with DPO, even though it didn’t make it into the final version, and I picked up backend and frontend basics from zero along the way. It’s live at oleksandr1dovbenko.github.io/BobAI — click anywhere on the welcome screen to jump into the chat. It runs on Hack Club’s shared HCAI API, which had some downtime earlier, but it’s working properly now. Try something time-sensitive, like asking for the weather, to see the web-search tool-calling in action....
|
1793994540.9482193
|
1794080940.9482193
|
|
57150
|
TaskForge by @princekumar | Stardance
|
princekumar
|
0
|
11.5
|
0
|
[]
|
[{"post_id": 64250, "ts": "202 [{"post_id": 64250, "ts": "2026-09-08T14:46:03Z", "hours": 1.5564, "text": "Devlog 5 — Building the Study Timer Today I worked on the js/timer.js file of my TaskForge study planner. I wanted to add a simple timer that I could actually use while studying. What I added Added a 25-minute study timer. Added a 5-minute short break. Added a 15-minute long break. Added Start, Pause, and Reset buttons. Added a countdown that updates every second. Added different messages depending on the timer state. Added a message when the timer reaches zero. Added buttons for switching between timer modes. Made sure another timer does not start while one is already running. What I learned While making this file, I learned how JavaScript timers work. I practiced using: setInterval() clearInterval() Functions Variables if statements Event listeners Updating HTML using JavaScript Converting minutes into seconds I also learned how to stop and restart a JavaScript timer without refreshing the webpage. Testing I tested the Start, Pause, and Reset buttons. I also tested all three timer modes. To make testing faster, I temporarily used a shorter countdown instead of waiting for the full 25 minutes. I checked the browser console and fixed small problems while testing. Now TaskForge has a working study timer that can be used for focused study sessions and breaks."}, {"post_id": 63483, "ts": "2026-09-07T11:17:51Z", "hours": 3.0683, "text": "Devlog 4 — Building the TaskForge Today I worked on the js/tasks.js file of my TaskForge study planner. This was a bigger part of the project because I wanted TaskForge to actually manage my study tasks instead of just displaying the website. What I added Added a system for creating new study tasks. Added task name, subject, and due date. Added input checking so empty tasks cannot be added. Added a task list that updates when I add a task. Added Complete and Undo buttons. Added a Delete button with a confirmation message. Added All, Pending, and Completed filters. Added a task counter. Added better formatting for due dates. Added an automatic current date for new tasks. Added an empty-state message when there are no tasks. Added basic HTML escaping for task names. What I learned While making this file, I learned more about JavaScript arrays and objects. I also learned how to use: addEventListener() filter() find() createElement() classList dataset Date Template literals I also practiced connecting JavaScript with the HTML elements I created earlier. Testing I tested adding different tasks, completing and undoing tasks, deleting tasks, and switching between the three filters. I also checked what happens when there are no tasks and tested empty form fields. There were some small things I had to check and fix while testing, but now the task manager is working with the current TaskForge layout. This was one of the most useful parts of the project so far because TaskForge is starting to feel like a real study planner. Next, I will work on js/timer.js and build the study focus timer."}, {"post_id": 61958, "ts": "2026-09-05T04:31:47Z", "hours": 1.5722, "text": "Devlog 3 — Building the Main JavaScript Today I worked on the js/script.js file of my TaskForge study planner. I added the main JavaScript functionality that connects the different parts of my website. What I added Navigation between Home, Tasks, Timer, and Subjects. Active navigation button styling. Automatic display of the current date. Automatic setting of today’s date in the task form. Basic console messages to check that the JavaScript is loading correctly. What I learned While working on this file, I learned how to use JavaScript event listeners, query elements from HTML, change CSS classes, work with data attributes, and use the JavaScript Date object. Testing I tested the navigation buttons and checked that the current date appears correctly. I also checked the browser console to make sure the script loads without errors. file 3 - script.js completed!"}, {"post_id": 61456, "ts": "2026-09-04T11:56:23Z", "hours": 3.2989, "text": "Devlog 2 — Designing the TaskForge Interface Today I worked on style.css and started designing the interface of TaskForge. I added a simple color theme, cards, buttons, navigation styling and a dashboard layout. I also added responsive CSS so the project can adjust to smaller screens. I wanted the website to look attractive but still keep it simple and realistic for a student project. I tested the page in the browser and checked the main sections, task area, timer and subject cards. The JavaScript functionality will be added in the next steps. File completed: style.css ✅"}, {"post_id": 60203, "ts": "2026-09-02T13:03:33Z", "hours": 2.0, "text": "Devlog 1 — Building the HTML Structure Today I started working on my TaskForge project. I created the index.html file and made the basic structure of my study planner. I added a header, navigation buttons, a home section, task section, study timer section, and subjects section. I also added places for showing total tasks, completed tasks, pending tasks, and progress. For the task section, I added a form where a user can enter a task name, choose a subject, and select a date. I also added the basic timer buttons and subject cards. The page is not fully functional yet because I still need to add CSS and JavaScript. My main goal in this step was to create a good HTML structure that I can build on in the next files. File completed: index.html ✅"}]...
|
Title: TaskForge by @princekumar | Stardance
Devl Title: TaskForge by @princekumar | Stardance
Devlogs:
Devlog 1 — Building the HTML Structure Today I started working on my TaskForge project. I created the index.html file and made the basic structure of my study planner. I added a header, navigation buttons, a home section, task section, study timer section, and subjects section. I also added places for showing total tasks, completed tasks, pending tasks, and progress. For the task section, I added a form where a user can enter a task name, choose a subject, and select a date. I also added the basic timer buttons and subject cards. The page is not fully functional yet because I still need to add CSS and JavaScript. My main goal in this step was to create a good HTML structure that I can build on in the next files. File completed: index.html ✅
Devlog 2 — Designing the TaskForge Interface Today I worked on style.css and started designing the interface of TaskForge. I added a simple color theme, cards, buttons, navigation styling and a dashboard layout. I also added responsive CSS so the project can adjust to smaller screens. I wanted the website to look attractive but still keep it simple and realistic for a student project. I tested the page in the browser and checked the main sections, task area, timer and subject cards. The JavaScript functionality will be added in the next steps. File completed: style.css ✅
Devlog 3 — Building the Main JavaScript Today I worked on the js/script.js file of my TaskForge study planner. I added the main JavaScript functionality that connects the different parts of my website. What I added Navigation between Home, Tasks, Timer, and Subjects. Active navigation button styling. Automatic display of the current date. Automatic setting of today’s date in the task form. Basic console messages to check that the JavaScript is loading correctly. What I learned While working on this file, I learned how to use JavaScript event listeners, query elements from HTML, change CSS classes, work with data attributes, and use the JavaScript Date object. Testing I tested the navigation buttons and checked that the current date appears correctly. I also checked the browser console to make sure the script loads without errors. file 3 - script.js completed!
Devlog 4 — Building the TaskForge Today I worked on the js/tasks.js file of my TaskForge study planner. This was a bigger part of the project because I wanted TaskForge to actually manage my study tasks instead of just displaying the website. What I added Added a system for creating new study tasks. Added task name, subject, and due date. Added input checking so empty tasks cannot be added. Added a task list that updates when I add a task. Added Complete and Undo buttons. Added a Delete button with a confirmation message. Added All, Pending, and Completed filters. Added a task counter. Added better formatting for due dates. Added an automatic current date for new tasks. Added an empty-state message when there are no tasks. Added basic HTML escaping for task names. What I learned While making this file, I learned more about JavaScript arrays and objects. I also learned how to use: addEventListener() filter() find() createElement() classList dataset Date Template literals I also practiced connecting JavaScript with the HTML elements I created earlier. Testing I tested adding different tasks, completing and undoing tasks, deleting tasks, and switching between the three filters. I also checked what happens when there are no tasks and tested empty form fields. There were some small things I had to check and fix while testing, but now the task manager is working with the current TaskForge layout. This was one of the most useful parts of the project so far because TaskForge is starting to feel like a real study planner. Next, I will work on js/timer.js and build the study focus timer.
Devlog 5 — Building the Study Timer Today I worked on the js/timer.js file of my TaskForge study planner. I wanted to add a simple timer that I could actually use while studying. What I added Added a 25-minute study timer. Added a 5-minute short break. Added a 15-minute long break. Added Start, Pause, and Reset buttons. Added a countdown that updates every second. Added different messages depending on the timer state. Added a message when the timer reaches zero. Added buttons for switching between timer modes. Made sure another timer does not start while one is already running. What I learned While making this file, I learned how JavaScript timers work. I practiced using: setInterval() clearInterval() Functions Variables if statements Event listeners Updating HTML using JavaScript Converting minutes into seconds I also learned how to stop and restart a JavaScript timer without refreshing the webpage. Testing I tested the Start, Pause, and Reset buttons. I also tested all three timer modes. To make testing faster, I temporarily used a shorter countdown instead of waiting for the full 25 minutes. I checked the browser console and fixed small problems while testing. Now TaskForge has a working study timer that can be used for focused study sessions and breaks....
|
1793886732.1719277
|
1794750732.1719277
|
|
37303
|
Irina's birthday website by Necry by @Necry | Irina's birthday website by Necry by @Necry | Stardance...
|
Necry
|
2
|
10.0
|
63
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T14:42:16Z", "hours": 1.0, "multiplier": 3.44, "payout": 0, "blessing": "neutral", "text": "This is a page made for one of my dearest friends’ birthday. I am incredibly proud of doing this but I am kind of sad that I only posted only 4 web vlogs but I kept on putting it off. It only uses placeholders for messages and photos for privacy. This ship is only because I added the password which was way harder than I thought. The password is “password”", "repo": "https://github.com/necrymere/Irina-s-Birthday-Site-by-Necry", "demo": "https://necrymere.github.io/Irina-s-Birthday-Site-by-Necry/"}, {"ship_num": 2, "ts": "2026-07-24T15:01:19Z", "hours": 9.0, "multiplier": 7.4, "payout": 63, "blessing": "neutral", "text": "This is a page made for one of my dearest friends’ birthday. I am incredibly proud of doing this but I am kind of sad that I only posted only 4 web vlogs but I kept on putting it off. It only uses placeholders for messages and photos for privacy.", "repo": "https://github.com/necrymere/Irina-s-Birthday-Site-by-Necry", "demo": "https://necrymere.github.io/Irina-s-Birthday-Site-by-Necry/"}]...
|
[{"post_id": 64245, "ts": "202 [{"post_id": 64245, "ts": "2026-09-08T14:40:18Z", "hours": 1.455, "text": "I added a password screen so in the final publishing of the site(which includes all the photos and such) cannot be entered by just about anyone. Anyways this was really fun but I had this hour that was not logged so I am posting this."}, {"post_id": 34060, "ts": "2026-07-24T14:51:51Z", "hours": 0.4217, "text": "I got the spotify embed to work(yayyy) and finished placing placeholders and such. I think I am done"}, {"post_id": 33991, "ts": "2026-07-24T11:48:21Z", "hours": 3.0989, "text": "Once again I forgot to post but honestly this is almost done. I added a navigation bar, a home section with her image and her titles(instead of it being in the memories section) and a place to add notes from her friends. I am happy that I am starting to figure out and understand how all of this works. The spotify embeded player still does not work. Oh I also forgot that I added placeholders for images(and the project will be released publicly only with placeholders for privacy’s sake."}, {"post_id": 33458, "ts": "2026-07-23T13:09:34Z", "hours": 4.4525, "text": "Ok I just realised that I did not update this in such a long time. So I finished the photo gallery, refined the design and started the music library using Spotify embeded. I attached the photo gallery(the photos are yet to be added) also I need to add her photo there)"}, {"post_id": 32599, "ts": "2026-07-21T21:32:03Z", "hours": 0.5667, "text": "I worked on the first page of the website of my friend Irina. Luckily she has no way of finding this(I hope). Anyways this is an interactive question(“Are we your best friends”) and the “NO” button turns into “Yes” once clicked. Also I made a Figma page to maybe help with the design process. I still have a lot of work to do."}]...
|
Title: Irina's birthday website by Necry by @N Title: Irina's birthday website by Necry by @Necry | Stardance
Devlogs:
I worked on the first page of the website of my friend Irina. Luckily she has no way of finding this(I hope). Anyways this is an interactive question(“Are we your best friends”) and the “NO” button turns into “Yes” once clicked. Also I made a Figma page to maybe help with the design process. I still have a lot of work to do.
Ok I just realised that I did not update this in such a long time. So I finished the photo gallery, refined the design and started the music library using Spotify embeded. I attached the photo gallery(the photos are yet to be added) also I need to add her photo there)
Once again I forgot to post but honestly this is almost done. I added a navigation bar, a home section with her image and her titles(instead of it being in the memories section) and a place to add notes from her friends. I am happy that I am starting to figure out and understand how all of this works. The spotify embeded player still does not work. Oh I also forgot that I added placeholders for images(and the project will be released publicly only with placeholders for privacy’s sake.
I got the spotify embed to work(yayyy) and finished placing placeholders and such. I think I am done
I added a password screen so in the final publishing of the site(which includes all the photos and such) cannot be entered by just about anyone. Anyways this was really fun but I had this hour that was not logged so I am posting this.
Ships:
This is a page made for one of my dearest friends’ birthday. I am incredibly proud of doing this but I am kind of sad that I only posted only 4 web vlogs but I kept on putting it off. It only uses placeholders for messages and photos for privacy.
This is a page made for one of my dearest friends’ birthday. I am incredibly proud of doing this but I am kind of sad that I only posted only 4 web vlogs but I kept on putting it off. It only uses placeholders for messages and photos for privacy. This ship is only because I added the password which was way harder than I thought. The password is “password”...
|
1793922427.9847672
|
1794008827.9847672
|
|
59796
|
CHRONOVA — A Custom ESP32 Alarm Clock by @NamasyuC CHRONOVA — A Custom ESP32 Alarm Clock by @NamasyuChallagarige | Stardance...
|
NamasyuChallagarige
|
0
|
0.31
|
0
|
[]
|
[{"post_id": 64242, "ts": "202 [{"post_id": 64242, "ts": "2026-09-08T14:33:57Z", "hours": 0.3086, "text": "Getting started in KiCad"}]...
|
Title: CHRONOVA — A Custom ESP32 Alarm Clock by @N Title: CHRONOVA — A Custom ESP32 Alarm Clock by @NamasyuChallagarige | Stardance
Devlogs:
Getting started in KiCad...
|
1793638350.326413
|
1794243150.326413
|
|
58875
|
MistixHackpad by @Mistix | Stardance
|
Mistix
|
0
|
2.87
|
0
|
[]
|
[{"post_id": 64240, "ts": "202 [{"post_id": 64240, "ts": "2026-09-08T14:29:50Z", "hours": 0.4569, "text": "Finished my project, i have uploaded all the necessary files and folders. I hope this gets accepted!"}, {"post_id": 63637, "ts": "2026-09-07T15:45:52Z", "hours": 0.3436, "text": "Adding all the required project files, This took me sometime but i did it. Now i just have to make the final step file and the Readme, then i should be good to go"}, {"post_id": 63115, "ts": "2026-09-06T18:55:53Z", "hours": 0.6006, "text": "FINALLY! I finished my hackpad. Now its time to build the firmware!!!!"}, {"post_id": 63087, "ts": "2026-09-06T17:58:53Z", "hours": 0.9167, "text": "Finished 80% of my case, This took wayy longer than expected."}, {"post_id": 63043, "ts": "2026-09-06T16:47:03Z", "hours": 0.5517, "text": "Building my First hackpad using kicad!, Today i finished building my schematics and the pcb."}]...
|
Title: MistixHackpad by @Mistix | Stardance
Devlo Title: MistixHackpad by @Mistix | Stardance
Devlogs:
Building my First hackpad using kicad!, Today i finished building my schematics and the pcb.
Finished 80% of my case, This took wayy longer than expected.
FINALLY! I finished my hackpad. Now its time to build the firmware!!!!
Adding all the required project files, This took me sometime but i did it. Now i just have to make the final step file and the Readme, then i should be good to go
Finished my project, i have uploaded all the necessary files and folders. I hope this gets accepted!...
|
1793641662.549552
|
1794505662.549552
|
|
7594
|
GeoRemind by @Tijil | Stardance
|
Tijil
|
0
|
0.98
|
0
|
[]
|
[{"post_id": 6424, "ts": "2026 [{"post_id": 6424, "ts": "2026-06-10T20:10:08Z", "hours": 0.9844, "text": "🫠"}]...
|
Title: GeoRemind by @Tijil | Stardance
Devlogs:
🫠
|
1794055790.8394558
|
1794660590.8394558
|
|
53185
|
CodeAtlas by @PrakstheBruce | Stardance
|
PrakstheBruce
|
1
|
10.93
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-30T04:07:55Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built an interactive GitHub codebase explorer with a file explorer, codebase search, dependency graph, and architecture insights. What I’m proud of: I actually built and debugged this over 14 days, solving everything from TypeScript and React issues to dependency analysis and API problems ! Biggest challenge: The BIggest challenge was, Getting imports to resolve into meaningful file-to-file dependencies and then connecting that data across the UI. For users(On how to use it): Give it a GitHub repository and use the Explorer, Search, and Graph together to quickly understand an unfamiliar codebase. Dependency analysis works best with standard .ts, .tsx, .js, and .jsx projects. I originally started this grind to earn 5,500 Stardust and get my brother a MacBook. But somewhere along the way, I realized I was getting something else too — I was becoming a better developer…", "repo": "https://github.com/praksthebruce/CodeAtlas", "demo": "https://codeatlasss.netlify.app/"}]...
|
[{"post_id": 64234, "ts": "202 [{"post_id": 64234, "ts": "2026-09-08T14:19:17Z", "hours": 0.4319, "text": "Guyss My code was rejected as I did not update my rewritten code on Netlify, and the old code was still showing. Therefore I have pushed my Rewritten code to Github, and Requesting for re certification!! AnD I had written the README BY HAND!!!! (Pls see the Hackatime attachments.) I had Spent more than 11 hours coding this just to be marked as AI!!, I only used it for debugging and now I had rewritten A MAJORITY OF MY CODE!"}, {"post_id": 62729, "ts": "2026-09-06T07:08:53Z", "hours": 1.4747, "text": "Hey Guys! I have Re-written and modified a majority of my Code which looked AI, I added a new Style, Inspiration From Coke and another Tech website. This one Has a better Functionality and UI than Previous Web apps! I HAD MODIFIED MY CODE AS PER THE PREVIOUS CHANGES REQUESTED. PLEASE APPROVE THIS TIME! 😭🙏 #stardance #build#webapp #frictionless"}, {"post_id": 61425, "ts": "2026-09-04T10:20:42Z", "hours": 1.0247, "text": "Heyy Guyss, I have Finally inspected for what looks “AI” in my Code, and the AI I used for debugging majorly affected my style, therefore After two reports I thoroughly inspected my code and Changed The CSS and little bit of the JS acc to my style. Now I am going to Ship my project. P.S I never used AI to type/engineer my project. I only used references from Reddit, and GeeksforGeeks."}, {"post_id": 57819, "ts": "2026-08-30T03:48:58Z", "hours": 2.3264, "text": "🗺️ CodeAtlas — 14 Days Later 😭🗿🥳 After 10.5 hours of grind… CodeAtlas is gonna be SHIPPED!! For the last 14 days, I’ve been building CodeAtlas — a tool that helps developers understand unfamiliar GitHub repositories without having to manually dig through hundreds of files. The idea is simple: give developers a map before they explore the territory. 🔥 What did I build? CodeAtlas takes a GitHub repository and turns it into an interactive view of the codebase. 📂 1. Better Codebase Explorer I started with a basic file tree and turned it into something much more useful liikee….. *Expandable folders *File-type indicators *File selection *Dependency counts *Codebase search *Entry-point detection 🕸️ 2. Dependency Graph CodeAtlas analyzes imports between source files and turns them into an interactive graph. Instead of opening files one-by-one to figure out what depends on what, you can actually see the relationships. I also connected the Explorer and Graph, so selecting a file highlights its relevant connections. 🧭 3. Architecture Insights CodeAtlas can identify things like: 🚪 Entry point 🔗 Most connected file 📁 File/folder counts 🕸️ Dependency count Nothing overly complicated — just useful information to help you figure out where to start. 🧩 The QoL improvements A lot of the work wasn’t flashy new features. It was making the experience actually feel usable. Search → select a file → see its connections. Select something in the Explorer → understand where it sits in the architecture. File types → easier scanning. Dependency numbers → quickly spot highly connected files. Those small things made a surprisingly big difference. 😭 The 14-day journey This definitely wasn’t: code → works → ship It was more like: code → break → stare at error for 12 mins → debug → fix → break something else → repeat. I ran into TypeScript errors, React issues, Git problems, dependency-resolution bugs, UI problems and plenty of things that made absollllutely no sense at first!! 💀 And honestly, I solved a lot of those problems myself. That’s probably what I’m happiest about. I didn’t just learn how to write code. I learned how to debug, rethink, and keep going when the code doesn’t cooperate. Okayy..🤔 Is the idea completely new? Nope. There are already tools and projects exploring codebase visualization and dependency analysis. And that’s okay. For me, the goal wasn’t to invent an entirely new category. It was to take an idea I found interesting, build my own version from scratch, understand the underlying concepts, and actually ship it. And I am GOing to!! 🚀 What’s next? There’s still a lot I’d love to explore like :- Better dependency analysis Circular dependency detection More languages Git history visualization Smarter architecture analysis AI-assisted codebase explanations But for now… 14 days. 10.5 hours of grind. Countless bugs. A ridiculous amount of debugging. And one shipped project. 😭🗿🥳 CodeAtlas — Gonna get SHIPPED. 🚀 (P.s It was a pain to find and put all these emojis, especially those arrows!)"}, {"post_id": 56724, "ts": "2026-08-28T16:24:18Z", "hours": 0.4775, "text": "Guys I Just Completed A bit more before wrapping up for today, Now The Individual files Of a Repository Can be Selected and Display info about them, and how they are interconnected!! The File Explorer got much Advanced!! #Build #Frictionless #stardance"}, {"post_id": 56697, "ts": "2026-08-28T15:40:57Z", "hours": 1.4269, "text": "Day 11 – The Day I Had to Restart 💀 Day 11 was going to be pretty straightforward. It ended up not being that easy. I set out to implement the Codebase Search feature in CodeAtlas, but somehow it turned into an experience where errors occurred and I had to delete the whole code written in Day 11, to build it all again from scratch. That’s what I did. I deleted everything, went back to the previous day’s code, and rebuilt Day 11 again by adding one feature at a time and testing it after each major update. This time around, it worked like a charm. What I actually built today *Implemented Codebase Search to allow searching of repository files. *Implemented searchable file results that filter live. *Linked search results to dependency graph. 🕸️ Clicking a file highlights the selected node and its dependencies. Updated architecture insights integration, *🧹 Cleaned up App.tsx code and fixed multiple state/integration bugs. AAAnndd, *✅ Preserved existing repository explorer, dependency analysis and atlas graph functionalities. The most important lesson that I learned today, did not concern React or TypeScript, But the fact that, “Sometimes, it’s better to start coding a certain feature from scratch instead of wasting hours on fixing an incorrect implementation of it.” Today, my progress took longer than I thought, but I think that CodeAtlas became a more robust app thanks to that experience. 11/14 days donee Yoooo!!!! 🥳"}, {"post_id": 55658, "ts": "2026-08-27T16:48:13Z", "hours": 0.5536, "text": "CodeAtlas — Devlog Day 8–9: From dependency data to an actual Atlas. 🕸️ Yoooo!! Today was honestly a crazy journey. I started by turning CodeAtlas’s dependency data into a visual graph using React Flow. Soon, the files weren’t just a list anymore — they were nodes connected by actual relationships!! Then I added interaction: clicking a file highlights its connections and fades unrelated files… Everything was working… until GitHub suddenly started throwing 403 Forbidden errors. 💀 After debugging, I found the culprit: I’d exhausted GitHub’s 60-request unauthenticated API limit during testing. That forced me to rethink how CodeAtlas fetches files and taught me a pretty important lesson about API efficiency. And there’s a funny side story: I had actually started coding part of this in another editor before realizing my Hackatime wasn’t tracking it properly. By the time I noticed, some of my coding time hadn’t been recorded. 😭 Lesson learned: “Always check Hackatime before starting a session.” Despite the chaos, CodeAtlas now has: 📁 Repository Explorer → Dependency Analysis → 🕸️ Interactive Architecture Graph The Atlas is getting real. See Ya Soon!! #CodeAtlas #Devlog #BuildInPublic #Stardance #HackClub #React #TypeScript #GitHub #WebDevelopment"}, {"post_id": 55111, "ts": "2026-08-26T15:55:46Z", "hours": 1.0703, "text": "CodeAtlas — Devlog #4 🥳 Days 6 & 7 — CodeAtlas learned “ How files connect.” Heyyy Guyss !! Today I moved CodeAtlas Beyonnd simply exploring a repository. It can now analyze source code, detect imports, resolve them to actual files, and map their dependencies!! For my own CodeAtlas repo, it detected 7 real dependency relationships — including how App.tsx connects to the GitHub API, parser, explorer, and file-tree logic. Next Plann : turning these relationships into an interactive architecture graph. The Atlas is starting to take shape Guyss!! 😭👌 #CodeAtlas #BuildInPublic #Devlog #Stardance #HackClub #TypeScript #React #GitHub"}, {"post_id": 54542, "ts": "2026-08-25T15:54:13Z", "hours": 1.3789, "text": "CodeAtlas — Devlog #3 Days 4 & 5 — From files to a map. Heyy Guyss! CodeAtlas just got a lot smarter.. Over the last couple of sessions, I connected it to GitHub’s Tree API and built an interactive codebase explorer. Now CodeAtlas can legit do some crazy stuff like: 📂 Retrieve thousands of files from a repository 🌳 Turn the raw file tree into a structured hierarchy 📁 Expand & collapse folders 🔍 Explore the actual structure of any public repository 🗿🗿 I even tested it on CodeAtlas itself. Next plan: understanding how the files actually connect. Dependency mapping* #CodeAtlas #BuildInPublic #Devlog #Stardance #HackClub #React #TypeScript #GitHub"}, {"post_id": 52954, "ts": "2026-08-23T10:30:05Z", "hours": 0.7289, "text": "🗺️ CodeAtlas — Devlog #2 Day 2(According to my Schedule 😜) — Heyyy Guys!! CodeAtlas can finally talk to GitHub. The UI looked pretty decent when I started off, But with more improvements I am actually going somewhere! Today I started making CodeAtlas actually work. I added: 🔗 GitHub repository URL parsing 🐙 GitHub API integration 📊 Repository metadata ⚡ Loading states ❌ Invalid URL & repository error handling ⌨️ Enter-to-analyze support Now I can paste a public GitHub repository and CodeAtlas can retrieve and display its information!! Yayy!!! The next step is much more interesting: Instead of just knowing the repository exists, CodeAtlas needs to understand what’s inside it. Next up → mapping the repository’s file structure. 🗺️ And Good Luck TO ALL Reading this! #CodeAtlas #Devlog #BuildInPublic #Stardance #HackClub #GitHub #WebDevelopment #TypeScript #React"}, {"post_id": 52905, "ts": "2026-08-23T08:59:46Z", "hours": 0.3136, "text": "🚀 CodeAtlas — Devlog #1 Day 1 — The Beginning Heyy Guyss!! I’m starting a new project called CodeAtlas 🗺️ The idea is simple: understanding an unfamiliar codebase can be painful ! You open a GitHub repository and suddenly you’re staring at hundreds of files, folders, imports, and dependencies with no idea where to start. Sooo I’m building CodeAtlas to turn a codebase into an interactive map — helping developers understand how different parts of a project connect, where important logic lives, and how the whole system works. Today, I set up the project with React + TypeScript, initialized the GitHub repository, and started laying the foundation. The goal: GitHub repository >Codebase analysis > Interactive architecture map This is Day 1. Let’s see how far I can take it. 🚀 #CodeAtlas #BuildInPublic #Stardance #HackClub #Devlog #WebDevelopment"}]...
|
Title: CodeAtlas by @PrakstheBruce | Stardance
De Title: CodeAtlas by @PrakstheBruce | Stardance
Devlogs:
🚀 CodeAtlas — Devlog #1 Day 1 — The Beginning Heyy Guyss!! I’m starting a new project called CodeAtlas 🗺️ The idea is simple: understanding an unfamiliar codebase can be painful ! You open a GitHub repository and suddenly you’re staring at hundreds of files, folders, imports, and dependencies with no idea where to start. Sooo I’m building CodeAtlas to turn a codebase into an interactive map — helping developers understand how different parts of a project connect, where important logic lives, and how the whole system works. Today, I set up the project with React + TypeScript, initialized the GitHub repository, and started laying the foundation. The goal: GitHub repository >Codebase analysis > Interactive architecture map This is Day 1. Let’s see how far I can take it. 🚀 #CodeAtlas #BuildInPublic #Stardance #HackClub #Devlog #WebDevelopment
🗺️ CodeAtlas — Devlog #2 Day 2(According to my Schedule 😜) — Heyyy Guys!! CodeAtlas can finally talk to GitHub. The UI looked pretty decent when I started off, But with more improvements I am actually going somewhere! Today I started making CodeAtlas actually work. I added: 🔗 GitHub repository URL parsing 🐙 GitHub API integration 📊 Repository metadata ⚡ Loading states ❌ Invalid URL & repository error handling ⌨️ Enter-to-analyze support Now I can paste a public GitHub repository and CodeAtlas can retrieve and display its information!! Yayy!!! The next step is much more interesting: Instead of just knowing the repository exists, CodeAtlas needs to understand what’s inside it. Next up → mapping the repository’s file structure. 🗺️ And Good Luck TO ALL Reading this! #CodeAtlas #Devlog #BuildInPublic #Stardance #HackClub #GitHub #WebDevelopment #TypeScript #React
CodeAtlas — Devlog #3 Days 4 & 5 — From files to a map. Heyy Guyss! CodeAtlas just got a lot smarter.. Over the last couple of sessions, I connected it to GitHub’s Tree API and built an interactive codebase explorer. Now CodeAtlas can legit do some crazy stuff like: 📂 Retrieve thousands of files from a repository 🌳 Turn the raw file tree into a structured hierarchy 📁 Expand & collapse folders 🔍 Explore the actual structure of any public repository 🗿🗿 I even tested it on CodeAtlas itself. Next plan: understanding how the files actually connect. Dependency mapping* #CodeAtlas #BuildInPublic #Devlog #Stardance #HackClub #React #TypeScript #GitHub
CodeAtlas — Devlog #4 🥳 Days 6 & 7 — CodeAtlas learned “ How files connect.” Heyyy Guyss !! Today I moved CodeAtlas Beyonnd simply exploring a repository. It can now analyze source code, detect imports, resolve them to actual files, and map their dependencies!! For my own CodeAtlas repo, it detected 7 real dependency relationships — including how App.tsx connects to the GitHub API, parser, explorer, and file-tree logic. Next Plann : turning these relationships into an interactive architecture graph. The Atlas is starting to take shape Guyss!! 😭👌 #CodeAtlas #BuildInPublic #Devlog #Stardance #HackClub #TypeScript #React #GitHub
CodeAtlas — Devlog Day 8–9: From dependency data to an actual Atlas. 🕸️ Yoooo!! Today was honestly a crazy journey. I started by turning CodeAtlas’s dependency data into a visual graph using React Flow. Soon, the files weren’t just a list anymore — they were nodes connected by actual relationships!! Then I added interaction: clicking a file highlights its connections and fades unrelated files… Everything was working… until GitHub suddenly started throwing 403 Forbidden errors. 💀 After debugging, I found the culprit: I’d exhausted GitHub’s 60-request unauthenticated API limit during testing. That forced me to rethink how CodeAtlas fetches files and taught me a pretty important lesson about API efficiency. And there’s a funny side story: I had actually started coding part of this in another editor before realizing my Hackatime wasn’t tracking it properly. By the time I noticed, some of my coding time hadn’t been recorded. 😭 Lesson learned: “Always check Hackatime before starting a session.” Despite the chaos, CodeAtlas now has: 📁 Repository Explorer → Dependency Analysis → 🕸️ Interactive Architecture Graph The Atlas is getting real. See Ya Soon!! #CodeAtlas #Devlog #BuildInPublic #Stardance #HackClub #React #TypeScript #GitHub #WebDevelopment
Day 11 – The Day I Had to Restart 💀 Day 11 was going to be pretty straightforward. It ended up not being that easy. I set out to implement the Codebase Search feature in CodeAtlas, but somehow it turned into an experience where errors occurred and I had to delete the whole code written in Day 11, to build it all again from scratch. That’s what I did. I deleted everything, went back to the previous day’s code, and rebuilt Day 11 again by adding one feature at a time and testing it after each major update. This time around, it worked like a charm. What I actually built today *Implemented Codebase Search to allow searching of repository files. *Implemented searchable file results that filter live. *Linked search results to dependency graph. 🕸️ Clicking a file highlights the selected node and its dependencies. Updated architecture insights integration, *🧹 Cleaned up App.tsx code and fixed multiple state/integration bugs. AAAnndd, *✅ Preserved existing repository explorer, dependency analysis and atlas graph functionalities. The most important lesson that I learned today, did not concern React or TypeScript, But the fact that, “Sometimes, it’s better to start coding a certain feature from scratch instead of wasting hours on fixing an incorrect implementation of it.” Today, my progress took longer than I thought, but I think that CodeAtlas became a more robust app thanks to that experience. 11/14 days donee Yoooo!!!! 🥳
Guys I Just Completed A bit more before wrapping up for today, Now The Individual files Of a Repository Can be Selected and Display info about them, and how they are interconnected!! The File Explorer got much Advanced!! #Build #Frictionless #stardance
🗺️ CodeAtlas — 14 Days Later 😭🗿🥳 After 10.5 hours of grind… CodeAtlas is gonna be SHIPPED!! For the last 14 days, I’ve been building CodeAtlas — a tool that helps developers understand unfamiliar GitHub repositories without having to manually dig through hundreds of files. The idea is simple: give developers a map before they explore the territory. 🔥 What did I build? CodeAtlas takes a GitHub repository and turns it into an interactive view of the codebase. 📂 1. Better Codebase Explorer I started with a basic file tree and turned it into something much more useful liikee….. *Expandable folders *File-type indicators *File selection *Dependency counts *Codebase search *Entry-point detection 🕸️ 2. Dependency Graph CodeAtlas analyzes imports between source files and turns them into an interactive graph. Instead of opening files one-by-one to figure out what depends on what, you can actually see the relationships. I also connected the Explorer and Graph, so selecting a file highlights its relevant connections. 🧭 3. Architecture Insights CodeAtlas can identify things like: 🚪 Entry point 🔗 Most connected file 📁 File/folder counts 🕸️ Dependency count Nothing overly complicated — just useful information to help you figure out where to start. 🧩 The QoL improvements A lot of the work wasn’t flashy new features. It was making the experience actually feel usable. Search → select a file → see its connections. Select something in the Explorer → understand where it sits in the architecture. File types → easier scanning. Dependency numbers → quickly spot highly connected files. Those small things made a surprisingly big difference. 😭 The 14-day journey This definitely wasn’t: code → works → ship It was more like: code → break → stare at error for 12 mins → debug → fix → break something else → repeat. I ran into TypeScript errors, React issues, Git problems, dependency-resolution bugs, UI problems and plenty of things that made absollllutely no sense at first!! 💀 And honestly, I solved a lot of those problems myself. That’s probably what I’m happiest about. I didn’t just learn how to write code. I learned how to debug, rethink, and keep going when the code doesn’t cooperate. Okayy..🤔 Is the idea completely new? Nope. There are already tools and projects exploring codebase visualization and dependency analysis. And that’s okay. For me, the goal wasn’t to invent an entirely new category. It was to take an idea I found interesting, build my own version from scratch, understand the underlying concepts, and actually ship it. And I am GOing to!! 🚀 What’s next? There’s still a lot I’d love to explore like :- Better dependency analysis Circular dependency detection More languages Git history visualization Smarter architecture analysis AI-assisted codebase explanations But for now… 14 days. 10.5 hours of grind. Countless bugs. A ridiculous amount of debugging. And one shipped project. 😭🗿🥳 CodeAtlas — Gonna get SHIPPED. 🚀 (P.s It was a pain to find and put all these emojis, especially those arrows!)
Heyy Guyss, I have Finally inspected for what looks “AI” in my Code, and the AI I used for debugging majorly affected my style, therefore After two reports I thoroughly inspected my code and Changed The CSS and little bit of the JS acc to my style. Now I am going to Ship my project. P.S I never used AI to type/engineer my project. I only used references from Reddit, and GeeksforGeeks.
Hey Guys! I have Re-written and modified a majority of my Code which looked AI, I added a new Style, Inspiration From Coke and another Tech website. This one Has a better Functionality and UI than Previous Web apps! I HAD MODIFIED MY CODE AS PER THE PREVIOUS CHANGES REQUESTED. PLEASE APPROVE THIS TIME! 😭🙏 #stardance #build#webapp #frictionless
Guyss My code was rejected as I did not update my rewritten code on Netlify, and the old code was still showing. Therefore I have pushed my Rewritten code to Github, and Requesting for re certification!! AnD I had written the README BY HAND!!!! (Pls see the Hackatime attachments.) I had Spent more than 11 hours coding this just to be marked as AI!!, I only used it for debugging and now I had rewritten A MAJORITY OF MY CODE!
Ships:
I built an interactive GitHub codebase explorer with a file explorer, codebase search, dependency graph, and architecture insights. What I’m proud of: I actually built and debugged this over 14 days, solving everything from TypeScript and React issues to dependency analysis and API problems ! Biggest challenge: The BIggest challenge was, Getting imports to resolve into meaningful file-to-file dependencies and then connecting that data across the UI. For users(On how to use it): Give it a GitHub repository and use the Explorer, Search, and Graph together to quickly understand an unfamiliar codebase. Dependency analysis works best with standard .ts, .tsx, .js, and .jsx projects. I originally started this grind to earn 5,500 Stardust and get my brother a MacBook. But somewhere along the way, I realized I was getting something else too — I was becoming a better developer…...
|
1794117328.436467
|
1794203728.436467
|
|
56220
|
xvcf.dev - my personal site! by @xvcf | Stardance
|
xvcf
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T14:10:50Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a new version of my personal website! It includes a section about the music I make, a section about my coding projects, as well as a footer with contact information. It also features two SoundCloud widgets, as well as a typewriter animation for the text. My CSS uses a custom font!", "repo": "https://github.com/RafaeloxMC/xvcf.dev-v5", "demo": "https://xvcf.dev"}]...
|
[{"post_id": 64223, "ts": "202 [{"post_id": 64223, "ts": "2026-09-08T14:04:15Z", "hours": 0.26, "text": "README and more URLs! Heya! Really short devlog, but it’s worth mentioning! I have made my README.md file for my GitHub repo, and I have added two more URLs to the projects section of the site! One is currently commented out in the code, due to the project still being in review on Modrinth. That’s it already!"}, {"post_id": 63195, "ts": "2026-09-06T21:17:05Z", "hours": 2.3881, "text": "Made the base site! This is the base site I made! I personally really like the design. It features a music section, as well as a code projects section. I also added a footer with a spam trap email (because bots kept spamming my old email )"}]...
|
Title: xvcf.dev - my personal site! by @xvcf | Sta Title: xvcf.dev - my personal site! by @xvcf | Stardance
Devlogs:
Made the base site! This is the base site I made! I personally really like the design. It features a music section, as well as a code projects section. I also added a footer with a spam trap email (because bots kept spamming my old email )
README and more URLs! Heya! Really short devlog, but it’s worth mentioning! I have made my README.md file for my GitHub repo, and I have added two more URLs to the projects section of the site! One is currently commented out in the code, due to the project still being in review on Modrinth. That’s it already!
Ships:
I made a new version of my personal website! It includes a section about the music I make, a section about my coding projects, as well as a footer with contact information. It also features two SoundCloud widgets, as well as a typewriter animation for the text. My CSS uses a custom font!...
|
1793929895.4821174
|
1794016295.4821174
|
|
58855
|
The AURA Clock by @Mukund_Zolgikar | Stardance
|
Mukund_Zolgikar
|
0
|
2.99
|
0
|
[]
|
[{"post_id": 64221, "ts": "202 [{"post_id": 64221, "ts": "2026-09-08T14:03:24Z", "hours": 0.9667, "text": "Part 3 of my aura clock"}, {"post_id": 63608, "ts": "2026-09-07T15:13:31Z", "hours": 1.2089, "text": "#Devlog 2 , so in this i have sucsesfully transfered schematic editor to pcb editor my project"}, {"post_id": 62977, "ts": "2026-09-06T15:28:58Z", "hours": 0.8108, "text": "SO THIS IS THE PART 1 OF MY AURA CLOCK"}]...
|
Title: The AURA Clock by @Mukund_Zolgikar | Starda Title: The AURA Clock by @Mukund_Zolgikar | Stardance
Devlogs:
SO THIS IS THE PART 1 OF MY AURA CLOCK
#Devlog 2 , so in this i have sucsesfully transfered schematic editor to pcb editor my project
Part 3 of my aura clock...
|
1793516061.2360525
|
1794120861.2360525
|
|
38283
|
Orbital Congestion Simulator by @emin | Stardance
|
emin
|
1
|
29.59
|
217
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T18:33:26Z", "hours": 22.0, "multiplier": 18.13, "payout": 217, "blessing": "neutral", "text": "What did you make? A browser app that shows how crowded Earth orbit really is. You get a live 3D globe with thousands of satellites and debris from CelesTrak TLEs, filters, close-approach alerts, replays of real incidents, a simple Kessler “what if” panel, and on phones a Satellite Spotter that uses the sensors so you can aim at what’s actually overhead. What was challenging? Keeping ~12k objects moving without melting the browser. Propagation had to go into a worker, and close approaches were annoying because fast LEO crossings can vanish between frames if you sample too coarsely. Also burned myself once when an automated TLE refresh wrote a half-empty catalog (almost no stations) and the live site looked broken until I added hard minimums so thin fetches can’t ship. What are you proud of? That it feels like a real tool, not a slideshow. VERIFY mode for close approaches, the historical replays, and Spotter on a phone are the parts I keep showing people. Also getting five languages working and not letting the UI rot when the catalog updates. What should people know so they can test your project? Open the live demo on desktop first: https://orbital-congestion-simulator.vercel.app Skip or finish the short tour, turn on Color by Function, click a few objects, try a Historical Event, and open a close-approach card if any are listed. On a phone, pick something bright like the ISS and hit Spot — allow location/motion, go outside if the compass is weird, and do a figure-eight with the phone to recalibrate. Positions come from periodic TLEs + SGP4, not a live tracking API, so treat it as educational. Repo: https://github.com/muhammet842/orbital-congestion-simulator", "repo": "https://github.com/muhammet842/orbital-congestion-simulator", "demo": "https://orbital-congestion-simulator.vercel.app/"}]...
|
[{"post_id": 64218, "ts": "202 [{"post_id": 64218, "ts": "2026-09-08T13:44:32Z", "hours": 5.0706, "text": "After many shipping, I needed to rewrite most of codes in my project to decrease the AI usage. I had to delete some features like historical events and close approaches which are generated by AI. Now, my project is more specific. That’s how it looks like right now."}, {"post_id": 61557, "ts": "2026-09-04T15:07:18Z", "hours": 2.1139, "text": "For my latest update on the Orbital Congestion Simulator, I focused on building a tool that looks beyond today’s telemetry: the Kessler Syndrome Projection panel.Instead of just showing current satellite positions, this feature lets you model the future of Low Earth Orbit. You can test pre-set scenarios like Megaconstellation Boom, Green Space, or ASAT War, or tweak custom parameters directly:Launch Rate: Multiplier for annual launchesMitigation Rate: Success rate of post-mission disposalCollision Risk: Probability of cascading orbital collisionsThe engine calculates real-time updates for total object counts, debris volume, collision metrics, and distribution across LEO, MEO, and GEO regimes. You can also hit Play to watch the timeline scrub forward as orbital density builds up."}, {"post_id": 61046, "ts": "2026-09-03T19:13:01Z", "hours": 0.4086, "text": "One of my project’s important feature is showing the real close approaches between two satellite in next 24 hours. Click any alert card on the demo if the list isn’t empty. If it says scanning, give it a minute to find close approaches."}, {"post_id": 60400, "ts": "2026-09-02T18:19:07Z", "hours": 1.9686, "text": "A phone feature inside Orbital Congestion Simulator: pick a satellite, point your camera at the sky, and follow the on-screen guide until it matches what’s overhead — using GPS, compass, and live TLE positions."}, {"post_id": 58043, "ts": "2026-08-30T12:07:09Z", "hours": 19.7953, "text": "I’ve been building Orbital Congestion Simulator for a while now. It shows thousands of satellites and debris around Earth in 3D, using real TLE data from CelesTrak and SGP4 to calculate their positions. You can filter by orbit, select objects for details, check close approaches, replay historical collisions such as Iridium 33 and Cosmos 2251, and explore a simple Kessler Syndrome future projection. The interface is also available in several languages. Live demo: https://orbital-congestion-simulator.vercel.app"}]...
|
Title: Orbital Congestion Simulator by @emin | Sta Title: Orbital Congestion Simulator by @emin | Stardance
Devlogs:
I’ve been building Orbital Congestion Simulator for a while now. It shows thousands of satellites and debris around Earth in 3D, using real TLE data from CelesTrak and SGP4 to calculate their positions. You can filter by orbit, select objects for details, check close approaches, replay historical collisions such as Iridium 33 and Cosmos 2251, and explore a simple Kessler Syndrome future projection. The interface is also available in several languages. Live demo: https://orbital-congestion-simulator.vercel.app
A phone feature inside Orbital Congestion Simulator: pick a satellite, point your camera at the sky, and follow the on-screen guide until it matches what’s overhead — using GPS, compass, and live TLE positions.
One of my project’s important feature is showing the real close approaches between two satellite in next 24 hours. Click any alert card on the demo if the list isn’t empty. If it says scanning, give it a minute to find close approaches.
For my latest update on the Orbital Congestion Simulator, I focused on building a tool that looks beyond today’s telemetry: the Kessler Syndrome Projection panel.Instead of just showing current satellite positions, this feature lets you model the future of Low Earth Orbit. You can test pre-set scenarios like Megaconstellation Boom, Green Space, or ASAT War, or tweak custom parameters directly:Launch Rate: Multiplier for annual launchesMitigation Rate: Success rate of post-mission disposalCollision Risk: Probability of cascading orbital collisionsThe engine calculates real-time updates for total object counts, debris volume, collision metrics, and distribution across LEO, MEO, and GEO regimes. You can also hit Play to watch the timeline scrub forward as orbital density builds up.
After many shipping, I needed to rewrite most of codes in my project to decrease the AI usage. I had to delete some features like historical events and close approaches which are generated by AI. Now, my project is more specific. That’s how it looks like right now.
Ships:
What did you make? A browser app that shows how crowded Earth orbit really is. You get a live 3D globe with thousands of satellites and debris from CelesTrak TLEs, filters, close-approach alerts, replays of real incidents, a simple Kessler “what if” panel, and on phones a Satellite Spotter that uses the sensors so you can aim at what’s actually overhead. What was challenging? Keeping ~12k objects moving without melting the browser. Propagation had to go into a worker, and close approaches were annoying because fast LEO crossings can vanish between frames if you sample too coarsely. Also burned myself once when an automated TLE refresh wrote a half-empty catalog (almost no stations) and the live site looked broken until I added hard minimums so thin fetches can’t ship. What are you proud of? That it feels like a real tool, not a slideshow. VERIFY mode for close approaches, the historical replays, and Spotter on a phone are the parts I keep showing people. Also getting five languages working and not letting the UI rot when the catalog updates. What should people know so they can test your project? Open the live demo on desktop first: https://orbital-congestion-simulator.vercel.app Skip or finish the short tour, turn on Color by Function, click a few objects, try a Historical Event, and open a close-approach card if any are listed. On a phone, pick something bright like the ISS and hit Spot — allow location/motion, go outside if the compass is weird, and do a figure-eight with the phone to recalibrate. Positions come from periodic TLEs + SGP4, not a live tracking API, so treat it as educational. Repo: https://github.com/muhammet842/orbital-congestion-simulator...
|
1794041603.0115178
|
1794128003.0115178
|
|
59370
|
pulse-tab by @shaaz | Stardance
|
shaaz
|
1
|
6.02
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T12:22:28Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Pulse Tab is a modern, customizable new-tab dashboard featuring a live clock, weather, web search, quick links, themes, accent colors, smooth animations, and a glassmorphism UI. Everything is deployed and working on GitHub Pages. This was really amazing experience.. I loved to develop this tab:) This project was unguided btw!!!", "repo": "https://github.com/shaazumer066-bot/pulse-tab", "demo": "https://shaazumer066-bot.github.io/pulse-tab/"}]...
|
[{"post_id": 64209, "ts": "202 [{"post_id": 64209, "ts": "2026-09-08T13:18:35Z", "hours": 0.2903, "text": "upgraded pulse-tab to simple look……."}, {"post_id": 64032, "ts": "2026-09-08T04:48:15Z", "hours": 0.7333, "text": "added some new features"}, {"post_id": 63505, "ts": "2026-09-07T12:19:08Z", "hours": 5.1308, "text": "Finished Pulse Tab, a modern and customizable new-tab dashboard built with HTML, CSS, and JavaScript. It includes a live clock and date, location-based weather, web search, quick links, custom themes and accent colors, smooth animations, and a glassmorphism-style UI."}]...
|
Title: pulse-tab by @shaaz | Stardance
Devlogs:
F Title: pulse-tab by @shaaz | Stardance
Devlogs:
Finished Pulse Tab, a modern and customizable new-tab dashboard built with HTML, CSS, and JavaScript. It includes a live clock and date, location-based weather, web search, quick links, custom themes and accent colors, smooth animations, and a glassmorphism-style UI.
added some new features
upgraded pulse-tab to simple look…….
Ships:
Pulse Tab is a modern, customizable new-tab dashboard featuring a live clock, weather, web search, quick links, themes, accent colors, smooth animations, and a glassmorphism UI. Everything is deployed and working on GitHub Pages. This was really amazing experience.. I loved to develop this tab:) This project was unguided btw!!!...
|
1793774885.640089
|
1794638885.640089
|
|
57654
|
ramenHUB by @heian | Stardance
|
heian
|
0
|
3.53
|
0
|
[]
|
[{"post_id": 64207, "ts": "202 [{"post_id": 64207, "ts": "2026-09-08T13:15:25Z", "hours": 0.3206, "text": "Finished the README to the ramenHUB! Shared and shipping it now! https://oshwlab.com/minayeh1347/project_zzwrytvq"}, {"post_id": 63899, "ts": "2026-09-07T22:44:59Z", "hours": 3.2094, "text": "Finished the ramenHUB! Lots of learning how to use EasyEDA! In some ways, quite a bit easier than using KiCad or Altium, in other ways a bit more difficult. I do miss just knowing where different commands are, but I think it’s a bit easier to route differential pairs and order from JLCPCB. Had a lot of fun with silkscreen art (and a bit of hidden copper art too)!"}]...
|
Title: ramenHUB by @heian | Stardance
Devlogs:
Fi Title: ramenHUB by @heian | Stardance
Devlogs:
Finished the ramenHUB! Lots of learning how to use EasyEDA! In some ways, quite a bit easier than using KiCad or Altium, in other ways a bit more difficult. I do miss just knowing where different commands are, but I think it’s a bit easier to route differential pairs and order from JLCPCB. Had a lot of fun with silkscreen art (and a bit of hidden copper art too)!
Finished the README to the ramenHUB! Shared and shipping it now! https://oshwlab.com/minayeh1347/project_zzwrytvq...
|
1793893934.5405035
|
1794757934.5405035
|
|
59761
|
flickering of led in command by @Kakkarotto | Star flickering of led in command by @Kakkarotto | Stardance...
|
Kakkarotto
|
0
|
0.37
|
0
|
[]
|
[{"post_id": 64204, "ts": "202 [{"post_id": 64204, "ts": "2026-09-08T13:01:41Z", "hours": 0.3669, "text": "im working on a simple flickering of led COB like a real iron man repulsors !!"}]...
|
Title: flickering of led in command by @Kakkarotto Title: flickering of led in command by @Kakkarotto | Stardance
Devlogs:
im working on a simple flickering of led COB like a real iron man repulsors !!...
|
1793638321.8532548
|
1794243121.8532548
|
|
59352
|
slack bort by @Anastt | Stardance
|
Anastt
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T12:56:28Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "made a slack bot named bort for the “make a slackbot” mission, pretty cool process overall. Ive never worked with vs code b4 so that was pretty fun. Its a really rewarding thing to see sth you made working. bort is running on the hackclub slack sever 24/7 through nest, go ping him!!", "repo": "https://github.com/Anastt77/stuff-for-stardance", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 64191, "ts": "202 [{"post_id": 64191, "ts": "2026-09-08T12:47:04Z", "hours": 0.3656, "text": "finished and tested the bot after deploying it with nest, rll enjoyed the whole process. gonna ship the project now “”"}, {"post_id": 63789, "ts": "2026-09-07T19:06:28Z", "hours": 0.825, "text": "Did the code for the bot, it works!!!!! now i need to wait for nest to get me approved to be able to run it 24/7 and complete the project"}, {"post_id": 63642, "ts": "2026-09-07T15:48:09Z", "hours": 0.4119, "text": "general topic research and downloading the necessary vs code stuff, as well as the first couple of steps. gonna continue w the code and track it with hackatime if i manage to figure out how that works"}]...
|
Title: slack bort by @Anastt | Stardance
Devlogs: Title: slack bort by @Anastt | Stardance
Devlogs:
general topic research and downloading the necessary vs code stuff, as well as the first couple of steps. gonna continue w the code and track it with hackatime if i manage to figure out how that works
Did the code for the bot, it works!!!!! now i need to wait for nest to get me approved to be able to run it 24/7 and complete the project
finished and tested the bot after deploying it with nest, rll enjoyed the whole process. gonna ship the project now “”
Ships:
made a slack bot named bort for the “make a slackbot” mission, pretty cool process overall. Ive never worked with vs code b4 so that was pretty fun. Its a really rewarding thing to see sth you made working. bort is running on the hackclub slack sever 24/7 through nest, go ping him!!...
|
1793962102.9236586
|
1794048502.9236586
|
|
58994
|
the dumb assistant by @lahcen | Stardance
|
lahcen
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T13:06:57Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made the bare bones slack bot this is just to learn how to follow and ship a project my next one will be more creative hopefully", "repo": "https://github.com/lahcenkhmaissi/dumb-slack-bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0C0G8PHK5X"}]...
|
[{"post_id": 64187, "ts": "202 [{"post_id": 64187, "ts": "2026-09-08T12:39:16Z", "hours": 0.2767, "text": "i made it finally 24/7"}, {"post_id": 63941, "ts": "2026-09-08T00:54:39Z", "hours": 0.3192, "text": "i made the bot im kinda stuck with the hosting if you can help me hit me up on slack"}]...
|
Title: the dumb assistant by @lahcen | Stardance
Title: the dumb assistant by @lahcen | Stardance
Devlogs:
i made the bot im kinda stuck with the hosting if you can help me hit me up on slack
i made it finally 24/7
Ships:
i made the bare bones slack bot this is just to learn how to follow and ship a project my next one will be more creative hopefully...
|
1793922737.2998145
|
1794009137.2998145
|
|
19805
|
Tick Tock by @ryderklh | Stardance
|
ryderklh
|
5
|
85.0
|
988
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T12:39:47Z", "hours": 30.0, "multiplier": 12.69, "payout": 386, "blessing": "neutral", "text": "WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a Timer and a Stopwatch. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title automatically save in localStorage & url# Digital Clock 12-hour / 24-hour format 3 Font styles (Sans, Serif, Mono) Fullscreen mode (Header/Footer kept!) Smooth breathing colon animation automatically save in localStorage & url# ⭐Timer ⭐Mutiple timers at one page ⭐Keep going after refreshing website ⭐Circular progress bar ⭐Sortable timers ⭐Alarm and flash on completion ⭐Stopwatch ⭐Mutiple stopwatches at one page ⭐Keep going after refreshing website ⭐Sortable timers ⭐Able to lap and split ⭐Able to copy total time and laps info Time Progress Bar Export as image Switchable hide/show Pomodoro Timer Customable number of cycles Pause at any time Notification Sound Lightweight Light mode/Dark mode Quick link to other tools WHAT I LEARNT? A lot of new things about git How to write devlogs JS, Astro… TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif) ⭐Timer ⭐Stopwatch Time Progress Pomodoro Timer ⭐means new features of the previous ship", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}, {"ship_num": 2, "ts": "2026-08-02T07:51:47Z", "hours": 22.0, "multiplier": 15.66, "payout": 346, "blessing": "neutral", "text": "WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a Pomodoro Timer and a Time Progress Displayer. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title automatically save in localStorage & url# Digital Clock 12-hour / 24-hour format 3 Font styles (Sans, Serif, Mono) Fullscreen mode (Header/Footer kept!) Smooth breathing colon animation automatically save in localStorage & url# ⭐Time Progress Bar ⭐Export as image ⭐Switchable hide/show ⭐Pomodoro Timer ⭐Customable number of cycles ⭐Pause at any time ⭐Notification Sound Lightweight ⭐Light mode/Dark mode ⭐Quick link to other tools ⭐means new features of the previous ship WHAT I LEARNT? A lot of new things about git JS, Astro… TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif) Time Progress Pomodoro Timer", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}, {"ship_num": 3, "ts": "2026-07-15T07:24:47Z", "hours": 18.0, "multiplier": 7.76, "payout": 136, "blessing": "neutral", "text": "WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a beautiful, highly customizable Digital Clock. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features ⭐Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title ⭐Digital Clock ⭐12-hour / 24-hour format ⭐3 Font styles (Sans, Serif, Mono) ⭐Fullscreen mode (Header/Footer kept!) ⭐Smooth breathing colon animation automatically save in localStorage & url# Lightweight ⭐means new features of the previous ship WHAT I LEARNT? A lot of new things about Astro and NodeJS How to structure routes for multiple tools (Refactoring files) Advanced CSS (using global variables to adjust layout gaps dynamicly) REPLIES Thank you so much for the 115 stardust and the amazing feedback! I read every single review from Ship #2, and they helped me make this update so much better. 1. ABOUT MORE FEATURES Many suggested adding more tools or events. I turned the website into a Hub and built the Digital Clock as our second official tool! 2. ABOUT THE SCREENSHOT IN README Two reviewers mentioned adding screenshots. I’ve updated the README with fresh screenshots so people skimming through can see the UI instantly. TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif)", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}, {"ship_num": 4, "ts": "2026-07-01T04:33:49Z", "hours": 13.0, "multiplier": 9.33, "payout": 115, "blessing": "neutral", "text": "WHAT I MADE/THINK? I made a long-term countdown timer for events. It’s really hard for me to build things in a way that is completely new to me. I’ve been stuck not only with programming languages but also with English. However, through this project (STARDANCE), though I didn’t create something really impressive, I think I learnt A LOT. Features Live Countdown Full mode ⭐Days mode Customizable ⭐Change Target Date ⭐Edit Event Title ⭐automatically save in localStorage & url# ⭐share btn Dark Mode UI ⭐means new features of the previous ship WHAT I LEARNT? basic GIT code basic HTML/CSS3/JS How to write DevLogs REPLIES I’ve read all the replies of the ship#1. And lots of them mentioned the same thing. Thanks to everyone who give me feedback. Hope there’s the better version of previous ships. 1. ABOUT CHANGEABLE TARGET Now you can pick any target date and even edit the event title right from the sidebar. 2. ABOUT LANGUAGE I’ve fully migrated the app to English now. 3. ABOUT DEVLOG I’ve leveled up my devlog game for this update—documented all the engineering details and bugs I fixed this time. TRY IT! 2027 New Year NC Finals Weekend US Open", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}, {"ship_num": 5, "ts": "2026-06-16T15:10:14Z", "hours": 2.0, "multiplier": 2.98, "payout": 5, "blessing": "neutral", "text": "What I Made I made a Countdown Web App called “Tick Tock.” It shows the exact years, months, days, hours, minutes, and seconds left until January 1, 2027. What Was Challenging Calculating months and years was hard. Months have different days (28, 30, or 31), so I had to write smart JavaScript code to borrow days and keep the timer 100% accurate. What I Am Proud Of It Works!: Actually this is my first time using html to build a website. Clean Design: I fixed the layout bugs and made a dark-mode interface. How to Test It https://klhrd.github.io/TickTock/", "repo": "https://github.com/klhrd/TickTock", "demo": "https://klhrd.github.io/TickTock"}]...
|
[{"post_id": 64186, "ts": "202 [{"post_id": 64186, "ts": "2026-09-08T12:37:49Z", "hours": 0.7658, "text": "Devlog 52: GitHub Pages Audio Path Resolution Fixes Absolute Repository Subpath Hardcoding Replaced environment variable dynamic paths ( import.meta.env.BASE_URL ) with direct base-path URLs ( '/TickTock/sounds/alarm.wav' ) in playAlarm() . i have no idea why that happened"}, {"post_id": 62827, "ts": "2026-09-06T11:02:52Z", "hours": 0.4825, "text": "Devlog 51: Asset Migration Asset Directory Migration Moved audio assets ( alarm.wav and notif.wav ) from the static /public/sounds/ directory into the source-managed asset pipeline at src/assets/sounds/ . Module Import & Bundler Integration Replaced hardcoded absolute URL paths ( \"/public/sounds/...\" ) with explicit ES module imports ( import alarmSoundUrl from '../assets/sounds/alarm.wav' and import notifSoundUrl from '../assets/sounds/notif.wav' ) across timer.js and pomodoro.js ."}, {"post_id": 62807, "ts": "2026-09-06T10:16:06Z", "hours": 1.0094, "text": "Devlog 50 Layout Refactoring Scroll Restructuring Shifted .stopwatch-container layout from vertical wrapping ( flex-wrap: wrap ) to a single-row horizontal scroll track ( flex-wrap: nowrap with overflow-x: auto )."}, {"post_id": 62744, "ts": "2026-09-06T08:02:07Z", "hours": 2.8789, "text": "Devlog 49: Lap Data Export Plaintext Lap Data Serialization formatLapsOutput : a dedicated text formatter that converts active stopwatch data into structured tab-separated values (TSV) suitable for copying. Async Clipboard Copy Logic Implemented an async wrapper using navigator.clipboard.writeText() with built-in error handling ( try/catch ) and user alerts for unsupported environments or clipboard permission rejections. Interactive Copy Feedback UI Wired copyBtn click events to trigger text copying and dynamically update the button icon ( check or error ) and theme accent color."}, {"post_id": 60192, "ts": "2026-09-02T12:48:53Z", "hours": 1.0839, "text": "Devlog 48: DOM Selector Bugfixes & Homepage Quick Access DOM Query Selector & Reference Repairs Updated querySelector in updateListedStopwatch from target class .listed-stopwatch-demo to parent wrapper .listed-stopwatch[data-id=\"...\"] , resolving element lookup failures during live updates. Homepage Integrated direct links and dedicated preview cards for the Stopwatch application into index.astro and BaseLayout.astro ."}, {"post_id": 59556, "ts": "2026-09-01T13:21:58Z", "hours": 0.6392, "text": "Devlog 47: Pause Compensation Pause Duration Offset Implemented pauseDuration calculation Date.now() - pauseStartTime during resume actions status === \"paused\" . Shifted all existing lap timestamps lap.endTime += pauseDuration forward to subtract paused time intervals. State-Aware Timestamp Resolution Standardized timestamp evaluation across renderers handleLap , renderListedStopwatch , updateListedStopwatch , and updateCardUI using ternary state checks: const now = stopwatch . status === \" running \" ? Date . now () : stopwatch . pauseStartTime ;"}, {"post_id": 58906, "ts": "2026-08-31T13:58:04Z", "hours": 1.9278, "text": "Devlog 46: UI Fine-tuning & Timing Logic Optimization Lap Calculations -Replaced laps.forEach with for (let j = 0; j <= i; j++) to ensure cumulative total times ( totalMS ) strictly correspond to the current lap index. Layout Enhanced formatTime() rendering logic by applying inline styles width , transform: scaleX(0.8) , text-align: center to dynamic span elements, preventing font-width shifting during rapid ticker updates. Dynamic Rendering Integrated updateListedStopwatch() into the global interval loop, enabling sidebar preview labels to tick synchronously with active main cards. Optimized state updates to target individual time elements instead of triggering full list re-renders on every ticker frame. Added optional chaining laps?.[0]?.startTime across rendering pipelines to prevent runtime exceptions when initializing empty stopwatches."}, {"post_id": 57947, "ts": "2026-08-30T08:58:55Z", "hours": 3.6403, "text": "Devlog 45: Initial Stopwatch Logic & Dynamic State Scaffolding Core State & Lap Data Architecture Designed a stopwatch schema tracking dynamic state ( idle | running | paused ) and an array of individual lap records ( laps ). Streamlined time calculation to compute elapsed milliseconds dynamically directly using timestamps ( Date.now() - lap.startTime ), eliminating redundant accumulator fields like startTime or elapsedTime . Interactive Handlers & Lifecycle Operations Implemented core lifecycle handlers: handleStart , handlePause , handleReset , handleLap , and handleDelete . Integrated updateCardUI and updateCardBtns to reflect running, paused, and idle UI visual feedback dynamically. Built active DOM updates for lap histories inside updateCardLapGrid using index-based duration summation for lap and total times. Enabled global runtime updates via startGlobalTick() timer intervals and list reordering via handleMoveStopwatch() ."}, {"post_id": 57110, "ts": "2026-08-29T06:40:01Z", "hours": 1.7286, "text": "Devlog 44: Stopwatch Layout Template & Layout Migration Ported side-menu and main container structures from Timer to Stopwatch layout ( index.astro ). Structured sidebar elements: .stopwatch-adding-action-btn and .stopwatch-list-container for dynamic item injection. Added template placeholders ( #listed-stopwatch-template and #stopwatch-card-template ). Stopwatch Card & Lap Data Display Integrated core display components: .stopwatch-text and .stopwatch-text-sub . Created interactive control group ( .stopwatch-card-action-btn ) supporting Start, Pause, Replay, and Lap actions. Designed a 3-column CSS Grid table ( .stopwatch-lap-container ) to organize lap metrics ( i , lap , total )."}, {"post_id": 55411, "ts": "2026-08-27T06:58:34Z", "hours": 0.3914, "text": "Devlog 43: Timer Integration & Navigation Update Navigation & Home Page Integration Added Timer card entry to the main landing page ( tool-card layout with hourglass Material symbol). Added direct Timer link to the global navigation bar in BaseLayout.astro . Feature Branch Merge Merged feature/timer-main into main , bringing in the new /timer page route, timer.js logic, sound assets ( alarm.wav ), and updated layout components. YEAYYY"}, {"post_id": 55007, "ts": "2026-08-26T13:10:35Z", "hours": 1.7997, "text": "Devlog 42: Timer Reordering & List Re-Sorting Reordering UI Controls Added .sort-action control group with .sort-up and .sort-down arrow buttons to the template layout. Dynamic Array Mutation & Re-rendering Implemented handleMoveTimer(id, direction) to handle array element swapping with upper and lower boundary bounds checks. Bound click handlers in renderListedTimer() to execute reordering operations, trigger LocalStorage updates, and instantly re-render the UI layout via renderAll() ."}, {"post_id": 54924, "ts": "2026-08-26T04:43:44Z", "hours": 0.4733, "text": "Devlog 41: Dual-Text Display & Running Animation Sub-Text Total Duration Display Added .timer-text-sub element inside the ring container to preserve and display the initial totalSeconds value. Styled sub-text using lighter font weights and var(--text-muted) . Dynamic Running Visual Effects Added .is-running state toggle based on timer.status === \"running\" . Implemented @keyframes timer-text-flash pulsing animation to provide continuous visual feedback while countdown is active."}, {"post_id": 54897, "ts": "2026-08-26T03:33:47Z", "hours": 1.2658, "text": "Devlog 40: Alarm Audio & LocalStorage Independent Alarm Audio Handling new Audio() allowing each finished timer to play independent looping sound effects concurrently. Bound alarm termination directly to handleReset() and handleDelete() . LocalStorage Serialization Fixes Sanitized timer state object before serialization in saveTimers() by stripping transient DOM/Audio references ( alarmAudio ) to prevent JSON stringification crashes. Added type validation ( typeof alarmAudio.pause === \"function\" ) inside stopAlarm() to prevent runtime TypeError issues during state rehydration. Post-Reload Alarm & Visual Sync Updated renderAll() to resume alarm sound playback and background pulse animation for ended timers across page reloads. Cleared endTime correctly during timer reset to normalize state lifecycle. alarm.wav Using LMMS to create alarm.wav for the alarming when timer.status===\"ended\" ."}, {"post_id": 54221, "ts": "2026-08-25T03:40:02Z", "hours": 0.5936, "text": "Devlog 39: Smooth Action Button Transitions Button Collapse & Spacing Animate Added max-width , margin: 0 , and padding: 0 constraints to .is-hidden to smoothly collapse hidden buttons without leaving blank layout gaps. Expanded base state with explicit max-width boundary to allow width-based CSS transitions. much smoother ♪(´▽`)"}, {"post_id": 53651, "ts": "2026-08-24T09:46:13Z", "hours": 4.4989, "text": "Devlog 38: Multi-Timer Logic & Bug Fixes JS Managed multi-timer state using plain object arrays. Implemented saveTimers() and loadTimers() for LocalStorage persistence. Linked input fields with setupArrowBtns() to handle unit value increment and decrement bounds. Cloned <template> elements to dynamically generate sidebar list items and main cards via renderAll() . Added item deletion logic via handleDelete() to update state and UI. Established a startGlobalTick() loop running every 200ms using endTime offsets to prevent background tab drift. Calculated SVG circle strokeDashoffset dynamically based on remaining time ratios. Debugging & UI Patching Placing <template> tags inside slot=\"template-content\" . Adding missing id=\"timer-container\" . .textContent.textContent to .textContent Data.now() to Date.now() . timers.status to timer.status . finally got multi-timer state and progress rings syncing properly… bugs fixed and back to smooth sailing…"}, {"post_id": 52458, "ts": "2026-08-22T16:09:04Z", "hours": 7.2022, "text": "Devlog 37: Multi-Timer UI Layout & Input Controls Form Inputs & Adjustments Built HH/MM/SS number input boxes with range limits and zero-padding logic on blur. Implemented stepper adjustment buttons for quick time value tweaking. Sidebar Timer List Layout Added sidebar timer list container to preview user-created countdown items. Integrated quick action delete buttons for item removal. Main Dashboard Circular Timer Constructed countdown card layout featuring SVG dynamic progress ring. Centered time readout using tabular-nums formatting to eliminate number jitter. Action Control Group Laid out card control buttons including play, pause, and replay. the ui was so tiring… i DID remember to open a new branch (feature/timer-main) …"}, {"post_id": 39335, "ts": "2026-08-02T07:50:09Z", "hours": 0.4922, "text": "Devlog 36: Update Docs & Merge Update Docs Readme: Add the links of the new tools Ship#4: Write Ship#4.md Merge!!!!! Merge feature/pomodoro into main Fortunately no error poping out!"}, {"post_id": 39323, "ts": "2026-08-02T07:15:21Z", "hours": 0.8742, "text": "Devlog 35: Pomodoro State Transition & Auto-Loop Refactoring Core Logic & State Fixes Auto-Phase Transition Fix : Resolved state lock ( status: 'running' ) preventing automatic transition from Focus to Break. Added explicit status resetting in handlePhaseEnd before invoking startTimer . Timer Precision : Replaced Math.round with Math.ceil in countdown logic to eliminate early sound triggers caused by rounding errors. Timestamp Recalibration : Implemented dynamic endTime re-calculation when switching modes ( work ↔ break ) to maintain state consistency."}, {"post_id": 39287, "ts": "2026-08-02T05:00:19Z", "hours": 2.2125, "text": "Devlog 34: Pomodoro Core Timer & Segmented Timeline Integration Features Implemented static audio notification system via HTML5 Audio API targeting public/sounds/notification.mp3 . Architecture & State Management Implemented timestamp delta verification ( endTime - Date.now() ) to maintain countdown accuracy during background tab throttling or page reloads. Decoupled primary control actions across main page and sidebar controls ( #menu-start-btn , #cycles-input ). Bug Fixes & Refactoring Fixed ReferenceError during event initialization by enforcing state argument scoping within bindEvents . Refactored loadStateFromLocalStorage parsing logic to filter \"undefined\" string literals and clear corrupted cache gracefully."}, {"post_id": 37493, "ts": "2026-07-30T08:56:03Z", "hours": 4.0386, "text": "Devlog 33: Pomodoro Segmented Timeline & Layout Integration Segmented Timeline Layout Integrated BaseLayout slots for the new Pomodoro page, separating sidebar settings from the main dashboard. Built a visual segmented timeline ( .timeline-track ) with flex-proportional work/break segments and a dynamic progress pin ( .timeline-pin ). Core Logic & State Setup Refactored state object fields ( workDuration , breakDuration , timeRemaining ) to ensure clean state initialization. Added timestamp delta checking on startup to preserve accurate remaining time across page reloads or background tabs."}, {"post_id": 36218, "ts": "2026-07-28T04:48:53Z", "hours": 0.3056, "text": "Devlog 32: Dynamic Canvas Aspect Ratio Calculation Features & Refactoring Implemented dynamic aspect ratio calculation for PNG exports ( Height = 140 * Count + 180 ). Applied responsive auto-scaling for .export-canvas to ensure optimal vertical spacing regardless of selected cards count. Merged feature/export-image branch into main after verifying clean template rendering and correct node referencing."}, {"post_id": 36205, "ts": "2026-07-28T04:19:06Z", "hours": 2.29, "text": "Devlog 31: Template Canvas Architecture & Reference Refactoring Independent Canvas Architecture Replaced direct DOM manipulation of live dashboard elements with a dedicated, off-screen template canvas ( .export-canvas ). Cloned active .progress-card elements into an isolated container ( .export-cards-holder ), ensuring the on-screen UI remains completely untouched and non-flickering during image generation. Moved aspect ratio, high-resolution dimensions (600x600), padding, and font-scaling rules directly into CSS for clean separation of concerns. Error Fixes & Cleanup Fixed ReferenceError caused by leftover references to targetContainer and stampEl inside initExportImageFeature . Updated html2canvas target from main dashboard container to the temporary canvasEl . Streamlined fallback DOM cleanup logic inside the try...catch block to guarantee off-screen elements are properly garbage collected."}, {"post_id": 35003, "ts": "2026-07-26T04:47:24Z", "hours": 1.3903, "text": "Devlog 30: Image Export Feature & Template Refactoring Image Export Feature Integrated html2canvas library to enable one-click PNG image export of the active progress dashboard. Added an “Export as Image” button inside the custom sidebar menu with dedicated styling. Handled theme-aware background rendering by dynamically querying computed global CSS variables ( --bg-app ). DOM Template & Dynamic Watermark Refactored dynamic watermark creation using the HTML <template> element ( #export-watermark-template ), cleanly separating DOM structure from JavaScript execution logic. Configured dynamic timestamps using now.toLocaleString() to inject real-time snapshot dates and times into exported images. Added ignoreElements filtering in html2canvas to prevent unchecked/hidden .progress-card elements from creating top/bottom visual gaps in exported images. Bug Fixes & Refactor Fixed a TypeError on insertBefore / appendChild by referencing clone.firstElementChild to extract the correct Element Node from DocumentFragment . Resolved HTML/JS ID typos ( export-watermark-template ) and method call mismatches to ensure reliable script execution."}, {"post_id": 33941, "ts": "2026-07-24T08:29:42Z", "hours": 0.9675, "text": "Devlog 29: URL Hash Sync, LocalStorage Persistence & Universal Share Event URL & State Persistence Integrated URL Hash ( #year,month,... ) and localStorage synchronization into time-progress.js to preserve users’ toggle preferences across reloads and shares. Added a hashchange event listener to ensure UI check states dynamically update when users use browser navigation (Back/Forward). Centralized Layout Share Event Refactored the #share-menu-btn event listener into BaseLayout.astro , eliminating duplicate share logic across individual tool pages. Leveraged document.title dynamically to provide clean, contextual titles for native Web Share API and clipboard copy fallbacks."}, {"post_id": 33891, "ts": "2026-07-24T05:26:11Z", "hours": 1.0658, "text": "Devlog 28: Layout Overflow Fixes and UI Polish Layout & Scrollbar Stability Added scrollbar-gutter: stable to html in global.css to reserve vertical scrollbar space, preventing horizontal overflow caused by layout reflow. Applied overflow-x: hidden to main containers and .progress-card to prevent percentage tags and thumbs from clipping past container edges at 100%. CSS Rule Corrections Fixed CSS property error by setting .track width to 100% instead of unitless value. Fine-tuned progress bar wrapper styles to ensure smooth visual layout under both dark and light themes."}, {"post_id": 33283, "ts": "2026-07-23T02:15:39Z", "hours": 4.0661, "text": "Devlog 27: Time Progress Bar Feature Porting and JS Modular Refactoring Astro Slot Architecture & CSS Variable Integration Ported the standalone Time Progress Bar tool into the Astro layout system using designated slots ( #head , #header-content , #custom-menu , and #main-content ). Converted hardcoded hex colors into semantic global theme CSS variables ( --accent-color , --component-bg-standard , --text-heading ), ensuring native support for Dark and Light mode toggling. Replaced the dropdown filter with sidebar multi-select checkboxes for custom control over visible time progress units. JavaScript Modular Refactoring & Bug Fixes Decoupled single-script logic into dedicated, single-responsibility functions ( initSidebarToggles , calculateTimeProgress , updateTicksUI , updateProgressCardUI , and updateSingleCardUI ). Resolved JavaScript syntax errors, including missing function keywords, JS Automatic Semicolon Insertion (ASI) line-break issues on return statements, and uncalled Date method parentheses. Streamlined animation frame rendering by passing structured data from math calculations directly into UI updater functions."}, {"post_id": 32236, "ts": "2026-07-21T08:41:47Z", "hours": 0.8689, "text": "Devlog 26: Typo Correction and Expandable Directory Menu Typo Correction Fixed property naming error from –accent-contract-text to –accent-contrast-text in global CSS. Expandable Tools Directory Converted static directory links into a native component with smooth arrow rotation styling. Enabled server-side open status via open={isHomePage} in BaseLayout, defaulting to expanded on the home hub and collapsed on sub-tool pages."}, {"post_id": 31792, "ts": "2026-07-20T13:53:15Z", "hours": 1.3728, "text": "Devlog 25: Theme Toggle Implementation with Dark and Light Modes Light Theme Tokens Override Added :root[data-theme=“light”] in global.css to swap semantic theme variables for light background, borders, and high-contrast amber accents. Preserved existing component styles while smoothly transitioning body colors on theme switch. Sidebar Toggle Component and Logic Integrated a theme toggle button (#theme-toggle-btn) inside the BaseLayout header actions. Built persistent theme state logic using localStorage and system prefers-color-scheme detection. Used textContent on icon elements to dynamically switch between dark_mode and light_mode icons without type errors."}, {"post_id": 31215, "ts": "2026-07-19T13:11:06Z", "hours": 2.2447, "text": "Devlog 24: Color Architecture Refactoring with Design Tokens Two-Tier CSS Variables Global Tokens: Extracted hardcoded hex colors into primitive color names inside global.css. Theme Tokens: Created a semantic layer mapping elements like –bg-app and –accent-color directly to global tokens. Clean Codebase Update Component Styles: Replaced absolute colors across the layout, dashboard hub, countdown, and clock templates with var() variables. Script Alignment: Updated dynamic checkmark colors in JavaScript to read –accent-color instead of raw hex values. Future Scope: The design is now fully abstracted, meaning light mode implementation will only require token swapping without editing individual component code."}, {"post_id": 28755, "ts": "2026-07-15T06:57:18Z", "hours": 0.2736, "text": "Devlog 23: Global Branding Relocation and Logo Navigation Moving Title Label to BaseLayout Unifying the brand and improving UX Header Linkification : Refactored the main title-label (“TickTock”) out of individual page templates and integrated it directly into the global BaseLayout.astro . Back-to-Home UX : Wrapped the brand title in an <a> tag. Now, clicking the brand logo on any sub-tool instantly routes the user back to the home dashboard Hub, offering an intuitive, web-app-like navigation experience."}, {"post_id": 28732, "ts": "2026-07-15T05:22:01Z", "hours": 0.4186, "text": "Devlog 22: F11-Equivalent Fullscreen via Root Element Standardizing Fullscreen to document.documentElement Fixing disappearing layout elements The Pitfall : Previously, calling requestFullscreen() on the individual #clock-screen container caused the browser to isolate it from the DOM layout. This triggered default browser styling which rendered a pitch-black backdrop, and completely hid crucial layout parts like the header, footer, and side menu buttons. The Solution : We shifted the fullscreen API target from the sub-container directly to document.documentElement (the global <html> node). This aligns the button’s behavior perfectly with standard keyboard F11 fullscreen events. The Result : All global UI elements (header, footer, navigation) now scale smoothly and remain perfectly visible and interactive without any layout shifts or z-index clashing."}, {"post_id": 28188, "ts": "2026-07-14T09:57:23Z", "hours": 1.1836, "text": "Devlog 21: Architecture Normalization and Layout Fine-Tuning Directory Restructuring & Future-Proofing Preparing for scalability Digital Clock Renaming : To prevent future routing conflicts as the project scales, we successfully renamed clock.js to digital-clock.js and adjusted the main page path to /src/pages/digital-clock/ . This cleanly isolates this feature from upcoming modules like World Clock or Pomodoro Timer. Dependency Clean-up : Updated all asset paths and module script injections across the hub, fully standardizing the multi-tool routing structure under the /TickTock/ basePath. Layout Fixes with Global CSS Variables Resolving invalid CSS properties via JS injection Replacing Non-Standard Styles : Fixed a crucial layout issue where arbitrary if(...) conditions inside CSS were breaking colon component constraints. Dynamic Width Injection : Migrated the layout parameters directly into digital-clock.js using the standard document.documentElement.style.setProperty API. The .colon element now seamlessly reads the responsive --clock-colon-width CSS variable, adapting perfectly across Sans, Serif, and Mono configurations without any jumping side effects."}, {"post_id": 28133, "ts": "2026-07-14T07:16:36Z", "hours": 2.5658, "text": "Devlog 20: Settings Memory and Dynamic Sharing Adding Setting Memory and URL Sync Keeping your clock layout saved Persistent settings : The clock now remembers your favorite layout. Your choice of time format (12/24h) and font style is instantly saved directly to your browser’s local storage. URL sync : We linked these settings directly to the URL hash (like #12hr&mono ). When you refresh or load the page, your exact preferred theme loads up right away. Smart Sharing and Hub Integration Spreading the time and completing the hub Dynamic sharing : Added a share button that grabs your exact custom clock URL. It uses the Web Share API when available, and easily falls back to copying the link to your clipboard with a smooth checkmark animation on success. Connecting the dashboard : Linked the completed clock page to our homepage hub grid and updated the site layout, officially making TickTock a multi-tool station."}, {"post_id": 27501, "ts": "2026-07-13T03:45:40Z", "hours": 3.5772, "text": "Devlog 19: Building the Adaptable Digital Clock Implementing Native Date Formatting Problem : The clock header needed to show the full current date (e.g., “Sunday, July 12, 2026”) dynamically without taxing browser performance or importing heavy external date libraries. Solution : Added a #date-label placeholder to the template and used the native JavaScript toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }) inside the main runtime loop to render lightweight, perfectly formatted timestamps on every update. Creating Fluid Visual Oscillations via Math.sin() Problem : Traditional blinking colons look rigid and distracting, failing to deliver a premium, organic feel for an active time-management tool. Solution : Avoided simple CSS toggles and leveraged a true trigonometric formula inside a requestAnimationFrame loop. By mapping high-precision timestamps through Math.sin() , the opacity gracefully curves between 0.2 and 1.0 , producing a perfectly smooth, wave-like breathing animation. Binding Custom Display and Layout Controls Problem : The interface required instant controls for 12/24-hour formats, font adjustments, and a standalone full-screen view while managing layout side effects. Solution : Wired up event listeners to modify global runtime states and inline CSS font families on the fly. Integrated the HTML5 Fullscreen API onto the #clock-screen element, backed by a global fullscreenchange listener to seamlessly catch manual ESC escapes and keep the toggle button states perfectly in sync."}, {"post_id": 26388, "ts": "2026-07-11T04:39:33Z", "hours": 0.4408, "text": "Devlog 18: Adding Hub Sharing Functionality Integrating Client-Side Script Safely Implementing the Homepage Share Button Problem : The dashboard needed a simple button to share the current hub URL, but running browser APIs directly could break Astro’s static site generation (SSG) compiler. Solution : Added an inline <script is:inline> block to the index page. This bypasses the server-side build process and safely binds the sharing and clipboard logic only when the page loads in the user’s browser."}, {"post_id": 25792, "ts": "2026-07-10T07:52:27Z", "hours": 1.6289, "text": "Devlog 17: Project Hub and README Expansion Moving from a Single Page to a Tool Hub Goal : Transformed TickTock from a single countdown page into a comprehensive time-management utility hub powered by Astro. Implementation : Created a main dashboard page ( src/pages/index.astro ) to serve as the gateway for current and future time tools, using a shared layout for a consistent user experience. Adding Future Roadmap and Project Documentation Goal : Wrote a complete README.md to document the new project architecture, local testing steps, and automated GitHub Pages deployment. Future Vision : Updated the repository roadmap to announce upcoming tools built for the Hack Club Stardance event, including a Pomodoro Timer, World Clock Board, Minimalist Timer, and Time Progress Bars."}, {"post_id": 24763, "ts": "2026-07-08T15:29:37Z", "hours": 1.7703, "text": "Devlog 16: Dashboard Layout Fixes Fixing Layout and Compression Issues Compressed Card Icons Problem : The card icons shrank and deformed when the screen size changed. Solution : Added flex-shrink: 0; to the icon class to force them to keep their correct size. Cards Stacking Vertically Problem : The tool cards unexpectedly stacked into a narrow, single column right in the middle of the screen. Even though there was plenty of empty space on both sides of the desktop browser, the grid refused to expand horizontally and display the cards side-by-side. Troubleshooting : The grid’s layout formula was correctly set to repeat(auto-fit, minmax(250px, 1fr)) , which should have allowed multiple columns. However, the parent container ( .home-container ) was set to display: flex with align-items: center . In a vertical Flexbox layout, this alignment forces child elements like the grid to shrink to their absolute minimum width based on content, instead of filling the screen. To make matters worse, a strict max-width: 300px; was hardcoded onto the .tool-grid . Since two cards plus their gaps required at least 525px to sit side-by-side, the 300px restriction made it mathematically impossible for the browser to create a second column. Solution : Removed the restrictive max-width: 300px; from the grid and replaced it with a generous max-width: 1200px; to allow proper breathing room on large screens. Added width: 100%; to the grid class, forcing the grid container to break out of the Flexbox compression and stretch completely across the parent container. This allowed the responsive auto-fit engine to finally see the available width and cleanly arrange the cards into multiple columns. Fixing Grid Spacing and Syntax Errors Layout Breaking Off-Screen Problem : The grid expanded past the screen edges and cut off the card content. Solution : Added box-sizing: border-box; to the main container so that padding is counted inside the total width. Broken Units and Side Scrollbars Problem : An annoying horizontal scrollbar appeared at the bottom of the page. Solution : Fixed a typo where width: 100sww; was written instead of 100svw , and added body { margin: 0; } to clear default browser spaces."}, {"post_id": 24045, "ts": "2026-07-07T10:37:16Z", "hours": 5.7283, "text": "Devlog 15 Phase 1: Creating the Skeleton and Splitting Components Overextending the Style Files The project started as a single page where all HTML, CSS, and JS lived together. When I created the unified BaseLayout.astro , I kept the old global.css . However, that file had specific styles just for the countdown page, which broke the layout of the new homepage. Cleaning Up Style Pollution To fix this, I moved the countdown-specific CSS directly into the <style> tag of the countdown page ( index.astro ). Astro automatically confines these styles to their own page, ensuring they no longer mess up the homepage layout. Phase 2: Fixing Astro’s Route Misinterpretation Keeping Scripts in the Wrong Folder I originally placed the logic script ( script.js ) inside the src/pages/countdown/ folder to keep it close to the page. During local testing, Astro threw an error saying there was no API route handler for that JavaScript file. Moving Scripts to a Dedicated Folder I learned that Astro treats every file inside src/pages/ as a public URL or an API route. To fix this, I moved the file to a new src/scripts/ folder and renamed it countdown.js , keeping the pages folder strictly for actual web pages. Phase 3: Resolving Build Crashes from File Names Using Special Characters in Names Inside my documentation folder, I named a development note file ship#2.md . When I ran npm run build , the entire build process crashed immediately with a path error. Removing the Broken Characters The build tool (Vite) treats the # symbol as a URL anchor link, which breaks file path reading. I renamed the file to ship2.md , and the system was able to parse the path and build successfully. Phase 4: Overcoming the Environment Conflict (Server vs. Client) Running Browser Code on the Server This was the biggest challenge. When I imported countdown.js into the page, the build failed multiple times, throwing errors like window is not defined and document is not defined . Protecting the Code with Environment Guards Astro runs pages on the server to generate static HTML during the build step. Because Node.js does not have browser features like window or document , the script crashed. I fixed this with two steps: I imported the script using the ?url suffix in Astro so the server only records its path instead of running it. I wrapped all the browser-specific logic inside a typeof window !== \"undefined\" check. This ensures the script stays quiet during the server build and only runs once it reaches the user’s browser."}, {"post_id": 19753, "ts": "2026-07-01T04:23:10Z", "hours": 0.8367, "text": "Devlog 14: Localization Migration and Pre-Ship Consolidation UI Text Internationalization Migrated all hardcoded multi-byte interface character arrays across template structures ( index.html ) and operational state modules ( script.js ) into standardized Western European typography strings. Refactored semantic definitions within input control placeholders and baseline reference containers to achieve uniform structural layout scaling under single-byte font rendering constraints. Documentation and Release Management Compiled a foundational system architectural reference ( README.md ) specifying setup logic, reactive routing hooks, and custom persistence implementations. Executed full client-side behavior validations on state-tracking components ahead of the definitive production deployment pipeline for Ship #2."}, {"post_id": 19164, "ts": "2026-06-30T12:38:15Z", "hours": 2.1061, "text": "Devlog 13: Native Sharing Integration and Address Synchronization Control Native Sharing and Fallback Mechanics Integrated a social propagation module ( #share-menu-btn ) inside the header actions block, utilizing the Web Share API to access native mobile distribution panels. Engineered an automated asynchronous clip fallback sequence that overrides processing blocks on unsupported desktop environments, programmatically duplicating host URL hashes via the navigator clipboard asset pool. Applied stateful visual interaction hints onto the interactive sharing interface, dynamically toggling system icons to verify action fulfillment before returning properties to base states. Hash Serialization and Router Interdependency Fixes Resolved an critical structural validation bug inside the initial state loader ( loadInitialState ) where an premature execution return statement truncated processing flows, preventing state restorations. Re-architected data assignment flows inside initialization cycles ( initTimer ), deploying window.history.replaceState() to inject fully compiled variable string parameters back into empty browser URI paths. Secured total address compliance across baseline entries, guaranteeing structural data layers are available to secondary network nodes even when sharing operations occur prior to custom value updates."}, {"post_id": 18227, "ts": "2026-06-29T09:35:11Z", "hours": 0.5422, "text": "Devlog 12: Fluid Typography and Viewport-Adaptive Interface Spacing Viewport-Proportional Layout Calibration Implemented fluid layout scaling mechanics across the primary text blocks utilizing the CSS clamp() function, anchoring layout metrics dynamically between absolute pixel boundaries and relative viewport height units ( vh ). Re-architected spacing margins below the core header display ( #event-label ) to smoothly scale inside an adaptive range ( clamp(5px, 2vh, 30px) ), optimizing structural vertical padding on shifting device orientations. Calibrated upper layout boundaries for the structural footer element ( #target-label ) using fluid scaling boundaries ( clamp(15px, 3vh, 40px) ), ensuring consistent geometric clear space relative to adjacent countdown blocks. Text Alignment and Flow Refactoring Transformed the target calendar description layer ( #target-label ) from inline formatting definitions into explicit block layout models ( display: block ), stabilizing custom spacing calculations and forcing uniform horizontal element boundaries. Enforced complete cross-axis block isolation by assigning absolute width restrictions ( width: 100% ) onto trailing description elements, smoothly pushing metadata strings down beneath the dynamic flexible tracking container."}, {"post_id": 18207, "ts": "2026-06-29T08:34:16Z", "hours": 1.9631, "text": "Devlog 11: Modular Display Mode Architecture and Layout Jitter Resolution Feature Implementation & State Persistence Introduced a feature toggle layout inside the sidebar control node, offering real-time transitions between comprehensive chronological breakdowns and solitary metric configurations. Wired state persistence modules utilizing the local browser data subsystem ( localStorage ) to preserve client display configurations across session cycles and application reboots. Updated the data ingestion routing logic ( loadInitialState ) to safely aggregate user layout states without stepping over parameter strings delivered via URL fragment references. Precision Calculation & Dynamic Interface Masking Integrated an isolated decimal extraction calculation routine within the interval processing tree ( updateTimer ) dedicated to managing strict single-unit tracking parameters. Configured programmatic style visibility switches across atomic timer components, enforcing clean element masking on non-applicable duration counters when single-unit modes trigger. Typographic Stabilization & Layout Shifting Mitigation Corrected a severe layout jitter anomaly inside flexible grid clusters caused by variable font character dimensions shifting container boundaries during fast string state invalidations. Implemented font-variant-numeric: tabular-nums to enforce strict monospaced numeral allocation, keeping external box dimensions static regardless of structural text mutations. Introduced a dynamic responsive structural modifier block ( .mode-single ) to adjust component paddings, implement generous baseline tracking, and elevate text sizing bounds when processing simplified metrics."}, {"post_id": 17619, "ts": "2026-06-28T14:25:59Z", "hours": 1.4517, "text": "Devlog 10: Structural File Extraction and Modular Synchronization Stability Code Base Decomposition and Externalization Refactored the unified codebase by isolating inline design frameworks and layout scripts into dedicated style.css and script.js internal resources. Streamlined index.html structure down to essential structural markup definitions, using external linkages to boost source reading efficiency and code maintainability. Character Processing and Stability Verification Verified text encoding boundaries across external routing changes to preserve multibyte text inputs (“目標日”, “目標”) without producing character distortion issues. Maintained responsive flex alignments and layout fluid bounds on smaller screens while decoupling runtime system layers."}, {"post_id": 16999, "ts": "2026-06-27T16:08:49Z", "hours": 1.4744, "text": "Devlog 09: Synchronization Bug Fixes and URL Component Decoding Argument Reference and Logic Rectification Corrected a ReferenceError inside the titleInput listener by swapping an un-sanitized token ( newDate ) with the valid, persistent variable targetString . Fixed an assignment error where a single operator ( if(newTitle=\"\") ) muted intended comparison logic, replacing it with a strict equality check ( newTitle === \"\" ). URL Normalization and Component Decoding Integrated decodeURIComponent() into loadInitialState() and the hashchange observer to prevent percent-encoded character corruption. Resolved text distortion for multibyte layouts (e.g., Chinese characters), ensuring continuous string fidelity across shared links. Established a default text fallback (“目標”) to secure interface rendering stability during empty input states."}, {"post_id": 14154, "ts": "2026-06-23T04:14:30Z", "hours": 0.9578, "text": "Devlog 08: Viewport Configuration and Responsive Layout Calibration Viewport Meta Integration and RWD Layering Integrated the standard responsive configuration tag <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> into the document structure header. Resolved a layout compression behavior where mobile rendering engines applied fallback desktop scaling parameters (typically a virtual width of 980px), forcing severe global downscaling on compact displays. Enabled native device pixel scale translations, forcing media container thresholds to evaluate against true hardware dimensions rather than high-density viewport projections. Fluid Grid and Token-Based Scaling Fixed an interface clipping issue where structural boundaries failed to dynamically contract on viewport widths below 600px. Activated the custom @media (max-width: 600px) breakpoint directives, downscaling internal flex container gaps from 15px to 10px and adjusting modular countdown component nodes for enhanced display symmetry. Re-calibrated proportional font metrics across mobile layouts, mapping secondary tracking units down to a structured 1.6rem baseline and bringing the primary title signature to an optimized 2rem boundary. Cross-Platform Interface Layout Fixes Restructured flex-wrap component mechanics within the core visualization container to smoothly adapt from unified desktop rows into multi-line mobile block grids. Eliminated persistent scrollbar overheads on handheld viewports by normalizing absolute coordinate assets and applying elastic percentage constraints across core elements."}, {"post_id": 13621, "ts": "2026-06-22T10:22:17Z", "hours": 0.3853, "text": "Devlog 07: URL Hash Routing Priority and Timer Encapsulation Debugging Feature and Priority Cascading Extended the state management architecture to support deep-linking properties using URL fragments (window.location.hash). Established a strict target resolution cascading hierarchy where URL fragment inputs take precedence over local user configuration memory, which in turn overrides the default fallback value (URL Hash > LocalStorage > “2027-01-01”). Implemented a regex filter pattern ( /^\\d{4}-\\d{2}-\\d{2}$/ ) to sanitize incoming window location string tokens prior to committing them to the execution state. Refactoring and State Synchronization Modularized individual timer logic fragments into a single initialization routine initTimer() . This routine synchronously updates text container parameters, binds default input values, clears residual interval clocks, and re-allocates tracking loops. Modified input element state transformation bindings to mirror newly elected target values into the URL fragment row (window.location.hash) concurrently with local system memory blocks. Resolution of Block Scope Diagnostics Scope Overlap Fix: Corrected a critical runtime ReferenceError located inside the initTimer() wrapper where repeating the let primitive on the timerId reference allocated a local block-scope variable that collided with pre-initialization clear routines. Removing the redundant declarative keyword reinstated proper execution. -Missing Invocation Fix: Appended an initial entry point declaration initTimer(targetString) to successfully boot up active countdown cycles on fresh page load sequences."}, {"post_id": 13112, "ts": "2026-06-21T13:27:59Z", "hours": 0.9197, "text": "Devlog 06: Sidebar Menu and Persistent LocalStorage Integration Requirements and Architecture Adopted the HTML5 semantic element to create a dedicated, off-screen sidebar panel for user controls, separating configuration options from the main countdown content. Integrated Google Material Icons stylesheet to render interactive trigger (“menu”) and dismissal (“close”) action elements. Implemented a native calendar interface using to capture target date modifications directly from the client view. Styling and Motion Mechanics Utilized fixed positioning (position: fixed) to pin the sidebar along the right viewport boundary, utilizing full height (100vh) to serve as a slide-out drawer. Applied transform: translateX(100%) to fully obscure the panel behind the right viewport edge by default, attaching a smooth CSS transition property (0.3s ease). Created a structural “.open” modifier class applied to the sidebar element (sidebar.open) that neutralizes the horizontal translation (translateX(0)) to bring the drawer into view upon click events. State Persistence via LocalStorage Refactored the global variable initialization to prioritize data retrieval from browser memory using localStorage.getItem(“targetDate”), ensuring fallback capability to the hardcoded default date string (“2027-01-01”) if empty. Bound a “change” event listener to the date input element. When a user updates the field, the new value is mirrored into localStorage under the unified key “targetDate”. Configured runtime updates where changing the input dynamically forces a complete recalculation of the timestamp integer and immediately restarts the global interval timer thread to prevent rendering stale countdown frames. Critical Bugs and Diagnostics Code Review Syntax Error Fix: Corrected an unescaped double-quote attribute typo inside the HTML element declaration where id=”“sidebar was breaking JavaScript’s DOM node selection lookup query. Selector Misalignment Fix: Resolved an animation breakdown where the “.open” conditional style rule was incorrectly targeted at the menu button instead of the sidebar wrapper element, preventing the slide-out sequence. Namespace Sync Fix: Addressed a string mismatch bug where initialization logic incorrectly requested the corrupted key string “targerDate” while event dispatchers stored mutations under “targetDate”, which consistently caused storage caching to break on reload."}, {"post_id": 13051, "ts": "2026-06-21T10:39:08Z", "hours": 0.5522, "text": "Devlog 05: Integrating Google Fonts Icons 1. Goal Implement a hamburger menu button by integrating Google Material Icons into the project. 2. Step 1 Implementation Added the Google Material Icons stylesheet link to the . Created a <button> containing a <span> with the material-icons class and the text “menu” to render the hamburger icon. Styled the button using CSS ( background: none , border: none ) to remove default browser styling and positioned it at the top-left corner using position: absolute ."}, {"post_id": 11692, "ts": "2026-06-19T01:41:54Z", "hours": 0.4172, "text": "Devlog 04: Dynamic Time Box VisibilityRequirement Hide time boxes that have a value of 0 to keep the UI clean, but prevent a box from hiding if a larger time unit still holds a value (e.g., if years > 0, months must not be hidden even if months == 0). Solution Implemented a cascading flag logic ( let hasValue = false ) executed from the largest unit (years) down to the smallest (minutes). Once any larger unit turns the flag true, all subsequent boxes remain visible regardless of their own value. Box elements are hidden dynamically using parentElement.style.display = \"none\" ."}, {"post_id": 10619, "ts": "2026-06-17T13:47:01Z", "hours": 0.6303, "text": "Devlog #2: Precision Countdown Algorithm Fixes Problem The previous countdown relied on dividing total seconds, which failed to calculate years and months accurately because real-world months have a variable number of days (28, 30, 31). Solution Shifted from pure division to a calendar-based object subtraction method. The system now calculates the differences for Y, M, D, H, M, S individually and applies a borrowing logic from the smallest unit up to the largest. It uses new Date(Y, M, 0).getDate() to dynamically fetch the exact number of days in the previous month when borrowing days. Logic Debunk: mo < 0 vs mo <= 0 The correct condition is mo < 0. The variable represents the difference between months. If mo equals 0, the target month and current month are the same, meaning no year needs to be borrowed. Using <= 0 would trigger a false borrow when months are identical, causing the month value to incorrectly jump by +12 and the year to decrease by 1. Bug Fixes Corrected the day borrowing condition from if (mo < 0) to if (d < 0). Fixed a typo where let m (minutes) was mistakenly subtracting now.getMonth() instead of now.getMinutes()."}, {"post_id": 10379, "ts": "2026-06-17T01:59:17Z", "hours": 0.3014, "text": "add some todos and changelog"}, {"post_id": 9955, "ts": "2026-06-16T14:11:15Z", "hours": 1.8083, "text": "the first project using html this year making a countdown timer"}]...
|
Title: Tick Tock by @ryderklh | Stardance
Devlogs Title: Tick Tock by @ryderklh | Stardance
Devlogs:
the first project using html this year making a countdown timer
add some todos and changelog
Devlog #2: Precision Countdown Algorithm Fixes Problem The previous countdown relied on dividing total seconds, which failed to calculate years and months accurately because real-world months have a variable number of days (28, 30, 31). Solution Shifted from pure division to a calendar-based object subtraction method. The system now calculates the differences for Y, M, D, H, M, S individually and applies a borrowing logic from the smallest unit up to the largest. It uses new Date(Y, M, 0).getDate() to dynamically fetch the exact number of days in the previous month when borrowing days. Logic Debunk: mo < 0 vs mo <= 0 The correct condition is mo < 0. The variable represents the difference between months. If mo equals 0, the target month and current month are the same, meaning no year needs to be borrowed. Using <= 0 would trigger a false borrow when months are identical, causing the month value to incorrectly jump by +12 and the year to decrease by 1. Bug Fixes Corrected the day borrowing condition from if (mo < 0) to if (d < 0). Fixed a typo where let m (minutes) was mistakenly subtracting now.getMonth() instead of now.getMinutes().
Devlog 04: Dynamic Time Box VisibilityRequirement Hide time boxes that have a value of 0 to keep the UI clean, but prevent a box from hiding if a larger time unit still holds a value (e.g., if years > 0, months must not be hidden even if months == 0). Solution Implemented a cascading flag logic ( let hasValue = false ) executed from the largest unit (years) down to the smallest (minutes). Once any larger unit turns the flag true, all subsequent boxes remain visible regardless of their own value. Box elements are hidden dynamically using parentElement.style.display = "none" .
Devlog 05: Integrating Google Fonts Icons 1. Goal Implement a hamburger menu button by integrating Google Material Icons into the project. 2. Step 1 Implementation Added the Google Material Icons stylesheet link to the . Created a <button> containing a <span> with the material-icons class and the text “menu” to render the hamburger icon. Styled the button using CSS ( background: none , border: none ) to remove default browser styling and positioned it at the top-left corner using position: absolute .
Devlog 06: Sidebar Menu and Persistent LocalStorage Integration Requirements and Architecture Adopted the HTML5 semantic element to create a dedicated, off-screen sidebar panel for user controls, separating configuration options from the main countdown content. Integrated Google Material Icons stylesheet to render interactive trigger (“menu”) and dismissal (“close”) action elements. Implemented a native calendar interface using to capture target date modifications directly from the client view. Styling and Motion Mechanics Utilized fixed positioning (position: fixed) to pin the sidebar along the right viewport boundary, utilizing full height (100vh) to serve as a slide-out drawer. Applied transform: translateX(100%) to fully obscure the panel behind the right viewport edge by default, attaching a smooth CSS transition property (0.3s ease). Created a structural “.open” modifier class applied to the sidebar element (sidebar.open) that neutralizes the horizontal translation (translateX(0)) to bring the drawer into view upon click events. State Persistence via LocalStorage Refactored the global variable initialization to prioritize data retrieval from browser memory using localStorage.getItem(“targetDate”), ensuring fallback capability to the hardcoded default date string (“2027-01-01”) if empty. Bound a “change” event listener to the date input element. When a user updates the field, the new value is mirrored into localStorage under the unified key “targetDate”. Configured runtime updates where changing the input dynamically forces a complete recalculation of the timestamp integer and immediately restarts the global interval timer thread to prevent rendering stale countdown frames. Critical Bugs and Diagnostics Code Review Syntax Error Fix: Corrected an unescaped double-quote attribute typo inside the HTML element declaration where id=”“sidebar was breaking JavaScript’s DOM node selection lookup query. Selector Misalignment Fix: Resolved an animation breakdown where the “.open” conditional style rule was incorrectly targeted at the menu button instead of the sidebar wrapper element, preventing the slide-out sequence. Namespace Sync Fix: Addressed a string mismatch bug where initialization logic incorrectly requested the corrupted key string “targerDate” while event dispatchers stored mutations under “targetDate”, which consistently caused storage caching to break on reload.
Devlog 07: URL Hash Routing Priority and Timer Encapsulation Debugging Feature and Priority Cascading Extended the state management architecture to support deep-linking properties using URL fragments (window.location.hash). Established a strict target resolution cascading hierarchy where URL fragment inputs take precedence over local user configuration memory, which in turn overrides the default fallback value (URL Hash > LocalStorage > “2027-01-01”). Implemented a regex filter pattern ( /^\d{4}-\d{2}-\d{2}$/ ) to sanitize incoming window location string tokens prior to committing them to the execution state. Refactoring and State Synchronization Modularized individual timer logic fragments into a single initialization routine initTimer() . This routine synchronously updates text container parameters, binds default input values, clears residual interval clocks, and re-allocates tracking loops. Modified input element state transformation bindings to mirror newly elected target values into the URL fragment row (window.location.hash) concurrently with local system memory blocks. Resolution of Block Scope Diagnostics Scope Overlap Fix: Corrected a critical runtime ReferenceError located inside the initTimer() wrapper where repeating the let primitive on the timerId reference allocated a local block-scope variable that collided with pre-initialization clear routines. Removing the redundant declarative keyword reinstated proper execution. -Missing Invocation Fix: Appended an initial entry point declaration initTimer(targetString) to successfully boot up active countdown cycles on fresh page load sequences.
Devlog 08: Viewport Configuration and Responsive Layout Calibration Viewport Meta Integration and RWD Layering Integrated the standard responsive configuration tag <meta name="viewport" content="width=device-width, initial-scale=1.0"> into the document structure header. Resolved a layout compression behavior where mobile rendering engines applied fallback desktop scaling parameters (typically a virtual width of 980px), forcing severe global downscaling on compact displays. Enabled native device pixel scale translations, forcing media container thresholds to evaluate against true hardware dimensions rather than high-density viewport projections. Fluid Grid and Token-Based Scaling Fixed an interface clipping issue where structural boundaries failed to dynamically contract on viewport widths below 600px. Activated the custom @media (max-width: 600px) breakpoint directives, downscaling internal flex container gaps from 15px to 10px and adjusting modular countdown component nodes for enhanced display symmetry. Re-calibrated proportional font metrics across mobile layouts, mapping secondary tracking units down to a structured 1.6rem baseline and bringing the primary title signature to an optimized 2rem boundary. Cross-Platform Interface Layout Fixes Restructured flex-wrap component mechanics within the core visualization container to smoothly adapt from unified desktop rows into multi-line mobile block grids. Eliminated persistent scrollbar overheads on handheld viewports by normalizing absolute coordinate assets and applying elastic percentage constraints across core elements.
Devlog 09: Synchronization Bug Fixes and URL Component Decoding Argument Reference and Logic Rectification Corrected a ReferenceError inside the titleInput listener by swapping an un-sanitized token ( newDate ) with the valid, persistent variable targetString . Fixed an assignment error where a single operator ( if(newTitle="") ) muted intended comparison logic, replacing it with a strict equality check ( newTitle === "" ). URL Normalization and Component Decoding Integrated decodeURIComponent() into loadInitialState() and the hashchange observer to prevent percent-encoded character corruption. Resolved text distortion for multibyte layouts (e.g., Chinese characters), ensuring continuous string fidelity across shared links. Established a default text fallback (“目標”) to secure interface rendering stability during empty input states.
Devlog 10: Structural File Extraction and Modular Synchronization Stability Code Base Decomposition and Externalization Refactored the unified codebase by isolating inline design frameworks and layout scripts into dedicated style.css and script.js internal resources. Streamlined index.html structure down to essential structural markup definitions, using external linkages to boost source reading efficiency and code maintainability. Character Processing and Stability Verification Verified text encoding boundaries across external routing changes to preserve multibyte text inputs (“目標日”, “目標”) without producing character distortion issues. Maintained responsive flex alignments and layout fluid bounds on smaller screens while decoupling runtime system layers.
Devlog 11: Modular Display Mode Architecture and Layout Jitter Resolution Feature Implementation & State Persistence Introduced a feature toggle layout inside the sidebar control node, offering real-time transitions between comprehensive chronological breakdowns and solitary metric configurations. Wired state persistence modules utilizing the local browser data subsystem ( localStorage ) to preserve client display configurations across session cycles and application reboots. Updated the data ingestion routing logic ( loadInitialState ) to safely aggregate user layout states without stepping over parameter strings delivered via URL fragment references. Precision Calculation & Dynamic Interface Masking Integrated an isolated decimal extraction calculation routine within the interval processing tree ( updateTimer ) dedicated to managing strict single-unit tracking parameters. Configured programmatic style visibility switches across atomic timer components, enforcing clean element masking on non-applicable duration counters when single-unit modes trigger. Typographic Stabilization & Layout Shifting Mitigation Corrected a severe layout jitter anomaly inside flexible grid clusters caused by variable font character dimensions shifting container boundaries during fast string state invalidations. Implemented font-variant-numeric: tabular-nums to enforce strict monospaced numeral allocation, keeping external box dimensions static regardless of structural text mutations. Introduced a dynamic responsive structural modifier block ( .mode-single ) to adjust component paddings, implement generous baseline tracking, and elevate text sizing bounds when processing simplified metrics.
Devlog 12: Fluid Typography and Viewport-Adaptive Interface Spacing Viewport-Proportional Layout Calibration Implemented fluid layout scaling mechanics across the primary text blocks utilizing the CSS clamp() function, anchoring layout metrics dynamically between absolute pixel boundaries and relative viewport height units ( vh ). Re-architected spacing margins below the core header display ( #event-label ) to smoothly scale inside an adaptive range ( clamp(5px, 2vh, 30px) ), optimizing structural vertical padding on shifting device orientations. Calibrated upper layout boundaries for the structural footer element ( #target-label ) using fluid scaling boundaries ( clamp(15px, 3vh, 40px) ), ensuring consistent geometric clear space relative to adjacent countdown blocks. Text Alignment and Flow Refactoring Transformed the target calendar description layer ( #target-label ) from inline formatting definitions into explicit block layout models ( display: block ), stabilizing custom spacing calculations and forcing uniform horizontal element boundaries. Enforced complete cross-axis block isolation by assigning absolute width restrictions ( width: 100% ) onto trailing description elements, smoothly pushing metadata strings down beneath the dynamic flexible tracking container.
Devlog 13: Native Sharing Integration and Address Synchronization Control Native Sharing and Fallback Mechanics Integrated a social propagation module ( #share-menu-btn ) inside the header actions block, utilizing the Web Share API to access native mobile distribution panels. Engineered an automated asynchronous clip fallback sequence that overrides processing blocks on unsupported desktop environments, programmatically duplicating host URL hashes via the navigator clipboard asset pool. Applied stateful visual interaction hints onto the interactive sharing interface, dynamically toggling system icons to verify action fulfillment before returning properties to base states. Hash Serialization and Router Interdependency Fixes Resolved an critical structural validation bug inside the initial state loader ( loadInitialState ) where an premature execution return statement truncated processing flows, preventing state restorations. Re-architected data assignment flows inside initialization cycles ( initTimer ), deploying window.history.replaceState() to inject fully compiled variable string parameters back into empty browser URI paths. Secured total address compliance across baseline entries, guaranteeing structural data layers are available to secondary network nodes even when sharing operations occur prior to custom value updates.
Devlog 14: Localization Migration and Pre-Ship Consolidation UI Text Internationalization Migrated all hardcoded multi-byte interface character arrays across template structures ( index.html ) and operational state modules ( script.js ) into standardized Western European typography strings. Refactored semantic definitions within input control placeholders and baseline reference containers to achieve uniform structural layout scaling under single-byte font rendering constraints. Documentation and Release Management Compiled a foundational system architectural reference ( README.md ) specifying setup logic, reactive routing hooks, and custom persistence implementations. Executed full client-side behavior validations on state-tracking components ahead of the definitive production deployment pipeline for Ship #2.
Devlog 15 Phase 1: Creating the Skeleton and Splitting Components Overextending the Style Files The project started as a single page where all HTML, CSS, and JS lived together. When I created the unified BaseLayout.astro , I kept the old global.css . However, that file had specific styles just for the countdown page, which broke the layout of the new homepage. Cleaning Up Style Pollution To fix this, I moved the countdown-specific CSS directly into the <style> tag of the countdown page ( index.astro ). Astro automatically confines these styles to their own page, ensuring they no longer mess up the homepage layout. Phase 2: Fixing Astro’s Route Misinterpretation Keeping Scripts in the Wrong Folder I originally placed the logic script ( script.js ) inside the src/pages/countdown/ folder to keep it close to the page. During local testing, Astro threw an error saying there was no API route handler for that JavaScript file. Moving Scripts to a Dedicated Folder I learned that Astro treats every file inside src/pages/ as a public URL or an API route. To fix this, I moved the file to a new src/scripts/ folder and renamed it countdown.js , keeping the pages folder strictly for actual web pages. Phase 3: Resolving Build Crashes from File Names Using Special Characters in Names Inside my documentation folder, I named a development note file ship#2.md . When I ran npm run build , the entire build process crashed immediately with a path error. Removing the Broken Characters The build tool (Vite) treats the # symbol as a URL anchor link, which breaks file path reading. I renamed the file to ship2.md , and the system was able to parse the path and build successfully. Phase 4: Overcoming the Environment Conflict (Server vs. Client) Running Browser Code on the Server This was the biggest challenge. When I imported countdown.js into the page, the build failed multiple times, throwing errors like window is not defined and document is not defined . Protecting the Code with Environment Guards Astro runs pages on the server to generate static HTML during the build step. Because Node.js does not have browser features like window or document , the script crashed. I fixed this with two steps: I imported the script using the ?url suffix in Astro so the server only records its path instead of running it. I wrapped all the browser-specific logic inside a typeof window !== "undefined" check. This ensures the script stays quiet during the server build and only runs once it reaches the user’s browser.
Devlog 16: Dashboard Layout Fixes Fixing Layout and Compression Issues Compressed Card Icons Problem : The card icons shrank and deformed when the screen size changed. Solution : Added flex-shrink: 0; to the icon class to force them to keep their correct size. Cards Stacking Vertically Problem : The tool cards unexpectedly stacked into a narrow, single column right in the middle of the screen. Even though there was plenty of empty space on both sides of the desktop browser, the grid refused to expand horizontally and display the cards side-by-side. Troubleshooting : The grid’s layout formula was correctly set to repeat(auto-fit, minmax(250px, 1fr)) , which should have allowed multiple columns. However, the parent container ( .home-container ) was set to display: flex with align-items: center . In a vertical Flexbox layout, this alignment forces child elements like the grid to shrink to their absolute minimum width based on content, instead of filling the screen. To make matters worse, a strict max-width: 300px; was hardcoded onto the .tool-grid . Since two cards plus their gaps required at least 525px to sit side-by-side, the 300px restriction made it mathematically impossible for the browser to create a second column. Solution : Removed the restrictive max-width: 300px; from the grid and replaced it with a generous max-width: 1200px; to allow proper breathing room on large screens. Added width: 100%; to the grid class, forcing the grid container to break out of the Flexbox compression and stretch completely across the parent container. This allowed the responsive auto-fit engine to finally see the available width and cleanly arrange the cards into multiple columns. Fixing Grid Spacing and Syntax Errors Layout Breaking Off-Screen Problem : The grid expanded past the screen edges and cut off the card content. Solution : Added box-sizing: border-box; to the main container so that padding is counted inside the total width. Broken Units and Side Scrollbars Problem : An annoying horizontal scrollbar appeared at the bottom of the page. Solution : Fixed a typo where width: 100sww; was written instead of 100svw , and added body { margin: 0; } to clear default browser spaces.
Devlog 17: Project Hub and README Expansion Moving from a Single Page to a Tool Hub Goal : Transformed TickTock from a single countdown page into a comprehensive time-management utility hub powered by Astro. Implementation : Created a main dashboard page ( src/pages/index.astro ) to serve as the gateway for current and future time tools, using a shared layout for a consistent user experience. Adding Future Roadmap and Project Documentation Goal : Wrote a complete README.md to document the new project architecture, local testing steps, and automated GitHub Pages deployment. Future Vision : Updated the repository roadmap to announce upcoming tools built for the Hack Club Stardance event, including a Pomodoro Timer, World Clock Board, Minimalist Timer, and Time Progress Bars.
Devlog 18: Adding Hub Sharing Functionality Integrating Client-Side Script Safely Implementing the Homepage Share Button Problem : The dashboard needed a simple button to share the current hub URL, but running browser APIs directly could break Astro’s static site generation (SSG) compiler. Solution : Added an inline <script is:inline> block to the index page. This bypasses the server-side build process and safely binds the sharing and clipboard logic only when the page loads in the user’s browser.
Devlog 19: Building the Adaptable Digital Clock Implementing Native Date Formatting Problem : The clock header needed to show the full current date (e.g., “Sunday, July 12, 2026”) dynamically without taxing browser performance or importing heavy external date libraries. Solution : Added a #date-label placeholder to the template and used the native JavaScript toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }) inside the main runtime loop to render lightweight, perfectly formatted timestamps on every update. Creating Fluid Visual Oscillations via Math.sin() Problem : Traditional blinking colons look rigid and distracting, failing to deliver a premium, organic feel for an active time-management tool. Solution : Avoided simple CSS toggles and leveraged a true trigonometric formula inside a requestAnimationFrame loop. By mapping high-precision timestamps through Math.sin() , the opacity gracefully curves between 0.2 and 1.0 , producing a perfectly smooth, wave-like breathing animation. Binding Custom Display and Layout Controls Problem : The interface required instant controls for 12/24-hour formats, font adjustments, and a standalone full-screen view while managing layout side effects. Solution : Wired up event listeners to modify global runtime states and inline CSS font families on the fly. Integrated the HTML5 Fullscreen API onto the #clock-screen element, backed by a global fullscreenchange listener to seamlessly catch manual ESC escapes and keep the toggle button states perfectly in sync.
Devlog 20: Settings Memory and Dynamic Sharing Adding Setting Memory and URL Sync Keeping your clock layout saved Persistent settings : The clock now remembers your favorite layout. Your choice of time format (12/24h) and font style is instantly saved directly to your browser’s local storage. URL sync : We linked these settings directly to the URL hash (like #12hr&mono ). When you refresh or load the page, your exact preferred theme loads up right away. Smart Sharing and Hub Integration Spreading the time and completing the hub Dynamic sharing : Added a share button that grabs your exact custom clock URL. It uses the Web Share API when available, and easily falls back to copying the link to your clipboard with a smooth checkmark animation on success. Connecting the dashboard : Linked the completed clock page to our homepage hub grid and updated the site layout, officially making TickTock a multi-tool station.
Devlog 21: Architecture Normalization and Layout Fine-Tuning Directory Restructuring & Future-Proofing Preparing for scalability Digital Clock Renaming : To prevent future routing conflicts as the project scales, we successfully renamed clock.js to digital-clock.js and adjusted the main page path to /src/pages/digital-clock/ . This cleanly isolates this feature from upcoming modules like World Clock or Pomodoro Timer. Dependency Clean-up : Updated all asset paths and module script injections across the hub, fully standardizing the multi-tool routing structure under the /TickTock/ basePath. Layout Fixes with Global CSS Variables Resolving invalid CSS properties via JS injection Replacing Non-Standard Styles : Fixed a crucial layout issue where arbitrary if(...) conditions inside CSS were breaking colon component constraints. Dynamic Width Injection : Migrated the layout parameters directly into digital-clock.js using the standard document.documentElement.style.setProperty API. The .colon element now seamlessly reads the responsive --clock-colon-width CSS variable, adapting perfectly across Sans, Serif, and Mono configurations without any jumping side effects.
Devlog 22: F11-Equivalent Fullscreen via Root Element Standardizing Fullscreen to document.documentElement Fixing disappearing layout elements The Pitfall : Previously, calling requestFullscreen() on the individual #clock-screen container caused the browser to isolate it from the DOM layout. This triggered default browser styling which rendered a pitch-black backdrop, and completely hid crucial layout parts like the header, footer, and side menu buttons. The Solution : We shifted the fullscreen API target from the sub-container directly to document.documentElement (the global <html> node). This aligns the button’s behavior perfectly with standard keyboard F11 fullscreen events. The Result : All global UI elements (header, footer, navigation) now scale smoothly and remain perfectly visible and interactive without any layout shifts or z-index clashing.
Devlog 23: Global Branding Relocation and Logo Navigation Moving Title Label to BaseLayout Unifying the brand and improving UX Header Linkification : Refactored the main title-label (“TickTock”) out of individual page templates and integrated it directly into the global BaseLayout.astro . Back-to-Home UX : Wrapped the brand title in an <a> tag. Now, clicking the brand logo on any sub-tool instantly routes the user back to the home dashboard Hub, offering an intuitive, web-app-like navigation experience.
Devlog 24: Color Architecture Refactoring with Design Tokens Two-Tier CSS Variables Global Tokens: Extracted hardcoded hex colors into primitive color names inside global.css. Theme Tokens: Created a semantic layer mapping elements like –bg-app and –accent-color directly to global tokens. Clean Codebase Update Component Styles: Replaced absolute colors across the layout, dashboard hub, countdown, and clock templates with var() variables. Script Alignment: Updated dynamic checkmark colors in JavaScript to read –accent-color instead of raw hex values. Future Scope: The design is now fully abstracted, meaning light mode implementation will only require token swapping without editing individual component code.
Devlog 25: Theme Toggle Implementation with Dark and Light Modes Light Theme Tokens Override Added :root[data-theme=“light”] in global.css to swap semantic theme variables for light background, borders, and high-contrast amber accents. Preserved existing component styles while smoothly transitioning body colors on theme switch. Sidebar Toggle Component and Logic Integrated a theme toggle button (#theme-toggle-btn) inside the BaseLayout header actions. Built persistent theme state logic using localStorage and system prefers-color-scheme detection. Used textContent on icon elements to dynamically switch between dark_mode and light_mode icons without type errors.
Devlog 26: Typo Correction and Expandable Directory Menu Typo Correction Fixed property naming error from –accent-contract-text to –accent-contrast-text in global CSS. Expandable Tools Directory Converted static directory links into a native component with smooth arrow rotation styling. Enabled server-side open status via open={isHomePage} in BaseLayout, defaulting to expanded on the home hub and collapsed on sub-tool pages.
Devlog 27: Time Progress Bar Feature Porting and JS Modular Refactoring Astro Slot Architecture & CSS Variable Integration Ported the standalone Time Progress Bar tool into the Astro layout system using designated slots ( #head , #header-content , #custom-menu , and #main-content ). Converted hardcoded hex colors into semantic global theme CSS variables ( --accent-color , --component-bg-standard , --text-heading ), ensuring native support for Dark and Light mode toggling. Replaced the dropdown filter with sidebar multi-select checkboxes for custom control over visible time progress units. JavaScript Modular Refactoring & Bug Fixes Decoupled single-script logic into dedicated, single-responsibility functions ( initSidebarToggles , calculateTimeProgress , updateTicksUI , updateProgressCardUI , and updateSingleCardUI ). Resolved JavaScript syntax errors, including missing function keywords, JS Automatic Semicolon Insertion (ASI) line-break issues on return statements, and uncalled Date method parentheses. Streamlined animation frame rendering by passing structured data from math calculations directly into UI updater functions.
Devlog 28: Layout Overflow Fixes and UI Polish Layout & Scrollbar Stability Added scrollbar-gutter: stable to html in global.css to reserve vertical scrollbar space, preventing horizontal overflow caused by layout reflow. Applied overflow-x: hidden to main containers and .progress-card to prevent percentage tags and thumbs from clipping past container edges at 100%. CSS Rule Corrections Fixed CSS property error by setting .track width to 100% instead of unitless value. Fine-tuned progress bar wrapper styles to ensure smooth visual layout under both dark and light themes.
Devlog 29: URL Hash Sync, LocalStorage Persistence & Universal Share Event URL & State Persistence Integrated URL Hash ( #year,month,... ) and localStorage synchronization into time-progress.js to preserve users’ toggle preferences across reloads and shares. Added a hashchange event listener to ensure UI check states dynamically update when users use browser navigation (Back/Forward). Centralized Layout Share Event Refactored the #share-menu-btn event listener into BaseLayout.astro , eliminating duplicate share logic across individual tool pages. Leveraged document.title dynamically to provide clean, contextual titles for native Web Share API and clipboard copy fallbacks.
Devlog 30: Image Export Feature & Template Refactoring Image Export Feature Integrated html2canvas library to enable one-click PNG image export of the active progress dashboard. Added an “Export as Image” button inside the custom sidebar menu with dedicated styling. Handled theme-aware background rendering by dynamically querying computed global CSS variables ( --bg-app ). DOM Template & Dynamic Watermark Refactored dynamic watermark creation using the HTML <template> element ( #export-watermark-template ), cleanly separating DOM structure from JavaScript execution logic. Configured dynamic timestamps using now.toLocaleString() to inject real-time snapshot dates and times into exported images. Added ignoreElements filtering in html2canvas to prevent unchecked/hidden .progress-card elements from creating top/bottom visual gaps in exported images. Bug Fixes & Refactor Fixed a TypeError on insertBefore / appendChild by referencing clone.firstElementChild to extract the correct Element Node from DocumentFragment . Resolved HTML/JS ID typos ( export-watermark-template ) and method call mismatches to ensure reliable script execution.
Devlog 31: Template Canvas Architecture & Reference Refactoring Independent Canvas Architecture Replaced direct DOM manipulation of live dashboard elements with a dedicated, off-screen template canvas ( .export-canvas ). Cloned active .progress-card elements into an isolated container ( .export-cards-holder ), ensuring the on-screen UI remains completely untouched and non-flickering during image generation. Moved aspect ratio, high-resolution dimensions (600x600), padding, and font-scaling rules directly into CSS for clean separation of concerns. Error Fixes & Cleanup Fixed ReferenceError caused by leftover references to targetContainer and stampEl inside initExportImageFeature . Updated html2canvas target from main dashboard container to the temporary canvasEl . Streamlined fallback DOM cleanup logic inside the try...catch block to guarantee off-screen elements are properly garbage collected.
Devlog 32: Dynamic Canvas Aspect Ratio Calculation Features & Refactoring Implemented dynamic aspect ratio calculation for PNG exports ( Height = 140 * Count + 180 ). Applied responsive auto-scaling for .export-canvas to ensure optimal vertical spacing regardless of selected cards count. Merged feature/export-image branch into main after verifying clean template rendering and correct node referencing.
Devlog 33: Pomodoro Segmented Timeline & Layout Integration Segmented Timeline Layout Integrated BaseLayout slots for the new Pomodoro page, separating sidebar settings from the main dashboard. Built a visual segmented timeline ( .timeline-track ) with flex-proportional work/break segments and a dynamic progress pin ( .timeline-pin ). Core Logic & State Setup Refactored state object fields ( workDuration , breakDuration , timeRemaining ) to ensure clean state initialization. Added timestamp delta checking on startup to preserve accurate remaining time across page reloads or background tabs.
Devlog 34: Pomodoro Core Timer & Segmented Timeline Integration Features Implemented static audio notification system via HTML5 Audio API targeting public/sounds/notification.mp3 . Architecture & State Management Implemented timestamp delta verification ( endTime - Date.now() ) to maintain countdown accuracy during background tab throttling or page reloads. Decoupled primary control actions across main page and sidebar controls ( #menu-start-btn , #cycles-input ). Bug Fixes & Refactoring Fixed ReferenceError during event initialization by enforcing state argument scoping within bindEvents . Refactored loadStateFromLocalStorage parsing logic to filter "undefined" string literals and clear corrupted cache gracefully.
Devlog 35: Pomodoro State Transition & Auto-Loop Refactoring Core Logic & State Fixes Auto-Phase Transition Fix : Resolved state lock ( status: 'running' ) preventing automatic transition from Focus to Break. Added explicit status resetting in handlePhaseEnd before invoking startTimer . Timer Precision : Replaced Math.round with Math.ceil in countdown logic to eliminate early sound triggers caused by rounding errors. Timestamp Recalibration : Implemented dynamic endTime re-calculation when switching modes ( work ↔ break ) to maintain state consistency.
Devlog 36: Update Docs & Merge Update Docs Readme: Add the links of the new tools Ship#4: Write Ship#4.md Merge!!!!! Merge feature/pomodoro into main Fortunately no error poping out!
Devlog 37: Multi-Timer UI Layout & Input Controls Form Inputs & Adjustments Built HH/MM/SS number input boxes with range limits and zero-padding logic on blur. Implemented stepper adjustment buttons for quick time value tweaking. Sidebar Timer List Layout Added sidebar timer list container to preview user-created countdown items. Integrated quick action delete buttons for item removal. Main Dashboard Circular Timer Constructed countdown card layout featuring SVG dynamic progress ring. Centered time readout using tabular-nums formatting to eliminate number jitter. Action Control Group Laid out card control buttons including play, pause, and replay. the ui was so tiring… i DID remember to open a new branch (feature/timer-main) …
Devlog 38: Multi-Timer Logic & Bug Fixes JS Managed multi-timer state using plain object arrays. Implemented saveTimers() and loadTimers() for LocalStorage persistence. Linked input fields with setupArrowBtns() to handle unit value increment and decrement bounds. Cloned <template> elements to dynamically generate sidebar list items and main cards via renderAll() . Added item deletion logic via handleDelete() to update state and UI. Established a startGlobalTick() loop running every 200ms using endTime offsets to prevent background tab drift. Calculated SVG circle strokeDashoffset dynamically based on remaining time ratios. Debugging & UI Patching Placing <template> tags inside slot="template-content" . Adding missing id="timer-container" . .textContent.textContent to .textContent Data.now() to Date.now() . timers.status to timer.status . finally got multi-timer state and progress rings syncing properly… bugs fixed and back to smooth sailing…
Devlog 39: Smooth Action Button Transitions Button Collapse & Spacing Animate Added max-width , margin: 0 , and padding: 0 constraints to .is-hidden to smoothly collapse hidden buttons without leaving blank layout gaps. Expanded base state with explicit max-width boundary to allow width-based CSS transitions. much smoother ♪(´▽`)
Devlog 40: Alarm Audio & LocalStorage Independent Alarm Audio Handling new Audio() allowing each finished timer to play independent looping sound effects concurrently. Bound alarm termination directly to handleReset() and handleDelete() . LocalStorage Serialization Fixes Sanitized timer state object before serialization in saveTimers() by stripping transient DOM/Audio references ( alarmAudio ) to prevent JSON stringification crashes. Added type validation ( typeof alarmAudio.pause === "function" ) inside stopAlarm() to prevent runtime TypeError issues during state rehydration. Post-Reload Alarm & Visual Sync Updated renderAll() to resume alarm sound playback and background pulse animation for ended timers across page reloads. Cleared endTime correctly during timer reset to normalize state lifecycle. alarm.wav Using LMMS to create alarm.wav for the alarming when timer.status==="ended" .
Devlog 41: Dual-Text Display & Running Animation Sub-Text Total Duration Display Added .timer-text-sub element inside the ring container to preserve and display the initial totalSeconds value. Styled sub-text using lighter font weights and var(--text-muted) . Dynamic Running Visual Effects Added .is-running state toggle based on timer.status === "running" . Implemented @keyframes timer-text-flash pulsing animation to provide continuous visual feedback while countdown is active.
Devlog 42: Timer Reordering & List Re-Sorting Reordering UI Controls Added .sort-action control group with .sort-up and .sort-down arrow buttons to the template layout. Dynamic Array Mutation & Re-rendering Implemented handleMoveTimer(id, direction) to handle array element swapping with upper and lower boundary bounds checks. Bound click handlers in renderListedTimer() to execute reordering operations, trigger LocalStorage updates, and instantly re-render the UI layout via renderAll() .
Devlog 43: Timer Integration & Navigation Update Navigation & Home Page Integration Added Timer card entry to the main landing page ( tool-card layout with hourglass Material symbol). Added direct Timer link to the global navigation bar in BaseLayout.astro . Feature Branch Merge Merged feature/timer-main into main , bringing in the new /timer page route, timer.js logic, sound assets ( alarm.wav ), and updated layout components. YEAYYY
Devlog 44: Stopwatch Layout Template & Layout Migration Ported side-menu and main container structures from Timer to Stopwatch layout ( index.astro ). Structured sidebar elements: .stopwatch-adding-action-btn and .stopwatch-list-container for dynamic item injection. Added template placeholders ( #listed-stopwatch-template and #stopwatch-card-template ). Stopwatch Card & Lap Data Display Integrated core display components: .stopwatch-text and .stopwatch-text-sub . Created interactive control group ( .stopwatch-card-action-btn ) supporting Start, Pause, Replay, and Lap actions. Designed a 3-column CSS Grid table ( .stopwatch-lap-container ) to organize lap metrics ( i , lap , total ).
Devlog 45: Initial Stopwatch Logic & Dynamic State Scaffolding Core State & Lap Data Architecture Designed a stopwatch schema tracking dynamic state ( idle | running | paused ) and an array of individual lap records ( laps ). Streamlined time calculation to compute elapsed milliseconds dynamically directly using timestamps ( Date.now() - lap.startTime ), eliminating redundant accumulator fields like startTime or elapsedTime . Interactive Handlers & Lifecycle Operations Implemented core lifecycle handlers: handleStart , handlePause , handleReset , handleLap , and handleDelete . Integrated updateCardUI and updateCardBtns to reflect running, paused, and idle UI visual feedback dynamically. Built active DOM updates for lap histories inside updateCardLapGrid using index-based duration summation for lap and total times. Enabled global runtime updates via startGlobalTick() timer intervals and list reordering via handleMoveStopwatch() .
Devlog 46: UI Fine-tuning & Timing Logic Optimization Lap Calculations -Replaced laps.forEach with for (let j = 0; j <= i; j++) to ensure cumulative total times ( totalMS ) strictly correspond to the current lap index. Layout Enhanced formatTime() rendering logic by applying inline styles width , transform: scaleX(0.8) , text-align: center to dynamic span elements, preventing font-width shifting during rapid ticker updates. Dynamic Rendering Integrated updateListedStopwatch() into the global interval loop, enabling sidebar preview labels to tick synchronously with active main cards. Optimized state updates to target individual time elements instead of triggering full list re-renders on every ticker frame. Added optional chaining laps?.[0]?.startTime across rendering pipelines to prevent runtime exceptions when initializing empty stopwatches.
Devlog 47: Pause Compensation Pause Duration Offset Implemented pauseDuration calculation Date.now() - pauseStartTime during resume actions status === "paused" . Shifted all existing lap timestamps lap.endTime += pauseDuration forward to subtract paused time intervals. State-Aware Timestamp Resolution Standardized timestamp evaluation across renderers handleLap , renderListedStopwatch , updateListedStopwatch , and updateCardUI using ternary state checks: const now = stopwatch . status === " running " ? Date . now () : stopwatch . pauseStartTime ;
Devlog 48: DOM Selector Bugfixes & Homepage Quick Access DOM Query Selector & Reference Repairs Updated querySelector in updateListedStopwatch from target class .listed-stopwatch-demo to parent wrapper .listed-stopwatch[data-id="..."] , resolving element lookup failures during live updates. Homepage Integrated direct links and dedicated preview cards for the Stopwatch application into index.astro and BaseLayout.astro .
Devlog 49: Lap Data Export Plaintext Lap Data Serialization formatLapsOutput : a dedicated text formatter that converts active stopwatch data into structured tab-separated values (TSV) suitable for copying. Async Clipboard Copy Logic Implemented an async wrapper using navigator.clipboard.writeText() with built-in error handling ( try/catch ) and user alerts for unsupported environments or clipboard permission rejections. Interactive Copy Feedback UI Wired copyBtn click events to trigger text copying and dynamically update the button icon ( check or error ) and theme accent color.
Devlog 50 Layout Refactoring Scroll Restructuring Shifted .stopwatch-container layout from vertical wrapping ( flex-wrap: wrap ) to a single-row horizontal scroll track ( flex-wrap: nowrap with overflow-x: auto ).
Devlog 51: Asset Migration Asset Directory Migration Moved audio assets ( alarm.wav and notif.wav ) from the static /public/sounds/ directory into the source-managed asset pipeline at src/assets/sounds/ . Module Import & Bundler Integration Replaced hardcoded absolute URL paths ( "/public/sounds/..." ) with explicit ES module imports ( import alarmSoundUrl from '../assets/sounds/alarm.wav' and import notifSoundUrl from '../assets/sounds/notif.wav' ) across timer.js and pomodoro.js .
Devlog 52: GitHub Pages Audio Path Resolution Fixes Absolute Repository Subpath Hardcoding Replaced environment variable dynamic paths ( import.meta.env.BASE_URL ) with direct base-path URLs ( '/TickTock/sounds/alarm.wav' ) in playAlarm() . i have no idea why that happened
Ships:
What I Made I made a Countdown Web App called “Tick Tock.” It shows the exact years, months, days, hours, minutes, and seconds left until January 1, 2027. What Was Challenging Calculating months and years was hard. Months have different days (28, 30, or 31), so I had to write smart JavaScript code to borrow days and keep the timer 100% accurate. What I Am Proud Of It Works!: Actually this is my first time using html to build a website. Clean Design: I fixed the layout bugs and made a dark-mode interface. How to Test It https://klhrd.github.io/TickTock/
WHAT I MADE/THINK? I made a long-term countdown timer for events. It’s really hard for me to build things in a way that is completely new to me. I’ve been stuck not only with programming languages but also with English. However, through this project (STARDANCE), though I didn’t create something really impressive, I think I learnt A LOT. Features Live Countdown Full mode ⭐Days mode Customizable ⭐Change Target Date ⭐Edit Event Title ⭐automatically save in localStorage & url# ⭐share btn Dark Mode UI ⭐means new features of the previous ship WHAT I LEARNT? basic GIT code basic HTML/CSS3/JS How to write DevLogs REPLIES I’ve read all the replies of the ship#1. And lots of them mentioned the same thing. Thanks to everyone who give me feedback. Hope there’s the better version of previous ships. 1. ABOUT CHANGEABLE TARGET Now you can pick any target date and even edit the event title right from the sidebar. 2. ABOUT LANGUAGE I’ve fully migrated the app to English now. 3. ABOUT DEVLOG I’ve leveled up my devlog game for this update—documented all the engineering details and bugs I fixed this time. TRY IT! 2027 New Year NC Finals Weekend US Open
WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a beautiful, highly customizable Digital Clock. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features ⭐Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title ⭐Digital Clock ⭐12-hour / 24-hour format ⭐3 Font styles (Sans, Serif, Mono) ⭐Fullscreen mode (Header/Footer kept!) ⭐Smooth breathing colon animation automatically save in localStorage & url# Lightweight ⭐means new features of the previous ship WHAT I LEARNT? A lot of new things about Astro and NodeJS How to structure routes for multiple tools (Refactoring files) Advanced CSS (using global variables to adjust layout gaps dynamicly) REPLIES Thank you so much for the 115 stardust and the amazing feedback! I read every single review from Ship #2, and they helped me make this update so much better. 1. ABOUT MORE FEATURES Many suggested adding more tools or events. I turned the website into a Hub and built the Digital Clock as our second official tool! 2. ABOUT THE SCREENSHOT IN README Two reviewers mentioned adding screenshots. I’ve updated the README with fresh screenshots so people skimming through can see the UI instantly. TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif)
WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a Pomodoro Timer and a Time Progress Displayer. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title automatically save in localStorage & url# Digital Clock 12-hour / 24-hour format 3 Font styles (Sans, Serif, Mono) Fullscreen mode (Header/Footer kept!) Smooth breathing colon animation automatically save in localStorage & url# ⭐Time Progress Bar ⭐Export as image ⭐Switchable hide/show ⭐Pomodoro Timer ⭐Customable number of cycles ⭐Pause at any time ⭐Notification Sound Lightweight ⭐Light mode/Dark mode ⭐Quick link to other tools ⭐means new features of the previous ship WHAT I LEARNT? A lot of new things about git JS, Astro… TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif) Time Progress Pomodoro Timer
WHAT I MADE/THINK? I expanded TickTock from a single timer into a multi-tool station (Hub)! This time, I built a Timer and a Stopwatch. It was a huge challenge for me to handle standard browser behaviors, especially turning a single-page SPA into a structured Astro website with a homepage and sub-pages. It took lots of testing, but I feel so proud when everything finally aligned perfectly. Features Homepage Hub Dashboard Live Countdown Customizable Countdown Full mode / Days mode Change Target Date Edit Event Title automatically save in localStorage & url# Digital Clock 12-hour / 24-hour format 3 Font styles (Sans, Serif, Mono) Fullscreen mode (Header/Footer kept!) Smooth breathing colon animation automatically save in localStorage & url# ⭐Timer ⭐Mutiple timers at one page ⭐Keep going after refreshing website ⭐Circular progress bar ⭐Sortable timers ⭐Alarm and flash on completion ⭐Stopwatch ⭐Mutiple stopwatches at one page ⭐Keep going after refreshing website ⭐Sortable timers ⭐Able to lap and split ⭐Able to copy total time and laps info Time Progress Bar Export as image Switchable hide/show Pomodoro Timer Customable number of cycles Pause at any time Notification Sound Lightweight Light mode/Dark mode Quick link to other tools WHAT I LEARNT? A lot of new things about git How to write devlogs JS, Astro… TRY IT! TickTock Home Hub NC Finals Weekend Digital Clock (12H / Classic Serif) ⭐Timer ⭐Stopwatch Time Progress Pomodoro Timer ⭐means new features of the previous ship...
|
1794088406.3196828
|
1794174806.3196828
|
|
59752
|
PDF-Toolkit by @Greg_ios | Stardance
|
Greg_ios
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T12:54:34Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PDF Toolkit is a small Python CLI tool for common PDF operations, with a simple interactive interface.", "repo": "https://github.com/travletothefurureprogramming/PDF-Toolkit/", "demo": "https://github.com/travletothefurureprogramming/PDF-Toolkit/releases/tag/v1.0.0"}]...
|
[{"post_id": 64183, "ts": "202 [{"post_id": 64183, "ts": "2026-09-08T12:28:51Z", "hours": 0.4144, "text": "PDF Toolkit — DevLog 3 Text Extraction & Final Polish The PDF Toolkit is starting to feel like a real application now. After finishing the main PDF operations and the interactive CLI, I focused this time on adding text extraction and improving the overall reliability of the program. PDF → Text I added a new PDF → Text operation using PyMuPDF. The tool goes through the pages of a PDF, extracts the text and saves everything into a .txt file. This makes it possible to quickly get the text from a PDF without manually copying it page by page. The extracted text keeps the content from all pages in the document. CLI Improvements I also spent some time making the CLI more reliable. The program now handles common problems such as: Cancelled file selection Missing input files Missing output paths Invalid page numbers Invalid page ranges Errors during PDF operations Instead of crashing immediately, the CLI can display an error and return to the main menu. Better User Feedback The CLI now gives clearer feedback when an operation finishes. For example: ✓ PDF merged successfully! If an operation fails, the user gets an error message instead of being left with a Python traceback. This makes the tool much easier to use, especially for someone who doesn’t know how the code works internally. Command-Line Options I also added basic command-line options to make the program easier to use outside of the interactive menu. The application now supports: --help for displaying information about the available commands and options, and: --version for displaying the current version of PDF Toolkit. These are small additions, but they make the project feel much more like a proper command-line application. Current Features At this point, PDF Toolkit supports: Merge PDFs PDF → Image Split PDF Extract Pages PDF → Text Interactive CLI --help --version Input validation Error handling Cancel handling The project is now much more complete than when I started. Testing I’ve been testing the different operations both individually and through the CLI. The main goal is to make sure that the normal workflow works correctly while also handling common user mistakes without crashing the application. There are still things I want to test more thoroughly before calling the project finished, especially when packaging it for other computers. What’s Next The core functionality is now basically finished. The next step is no longer about adding lots of new features. I want to focus on actually shipping the project. The next stage will be: Final testing Packaging PDF Toolkit as a Windows .exe Cleaning up the project Final README updates Preparing the first release Next milestone: v1.0.0 🚀 The goal is to have a version that someone can download and use without needing to manually set up the Python environment."}, {"post_id": 64168, "ts": "2026-09-08T11:56:04Z", "hours": 0.5736, "text": "PDF Toolkit — Development Log 2 CLI Complete The first usable version of the PDF Toolkit CLI is now complete. I created cli.py and connected all of the PDF operations that were already implemented to a single interactive interface. The CLI is built using Questionary for the terminal menu and Tkinter file dialogs for selecting input and output files. Available Operations The CLI currently supports: Merge PDFs PDF → Image Split PDF Extract Pages Exit Each operation can now be selected directly from the terminal. File Selection Instead of requiring users to manually type file paths, the CLI uses Tkinter file dialogs to select files and folders. For example, when merging PDFs, the user can: Select multiple PDF files Choose the output location Create the merged PDF The same approach is used for the other operations where appropriate. PDF → Image The CLI asks the user for the page number and then allows them to choose where the generated image should be saved. Split PDF For splitting PDFs, the user can select: The input PDF The output folder The output filename prefix This keeps the generated files organized. Extract Pages The CLI also supports the page selection syntax implemented in the extraction function. For example: 1-5 or: 1,3,5-8 The selected pages are then saved into a new PDF. Current Status The core PDF operations are now implemented and accessible through the CLI. The project has moved from individual PDF functions to an actual usable command-line application. What’s Next The next step is to improve the CLI experience and make the tool more reliable. Possible improvements include: Better error handling Input validation Success/error messages Cleaner terminal output More tests Additional PDF operations Packaging the project for easier installation and distribution"}, {"post_id": 64153, "ts": "2026-09-08T11:14:47Z", "hours": 0.6161, "text": "PDF Toolkit — Devlog 1 Current Progress I’ve started building PDF Toolkit , a small Python command-line utility for working with PDF files. The goal is to keep it simple and modular, while gradually adding useful PDF operations. Project Structure PDF-Toolkit/ ├── main.py ├── requirements.txt ├── operations/ │ ├── __init__.py │ ├── merge.py │ ├── convert.py │ ├── split.py │ └── extract.py └── tests/ ├── __init__.py └── test_merge.py The PDF operations are separated into individual modules instead of putting everything into one file. Implemented Features Merge PDFs Added support for combining multiple PDF files into a single PDF. The merge operation uses PyMuPDF and accepts multiple input files. PDF → Image Added support for converting a specific PDF page into an image. Current options include: Selecting a specific page PNG output JPG output Custom DPI Split PDF Added support for splitting a PDF into individual pages. For example, a multi-page PDF can be split into separate files: page_1.pdf page_2.pdf page_3.pdf ... Extract Pages Added support for extracting selected pages into a new PDF. Pages can be specified individually or as ranges. Example: 2,5,8-10 This creates a new PDF containing pages 2, 5, 8, 9 and 10. CLI The next step is to connect all the existing operations through a simple CLI interface . The user will be able to start PDF Toolkit and select an operation from a menu: PDF Toolkit 1. Merge PDFs 2. PDF → Image 3. Split PDF 4. Extract Pages 5. Exit This will make the current features easier to use without having to call the Python functions manually. What’s Next After the CLI is working, I plan to continue expanding the toolkit with more PDF operations. Planned features: Rotate Pages Delete Pages Reorder Pages Images → PDF PDF information / metadata PDF compression Password protection For now, the focus is on getting the existing features working properly and making them easy to use through the CLI."}]...
|
Title: PDF-Toolkit by @Greg_ios | Stardance
Devlo Title: PDF-Toolkit by @Greg_ios | Stardance
Devlogs:
PDF Toolkit — Devlog 1 Current Progress I’ve started building PDF Toolkit , a small Python command-line utility for working with PDF files. The goal is to keep it simple and modular, while gradually adding useful PDF operations. Project Structure PDF-Toolkit/ ├── main.py ├── requirements.txt ├── operations/ │ ├── __init__.py │ ├── merge.py │ ├── convert.py │ ├── split.py │ └── extract.py └── tests/ ├── __init__.py └── test_merge.py The PDF operations are separated into individual modules instead of putting everything into one file. Implemented Features Merge PDFs Added support for combining multiple PDF files into a single PDF. The merge operation uses PyMuPDF and accepts multiple input files. PDF → Image Added support for converting a specific PDF page into an image. Current options include: Selecting a specific page PNG output JPG output Custom DPI Split PDF Added support for splitting a PDF into individual pages. For example, a multi-page PDF can be split into separate files: page_1.pdf page_2.pdf page_3.pdf ... Extract Pages Added support for extracting selected pages into a new PDF. Pages can be specified individually or as ranges. Example: 2,5,8-10 This creates a new PDF containing pages 2, 5, 8, 9 and 10. CLI The next step is to connect all the existing operations through a simple CLI interface . The user will be able to start PDF Toolkit and select an operation from a menu: PDF Toolkit 1. Merge PDFs 2. PDF → Image 3. Split PDF 4. Extract Pages 5. Exit This will make the current features easier to use without having to call the Python functions manually. What’s Next After the CLI is working, I plan to continue expanding the toolkit with more PDF operations. Planned features: Rotate Pages Delete Pages Reorder Pages Images → PDF PDF information / metadata PDF compression Password protection For now, the focus is on getting the existing features working properly and making them easy to use through the CLI.
PDF Toolkit — Development Log 2 CLI Complete The first usable version of the PDF Toolkit CLI is now complete. I created cli.py and connected all of the PDF operations that were already implemented to a single interactive interface. The CLI is built using Questionary for the terminal menu and Tkinter file dialogs for selecting input and output files. Available Operations The CLI currently supports: Merge PDFs PDF → Image Split PDF Extract Pages Exit Each operation can now be selected directly from the terminal. File Selection Instead of requiring users to manually type file paths, the CLI uses Tkinter file dialogs to select files and folders. For example, when merging PDFs, the user can: Select multiple PDF files Choose the output location Create the merged PDF The same approach is used for the other operations where appropriate. PDF → Image The CLI asks the user for the page number and then allows them to choose where the generated image should be saved. Split PDF For splitting PDFs, the user can select: The input PDF The output folder The output filename prefix This keeps the generated files organized. Extract Pages The CLI also supports the page selection syntax implemented in the extraction function. For example: 1-5 or: 1,3,5-8 The selected pages are then saved into a new PDF. Current Status The core PDF operations are now implemented and accessible through the CLI. The project has moved from individual PDF functions to an actual usable command-line application. What’s Next The next step is to improve the CLI experience and make the tool more reliable. Possible improvements include: Better error handling Input validation Success/error messages Cleaner terminal output More tests Additional PDF operations Packaging the project for easier installation and distribution
PDF Toolkit — DevLog 3 Text Extraction & Final Polish The PDF Toolkit is starting to feel like a real application now. After finishing the main PDF operations and the interactive CLI, I focused this time on adding text extraction and improving the overall reliability of the program. PDF → Text I added a new PDF → Text operation using PyMuPDF. The tool goes through the pages of a PDF, extracts the text and saves everything into a .txt file. This makes it possible to quickly get the text from a PDF without manually copying it page by page. The extracted text keeps the content from all pages in the document. CLI Improvements I also spent some time making the CLI more reliable. The program now handles common problems such as: Cancelled file selection Missing input files Missing output paths Invalid page numbers Invalid page ranges Errors during PDF operations Instead of crashing immediately, the CLI can display an error and return to the main menu. Better User Feedback The CLI now gives clearer feedback when an operation finishes. For example: ✓ PDF merged successfully! If an operation fails, the user gets an error message instead of being left with a Python traceback. This makes the tool much easier to use, especially for someone who doesn’t know how the code works internally. Command-Line Options I also added basic command-line options to make the program easier to use outside of the interactive menu. The application now supports: --help for displaying information about the available commands and options, and: --version for displaying the current version of PDF Toolkit. These are small additions, but they make the project feel much more like a proper command-line application. Current Features At this point, PDF Toolkit supports: Merge PDFs PDF → Image Split PDF Extract Pages PDF → Text Interactive CLI --help --version Input validation Error handling Cancel handling The project is now much more complete than when I started. Testing I’ve been testing the different operations both individually and through the CLI. The main goal is to make sure that the normal workflow works correctly while also handling common user mistakes without crashing the application. There are still things I want to test more thoroughly before calling the project finished, especially when packaging it for other computers. What’s Next The core functionality is now basically finished. The next step is no longer about adding lots of new features. I want to focus on actually shipping the project. The next stage will be: Final testing Packaging PDF Toolkit as a Windows .exe Cleaning up the project Final README updates Preparing the first release Next milestone: v1.0.0 🚀 The goal is to have a version that someone can download and use without needing to manually set up the Python environment.
Ships:
PDF Toolkit is a small Python CLI tool for common PDF operations, with a simple interactive interface....
|
1794045132.8498695
|
1794131532.8498695
|
|
56232
|
Slack-Bot-NEWSFED by @TheDoctor19 | Stardance
|
TheDoctor19
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T12:15:57Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ready to try, leave some feedback", "repo": "https://github.com/TheDoctor200/Flux-Newsfeed", "demo": "https://hackclub.enterprise.slack.com/archives/D0BUL8R4XEH"}]...
|
[{"post_id": 64174, "ts": "202 [{"post_id": 64174, "ts": "2026-09-08T12:12:46Z", "hours": 0.3447, "text": "finished the bot and its now deployed to nest :)"}, {"post_id": 63264, "ts": "2026-09-07T00:07:22Z", "hours": 0.9419, "text": "The Bot is finished and searches top 5 news of different topics."}, {"post_id": 62558, "ts": "2026-09-06T00:27:56Z", "hours": 0.3706, "text": "Flux-Newsfeed is set up, pong received, now I begin with integrating news feature and summary for quick news all around tech and start designing a bot logo."}]...
|
Title: Slack-Bot-NEWSFED by @TheDoctor19 | Stardan Title: Slack-Bot-NEWSFED by @TheDoctor19 | Stardance
Devlogs:
Flux-Newsfeed is set up, pong received, now I begin with integrating news feature and summary for quick news all around tech and start designing a bot logo.
The Bot is finished and searches top 5 news of different topics.
finished the bot and its now deployed to nest :)
Ships:
ready to try, leave some feedback...
|
1793929936.2047393
|
1794016336.2047393
|
|
15376
|
Arduino Keyboard by @MGHH | Stardance
|
MGHH
|
0
|
1.33
|
0
|
[]
|
[{"post_id": 6417, "ts": "2026 [{"post_id": 6417, "ts": "2026-06-10T19:54:42Z", "hours": 1.3342, "text": "I am working On the Bases of the circuit So far I have made 2 buttons and made a testing LED to light up when a button is pressed."}]...
|
Title: Arduino Keyboard by @MGHH | Stardance
Devl Title: Arduino Keyboard by @MGHH | Stardance
Devlogs:
I am working On the Bases of the circuit So far I have made 2 buttons and made a testing LED to light up when a button is pressed....
|
1793404350.2242577
|
1794009150.2242577
|
|
32022
|
TungstenScore by @triple-colons | Stardance
|
triple-colons
|
1
|
12.0
|
138
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T11:57:36Z", "hours": 12.0, "multiplier": 11.09, "payout": 138, "blessing": "neutral", "text": "TungstenScore (v0.5.1) TungstenScore is a lightweight, open-source security assessment tool for Windows. It checks important Windows security settings and gives your system a security score, making it easier to understand how well your PC is protected and what could be improved. One of the hardest parts of building TungstenScore was working with the Windows APIs and reading security-related information from the Windows Registry. Different security features expose their state in different ways, so figuring out how to reliably retrieve and interpret that information was one of the biggest challenges during development. What I’m most proud of, though, is the structure of the project. TungstenScore still has a relatively small set of features, but I focused on making its foundation small, solid, and extensible. New security checks and other features can be added without having to redesign the entire application. Building that solid foundation is probably the part of this project I’m most proud of. TungstenScore is still under development, and I plan to add more security checks and improve the scoring system over time. You can now try TungstenScore yourself! You can download a pre-built version from my website, or download the source code and build it yourself using Cargo. Language note: English is not my native language, and I’m not very confident writing in English yet. I originally wrote this devlog in Korean and used an AI tool to help translate it into English.", "repo": "https://github.com/dw1210/TungstenScore", "demo": "https://dw1210.github.io/TungstenScore-website/"}]...
|
[{"post_id": 64166, "ts": "202 [{"post_id": 64166, "ts": "2026-09-08T11:47:36Z", "hours": 0.3094, "text": "devlog #7 (v0.5.1) I fixed some bugs for my first release!"}, {"post_id": 46804, "ts": "2026-08-14T09:49:41Z", "hours": 3.4444, "text": "Devlog #6 (v0.5.0) [Project Summary] TungstenScore is a Windows security assessment tool built with Rust. It evaluates your Windows system’s security posture and generates an overall security score. [Project Plan] Add security checks a. Firewall (Done) b. UAC (Done) c. TPM 2.0 (Added Today!) d. System integrity e. Hidden accounts f. Disk encryption g. etc. Add an auto-fix feature Add a GUI And more… [What I Did] I decided to remove the Windows version check from the roadmap because I couldn’t find a reliable way to retrieve the latest update info locally. I also don’t want the app to connect to the internet, as users might prefer an offline tool and maintaining a dedicated version API server would add extra overhead. Today, I added the TPM 2.0 check. It took a while to implement because this check requires admin privileges. I had to investigate what was causing the permission errors and figure out how to handle them gracefully. As a solution, I added an option to relaunch the app as administrator: If you type “Y”, the program will restart with admin privileges. If you type “N”, the check will be marked as “Requires administrator privileges” and excluded from the scan score (as shown in the attached screenshot). [Next Version Plan] I’ll be adding a check for hidden accounts. [Repo Link] https://github.com/dw1210/TungstenScore [Website] https://dw1210.github.io/TungstenScore-website/"}, {"post_id": 34533, "ts": "2026-07-25T10:21:33Z", "hours": 2.4397, "text": "Devlog #5 (v0.4.0) [Project Summary] ‘TungstenScore’ is a Windows security assessment tool built with Rust. It evaluates your Windows system security and generates an overall security score. [Project Plan] (No changes today) 1.Add security checks a. Firewall (Done) b. UAC (Done) c. Windows version d. Hidden accounts e. Etc. 2.Add an auto-fix feature 3.Add a GUI 4.And more… [What I Did] I refactored the code structure! It was a bit challenging, but I’ve separated the codebase into multiple files, as shown in the attached screenshot. I decided not to release version 0.4.0 yet since there aren’t any major feature updates. Additionally, I fixed some typos. [Next Version Plan] I’ll add a check for hidden accounts. [Repo Link] https://github.com/dw1210/TungstenScore [Website] https://dw1210.github.io/TungstenScore-website/"}, {"post_id": 33911, "ts": "2026-07-24T06:32:03Z", "hours": 0.9403, "text": "Devlog #4 (v0.3.0) [Project Summary] ‘TungstenScore’ is a Windows security assessment tool built with Rust. It checks your Windows system security and generates an overall security score. [Project Plan] Add security checks a. Firewall (Added today) b. UAC (Done) c. Windows version d. Hidden accounts e. Etc. Add an auto-fix feature Add a GUI And more… [What I Did] I finally managed to build the Firewall checker! It reads directly from the Windows Registry. Since I worked on a different computer that didn’t have Hackatime installed, my development time was only partially logged. [Next Version Plan] In the next release, I’ll fix some typos (my English isn’t great yet! 😅) and refactor the code structure for better maintainability. [Repo Link] https://github.com/dw1210/TungstenScore [Website] https://dw1210.github.io/TungstenScore-website/"}, {"post_id": 28289, "ts": "2026-07-14T13:31:54Z", "hours": 0.8381, "text": "Devlog #3 I made the TungstenScore website! https://dw1210.github.io/TungstenScore-website/"}, {"post_id": 27017, "ts": "2026-07-12T04:57:02Z", "hours": 3.1203, "text": "Devlog #2 (v0.2.0) [Project summary] ‘TungstenScore’ is a Windows security assessment tool written in Rust. This app checks the security of your Windows computer and scores it. [Project plan] Add some checks a. Firewall b.»UAC« - I made this today. c.Windows version d.Etc 2.Add an auto-fix feature 3.Add GUI 4.And more… [What I did] Initially, I attempted to add a Windows version checker but ran into issues. I’m going to find a new way to make this later. So, I made UAC checker and score system today! [Next version plan] In the next version, I’m going to make a Windows version checker and a companion website for the project! [Repo link] https://github.com/dw1210/TungstenScore"}, {"post_id": 26531, "ts": "2026-07-11T12:12:39Z", "hours": 1.315, "text": "Devlog #1 (v0.1.0) Today, I started building TungstenScore, a Windows security assessment tool written in Rust. This app checks the security of your Windows computer and scores it. [Project plan] Add some checks a.Firewall b.UAC c.Windows version d.Etc. Add an auto-fix feature Add GUI And more… [What I did] I created a basic CLI structure, including the menu system and the ‘About’ screen. [What I’m going to do] In the next version, I will add some security checks, such as verifying the firewall status. [Repo link] https://github.com/dw1210/TungstenScore"}]...
|
Title: TungstenScore by @triple-colons | Stardance Title: TungstenScore by @triple-colons | Stardance
Devlogs:
Devlog #1 (v0.1.0) Today, I started building TungstenScore, a Windows security assessment tool written in Rust. This app checks the security of your Windows computer and scores it. [Project plan] Add some checks a.Firewall b.UAC c.Windows version d.Etc. Add an auto-fix feature Add GUI And more… [What I did] I created a basic CLI structure, including the menu system and the ‘About’ screen. [What I’m going to do] In the next version, I will add some security checks, such as verifying the firewall status. [Repo link] https://github.com/dw1210/TungstenScore
Devlog #2 (v0.2.0) [Project summary] ‘TungstenScore’ is a Windows security assessment tool written in Rust. This app checks the security of your Windows computer and scores it. [Project plan] Add some checks a. Firewall b.»UAC« - I made this today. c.Windows version d.Etc 2.Add an auto-fix feature 3.Add GUI 4.And more… [What I did] Initially, I attempted to add a Windows version checker but ran into issues. I’m going to find a new way to make this later. So, I made UAC checker and score system today! [Next version plan] In the next version, I’m going to make a Windows version checker and a companion website for the project! [Repo link] https://github.com/dw1210/TungstenScore
Devlog #3 I made the TungstenScore website! https://dw1210.github.io/TungstenScore-website/
Devlog #4 (v0.3.0) [Project Summary] ‘TungstenScore’ is a Windows security assessment tool built with Rust. It checks your Windows system security and generates an overall security score. [Project Plan] Add security checks a. Firewall (Added today) b. UAC (Done) c. Windows version d. Hidden accounts e. Etc. Add an auto-fix feature Add a GUI And more… [What I Did] I finally managed to build the Firewall checker! It reads directly from the Windows Registry. Since I worked on a different computer that didn’t have Hackatime installed, my development time was only partially logged. [Next Version Plan] In the next release, I’ll fix some typos (my English isn’t great yet! 😅) and refactor the code structure for better maintainability. [Repo Link] https://github.com/dw1210/TungstenScore [Website] https://dw1210.github.io/TungstenScore-website/
Devlog #5 (v0.4.0) [Project Summary] ‘TungstenScore’ is a Windows security assessment tool built with Rust. It evaluates your Windows system security and generates an overall security score. [Project Plan] (No changes today) 1.Add security checks a. Firewall (Done) b. UAC (Done) c. Windows version d. Hidden accounts e. Etc. 2.Add an auto-fix feature 3.Add a GUI 4.And more… [What I Did] I refactored the code structure! It was a bit challenging, but I’ve separated the codebase into multiple files, as shown in the attached screenshot. I decided not to release version 0.4.0 yet since there aren’t any major feature updates. Additionally, I fixed some typos. [Next Version Plan] I’ll add a check for hidden accounts. [Repo Link] https://github.com/dw1210/TungstenScore [Website] https://dw1210.github.io/TungstenScore-website/
Devlog #6 (v0.5.0) [Project Summary] TungstenScore is a Windows security assessment tool built with Rust. It evaluates your Windows system’s security posture and generates an overall security score. [Project Plan] Add security checks a. Firewall (Done) b. UAC (Done) c. TPM 2.0 (Added Today!) d. System integrity e. Hidden accounts f. Disk encryption g. etc. Add an auto-fix feature Add a GUI And more… [What I Did] I decided to remove the Windows version check from the roadmap because I couldn’t find a reliable way to retrieve the latest update info locally. I also don’t want the app to connect to the internet, as users might prefer an offline tool and maintaining a dedicated version API server would add extra overhead. Today, I added the TPM 2.0 check. It took a while to implement because this check requires admin privileges. I had to investigate what was causing the permission errors and figure out how to handle them gracefully. As a solution, I added an option to relaunch the app as administrator: If you type “Y”, the program will restart with admin privileges. If you type “N”, the check will be marked as “Requires administrator privileges” and excluded from the scan score (as shown in the attached screenshot). [Next Version Plan] I’ll be adding a check for hidden accounts. [Repo Link] https://github.com/dw1210/TungstenScore [Website] https://dw1210.github.io/TungstenScore-website/
devlog #7 (v0.5.1) I fixed some bugs for my first release!
Ships:
TungstenScore (v0.5.1) TungstenScore is a lightweight, open-source security assessment tool for Windows. It checks important Windows security settings and gives your system a security score, making it easier to understand how well your PC is protected and what could be improved. One of the hardest parts of building TungstenScore was working with the Windows APIs and reading security-related information from the Windows Registry. Different security features expose their state in different ways, so figuring out how to reliably retrieve and interpret that information was one of the biggest challenges during development. What I’m most proud of, though, is the structure of the project. TungstenScore still has a relatively small set of features, but I focused on making its foundation small, solid, and extensible. New security checks and other features can be added without having to redesign the entire application. Building that solid foundation is probably the part of this project I’m most proud of. TungstenScore is still under development, and I plan to add more security checks and improve the scoring system over time. You can now try TungstenScore yourself! You can download a pre-built version from my website, or download the source code and build it yourself using Cargo. Language note: English is not my native language, and I’m not very confident writing in English yet. I originally wrote this devlog in Korean and used an AI tool to help translate it into English....
|
1794019810.9029012
|
1794106210.9029012
|
|
12769
|
Boundless by @Akhil_A | Stardance
|
Akhil_A
|
0
|
1.78
|
0
|
[]
|
[{"post_id": 6416, "ts": "2026 [{"post_id": 6416, "ts": "2026-06-10T19:54:09Z", "hours": 0.5206, "text": "Worked on the boundary of the game, created a custom character for the game, and now I am currently working on gravity and the jumping system for the platform game: Boundless"}, {"post_id": 5327, "ts": "2026-06-09T01:59:00Z", "hours": 0.6244, "text": "The background Image + Character Movement"}, {"post_id": 5215, "ts": "2026-06-08T22:28:50Z", "hours": 0.6392, "text": "Initial Code for the display of the game"}]...
|
Title: Boundless by @Akhil_A | Stardance
Devlogs: Title: Boundless by @Akhil_A | Stardance
Devlogs:
Initial Code for the display of the game
The background Image + Character Movement
Worked on the boundary of the game, created a custom character for the game, and now I am currently working on gravity and the jumping system for the platform game: Boundless...
|
1793573504.959972
|
1794178304.959972
|
|
57948
|
WHERE ON EARTH? by @ZadowCHI | Stardance
|
ZadowCHI
|
1
|
11.0
|
73
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T11:43:04Z", "hours": 11.0, "multiplier": 6.58, "payout": 73, "blessing": "neutral", "text": "What did you make? Made WHERE ON EARTH? , a GeoGuessr-style game where you get dropped somewhere random and have to figure out where you are. You get 5 rounds, guess on the map, and get points based on how close you were. What was challenging? Getting all the random locations, Street View, map, scoring and game logic to actually work together There were also a LOT of random bugs. What are you proud of? Mostly just how it turned out. I started with a pretty basic idea and somehow ended up with an actual game. I also learned a lot while making it, especially with maps and the Haversine formula. What should people know? It’s single-player for now, so give it a try and see how good your geography actually is Multiplayer is probably coming later.", "repo": "https://github.com/Zadow67/WHERE-ON-EARTH", "demo": "https://zadow67.github.io/WHERE-ON-EARTH/"}]...
|
[{"post_id": 64158, "ts": "202 [{"post_id": 64158, "ts": "2026-09-08T11:32:29Z", "hours": 1.7058, "text": "Finally completed the app This one took a LOT, and I mean A LOT, of time to finish. From building the game logic and map system to fixing random bugs, tweaking the UI, and making everything actually work together… it was definitely a journey I couldn’t get multiplayer added this time, but that’s something I’ll work on after I ship this version. For now, I’m calling it done and shipping it Really happy with how it turned out, especially considering how much I learned while building it. Next stop: multiplayer"}, {"post_id": 64025, "ts": "2026-09-08T04:19:04Z", "hours": 2.2969, "text": "Updates: Added this page telling about your Score. I am thinking to add multiplayer but i have to learn first how to added it i think ill ship it once with single player only and then later update and ship again"}, {"post_id": 62777, "ts": "2026-09-06T09:21:45Z", "hours": 1.8456, "text": "Soo, a lot has been done. First the UI is completed with the game logic aswell. There are a log of bugs also….. i am unable to remove the top thinggy on the street view which tells what location is that soo trying to find a way to hide it also have to add a restart system after 5 rounds."}, {"post_id": 62253, "ts": "2026-09-05T15:07:06Z", "hours": 1.9594, "text": "Made Whole JS file: Now there are 5 Rounds with all random locations points system and distance is your score soo yep that’s the progress till now"}, {"post_id": 61782, "ts": "2026-09-04T21:10:32Z", "hours": 0.6417, "text": "Made the core function work. Now whenever you play, you get placed at a random location on Earth and have to guess where you are. After you guess, it tells you the distance from your guess to the actual location. Pretty basic for now but the main thing is working."}, {"post_id": 61546, "ts": "2026-09-04T14:49:04Z", "hours": 0.5522, "text": "Yepeee, Came up with a method to get random locations + made a function to get the distance between the user’s guess and the location using the: Haversine formula Works SUPERRR great tbh, I didn’t know it would be this easy famm…"}, {"post_id": 61517, "ts": "2026-09-04T13:57:02Z", "hours": 1.0922, "text": "Google Maps API was lowkey confusing to understand, but I learned just enough to make my project work. Atm I’m using Google Street View + OpenStreetMap (bc it’s way easier to use but still so good). Thanks to @openstreetmap for making a free map API This is basically the structure so far. Next, I’m starting on the CSS for the game, then working on the score system and calculating exactly how far away the user’s guess was."}, {"post_id": 61113, "ts": "2026-09-03T20:55:45Z", "hours": 0.3003, "text": "This was the sketch I had in mind and this is the UI I built from it. I think it looks pretty cool so far, its just the landing page tho. I would love some suggestions on what I could improve . I still have to make the actual game UI so this is just the start."}, {"post_id": 61096, "ts": "2026-09-03T20:18:05Z", "hours": 0.7558, "text": "Started working on it like 1.5 hours ago. Got the concept clear and the theme too. Currently just making the basic functioning app, not focusing on the style that much. Once I have a working app ill focus more on the UI and all."}]...
|
Title: WHERE ON EARTH? by @ZadowCHI | Stardance
D Title: WHERE ON EARTH? by @ZadowCHI | Stardance
Devlogs:
Started working on it like 1.5 hours ago. Got the concept clear and the theme too. Currently just making the basic functioning app, not focusing on the style that much. Once I have a working app ill focus more on the UI and all.
This was the sketch I had in mind and this is the UI I built from it. I think it looks pretty cool so far, its just the landing page tho. I would love some suggestions on what I could improve . I still have to make the actual game UI so this is just the start.
Google Maps API was lowkey confusing to understand, but I learned just enough to make my project work. Atm I’m using Google Street View + OpenStreetMap (bc it’s way easier to use but still so good). Thanks to @openstreetmap for making a free map API This is basically the structure so far. Next, I’m starting on the CSS for the game, then working on the score system and calculating exactly how far away the user’s guess was.
Yepeee, Came up with a method to get random locations + made a function to get the distance between the user’s guess and the location using the: Haversine formula Works SUPERRR great tbh, I didn’t know it would be this easy famm…
Made the core function work. Now whenever you play, you get placed at a random location on Earth and have to guess where you are. After you guess, it tells you the distance from your guess to the actual location. Pretty basic for now but the main thing is working.
Made Whole JS file: Now there are 5 Rounds with all random locations points system and distance is your score soo yep that’s the progress till now
Soo, a lot has been done. First the UI is completed with the game logic aswell. There are a log of bugs also….. i am unable to remove the top thinggy on the street view which tells what location is that soo trying to find a way to hide it also have to add a restart system after 5 rounds.
Updates: Added this page telling about your Score. I am thinking to add multiplayer but i have to learn first how to added it i think ill ship it once with single player only and then later update and ship again
Finally completed the app This one took a LOT, and I mean A LOT, of time to finish. From building the game logic and map system to fixing random bugs, tweaking the UI, and making everything actually work together… it was definitely a journey I couldn’t get multiplayer added this time, but that’s something I’ll work on after I ship this version. For now, I’m calling it done and shipping it Really happy with how it turned out, especially considering how much I learned while building it. Next stop: multiplayer
Ships:
What did you make? Made WHERE ON EARTH? , a GeoGuessr-style game where you get dropped somewhere random and have to figure out where you are. You get 5 rounds, guess on the map, and get points based on how close you were. What was challenging? Getting all the random locations, Street View, map, scoring and game logic to actually work together There were also a LOT of random bugs. What are you proud of? Mostly just how it turned out. I started with a pretty basic idea and somehow ended up with an actual game. I also learned a lot while making it, especially with maps and the Haversine formula. What should people know? It’s single-player for now, so give it a try and see how good your geography actually is Multiplayer is probably coming later....
|
1793965902.0352547
|
1794052302.0352547
|
|
3
|
DNS-Tracker by @Fantamomo | Stardance
|
Fantamomo
|
0
|
58.69
|
0
|
[]
|
[{"post_id": 64156, "ts": "202 [{"post_id": 64156, "ts": "2026-09-08T11:23:05Z", "hours": 11.0014, "text": "I worked on the Site Checker System, and it is now ready enough. The Programm checks every site in the hackclub/dns repo. I makes a simple GET Request to it. I watch the request and wait for it to fail, than I check what exactly went wrong. Or if it was successful if read the response and check if it is maybe the site of a hosting provider which tells that the deployment could not be found ( example ). I also want to do this with other hosting providers like Orchard, the problem is Orchard does not give me enough information to be sure that it is orchard and not the deployment. When I figured that a site has a problem (or not) I do three things: I write it in the database (or delete it) I create/update/delete the row in the slack list ( view it in slack ) I write a message to the #dns-alerts channel The messages I write to #dns-alerts contains: the type of the message (new problem, updated problem or problem resolved) the link to the site the problem type (and I am really proud on this one, because it is colored and has the same style like the links or list items, see the screenshot, or join the channel , this is done vie the slack tag block ) The link to the list record unless it was resolved (because than the record does no longer exist)"}, {"post_id": 62138, "ts": "2026-09-05T12:05:00Z", "hours": 10.0889, "text": "Since the last devlog, I have made some changes: Hosting Emojis, Memory improvements, better Proxy. And I am currently working on Site-Checker . Hosting Emojis When the target of a record matches the following hosting providers an emoji is displayed next to it in brackets: Orchard 🅰️ Coolify A 🅱️ Coolify B Vercel GitHub Pages Netlify Nest Cloudflare Pages This is done with regexes (see them here ) Memory improvement In my last devlog, I wrote that the program is always killed by the OOM-Killer because it uses too much RAM, that is now fixed. The problem was that for each commit I cached all records that exists at that commit, which was not only complete waste of resources, but also completely unnecessary because I didn’t use the cache afterwards. better Proxy There were also some improvements for the Proxy, such as blocking Permanent Redirects for unsafe Location headers and caching the HTTPS state for a site. Site Checker That is my new big feature for this project. It is going to check all the sites in the dns zones. And if it finds a problem it is going to send it to a special channel and write it in a slack list (see the attached image). The checker will check for problem in the DNS or server deployment. I already working on it. See the feature/site-chechker branch"}, {"post_id": 52609, "ts": "2026-08-22T20:21:49Z", "hours": 11.5061, "text": "Previews I have a really cool new feature (actually it is really old, the first version was already working on the 26. 6. (two months ago), but I kinda forgot to write about it): Previews The problem is pretty simple: Imagine someone is adding a new record like super-cool-site.hackclub.com . The record is not merged yet, so the DNS record does not exist. Because of that you normally can’t just open the domain in your browser to check if the site is working. So how do I solve this? Well, to understand this you need to understand how the hostname actually works. When you open a site in your browser like hackclub.com , it resolves to an IP address, in this case 216.150.1.1 (owned by Vercel). But on Vercel many sites are hosted on the same IP, so how does Vercel know which site to serve. The Host Header The Host Header is a HTTP header which is automatically added by the browser and contains the original hostname that was requested in this case hackclub.com So the server can look at this header and then serve the correct page. With HTTPS it is a little bit more complicated, because the hostname is needed before the HTTP request even exists. This is where SNI comes in. I did some tricky and hacky stuff to make it work. How the preview works When a new proposal is detected, the Slack message now has a link next to the name of the proposal: https://dns-tracker.fantamomo.com/preview/<host> When the link is opened, my server looks in the database for the target IP or CNAME. Then it makes a request to the target, but instead of using the target hostname as the Host header, it uses the hostname from the proposal. So even tho super-cool-site.hackclub.com does not exist in DNS yet, the upstream server gets a request which looks like it came for super-cool-site.hackclub.com . Nearly all headers and the full body are passed through to the upstream server. When the response comes back, I check what it is. If it is a redirect and it targets the upstream server, I rewrite it so that it goes through the preview server. If it is anything besides HTML, I just pass it through. But if it is HTML, I parse the HTML and do two things: First I rewrite all links, relative or absolute, so that they point to the preview server instead of the real domain. I also inject the /preview/<host> path so my server knows what it is supposed to preview. Second I inject a small JS script which overrides the fetch function. This is needed because otherwise the website could load correctly, but JavaScript could still make requests directly to the real domain (which does not exist). The script is here if you are interested: proxied_fetch.js There is one problem While this allows the client to basically pretend that the DNS record already exists, it doesn’t work with every hosting provider. The problem is that the hosting provider itself may expect the domain to be configured before it serves the website. My server can make the requests like if the DNS record exists, but I can’t make the hosting provider believe that the domain really exists. More problems Another problem I have is that the program uses to much RAM, so much that it gets all the time killed by the Out-of-Memory-Killer. So I am going to investigate what exactly takes so much RAM. If I can’t find out or it actually needs that much, then I am going to request more RAM for my nest server. So until then, it is possible that the server gets killed, or change detection gets delayed. If you really need it, I recommend you to just wait 1-2 days until I fixed that, or ping me in Slack so that I can restart the server."}, {"post_id": 9439, "ts": "2026-06-15T20:03:06Z", "hours": 2.8275, "text": "Slack id finding The Programm now checks the follows the links in the slack profiles to check if the may redict to GitHub (because some hackclubbers habe www.github.com instead of GitHub.com, and some other use there own url shortener so that my program broke). And due this the number of found slack ids is the first time higher then the not found ( 310 to 276 ). Also if a found some new records and the author/commiter hasn’t been indexed, the program prioritize them so that I can hopefully send the message with the mentions. Link If the records I an A , AAAA , CNAME or ALIAS the link in the slack message is clickable so that you can directly open the page. I also added a link message to the GitHub repository where the change came from. Deleted records In my last devlog I said that I want to detect deleted and removed records. I tried that, but it is easier to say then to implement."}, {"post_id": 8661, "ts": "2026-06-14T11:57:29Z", "hours": 3.3783, "text": "Changes Slack id finder I updated the GitHub to slack id finder, it now also search for messages, because the chance that someone sendet a link to his/her GitHub account is really high. Before this change I found from the 603 users only 70. After the change I found from 488 users, 234 which is near at 50% (some users are missing, because I couldn’t check does due the rate limiting from Slack). Records parsing Due a bug in the parsing logic more then half of the records in the repo are ignored. Like this one: test: - type: CNAME value: hackclub.com. The bug is - , the parser has read it as an list instead of an map so I missed 1018 records, it is now fixed. Ignoring I also added the possibility to ignore specific repos. Like this one. I use this to test my code locally without spamming the #dns-tracker channel. Next The next thing is to detect deleting records on any possible way (removing the lines, reseting head, merging, branch deleting, etc.) The image contains an proposals from @parth one of the Stardance developers, who adds an new domain staging.stardance.hackclub.com"}, {"post_id": 7694, "ts": "2026-06-12T21:02:11Z", "hours": 13.4547, "text": "I have done a lot in the 13 hours What I added I build a database migration system so that if I change some tables (which I do more then a should), a migration script is generated and on the next start executed so that I don’t have to manually update the db. Mentions Since the start of this project, I always wanted to mention the user, in my dns update message, which has done the changes. Which is easier to say than to make. Before this devlog I tried to do this by Slack APIs which didn’t work, so I thought where all of Hackclubs Users have there Slack Id and there GitHub account: Hackatime . I experimented which there API to find a way to get the slack id from an GitHub-account, which is sadly not possible. So I got back to Slack API and found a way: If I want to get an User I request the Slack API with the account name Then I go through every user id that I found and check the profile of it, if there GitHub profile matches my requested name, then I have the user id When a new changes is detected I look in the DB and check if there is a connection. There is only one problem: The api I use is heavily rate limited, so that I can currently check one user every 5 minutes, but it works. (Yeah I know 13 hours is to much, but I needed to finish this feature)"}, {"post_id": 5694, "ts": "2026-06-09T16:08:19Z", "hours": 3.5964, "text": "Since my last devlog the bot found some new interesting records (before #hackclub-leeks knew them), like the one in the image. What I added I changed the logging so that it also logs to a file and is colorful in the console. What I tried to add I wanted to make it so that in the message the person is mentioned that added/changed a record. The problem is: There is no way to for my to get a Slack user from its GitHub account. I know there is a profile field for the GitHub account, but I am not able to search for it. So I have some options: I could index all users on Slack, by 124.265 users with 100 requests per minute it takes around ~21 hours (and I don’t think that the FD would like that) Then I found a API. It is called “ Slack SCIM API ”, and it is perfect, because I can request all users that match a rule (like field GitHub == something). Until I found out that only Admins can use it. I could do it manually. It will take some time (currently 664 users have contributed or forked the hackclub/dns repo) and that is not the only reason why I will not do it Other things Also due to some unknown reasons the bot sometimes gets killed by the OOM Killer and I couldn’t figure out why it needs so much ram. Btw, 3h 10m where coded on my new MacBook Air (from flavortown) and because of the new keyboard layout it takes four times longer to write every line of code and the @ is killing me"}, {"post_id": 57, "ts": "2026-05-31T15:22:04Z", "hours": 2.5556, "text": "Updated the slack message so that it is more clear what changes. Also made the app more efficient in checking if the main repo or fork had been updated. (It makes 2 http requests which together only take around 1 second). And if nothing has changed, nothing will be added to the github rate limit. It also runs on Nest and post messages in #dns-tracker . There are still some bugs with detecting deleted records (in forks)"}, {"post_id": 2, "ts": "2026-05-31T06:50:25Z", "hours": 0.2847, "text": "I created a program that scans the Hackclub/DNS repository, including its forks, to look for new entries or updates. (Also i think i have the first devlog of stardance) (not the first, but the second)"}]...
|
Title: DNS-Tracker by @Fantamomo | Stardance
Devl Title: DNS-Tracker by @Fantamomo | Stardance
Devlogs:
I created a program that scans the Hackclub/DNS repository, including its forks, to look for new entries or updates. (Also i think i have the first devlog of stardance) (not the first, but the second)
Updated the slack message so that it is more clear what changes. Also made the app more efficient in checking if the main repo or fork had been updated. (It makes 2 http requests which together only take around 1 second). And if nothing has changed, nothing will be added to the github rate limit. It also runs on Nest and post messages in #dns-tracker . There are still some bugs with detecting deleted records (in forks)
Since my last devlog the bot found some new interesting records (before #hackclub-leeks knew them), like the one in the image. What I added I changed the logging so that it also logs to a file and is colorful in the console. What I tried to add I wanted to make it so that in the message the person is mentioned that added/changed a record. The problem is: There is no way to for my to get a Slack user from its GitHub account. I know there is a profile field for the GitHub account, but I am not able to search for it. So I have some options: I could index all users on Slack, by 124.265 users with 100 requests per minute it takes around ~21 hours (and I don’t think that the FD would like that) Then I found a API. It is called “ Slack SCIM API ”, and it is perfect, because I can request all users that match a rule (like field GitHub == something). Until I found out that only Admins can use it. I could do it manually. It will take some time (currently 664 users have contributed or forked the hackclub/dns repo) and that is not the only reason why I will not do it Other things Also due to some unknown reasons the bot sometimes gets killed by the OOM Killer and I couldn’t figure out why it needs so much ram. Btw, 3h 10m where coded on my new MacBook Air (from flavortown) and because of the new keyboard layout it takes four times longer to write every line of code and the @ is killing me
I have done a lot in the 13 hours What I added I build a database migration system so that if I change some tables (which I do more then a should), a migration script is generated and on the next start executed so that I don’t have to manually update the db. Mentions Since the start of this project, I always wanted to mention the user, in my dns update message, which has done the changes. Which is easier to say than to make. Before this devlog I tried to do this by Slack APIs which didn’t work, so I thought where all of Hackclubs Users have there Slack Id and there GitHub account: Hackatime . I experimented which there API to find a way to get the slack id from an GitHub-account, which is sadly not possible. So I got back to Slack API and found a way: If I want to get an User I request the Slack API with the account name Then I go through every user id that I found and check the profile of it, if there GitHub profile matches my requested name, then I have the user id When a new changes is detected I look in the DB and check if there is a connection. There is only one problem: The api I use is heavily rate limited, so that I can currently check one user every 5 minutes, but it works. (Yeah I know 13 hours is to much, but I needed to finish this feature)
Changes Slack id finder I updated the GitHub to slack id finder, it now also search for messages, because the chance that someone sendet a link to his/her GitHub account is really high. Before this change I found from the 603 users only 70. After the change I found from 488 users, 234 which is near at 50% (some users are missing, because I couldn’t check does due the rate limiting from Slack). Records parsing Due a bug in the parsing logic more then half of the records in the repo are ignored. Like this one: test: - type: CNAME value: hackclub.com. The bug is - , the parser has read it as an list instead of an map so I missed 1018 records, it is now fixed. Ignoring I also added the possibility to ignore specific repos. Like this one. I use this to test my code locally without spamming the #dns-tracker channel. Next The next thing is to detect deleting records on any possible way (removing the lines, reseting head, merging, branch deleting, etc.) The image contains an proposals from @parth one of the Stardance developers, who adds an new domain staging.stardance.hackclub.com
Slack id finding The Programm now checks the follows the links in the slack profiles to check if the may redict to GitHub (because some hackclubbers habe www.github.com instead of GitHub.com, and some other use there own url shortener so that my program broke). And due this the number of found slack ids is the first time higher then the not found ( 310 to 276 ). Also if a found some new records and the author/commiter hasn’t been indexed, the program prioritize them so that I can hopefully send the message with the mentions. Link If the records I an A , AAAA , CNAME or ALIAS the link in the slack message is clickable so that you can directly open the page. I also added a link message to the GitHub repository where the change came from. Deleted records In my last devlog I said that I want to detect deleted and removed records. I tried that, but it is easier to say then to implement.
Previews I have a really cool new feature (actually it is really old, the first version was already working on the 26. 6. (two months ago), but I kinda forgot to write about it): Previews The problem is pretty simple: Imagine someone is adding a new record like super-cool-site.hackclub.com . The record is not merged yet, so the DNS record does not exist. Because of that you normally can’t just open the domain in your browser to check if the site is working. So how do I solve this? Well, to understand this you need to understand how the hostname actually works. When you open a site in your browser like hackclub.com , it resolves to an IP address, in this case 216.150.1.1 (owned by Vercel). But on Vercel many sites are hosted on the same IP, so how does Vercel know which site to serve. The Host Header The Host Header is a HTTP header which is automatically added by the browser and contains the original hostname that was requested in this case hackclub.com So the server can look at this header and then serve the correct page. With HTTPS it is a little bit more complicated, because the hostname is needed before the HTTP request even exists. This is where SNI comes in. I did some tricky and hacky stuff to make it work. How the preview works When a new proposal is detected, the Slack message now has a link next to the name of the proposal: https://dns-tracker.fantamomo.com/preview/<host> When the link is opened, my server looks in the database for the target IP or CNAME. Then it makes a request to the target, but instead of using the target hostname as the Host header, it uses the hostname from the proposal. So even tho super-cool-site.hackclub.com does not exist in DNS yet, the upstream server gets a request which looks like it came for super-cool-site.hackclub.com . Nearly all headers and the full body are passed through to the upstream server. When the response comes back, I check what it is. If it is a redirect and it targets the upstream server, I rewrite it so that it goes through the preview server. If it is anything besides HTML, I just pass it through. But if it is HTML, I parse the HTML and do two things: First I rewrite all links, relative or absolute, so that they point to the preview server instead of the real domain. I also inject the /preview/<host> path so my server knows what it is supposed to preview. Second I inject a small JS script which overrides the fetch function. This is needed because otherwise the website could load correctly, but JavaScript could still make requests directly to the real domain (which does not exist). The script is here if you are interested: proxied_fetch.js There is one problem While this allows the client to basically pretend that the DNS record already exists, it doesn’t work with every hosting provider. The problem is that the hosting provider itself may expect the domain to be configured before it serves the website. My server can make the requests like if the DNS record exists, but I can’t make the hosting provider believe that the domain really exists. More problems Another problem I have is that the program uses to much RAM, so much that it gets all the time killed by the Out-of-Memory-Killer. So I am going to investigate what exactly takes so much RAM. If I can’t find out or it actually needs that much, then I am going to request more RAM for my nest server. So until then, it is possible that the server gets killed, or change detection gets delayed. If you really need it, I recommend you to just wait 1-2 days until I fixed that, or ping me in Slack so that I can restart the server.
Since the last devlog, I have made some changes: Hosting Emojis, Memory improvements, better Proxy. And I am currently working on Site-Checker . Hosting Emojis When the target of a record matches the following hosting providers an emoji is displayed next to it in brackets: Orchard 🅰️ Coolify A 🅱️ Coolify B Vercel GitHub Pages Netlify Nest Cloudflare Pages This is done with regexes (see them here ) Memory improvement In my last devlog, I wrote that the program is always killed by the OOM-Killer because it uses too much RAM, that is now fixed. The problem was that for each commit I cached all records that exists at that commit, which was not only complete waste of resources, but also completely unnecessary because I didn’t use the cache afterwards. better Proxy There were also some improvements for the Proxy, such as blocking Permanent Redirects for unsafe Location headers and caching the HTTPS state for a site. Site Checker That is my new big feature for this project. It is going to check all the sites in the dns zones. And if it finds a problem it is going to send it to a special channel and write it in a slack list (see the attached image). The checker will check for problem in the DNS or server deployment. I already working on it. See the feature/site-chechker branch
I worked on the Site Checker System, and it is now ready enough. The Programm checks every site in the hackclub/dns repo. I makes a simple GET Request to it. I watch the request and wait for it to fail, than I check what exactly went wrong. Or if it was successful if read the response and check if it is maybe the site of a hosting provider which tells that the deployment could not be found ( example ). I also want to do this with other hosting providers like Orchard, the problem is Orchard does not give me enough information to be sure that it is orchard and not the deployment. When I figured that a site has a problem (or not) I do three things: I write it in the database (or delete it) I create/update/delete the row in the slack list ( view it in slack ) I write a message to the #dns-alerts channel The messages I write to #dns-alerts contains: the type of the message (new problem, updated problem or problem resolved) the link to the site the problem type (and I am really proud on this one, because it is colored and has the same style like the links or list items, see the screenshot, or join the channel , this is done vie the slack tag block ) The link to the list record unless it was resolved (because than the record does no longer exist)...
|
1793390170.1994598
|
1793994970.1994598
|
|
18435
|
HyprTools <\> by @THEbluefirestudios | Stard HyprTools <\> by @THEbluefirestudios | Stardance...
|
THEbluefirestudios
|
1
|
31.0
|
457
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T11:38:09Z", "hours": 31.0, "multiplier": 14.59, "payout": 457, "blessing": "neutral", "text": "WHAT DID I MAKE? I made HyprTools, an open source suite of tools made for the average Windows PC user, so they can get more done, in less time (Supports only windows 10/11) It contains a bunch of tools, including: One-click “Fix my PC Button” [SFC & DISM] PC Cache cleanser Wi-Fi Cache cleanser One-click “Update all apps and drivers” button Refresh Display Drivers PC stress test Startup app recommendations GUI for building and running terminal commands Folder organiser File converter Fast image editor Spotlight-search-style quick access bar Voice typing helper Image to text [OCR] Auto Typer Fast anywhere-on-screen color picker Web Apps Launcher Auto Clicker Image to ASCII art Webcam feed to ASCII art (you can use this in google meet, zoom, and while streaming!) Fake Windows update and error screen Each of them assists the user in some way WHAT WAS CHALLENGING? Well, a lot of stuff, firstly this app is made in tkinter, which is torture in itself but to make it look good, I needed ICONS, but that is so hard because then you need to download the icons, use Tk.Image and yk, actually place the icons in the final zip, which takes unnecessary space, eventually, I used EMOJIS TO ACCOMPLISH THIS, with the trade-off that now my code looks straight out of GPT-3 Also making the exes with pyinstaller is a hassle, you always forget smth small and have to change it all again. WHAT AM I PROUD OF? The thing I’m most proud of is HyprSearch. Its a spotlight seasrch like app and it is very impressive, I love how managed to handle the searching better than Windows search , because it dosen’t prioritise web search, and is really great when you need to locate something in a pinch. I spent a literal day in school, deciding how the fallback chain for a search string would be (I got punished for not paying attention in class, but WORTH IT). It is the largest tool outside of the launcher, and for good reason!, Also I think I did a good job with the GUI on this one. WHAT PREREQUISITES DO PEOPLE NEED TO KNOW BEFORE TESTING? Well, this suite is made for average windows users, who aren’t tech savvy, so almost all dependencies are bundled in the .zip file in releases. The only one you need to have is VLC Media Player, which most people have, and is only for the fake update screen. Thanks for reviewing my project, I spent a lot of thime on this, and i hope you like it! baiiiiiiiiiiiiiiiii", "repo": "https://github.com/THEbluefirestudios/hyprtools", "demo": "https://github.com/THEbluefirestudios/hyprtools/releases"}]...
|
[{"post_id": 64155, "ts": "202 [{"post_id": 64155, "ts": "2026-09-08T11:21:15Z", "hours": 1.0697, "text": "AAAAND ITS DONE the github is ready, I ahve committed all changes, you can download the releases, bugs fixed all done! Now i press ship! Hope it goes well"}, {"post_id": 62197, "ts": "2026-09-05T13:45:50Z", "hours": 0.8464, "text": "I just added a warning saying that you need vlc to use some tools. I need to add a log system. [image unrelated]"}, {"post_id": 62069, "ts": "2026-09-05T09:38:27Z", "hours": 5.2597, "text": "OH MY GOD I JUST SPENT 4 HOURS ON A LAUNCHER APP WTFFF"}, {"post_id": 56553, "ts": "2026-08-28T11:05:15Z", "hours": 0.9831, "text": "Ok I kinda feel ashamed yeah but…. I used AI In my defense it was for a bulk, tedious task - converting all tool.py files to .exes, and then because pyinstaller hates me, delete them and redo it with slightly diff settings for like an hour, so I installed opencode and made the AI go through the suffering, not me, But GLM did a good job with only like 3 prompts so I don,t care, but all works now! Now the only thing left is the main app that handles all tools, and like gives user easy toggle to turn on/turn off/ use all these tools baiiiiiiiiiiiiiii (avengers assemble! ahh screenshot)"}, {"post_id": 55449, "ts": "2026-08-27T09:17:22Z", "hours": 0.8467, "text": "Ok so I made the icons for Hyprtools and saved them, also for the tools that lived in the system tray, I replaced the temp icons with the actual thing, taking some help from my newly acquired github copilot for student! Also uhh, I forgot to down the icons as transparent images so i had to do that later. Lapse recording This is one of the icons, watch the timelapse for the full catalog!"}, {"post_id": 49625, "ts": "2026-08-18T14:46:20Z", "hours": 1.4628, "text": "YEAHH After quite the break, 1 hour, and 24 minutes, HyprOCR is ready! It just reads text from images (uses WindowsOCR engine in the background). There is not really anything special about it so well… baiiiiiiiiiii (image kinda unrelated)"}, {"post_id": 44538, "ts": "2026-08-10T11:26:29Z", "hours": 0.9542, "text": "Okie Hyprsearch is done! It can: Open apps and websites only with name Run commands Solve math Install apps Search for files Search engine query Wikipedia summary bangs for quick results In a very MacOS-like package! I have also started the startup time booster, which will list out all apps in your startup apps that you may or may not need and take action accordingly baiiiiiiiii"}, {"post_id": 43326, "ts": "2026-08-08T15:02:53Z", "hours": 1.1003, "text": "So I have started building the frontend for HyprSearch This is definitely the most largest hyprtool, as it needs the extra code for the titlebarless appearance, pystray integration, spawn on keyboard shortcut, settings, displaying of results, and the ROUNDED CORNERS (dont get me started, basically u need to chroma key out a specific color that is present on the edges of the screen Well, features: You can, via this tool, open websites with only name, search using search engine, fetch wiki summary, install apps, open apps, find files, tell the time, solve math, run commands from this little bar Each search can show multiple results in order of relevance, max five results, for example, searching “Minecraft” will pull up Open app: Minecraft, then open folder “.minecraft”, then open website “ minecraft.net “ then engine search “ minecraft “ Some basic keyboard shortcuts: Alt + Q for spawning the search bar, Esc for closing the search bar, Enter for well, yk (idk how to describe it), like entering the query? (also it automatically opens the top result), and Ctrl + <1 - 5 num row keys> for opening one of the results. It lives in ur system tray! (not a lot to say here) As of writing this devlog, I am just testing stuff, like UI jank, and stuff, ik the border is thick, I am working on it PS: IMPORTANT: im fucked. u see, i am using a python lib called AppOpener for opening apps, but it cannot detect UWP apps or apps in external drives, and I use a lot of UWP apps (yk, like minecraft) and apps on external drives, so I have to remake the entire app-opening part (also i am a responsible dev and i think abt other people’s setup while coding)"}, {"post_id": 39987, "ts": "2026-08-03T10:33:17Z", "hours": 2.8053, "text": "After 2 hours, and 44 minutes, HyprSearch’s backend logic is READYYYYYY!!! This did NOT need to take this less time, but I will briefly go over what it can do: Solve mathematical expressions Run terminal commands Open apps and websites by just their name (not even a URL domain like .com is required!) Install from winget (bang only) Tell the current time (bang only) Perform a file search Fetch a Wikipedia summary (largely bang only) Search on a search engine of your choice Then, there are !bangs - short keywords to put before your query to do a specific thing and a specific thing only: Current list of bangs include: bangs = [ ' !open ' , ' !app ' , ' !web ' , ' !websearch ' , ' !file ' , ' !wiki ' , ' !time ' , ' !install ' , ' !math ' , ' !cmd ' , ] This is kinda a massive shortcut library, disguised as a search bar! baiiiiiiiiiiiiii"}, {"post_id": 37546, "ts": "2026-07-30T10:59:53Z", "hours": 1.2281, "text": "Bruh, Idk what i have been doing lately, I have been sick lately sooo….. I was unable to code or even talk about my other project at the stardance AMA with Jared Isaacman (yes I was invited) The only thing I’ve really been doing, is aimlessly just make functions for a HyprSearch that I decided to revive, so far features are: File search App search Web search + open URL Quick install apps (uses winget ) The current time for some reason Math solver Run command !bangs as a cooler way to search, does the above functions but quicker a single covalent bond (inside joke) btw this is a spotlight search clone baiiiiiii"}, {"post_id": 34524, "ts": "2026-07-25T09:50:15Z", "hours": 1.3994, "text": "Did a BIG one today This is HyprPhotos, a basic, yet fast photo editor, crop images by just clicking on 2 points, rotate, sharpen, upscale, downscale and do so much more in a very short timespan! It just uses PIL s built in functions really, so it wasn’t hard to make the functioning for, and ik the UI looks bad ok baiiiiii"}, {"post_id": 32920, "ts": "2026-07-22T11:55:47Z", "hours": 0.5128, "text": "HyprPicker is done! Its yet again, an I had built before, just had to do some improvements like giving it system tray functionality via pystray , and giving it toast messages and a nice hovering tooltip ( the screenshot ) so that it dosent just give no feedback that it is working. If you are wondering how it works, I just take a screenshot of the full screen, make a tkinter fullscreen window that forces focus, use mouse coords and PIL to get the color at a particular coord, and the entire actual GUI the user sees is just 2 toasts, one spawned at the mouse previewing color and hex code, and a toast showing that the hex code was copied to clipboard As of now, I’m making basic icons with PIL again, but I will surely replace them! baiiiiiiiiiiiiiii"}, {"post_id": 32280, "ts": "2026-07-21T10:57:57Z", "hours": 0.3931, "text": "Hyprtools - Web apps is complete, alongside voice typing! The HyprVoice was almost done yesterday, I just needed to add a Tkinter GUI. As for web apps, it was a completely finished app I made a while ago, so I just had to rebrand it a little with the courier font and - HyprTools in the titlebar. Thats it for the day! baiiiiiiiiii"}, {"post_id": 31738, "ts": "2026-07-20T11:38:30Z", "hours": 1.3083, "text": "Today i made the backend for the voice typing ‘HyprVoice’ It just uses the python lib speech recognition so it wasnt that bad, but….. I spent SOOOOOOOOOOOO long debugging it because it couldn’t actually recognise….. and then I realised my microphone wire got pulled off. bye. (i feel ashamed) (The image is how I plan to make the GUI.)"}, {"post_id": 30751, "ts": "2026-07-18T16:08:50Z", "hours": 1.5092, "text": "Pretend to type is now TypeGhost! Its a better name tbh, as for its features, you can set a typing speed, and % change for a spelling error, when the ‘ghost’ accidentally presses an adjacent key, hits backspace, and corrects itself. There are 3 modes: Boilerplate : For repetitive paragraphs, or statements Code : For code snippets, it ‘thinks’ for a while after opening brackets or hitting enter. It also strips off tab-spaces as IDEs usually autoindent. Essay : For well… essays and large paras of English text, pauses after full stop, excalamation mark, question mark to ‘think’ and also after paragraphs (newlines) baiii for today!"}, {"post_id": 30055, "ts": "2026-07-17T10:29:08Z", "hours": 0.7131, "text": "YESS, vry usefule Today I made the Fileconverter, simple enough, as of now, it supports these filetypes cat_exts = { #cats such a cute shortform for 'category' ^owo^ ' image ' : [ ' jpg ' , ' jpeg ' , ' png ' , ' webp ' , ' bmp ' , ' gif ' , ' ico ' , ' tiff ' ], ' audio ' : [ ' mp3 ' , ' wav ' , ' flac ' , ' ogg ' , ' aac ' , ' m4a ' , ' wma ' ], ' video ' : [ ' mp4 ' , ' mkv ' , ' webm ' , ' avi ' , ' mov ' , ' flv ' , ' wmv ' ],} …and it just works, what can I say? baiiiiii"}, {"post_id": 29422, "ts": "2026-07-16T11:15:32Z", "hours": 0.6317, "text": "Its time i work on this again: Today I just spent some time making the terminal command generator, as of now, it supports 'shutdown', 'echo', 'cd', 'ping', 'mkdir', 'del', 'copy', 'ipconfig', 'dir', 'cls', 'tasklist', 'taskkill', 'netstat', 'systeminfo', 'whoami', 'tree', 'xcopy', 'timeout', 'start', 'attrib', commands, I should add more but this is it as of now! d=====( ̄▽ ̄*)b"}, {"post_id": 24770, "ts": "2026-07-08T15:50:11Z", "hours": 0.6406, "text": "Finally I started working on this again, I am currently working on other features like the Game prioritize, and made ASCII camera more customised and performant! Not a lot of coding as I distributed my time between Candela Shaders and Hyprtools (image unrelated)"}, {"post_id": 22598, "ts": "2026-07-05T04:12:41Z", "hours": 1.1097, "text": "So I am now working on the Pretend to Type autotyper (it needs a better name ik) and you don’t konow how much it escalated, just for some pretend typing, i made functions for calculating distance between keys on a keyboard, a function to do spelling mistakes/fat fingering on purpose, it detects the current window to strip chars like \\t if the curent window is an IDE, AND I decided to put a hard deadline of the 31st of July. I’m so cooked. Also due to copyright, bureaucracy, my incompetence in writing production-ready code, and my refusal to use AI, the features: Desktop Pet, HyprSearch, and ffmpeg GUI will not come in HyprTools. I’m sorry :((( (image unrelated)"}, {"post_id": 21419, "ts": "2026-07-03T11:01:29Z", "hours": 0.7481, "text": "Aaandd. I’m done with the ASCII Camera! Its really jank - you need to open the app, click start, the set the app as a window capture source in OBS, then turn on virtual camera, and then can you use the ASCII camera effect in your desired use case, its also fully local so very laggy, but this is the best I can do as pyvirtualcam refuses to work on my PC"}, {"post_id": 20831, "ts": "2026-07-02T15:15:41Z", "hours": 1.5925, "text": "I added the image to ASCII feature (sample below) and its really nice! Consequentially I am also working on the ASCII camera feature but thats going rough….. Hope I dont die from caffiene overdose…. and now I shall continue to work on it."}, {"post_id": 11885, "ts": "2026-06-19T11:26:34Z", "hours": 0.9511, "text": "I added the fake update and actually autosave for ms office! thats it… byeee…. (image unrelated)"}, {"post_id": 11189, "ts": "2026-06-18T09:37:53Z", "hours": 0.6556, "text": "As of now I have made the fake BSOD, VERY VERY CONVINCING. it has a counter that changes the percent text and it automatically locks your pc the moment it finishes, making it look like your pc just restarted. I am now working on the fake update screen"}, {"post_id": 10551, "ts": "2026-06-17T10:13:03Z", "hours": 0.5925, "text": "I shifted the architecture a little bit: tools that require to be GUIless and run in the background are now seperate .pyw files, so I have made edits to the wraparound feature and made it toggle on shortcut Ctrl (right) + Insert . I also added the fake error screen and it look really convincing! Other features i added include: update all apps, autoclicker, and the PC stress test (some of these were done before the previous devlog but I forgot to mention that). Sadly, my efforts on the Enable EU features and Reset PC are in vail so they may not be added."}, {"post_id": 9994, "ts": "2026-06-16T15:10:10Z", "hours": 0.7431, "text": "These are the features i have decided: Repair & Cleanup Fix my PC ⟵ done Reinstall Windows ⟵ use systemreset.exe or shutdown /r /o into WinRE Clear Cache & Temp Files Clean Registry Keys ⟵ scour Win11Debloat GitHub for safe list + reg files !! Memory Manager !! ⟵ use psutil Deep Uninstall !! Performance & Optimization Update Drivers & Apps ⟵ winget upgrade –all Startup Time Booster ⟵ winreg on Run keys + schtasks Gaming Mode !! ⟵ psutil process list matched against hardcoded game names, psutil.Process.nice() Refresh Display Drivers ⟵ done Stress Test (WinSat) ⟵ winsat subprocess call WiFi Reset ⟵ done Windows Customization Windows Debloat !! ⟵ Win11Debloat GitHub, ship their .reg files as toggles with undo pairs Remove All Windows AI Features ⟵ Win11Debloat GitHub, same .reg toggle approach Actually Autosave (Office) !! ⟵ interval mode: pyautogui.hotkey(‘ctrl’,‘s’) on timer, aggressive mode: watch ~$ temp file mtime with os.path.getmtime Find Similar Files !! ⟵ difflib.SequenceMatcher on filenames, group by similarity score File Management Downloads & Desktop Organizer !! ⟵ os/shutil + extension-to-folder mapping Bulk File Rename ⟵ regex pattern based os.rename loop Local File Converter ⟵ FFmpeg subprocess wrapper FFmpeg GUI ⟵ dropdown UI → FFmpeg subprocess HyprImage ⟵ Pillow wrapper with action picker Productivity Tools Voice Typing ⟵ speech_recognition + pyautogui to paste output OCR: Image to Text ⟵ pytesseract or easyocr Pretend to Type ⟵ pyautogui.typewrite() with interval, probably fold into Macro Creator Macro Creator ⟵ record: keyboard lib + pyautogui polling, playback: screen color check before each click HyprSearch !! ⟵ global hotkey via keyboard lib, fuzzy file search via os.walk + difflib Terminal Command Generator ⟵ dropdown UI → command string builder Colorpicker ⟵ pyautogui.pixel() grab + magnifier overlay Extras & Fun Hyprclicker ⟵ done (existing autoclicker) Mouse Wraparound ⟵ done Image to ASCII ⟵ same approach as Bad Apple project Camera to ASCII (Virtual Cam) ⟵ OpenCV capture → ASCII render → OBS virtual cam, hardest feature overall Desktop Pet !! ⟵ transparent tkinter window + sprite animation, WS_EX_LAYERED for click-through Fake Update Screen ⟵ fullscreen tkinter canvas + fake progress bar Fake Error Screen ⟵ same, BSOD-style overlay (raw list organised by Anything AI) I have finished the simpler features"}, {"post_id": 8654, "ts": "2026-06-14T11:37:44Z", "hours": 1.2525, "text": "Ok i have added the features: mouse wraparound, open Chris Titus Tools, Fix PC button and Reset WIFI button, will add more"}]...
|
Title: HyprTools <\> by @THEbluefirestudios Title: HyprTools <\> by @THEbluefirestudios | Stardance
Devlogs:
Ok i have added the features: mouse wraparound, open Chris Titus Tools, Fix PC button and Reset WIFI button, will add more
These are the features i have decided: Repair & Cleanup Fix my PC ⟵ done Reinstall Windows ⟵ use systemreset.exe or shutdown /r /o into WinRE Clear Cache & Temp Files Clean Registry Keys ⟵ scour Win11Debloat GitHub for safe list + reg files !! Memory Manager !! ⟵ use psutil Deep Uninstall !! Performance & Optimization Update Drivers & Apps ⟵ winget upgrade –all Startup Time Booster ⟵ winreg on Run keys + schtasks Gaming Mode !! ⟵ psutil process list matched against hardcoded game names, psutil.Process.nice() Refresh Display Drivers ⟵ done Stress Test (WinSat) ⟵ winsat subprocess call WiFi Reset ⟵ done Windows Customization Windows Debloat !! ⟵ Win11Debloat GitHub, ship their .reg files as toggles with undo pairs Remove All Windows AI Features ⟵ Win11Debloat GitHub, same .reg toggle approach Actually Autosave (Office) !! ⟵ interval mode: pyautogui.hotkey(‘ctrl’,‘s’) on timer, aggressive mode: watch ~$ temp file mtime with os.path.getmtime Find Similar Files !! ⟵ difflib.SequenceMatcher on filenames, group by similarity score File Management Downloads & Desktop Organizer !! ⟵ os/shutil + extension-to-folder mapping Bulk File Rename ⟵ regex pattern based os.rename loop Local File Converter ⟵ FFmpeg subprocess wrapper FFmpeg GUI ⟵ dropdown UI → FFmpeg subprocess HyprImage ⟵ Pillow wrapper with action picker Productivity Tools Voice Typing ⟵ speech_recognition + pyautogui to paste output OCR: Image to Text ⟵ pytesseract or easyocr Pretend to Type ⟵ pyautogui.typewrite() with interval, probably fold into Macro Creator Macro Creator ⟵ record: keyboard lib + pyautogui polling, playback: screen color check before each click HyprSearch !! ⟵ global hotkey via keyboard lib, fuzzy file search via os.walk + difflib Terminal Command Generator ⟵ dropdown UI → command string builder Colorpicker ⟵ pyautogui.pixel() grab + magnifier overlay Extras & Fun Hyprclicker ⟵ done (existing autoclicker) Mouse Wraparound ⟵ done Image to ASCII ⟵ same approach as Bad Apple project Camera to ASCII (Virtual Cam) ⟵ OpenCV capture → ASCII render → OBS virtual cam, hardest feature overall Desktop Pet !! ⟵ transparent tkinter window + sprite animation, WS_EX_LAYERED for click-through Fake Update Screen ⟵ fullscreen tkinter canvas + fake progress bar Fake Error Screen ⟵ same, BSOD-style overlay (raw list organised by Anything AI) I have finished the simpler features
I shifted the architecture a little bit: tools that require to be GUIless and run in the background are now seperate .pyw files, so I have made edits to the wraparound feature and made it toggle on shortcut Ctrl (right) + Insert . I also added the fake error screen and it look really convincing! Other features i added include: update all apps, autoclicker, and the PC stress test (some of these were done before the previous devlog but I forgot to mention that). Sadly, my efforts on the Enable EU features and Reset PC are in vail so they may not be added.
As of now I have made the fake BSOD, VERY VERY CONVINCING. it has a counter that changes the percent text and it automatically locks your pc the moment it finishes, making it look like your pc just restarted. I am now working on the fake update screen
I added the fake update and actually autosave for ms office! thats it… byeee…. (image unrelated)
I added the image to ASCII feature (sample below) and its really nice! Consequentially I am also working on the ASCII camera feature but thats going rough….. Hope I dont die from caffiene overdose…. and now I shall continue to work on it.
Aaandd. I’m done with the ASCII Camera! Its really jank - you need to open the app, click start, the set the app as a window capture source in OBS, then turn on virtual camera, and then can you use the ASCII camera effect in your desired use case, its also fully local so very laggy, but this is the best I can do as pyvirtualcam refuses to work on my PC
So I am now working on the Pretend to Type autotyper (it needs a better name ik) and you don’t konow how much it escalated, just for some pretend typing, i made functions for calculating distance between keys on a keyboard, a function to do spelling mistakes/fat fingering on purpose, it detects the current window to strip chars like \t if the curent window is an IDE, AND I decided to put a hard deadline of the 31st of July. I’m so cooked. Also due to copyright, bureaucracy, my incompetence in writing production-ready code, and my refusal to use AI, the features: Desktop Pet, HyprSearch, and ffmpeg GUI will not come in HyprTools. I’m sorry :((( (image unrelated)
Finally I started working on this again, I am currently working on other features like the Game prioritize, and made ASCII camera more customised and performant! Not a lot of coding as I distributed my time between Candela Shaders and Hyprtools (image unrelated)
Its time i work on this again: Today I just spent some time making the terminal command generator, as of now, it supports 'shutdown', 'echo', 'cd', 'ping', 'mkdir', 'del', 'copy', 'ipconfig', 'dir', 'cls', 'tasklist', 'taskkill', 'netstat', 'systeminfo', 'whoami', 'tree', 'xcopy', 'timeout', 'start', 'attrib', commands, I should add more but this is it as of now! d=====( ̄▽ ̄*)b
YESS, vry usefule Today I made the Fileconverter, simple enough, as of now, it supports these filetypes cat_exts = { #cats such a cute shortform for 'category' ^owo^ ' image ' : [ ' jpg ' , ' jpeg ' , ' png ' , ' webp ' , ' bmp ' , ' gif ' , ' ico ' , ' tiff ' ], ' audio ' : [ ' mp3 ' , ' wav ' , ' flac ' , ' ogg ' , ' aac ' , ' m4a ' , ' wma ' ], ' video ' : [ ' mp4 ' , ' mkv ' , ' webm ' , ' avi ' , ' mov ' , ' flv ' , ' wmv ' ],} …and it just works, what can I say? baiiiiii
Pretend to type is now TypeGhost! Its a better name tbh, as for its features, you can set a typing speed, and % change for a spelling error, when the ‘ghost’ accidentally presses an adjacent key, hits backspace, and corrects itself. There are 3 modes: Boilerplate : For repetitive paragraphs, or statements Code : For code snippets, it ‘thinks’ for a while after opening brackets or hitting enter. It also strips off tab-spaces as IDEs usually autoindent. Essay : For well… essays and large paras of English text, pauses after full stop, excalamation mark, question mark to ‘think’ and also after paragraphs (newlines) baiii for today!
Today i made the backend for the voice typing ‘HyprVoice’ It just uses the python lib speech recognition so it wasnt that bad, but….. I spent SOOOOOOOOOOOO long debugging it because it couldn’t actually recognise….. and then I realised my microphone wire got pulled off. bye. (i feel ashamed) (The image is how I plan to make the GUI.)
Hyprtools - Web apps is complete, alongside voice typing! The HyprVoice was almost done yesterday, I just needed to add a Tkinter GUI. As for web apps, it was a completely finished app I made a while ago, so I just had to rebrand it a little with the courier font and - HyprTools in the titlebar. Thats it for the day! baiiiiiiiiii
HyprPicker is done! Its yet again, an I had built before, just had to do some improvements like giving it system tray functionality via pystray , and giving it toast messages and a nice hovering tooltip ( the screenshot ) so that it dosent just give no feedback that it is working. If you are wondering how it works, I just take a screenshot of the full screen, make a tkinter fullscreen window that forces focus, use mouse coords and PIL to get the color at a particular coord, and the entire actual GUI the user sees is just 2 toasts, one spawned at the mouse previewing color and hex code, and a toast showing that the hex code was copied to clipboard As of now, I’m making basic icons with PIL again, but I will surely replace them! baiiiiiiiiiiiiiii
Did a BIG one today This is HyprPhotos, a basic, yet fast photo editor, crop images by just clicking on 2 points, rotate, sharpen, upscale, downscale and do so much more in a very short timespan! It just uses PIL s built in functions really, so it wasn’t hard to make the functioning for, and ik the UI looks bad ok baiiiiii
Bruh, Idk what i have been doing lately, I have been sick lately sooo….. I was unable to code or even talk about my other project at the stardance AMA with Jared Isaacman (yes I was invited) The only thing I’ve really been doing, is aimlessly just make functions for a HyprSearch that I decided to revive, so far features are: File search App search Web search + open URL Quick install apps (uses winget ) The current time for some reason Math solver Run command !bangs as a cooler way to search, does the above functions but quicker a single covalent bond (inside joke) btw this is a spotlight search clone baiiiiiii
After 2 hours, and 44 minutes, HyprSearch’s backend logic is READYYYYYY!!! This did NOT need to take this less time, but I will briefly go over what it can do: Solve mathematical expressions Run terminal commands Open apps and websites by just their name (not even a URL domain like .com is required!) Install from winget (bang only) Tell the current time (bang only) Perform a file search Fetch a Wikipedia summary (largely bang only) Search on a search engine of your choice Then, there are !bangs - short keywords to put before your query to do a specific thing and a specific thing only: Current list of bangs include: bangs = [ ' !open ' , ' !app ' , ' !web ' , ' !websearch ' , ' !file ' , ' !wiki ' , ' !time ' , ' !install ' , ' !math ' , ' !cmd ' , ] This is kinda a massive shortcut library, disguised as a search bar! baiiiiiiiiiiiiii
So I have started building the frontend for HyprSearch This is definitely the most largest hyprtool, as it needs the extra code for the titlebarless appearance, pystray integration, spawn on keyboard shortcut, settings, displaying of results, and the ROUNDED CORNERS (dont get me started, basically u need to chroma key out a specific color that is present on the edges of the screen Well, features: You can, via this tool, open websites with only name, search using search engine, fetch wiki summary, install apps, open apps, find files, tell the time, solve math, run commands from this little bar Each search can show multiple results in order of relevance, max five results, for example, searching “Minecraft” will pull up Open app: Minecraft, then open folder “.minecraft”, then open website “ minecraft.net “ then engine search “ minecraft “ Some basic keyboard shortcuts: Alt + Q for spawning the search bar, Esc for closing the search bar, Enter for well, yk (idk how to describe it), like entering the query? (also it automatically opens the top result), and Ctrl + <1 - 5 num row keys> for opening one of the results. It lives in ur system tray! (not a lot to say here) As of writing this devlog, I am just testing stuff, like UI jank, and stuff, ik the border is thick, I am working on it PS: IMPORTANT: im fucked. u see, i am using a python lib called AppOpener for opening apps, but it cannot detect UWP apps or apps in external drives, and I use a lot of UWP apps (yk, like minecraft) and apps on external drives, so I have to remake the entire app-opening part (also i am a responsible dev and i think abt other people’s setup while coding)
Okie Hyprsearch is done! It can: Open apps and websites only with name Run commands Solve math Install apps Search for files Search engine query Wikipedia summary bangs for quick results In a very MacOS-like package! I have also started the startup time booster, which will list out all apps in your startup apps that you may or may not need and take action accordingly baiiiiiiiii
YEAHH After quite the break, 1 hour, and 24 minutes, HyprOCR is ready! It just reads text from images (uses WindowsOCR engine in the background). There is not really anything special about it so well… baiiiiiiiiiii (image kinda unrelated)
Ok so I made the icons for Hyprtools and saved them, also for the tools that lived in the system tray, I replaced the temp icons with the actual thing, taking some help from my newly acquired github copilot for student! Also uhh, I forgot to down the icons as transparent images so i had to do that later. Lapse recording This is one of the icons, watch the timelapse for the full catalog!
Ok I kinda feel ashamed yeah but…. I used AI In my defense it was for a bulk, tedious task - converting all tool.py files to .exes, and then because pyinstaller hates me, delete them and redo it with slightly diff settings for like an hour, so I installed opencode and made the AI go through the suffering, not me, But GLM did a good job with only like 3 prompts so I don,t care, but all works now! Now the only thing left is the main app that handles all tools, and like gives user easy toggle to turn on/turn off/ use all these tools baiiiiiiiiiiiiiii (avengers assemble! ahh screenshot)
OH MY GOD I JUST SPENT 4 HOURS ON A LAUNCHER APP WTFFF
I just added a warning saying that you need vlc to use some tools. I need to add a log system. [image unrelated]
AAAAND ITS DONE the github is ready, I ahve committed all changes, you can download the releases, bugs fixed all done! Now i press ship! Hope it goes well
Ships:
WHAT DID I MAKE? I made HyprTools, an open source suite of tools made for the average Windows PC user, so they can get more done, in less time (Supports only windows 10/11) It contains a bunch of tools, including: One-click “Fix my PC Button” [SFC & DISM] PC Cache cleanser Wi-Fi Cache cleanser One-click “Update all apps and drivers” button Refresh Display Drivers PC stress test Startup app recommendations GUI for building and running terminal commands Folder organiser File converter Fast image editor Spotlight-search-style quick access bar Voice typing helper Image to text [OCR] Auto Typer Fast anywhere-on-screen color picker Web Apps Launcher Auto Clicker Image to ASCII art Webcam feed to ASCII art (you can use this in google meet, zoom, and while streaming!) Fake Windows update and error screen Each of them assists the user in some way WHAT WAS CHALLENGING? Well, a lot of stuff, firstly this app is made in tkinter, which is torture in itself but to make it look good, I needed ICONS, but that is so hard because then you need to download the icons, use Tk.Image and yk, actually place the icons in the final zip, which takes unnecessary space, eventually, I used EMOJIS TO ACCOMPLISH THIS, with the trade-off that now my code looks straight out of GPT-3 Also making the exes with pyinstaller is a hassle, you always forget smth small and have to change it all again. WHAT AM I PROUD OF? The thing I’m most proud of is HyprSearch. Its a spotlight seasrch like app and it is very impressive, I love how managed to handle the searching better than Windows search , because it dosen’t prioritise web search, and is really great when you need to locate something in a pinch. I spent a literal day in school, deciding how the fallback chain for a search string would be (I got punished for not paying attention in class, but WORTH IT). It is the largest tool outside of the launcher, and for good reason!, Also I think I did a good job with the GUI on this one. WHAT PREREQUISITES DO PEOPLE NEED TO KNOW BEFORE TESTING? Well, this suite is made for average windows users, who aren’t tech savvy, so almost all dependencies are bundled in the .zip file in releases. The only one you need to have is VLC Media Player, which most people have, and is only for the fake update screen. Thanks for reviewing my project, I spent a lot of thime on this, and i hope you like it! baiiiiiiiiiiiiiiiii...
|
1794084824.0945034
|
1794171224.0945034
|
|
59690
|
Prime OS by @Rafey | Stardance
|
Rafey
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T11:15:55Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a webOS named “Prime OS”.It was my fist time building an OS by myself, used AI to help me do critical thinking and solve a problem while coding whenever i faced any.", "repo": "https://github.com/Rafey47/prime-os", "demo": "https://rafey47.github.io/prime-os/?utm_source=chatgpt.com"}]...
|
[{"post_id": 64152, "ts": "202 [{"post_id": 64152, "ts": "2026-09-08T11:12:00Z", "hours": 0.2667, "text": "Making Prime OS Interactive,I continued working on Prime OS and added interaction to the desktop.The Notes, Files, and Settings windows can now be smoothly dragged around the screen, and each window has its own close button.A simple clock to the taskbar was also added.The main functionality of the OS is now working, so I’m moving on to final testing and cleanup."}, {"post_id": 64063, "ts": "2026-09-08T06:18:54Z", "hours": 0.2678, "text": "Started building Prime OS, a minimalistic web-based operating system.So far, I have created the basic desktop layout and added three windows: Notes, Files, and Settings.Also, set up the project with HTML, CSS, and JavaScript.Next, I’m working on making the windows draggable and finishing the basic functionality."}]...
|
Title: Prime OS by @Rafey | Stardance
Devlogs:
St Title: Prime OS by @Rafey | Stardance
Devlogs:
Started building Prime OS, a minimalistic web-based operating system.So far, I have created the basic desktop layout and added three windows: Notes, Files, and Settings.Also, set up the project with HTML, CSS, and JavaScript.Next, I’m working on making the windows draggable and finishing the basic functionality.
Making Prime OS Interactive,I continued working on Prime OS and added interaction to the desktop.The Notes, Files, and Settings windows can now be smoothly dragged around the screen, and each window has its own close button.A simple clock to the taskbar was also added.The main functionality of the OS is now working, so I’m moving on to final testing and cleanup.
Ships:
I made a webOS named “Prime OS”.It was my fist time building an OS by myself, used AI to help me do critical thinking and solve a problem while coding whenever i faced any....
|
1794041383.1358533
|
1794127783.1358533
|
|
14360
|
My very own WebOS by @747elias | Stardance
|
747elias
|
0
|
3.39
|
0
|
[]
|
[{"post_id": 6415, "ts": "2026 [{"post_id": 6415, "ts": "2026-06-10T19:53:04Z", "hours": 1.0617, "text": "Devlog 3: Draggable Windows -Code Split: Moved JS to script.js to clean up the HTML. -Window Dragging: Added mouse events to smoothly drag the window via a top header. -Open/Close: Used JS to toggle display none and flex using click event listeners. -CSS Classes: Replaced inline styles with reusable classes for easy future apps. Next up: Building my first actual app inside the window!"}, {"post_id": 6193, "ts": "2026-06-10T12:22:00Z", "hours": 1.4497, "text": "I Builded Flexboxes. And I added a Wallpaper and a top bar. It looks amazing! There is even the live time and date in the top bar thanks to javascript."}, {"post_id": 5864, "ts": "2026-06-09T20:17:05Z", "hours": 0.8792, "text": "I build the entry page of my selfmade web os."}]...
|
Title: My very own WebOS by @747elias | Stardance
Title: My very own WebOS by @747elias | Stardance
Devlogs:
I build the entry page of my selfmade web os.
I Builded Flexboxes. And I added a Wallpaper and a top bar. It looks amazing! There is even the live time and date in the top bar thanks to javascript.
Devlog 3: Draggable Windows -Code Split: Moved JS to script.js to clean up the HTML. -Window Dragging: Added mouse events to smoothly drag the window via a top header. -Open/Close: Used JS to toggle display none and flex using click event listeners. -CSS Classes: Replaced inline styles with reusable classes for easy future apps. Next up: Building my first actual app inside the window!...
|
1794023436.2555368
|
1794628236.2555368
|
|
57023
|
OpenMythos by @danilosistu | Stardance
|
danilosistu
|
0
|
0.59
|
0
|
[]
|
[{"post_id": 64149, "ts": "202 [{"post_id": 64149, "ts": "2026-09-08T10:59:02Z", "hours": 0.5947, "text": "modified the readme"}]...
|
Title: OpenMythos by @danilosistu | Stardance
Dev Title: OpenMythos by @danilosistu | Stardance
Devlogs:
modified the readme...
|
1793411606.303591
|
1794016406.303591
|
|
59746
|
the future of travelling by @chestagahlawat06 | St the future of travelling by @chestagahlawat06 | Stardance...
|
chestagahlawat06
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T11:07:06Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Travelling in Future, an interactive future-travel simulator where users choose a year, destination, and mode of transportation, then experience a simulated journey to places like a future city, the Moon, or Mars. After arriving, users can explore different locations, interact with them, scan discoveries, learn whether technologies are realistic, possible, or speculative, and earn XP, making the project feel more like an interactive experience than a normal website. One of the biggest challenges was making the project feel like an interactive future-travel experience instead of just a normal website. I had to figure out how to create the travel animation and progress system, make different destinations and years affect the experience, and build interactive exploration where users could click locations, scan them, discover information, and earn XP. I also had to work through coding errors and make the interface responsive and easy to use. I’m really proud that I turned the idea of Travelling in Future into an actual interactive project rather than just a concept. I especially like that users can choose a year, destination, and transportation, experience the journey, and then explore and discover things after arriving. It taught me how to make a project feel more like an experience than a simple webpage. To test my project, people should open the live Vercel demo, choose a year, destination, and transportation method, start the journey, and then use the interactive locations after arriving to explore, scan discoveries, and earn XP. They should try different years and destinations to see how the experience changes, and they don’t need to install anything because it runs directly in a web browser.", "repo": "https://github.com/chestagahlawat6-maker/travelling-in-future-", "demo": "https://travelling-in-future-m937.vercel.app"}]...
|
[{"post_id": 64148, "ts": "202 [{"post_id": 64148, "ts": "2026-09-08T10:57:33Z", "hours": 3.6917, "text": "hi finnaly completed 1st code after so much hardwork and errors"}]...
|
Title: the future of travelling by @chestagahlawat Title: the future of travelling by @chestagahlawat06 | Stardance
Devlogs:
hi finnaly completed 1st code after so much hardwork and errors
Ships:
I made Travelling in Future, an interactive future-travel simulator where users choose a year, destination, and mode of transportation, then experience a simulated journey to places like a future city, the Moon, or Mars. After arriving, users can explore different locations, interact with them, scan discoveries, learn whether technologies are realistic, possible, or speculative, and earn XP, making the project feel more like an interactive experience than a normal website. One of the biggest challenges was making the project feel like an interactive future-travel experience instead of just a normal website. I had to figure out how to create the travel animation and progress system, make different destinations and years affect the experience, and build interactive exploration where users could click locations, scan them, discover information, and earn XP. I also had to work through coding errors and make the interface responsive and easy to use. I’m really proud that I turned the idea of Travelling in Future into an actual interactive project rather than just a concept. I especially like that users can choose a year, destination, and transportation, experience the journey, and then explore and discover things after arriving. It taught me how to make a project feel more like an experience than a simple webpage. To test my project, people should open the live Vercel demo, choose a year, destination, and transportation method, start the journey, and then use the interactive locations after arriving to explore, scan discoveries, and earn XP. They should try different years and destinations to see how the experience changes, and they don’t need to install anything because it runs directly in a web browser....
|
1794045129.6765444
|
1794131529.6765444
|
|
59735
|
scratch game by @juli13 | Stardance
|
juli13
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T10:52:08Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made my first scratch controls", "repo": "https://github.com/fueralles1233-sys/scratch-game", "demo": "https://scratch.mit.edu/projects/1379053351"}]...
|
[{"post_id": 64144, "ts": "202 [{"post_id": 64144, "ts": "2026-09-08T10:48:39Z", "hours": 0.5797, "text": "my scratch game has controls"}]...
|
Title: scratch game by @juli13 | Stardance
Devlog Title: scratch game by @juli13 | Stardance
Devlogs:
my scratch game has controls
Ships:
i made my first scratch controls...
|
1794045123.57583
|
1794131523.57583
|
|
59428
|
WebOS by @reaue | Stardance
|
reaue
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T10:41:15Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I created a website which works like an OS with openable and closeable windows that can be draggable. There is three apps, the first one is a welcom app which explains the project, the second one is a note app which retains what you have written in the localStorage and then a Rock Paper Scissors app where you play against the computer. What was challenging? The challenging part was the last app because, it’s totally my own idea so I had to search info and fix bugs by myself with google. What are proud of? I’m proud of the render of the translucent window effect, and the global design and features of the OS. I have learned a lot on web development. What should people know so they can test your project. If you want to try this project, it’s online here : https://reaue.github.io/WebOS/ .", "repo": "https://github.com/reaue/WebOS", "demo": "https://reaue.github.io/WebOS/"}]...
|
[{"post_id": 64134, "ts": "202 [{"post_id": 64134, "ts": "2026-09-08T10:29:06Z", "hours": 0.3222, "text": "Devlog 3 - The final one ! I added a README to explain and show all features of my personnal OS. I finished everything to be ready for the ship. Now let’s ship it !"}, {"post_id": 64112, "ts": "2026-09-08T09:45:58Z", "hours": 1.0883, "text": "Devlog 2 - Adding my own App ! I added a “Rock Paper Scissors Shoot” in the OS, you played against the computer (which select his move with Math.random()) and there is also a score."}, {"post_id": 64091, "ts": "2026-09-08T08:30:19Z", "hours": 3.9694, "text": "Devlog 1 - Working on the SpaceOS. I started the WebOS 1 mission to created my own OS. I did it in a space style. I very happy with the design and the actual way to open, drag and close windows. Now let’s start to create my own App."}]...
|
Title: WebOS by @reaue | Stardance
Devlogs:
Devlo Title: WebOS by @reaue | Stardance
Devlogs:
Devlog 1 - Working on the SpaceOS. I started the WebOS 1 mission to created my own OS. I did it in a space style. I very happy with the design and the actual way to open, drag and close windows. Now let’s start to create my own App.
Devlog 2 - Adding my own App ! I added a “Rock Paper Scissors Shoot” in the OS, you played against the computer (which select his move with Math.random()) and there is also a score.
Devlog 3 - The final one ! I added a README to explain and show all features of my personnal OS. I finished everything to be ready for the ship. Now let’s ship it !
Ships:
What did you make? I created a website which works like an OS with openable and closeable windows that can be draggable. There is three apps, the first one is a welcom app which explains the project, the second one is a note app which retains what you have written in the localStorage and then a Rock Paper Scissors app where you play against the computer. What was challenging? The challenging part was the last app because, it’s totally my own idea so I had to search info and fix bugs by myself with google. What are proud of? I’m proud of the render of the translucent window effect, and the global design and features of the OS. I have learned a lot on web development. What should people know so they can test your project. If you want to try this project, it’s online here : https://reaue.github.io/WebOS/ ....
|
1793984001.0893264
|
1794070401.0893264
|
|
18401
|
RelayPad by @ashish-raj-singh | Stardance
|
ashish-raj-singh
|
0
|
7.77
|
0
|
[]
|
[{"post_id": 64133, "ts": "202 [{"post_id": 64133, "ts": "2026-09-08T10:28:13Z", "hours": 6.0669, "text": "Devlog 2 yeah i know its been long, well always wanted to get into hardware looked very easy and interesting in the start until it became impossibe after some time and help from some frinds from Electrical Enginnering departmenet i was just unable to find the 3d shapes for the component like microcontrollers, switches, knobs Current Status i have completed the PCB design, and also mapped som of the 3d shapes i found that my screen is touching the rotatory knob, so i need to edit the pcb again also i have not added the RBG lightning yet, and i am not sure weather i will add or not. there was this copper fillign this (this is my first time with hardware) and i think i need to undo this as i need to change the position of the screen and rotaory knobs also the usb point need to bulge out a little bit ]"}, {"post_id": 19388, "ts": "2026-06-30T18:07:22Z", "hours": 1.7006, "text": "Devlog 1 A Dynamic Macropad I want to make a macropad which will be able to change its nature based on the user activity video Editing -> rotation knob can control timeline and zoom playing media -> knob now controls playback and volumne And user can set custom key functionality based on which Apps are currently user is using and can also set modes for the macropad I have a good coding experience i can easily build the companion app , but writing the firmware and hardware is completely new for me. I followed the stardance documentation and with AI help and designing the schemantics was fairly easy Now i am learnign about PCB designs, and it also looks simpler than i thought My plan for 11 pins 3x4 keyboard [4 pins] Screen [2 pins] Two Rotatory Knobs (no clicks) [4 pins] Backlit RBG Lightning (I don’t know how to do the backlight thing) [1 pin] Japanesse Duplex Matrix I used something called Japanese Duplex Matrix instead of standared row and column design this design takes up only 4 pins for 12 keys, where as the row and col design will take up 8 pins for 12 keys Dont mind the PCB, i have no idea of PCB right now, see you till the next dev log"}]...
|
Title: RelayPad by @ashish-raj-singh | Stardance
Title: RelayPad by @ashish-raj-singh | Stardance
Devlogs:
Devlog 1 A Dynamic Macropad I want to make a macropad which will be able to change its nature based on the user activity video Editing -> rotation knob can control timeline and zoom playing media -> knob now controls playback and volumne And user can set custom key functionality based on which Apps are currently user is using and can also set modes for the macropad I have a good coding experience i can easily build the companion app , but writing the firmware and hardware is completely new for me. I followed the stardance documentation and with AI help and designing the schemantics was fairly easy Now i am learnign about PCB designs, and it also looks simpler than i thought My plan for 11 pins 3x4 keyboard [4 pins] Screen [2 pins] Two Rotatory Knobs (no clicks) [4 pins] Backlit RBG Lightning (I don’t know how to do the backlight thing) [1 pin] Japanesse Duplex Matrix I used something called Japanese Duplex Matrix instead of standared row and column design this design takes up only 4 pins for 12 keys, where as the row and col design will take up 8 pins for 12 keys Dont mind the PCB, i have no idea of PCB right now, see you till the next dev log
Devlog 2 yeah i know its been long, well always wanted to get into hardware looked very easy and interesting in the start until it became impossibe after some time and help from some frinds from Electrical Enginnering departmenet i was just unable to find the 3d shapes for the component like microcontrollers, switches, knobs Current Status i have completed the PCB design, and also mapped som of the 3d shapes i found that my screen is touching the rotatory knob, so i need to edit the pcb again also i have not added the RBG lightning yet, and i am not sure weather i will add or not. there was this copper fillign this (this is my first time with hardware) and i think i need to undo this as i need to change the position of the screen and rotaory knobs also the usb point need to bulge out a little bit ]...
|
1793911824.855881
|
1794516624.855881
|
|
29733
|
SL-LLM-R: Can an AI learn from its own verified mi SL-LLM-R: Can an AI learn from its own verified mistakes? by @Samuelm | Stardance...
|
Samuelm
|
1
|
671.22
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T20:34:33Z", "hours": 381.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Most LLMs can recognize that they made a mistake, but they usually don’t actually learn from it. I’m building SL-LLM-R to explore whether that can be changed. The idea is to let a pretrained model learn from its own verified experience. When something goes wrong, the system saves where the decision came from, tries alternative decisions from the same state and checks what actually changes the outcome. If a possible improvement is supported by enough evidence, it can eventually be turned into a small, controlled update. If it makes things worse, the system must be able to reject it or roll it back. The research mechanism behind this is called Verifier-Grounded Counterfactual Plasticity, or VGCP. What matters to me is that the project does not just produce results that look good. The experiments are designed around reproducibility, fixed evaluation rules, independent verification, held-out tests and preserving failed experiments instead of quietly replacing them. The deterministic foundation is working and verified. The proposal system is implemented and tested, and the latest development benchmark was able to distinguish between different proposal strategies. The confirmatory experiment has now been preregistered and sealed. It has not been run yet. So I am not claiming that SL-LLM-R has solved continual learning or that it can already improve itself. That is exactly what the next experiments are meant to test. I have published the research, architecture, mathematics, experiment history, negative results and current evidence at: research.samuelm.de", "repo": "https://github.com/Samuel-Mencke/SL-LLM-R-Research", "demo": "https://samuelm.de/sl-llm-r"}]...
|
[{"post_id": 64120, "ts": "202 [{"post_id": 64120, "ts": "2026-09-08T09:56:53Z", "hours": 8.5761, "text": "DEVLOG #46 - Some repair scores could not be trusted Every possible repair SL-LLM-R produces should be linked back to the original proposal it came from so the search can be scored correctly. I found cases where that link was ambiguous, which can make the score describe the wrong search. I changed the scoring path so ambiguous pairs are rejected instead of guessed, and the earlier zero-hit result stays zero."}, {"post_id": 63496, "ts": "2026-09-07T11:54:01Z", "hours": 9.4925, "text": "DEVLOG #45 - Fixing one broken link still gave zero hits When SL-LLM-R fails to find a repair that I know should be reachable, I need to know whether the search is bad or the test case is broken. One case had a broken link between the original proposal and the repair I expected the search to find, so I fixed only that link and ran the case again with the same number of attempts. The search still found the target zero times, so that broken link was not the whole problem."}, {"post_id": 62759, "ts": "2026-09-06T08:48:26Z", "hours": 8.4917, "text": "DEVLOG #44 - I can explain 306 misses, but 1,224 still look the same I am trying to understand why SL-LLM-R’s repair search fails to find fixes that should exist. Right now I can explain 306 misses, while another 1,224 look identical in every field I am allowed to compare. Two different explanations for the source-signal problem also match the same 306 cases, so the available data still cannot separate those explanations for the larger group."}, {"post_id": 62552, "ts": "2026-09-06T00:19:11Z", "hours": 27.7922, "text": "DEVLOG #43 - I built one failure where I already knew the cause SL-LLM-R’s repair search was missing many fixes that I expected it to find, but I did not know why. I built one small synthetic failure where the component reading the source signal gets the wrong input, so I can reproduce that miss on purpose. At least one failure now has a known cause, which I can compare with the unexplained failures without assuming they are all the same problem."}, {"post_id": 60093, "ts": "2026-09-02T07:34:28Z", "hours": 21.6367, "text": "DEVLOG #42 - The first real learning run is still blocked The repaired SL-LLM-R comparison produced 1,530 completed results, but I still did not understand the repair-search failures well enough to start changing real model weights. Training therefore stayed off while I investigated why targets were being missed. I would rather delay the first learning update than call an unclear result progress."}, {"post_id": 58382, "ts": "2026-08-30T19:53:06Z", "hours": 17.5958, "text": "DEVLOG #41 - If the model grows, the extra capacity has to help I do not want SL-LLM-R to add parameters just because a larger model sounds better. If the system ever needs more capacity, my current idea is to add a small module in a copy and test whether that addition actually improves the model. If it does not help, the extra module should be deleted just like any other failed update."}, {"post_id": 56969, "ts": "2026-08-29T00:43:17Z", "hours": 0.3206, "text": "DEVLOG #40 - What happens if the model runs out of room? SL-LLM-R is meant to keep learning over time, which creates a long-term problem if a fixed-size model eventually runs out of useful capacity. My current idea is a stable core, fast memory, small learnable parts, and possibly extra specialist modules only when the existing capacity is not enough. The project cannot do that yet, so this is still future research."}, {"post_id": 56958, "ts": "2026-08-29T00:18:16Z", "hours": 0.6817, "text": "DEVLOG #39 - The repair-search failures are finally visible With a completed comparison, I can now inspect why SL-LLM-R’s repair search misses targets. Some misses come from repeated ideas, some repairs need more steps, and some targets are never reached by the current search. Separating those cases is more useful than treating every miss as one generic failure."}, {"post_id": 56943, "ts": "2026-08-28T23:37:01Z", "hours": 6.3122, "text": "DEVLOG #38 - The retry produced 1,530 completed results After the first SL-LLM-R comparison crashed, I fixed only the problems that prevented the test from running and repeated the same comparison. This time all 1,530 runs completed and produced scores. I could finally inspect failures in the repair search itself instead of only debugging the test setup."}, {"post_id": 56757, "ts": "2026-08-28T17:18:10Z", "hours": 0.3392, "text": "DEVLOG #37 - All 1,530 comparison runs crashed I ran a large SL-LLM-R comparison to measure the repair search, but all 1,530 runs crashed before producing a useful score. That means the run tells me nothing about whether the repair method was good or bad. The test setup failed, so I kept the result as a failed experiment instead of treating the crashes as model evidence."}, {"post_id": 56744, "ts": "2026-08-28T16:58:08Z", "hours": 0.3328, "text": "DEVLOG #36 - The learning loop is connected, but training is still off The main SL-LLM-R learning path is now connected. It starts with the original model, makes a temporary changed copy, checks whether the change helped and whether older abilities got worse, then either keeps the copy or throws it away. Real training is still disabled, so this is not yet a finished self-learning model."}, {"post_id": 56734, "ts": "2026-08-28T16:38:15Z", "hours": 0.2736, "text": "DEVLOG #35 - A better retry is still not model learning SL-LLM-R is meant to change future model behavior, not just get a better answer on the second attempt. Many AI systems can retry with more context and look like they learned even when the model itself stayed the same. I only care about a correction as learning if it affects later behavior, does not break other abilities, and can still be undone."}, {"post_id": 56723, "ts": "2026-08-28T16:21:26Z", "hours": 0.2608, "text": "DEVLOG #34 - Replay and consolidation fit the project together I realized two ideas from continual-learning research fit SL-LLM-R quite well. Replay means keeping older knowledge present while learning something new, while consolidation is about deciding which new experiences deserve to last longer. Together they match the goal of turning some verified experiences into lessons without making every observation permanent."}, {"post_id": 56711, "ts": "2026-08-28T16:05:48Z", "hours": 0.2606, "text": "DEVLOG #33 - Brain wiring gave me one idea to test I looked at connectomics, which is research on how brain cells are connected, because SL-LLM-R needs a way to keep model changes local. One idea is that connection structure might help choose which parts are safe to change together. It is only inspiration for an experiment, not a claim that transformers work like brains."}, {"post_id": 56701, "ts": "2026-08-28T15:50:13Z", "hours": 0.2608, "text": "DEVLOG #32 - The first real update has one clear path I wanted the first real SL-LLM-R model update to follow one understandable sequence. The system loads a parent model, copies it, changes only the child, tests the parent and child, then either keeps the child or deletes it. Training is still disabled, but the update path itself is now connected instead of being spread across separate pieces."}, {"post_id": 56690, "ts": "2026-08-28T15:34:39Z", "hours": 0.2606, "text": "DEVLOG #31 - A real base model is now part of the setup SL-LLM-R started with placeholder model inputs while I built the safety and comparison logic around them. I replaced that placeholder with a real open model that the system can identify and verify exactly. Training is still off, but future experiments can now start from a real model rather than a fake name."}, {"post_id": 56681, "ts": "2026-08-28T15:19:09Z", "hours": 0.2608, "text": "DEVLOG #30 - I can now undo a model update through the full practice loop SL-LLM-R needs a complete way to undo a model change before real learning updates can be trusted. I can now save the original model, make a changed copy, test it, switch to it, and return to the original in one practice run. I have not yet used that path to undo a genuinely learned LLM update, so the mechanism works but the real learning case is still untested."}, {"post_id": 56670, "ts": "2026-08-28T15:03:40Z", "hours": 0.2522, "text": "DEVLOG #29 - The cause finder is allowed to say it does not know Before SL-LLM-R changes a model, it tries to estimate what caused the original failure. I tested that part on simple cases where the cause was already known, especially to see what happens when the signal becomes weak. It can stop instead of inventing a confident answer, which is the behavior I want before any model update depends on that guess."}, {"post_id": 56662, "ts": "2026-08-28T14:48:25Z", "hours": 0.2606, "text": "DEVLOG #28 - Loading a model should not enable training SL-LLM-R needs access to a real base model before I can run realistic experiments. I made that access read-only so loading and checking the model does not automatically give the system permission to change its weights. Training can stay completely off while I verify exactly which model and data the project is using."}, {"post_id": 56654, "ts": "2026-08-28T14:32:51Z", "hours": 0.2522, "text": "DEVLOG #27 - Failed repairs still tell me something SL-LLM-R generates repair ideas after model mistakes, and many of those ideas get rejected. I started keeping track of why they fail instead of treating every rejected repair as the same kind of failure. Duplicates, impossible repairs, multi-step repairs, and bad ideas reveal different weaknesses in the search even when the model learns nothing from them."}, {"post_id": 56647, "ts": "2026-08-28T14:17:28Z", "hours": 0.4669, "text": "DEVLOG #26 - Every model change needs a history If SL-LLM-R keeps a model update, I want to be able to trace exactly why that change exists later. Each kept update should point back to the original mistake, the proposed repair, the parent model, and the checks that approved it. Otherwise a future model problem could turn into a mystery with no clear way to undo the right change."}, {"post_id": 55577, "ts": "2026-08-27T15:01:19Z", "hours": 0.3369, "text": "DEVLOG #25 - I need to know what caused a mistake before changing weights SL-LLM-R is supposed to learn from a model mistake without changing more of the model than necessary. A single bad result only tells me that something went wrong, not what caused it. The system first needs a likely cause before it can choose a small place where a repair might make sense."}, {"post_id": 55570, "ts": "2026-08-27T14:40:57Z", "hours": 0.345, "text": "DEVLOG #24 - I had to keep the final test separate I need to improve SL-LLM-R without slowly tuning it to the exact tasks used to judge it at the end. If I keep looking at those final tasks while changing the repair search, I can accidentally learn the test itself. Development tasks and final test tasks therefore stay separate."}, {"post_id": 55558, "ts": "2026-08-27T14:20:24Z", "hours": 0.3275, "text": "DEVLOG #23 - Random search was harder to beat than I expected SL-LLM-R uses a structured search to find possible repairs after model mistakes, and I compare it against random repair ideas. I expected random search to be an easy baseline to beat, but it was surprisingly competitive under the same budget. The structured search still has to prove that its extra complexity is actually worth using."}, {"post_id": 55386, "ts": "2026-08-27T05:56:33Z", "hours": 10.0881, "text": "DEVLOG #22 - More attempts can make a weak search look better I compare SL-LLM-R’s repair search against simpler search methods. If one method gets more attempts or more compute, it can look better just because it had more chances to get lucky. I now keep the search budget equal across methods so the comparison is about the method rather than the amount of compute."}, {"post_id": 55096, "ts": "2026-08-26T15:32:19Z", "hours": 0.2608, "text": "DEVLOG #21 - The learning controller mostly blocks updates SL-LLM-R has a controller that decides whether a possible model update is safe enough to try or keep. I originally imagined it mostly choosing how to learn, but most of its job is actually refusing weak updates. If the signal is weak, the change is too large, or forgetting risk is too high, the model stays unchanged."}, {"post_id": 55086, "ts": "2026-08-26T15:16:50Z", "hours": 0.6056, "text": "DEVLOG #20 - Memory can change fast, weights should change slowly SL-LLM-R uses two different kinds of adaptation. Temporary memory can change quickly because it can be thrown away, while real model weights should change much more slowly and only after stronger checks. This keeps a random observation from becoming permanent too easily."}, {"post_id": 53445, "ts": "2026-08-24T00:13:08Z", "hours": 5.4086, "text": "DEVLOG #19 - New lessons can overwrite old ones A continual-learning system like SL-LLM-R can forget older knowledge if it trains only on the newest mistake. I use replay, which means mixing some older verified examples back in while a new lesson is learned. The goal is to make new learning fit alongside old knowledge instead of pushing it out."}, {"post_id": 52830, "ts": "2026-08-23T05:53:45Z", "hours": 15.8025, "text": "DEVLOG #18 - Fixing one mistake can break something else SL-LLM-R cannot judge a learning update only on the mistake it was meant to fix. A model can improve on that one case and quietly get worse at older abilities. I therefore check for forgetting too, so an update is rejected if the local gain hides a larger loss elsewhere."}, {"post_id": 52112, "ts": "2026-08-22T06:10:57Z", "hours": 17.9328, "text": "DEVLOG #17 - A changed model has to beat the unchanged one SL-LLM-R creates a temporary child model when it tests a learning update. The child is not kept just because it is newer. It has to perform better than the unchanged parent under the same checks, otherwise the update is discarded."}, {"post_id": 51476, "ts": "2026-08-21T06:25:29Z", "hours": 16.7675, "text": "DEVLOG #16 - I wanted rollback before trusting any update SL-LLM-R should be able to undo a model change if the new version turns out worse. Every update starts from a saved parent model and happens in a temporary child copy. If the child fails the checks, it can be deleted and the original parent stays untouched."}, {"post_id": 50792, "ts": "2026-08-20T05:46:56Z", "hours": 0.3267, "text": "DEVLOG #15 - Which experiences should the model learn from? SL-LLM-R eventually needs to choose which experiences are worth using for learning instead of treating every case equally. I tested selecting problems near the model’s current ability limit rather than choosing practice cases randomly. In development tests that found useful cases more often, so task selection became part of the learning design too."}, {"post_id": 50788, "ts": "2026-08-20T05:24:10Z", "hours": 15.7136, "text": "DEVLOG #14 - I made the first real weight change in a test copy Most early SL-LLM-R tests only simulated what a learning update would do. This was the first time I changed actual model parameters with one tiny training step on an isolated copy while the original model stayed untouched. It does not prove self-learning works yet, but the real weight-update path itself did run."}, {"post_id": 50119, "ts": "2026-08-19T06:14:06Z", "hours": 9.7569, "text": "DEVLOG #13 - Context can look like learning when it is not SL-LLM-R needs to separate temporary memory from actual model learning. A model can answer better simply because the correct information is still in its context window, even though its weights never changed. I keep those two kinds of improvement separate so short-term memory does not get reported as permanent learning."}, {"post_id": 49872, "ts": "2026-08-18T20:28:23Z", "hours": 3.6808, "text": "This part of the project was mostly about making the final test harder to fool. I preregistered the analysis, froze the generator and sealer, and sealed the held-out split before looking at any confirmatory outcome. The important result here is a constraint rather than a score: if I can still change the test after seeing results, the result is not trustworthy. The evaluation itself was not run at this point, so this was preparation for evidence, not evidence that SL-LLM-R works. I would rather keep the experiment locked than make the final result easier to obtain."}, {"post_id": 49507, "ts": "2026-08-18T11:50:28Z", "hours": 16.385, "text": "DEVLOG #12 - One mistake should only allow a small change SL-LLM-R should not get permission to change the whole model because of one mistake. I want each repair to affect the smallest useful place, starting with temporary memory when possible and only touching learnable parameters when there is enough reason. A small amount of evidence should only allow a small intervention."}, {"post_id": 48823, "ts": "2026-08-17T11:28:00Z", "hours": 30.2072, "text": "DEVLOG #11 - The model cannot grade its own repair In SL-LLM-R the model can suggest a repair after it makes a mistake. I do not want the same model to also decide whether its own repair was successful, because that could turn into self-approval. The repair is checked separately from the model that proposed it."}, {"post_id": 47448, "ts": "2026-08-15T11:47:09Z", "hours": 16.7272, "text": "DEVLOG #10 - Sometimes the best update is no update SL-LLM-R is meant to learn from verified mistakes, but changing the model after every interesting result would probably teach it a lot of bad lessons. The system needs to be allowed to say there is not enough information and leave the model unchanged. One bad permanent update can be worse than learning nothing from that case."}, {"post_id": 46827, "ts": "2026-08-14T10:58:17Z", "hours": 14.0386, "text": "DEVLOG #09 - A working repair still does not tell me what broke SL-LLM-R can replay a model mistake with a repair and see whether the result gets better. The problem is that a better replay still does not tell me which part of the model caused the mistake. I split those jobs apart so the system first estimates the likely cause and only then decides what small part could be changed."}, {"post_id": 43890, "ts": "2026-08-09T10:33:42Z", "hours": 11.1233, "text": "DEVLOG #08 - I needed an A/B test for model mistakes The main idea in SL-LLM-R is to test a possible repair from the exact state before a model mistake happened. I replay the situation once normally and once with only one repair changed. Comparing those two runs is much more useful than seeing a better answer later and guessing that the repair caused it."}, {"post_id": 43243, "ts": "2026-08-08T12:13:50Z", "hours": 168.2683, "text": "I lost track of posting while I was building the first search loop, so this entry covers more than one session. I tried five simple ways of generating possible fixes under the same fixed budget and gave every candidate a reproducible identity and lineage. The annoying part was budget accounting: duplicates and rejected candidates still consume real search effort, which matters when I compare the method against a baseline. At this point the engine was implemented, but I still did not know whether the extra structure was actually better than random search. The next experiment was to test exactly that instead of assuming the machinery was useful."}, {"post_id": 30607, "ts": "2026-07-18T09:59:26Z", "hours": 21.1706, "text": "DEVLOG #07 - The new benchmark can finally separate methods I rebuilt the SL-LLM-R repair benchmark so it has more tasks that are difficult but still solvable. Different search methods finally started producing different results instead of all looking the same. That does not prove my search is good, but at least the benchmark can now show when one method is worse."}, {"post_id": 30003, "ts": "2026-07-17T07:30:10Z", "hours": 10.4578, "text": "DEVLOG #06 - Different searches kept finding the same repairs SL-LLM-R can try different ways of searching for a repair after a model mistake. I expected those methods to explore different ideas, but many of them kept finding the same repairs. I started tracking duplicates directly because a large attempt budget is not useful if most attempts repeat the same idea."}, {"post_id": 29761, "ts": "2026-07-16T21:03:05Z", "hours": 8.7039, "text": "DEVLOG #05 - My first benchmark could not tell the searches apart I need a benchmark to tell whether SL-LLM-R’s repair search is actually better than simple alternatives. The first one made structured search and random search look almost identical. Most tasks were either very easy or almost impossible, so I threw that benchmark away and rebuilt it with more tasks in the middle."}, {"post_id": 29361, "ts": "2026-07-16T08:21:54Z", "hours": 90.9133, "text": "DEVLOG #04 - The repair search was wasting attempts When SL-LLM-R sees a mistake, it searches for possible repairs to try. My first version kept spending attempts on duplicate fixes and repairs that were not valid in the first place. I changed the budget so every attempt counts, including the useless ones, because otherwise the search would look better than it really is."}, {"post_id": 27120, "ts": "2026-07-12T12:04:47Z", "hours": 15.1889, "text": "DEVLOG #03 - A crash cannot leave the model half changed SL-LLM-R compares a model before and after a possible learning update. If that update crashes halfway through, a half-changed model would make every later result impossible to trust. So each update is all or nothing: the system keeps either the old state or the complete new state."}, {"post_id": 26827, "ts": "2026-07-11T20:54:29Z", "hours": 9.4825, "text": "DEVLOG #02 - What should count as real learning? SL-LLM-R is supposed to make a model learn from mistakes, so I first had to decide what actually counts as learning. A better second answer is not enough. I only count it if the improvement still helps later, does not break other things, and can be undone if the change was bad."}, {"post_id": 26272, "ts": "2026-07-10T23:33:38Z", "hours": 56.8225, "text": "DEVLOG #1 - Why I Started SL-LLM-R Project: SL-LLM-R Introduction I originally just wanted a project for the summer. I had a few ideas, but most already existed or sounded like something I would abandon after a few days. Then I started thinking about AI. I use AI a lot for coding. It can understand large projects and solve difficult problems, but it can also repeat the same simple mistake several times. Even when it notices that something failed, it usually does not actually learn from it. The context becomes longer, but the model itself stays almost the same. Current models are trained on human-created data and updated through processes designed by humans. They can generate answers, but they normally cannot decide what to learn next, which decision caused a failure, or whether a change would damage another capability. So I started thinking about a system that could learn from its own verified experiences. That became SL-LLM-R. The Idea The core mechanism is called VGCP: Verifier-Grounded Counterfactual Plasticity. The simplified process is: Save the state before a decision. Let the model act. Check the result with an external verifier. Generate possible repairs. Replay the same situation with and without each repair. Compare the outcomes. Keep only changes supported by evidence. In simplified form: Δ = E[Y(change) - Y(original)] If the repaired version performs better across controlled tests, the change may be useful. If the evidence is weak, the system should not update. The goal is controlled, local, reversible, and verifiable learning. The PDF I first planned to write a short document. That did not go as planned. Every answer created more questions: How do I save the exact state? How do I compare runs fairly? How do I prevent leakage, forgetting, broken rollbacks, or the system approving its own changes? The document became the SL-LLM-R V1.2.2 specification. It is now 135 pages long and contains the architecture, mathematics, safety rules, algorithms, experiments, and failure conditions. The PDF does not prove that the system works. It defines what I need to build and what would count as failure. Completed Changes Defined the project idea. Created the VGCP concept. Wrote the V1.2.2 specification. Started the initial implementation. Next Steps Continue the deterministic foundation. Implement snapshots and rollback. Build the proposal system. Compare it against simple baselines. Summary I started with a few random project ideas, got annoyed by how intelligent and stupid AI can be at the same time, and ended up designing a system that should learn from verified mistakes. It might become something important. It might also be another stupid idea that takes over my entire summer holiday. Right now, I do not know. That is why I am building it. Summary (AI) SL-LLM-R is a pre-experimental project about controlled, verifier-grounded continual learning. No validated self-improvement result is currently claimed. Note I spent way too long writing this devlog and the PDF. I also started coding parts of the project, and it was… different from what I expected. More soon."}]...
|
Title: SL-LLM-R: Can an AI learn from its own veri Title: SL-LLM-R: Can an AI learn from its own verified mistakes? by @Samuelm | Stardance
Devlogs:
DEVLOG #1 - Why I Started SL-LLM-R Project: SL-LLM-R Introduction I originally just wanted a project for the summer. I had a few ideas, but most already existed or sounded like something I would abandon after a few days. Then I started thinking about AI. I use AI a lot for coding. It can understand large projects and solve difficult problems, but it can also repeat the same simple mistake several times. Even when it notices that something failed, it usually does not actually learn from it. The context becomes longer, but the model itself stays almost the same. Current models are trained on human-created data and updated through processes designed by humans. They can generate answers, but they normally cannot decide what to learn next, which decision caused a failure, or whether a change would damage another capability. So I started thinking about a system that could learn from its own verified experiences. That became SL-LLM-R. The Idea The core mechanism is called VGCP: Verifier-Grounded Counterfactual Plasticity. The simplified process is: Save the state before a decision. Let the model act. Check the result with an external verifier. Generate possible repairs. Replay the same situation with and without each repair. Compare the outcomes. Keep only changes supported by evidence. In simplified form: Δ = E[Y(change) - Y(original)] If the repaired version performs better across controlled tests, the change may be useful. If the evidence is weak, the system should not update. The goal is controlled, local, reversible, and verifiable learning. The PDF I first planned to write a short document. That did not go as planned. Every answer created more questions: How do I save the exact state? How do I compare runs fairly? How do I prevent leakage, forgetting, broken rollbacks, or the system approving its own changes? The document became the SL-LLM-R V1.2.2 specification. It is now 135 pages long and contains the architecture, mathematics, safety rules, algorithms, experiments, and failure conditions. The PDF does not prove that the system works. It defines what I need to build and what would count as failure. Completed Changes Defined the project idea. Created the VGCP concept. Wrote the V1.2.2 specification. Started the initial implementation. Next Steps Continue the deterministic foundation. Implement snapshots and rollback. Build the proposal system. Compare it against simple baselines. Summary I started with a few random project ideas, got annoyed by how intelligent and stupid AI can be at the same time, and ended up designing a system that should learn from verified mistakes. It might become something important. It might also be another stupid idea that takes over my entire summer holiday. Right now, I do not know. That is why I am building it. Summary (AI) SL-LLM-R is a pre-experimental project about controlled, verifier-grounded continual learning. No validated self-improvement result is currently claimed. Note I spent way too long writing this devlog and the PDF. I also started coding parts of the project, and it was… different from what I expected. More soon.
DEVLOG #02 - What should count as real learning? SL-LLM-R is supposed to make a model learn from mistakes, so I first had to decide what actually counts as learning. A better second answer is not enough. I only count it if the improvement still helps later, does not break other things, and can be undone if the change was bad.
DEVLOG #03 - A crash cannot leave the model half changed SL-LLM-R compares a model before and after a possible learning update. If that update crashes halfway through, a half-changed model would make every later result impossible to trust. So each update is all or nothing: the system keeps either the old state or the complete new state.
DEVLOG #04 - The repair search was wasting attempts When SL-LLM-R sees a mistake, it searches for possible repairs to try. My first version kept spending attempts on duplicate fixes and repairs that were not valid in the first place. I changed the budget so every attempt counts, including the useless ones, because otherwise the search would look better than it really is.
DEVLOG #05 - My first benchmark could not tell the searches apart I need a benchmark to tell whether SL-LLM-R’s repair search is actually better than simple alternatives. The first one made structured search and random search look almost identical. Most tasks were either very easy or almost impossible, so I threw that benchmark away and rebuilt it with more tasks in the middle.
DEVLOG #06 - Different searches kept finding the same repairs SL-LLM-R can try different ways of searching for a repair after a model mistake. I expected those methods to explore different ideas, but many of them kept finding the same repairs. I started tracking duplicates directly because a large attempt budget is not useful if most attempts repeat the same idea.
DEVLOG #07 - The new benchmark can finally separate methods I rebuilt the SL-LLM-R repair benchmark so it has more tasks that are difficult but still solvable. Different search methods finally started producing different results instead of all looking the same. That does not prove my search is good, but at least the benchmark can now show when one method is worse.
I lost track of posting while I was building the first search loop, so this entry covers more than one session. I tried five simple ways of generating possible fixes under the same fixed budget and gave every candidate a reproducible identity and lineage. The annoying part was budget accounting: duplicates and rejected candidates still consume real search effort, which matters when I compare the method against a baseline. At this point the engine was implemented, but I still did not know whether the extra structure was actually better than random search. The next experiment was to test exactly that instead of assuming the machinery was useful.
DEVLOG #08 - I needed an A/B test for model mistakes The main idea in SL-LLM-R is to test a possible repair from the exact state before a model mistake happened. I replay the situation once normally and once with only one repair changed. Comparing those two runs is much more useful than seeing a better answer later and guessing that the repair caused it.
DEVLOG #09 - A working repair still does not tell me what broke SL-LLM-R can replay a model mistake with a repair and see whether the result gets better. The problem is that a better replay still does not tell me which part of the model caused the mistake. I split those jobs apart so the system first estimates the likely cause and only then decides what small part could be changed.
DEVLOG #10 - Sometimes the best update is no update SL-LLM-R is meant to learn from verified mistakes, but changing the model after every interesting result would probably teach it a lot of bad lessons. The system needs to be allowed to say there is not enough information and leave the model unchanged. One bad permanent update can be worse than learning nothing from that case.
DEVLOG #11 - The model cannot grade its own repair In SL-LLM-R the model can suggest a repair after it makes a mistake. I do not want the same model to also decide whether its own repair was successful, because that could turn into self-approval. The repair is checked separately from the model that proposed it.
DEVLOG #12 - One mistake should only allow a small change SL-LLM-R should not get permission to change the whole model because of one mistake. I want each repair to affect the smallest useful place, starting with temporary memory when possible and only touching learnable parameters when there is enough reason. A small amount of evidence should only allow a small intervention.
This part of the project was mostly about making the final test harder to fool. I preregistered the analysis, froze the generator and sealer, and sealed the held-out split before looking at any confirmatory outcome. The important result here is a constraint rather than a score: if I can still change the test after seeing results, the result is not trustworthy. The evaluation itself was not run at this point, so this was preparation for evidence, not evidence that SL-LLM-R works. I would rather keep the experiment locked than make the final result easier to obtain.
DEVLOG #13 - Context can look like learning when it is not SL-LLM-R needs to separate temporary memory from actual model learning. A model can answer better simply because the correct information is still in its context window, even though its weights never changed. I keep those two kinds of improvement separate so short-term memory does not get reported as permanent learning.
DEVLOG #14 - I made the first real weight change in a test copy Most early SL-LLM-R tests only simulated what a learning update would do. This was the first time I changed actual model parameters with one tiny training step on an isolated copy while the original model stayed untouched. It does not prove self-learning works yet, but the real weight-update path itself did run.
DEVLOG #15 - Which experiences should the model learn from? SL-LLM-R eventually needs to choose which experiences are worth using for learning instead of treating every case equally. I tested selecting problems near the model’s current ability limit rather than choosing practice cases randomly. In development tests that found useful cases more often, so task selection became part of the learning design too.
DEVLOG #16 - I wanted rollback before trusting any update SL-LLM-R should be able to undo a model change if the new version turns out worse. Every update starts from a saved parent model and happens in a temporary child copy. If the child fails the checks, it can be deleted and the original parent stays untouched.
DEVLOG #17 - A changed model has to beat the unchanged one SL-LLM-R creates a temporary child model when it tests a learning update. The child is not kept just because it is newer. It has to perform better than the unchanged parent under the same checks, otherwise the update is discarded.
DEVLOG #18 - Fixing one mistake can break something else SL-LLM-R cannot judge a learning update only on the mistake it was meant to fix. A model can improve on that one case and quietly get worse at older abilities. I therefore check for forgetting too, so an update is rejected if the local gain hides a larger loss elsewhere.
DEVLOG #19 - New lessons can overwrite old ones A continual-learning system like SL-LLM-R can forget older knowledge if it trains only on the newest mistake. I use replay, which means mixing some older verified examples back in while a new lesson is learned. The goal is to make new learning fit alongside old knowledge instead of pushing it out.
DEVLOG #20 - Memory can change fast, weights should change slowly SL-LLM-R uses two different kinds of adaptation. Temporary memory can change quickly because it can be thrown away, while real model weights should change much more slowly and only after stronger checks. This keeps a random observation from becoming permanent too easily.
DEVLOG #21 - The learning controller mostly blocks updates SL-LLM-R has a controller that decides whether a possible model update is safe enough to try or keep. I originally imagined it mostly choosing how to learn, but most of its job is actually refusing weak updates. If the signal is weak, the change is too large, or forgetting risk is too high, the model stays unchanged.
DEVLOG #22 - More attempts can make a weak search look better I compare SL-LLM-R’s repair search against simpler search methods. If one method gets more attempts or more compute, it can look better just because it had more chances to get lucky. I now keep the search budget equal across methods so the comparison is about the method rather than the amount of compute.
DEVLOG #23 - Random search was harder to beat than I expected SL-LLM-R uses a structured search to find possible repairs after model mistakes, and I compare it against random repair ideas. I expected random search to be an easy baseline to beat, but it was surprisingly competitive under the same budget. The structured search still has to prove that its extra complexity is actually worth using.
DEVLOG #24 - I had to keep the final test separate I need to improve SL-LLM-R without slowly tuning it to the exact tasks used to judge it at the end. If I keep looking at those final tasks while changing the repair search, I can accidentally learn the test itself. Development tasks and final test tasks therefore stay separate.
DEVLOG #25 - I need to know what caused a mistake before changing weights SL-LLM-R is supposed to learn from a model mistake without changing more of the model than necessary. A single bad result only tells me that something went wrong, not what caused it. The system first needs a likely cause before it can choose a small place where a repair might make sense.
DEVLOG #26 - Every model change needs a history If SL-LLM-R keeps a model update, I want to be able to trace exactly why that change exists later. Each kept update should point back to the original mistake, the proposed repair, the parent model, and the checks that approved it. Otherwise a future model problem could turn into a mystery with no clear way to undo the right change.
DEVLOG #27 - Failed repairs still tell me something SL-LLM-R generates repair ideas after model mistakes, and many of those ideas get rejected. I started keeping track of why they fail instead of treating every rejected repair as the same kind of failure. Duplicates, impossible repairs, multi-step repairs, and bad ideas reveal different weaknesses in the search even when the model learns nothing from them.
DEVLOG #28 - Loading a model should not enable training SL-LLM-R needs access to a real base model before I can run realistic experiments. I made that access read-only so loading and checking the model does not automatically give the system permission to change its weights. Training can stay completely off while I verify exactly which model and data the project is using.
DEVLOG #29 - The cause finder is allowed to say it does not know Before SL-LLM-R changes a model, it tries to estimate what caused the original failure. I tested that part on simple cases where the cause was already known, especially to see what happens when the signal becomes weak. It can stop instead of inventing a confident answer, which is the behavior I want before any model update depends on that guess.
DEVLOG #30 - I can now undo a model update through the full practice loop SL-LLM-R needs a complete way to undo a model change before real learning updates can be trusted. I can now save the original model, make a changed copy, test it, switch to it, and return to the original in one practice run. I have not yet used that path to undo a genuinely learned LLM update, so the mechanism works but the real learning case is still untested.
DEVLOG #31 - A real base model is now part of the setup SL-LLM-R started with placeholder model inputs while I built the safety and comparison logic around them. I replaced that placeholder with a real open model that the system can identify and verify exactly. Training is still off, but future experiments can now start from a real model rather than a fake name.
DEVLOG #32 - The first real update has one clear path I wanted the first real SL-LLM-R model update to follow one understandable sequence. The system loads a parent model, copies it, changes only the child, tests the parent and child, then either keeps the child or deletes it. Training is still disabled, but the update path itself is now connected instead of being spread across separate pieces.
DEVLOG #33 - Brain wiring gave me one idea to test I looked at connectomics, which is research on how brain cells are connected, because SL-LLM-R needs a way to keep model changes local. One idea is that connection structure might help choose which parts are safe to change together. It is only inspiration for an experiment, not a claim that transformers work like brains.
DEVLOG #34 - Replay and consolidation fit the project together I realized two ideas from continual-learning research fit SL-LLM-R quite well. Replay means keeping older knowledge present while learning something new, while consolidation is about deciding which new experiences deserve to last longer. Together they match the goal of turning some verified experiences into lessons without making every observation permanent.
DEVLOG #35 - A better retry is still not model learning SL-LLM-R is meant to change future model behavior, not just get a better answer on the second attempt. Many AI systems can retry with more context and look like they learned even when the model itself stayed the same. I only care about a correction as learning if it affects later behavior, does not break other abilities, and can still be undone.
DEVLOG #36 - The learning loop is connected, but training is still off The main SL-LLM-R learning path is now connected. It starts with the original model, makes a temporary changed copy, checks whether the change helped and whether older abilities got worse, then either keeps the copy or throws it away. Real training is still disabled, so this is not yet a finished self-learning model.
DEVLOG #37 - All 1,530 comparison runs crashed I ran a large SL-LLM-R comparison to measure the repair search, but all 1,530 runs crashed before producing a useful score. That means the run tells me nothing about whether the repair method was good or bad. The test setup failed, so I kept the result as a failed experiment instead of treating the crashes as model evidence.
DEVLOG #38 - The retry produced 1,530 completed results After the first SL-LLM-R comparison crashed, I fixed only the problems that prevented the test from running and repeated the same comparison. This time all 1,530 runs completed and produced scores. I could finally inspect failures in the repair search itself instead of only debugging the test setup.
DEVLOG #39 - The repair-search failures are finally visible With a completed comparison, I can now inspect why SL-LLM-R’s repair search misses targets. Some misses come from repeated ideas, some repairs need more steps, and some targets are never reached by the current search. Separating those cases is more useful than treating every miss as one generic failure.
DEVLOG #40 - What happens if the model runs out of room? SL-LLM-R is meant to keep learning over time, which creates a long-term problem if a fixed-size model eventually runs out of useful capacity. My current idea is a stable core, fast memory, small learnable parts, and possibly extra specialist modules only when the existing capacity is not enough. The project cannot do that yet, so this is still future research.
DEVLOG #41 - If the model grows, the extra capacity has to help I do not want SL-LLM-R to add parameters just because a larger model sounds better. If the system ever needs more capacity, my current idea is to add a small module in a copy and test whether that addition actually improves the model. If it does not help, the extra module should be deleted just like any other failed update.
DEVLOG #42 - The first real learning run is still blocked The repaired SL-LLM-R comparison produced 1,530 completed results, but I still did not understand the repair-search failures well enough to start changing real model weights. Training therefore stayed off while I investigated why targets were being missed. I would rather delay the first learning update than call an unclear result progress.
DEVLOG #43 - I built one failure where I already knew the cause SL-LLM-R’s repair search was missing many fixes that I expected it to find, but I did not know why. I built one small synthetic failure where the component reading the source signal gets the wrong input, so I can reproduce that miss on purpose. At least one failure now has a known cause, which I can compare with the unexplained failures without assuming they are all the same problem.
DEVLOG #44 - I can explain 306 misses, but 1,224 still look the same I am trying to understand why SL-LLM-R’s repair search fails to find fixes that should exist. Right now I can explain 306 misses, while another 1,224 look identical in every field I am allowed to compare. Two different explanations for the source-signal problem also match the same 306 cases, so the available data still cannot separate those explanations for the larger group.
DEVLOG #45 - Fixing one broken link still gave zero hits When SL-LLM-R fails to find a repair that I know should be reachable, I need to know whether the search is bad or the test case is broken. One case had a broken link between the original proposal and the repair I expected the search to find, so I fixed only that link and ran the case again with the same number of attempts. The search still found the target zero times, so that broken link was not the whole problem.
DEVLOG #46 - Some repair scores could not be trusted Every possible repair SL-LLM-R produces should be linked back to the original proposal it came from so the search can be scored correctly. I found cases where that link was ambiguous, which can make the score describe the wrong search. I changed the scoring path so ambiguous pairs are rejected instead of guessed, and the earlier zero-hit result stays zero.
Ships:
Most LLMs can recognize that they made a mistake, but they usually don’t actually learn from it. I’m building SL-LLM-R to explore whether that can be changed. The idea is to let a pretrained model learn from its own verified experience. When something goes wrong, the system saves where the decision came from, tries alternative decisions from the same state and checks what actually changes the outcome. If a possible improvement is supported by enough evidence, it can eventually be turned into a small, controlled update. If it makes things worse, the system must be able to reject it or roll it back. The research mechanism behind this is called Verifier-Grounded Counterfactual Plasticity, or VGCP. What matters to me is that the project does not just produce results that look good. The experiments are designed around reproducibility, fixed evaluation rules, independent verification, held-out tests and preserving failed experiments instead of quietly replacing them. The deterministic foundation is working and verified. The proposal system is implemented and tested, and the latest development benchmark was able to distinguish between different proposal strategies. The confirmatory experiment has now been preregistered and sealed. It has not been run yet. So I am not claiming that SL-LLM-R has solved continual learning or that it can already improve itself. That is exactly what the next experiments are meant to test. I have published the research, architecture, mathematics, experiment history, negative results and current evidence at: research.samuelm.de...
|
1793771283.1079738
|
1794635283.1079738
|
|
58890
|
Physics-Lab by @n_astdo | Stardance
|
n_astdo
|
0
|
0.27
|
0
|
[]
|
[{"post_id": 64115, "ts": "202 [{"post_id": 64115, "ts": "2026-09-08T09:52:28Z", "hours": 0.2683, "text": "I am working on a platform where you can see physics"}]...
|
Title: Physics-Lab by @n_astdo | Stardance
Devlog Title: Physics-Lab by @n_astdo | Stardance
Devlogs:
I am working on a platform where you can see physics...
|
1793516159.5442882
|
1794120959.5442882
|
|
40621
|
ZweiCFD by @toiabzahoor | Stardance
|
toiabzahoor
|
2
|
51.0
|
883
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T09:54:49Z", "hours": 18.0, "multiplier": 15.77, "payout": 287, "blessing": "neutral", "text": "Hello Guys! I am back with An improved version of ZweiCFD. Last time, everyone recommended a few things to improve on ZweiCFD , which i have been working hard to do! I have also added Custom Models, A CLI interface, heat colormap (which shows velocity of the wind on the model) , 3d vortex cores using Q criterion, surface pressure distribution curve. I have also added a polar sweep function which lets you select from a range of AoA to see how the drag, lift varies. If anyone is new, They can take a look below this Ship to understand what ZweiCFD is. I Have Also tried to Compile binaries for different OS systems, and i’d like you guys to show me how it works on your end so that i may fix it ASAP. Thank you!", "repo": "https://github.com/toiabzahoor/ZweiCFD", "demo": "https://github.com/Toiabzahoor/ZweiCFD/releases/tag/ZweiCFD"}, {"ship_num": 2, "ts": "2026-08-09T06:47:25Z", "hours": 33.0, "multiplier": 18.19, "payout": 596, "blessing": "neutral", "text": "ZweiCFD: A Real-Time 3D Fluid Dynamics Simulator! Hey Everyone! I’m super excited to ship my first project ZweiCFD , an interactive Computational Fluid Dynamics (CFD) solver and visualization tool I built from scratch. Have you ever wanted to just make a model and see how air flows around it? This is the simulator for that! What it does: Real-Time Aerodynamics: You can adjust the Angle of Attack (AOA), speed, thickness, and camber of an airfoil on the go, and the solver recalculates the airflow instantly. Rich 3D Visuals: Generates velocity heatmaps, streamlines, and slices to visualize exactly how the fluid is behaving. How it was made Built entirely in C++ using Qt6 for the UI and VTK for the heavy-duty 3D rendering. Powered by a custom 3D Lattice Boltzmann Method (LBM) volumetric solver (using a D3Q19 discrete velocity model). Uses Signed Distance Fields (SDF) to handle the complex math of arbitrary boundaries and real-time obstacle drawing. Rest Of The Documentation Is Available On My Github Page! The journey To be completely honest, building this solo while managing my studies has been brutal. My laptop is pretty low-end, so debugging the 3D flap airfoil simulation tanked my compute resources and I had to sideline some 2D features entirely to get the 3D working because it kept interfering. Also, Sitting on the laptop with my chronic pain is very painful for me, so if there are some rough edges, please tell me as it would boost my motivation to work! If you are on Windows, you can download the .exe (with all the VTK DLLs bundled!) from my repo and tinker around with it. I would absolutely love your feedback, reviews, or even just some stars on the repo to help me push this to the next level! :3 For The People Who Need To Take A Look At How It Works: https://youtu.be/mjVsJX-nruM", "repo": "https://github.com/toiabzahoor/ZweiCFD", "demo": "https://github.com/Toiabzahoor/ZweiCFD/releases/tag/ZweiCFD"}]...
|
[{"post_id": 64114, "ts": "202 [{"post_id": 64114, "ts": "2026-09-08T09:50:03Z", "hours": 3.2444, "text": "Finally, I think I have worked enough on zweicfd, i think i will close the chapter on this project. everyone, thank you for supporting me till now! it has really helped my life alot. and i appreciate every bit of support from everyone! i have also tried my best to upload the binaries for linux and macos, and i would like your humble opinion if you face any issues. i would be sure to help you in any way i can!"}, {"post_id": 58895, "ts": "2026-08-31T13:48:56Z", "hours": 6.5239, "text": "Hello! it has been a while since i have dropped a devlog because i have been busy with my doctor visits, so i apologise for the delay! i have added many features to ZweiCFD, like the color heatmap which tells you how the pressure distribution on your model is! I have also added a polar sweep function which lets you simulate for many angles and configurations and plot how the force ,drag angle relate! I am really out of ideas on what to do next, So it would be really helpful to recieve your feedback on what to do next!"}, {"post_id": 53689, "ts": "2026-08-24T11:18:14Z", "hours": 4.2728, "text": "Hey Everyone! I am back with some new additions to ZweiCFD! First, I wanted to maximize the compute for massive simulations, so I’ve added a headless CLI mode and added a function where you can scale the grid up or down (depends on how big your model is / how accurate you want to trace the model). If you are running this on a lower-end device like my laptop, or if you just want to dedicate 100% of your CPU to the physics without running the rendering simultaneously , you can now run the solver entirely from the command line! Second, based on some great feedback, I’ve integrated .vti file exporting. now you can also export your high-resolution flow data generated by ZweiCFD directly into industry-standard tools like ParaView for deep, professional-grade analysis(if anyone is an expert at paraview, please let me know what you think. I would love to hear from a professional so i can tailor to their needs!). Let me know what you think!"}, {"post_id": 52861, "ts": "2026-08-23T07:10:04Z", "hours": 4.1683, "text": "Thank you everyone for supporting my project so much! I am really grateful for all of the support everyone has given me!. Now, I finally have more motivation to work on this project! Currently, as many people recommended, I was working on import functionality of any custom models you may have. It is currently in progress so I appreciate your patience as the latest won’t be reflected on github. Also, I plan to also make a web version of ZweiCFD which would run easily on any platform (Which would be very tough but I think i can make it). Thank you for your time!"}, {"post_id": 43767, "ts": "2026-08-09T06:01:56Z", "hours": 4.4875, "text": "Finally My Last Devlog Before I Ship! I’ve Fixed most of the issues and uploaded the build binary along with the necessary libraries to my releases in github for you guys to try, Thank you very much for your support till now!"}, {"post_id": 42780, "ts": "2026-08-07T17:38:52Z", "hours": 6.8753, "text": "it has finally been starting to look very decent. I had to do a major architectural shift to VTK and QT. and it turned out very good. I am feeling burned out these days. i dont really know if i can keep up the motivation to work on this. but ill try my best! thank you for checking out."}, {"post_id": 40901, "ts": "2026-08-04T18:38:47Z", "hours": 4.6822, "text": "i have been working to make the simulation more pleasing to look at . also, trying to model complex shapes and adding stuff like .obj support, lets see how that goes. have been working on some optimization features, so the github commit may take some more time. Thank you for checking out!"}, {"post_id": 40171, "ts": "2026-08-03T16:02:52Z", "hours": 3.0133, "text": "the 3d interface is under work, although there are major issues with making the equations work in 3d and other stuff so you wont find this version on github. your patience is appreciated!!"}, {"post_id": 39536, "ts": "2026-08-02T15:42:10Z", "hours": 3.975, "text": "i moved most of the calculations onto the gpu so having alot of particles will be easier to render. plus, now testing complex shapes and writing boundary layer equations and some approximation methods to hug around the shape. also i am planning to add 3d next, which will be tough. wish me luck!"}, {"post_id": 38960, "ts": "2026-08-01T16:07:01Z", "hours": 3.5236, "text": "have done a great session. added coloring, and added more equations like lattice-boltzmann method (recovering the navier stokes). thank you for taking a look!"}, {"post_id": 38389, "ts": "2026-07-31T18:54:12Z", "hours": 1.9697, "text": "working on it more, now modelling the equations and physics. havent commited this part to github yet due to some bugs here and there. thank you for checking out!"}, {"post_id": 37775, "ts": "2026-07-30T18:06:55Z", "hours": 1.6783, "text": "Got it fixed. also added some new stuff, and added the wind effect (the lines, yes they move). although i have to incorporate the equations next time. before that, i have to study up on it as this is a topic i havent really studied much about :)"}, {"post_id": 36261, "ts": "2026-07-28T07:51:57Z", "hours": 2.0814, "text": "still working on it. although the graphics arent looking too good yet. Have to stop here for lunch and some rest for my leg, will start work later to fix this."}, {"post_id": 35874, "ts": "2026-07-27T16:20:21Z", "hours": 0.4969, "text": "currently, as i’ve initialized this project. just working to make the files tidy and clean and adding some basic stuff."}]...
|
Title: ZweiCFD by @toiabzahoor | Stardance
Devlog Title: ZweiCFD by @toiabzahoor | Stardance
Devlogs:
currently, as i’ve initialized this project. just working to make the files tidy and clean and adding some basic stuff.
still working on it. although the graphics arent looking too good yet. Have to stop here for lunch and some rest for my leg, will start work later to fix this.
Got it fixed. also added some new stuff, and added the wind effect (the lines, yes they move). although i have to incorporate the equations next time. before that, i have to study up on it as this is a topic i havent really studied much about :)
working on it more, now modelling the equations and physics. havent commited this part to github yet due to some bugs here and there. thank you for checking out!
have done a great session. added coloring, and added more equations like lattice-boltzmann method (recovering the navier stokes). thank you for taking a look!
i moved most of the calculations onto the gpu so having alot of particles will be easier to render. plus, now testing complex shapes and writing boundary layer equations and some approximation methods to hug around the shape. also i am planning to add 3d next, which will be tough. wish me luck!
the 3d interface is under work, although there are major issues with making the equations work in 3d and other stuff so you wont find this version on github. your patience is appreciated!!
i have been working to make the simulation more pleasing to look at . also, trying to model complex shapes and adding stuff like .obj support, lets see how that goes. have been working on some optimization features, so the github commit may take some more time. Thank you for checking out!
it has finally been starting to look very decent. I had to do a major architectural shift to VTK and QT. and it turned out very good. I am feeling burned out these days. i dont really know if i can keep up the motivation to work on this. but ill try my best! thank you for checking out.
Finally My Last Devlog Before I Ship! I’ve Fixed most of the issues and uploaded the build binary along with the necessary libraries to my releases in github for you guys to try, Thank you very much for your support till now!
Thank you everyone for supporting my project so much! I am really grateful for all of the support everyone has given me!. Now, I finally have more motivation to work on this project! Currently, as many people recommended, I was working on import functionality of any custom models you may have. It is currently in progress so I appreciate your patience as the latest won’t be reflected on github. Also, I plan to also make a web version of ZweiCFD which would run easily on any platform (Which would be very tough but I think i can make it). Thank you for your time!
Hey Everyone! I am back with some new additions to ZweiCFD! First, I wanted to maximize the compute for massive simulations, so I’ve added a headless CLI mode and added a function where you can scale the grid up or down (depends on how big your model is / how accurate you want to trace the model). If you are running this on a lower-end device like my laptop, or if you just want to dedicate 100% of your CPU to the physics without running the rendering simultaneously , you can now run the solver entirely from the command line! Second, based on some great feedback, I’ve integrated .vti file exporting. now you can also export your high-resolution flow data generated by ZweiCFD directly into industry-standard tools like ParaView for deep, professional-grade analysis(if anyone is an expert at paraview, please let me know what you think. I would love to hear from a professional so i can tailor to their needs!). Let me know what you think!
Hello! it has been a while since i have dropped a devlog because i have been busy with my doctor visits, so i apologise for the delay! i have added many features to ZweiCFD, like the color heatmap which tells you how the pressure distribution on your model is! I have also added a polar sweep function which lets you simulate for many angles and configurations and plot how the force ,drag angle relate! I am really out of ideas on what to do next, So it would be really helpful to recieve your feedback on what to do next!
Finally, I think I have worked enough on zweicfd, i think i will close the chapter on this project. everyone, thank you for supporting me till now! it has really helped my life alot. and i appreciate every bit of support from everyone! i have also tried my best to upload the binaries for linux and macos, and i would like your humble opinion if you face any issues. i would be sure to help you in any way i can!
Ships:
ZweiCFD: A Real-Time 3D Fluid Dynamics Simulator! Hey Everyone! I’m super excited to ship my first project ZweiCFD , an interactive Computational Fluid Dynamics (CFD) solver and visualization tool I built from scratch. Have you ever wanted to just make a model and see how air flows around it? This is the simulator for that! What it does: Real-Time Aerodynamics: You can adjust the Angle of Attack (AOA), speed, thickness, and camber of an airfoil on the go, and the solver recalculates the airflow instantly. Rich 3D Visuals: Generates velocity heatmaps, streamlines, and slices to visualize exactly how the fluid is behaving. How it was made Built entirely in C++ using Qt6 for the UI and VTK for the heavy-duty 3D rendering. Powered by a custom 3D Lattice Boltzmann Method (LBM) volumetric solver (using a D3Q19 discrete velocity model). Uses Signed Distance Fields (SDF) to handle the complex math of arbitrary boundaries and real-time obstacle drawing. Rest Of The Documentation Is Available On My Github Page! The journey To be completely honest, building this solo while managing my studies has been brutal. My laptop is pretty low-end, so debugging the 3D flap airfoil simulation tanked my compute resources and I had to sideline some 2D features entirely to get the 3D working because it kept interfering. Also, Sitting on the laptop with my chronic pain is very painful for me, so if there are some rough edges, please tell me as it would boost my motivation to work! If you are on Windows, you can download the .exe (with all the VTK DLLs bundled!) from my repo and tinker around with it. I would absolutely love your feedback, reviews, or even just some stars on the repo to help me push this to the next level! :3 For The People Who Need To Take A Look At How It Works: https://youtu.be/mjVsJX-nruM
Hello Guys! I am back with An improved version of ZweiCFD. Last time, everyone recommended a few things to improve on ZweiCFD , which i have been working hard to do! I have also added Custom Models, A CLI interface, heat colormap (which shows velocity of the wind on the model) , 3d vortex cores using Q criterion, surface pressure distribution curve. I have also added a polar sweep function which lets you select from a range of AoA to see how the drag, lift varies. If anyone is new, They can take a look below this Ship to understand what ZweiCFD is. I Have Also tried to Compile binaries for different OS systems, and i’d like you guys to show me how it works on your end so that i may fix it ASAP. Thank you!...
|
1794077695.195222
|
1794164095.195222
|
|
58331
|
ESP32-PNA by @vasilije | Stardance
|
vasilije
|
1
|
7.17
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T09:33:13Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ESP32 PNA ( Pocket Network Analyser) is a handheld device that lets you scan nearby Wi-Fi networks, discover BLE devices, and detect activity across the 2.4 GHz band. This uses a 0.96-inch OLED and 4 buttons for controls. It responds well, captures all the signals well, and most of all looks super cool. In the next few days Ill upload a KiCAD schematic, PCB and a DXF file for the enclosure that will probably be laser cut", "repo": "https://github.com/VMechLAB/ESP32_PNA", "demo": "https://github.com/VMechLAB/ESP32_PNA/releases/tag/V1.0"}]...
|
[{"post_id": 64111, "ts": "202 [{"post_id": 64111, "ts": "2026-09-08T09:43:17Z", "hours": 2.1736, "text": "V1.1 is on GitHub now and I forgot to post a devlog before shipping the project 🤦♂️. But ok, everything is still uploaded and ready to use. Hope you have fun using the project as much as I had making it."}, {"post_id": 63773, "ts": "2026-09-07T18:47:56Z", "hours": 0.8608, "text": "Put up a RELEASE V1.0 FINALLY, but there’s a lot to fix in the project. Love how this project has finally brought me back to my hardware side; I’ve been into software for too long, and I miss building stuff. Also, should I say this is a Hardware of a Software project? I guess a mix of both worlds."}, {"post_id": 63558, "ts": "2026-09-07T14:01:16Z", "hours": 2.0672, "text": "Been fixing the code alot. It had a crazy amount of errors but now it works very well. Will do some more fixing and then posting it"}, {"post_id": 63464, "ts": "2026-09-07T10:24:06Z", "hours": 1.7564, "text": "Fixed ALOT of errors and nowwwww finally going to start debugging the hardware YAY so happy. But its gonna be worth it hopefully"}, {"post_id": 61765, "ts": "2026-09-04T20:32:58Z", "hours": 0.5542, "text": "Just started on it. Soon enough Ill relese the CAD files and Schematic. Just thinking what software to make it in either gonna be in KiCAD or smrth similar. It is quite simple to connect tbh"}]...
|
Title: ESP32-PNA by @vasilije | Stardance
Devlogs Title: ESP32-PNA by @vasilije | Stardance
Devlogs:
Just started on it. Soon enough Ill relese the CAD files and Schematic. Just thinking what software to make it in either gonna be in KiCAD or smrth similar. It is quite simple to connect tbh
Fixed ALOT of errors and nowwwww finally going to start debugging the hardware YAY so happy. But its gonna be worth it hopefully
Been fixing the code alot. It had a crazy amount of errors but now it works very well. Will do some more fixing and then posting it
Put up a RELEASE V1.0 FINALLY, but there’s a lot to fix in the project. Love how this project has finally brought me back to my hardware side; I’ve been into software for too long, and I miss building stuff. Also, should I say this is a Hardware of a Software project? I guess a mix of both worlds.
V1.1 is on GitHub now and I forgot to post a devlog before shipping the project 🤦♂️. But ok, everything is still uploaded and ready to use. Hope you have fun using the project as much as I had making it.
Ships:
ESP32 PNA ( Pocket Network Analyser) is a handheld device that lets you scan nearby Wi-Fi networks, discover BLE devices, and detect activity across the 2.4 GHz band. This uses a 0.96-inch OLED and 4 buttons for controls. It responds well, captures all the signals well, and most of all looks super cool. In the next few days Ill upload a KiCAD schematic, PCB and a DXF file for the enclosure that will probably be laser cut...
|
1793768124.7712615
|
1794632124.7712615
|
|
21549
|
MCBot by @Serra00 | Stardance
|
Serra00
|
2
|
17.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T16:51:32Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an AI bot that can do various tasks. It was hard to make the player see the other players, since the server was offline and for some reason mineflayer refused to read namelists and locations when server is off. I had fun playing with it for some time, until my game crashed and my save file got corrupted somehow, but it is fun to play with it, especially with friends because you literally have an ai to mine and do the most boring and time consuming tasks.", "repo": "https://github.com/Serra110/mcbot", "demo": "https://github.com/Serra110/mcbot/releases/tag/v1.0.0"}, {"ship_num": 2, "ts": "2026-07-08T23:42:33Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an AI bot that can do various tasks. It was hard to make the player see the other players, since the server was offline and for some reason mineflayer refused to read namelists and locations when server is off. I had fun playing with it for some time, until my game crashed and my save file got corrupted somehow, but it is fun to play with it, especially with friends because you literally have an ai to mine and do the most boring and time consuming tasks.", "repo": "https://github.com/Serra110/mcbot", "demo": "https://github.com/Serra110/mcbot/releases/tag/v1.0.0"}]...
|
[{"post_id": 64101, "ts": "202 [{"post_id": 64101, "ts": "2026-09-08T09:09:20Z", "hours": 7.3094, "text": "Bug fixes, mainly I have: improved AI model to gpt 5.4 mini so it is a lil bit “smarter”, gave also better rules so it doesnt just build a house 100% glass with no door and no tools."}, {"post_id": 46379, "ts": "2026-08-13T15:37:03Z", "hours": 1.3433, "text": "made installation easier for my bot"}, {"post_id": 25029, "ts": "2026-07-08T23:30:55Z", "hours": 3.2044, "text": "I made the bot and it works, i tried finishing it ASAP so i could then lock in for my main project, a game, but it still works really well. it can mine, battle with mobs, follow and other stuff, since it is controlled by an ai and can be made to do something."}, {"post_id": 12199, "ts": "2026-06-19T22:13:49Z", "hours": 3.2828, "text": "I am starting to hate this dumb bot, but oh well, ill try using my mc license for the bot so i can make the server online to see if the bot sees players… i think ill need to buy a new minecraft tho not sure 😭, i tried adding like 4 fallbacks to see if it would follow something, but it only detected itself and decided to follow itself, great idea, yep thats it, at least it says hi very efficiently and fast"}, {"post_id": 11375, "ts": "2026-06-18T16:45:06Z", "hours": 1.6778, "text": "I made the bot itself, instaleld the dependencies, like mineflayer and dotenv, tried running it, had problems with the node version so i needed to install a new version and then it ran! It still doesnt work much, just spawns and says the message that i programmed it to say (i was bored dont judge 😭) lol, oh also it has a weird bug that it crashes whenever it gets damage"}]...
|
Title: MCBot by @Serra00 | Stardance
Devlogs:
I m Title: MCBot by @Serra00 | Stardance
Devlogs:
I made the bot itself, instaleld the dependencies, like mineflayer and dotenv, tried running it, had problems with the node version so i needed to install a new version and then it ran! It still doesnt work much, just spawns and says the message that i programmed it to say (i was bored dont judge 😭) lol, oh also it has a weird bug that it crashes whenever it gets damage
I am starting to hate this dumb bot, but oh well, ill try using my mc license for the bot so i can make the server online to see if the bot sees players… i think ill need to buy a new minecraft tho not sure 😭, i tried adding like 4 fallbacks to see if it would follow something, but it only detected itself and decided to follow itself, great idea, yep thats it, at least it says hi very efficiently and fast
I made the bot and it works, i tried finishing it ASAP so i could then lock in for my main project, a game, but it still works really well. it can mine, battle with mobs, follow and other stuff, since it is controlled by an ai and can be made to do something.
made installation easier for my bot
Bug fixes, mainly I have: improved AI model to gpt 5.4 mini so it is a lil bit “smarter”, gave also better rules so it doesnt just build a house 100% glass with no door and no tools.
Ships:
I made an AI bot that can do various tasks. It was hard to make the player see the other players, since the server was offline and for some reason mineflayer refused to read namelists and locations when server is off. I had fun playing with it for some time, until my game crashed and my save file got corrupted somehow, but it is fun to play with it, especially with friends because you literally have an ai to mine and do the most boring and time consuming tasks.
I made an AI bot that can do various tasks. It was hard to make the player see the other players, since the server was offline and for some reason mineflayer refused to read namelists and locations when server is off. I had fun playing with it for some time, until my game crashed and my save file got corrupted somehow, but it is fun to play with it, especially with friends because you literally have an ai to mine and do the most boring and time consuming tasks....
|
1793937367.797002
|
1794023767.797002
|
|
18570
|
Enigma by @reimunyancat | Stardance
|
reimunyancat
|
1
|
31.75
|
135
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T04:49:50Z", "hours": 7.0, "multiplier": 19.69, "payout": 135, "blessing": "neutral", "text": "Enigma I built a working Enigma machine you can use, take apart, and see the electricity move through — all in the browser. Not a diagram of one, not a gif: the real cipher engine, wired to a 3D model you can rotate, peel open, and rewire with your hands. What it is The brain is a historically correct Enigma engine written once in C++ and shared two ways — a CLI binary and a WASM module compiled with Emscripten — so the thing in your browser ciphers letter-for-letter the same as the command line. Double-stepping, ring settings, reflector, plugboard, all of it. It passes the standard test vector (rotors I·II·III / reflector B / rings TOU / start HOU / plugs ABCDXZ → TOUHOU encrypts to MQGGFI ). On top of that engine sits a Three.js machine you can actually operate: type on the keyboard, the rotors turn to their real angles and the matching lamp lights up. Flip on X-ray and the wooden case goes translucent, revealing all 26 wires inside — and the exact current path of the key you just pressed lights up and sparks along the wire, traced straight from the engine’s own answer. What was hard The engine was the easy part. Making it look like the real thing is what fought back. The case isn’t one lid — a real Enigma comes apart in three: the main hinged lid, a fold-down flap over the plugboard, and a separate rotor cover with little letter windows. Each one had to hinge and occlude correctly without clipping through the others. The plugboard cables kept poking through the closed front cover. I spent two rounds shrinking how far they sagged before realizing the problem was never depth — the cables sat in front of the closed cover on the z-axis, so they’d punch through the wood no matter how short I made them. Pull them back behind the cover face and it finally read right. Reflector and entry wheel looked like “a rotor with the letters erased.” Turns out on the real machine they’re fixed inside the housing and never visible from outside — so I hid them in normal view and only expose the contacts under X-ray. What I’m proud of The plugboard you wire with your hands. Grab a socket, drag to another, and a cable snaps in; the wire stretches under your cursor while you drag, the target socket highlights blue, and the patch feeds straight back into the engine so the encryption and the X-ray wiring update live. Pulling a cable out works the same way. It feels like handling the real hardware, not clicking a form. And the honesty of it: one engine, verified against a known test vector, with nothing faked between what you see and what actually ciphers. How to test it Type something. Watch the rotors step and the lamps light. Long messages show the rotors carrying over, double-step and all. Hit X-ray. The case turns to glass; press a key and follow the lit current path through plugboard → rotors → reflector → back out to the lamp. Wire the plugboard. Drag between two sockets to pair them, drag a cable out to remove it — the cipher changes immediately. Open it up. Toggle the lid, the rotor cover, and the front flap to see how the real case comes apart. Trust but verify. Set rotors I·II·III, reflector B, rings TOU, start HOU, plugs ABCDXZ, and type TOUHOU — you should get MQGGFI , the canonical Enigma test vector. ", "repo": "https://github.com/reimunyancat/enigma", "demo": "https://reimunyancat.github.io/enigma/"}]...
|
[{"post_id": 64094, "ts": "202 [{"post_id": 64094, "ts": "2026-09-08T08:48:35Z", "hours": 6.5314, "text": "Devlog #11 Last devlog ended with me calling statistics-only scoring the last fake thing in the cracker, and promising the real attack. This is that The actual attack A crib is a guessed fragment of plaintext — operators were creatures of habit, and words like “Meldung” (report) show up in everything. With a crib, the cracker stops scoring vibes entirely: every candidate setting decrypts the text, and the crib either appears in it letter-for-letter or it doesn’t. Six exact letters out of 17,576 start positions leaves one setting standing. The five short intercepts that statistics couldn’t touch now each carry a crib — FUNKEN, MORGEN, STEINECKE (the Germans really did sign Steinecke twice) — and all of them break in under a second. One historical filter made it in: a letter never encrypts to itself, so a crib can only sit where no letter collides with the ciphertext. Fixed-offset guesses get rejected on that rule before the search even runs. The answer that was wrong and right The fun started in testing. One intercept’s documented start position is SWV, but my cracker’s top hit came back RVV — and RVV decrypts the message perfectly. Letter for letter, not just the crib window. I was convinced my engine was broken, so I compiled the reference C++ natively and compared: identical output on both. It’s not a bug. This key’s middle rotor sits exactly on its notch, so the famous double-step kicks the left rotor forward on the very first keypress — (R,V,V) and (S,W,V) converge to the same machine state before a single letter is encrypted. Two daily keys, one message. The codebreakers knew this class of equivalent settings; I rediscovered it by being confused for an hour. Next up The guided demo — the machine types, X-rays its own wiring, and cracks its own message while a first-time visitor watches."}, {"post_id": 60827, "ts": "2026-09-03T13:34:28Z", "hours": 8.8478, "text": "Devlog #10 This one is two small things instead of one big thing — share links, and a challenge mode built from real 1941 intercepts — plus an embarrassing amount of time spent not writing code. Most of it still isn’t properly wired in, but the hours happened, so here’s the honest checkpoint. Share links The whole machine state — rotors, reflector, rings, start position, plugboard — plus a message now fits in the URL hash, like #I.II.III.B:TOU:HOU:ABCDXZ:HELLOWORLD . Opening the link configures the machine and runs the message through it, so the person on the other end watches their lampboard spell out the plaintext. “I encrypted this, try reading it” finally works as a link. My first version of the format forgot the reflector. Anyone opening those links would have gotten confident garbage, and I only noticed while writing the parser. It costs four characters in the URL. Real intercepts, verified I didn’t want to invent fake historical messages, so I went looking for real ones — and that hunt ate the first chunk of the day. Ended up at Ostwald and Weierud’s Cryptologia paper (2017)( https://cryptocellar.org ), which lists 13 authentic Wehrmacht messages from 1941, transcribed from the actual message forms, with keys recovered by modern cryptanalysis. I picked six — from a three-word “morning report canceled” up to an SS tank division complaining that two other divisions are blocking its road. Each form starts with a 5-letter group that looks like ciphertext but isn’t — it’s the Kenngruppe, a network discriminant. The paper warns you to skip it before decrypting, and for once I read the instructions first. All six decrypt on the site’s engine to exactly the plaintext on the forms. The cracker only spoke English The crack mode scored decryptions by English letter frequencies. These messages are German. Added a German frequency table and scored by whichever language fits better. Still not enough for the short ones. I ran a parameter sweep over the scoring weights and the 18-to-76-letter intercepts never rank first under any combination. That’s not a bug, it’s information theory — and it’s exactly why Bletchley Park needed cribs instead of brute force. So the panel is honest about it: only the 214-letter intercept gets a “Crack positions” button (it recovers the real start position, SDV, in about half a second), and the short ones say why they’re decrypt-only. Where the hours actually went Reading a cryptology paper instead of writing components. Rewriting the challenge card layout more than once. Re-running the sweep every time I changed my mind about the scoring. The code diff is small; the day was not. The remaining wiring is still in progress. Next up Crib-based cracking, the known-plaintext attack. That’s what actually breaks the short ones, and it’s the historically accurate method"}, {"post_id": 57387, "ts": "2026-08-29T15:02:55Z", "hours": 9.3711, "text": "Improvements made based on feedback English + Korean support has been applied. English is the default. There was a point raised in the feedback that the translator did not work properly, making it difficult to read. I apologize for not being considerate of you all. A guide panel has been added. It was added because feedback suggested that it would be helpful to have text explanations of how it works. A brief explanation of the Enigma and its principles has been added using a translator. A performance mode has been added. I received feedback that the browser was lagging, so I was struggling to figure out how to handle it. Depending on the mode, I lowered the pixel ratio or optimized the wiring calculations. The logo engraving has been changed. The black background plate has been removed, and a transparent texture with a dark groove and a bright rim has been created using a dual pass to make it look like it was carved into wood. To be honest, it still hasn’t reached the level I wanted, but I have wasted so much time here that I am honestly exhausted and plan to postpone it until next time. Rotation lock and camera presets have been added. I simply did exactly what was requested in the feedback, so there isn’t much to say about it. The crack mode was created simply because I was caught up in the strange idea that if there is an original cipher, there should also be a decryption function. It was the absolute hell; I will never do it again. Web workers use the same WASM engine as the simulator to [set] initial positions Scoring through brute force is difficult, involving the Interval of Concordance (IoC) as the primary axis plus the chi-square auxiliary for character frequency, plaintext previews for the top 5, and a button to apply directly to the machine… Trial and error: When I scored only the first 48 characters of each candidate in the full scope, a completely wrong rotor order happened to get a higher IoC and beat the correct answer (0.0677 vs 0.0651). However, when I selected the top 8 from a 64-character sample and re-scored and reordered the entire sentence, the correct answer won by a landslide (0.058 vs 0.012). Complete reconstruction of X-ray wiring. Honestly, I left the existing wiring as it was because it was a hassle, but it was tough working on it this time. I roughly standardized the thickness and connected the wires properly. Honestly, I still need to tidy it up a bit more, but I’m exhausted. Lastly, since some people claim my devlog was written by AI, I intentionally didn’t write a title or use Markdown this time. However, I’m not sure what the best approach would be. Please give me lots of feedback in the comments."}, {"post_id": 14774, "ts": "2026-06-24T00:17:32Z", "hours": 1.18, "text": "Devlog #6 I asked the question — “is this actually accurate?” — and the answer was no. A real Enigma’s case isn’t one big lid you flip up. It splits into three: the main hinged lid, a fold-down flap in front of the plugboard, and a separate cover over the rotors with little letter windows. So I rebuilt all three. What actually works now Plugboard front flap. On the real machine the plugboard sat behind a panel that folds down from a hinge at the bottom. I added that front panel and tied it to the lid state, so closing the lid folds the flap up over the front too — the way it would look packed away for transport. Rotor cover (Walzenabdeckung). Instead of leaving the rotors fully exposed, there’s now a cover that hides everything except three letter windows and the finger-wheel slits, with brass bezels around each window. It rides its own ▢ 로터 toggle — closed gives the authentic operating look, open shows the rotors. Lid interior. The inside of the lid used to be empty; the real one carried spare bulbs, red/green filters, and a metal plate. Added a bulb-holder strip, the two filters, and a nameplate — and kept them on independent materials so they stay solid in X-ray instead of going transparent along with the case. Stuff that tripped me up Fully sinking the rotors into a well — so only the finger wheel and a single letter peek out, like the real machine — tangles with the X-ray wiring coordinates I’d already placed. Rather than move all the internal geometry, I got the same read from the cover: close it and you only ever see the letter windows. Same look, none of the rework."}, {"post_id": 14017, "ts": "2026-06-23T00:16:51Z", "hours": 1.0214, "text": "Devlog #5 The engine has been correct for a while now — rotor stepping, ring settings, reflector, all of it. This session wasn’t about correctness, it was about feel : making the wooden lid open and shut for real, and making a keypress light up an actual path of current through the machine instead of just blinking a lamp at the end. Then I committed all three changes in one go and the build blew up in my face. Worth it. What actually works now The lid hinges open and closed. A ▣ 뚜껑 toggle drives a hinge pivot, and the render loop lerps it toward the target angle so it swings instead of snapping shut. Rebuilt the lid as a real box. My first lid was a single flat plank — it clipped straight through the rotors and only covered half the keyboard. Now it’s a hollow box (top + front + two side walls) with the hinge raised above the rotor tops, so it clears everything when it closes. Live current path. Until now, pressing a key did nothing to the cabling — the keyboard-to-plugboard route was never visualized at all. Now I take the trace the engine hands back and draw the whole route — keycap → plugboard → rotor contacts → lamp — as one glowing tube, with a spark running along it. Heavier materials pass. Nudged the wood/brass/steel roughness, metalness, and env-map strength a notch heavier to kill the last of the plastic look. Stuff that tripped me up I committed all three changes at once and the build died on boot — three TypeScript errors, all from one mistake. My new lid store collided with an existing lid mesh variable, so the compiler threw Property 'subscribe' does not exist... , an implicit- any fell out of that, and on top of it I’d pasted over and deleted a partnerOf helper. Aliasing the import to lidStore and restoring the helper cleared all three at once. Lesson, paid the usual way: when you add a store with the same name as an existing mesh variable, alias it at the import line first — before TypeScript makes you. Next up The case opens and the wiring lights up, but it isn’t historically right yet. The real Enigma’s case came apart in three pieces — the main lid, a fold-down flap in front of the plugboard, and a separate cover over the rotors — and mine is still one lid sitting over fully exposed rotors. Next session: make it match the real thing."}, {"post_id": 12366, "ts": "2026-06-20T05:50:39Z", "hours": 2.8122, "text": "X-ray mode This is the part I said I was actually here for. Flip a switch and the wooden case turns to glass so you can see what’s been sealed inside the whole time. Getting it to look right was the fun part. Getting it to stay working cost me the better part of an afternoon. What I built Case → glass. The casing shells (body, rotor housing, plugboard panel) drop to ~28% opacity with depth-writing turned off, so you can see straight through the wood. A lit interior. A warm point light kicks on inside the case the moment X-ray turns on — otherwise the guts just read as a dark smudge instead of actual hardware. The hidden hardware. Built everything that’s normally sealed away: a battery block with brass terminals, and thick orange cable looms routing down beneath the rotors. The wiring map. A 26-strand bundle draws the actual internal permutation for the current rotor / ring / position setup, so what you see under the glass matches what the engine is really doing. Then it went dark — on a fresh load only Everything looked perfect while I was building it. Then I cleared the cache, cold-booted the dev server to check it clean… and X-ray did nothing . Solid wood. The button highlighted, the wiring was clearly toggling on, the opacity was being set — and the case flat-out refused to turn transparent. I burned a good while convinced a git reset had eaten the fix. The one-line culprit It wasn’t git — the code was byte-for-byte the version I’d already signed off on. The real reason: in three.js (r137+), if you flip a material’s transparent flag at runtime, the change won’t take effect unless you also set material.needsUpdate = true . My toggle was setting transparent and opacity but never needsUpdate , so blending never actually switched on and opacity = 0.28 was silently ignored. It “worked” during development purely because hot-reload kept rebuilding the materials from scratch — a real cold load exposed it instantly. One line in the toggle loop and the glass came back. Next up: make the current actually flow — each keypress lighting up the live signal path through the rotors and off the reflector, with a real cable running from the key you pressed into the loom, so the glow starts where your finger does."}, {"post_id": 11108, "ts": "2026-06-18T05:15:28Z", "hours": 1.0419, "text": "Hardware fidelity pass — “wait, is this actually what the real Enigma looks like?” After the electrical signal path was rendering, I pulled up real Kriegsmarine M4 photos to compare — and the 3D model didn’t hold up. So before adding anything new, this one is a “make it historically accurate first” pass. What was wrong Floating letters. The rotor alphabet was hovering in mid-air beside each wheel instead of being on it. On the real machine the letters are engraved around the rotor’s circumference and you read one through a small window. The reflector and entry wheel looked fake. They were basically copy-pasted rotors with the letters wiped off. In reality the reflector (UKW) and entry wheel (ETW) are fixed and tucked inside the housing — there are no spinning lettered drums there at all. Lopsided UI. A huge dead zone under the input field was squashing the 3D view into a thin strip. Input/output drift. The I/O readout was center-aligned, so every keypress shoved the existing letters further left. Genuinely uncomfortable to type on. What I did Wrapped the alphabet onto the rotor circumference with engraved grooves, contact rings, and brass window bezels, so you read it through the top window like the real thing. Rebuilt the reflector and ETW as smaller dark drums seated in the housing, and set them to stay hidden in the normal view — they’ll surface later in X-ray mode, where the internal wiring belongs. Set the 3D viewport to flex: 1 so it fills the space, and re-framed the camera. Switched the I/O readout to a fixed-width, left-anchored layout, so input and output line up and grow rightward instead of sliding around. A lesson paid for in blood Squashed a stack of messy single-digit commits into one clean commit — then ran git reset --hard with an uncommitted layout fix still in the working tree and watched it evaporate. Re-did it in two minutes, but the takeaway stands: run git status before --hard . Always. Next up: the X-ray translucent mode that exposes the internal wiring and lights up the live signal path through the rotors. That’s the part I actually started this whole thing for."}, {"post_id": 9008, "ts": "2026-06-15T00:56:55Z", "hours": 0.5225, "text": "Electrical signal implementation"}, {"post_id": 8746, "ts": "2026-06-14T15:27:12Z", "hours": 0.3472, "text": "I created an initial version to beautifully implement the existing CLI Enigma on the web."}]...
|
Title: Enigma by @reimunyancat | Stardance
Devlog Title: Enigma by @reimunyancat | Stardance
Devlogs:
I created an initial version to beautifully implement the existing CLI Enigma on the web.
Electrical signal implementation
Hardware fidelity pass — “wait, is this actually what the real Enigma looks like?” After the electrical signal path was rendering, I pulled up real Kriegsmarine M4 photos to compare — and the 3D model didn’t hold up. So before adding anything new, this one is a “make it historically accurate first” pass. What was wrong Floating letters. The rotor alphabet was hovering in mid-air beside each wheel instead of being on it. On the real machine the letters are engraved around the rotor’s circumference and you read one through a small window. The reflector and entry wheel looked fake. They were basically copy-pasted rotors with the letters wiped off. In reality the reflector (UKW) and entry wheel (ETW) are fixed and tucked inside the housing — there are no spinning lettered drums there at all. Lopsided UI. A huge dead zone under the input field was squashing the 3D view into a thin strip. Input/output drift. The I/O readout was center-aligned, so every keypress shoved the existing letters further left. Genuinely uncomfortable to type on. What I did Wrapped the alphabet onto the rotor circumference with engraved grooves, contact rings, and brass window bezels, so you read it through the top window like the real thing. Rebuilt the reflector and ETW as smaller dark drums seated in the housing, and set them to stay hidden in the normal view — they’ll surface later in X-ray mode, where the internal wiring belongs. Set the 3D viewport to flex: 1 so it fills the space, and re-framed the camera. Switched the I/O readout to a fixed-width, left-anchored layout, so input and output line up and grow rightward instead of sliding around. A lesson paid for in blood Squashed a stack of messy single-digit commits into one clean commit — then ran git reset --hard with an uncommitted layout fix still in the working tree and watched it evaporate. Re-did it in two minutes, but the takeaway stands: run git status before --hard . Always. Next up: the X-ray translucent mode that exposes the internal wiring and lights up the live signal path through the rotors. That’s the part I actually started this whole thing for.
X-ray mode This is the part I said I was actually here for. Flip a switch and the wooden case turns to glass so you can see what’s been sealed inside the whole time. Getting it to look right was the fun part. Getting it to stay working cost me the better part of an afternoon. What I built Case → glass. The casing shells (body, rotor housing, plugboard panel) drop to ~28% opacity with depth-writing turned off, so you can see straight through the wood. A lit interior. A warm point light kicks on inside the case the moment X-ray turns on — otherwise the guts just read as a dark smudge instead of actual hardware. The hidden hardware. Built everything that’s normally sealed away: a battery block with brass terminals, and thick orange cable looms routing down beneath the rotors. The wiring map. A 26-strand bundle draws the actual internal permutation for the current rotor / ring / position setup, so what you see under the glass matches what the engine is really doing. Then it went dark — on a fresh load only Everything looked perfect while I was building it. Then I cleared the cache, cold-booted the dev server to check it clean… and X-ray did nothing . Solid wood. The button highlighted, the wiring was clearly toggling on, the opacity was being set — and the case flat-out refused to turn transparent. I burned a good while convinced a git reset had eaten the fix. The one-line culprit It wasn’t git — the code was byte-for-byte the version I’d already signed off on. The real reason: in three.js (r137+), if you flip a material’s transparent flag at runtime, the change won’t take effect unless you also set material.needsUpdate = true . My toggle was setting transparent and opacity but never needsUpdate , so blending never actually switched on and opacity = 0.28 was silently ignored. It “worked” during development purely because hot-reload kept rebuilding the materials from scratch — a real cold load exposed it instantly. One line in the toggle loop and the glass came back. Next up: make the current actually flow — each keypress lighting up the live signal path through the rotors and off the reflector, with a real cable running from the key you pressed into the loom, so the glow starts where your finger does.
Devlog #5 The engine has been correct for a while now — rotor stepping, ring settings, reflector, all of it. This session wasn’t about correctness, it was about feel : making the wooden lid open and shut for real, and making a keypress light up an actual path of current through the machine instead of just blinking a lamp at the end. Then I committed all three changes in one go and the build blew up in my face. Worth it. What actually works now The lid hinges open and closed. A ▣ 뚜껑 toggle drives a hinge pivot, and the render loop lerps it toward the target angle so it swings instead of snapping shut. Rebuilt the lid as a real box. My first lid was a single flat plank — it clipped straight through the rotors and only covered half the keyboard. Now it’s a hollow box (top + front + two side walls) with the hinge raised above the rotor tops, so it clears everything when it closes. Live current path. Until now, pressing a key did nothing to the cabling — the keyboard-to-plugboard route was never visualized at all. Now I take the trace the engine hands back and draw the whole route — keycap → plugboard → rotor contacts → lamp — as one glowing tube, with a spark running along it. Heavier materials pass. Nudged the wood/brass/steel roughness, metalness, and env-map strength a notch heavier to kill the last of the plastic look. Stuff that tripped me up I committed all three changes at once and the build died on boot — three TypeScript errors, all from one mistake. My new lid store collided with an existing lid mesh variable, so the compiler threw Property 'subscribe' does not exist... , an implicit- any fell out of that, and on top of it I’d pasted over and deleted a partnerOf helper. Aliasing the import to lidStore and restoring the helper cleared all three at once. Lesson, paid the usual way: when you add a store with the same name as an existing mesh variable, alias it at the import line first — before TypeScript makes you. Next up The case opens and the wiring lights up, but it isn’t historically right yet. The real Enigma’s case came apart in three pieces — the main lid, a fold-down flap in front of the plugboard, and a separate cover over the rotors — and mine is still one lid sitting over fully exposed rotors. Next session: make it match the real thing.
Devlog #6 I asked the question — “is this actually accurate?” — and the answer was no. A real Enigma’s case isn’t one big lid you flip up. It splits into three: the main hinged lid, a fold-down flap in front of the plugboard, and a separate cover over the rotors with little letter windows. So I rebuilt all three. What actually works now Plugboard front flap. On the real machine the plugboard sat behind a panel that folds down from a hinge at the bottom. I added that front panel and tied it to the lid state, so closing the lid folds the flap up over the front too — the way it would look packed away for transport. Rotor cover (Walzenabdeckung). Instead of leaving the rotors fully exposed, there’s now a cover that hides everything except three letter windows and the finger-wheel slits, with brass bezels around each window. It rides its own ▢ 로터 toggle — closed gives the authentic operating look, open shows the rotors. Lid interior. The inside of the lid used to be empty; the real one carried spare bulbs, red/green filters, and a metal plate. Added a bulb-holder strip, the two filters, and a nameplate — and kept them on independent materials so they stay solid in X-ray instead of going transparent along with the case. Stuff that tripped me up Fully sinking the rotors into a well — so only the finger wheel and a single letter peek out, like the real machine — tangles with the X-ray wiring coordinates I’d already placed. Rather than move all the internal geometry, I got the same read from the cover: close it and you only ever see the letter windows. Same look, none of the rework.
Improvements made based on feedback English + Korean support has been applied. English is the default. There was a point raised in the feedback that the translator did not work properly, making it difficult to read. I apologize for not being considerate of you all. A guide panel has been added. It was added because feedback suggested that it would be helpful to have text explanations of how it works. A brief explanation of the Enigma and its principles has been added using a translator. A performance mode has been added. I received feedback that the browser was lagging, so I was struggling to figure out how to handle it. Depending on the mode, I lowered the pixel ratio or optimized the wiring calculations. The logo engraving has been changed. The black background plate has been removed, and a transparent texture with a dark groove and a bright rim has been created using a dual pass to make it look like it was carved into wood. To be honest, it still hasn’t reached the level I wanted, but I have wasted so much time here that I am honestly exhausted and plan to postpone it until next time. Rotation lock and camera presets have been added. I simply did exactly what was requested in the feedback, so there isn’t much to say about it. The crack mode was created simply because I was caught up in the strange idea that if there is an original cipher, there should also be a decryption function. It was the absolute hell; I will never do it again. Web workers use the same WASM engine as the simulator to [set] initial positions Scoring through brute force is difficult, involving the Interval of Concordance (IoC) as the primary axis plus the chi-square auxiliary for character frequency, plaintext previews for the top 5, and a button to apply directly to the machine… Trial and error: When I scored only the first 48 characters of each candidate in the full scope, a completely wrong rotor order happened to get a higher IoC and beat the correct answer (0.0677 vs 0.0651). However, when I selected the top 8 from a 64-character sample and re-scored and reordered the entire sentence, the correct answer won by a landslide (0.058 vs 0.012). Complete reconstruction of X-ray wiring. Honestly, I left the existing wiring as it was because it was a hassle, but it was tough working on it this time. I roughly standardized the thickness and connected the wires properly. Honestly, I still need to tidy it up a bit more, but I’m exhausted. Lastly, since some people claim my devlog was written by AI, I intentionally didn’t write a title or use Markdown this time. However, I’m not sure what the best approach would be. Please give me lots of feedback in the comments.
Devlog #10 This one is two small things instead of one big thing — share links, and a challenge mode built from real 1941 intercepts — plus an embarrassing amount of time spent not writing code. Most of it still isn’t properly wired in, but the hours happened, so here’s the honest checkpoint. Share links The whole machine state — rotors, reflector, rings, start position, plugboard — plus a message now fits in the URL hash, like #I.II.III.B:TOU:HOU:ABCDXZ:HELLOWORLD . Opening the link configures the machine and runs the message through it, so the person on the other end watches their lampboard spell out the plaintext. “I encrypted this, try reading it” finally works as a link. My first version of the format forgot the reflector. Anyone opening those links would have gotten confident garbage, and I only noticed while writing the parser. It costs four characters in the URL. Real intercepts, verified I didn’t want to invent fake historical messages, so I went looking for real ones — and that hunt ate the first chunk of the day. Ended up at Ostwald and Weierud’s Cryptologia paper (2017)( https://cryptocellar.org ), which lists 13 authentic Wehrmacht messages from 1941, transcribed from the actual message forms, with keys recovered by modern cryptanalysis. I picked six — from a three-word “morning report canceled” up to an SS tank division complaining that two other divisions are blocking its road. Each form starts with a 5-letter group that looks like ciphertext but isn’t — it’s the Kenngruppe, a network discriminant. The paper warns you to skip it before decrypting, and for once I read the instructions first. All six decrypt on the site’s engine to exactly the plaintext on the forms. The cracker only spoke English The crack mode scored decryptions by English letter frequencies. These messages are German. Added a German frequency table and scored by whichever language fits better. Still not enough for the short ones. I ran a parameter sweep over the scoring weights and the 18-to-76-letter intercepts never rank first under any combination. That’s not a bug, it’s information theory — and it’s exactly why Bletchley Park needed cribs instead of brute force. So the panel is honest about it: only the 214-letter intercept gets a “Crack positions” button (it recovers the real start position, SDV, in about half a second), and the short ones say why they’re decrypt-only. Where the hours actually went Reading a cryptology paper instead of writing components. Rewriting the challenge card layout more than once. Re-running the sweep every time I changed my mind about the scoring. The code diff is small; the day was not. The remaining wiring is still in progress. Next up Crib-based cracking, the known-plaintext attack. That’s what actually breaks the short ones, and it’s the historically accurate method
Devlog #11 Last devlog ended with me calling statistics-only scoring the last fake thing in the cracker, and promising the real attack. This is that The actual attack A crib is a guessed fragment of plaintext — operators were creatures of habit, and words like “Meldung” (report) show up in everything. With a crib, the cracker stops scoring vibes entirely: every candidate setting decrypts the text, and the crib either appears in it letter-for-letter or it doesn’t. Six exact letters out of 17,576 start positions leaves one setting standing. The five short intercepts that statistics couldn’t touch now each carry a crib — FUNKEN, MORGEN, STEINECKE (the Germans really did sign Steinecke twice) — and all of them break in under a second. One historical filter made it in: a letter never encrypts to itself, so a crib can only sit where no letter collides with the ciphertext. Fixed-offset guesses get rejected on that rule before the search even runs. The answer that was wrong and right The fun started in testing. One intercept’s documented start position is SWV, but my cracker’s top hit came back RVV — and RVV decrypts the message perfectly. Letter for letter, not just the crib window. I was convinced my engine was broken, so I compiled the reference C++ natively and compared: identical output on both. It’s not a bug. This key’s middle rotor sits exactly on its notch, so the famous double-step kicks the left rotor forward on the very first keypress — (R,V,V) and (S,W,V) converge to the same machine state before a single letter is encrypted. Two daily keys, one message. The codebreakers knew this class of equivalent settings; I rediscovered it by being confused for an hour. Next up The guided demo — the machine types, X-rays its own wiring, and cracks its own message while a first-time visitor watches.
Ships:
Enigma I built a working Enigma machine you can use, take apart, and see the electricity move through — all in the browser. Not a diagram of one, not a gif: the real cipher engine, wired to a 3D model you can rotate, peel open, and rewire with your hands. What it is The brain is a historically correct Enigma engine written once in C++ and shared two ways — a CLI binary and a WASM module compiled with Emscripten — so the thing in your browser ciphers letter-for-letter the same as the command line. Double-stepping, ring settings, reflector, plugboard, all of it. It passes the standard test vector (rotors I·II·III / reflector B / rings TOU / start HOU / plugs ABCDXZ → TOUHOU encrypts to MQGGFI ). On top of that engine sits a Three.js machine you can actually operate: type on the keyboard, the rotors turn to their real angles and the matching lamp lights up. Flip on X-ray and the wooden case goes translucent, revealing all 26 wires inside — and the exact current path of the key you just pressed lights up and sparks along the wire, traced straight from the engine’s own answer. What was hard The engine was the easy part. Making it look like the real thing is what fought back. The case isn’t one lid — a real Enigma comes apart in three: the main hinged lid, a fold-down flap over the plugboard, and a separate rotor cover with little letter windows. Each one had to hinge and occlude correctly without clipping through the others. The plugboard cables kept poking through the closed front cover. I spent two rounds shrinking how far they sagged before realizing the problem was never depth — the cables sat in front of the closed cover on the z-axis, so they’d punch through the wood no matter how short I made them. Pull them back behind the cover face and it finally read right. Reflector and entry wheel looked like “a rotor with the letters erased.” Turns out on the real machine they’re fixed inside the housing and never visible from outside — so I hid them in normal view and only expose the contacts under X-ray. What I’m proud of The plugboard you wire with your hands. Grab a socket, drag to another, and a cable snaps in; the wire stretches under your cursor while you drag, the target socket highlights blue, and the patch feeds straight back into the engine so the encryption and the X-ray wiring update live. Pulling a cable out works the same way. It feels like handling the real hardware, not clicking a form. And the honesty of it: one engine, verified against a known test vector, with nothing faked between what you see and what actually ciphers. How to test it Type something. Watch the rotors step and the lamps light. Long messages show the rotors carrying over, double-step and all. Hit X-ray. The case turns to glass; press a key and follow the lit current path through plugboard → rotors → reflector → back out to the lamp. Wire the plugboard. Drag between two sockets to pair them, drag a cable out to remove it — the cipher changes immediately. Open it up. Toggle the lid, the rotor cover, and the front flap to see how the real case comes apart. Trust but verify. Set rotors I·II·III, reflector B, rings TOU, start HOU, plugs ABCDXZ, and type TOUHOU — you should get MQGGFI , the canonical Enigma test vector. ...
|
1793738883.6641135
|
1794602883.6641135
|