|
57013
|
Business Discord Bot by @rnabilaltamis14 | Stardan Business Discord Bot by @rnabilaltamis14 | Stardance...
|
rnabilaltamis14
|
0
|
56.53
|
0
|
[]
|
[{"post_id": 69502, "ts": "202 [{"post_id": 69502, "ts": "2026-09-17T06:02:03Z", "hours": 10.6494, "text": "UPDATE: ### finnaly found the lost file, currently making the UI"}, {"post_id": 68045, "ts": "2026-09-14T12:54:35Z", "hours": 5.2464, "text": "REALLY BAD NEWS, hello people, yesterday im moving to arch linux from windows, andd the files are not saved/missing currently on progress to get it back, probably in one of my flashdisk"}, {"post_id": 65809, "ts": "2026-09-11T06:05:28Z", "hours": 9.2564, "text": "ON FIRE!! currently still fixing this, kind of feel bad for my time management"}, {"post_id": 64611, "ts": "2026-09-09T04:02:33Z", "hours": 9.8961, "text": "MISTAKE! good morning everyone (im live in +7 utc) so quick update here i made structural and debugging mistake at prototype from making new feature playable by some editing in one code only and now its spilled in discord client this project is already running 31 hour, very long for just a bot, but with this problem it could go more as 35-40 which is far from my planning in only 27 hour thankyou and idk if this gonna be accepted or no, wasted time so much for such critical mistake"}, {"post_id": 63413, "ts": "2026-09-07T07:20:03Z", "hours": 9.9372, "text": "currently dividing it progress: GREAT ERROR EVERYWHERE"}, {"post_id": 61405, "ts": "2026-09-04T09:26:43Z", "hours": 11.5461, "text": "working working"}]...
|
Title: Business Discord Bot by @rnabilaltamis14 | Title: Business Discord Bot by @rnabilaltamis14 | Stardance
Devlogs:
working working
currently dividing it progress: GREAT ERROR EVERYWHERE
MISTAKE! good morning everyone (im live in +7 utc) so quick update here i made structural and debugging mistake at prototype from making new feature playable by some editing in one code only and now its spilled in discord client this project is already running 31 hour, very long for just a bot, but with this problem it could go more as 35-40 which is far from my planning in only 27 hour thankyou and idk if this gonna be accepted or no, wasted time so much for such critical mistake
ON FIRE!! currently still fixing this, kind of feel bad for my time management
REALLY BAD NEWS, hello people, yesterday im moving to arch linux from windows, andd the files are not saved/missing currently on progress to get it back, probably in one of my flashdisk
UPDATE: ### finnaly found the lost file, currently making the UI...
|
1792688018.6844091
|
1793292818.6844091
|
|
38517
|
MicroSim by @RylandGrace | Stardance
|
RylandGrace
|
0
|
56.46
|
0
|
[]
|
[{"post_id": 50541, "ts": "202 [{"post_id": 50541, "ts": "2026-08-19T18:47:26Z", "hours": 10.6097, "text": "Started to work on some settings here and there. This will allow me to actually optimize it because it’s going to be easy to pinpoint what lines slow down the generation process. I also finished the controls rebinding settings too. Doesn’t seem that long but for whatever reason, it took me a long, long time to do so. Cheers! Ryland Grace"}, {"post_id": 47152, "ts": "2026-08-14T20:37:56Z", "hours": 5.0025, "text": "Heya There! I made some fairly major progress on the Main Menu. I finally more or less chose the general theme for it, as well as added a couple settings as follows: Resolution V-Sync Max Framerate Borderless, Windowed/Fullscreen Shaders Low Quality, where the resolution of the sprites is halved Audio controls for Master, Music and SFX bus’ That’s pretty much it for the day. Cheers! Ryland Grace"}, {"post_id": 45905, "ts": "2026-08-12T17:41:51Z", "hours": 4.7906, "text": "Kept working on the GUI. Button by button, script by script, the progress keeps going because it sees no end, no bound. I’ve set up a proper tab container instead of my poor excuse of one, as well as started to make some display/audio settings. I also added some background music. GUI really is a pain, but honestly? I kind of like it here. I feel at peace. Cheers! Ryland Grace"}, {"post_id": 45151, "ts": "2026-08-11T13:44:12Z", "hours": 4.6967, "text": "Started working on the main menu as well as the GUI. I did a LOT of brainstorming on what kind of theme I should adopt, and I’m still not sure. I also fixed the overlapping problem. Or, rather, the lack of it. If you look up a sample under a microscope, you would notice the suprising abundance of the overlapping. However, thanks to my code, I am able to limit the overlapping to a certain degree. Cheers! Ryland Grace PS.: GUI is a pain. It really is."}, {"post_id": 44696, "ts": "2026-08-10T17:12:51Z", "hours": 6.8511, "text": "Quite a bit of progress today: I made all the cells spawn in little packs of roughly 1-10 cells each, as well as being of the same type together. To do this, I originally wanted to adhere to some sort of randomized noise texture to affect the chances of a cell spawning on a selected pixel, but, after quite a few facepalms, I ended up opting for spawning first a few primary cells, and then spawn a bunch of secondary cells around them. That means that it’s a tad less flexible, but for the time being, that’s what I’ll use. However, this did add unfortunately quite a bit of lag, so either I’ll have to heavily optimize it, or if that’s just not possible, I’ll have to add a loading screen, which I have no idea how to do. I also started working a bit on the UI and main menu. That’s about it for today! Doesn’t sound like too much, but I promise you, that was genuinely difficult. Cheers! Ryland Grace"}, {"post_id": 43010, "ts": "2026-08-08T01:20:43Z", "hours": 6.4139, "text": "Heya there! I didn’t do an insane amount of progress, however, there still is a measurable leap. I: Cells now cannot overlap over themselves. No longer are there any jebstacks! II: Cells now spawn according to a probability depending on the black-white gradient values of a noise texture. III: Added a new tier of movement controls. Previously, there was only fine and coarse controls, but now, behold! The hyper-coarse controls! (just a faster way to move) That’s pretty much it for those few hours, thanks for reading! Cheers! Ryland Grace"}, {"post_id": 41620, "ts": "2026-08-05T22:48:08Z", "hours": 15.05, "text": "Heya there! For the past couple of days I have been working on a microscope simulation app/game. I’m still not sure whether I should lean further towards making it feel more “gamey” or a more realistic simulation. I’d be glad to hear opinions on that matter! My progress during the few logged hours are composed of two parts. The Blender and the Godot section. I - Blender: I have created a simple image of a cell during mitosis (meet Jebediah, the cell!). It was genuinely painful and took me quite a lot of time to make it look even remotely realistic. I plan on making quite a few of those, so hopefully they will take less time as my progress goes on. II - Godot: The huge majority of my time was spent here. Partly because I didn’t spend that much time on blender, partly because I had to learn so much of Godot, as it was literally my first ever encounter with it. I also spent quite a lot of time learning shaders before giving up and searching them up. III - Progress so far: Jebediah More Jebs with random position and rotation spawn within a rectangle determined by your monitor’s resolution when a mouse click is detected Movable camera across the X and Y axis using the arrow keys Chromatic Aberration Shader (the colour seperation shader closer towards the edges) Lens Distortion Shader (the stretching effect that is, again, stronger towards the edges) Zoom Controls using the + and - keys (will be replaced later with predetermined zoom factors such as 100x, 400x and 1000x) I’d like to point out that the controls with the shaders genuinely give off a feeling of a real microscope, it’s actually pretty neat. Anyways, that’s pretty much it, see you next time! Cheers! Ryland Grace P.S.: I might add some astrophage, who knows?"}, {"post_id": 38442, "ts": "2026-07-31T20:12:07Z", "hours": 3.05, "text": "Due to the recent update to the SD payoff, I have decided to give up on the hardware side of this project. All that will be left will be the simulation itself. In the recorded time, I have decided on the engine that I will use (Godot) as well as how it will function. Essentially, I will render many different sprites of cells and microbes under different resolutions, so that Godot will be able to render them all without too much lag. I am however still unsure whether I should add a possibility to change the wavelength, as this is a fairly “niche” option on most microscopes. I am fully open to suggestions and commentaries. Cheers! Ryland Grace"}]...
|
Title: MicroSim by @RylandGrace | Stardance
Devlo Title: MicroSim by @RylandGrace | Stardance
Devlogs:
Due to the recent update to the SD payoff, I have decided to give up on the hardware side of this project. All that will be left will be the simulation itself. In the recorded time, I have decided on the engine that I will use (Godot) as well as how it will function. Essentially, I will render many different sprites of cells and microbes under different resolutions, so that Godot will be able to render them all without too much lag. I am however still unsure whether I should add a possibility to change the wavelength, as this is a fairly “niche” option on most microscopes. I am fully open to suggestions and commentaries. Cheers! Ryland Grace
Heya there! For the past couple of days I have been working on a microscope simulation app/game. I’m still not sure whether I should lean further towards making it feel more “gamey” or a more realistic simulation. I’d be glad to hear opinions on that matter! My progress during the few logged hours are composed of two parts. The Blender and the Godot section. I - Blender: I have created a simple image of a cell during mitosis (meet Jebediah, the cell!). It was genuinely painful and took me quite a lot of time to make it look even remotely realistic. I plan on making quite a few of those, so hopefully they will take less time as my progress goes on. II - Godot: The huge majority of my time was spent here. Partly because I didn’t spend that much time on blender, partly because I had to learn so much of Godot, as it was literally my first ever encounter with it. I also spent quite a lot of time learning shaders before giving up and searching them up. III - Progress so far: Jebediah More Jebs with random position and rotation spawn within a rectangle determined by your monitor’s resolution when a mouse click is detected Movable camera across the X and Y axis using the arrow keys Chromatic Aberration Shader (the colour seperation shader closer towards the edges) Lens Distortion Shader (the stretching effect that is, again, stronger towards the edges) Zoom Controls using the + and - keys (will be replaced later with predetermined zoom factors such as 100x, 400x and 1000x) I’d like to point out that the controls with the shaders genuinely give off a feeling of a real microscope, it’s actually pretty neat. Anyways, that’s pretty much it, see you next time! Cheers! Ryland Grace P.S.: I might add some astrophage, who knows?
Heya there! I didn’t do an insane amount of progress, however, there still is a measurable leap. I: Cells now cannot overlap over themselves. No longer are there any jebstacks! II: Cells now spawn according to a probability depending on the black-white gradient values of a noise texture. III: Added a new tier of movement controls. Previously, there was only fine and coarse controls, but now, behold! The hyper-coarse controls! (just a faster way to move) That’s pretty much it for those few hours, thanks for reading! Cheers! Ryland Grace
Quite a bit of progress today: I made all the cells spawn in little packs of roughly 1-10 cells each, as well as being of the same type together. To do this, I originally wanted to adhere to some sort of randomized noise texture to affect the chances of a cell spawning on a selected pixel, but, after quite a few facepalms, I ended up opting for spawning first a few primary cells, and then spawn a bunch of secondary cells around them. That means that it’s a tad less flexible, but for the time being, that’s what I’ll use. However, this did add unfortunately quite a bit of lag, so either I’ll have to heavily optimize it, or if that’s just not possible, I’ll have to add a loading screen, which I have no idea how to do. I also started working a bit on the UI and main menu. That’s about it for today! Doesn’t sound like too much, but I promise you, that was genuinely difficult. Cheers! Ryland Grace
Started working on the main menu as well as the GUI. I did a LOT of brainstorming on what kind of theme I should adopt, and I’m still not sure. I also fixed the overlapping problem. Or, rather, the lack of it. If you look up a sample under a microscope, you would notice the suprising abundance of the overlapping. However, thanks to my code, I am able to limit the overlapping to a certain degree. Cheers! Ryland Grace PS.: GUI is a pain. It really is.
Kept working on the GUI. Button by button, script by script, the progress keeps going because it sees no end, no bound. I’ve set up a proper tab container instead of my poor excuse of one, as well as started to make some display/audio settings. I also added some background music. GUI really is a pain, but honestly? I kind of like it here. I feel at peace. Cheers! Ryland Grace
Heya There! I made some fairly major progress on the Main Menu. I finally more or less chose the general theme for it, as well as added a couple settings as follows: Resolution V-Sync Max Framerate Borderless, Windowed/Fullscreen Shaders Low Quality, where the resolution of the sprites is halved Audio controls for Master, Music and SFX bus’ That’s pretty much it for the day. Cheers! Ryland Grace
Started to work on some settings here and there. This will allow me to actually optimize it because it’s going to be easy to pinpoint what lines slow down the generation process. I also finished the controls rebinding settings too. Doesn’t seem that long but for whatever reason, it took me a long, long time to do so. Cheers! Ryland Grace...
|
1792626684.9328406
|
1793231484.9328406
|
|
30643
|
My very own CadetOS by @mausicadev | Stardance
|
mausicadev
|
1
|
56.36
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T22:13:58Z", "hours": 25.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I wanted to build a fake OS that actually feels like an OS — not just a styled webpage with some panels, but something you can genuinely mess around in. CadetOS is a military command interface that runs in the browser: draggable windows, a fake terminal, file manager, task manager, radar with animated blips, real-time charts, and a bunch of theme/CRT options to dial in the vibe. The hardest part was honestly the windowed desktop itself — getting focus, drag, resize, and z-ordering to all play nicely together without a native OS doing any of the heavy lifting. It took way more edge-case handling than I expected. What I’m most proud of is how cohesive it ended up feeling. Every module looks like it belongs in the same universe. To try it: just open the link, no login needed. Drag some windows around, poke at the Terminal, flip through themes in Settings, watch the Radar sweep. Double-tap D to toggle the desktop.", "repo": "https://github.com/mausicadev/cadet.os", "demo": "https://cadetos.vercel.app"}]...
|
[{"post_id": 30934, "ts": "202 [{"post_id": 30934, "ts": "2026-07-18T22:46:13Z", "hours": 2.2067, "text": "It took me sooo long to finally get the desired look for the windows (the css is really nerve wrecking), also now the notes sync with the files, for example when you edit a note it apears on /usr modifed, and vice-versa if you modify on the the editor from the files, one more future is that tasks are now simpler to use and actually sync with the top banner, also you could easily modify now the desired window blur from the settings menu"}, {"post_id": 28532, "ts": "2026-07-14T20:50:37Z", "hours": 3.9603, "text": "Recently I started working on the login page, beacuse this will not only be an OS, I want it to be a tool to control all your smart things at home, so the old page is now on \\bunker, cause it monitors data from the sensors in the bunker, and now I am working in \\house, I am thinking something like a blueprint of the house and some signs for each smart device we’ll see, till then peace ✌️"}, {"post_id": 26829, "ts": "2026-07-11T21:00:08Z", "hours": 10.175, "text": "I really find it difficult to edit CSS, not to say it’s time it takes…also for the new features I added some little guide to settings, and improved the API, also now I am trying to make the website avaible for all types of devices, now what I am working now is the resoultion and compatibility for the mobile….and is veeery hard…. anyways see you in the next devlog with even cooler features 👀👀"}, {"post_id": 25546, "ts": "2026-07-09T21:18:29Z", "hours": 5.3542, "text": "Even if it doesn’t seem like much, I really fixed some CSS design, and reworked the dock which took more than I anticipated, and maked the README from scratch, telling there the story of the interface 👀"}, {"post_id": 24873, "ts": "2026-07-08T18:41:07Z", "hours": 9.6597, "text": "I am getting ready for the next step of the project, I formatted some gibberish text made by AI when I transformed by vanilla js/html/css to react so I could post it to vercel. (and yes I used AI quite enough…and way too much hours in debugging and improving the AI, although I think without the AI I would not have done so much in such a short time…) As the improvements I added an actual API for forecast so it can see the actual weather, some CSS fixes specially on colors and special characters not recognized by the font, and now I created the page “launch” which I hope it would make a really strong bound between my Software project and Hardware project 👀 (the only thing is that I don’t know how to record the correct amount of time that I already spent on the Hardware project, is already in the testing part, filmed some videos, but I really don’t know how to record the time, and I don’t want to start over again to record hours 😞)"}, {"post_id": 24374, "ts": "2026-07-07T21:55:09Z", "hours": 9.4597, "text": "Finally got the live uRadMonitor API support done (and API in general working)! The dashboard now actually updates with real CO2, VOC, Noise, and PM data. If you’re running custom sensors, I also put together a customizable JSON template you can use to import whatever telemetry you want. Honestly, coding the custom window system from scratch and sorting out the settings page scrollbars was a massive pain, but it’s finally running cleanly. Also, disabled the grid layout by default so the system starts up in a clean floating window desktop instead of stretching everything at once. Also you can access the site now on CadetOS (since it’s ready for the first shipment) 👀"}, {"post_id": 23691, "ts": "2026-07-06T20:01:35Z", "hours": 10.7589, "text": "Just added open/close animations to all CadetOS windows (P.S. new windows added). They scale up when you launch them and collapse back down when you close — takes like 200ms but it makes the whole thing feel so much more alive. Honestly such a small thing but it’s the difference between “website with divs” and something that actually feels like an OS. Super happy with how it turned out. More updates coming. The bunker never sleeps. ☢️"}, {"post_id": 23097, "ts": "2026-07-05T20:48:13Z", "hours": 4.1953, "text": "Moved to React for better compatibility and started adding windows ✨"}, {"post_id": 22435, "ts": "2026-07-04T22:01:53Z", "hours": 0.5567, "text": "Just finished the first stage of my own OS 👀"}]...
|
Title: My very own CadetOS by @mausicadev | Starda Title: My very own CadetOS by @mausicadev | Stardance
Devlogs:
Just finished the first stage of my own OS 👀
Moved to React for better compatibility and started adding windows ✨
Just added open/close animations to all CadetOS windows (P.S. new windows added). They scale up when you launch them and collapse back down when you close — takes like 200ms but it makes the whole thing feel so much more alive. Honestly such a small thing but it’s the difference between “website with divs” and something that actually feels like an OS. Super happy with how it turned out. More updates coming. The bunker never sleeps. ☢️
Finally got the live uRadMonitor API support done (and API in general working)! The dashboard now actually updates with real CO2, VOC, Noise, and PM data. If you’re running custom sensors, I also put together a customizable JSON template you can use to import whatever telemetry you want. Honestly, coding the custom window system from scratch and sorting out the settings page scrollbars was a massive pain, but it’s finally running cleanly. Also, disabled the grid layout by default so the system starts up in a clean floating window desktop instead of stretching everything at once. Also you can access the site now on CadetOS (since it’s ready for the first shipment) 👀
I am getting ready for the next step of the project, I formatted some gibberish text made by AI when I transformed by vanilla js/html/css to react so I could post it to vercel. (and yes I used AI quite enough…and way too much hours in debugging and improving the AI, although I think without the AI I would not have done so much in such a short time…) As the improvements I added an actual API for forecast so it can see the actual weather, some CSS fixes specially on colors and special characters not recognized by the font, and now I created the page “launch” which I hope it would make a really strong bound between my Software project and Hardware project 👀 (the only thing is that I don’t know how to record the correct amount of time that I already spent on the Hardware project, is already in the testing part, filmed some videos, but I really don’t know how to record the time, and I don’t want to start over again to record hours 😞)
Even if it doesn’t seem like much, I really fixed some CSS design, and reworked the dock which took more than I anticipated, and maked the README from scratch, telling there the story of the interface 👀
I really find it difficult to edit CSS, not to say it’s time it takes…also for the new features I added some little guide to settings, and improved the API, also now I am trying to make the website avaible for all types of devices, now what I am working now is the resoultion and compatibility for the mobile….and is veeery hard…. anyways see you in the next devlog with even cooler features 👀👀
Recently I started working on the login page, beacuse this will not only be an OS, I want it to be a tool to control all your smart things at home, so the old page is now on \bunker, cause it monitors data from the sensors in the bunker, and now I am working in \house, I am thinking something like a blueprint of the house and some signs for each smart device we’ll see, till then peace ✌️
It took me sooo long to finally get the desired look for the windows (the css is really nerve wrecking), also now the notes sync with the files, for example when you edit a note it apears on /usr modifed, and vice-versa if you modify on the the editor from the files, one more future is that tasks are now simpler to use and actually sync with the top banner, also you could easily modify now the desired window blur from the settings menu
Ships:
I wanted to build a fake OS that actually feels like an OS — not just a styled webpage with some panels, but something you can genuinely mess around in. CadetOS is a military command interface that runs in the browser: draggable windows, a fake terminal, file manager, task manager, radar with animated blips, real-time charts, and a bunch of theme/CRT options to dial in the vibe. The hardest part was honestly the windowed desktop itself — getting focus, drag, resize, and z-ordering to all play nicely together without a native OS doing any of the heavy lifting. It took way more edge-case handling than I expected. What I’m most proud of is how cohesive it ended up feeling. Every module looks like it belongs in the same universe. To try it: just open the link, no login needed. Drag some windows around, poke at the Terminal, flip through themes in Settings, watch the Radar sweep. Double-tap D to toggle the desktop....
|
1792878782.2659147
|
1793742782.2659147
|
|
46084
|
Indifference by @ozmld | Stardance
|
ozmld
|
0
|
56.36
|
0
|
[]
|
[{"post_id": 76554, "ts": "202 [{"post_id": 76554, "ts": "2026-10-03T22:37:40Z", "hours": 12.7611, "text": "Dev Log 6, Epileptic warning since the video does have a quick white flash! finished all the credits and stuff and finally in the home stretch of having most of the game features done, now I’m working on the save where I’m using C++ to create a txt file and having it read it in the beginning to see if there is a save and to load it in, might add an option to not load it if the user chooses to but that’s for later because this is definitely the more difficult side of the project since my code is a mess rn. And adding a flashing feature which will be important to the game play"}, {"post_id": 70242, "ts": "2026-09-18T19:35:41Z", "hours": 10.0731, "text": "Dev Log 5 starting to finish up all of the UI stuff and credits, right now struggling with the credits at the end cause when you go back to the menu and try to load up the game again, it just loads up the credit probably has to do with the playerState or just gameState in general"}, {"post_id": 65059, "ts": "2026-09-09T22:03:47Z", "hours": 10.2019, "text": "Dev Log 4 i finished the dialog system (after way too much time and headaches) I basically assign a specific value to each NPC and depending on that ID it loads a characters dialog, I also decided to hardcode the dialog instead of making a vector or more complex system since I couldn’t find much information about it and I just kept going in circles. Now I’m working on the title screen which is also causing some headaches, as you can see at the end there is coords to track the mouse but im trying to find a way to keep the coords if the player wants to resize the window which is more complicated than i thought it was going to be."}, {"post_id": 58528, "ts": "2026-08-30T23:20:44Z", "hours": 10.4464, "text": "Devlog 3, I started on the dialog feature of my game, as you can see the little red stand in guy is the NPC, I’m pretty happy with the dialog box and will just have to create a struct for all the NPC’s in the game and their corresponding dialog, the player is also stuck until the they press next which I am still working on but for right now they can’t move and I’m pretty happy with the results."}, {"post_id": 49935, "ts": "2026-08-18T22:07:54Z", "hours": 8.2931, "text": "Devlog 2, I have finished all the movement and finally have the recording, I built the tiles and camera panning still using my old game as a reference with some different variables. After this I’m going to learn how to make levels and such since I’ve only made a platformer game with one level, so it’s going to be a new experience (waiting for my friend to send the sprite so im using templates rn)"}, {"post_id": 44878, "ts": "2026-08-10T22:23:31Z", "hours": 4.5886, "text": "DevLog 1, I’ve made my sprite on a window, and it can move around, I’ve been using my first game that I programmed as a template (that I got from YouTube) to get the movement but after getting the animations done, most of it will be me just exploring SDL3 and seeing how to create a top-down game ( also if anyone knows how to draw better sprites pls reach out, the sprite is most likely not going to be permanent)"}]...
|
Title: Indifference by @ozmld | Stardance
Devlogs Title: Indifference by @ozmld | Stardance
Devlogs:
DevLog 1, I’ve made my sprite on a window, and it can move around, I’ve been using my first game that I programmed as a template (that I got from YouTube) to get the movement but after getting the animations done, most of it will be me just exploring SDL3 and seeing how to create a top-down game ( also if anyone knows how to draw better sprites pls reach out, the sprite is most likely not going to be permanent)
Devlog 2, I have finished all the movement and finally have the recording, I built the tiles and camera panning still using my old game as a reference with some different variables. After this I’m going to learn how to make levels and such since I’ve only made a platformer game with one level, so it’s going to be a new experience (waiting for my friend to send the sprite so im using templates rn)
Devlog 3, I started on the dialog feature of my game, as you can see the little red stand in guy is the NPC, I’m pretty happy with the dialog box and will just have to create a struct for all the NPC’s in the game and their corresponding dialog, the player is also stuck until the they press next which I am still working on but for right now they can’t move and I’m pretty happy with the results.
Dev Log 4 i finished the dialog system (after way too much time and headaches) I basically assign a specific value to each NPC and depending on that ID it loads a characters dialog, I also decided to hardcode the dialog instead of making a vector or more complex system since I couldn’t find much information about it and I just kept going in circles. Now I’m working on the title screen which is also causing some headaches, as you can see at the end there is coords to track the mouse but im trying to find a way to keep the coords if the player wants to resize the window which is more complicated than i thought it was going to be.
Dev Log 5 starting to finish up all of the UI stuff and credits, right now struggling with the credits at the end cause when you go back to the menu and try to load up the game again, it just loads up the credit probably has to do with the playerState or just gameState in general
Dev Log 6, Epileptic warning since the video does have a quick white flash! finished all the credits and stuff and finally in the home stretch of having most of the game features done, now I’m working on the save where I’m using C++ to create a txt file and having it read it in the beginning to see if there is a save and to load it in, might add an option to not load it if the user chooses to but that’s for later because this is definitely the more difficult side of the project since my code is a mess rn. And adding a flashing feature which will be important to the game play...
|
1792648504.9841902
|
1793253304.9841902
|
|
60692
|
BUGATTI Brouillard by @nejenabinupa | Stardance
|
nejenabinupa
|
0
|
56.33
|
0
|
[]
|
[{"post_id": 71474, "ts": "202 [{"post_id": 71474, "ts": "2026-09-20T21:51:25Z", "hours": 5.0192, "text": "I added the rims and sum more materials and textures"}, {"post_id": 70088, "ts": "2026-09-18T13:08:04Z", "hours": 8.1472, "text": "I added sum more details adjusted sum things and added textures and materials to the modle and I need to make the wheels and more stuff"}, {"post_id": 69239, "ts": "2026-09-16T17:16:41Z", "hours": 7.0464, "text": "i added the grills and sum parts and i cut the sections sparest the panels"}, {"post_id": 68812, "ts": "2026-09-15T19:51:20Z", "hours": 9.5989, "text": "i make the sum parts in the car like headlights and enging bay"}, {"post_id": 67475, "ts": "2026-09-13T16:21:51Z", "hours": 8.6361, "text": "I make the back of the car and added sum more parts to to it"}, {"post_id": 65933, "ts": "2026-09-11T12:29:22Z", "hours": 9.3583, "text": "I make the back and and the said skirt and the wing"}, {"post_id": 65415, "ts": "2026-09-10T15:19:23Z", "hours": 8.5261, "text": "I’m starting from front, making the hood and the front bumper And looking good so far"}]...
|
Title: BUGATTI Brouillard by @nejenabinupa | Stard Title: BUGATTI Brouillard by @nejenabinupa | Stardance
Devlogs:
I’m starting from front, making the hood and the front bumper And looking good so far
I make the back and and the said skirt and the wing
I make the back of the car and added sum more parts to to it
i make the sum parts in the car like headlights and enging bay
i added the grills and sum parts and i cut the sections sparest the panels
I added sum more details adjusted sum things and added textures and materials to the modle and I need to make the wheels and more stuff
I added the rims and sum more materials and textures...
|
1793036956.786102
|
1793641756.786102
|
|
52743
|
SnakeBot by @leeianiop | Stardance
|
leeianiop
|
0
|
56.29
|
0
|
[]
|
[{"post_id": 79508, "ts": "202 [{"post_id": 79508, "ts": "2026-10-14T11:14:04Z", "hours": 20.3247, "text": "Suspension issues :/ troubleshooting the angle for the spring on the connectors"}, {"post_id": 78909, "ts": "2026-10-12T00:28:59Z", "hours": 12.0008, "text": "Made a screw based suspension, using springs to bounce. I’ve printed and tested it, seems to be wroking fine."}, {"post_id": 62774, "ts": "2026-09-06T09:13:58Z", "hours": 8.4919, "text": "Made version 2, which has spring suspension and sider body base (also looks cooler in general) This is a robot snake, and this is one of the segments, the servo is ontop of another servo which can control the y and z axis of the front segment"}, {"post_id": 59589, "ts": "2026-09-01T14:28:50Z", "hours": 6.7992, "text": "Did the segment to segment connections and updated the gearbox to make it gear down for more torque. I’m making a snake robot mechanical thing any suggestions or name ideas pls leave a comment:)"}, {"post_id": 54356, "ts": "2026-08-25T09:49:09Z", "hours": 1.0231, "text": "Made the f1 aero side cover more connected to the case"}, {"post_id": 53833, "ts": "2026-08-24T15:07:15Z", "hours": 2.9964, "text": "Made more progress on the CAD by adding a longer side gear shaft and cover. The cover is going to be like an f1 car side"}, {"post_id": 52784, "ts": "2026-08-23T03:55:44Z", "hours": 1.3672, "text": "Made the top servo mount to have screws linking to bottom servo mount, made some added progress on the suspsension"}, {"post_id": 52434, "ts": "2026-08-22T15:35:47Z", "hours": 2.4836, "text": "Made the General Body and created mount for servos. Fusion keeps crashing:(("}, {"post_id": 52298, "ts": "2026-08-22T12:38:32Z", "hours": 0.8019, "text": "Made the gearbox to turn the motor shaft sideways, allowing for a narrower body, The lid is screwed by M3 screws"}]...
|
Title: SnakeBot by @leeianiop | Stardance
Devlogs Title: SnakeBot by @leeianiop | Stardance
Devlogs:
Made the gearbox to turn the motor shaft sideways, allowing for a narrower body, The lid is screwed by M3 screws
Made the General Body and created mount for servos. Fusion keeps crashing:((
Made the top servo mount to have screws linking to bottom servo mount, made some added progress on the suspsension
Made more progress on the CAD by adding a longer side gear shaft and cover. The cover is going to be like an f1 car side
Made the f1 aero side cover more connected to the case
Did the segment to segment connections and updated the gearbox to make it gear down for more torque. I’m making a snake robot mechanical thing any suggestions or name ideas pls leave a comment:)
Made version 2, which has spring suspension and sider body base (also looks cooler in general) This is a robot snake, and this is one of the segments, the servo is ontop of another servo which can control the y and z axis of the front segment
Made a screw based suspension, using springs to bounce. I’ve printed and tested it, seems to be wroking fine.
Suspension issues :/ troubleshooting the angle for the spring on the connectors...
|
1792723717.323786
|
1793328517.323786
|
|
3245
|
GROW-Bot | Garden Robot for Organic Work by @sukiw GROW-Bot | Garden Robot for Organic Work by @sukiwyatt | Stardance...
|
sukiwyatt
|
0
|
56.16
|
0
|
[]
|
[{"post_id": 35616, "ts": "202 [{"post_id": 35616, "ts": "2026-07-27T04:44:02Z", "hours": 4.4567, "text": "BOM Complete The BOM has been completed, I am now ready to submit for funding"}, {"post_id": 29960, "ts": "2026-07-17T05:31:33Z", "hours": 1.9208, "text": "BOM Part List Configuration I did the long and tedious Task of going through every single part in the project and give each one a custom name, description and product details. I did this because of onshapes built in BOM tool, so now it gives me a full list of needed parts and quantities. I edited the properties of over 300 parts to do this. FULL ROBOT If you want to be more engaged in this projects trajectory or have any suggestions or questions, join the slack channel #grow-bot ."}, {"post_id": 29752, "ts": "2026-07-16T20:54:54Z", "hours": 3.1439, "text": "Electronics! Today I made an electronics box and modelled the spacing of the main electronic components. Electronics specifications: SBC: Raspberry Pi 5 (4GB) Motion controller: BTT Octopus Pro V1.1 (H723) Closed-loop drivers: StepperOnline CL57T V4.1 48V PSU: Meanwell SE-200-48 or similar Enclosure: Joinfworld Outdoor Electrical Box, 16x11x6 ABS Plastic The box is held up in the superstructure by four 3D prints and cable ties. FULL ROBOT Main Gantry + Electronics If you want to be more engaged in this projects trajectory or have any suggestions or questions, join the slack channel #grow-bot ."}, {"post_id": 29291, "ts": "2026-07-16T03:18:38Z", "hours": 4.0022, "text": "Traversal X₁ Axis Motor Today I made the mount for the stepper motor that runs the belt for the x-axis What is the motor’s purpose? It will allow the robot to move up to 120 inches down the garden bed. It engages with a belt that pulls the robot down aluminum tubes to traverse the full length Technical details It uses a 1x1 aluminum tube with 1/8 inch walls to mount to the main turret plate and them it houses the motor, pully and idlers for the belt I also shifted the entire belt over to the left for a better motor fit. CAD: FULL ROBOT Turret Only If you want to be more engaged in this projects trajectory or have any suggestions or questions, join the slack channel #grow-bot ."}, {"post_id": 28587, "ts": "2026-07-14T22:36:48Z", "hours": 6.9689, "text": "Large Design Updates! MOST OF THE CONTENT FOR THIS DEVLOG IS CONTAINED IN THE ATTATCHED EXPLANATION VIDEO TLDR: I lightened the main gantry structure and gussets in an FRC style in order to keep weight and inertia down. I built a custom configuration panel that allows the viewer to select through different configurations including the greenhouse, garden bed, ground, or crops I built a coordinate variable system in order to help me control all 7 axis of movement in the system individually. I added vegetation in the garden bed in order to better convey the purpose of the system. SEE FOR YOURSELF! If you want to be more engaged in this projects trajectory or have any suggestions or questions, join the slack channel #grow-bot ."}, {"post_id": 22985, "ts": "2026-07-05T17:54:03Z", "hours": 3.4311, "text": "Belt Tensioner! Today I designed the belt tensioner for where the belts terminate on the gantry, it uses ratchets to tension pullies with the belt wrapped around them. I also designed the mounting piece for the wrist mechanism. CAD Links Turreted Gantry Main Assembly Core-XY Gantry GROW-BOT FULL If you want to stay involved in the making this project a reality, I recommend joining the slack channel #grow-bot to help out or ask questions."}, {"post_id": 21643, "ts": "2026-07-03T18:14:11Z", "hours": 4.4903, "text": "Core-XY Gantry System Complete! What is Core-XY? Core-XY is a popular belt-driven motion system commonly used in 3D printers and CNC machines. Instead of having one motor move the X-axis and another move the Y-axis independently, Core-XY uses two stationary motors that work together using a single, continuous loop of belt to move the toolhead diagonally, horizontally, or vertically. Details The Gantry hub is 3D printed out of PA6-CF Nylon for maximum strength, and it has many through bolts that support the bearings and pullies that double as rigitidy in the structure. There are bearings that ride on the large 2x2 aluminum tube that allow for side to side motion Other bearings ride on the smaller 1x1 aluminum tube that allows for up and down motion. The gantry was designed to be as light-weight as possible due to it riding to the far end of the cantilevered aluminum superstructure. How does the belt work? The best way to describe the shape of the belt is a plus symbol, since it goes from the left to the center to the top to the center then to the right ect. The belt is terminated and tensioned at the bottom of the 1x1 aluminum tube, this is what allows for all of the motion since the tube is effectively riding the belt. I don’t know if that makes any sense lol, but pretty much if the motors spin together it translates left and right, and if they spin in opposite directions, it will go up and down. CAD LINKS Main Gantry Assembly Core-XY Gantry TLA FULL ROBOT If you want to stay involved in the making this project a reality, I recommend joining the slack channel #grow-bot to help out or ask questions."}, {"post_id": 21181, "ts": "2026-07-03T00:08:06Z", "hours": 2.395, "text": "Core-XY Gearbox Today I built the gearbox component of the core-xy gantry system, I will send an update later today on the rest of the gantry. The top motor drives the far end of the gantry through a dead-axel gear and pully riding on a through hex axel. The bottom motor directly powers the through axel for the near side pully. CAD LINKS: Superstructure TLA (Includes gearbox) Full Robot Join the slack channel #grow-bot to keep up with development"}, {"post_id": 20499, "ts": "2026-07-02T03:17:38Z", "hours": 4.3475, "text": "I’m Back! (For real ) I have had to deal with some personal issues and illness over the course of the past few weeks, and was unable to work on the robot. However, I am officially back to making progress. Here is a list of miscellaneous improvements I have made since the last devlog But I am seriously sorry for not updating folks on the status for the past few weeks. 🤦 Turret Structure Since I designed the main gantry assembly, I added the actually turret to the frame that uses 10 bearing stacks on shoulder screws to rotate and a cnc machined aluminum azimuth gear to rotate. Superstructure Mounting I am going to mount the main superstructure to the turret using a 3/16” walled 2x2 aluminum box tube with quarter inch bolts spanning both the turret plates for extra stability, I am using two large gussets to mount the 2x2 box tubing for the superstructure to the turret box tube. Superstructure The superstructure is comprised of 2x2 box tubes and aluminum gussets, I only have the main frame designed, and am currently working on the core-xy linear gantry for the toolhead. Belt Tensioning I also designed a belt tensioning system for the main belt that allows the gantry to pull itself along the garden bed rails. RELEVANT CAD LINKS FULL CAD - GROW Bot (Greenhouse + Garden bed) Superstructure TLA Full Gantry Assembly (TURRET INCLUDED) I sincerely apologize for not keeping anyone following the progress of this project up to date with its happenings, but I promise to be better in the future To join the conversation around this project join the slack channel #grow-bot"}, {"post_id": 7687, "ts": "2026-06-12T20:43:57Z", "hours": 3.2783, "text": "Main Gantry Complete What does it do? The gantry is a frame that rolls on the aluminum tubing, it uses bogies to provide omnidirectional support (2 wheeled structures). How does it work? There are custom Urethane wheels on aluminum hubs that roll on the aluminum tubing, they are rotated 140 degrees from each other. The bogies attach to aluminum 6061 tube stock above it that forms the main superstructure for the turret to mount to. Interesting Technical Numbers 32 Bolts, 32 Lock nuts, 20 washers, 32 rivets 60 inches of 6061 2x1 aluminum box tubing 32 inches of 6061 1x1 aluminum box tubing 12 custom 1 inch OD urethane rollers with internal bearings 8 box tube crush blocks for rigidity PA6-CF 3D printed Bogies ~9.8 lbs of box tubing ~15 lbs of total weight Onshape Links: WIP GROW-Bot Assembly Gantry Assembly Thank you so much for reading this, if you are interested in this project join #grow-bot in slack to participate! Watch the animation below that better illustrates the design:"}, {"post_id": 7262, "ts": "2026-06-12T03:35:23Z", "hours": 1.0972, "text": "Updates! The Name Fist off, to address the obvious… the new name! Thought process: “GROW + Robot = GROW-Bot!” Please leave me your thoughts down below! Misc I spent most of today doing miscellaneous things, like adding a dirt texture to the garden bed and designing a greenhouse concept framework. I also decided to ditch the lightening on some of the aluminum since the weight simply doesn’t matter in this scenario GROW-Bot WIP CAD Greenhouse CAD Tomorrow I am going to design the turreted gantry system and possibly start work on the superstructure. The channel name has also now changed to #grow-bot so join to keep up with development and to help out!"}, {"post_id": 6647, "ts": "2026-06-11T04:24:12Z", "hours": 1.7297, "text": "Garden Bed Rails What do they do? Today I designed the rails that garden robot I am designing will traverse on. How do they work? They are mounted to 2x4s that are directly embedded in the ground and to the main structure of the garden bed. What to do next? Tomorrow is the big day when I start work on the actual main gantry part of the robot. I hope to have the 3d printed bogie (3 wheel structure that wraps around rails) and the turret assembly designed by the end of the day tomorrow. This robot is coming together! Join #grow-bot in slack to keep up with updates and/or ask questions! Onshape Link"}, {"post_id": 5388, "ts": "2026-06-09T04:15:40Z", "hours": 2.0239, "text": "Differential Wrist Mechanism This is the V1 CAD for the differential gear mechanism that will allow for the toolhead to rotate and pitch forward on my automated gardening robot called GROW. Technical Description: A half inch hex axel is mounted to the larger bevel gear and the gantry frame. The main cartriage is largely floating and only supported by the chain and gear since both motor walls and bevel gears are on bearings and floating freely on the main axel. When both motors spin together, The mechanism pitches up and down. When they spin opposite, it rotates Please watch the attached animation that illustrates the mechanism (the chain is not animated), and comment below with any questions or suggestions. Also, join the slack channel #grow-bot to participate or observe the development of the robot, I am also searching for programming help once the fabrication phase is over. DIFFERENTIAL CAD LINK Garden Bed V1 CAD Crayon Block CAD Master Sketch (top/bottom) Thank you all so much! Please give me feedback on how to improve my devlogs, and consider following if you want to see where this is going!"}, {"post_id": 4716, "ts": "2026-06-08T04:24:43Z", "hours": 1.7539, "text": "Garden Bed CAD V1 - ONSHAPE LINK I finished Cadding the garden bed including screw positions and soil depth. I am taking a break from the wrist mechanism as I discovered a major flaw with the mechanism that needs some adjustment which I will hopefully complete tomorrow. Join #grow-bot to keep up with the progress!"}, {"post_id": 4542, "ts": "2026-06-07T21:43:34Z", "hours": 3.2203, "text": "Differential Toolhead V0 - CLICK HERE FOR ONSHAPE LINK I just finished Modeling the differential gearbox in the toolhead, It is powered by 2 stepper motors, and chain. I am hoping to print out these parts and make a prototype later today Join #grow-bot to keep up with development"}, {"post_id": 3244, "ts": "2026-06-06T02:29:25Z", "hours": 2.4358, "text": "Master Sketches This is the project moving from Crayon Block CAD to Master sketching all of the dimensions and plate layouts in side and top view. I dimensioned the CORE-XY upper gantry system, and all of the rollers and turret layers on the base. Also, I have decided to instead of making the bed two rows of garden beds, it will loop around the top to form a U-shaped structure in order to provide increased working area. The total dimensions are 16ft x 10 ft Master Sketch Onshape Document MS To-do: Differential wrist mechanism Tool head Top View Join #grow-bot to keep up with development"}, {"post_id": 2544, "ts": "2026-06-05T02:47:32Z", "hours": 1.505, "text": "Crayon CAD - Differential Gearbox I designed the differential gear box mechanism in CAD today, I didn’t have tons of time to work on it, but I got the general dimensions figured out. It will operate as a differential gearbox for the rotation and the pitch of the main tool-head. I used gearlabs to generate the bevel gears. I also worked on some designs for the tool head system, and am considering weather or not a tool changer is necessary Join #grow-bot for more updates"}, {"post_id": 1887, "ts": "2026-06-04T03:19:40Z", "hours": 2.0742, "text": "Crayon CAD #2 - Main Gantry Structure This is what I like to call “ Crayon CAD ” or when the project exists as undetailed blobs. I have just finished working out some of the basic layout of the gantry structure. It is going to be cantilevered over One side of the rotating base, and the extendable carriage will ride along the 72 inch long 2x2 aluminum tube using bearings and belts. The main beam is supported by two 2x2 aluminum tubes that form a triangle of support, this design allows for maximum travel length and minimal interaction with plants. FYI I am currently designing the robot to be compatble with any plant up to 36 inches tall, this includes some smaller types of tomato, pepper, and bean plants. I also sketched out the roller gantry design before CADing it. Join #grow-bot to keep up with development!"}, {"post_id": 592, "ts": "2026-06-02T02:42:37Z", "hours": 0.9086, "text": "Crayon CAD - The Garden bed This is what I like to call “ Crayon CAD ” or when the project exists as undetailed blobs. Crayon CAD for the garden bed base is complete! This will be a good frame to start making rough CAD for the gantry system and elevators, along with spacing out the general dimensions before getting into mastersketches. The current Idea is that the gantry will ride along these 1.5” aluminum tubes, and will be externally belted for linear motion Join #grow-bot to keep up with development and help out!"}, {"post_id": 516, "ts": "2026-06-02T00:08:05Z", "hours": 0.9736, "text": "Preliminary design constraints and sketches for garden robot"}]...
|
Title: GROW-Bot | Garden Robot for Organic Work by Title: GROW-Bot | Garden Robot for Organic Work by @sukiwyatt | Stardance
Devlogs:
Preliminary design constraints and sketches for garden robot
Crayon CAD - The Garden bed This is what I like to call “ Crayon CAD ” or when the project exists as undetailed blobs. Crayon CAD for the garden bed base is complete! This will be a good frame to start making rough CAD for the gantry system and elevators, along with spacing out the general dimensions before getting into mastersketches. The current Idea is that the gantry will ride along these 1.5” aluminum tubes, and will be externally belted for linear motion Join #grow-bot to keep up with development and help out!
Crayon CAD #2 - Main Gantry Structure This is what I like to call “ Crayon CAD ” or when the project exists as undetailed blobs. I have just finished working out some of the basic layout of the gantry structure. It is going to be cantilevered over One side of the rotating base, and the extendable carriage will ride along the 72 inch long 2x2 aluminum tube using bearings and belts. The main beam is supported by two 2x2 aluminum tubes that form a triangle of support, this design allows for maximum travel length and minimal interaction with plants. FYI I am currently designing the robot to be compatble with any plant up to 36 inches tall, this includes some smaller types of tomato, pepper, and bean plants. I also sketched out the roller gantry design before CADing it. Join #grow-bot to keep up with development!
Crayon CAD - Differential Gearbox I designed the differential gear box mechanism in CAD today, I didn’t have tons of time to work on it, but I got the general dimensions figured out. It will operate as a differential gearbox for the rotation and the pitch of the main tool-head. I used gearlabs to generate the bevel gears. I also worked on some designs for the tool head system, and am considering weather or not a tool changer is necessary Join #grow-bot for more updates
Master Sketches This is the project moving from Crayon Block CAD to Master sketching all of the dimensions and plate layouts in side and top view. I dimensioned the CORE-XY upper gantry system, and all of the rollers and turret layers on the base. Also, I have decided to instead of making the bed two rows of garden beds, it will loop around the top to form a U-shaped structure in order to provide increased working area. The total dimensions are 16ft x 10 ft Master Sketch Onshape Document MS To-do: Differential wrist mechanism Tool head Top View Join #grow-bot to keep up with development
Differential Toolhead V0 - CLICK HERE FOR ONSHAPE LINK I just finished Modeling the differential gearbox in the toolhead, It is powered by 2 stepper motors, and chain. I am hoping to print out these parts and make a prototype later today Join #grow-bot to keep up with development
Garden Bed CAD V1 - ONSHAPE LINK I finished Cadding the garden bed including screw positions and soil depth. I am taking a break from the wrist mechanism as I discovered a major flaw with the mechanism that needs some adjustment which I will hopefully complete tomorrow. Join #grow-bot to keep up with the progress!
Differential Wrist Mechanism This is the V1 CAD for the differential gear mechanism that will allow for the toolhead to rotate and pitch forward on my automated gardening robot called GROW. Technical Description: A half inch hex axel is mounted to the larger bevel gear and the gantry frame. The main cartriage is largely floating and only supported by the chain and gear since both motor walls and bevel gears are on bearings and floating freely on the main axel. When both motors spin together, The mechanism pitches up and down. When they spin opposite, it rotates Please watch the attached animation that illustrates the mechanism (the chain is not animated), and comment below with any questions or suggestions. Also, join the slack channel #grow-bot to participate or observe the development of the robot, I am also searching for programming help once the fabrication phase is over. DIFFERENTIAL CAD LINK Garden Bed V1 CAD Crayon Block CAD Master Sketch (top/bottom) Thank you all so much! Please give me feedback on how to improve my devlogs, and consider following if you want to see where this is going!
Garden Bed Rails What do they do? Today I designed the rails that garden robot I am designing will traverse on. How do they work? They are mounted to 2x4s that are directly embedded in the ground and to the main structure of the garden bed. What to do next? Tomorrow is the big day when I start work on the actual main gantry part of the robot. I hope to have the 3d printed bogie (3 wheel structure that wraps around rails) and the turret assembly designed by the end of the day tomorrow. This robot is coming together! Join #grow-bot in slack to keep up with updates and/or ask questions! Onshape Link
Updates! The Name Fist off, to address the obvious… the new name! Thought process: “GROW + Robot = GROW-Bot!” Please leave me your thoughts down below! Misc I spent most of today doing miscellaneous things, like adding a dirt texture to the garden bed and designing a greenhouse concept framework. I also decided to ditch the lightening on some of the aluminum since the weight simply doesn’t matter in this scenario GROW-Bot WIP CAD Greenhouse CAD Tomorrow I am going to design the turreted gantry system and possibly start work on the superstructure. The channel name has also now changed to #grow-bot so join to keep up with development and to help out!
Main Gantry Complete What does it do? The gantry is a frame that rolls on the aluminum tubing, it uses bogies to provide omnidirectional support (2 wheeled structures). How does it work? There are custom Urethane wheels on aluminum hubs that roll on the aluminum tubing, they are rotated 140 degrees from each other. The bogies attach to aluminum 6061 tube stock above it that forms the main superstructure for the turret to mount to. Interesting Technical Numbers 32 Bolts, 32 Lock nuts, 20 washers, 32 rivets 60 inches of 6061 2x1 aluminum box tubing 32 inches of 6061 1x1 aluminum box tubing 12 custom 1 inch OD urethane rollers with internal bearings 8 box tube crush blocks for rigidity PA6-CF 3D printed Bogies ~9.8 lbs of box tubing ~15 lbs of total weight Onshape Links: WIP GROW-Bot Assembly Gantry Assembly Thank you so much for reading this, if you are interested in this project join #grow-bot in slack to participate! Watch the animation below that better illustrates the design:
I’m Back! (For real ) I have had to deal with some personal issues and illness over the course of the past few weeks, and was unable to work on the robot. However, I am officially back to making progress. Here is a list of miscellaneous improvements I have made since the last devlog But I am seriously sorry for not updating folks on the status for the past few weeks. 🤦 Turret Structure Since I designed the main gantry assembly, I added the actually turret to the frame that uses 10 bearing stacks on shoulder screws to rotate and a cnc machined aluminum azimuth gear to rotate. Superstructure Mounting I am going to mount the main superstructure to the turret using a 3/16” walled 2x2 aluminum box tube with quarter inch bolts spanning both the turret plates for extra stability, I am using two large gussets to mount the 2x2 box tubing for the superstructure to the turret box tube. Superstructure The superstructure is comprised of 2x2 box tubes and aluminum gussets, I only have the main frame designed, and am currently working on the core-xy linear gantry for the toolhead. Belt Tensioning I also designed a belt tensioning system for the main belt that allows the gantry to pull itself along the garden bed rails. RELEVANT CAD LINKS FULL CAD - GROW Bot (Greenhouse + Garden bed) Superstructure TLA Full Gantry Assembly (TURRET INCLUDED) I sincerely apologize for not keeping anyone following the progress of this project up to date with its happenings, but I promise to be better in the future To join the conversation around this project join the slack channel #grow-bot
Core-XY Gearbox Today I built the gearbox component of the core-xy gantry system, I will send an update later today on the rest of the gantry. The top motor drives the far end of the gantry through a dead-axel gear and pully riding on a through hex axel. The bottom motor directly powers the through axel for the near side pully. CAD LINKS: Superstructure TLA (Includes gearbox) Full Robot Join the slack channel #grow-bot to keep up with development
Core-XY Gantry System Complete! What is Core-XY? Core-XY is a popular belt-driven motion system commonly used in 3D printers and CNC machines. Instead of having one motor move the X-axis and another move the Y-axis independently, Core-XY uses two stationary motors that work together using a single, continuous loop of belt to move the toolhead diagonally, horizontally, or vertically. Details The Gantry hub is 3D printed out of PA6-CF Nylon for maximum strength, and it has many through bolts that support the bearings and pullies that double as rigitidy in the structure. There are bearings that ride on the large 2x2 aluminum tube that allow for side to side motion Other bearings ride on the smaller 1x1 aluminum tube that allows for up and down motion. The gantry was designed to be as light-weight as possible due to it riding to the far end of the cantilevered aluminum superstructure. How does the belt work? The best way to describe the shape of the belt is a plus symbol, since it goes from the left to the center to the top to the center then to the right ect. The belt is terminated and tensioned at the bottom of the 1x1 aluminum tube, this is what allows for all of the motion since the tube is effectively riding the belt. I don’t know if that makes any sense lol, but pretty much if the motors spin together it translates left and right, and if they spin in opposite directions, it will go up and down. CAD LINKS Main Gantry Assembly Core-XY Gantry TLA FULL ROBOT If you want to stay involved in the making this project a reality, I recommend joining the slack channel #grow-bot to help out or ask questions.
Belt Tensioner! Today I designed the belt tensioner for where the belts terminate on the gantry, it uses ratchets to tension pullies with the belt wrapped around them. I also designed the mounting piece for the wrist mechanism. CAD Links Turreted Gantry Main Assembly Core-XY Gantry GROW-BOT FULL If you want to stay involved in the making this project a reality, I recommend joining the slack channel #grow-bot to help out or ask questions.
Large Design Updates! MOST OF THE CONTENT FOR THIS DEVLOG IS CONTAINED IN THE ATTATCHED EXPLANATION VIDEO TLDR: I lightened the main gantry structure and gussets in an FRC style in order to keep weight and inertia down. I built a custom configuration panel that allows the viewer to select through different configurations including the greenhouse, garden bed, ground, or crops I built a coordinate variable system in order to help me control all 7 axis of movement in the system individually. I added vegetation in the garden bed in order to better convey the purpose of the system. SEE FOR YOURSELF! If you want to be more engaged in this projects trajectory or have any suggestions or questions, join the slack channel #grow-bot .
Traversal X₁ Axis Motor Today I made the mount for the stepper motor that runs the belt for the x-axis What is the motor’s purpose? It will allow the robot to move up to 120 inches down the garden bed. It engages with a belt that pulls the robot down aluminum tubes to traverse the full length Technical details It uses a 1x1 aluminum tube with 1/8 inch walls to mount to the main turret plate and them it houses the motor, pully and idlers for the belt I also shifted the entire belt over to the left for a better motor fit. CAD: FULL ROBOT Turret Only If you want to be more engaged in this projects trajectory or have any suggestions or questions, join the slack channel #grow-bot .
Electronics! Today I made an electronics box and modelled the spacing of the main electronic components. Electronics specifications: SBC: Raspberry Pi 5 (4GB) Motion controller: BTT Octopus Pro V1.1 (H723) Closed-loop drivers: StepperOnline CL57T V4.1 48V PSU: Meanwell SE-200-48 or similar Enclosure: Joinfworld Outdoor Electrical Box, 16x11x6 ABS Plastic The box is held up in the superstructure by four 3D prints and cable ties. FULL ROBOT Main Gantry + Electronics If you want to be more engaged in this projects trajectory or have any suggestions or questions, join the slack channel #grow-bot .
BOM Part List Configuration I did the long and tedious Task of going through every single part in the project and give each one a custom name, description and product details. I did this because of onshapes built in BOM tool, so now it gives me a full list of needed parts and quantities. I edited the properties of over 300 parts to do this. FULL ROBOT If you want to be more engaged in this projects trajectory or have any suggestions or questions, join the slack channel #grow-bot .
BOM Complete The BOM has been completed, I am now ready to submit for funding...
|
1792695170.5879874
|
1793299970.5879874
|
|
25853
|
Printing Kiosk by @roberto | Stardance
|
roberto
|
1
|
56.03
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T18:11:27Z", "hours": 35.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This project has been an exciting journey in transforming a manual workflow into an automated system. I created a self-service Printing Kiosk system that runs entirely on Linux. The system allows users to send documents via WhatsApp, which the kiosk automatically processes, converts into PDFs, lets the user configure the printing settings and sends directly to a printer via the CUPS native printing system. The interface is a modern, web-based dashboard built with NiceGUI, configured to run in browser Kiosk mode. The decision to rewrite the application interface from Tkinter to NiceGUI was a significant architectural shift, requiring to reimplement the layout and logic to support a web-based, Kiosk-ready experience. If someone were to set this up, they should keep mind that it is designed to be the only process running locally so it may be demanding. The setup script is straigntforward, users must manually configure config.json file and run the .sh file to setup all the application.", "repo": "https://github.com/rob80fame/printing-kiosk", "demo": "https://github.com/rob80fame/printing-kiosk/releases/tag/WIN"}]...
|
[{"post_id": 78741, "ts": "202 [{"post_id": 78741, "ts": "2026-10-11T13:34:32Z", "hours": 2.1419, "text": "bug fixes ( timers didn’t quite fit in, git update useless in installer) created exe with pyinstaller migrated to sqllite for easyer use"}, {"post_id": 74473, "ts": "2026-09-27T13:39:44Z", "hours": 1.0136, "text": "created .bat file for installation, I was unable to host it so it has to be installed on a Windows pc to work."}, {"post_id": 73250, "ts": "2026-09-24T17:50:55Z", "hours": 1.7158, "text": "ADDED auto update in python case if multiple pdf is not selected first, possibility to add multiple images inactivity timer code refactory merged policy.txt in config.json merge app.py and backend.py TODO create start.bat/sh with dual logic (with config modifier) fix merging problem"}, {"post_id": 71736, "ts": "2026-09-21T12:45:55Z", "hours": 0.7597, "text": "ADDED auto update in python case if multiple pdf is not selected first, possibility to add multiple images TODO merge app.py and backend.py inactivity timer"}, {"post_id": 70090, "ts": "2026-09-18T13:12:26Z", "hours": 0.3458, "text": "Added proportional resizing and unproportional resizing, fixed printing after resize. TODO more images in one file to resize"}, {"post_id": 69618, "ts": "2026-09-17T12:57:49Z", "hours": 3.1444, "text": "added feature: reduce/enlarge images to size todo: fix scaling issue (as in images)"}, {"post_id": 68079, "ts": "2026-09-14T14:12:19Z", "hours": 0.6703, "text": "FIXED 2x page not working"}, {"post_id": 67171, "ts": "2026-09-13T07:36:12Z", "hours": 1.9642, "text": "TODO reduce/enlarge images to size 2x page not working ADDED added policy e disclaimer added reduce/enlarge text size fixed multiple copies pricing bug"}, {"post_id": 65932, "ts": "2026-09-11T12:28:27Z", "hours": 0.6939, "text": "added privacy and policy readed from .txt file so it is easier to modify removed scroll when not needed"}, {"post_id": 65327, "ts": "2026-09-10T12:23:30Z", "hours": 2.0125, "text": "ADDED FUNCTION BUTTON SECTION NOW GOING BACK FROM PRINTING GOES TO FILE SELECTION NOW AFTER PRINTING GOES TO FILE SELECTION BACKEND OFFLINE WARNING PAGE ADDED ADMIN PAGEFIXED UI BUG"}, {"post_id": 63430, "ts": "2026-09-07T08:37:20Z", "hours": 1.2119, "text": "added print from usb key with fixed code configurable with config.json TODO: -update render_print_config with config.json changes ridimensiomanento manuale immagini touch scroll preview funzione riduci dimensioni testo"}, {"post_id": 63116, "ts": "2026-09-06T18:57:00Z", "hours": 1.6589, "text": "added features- input screen auto focus on txt input, limited only to numbers, without arrows added A1, A2 as 4xA3 and 2xA3"}, {"post_id": 62266, "ts": "2026-09-05T15:37:23Z", "hours": 2.6622, "text": "Implemented .bat and .sh file to auto install everything, added email reception as a way to send files"}, {"post_id": 31825, "ts": "2026-07-20T14:47:23Z", "hours": 1.0378, "text": "frontend demo"}, {"post_id": 30244, "ts": "2026-07-17T17:44:08Z", "hours": 0.8569, "text": "finished .sh for installation minor fixes"}, {"post_id": 30209, "ts": "2026-07-17T16:37:44Z", "hours": 8.74, "text": "Tkinter version fully working, but I needed to access it remotely so switched to niceGUI merged all the files (leaving only with backend.py and app.py) optimized for touch screen remote control modified to work on Linux as well as on Windows (using lp or SumatraPDF) added a button in configuration_ui to shut down the server remotely creating .sh file to install everything automatically"}, {"post_id": 28129, "ts": "2026-07-14T06:58:27Z", "hours": 0.8608, "text": "minor ui fixes to simplify usability"}, {"post_id": 26573, "ts": "2026-07-11T14:10:43Z", "hours": 2.3042, "text": "added multi printing (it merges the files selected onto one and prints it) added code 00000 (customizable in config.json) to exit application"}, {"post_id": 25952, "ts": "2026-07-10T14:00:56Z", "hours": 2.715, "text": "bug fix added cumulative pricing on main ui added tmp file for costs"}, {"post_id": 22281, "ts": "2026-07-04T17:45:18Z", "hours": 4.6311, "text": "completed a first fully working version implementing configurations TODOS: cumulative pricing on app.py print multiple files longclicking"}, {"post_id": 21560, "ts": "2026-07-03T16:08:42Z", "hours": 3.6578, "text": "fix of file structure, creation of starting ui and retrieval of datas"}, {"post_id": 20719, "ts": "2026-07-02T11:52:58Z", "hours": 2.1989, "text": "Printing Frontend demo finished"}, {"post_id": 20101, "ts": "2026-07-01T16:56:35Z", "hours": 4.2733, "text": "working on a python frontend using cmd Sumatra printing (even though I do not love the look of it)"}, {"post_id": 18382, "ts": "2026-06-29T14:54:35Z", "hours": 1.7942, "text": "Backend demo completed with all funtionalities. Started frontend with C# using PrintDialogX as base to create custom print interface"}, {"post_id": 17596, "ts": "2026-06-28T13:46:46Z", "hours": 2.7036, "text": "Finished setting up the environment locally with evolution_api, completed a demo for the backend part that recieves, saves and stores images (for now, planing on including documents)"}, {"post_id": 16230, "ts": "2026-06-26T11:27:17Z", "hours": 0.6822, "text": "trying to set up evolution api with docker"}]...
|
Title: Printing Kiosk by @roberto | Stardance
Dev Title: Printing Kiosk by @roberto | Stardance
Devlogs:
trying to set up evolution api with docker
Finished setting up the environment locally with evolution_api, completed a demo for the backend part that recieves, saves and stores images (for now, planing on including documents)
Backend demo completed with all funtionalities. Started frontend with C# using PrintDialogX as base to create custom print interface
working on a python frontend using cmd Sumatra printing (even though I do not love the look of it)
Printing Frontend demo finished
fix of file structure, creation of starting ui and retrieval of datas
completed a first fully working version implementing configurations TODOS: cumulative pricing on app.py print multiple files longclicking
bug fix added cumulative pricing on main ui added tmp file for costs
added multi printing (it merges the files selected onto one and prints it) added code 00000 (customizable in config.json) to exit application
minor ui fixes to simplify usability
Tkinter version fully working, but I needed to access it remotely so switched to niceGUI merged all the files (leaving only with backend.py and app.py) optimized for touch screen remote control modified to work on Linux as well as on Windows (using lp or SumatraPDF) added a button in configuration_ui to shut down the server remotely creating .sh file to install everything automatically
finished .sh for installation minor fixes
frontend demo
Implemented .bat and .sh file to auto install everything, added email reception as a way to send files
added features- input screen auto focus on txt input, limited only to numbers, without arrows added A1, A2 as 4xA3 and 2xA3
added print from usb key with fixed code configurable with config.json TODO: -update render_print_config with config.json changes ridimensiomanento manuale immagini touch scroll preview funzione riduci dimensioni testo
ADDED FUNCTION BUTTON SECTION NOW GOING BACK FROM PRINTING GOES TO FILE SELECTION NOW AFTER PRINTING GOES TO FILE SELECTION BACKEND OFFLINE WARNING PAGE ADDED ADMIN PAGEFIXED UI BUG
added privacy and policy readed from .txt file so it is easier to modify removed scroll when not needed
TODO reduce/enlarge images to size 2x page not working ADDED added policy e disclaimer added reduce/enlarge text size fixed multiple copies pricing bug
FIXED 2x page not working
added feature: reduce/enlarge images to size todo: fix scaling issue (as in images)
Added proportional resizing and unproportional resizing, fixed printing after resize. TODO more images in one file to resize
ADDED auto update in python case if multiple pdf is not selected first, possibility to add multiple images TODO merge app.py and backend.py inactivity timer
ADDED auto update in python case if multiple pdf is not selected first, possibility to add multiple images inactivity timer code refactory merged policy.txt in config.json merge app.py and backend.py TODO create start.bat/sh with dual logic (with config modifier) fix merging problem
created .bat file for installation, I was unable to host it so it has to be installed on a Windows pc to work.
bug fixes ( timers didn’t quite fit in, git update useless in installer) created exe with pyinstaller migrated to sqllite for easyer use
Ships:
This project has been an exciting journey in transforming a manual workflow into an automated system. I created a self-service Printing Kiosk system that runs entirely on Linux. The system allows users to send documents via WhatsApp, which the kiosk automatically processes, converts into PDFs, lets the user configure the printing settings and sends directly to a printer via the CUPS native printing system. The interface is a modern, web-based dashboard built with NiceGUI, configured to run in browser Kiosk mode. The decision to rewrite the application interface from Tkinter to NiceGUI was a significant architectural shift, requiring to reimplement the layout and logic to support a web-based, Kiosk-ready experience. If someone were to set this up, they should keep mind that it is designed to be the only process running locally so it may be demanding. The setup script is straigntforward, users must manually configure config.json file and run the .sh file to setup all the application....
|
1792997680.0420299
|
1793084080.0420299
|
|
316
|
Mesa AI by @ng_qi_an | Stardance
|
ng_qi_an
|
1
|
56.0
|
917
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T13:44:58Z", "hours": 56.0, "multiplier": 16.82, "payout": 917, "blessing": "neutral", "text": "Finally, a ship!! 🚢 This project was really rushed, as my exams are coming, and I couldn’t finish much of it. Really hope to continue in the next event! But here is what Mesa AI does right now: 📋 Generate concise summary notes from lectures which you can edit yourself, in a Notion-style editor. 🤖 Comes with a agent (i like to call it sidekick) that can search your lecture notes, research on the web, and put all that together by editing directly into your notes. 🗹 Ships with a quiz function for reinforced learning as well Built with a flexible tab-interface, allowing you to make opened chats/quizzes larger, or on the side as you please. 📑 Subject-specific instructions keep notes & quizzes relevant to syllabus, instead of those generic AI study apps out there. 📚 And an organization system that splits notes into classes, and files into folders. Demo credentials: Email: [email protected] Password: test1234 I don’t recommend using this, since you’ll be skipping out on the actual tutorials and onboarding flow. Just use if you’re too lazy. Here are some improvements from the Flavourtown edition: Model flexiblity: No longer locked to just Gemini in the chat 👀 Custom Rag pipeline built from scratch: Files are uploaded in 10s, while chat context is no longer bloated. 🖼️ More supported files: PDFs, slides, word documents, images can all be uploaded. 🗲 Efficient notebooks design: The layout has been reconfigured, letting you resize the side panel, and move tabs anywhere you like. 🔍 Agent chat: Chat can now search through your files directly instead of being a wrapper ☁️ Editable notes: Notes are no longer read-only, and save your changes! Things I learned: How to upload files with streams, and making those streams editable. How to integrate a text-editor. How to make AI interact with the BlockNote editor, given they don’t have a direct AI extension for my use case. How to create a RAG system, from extracting, to chunking, to embedding and querying. How to add tools to the model, making it truly agentic. For more technical details & future plans, checkout the github! Full breakdown of tech stack is there. Show some love and try the demo too!", "repo": "https://github.com/ng-qi-an/mesa-ai", "demo": "https://mesa-ai.vercel.app"}]...
|
[{"post_id": 53049, "ts": "202 [{"post_id": 53049, "ts": "2026-08-23T13:19:48Z", "hours": 0.3097, "text": "Image embeddings!! Forgot to install hackatime on a new editor so all the time i spent here on here was wasted 💔 Notebook improvements 🖼️ Images from files are extracted and saved 🖹 The model is presented with a list of images to choose from, and can embed them directly into the notebook. 🗲 Generating notes are now single-step . The old generate title, subtitle, topics then generate notes is abolished and combined into a single request. This makes note generation almost instant! 📋 New bottom bar that shows notebook actions, along with a editor mode (toggle between editing and viewing). File uploads Files uploaded are now indexed reliably. Images are also extracted from files, as mentioned before. Other changes Topics has been removed temporarily. Quiz no longer has topic options as well. Notebook is no longer accessible on mobile The tutorial was cut short. 😢 Things I couldn’t do: Having to focus on exams, I couldn’t finish Mesa AI before stardance ends. Here are a list of things I’ll work to complete the next hackclub event: Mobile support for Notebooks Notebook topics that are procedurally generated Add flashcards Freshen up UI (little unpolished here and there) Add a marking mode (AI marks papers for you) Collaboration & sharing notebooks Code the dashboard page (as a consolation i included a mockup of what it would have been) Making topics on the class page actually work 📹 Check out the demo video and screenshots! (show some love for me missing like almost 4-5 hours of work here)"}, {"post_id": 43313, "ts": "2026-08-08T14:43:23Z", "hours": 3.0472, "text": "Upload improvements File uploads are more stable, and status updates resume between reloads Users can see what stage their file is at on the indexing progress Allows for file statuses to still work even if the file selector dialog box is closed and reopened."}, {"post_id": 39434, "ts": "2026-08-02T11:57:23Z", "hours": 10.0094, "text": "Agentic notes?!?! 👀 *i really need to post devlogs more often ;p) check out the demo first if you’re too lazy to read 🤓 Agent 🤖 : ⭐️ This is a crazy milestone, and I finally finished one of the biggest features i really wanted to bring to Mesa ai when i decided to continue it on stardance. The chat window can now edit, delete and move notebook content ! ✍️ You can ask the chat to summarise blocks, turn into different formats or even create tables ⚡️ 📖 Basically a mini notion + notebookLM but with a study agent Use this with your sources and the web to supercharge research ! 🔬 I have plans to make the chat be able to create flashcards, quizzes and future tools directly from the chat window along with history, so there wont be a need to make those manually anymore ✨ Editor : Chat agent cursor shows which block it’s interacting with (the white bar on the left) ⌨️ Diff editor to see what the agent changed 📋 Tool approvals so you can choose whether to accept it or not! ✅ While Blocknote provides some helpers for the AI extension, since i’m not using it as intended, I had to patch up alot of the implementation myself 😭 Chat : Finally allowed images to be pasted or dragged into the chat window 🖼️ Added cool tool UI for notebook edits too 🎶 Check out the new demo!!!! 🎥 (sorry if its abit dizzying i was playing with the zooms a little too much) Honestly, I never imagined I would be capable enough to create something like this, starting just about 6 months ago. 🥲 Gimme a follow too if u wanna see more of this project and find out when its done ❤️"}, {"post_id": 35216, "ts": "2026-07-26T14:32:20Z", "hours": 11.23, "text": "Usage limits! Went over the 10hr limit 😭 🙈 In this update, messages now count towards a single usage limit. The default is 3000 credits, which is equivalent to 3 million tokens of Gemini 3 Flash. 💸 Limits are enforced at the API level, and the chat level. Free models can still be used even when the limit is exhausted. 🔁 Limits reset every billing cycle, which is about 1 month from the same day. Built in mind to be extended with stripe in the future to be monetised. ❤️ This is a soft limit, so currently generating chats won’t stop halfway. 📋 Billing breakdown can be seen in the usage tab on account settings, will be extended in the future! Other than that, 🍝 The notebook chat API and main chat API were merged, fixing some of the spaghetti code building up. 📁 The main chat can now reference ALL files too! That’s right, ALL FILES. 🤓 Notebook chats are still limited to files only linked to the notebook. 📹 Check out the awesome demo & screenshot i forgot to include in the video. Chat generation kinda slow, just skip forward."}, {"post_id": 30674, "ts": "2026-07-18T13:24:33Z", "hours": 0.8264, "text": "Web search! Short devlog, but I added Perplexity Search as a tool to both standalone chat & notebook chat. 🔍 🐛 Took considerably longer cause I found some weird bug where thinking modes would become null on reload Check out the screenshot for the UI eyecandy! 🍭"}, {"post_id": 30606, "ts": "2026-07-18T09:57:26Z", "hours": 8.9583, "text": "Notebook & Chat updates! Been really busy and I forgot to log :( Notebooks ☁️ Notebooks now save ! Changes made to the editor persist between reloads. ➗ Math equations can be edited using Latex. You can now create custom physics formulas :) ✨ Brand new animation when generating that unintentionally looks like siri (it’s kinda laggy though) Chat 🤖Claude now works ⚒️ New UI to visualise the model’s tool calls 👀 Seeing which queries and sources the model pulls information from is now easier than ever 🌐 Plans to implement this for web search Check out this amazing demo below 📹 (might be a lil blurry cause of the file limit)"}, {"post_id": 27675, "ts": "2026-07-13T13:36:17Z", "hours": 6.6358, "text": "More UI overhauls!! I completely forgot to make devlogs 😭 Been really busy so far In this update, I introduced a notion style notebook editor, allowing users to edit their AI-generated notes. Along with that, I’ve polished up the library panel Chats and quizzes now open in a seperate tab Tabs can be dragged between the sidebar and the main panel, allowing for ultimate flexibility(check out the video!!!!) The main panel (notebook) can also be resized, making it more flexible on smaller devices like ipads. In my next devlog, I’ll work on making edited notes save, and polish up the quiz UI (it was rushed from flavourtown)"}, {"post_id": 19258, "ts": "2026-06-30T14:58:42Z", "hours": 5.4336, "text": "Facelift! Made some huge design changes to notebooks! The interface is now tabbed, and notebook content is finally editable like Notion. Still ironing out formatting for the new editor, so math is a little broken New library interface is resizable and supports dragging! (Took longer than usual cause alot of things had to be moved around ❤️. Enjoy the videos!!)"}, {"post_id": 9245, "ts": "2026-06-15T15:04:49Z", "hours": 1.2183, "text": "RAG pipeline! Finally migrated the old notebooks to a rag-based one. Most of the changes are backend, so theres not much to show :( Files (PDFs, slides, lecture notes) were directly used as sources for notebooks before. This was slow, inefficient, and wasted tokens. Now, files are converted to markdown on upload. This markdown is then processed, and broken down into chunks in the rag pipeline, making chat faster and more accurate! Additionally, chat uses the new AI gateway/Openrouter provider to ensure fallback and consistent speeds regardless of provider downtime (plagued the app during flavourtown) On preliminary testing, generation speeds jumped from 30s ttft to 10s ttft, with chat seeing the most improvements. The next update should improve UI and refine subject prompts (a lil too robotic rn)!"}, {"post_id": 1290, "ts": "2026-06-03T05:54:05Z", "hours": 3.4972, "text": "Added a model selector to the chat menu! Along with this, thinking modes were standardised across all models, and usages are now tabulated. I plan to add tools too, so the chat window can actually retrieve information from notebooks or materials uploaded."}, {"post_id": 222, "ts": "2026-06-01T10:14:52Z", "hours": 4.5847, "text": "Stardance!! 🌟 . Back story This project is a continuation from flavourtown ( https://flavortown.hackclub.com/projects/10428 ), initially to help students use AI to make studying faster. A short summary for those unfamiliar: Mesa AI would create summary notes, quizzes and chats in a interface called notebooks. It’s meant to be similar to Notebook LM, but actually make notes and offer more exam accurate (subject-based instructions) notes & quizzes. Unfortunately, I couldn’t finish Mesa AI in time (took almost 100 hours!). In Stardance, I aim to complete this project’s ambitious plans, and finally ship it. Here are the things I intend to change or add: Complete all the unfinished pages Migrate to a fully custom RAG engine Move towards openrouter and Vercel AI gateway after that gemini outage which plagued Mesa AI in most of flavourtown Move from a read-only summary notes to notes which you can actually edit, and Mesa AI will edit them with you (agentic studying) . All those changes would need me to fundementally rewrite how Mesa AI was built, and make this journey on Stardance even more interesting. Mesa AI could also evolve to not just be a notetaker, but a researcher and an entire online tutor too. . First Devlog To start off this rewrite, I’ve already made the custom RAG engine, which replaces Google’s file search API (too slow, unreliable, and locks me into using a Google API key). All files are indexed automatically by a combination of Jina (PDF to markdown) and Mistral (PDF to markdown too), along with OpenAI’s embedding models. A 20-word summary is then generated with Gemma 4 such that search queries are more relevant without relying on file name alone. To test this, I made a barebones boilerplate to simulate a real chat. (See the image!) Sorry I don’t have more pictures! This devlog was mainly backend. In my testing, indexing (turning the file into embeddings and the summary) takes about 20s, with subsequent messages regarding that file taking about 5-8s (search and retrieval). Really pleased with the accuracy though! Sadly i forgot to install hackatime on my mac so a few hours were lost when i was working outside :("}]...
|
Title: Mesa AI by @ng_qi_an | Stardance
Devlogs:
Title: Mesa AI by @ng_qi_an | Stardance
Devlogs:
Stardance!! 🌟 . Back story This project is a continuation from flavourtown ( https://flavortown.hackclub.com/projects/10428 ), initially to help students use AI to make studying faster. A short summary for those unfamiliar: Mesa AI would create summary notes, quizzes and chats in a interface called notebooks. It’s meant to be similar to Notebook LM, but actually make notes and offer more exam accurate (subject-based instructions) notes & quizzes. Unfortunately, I couldn’t finish Mesa AI in time (took almost 100 hours!). In Stardance, I aim to complete this project’s ambitious plans, and finally ship it. Here are the things I intend to change or add: Complete all the unfinished pages Migrate to a fully custom RAG engine Move towards openrouter and Vercel AI gateway after that gemini outage which plagued Mesa AI in most of flavourtown Move from a read-only summary notes to notes which you can actually edit, and Mesa AI will edit them with you (agentic studying) . All those changes would need me to fundementally rewrite how Mesa AI was built, and make this journey on Stardance even more interesting. Mesa AI could also evolve to not just be a notetaker, but a researcher and an entire online tutor too. . First Devlog To start off this rewrite, I’ve already made the custom RAG engine, which replaces Google’s file search API (too slow, unreliable, and locks me into using a Google API key). All files are indexed automatically by a combination of Jina (PDF to markdown) and Mistral (PDF to markdown too), along with OpenAI’s embedding models. A 20-word summary is then generated with Gemma 4 such that search queries are more relevant without relying on file name alone. To test this, I made a barebones boilerplate to simulate a real chat. (See the image!) Sorry I don’t have more pictures! This devlog was mainly backend. In my testing, indexing (turning the file into embeddings and the summary) takes about 20s, with subsequent messages regarding that file taking about 5-8s (search and retrieval). Really pleased with the accuracy though! Sadly i forgot to install hackatime on my mac so a few hours were lost when i was working outside :(
Added a model selector to the chat menu! Along with this, thinking modes were standardised across all models, and usages are now tabulated. I plan to add tools too, so the chat window can actually retrieve information from notebooks or materials uploaded.
RAG pipeline! Finally migrated the old notebooks to a rag-based one. Most of the changes are backend, so theres not much to show :( Files (PDFs, slides, lecture notes) were directly used as sources for notebooks before. This was slow, inefficient, and wasted tokens. Now, files are converted to markdown on upload. This markdown is then processed, and broken down into chunks in the rag pipeline, making chat faster and more accurate! Additionally, chat uses the new AI gateway/Openrouter provider to ensure fallback and consistent speeds regardless of provider downtime (plagued the app during flavourtown) On preliminary testing, generation speeds jumped from 30s ttft to 10s ttft, with chat seeing the most improvements. The next update should improve UI and refine subject prompts (a lil too robotic rn)!
Facelift! Made some huge design changes to notebooks! The interface is now tabbed, and notebook content is finally editable like Notion. Still ironing out formatting for the new editor, so math is a little broken New library interface is resizable and supports dragging! (Took longer than usual cause alot of things had to be moved around ❤️. Enjoy the videos!!)
More UI overhauls!! I completely forgot to make devlogs 😭 Been really busy so far In this update, I introduced a notion style notebook editor, allowing users to edit their AI-generated notes. Along with that, I’ve polished up the library panel Chats and quizzes now open in a seperate tab Tabs can be dragged between the sidebar and the main panel, allowing for ultimate flexibility(check out the video!!!!) The main panel (notebook) can also be resized, making it more flexible on smaller devices like ipads. In my next devlog, I’ll work on making edited notes save, and polish up the quiz UI (it was rushed from flavourtown)
Notebook & Chat updates! Been really busy and I forgot to log :( Notebooks ☁️ Notebooks now save ! Changes made to the editor persist between reloads. ➗ Math equations can be edited using Latex. You can now create custom physics formulas :) ✨ Brand new animation when generating that unintentionally looks like siri (it’s kinda laggy though) Chat 🤖Claude now works ⚒️ New UI to visualise the model’s tool calls 👀 Seeing which queries and sources the model pulls information from is now easier than ever 🌐 Plans to implement this for web search Check out this amazing demo below 📹 (might be a lil blurry cause of the file limit)
Web search! Short devlog, but I added Perplexity Search as a tool to both standalone chat & notebook chat. 🔍 🐛 Took considerably longer cause I found some weird bug where thinking modes would become null on reload Check out the screenshot for the UI eyecandy! 🍭
Usage limits! Went over the 10hr limit 😭 🙈 In this update, messages now count towards a single usage limit. The default is 3000 credits, which is equivalent to 3 million tokens of Gemini 3 Flash. 💸 Limits are enforced at the API level, and the chat level. Free models can still be used even when the limit is exhausted. 🔁 Limits reset every billing cycle, which is about 1 month from the same day. Built in mind to be extended with stripe in the future to be monetised. ❤️ This is a soft limit, so currently generating chats won’t stop halfway. 📋 Billing breakdown can be seen in the usage tab on account settings, will be extended in the future! Other than that, 🍝 The notebook chat API and main chat API were merged, fixing some of the spaghetti code building up. 📁 The main chat can now reference ALL files too! That’s right, ALL FILES. 🤓 Notebook chats are still limited to files only linked to the notebook. 📹 Check out the awesome demo & screenshot i forgot to include in the video. Chat generation kinda slow, just skip forward.
Agentic notes?!?! 👀 *i really need to post devlogs more often ;p) check out the demo first if you’re too lazy to read 🤓 Agent 🤖 : ⭐️ This is a crazy milestone, and I finally finished one of the biggest features i really wanted to bring to Mesa ai when i decided to continue it on stardance. The chat window can now edit, delete and move notebook content ! ✍️ You can ask the chat to summarise blocks, turn into different formats or even create tables ⚡️ 📖 Basically a mini notion + notebookLM but with a study agent Use this with your sources and the web to supercharge research ! 🔬 I have plans to make the chat be able to create flashcards, quizzes and future tools directly from the chat window along with history, so there wont be a need to make those manually anymore ✨ Editor : Chat agent cursor shows which block it’s interacting with (the white bar on the left) ⌨️ Diff editor to see what the agent changed 📋 Tool approvals so you can choose whether to accept it or not! ✅ While Blocknote provides some helpers for the AI extension, since i’m not using it as intended, I had to patch up alot of the implementation myself 😭 Chat : Finally allowed images to be pasted or dragged into the chat window 🖼️ Added cool tool UI for notebook edits too 🎶 Check out the new demo!!!! 🎥 (sorry if its abit dizzying i was playing with the zooms a little too much) Honestly, I never imagined I would be capable enough to create something like this, starting just about 6 months ago. 🥲 Gimme a follow too if u wanna see more of this project and find out when its done ❤️
Upload improvements File uploads are more stable, and status updates resume between reloads Users can see what stage their file is at on the indexing progress Allows for file statuses to still work even if the file selector dialog box is closed and reopened.
Image embeddings!! Forgot to install hackatime on a new editor so all the time i spent here on here was wasted 💔 Notebook improvements 🖼️ Images from files are extracted and saved 🖹 The model is presented with a list of images to choose from, and can embed them directly into the notebook. 🗲 Generating notes are now single-step . The old generate title, subtitle, topics then generate notes is abolished and combined into a single request. This makes note generation almost instant! 📋 New bottom bar that shows notebook actions, along with a editor mode (toggle between editing and viewing). File uploads Files uploaded are now indexed reliably. Images are also extracted from files, as mentioned before. Other changes Topics has been removed temporarily. Quiz no longer has topic options as well. Notebook is no longer accessible on mobile The tutorial was cut short. 😢 Things I couldn’t do: Having to focus on exams, I couldn’t finish Mesa AI before stardance ends. Here are a list of things I’ll work to complete the next hackclub event: Mobile support for Notebooks Notebook topics that are procedurally generated Add flashcards Freshen up UI (little unpolished here and there) Add a marking mode (AI marks papers for you) Collaboration & sharing notebooks Code the dashboard page (as a consolation i included a mockup of what it would have been) Making topics on the class page actually work 📹 Check out the demo video and screenshots! (show some love for me missing like almost 4-5 hours of work here)
Ships:
Finally, a ship!! 🚢 This project was really rushed, as my exams are coming, and I couldn’t finish much of it. Really hope to continue in the next event! But here is what Mesa AI does right now: 📋 Generate concise summary notes from lectures which you can edit yourself, in a Notion-style editor. 🤖 Comes with a agent (i like to call it sidekick) that can search your lecture notes, research on the web, and put all that together by editing directly into your notes. 🗹 Ships with a quiz function for reinforced learning as well Built with a flexible tab-interface, allowing you to make opened chats/quizzes larger, or on the side as you please. 📑 Subject-specific instructions keep notes & quizzes relevant to syllabus, instead of those generic AI study apps out there. 📚 And an organization system that splits notes into classes, and files into folders. Demo credentials: Email: [email protected] Password: test1234 I don’t recommend using this, since you’ll be skipping out on the actual tutorials and onboarding flow. Just use if you’re too lazy. Here are some improvements from the Flavourtown edition: Model flexiblity: No longer locked to just Gemini in the chat 👀 Custom Rag pipeline built from scratch: Files are uploaded in 10s, while chat context is no longer bloated. 🖼️ More supported files: PDFs, slides, word documents, images can all be uploaded. 🗲 Efficient notebooks design: The layout has been reconfigured, letting you resize the side panel, and move tabs anywhere you like. 🔍 Agent chat: Chat can now search through your files directly instead of being a wrapper ☁️ Editable notes: Notes are no longer read-only, and save your changes! Things I learned: How to upload files with streams, and making those streams editable. How to integrate a text-editor. How to make AI interact with the BlockNote editor, given they don’t have a direct AI extension for my use case. How to create a RAG system, from extracting, to chunking, to embedding and querying. How to add tools to the model, making it truly agentic. For more technical details & future plans, checkout the github! Full breakdown of tech stack is there. Show some love and try the demo too!...
|
1792990353.3016624
|
1793076753.3016624
|
|
25748
|
a lego sorter app by @legolucas | Stardance
|
legolucas
|
1
|
56.0
|
774
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T11:56:00Z", "hours": 56.0, "multiplier": 13.88, "payout": 774, "blessing": "neutral", "text": "i made the software/ui for my lego sorting machine i am proud that it works and that i now can begin on my hardware project and it looks really good i think i hope you also think that", "repo": "https://github.com/ecochicnl-collab/lego-sortingmachine", "demo": "https://legosorterv2.netlify.app/"}]...
|
[{"post_id": 54502, "ts": "202 [{"post_id": 54502, "ts": "2026-08-25T14:59:14Z", "hours": 7.7147, "text": "Devlog #12 Project: LEGO Sorter AppOverviewFinalizing the search system and completing the software development.Progress UpdateI fully finished the search and inventory system! It now supports detailed search filters and visual previews with images. With help from AI, I resolved a major issue where downloading images and syncing all storage bins was freezing the app due to long loading times. With an optimized asynchronous system in place, the entire software suite is complete. This marks the final devlog for the software phase.Next StepsShift focus entirely to the physical device and start building the hardware.Thank you for reading!"}, {"post_id": 34127, "ts": "2026-07-24T16:49:13Z", "hours": 7.6042, "text": "Devlog #11 Project: LEGO Sorter App Overview Connecting the software to the hardware. Progress Update Today, I built the interface that runs directly on the sorting machine. It successfully communicates with the esp32 via Python scripts. This marks a major milestone in bridging the simulation with the physical device. Next Steps Develop the “Pak een blokje” (Pick a brick) feature. Finalize the inventory screen. Thank you for reading!"}, {"post_id": 30821, "ts": "2026-07-18T19:08:12Z", "hours": 9.2661, "text": "Devlog #10 Project: LEGO Sorter App Overview Completion of the search and inventory system. Progress Update The search system is now complete, although I still need to polish minor details like text sizes and player preferences later. I downloaded a CSV file from BrickLink containing all existing LEGO bricks and built a search interface using toggles for specific categories like modified hinges. Users can input brick sizes to find specific parts, and the grid system updates accordingly. Next Steps Clean up the UI for the inventory tab. Begin the next phase of development. Thank you for reading!"}, {"post_id": 29368, "ts": "2026-07-16T08:35:47Z", "hours": 1.7981, "text": "Devlog #09 Project: LEGO Sorter App Overview Managing the UI for the two sides of the sorting machine. Progress Update I have built the system for both sides of the machine, including a screen-switching mechanism. Implementing the screen transitions was time-consuming due to the grid layout, but it is now functioning as intended. My next focus is researching how to connect the BrickLink database to Unity so that specific bricks can be assigned to individual cups. Next Steps Integrate the BrickLink database into the project. Refine the assignment logic for bricks and cups. Thank you for reading!"}, {"post_id": 29106, "ts": "2026-07-15T19:23:17Z", "hours": 2.73, "text": "Devlog #08 Project: LEGO Sorter App Overview Development of the cup grid system. Progress Update I created a grid representing the LEGO storage cups, with 500 spots on each side. I implemented a system where these spots function as buttons, including a zoom functionality for better accessibility. I faced an issue where only the first layer would move correctly during interaction, but I was eventually able to resolve this with some help from AI. Next Steps Continue refining the grid interactions. Begin integrating the sorting logic with the grid. Thank you for reading!"}, {"post_id": 28837, "ts": "2026-07-15T10:51:58Z", "hours": 6.8975, "text": "Devlog #07 Project: LEGO Sorter App Overview The simulation tab is now complete. Progress Update I have finalized the UI for the simulation tab, which now includes sliders to adjust the rotation speed and the drop timing. I have also implemented a calculation system that determines the throughput of the machine, measured in bricks per hour. Next Steps Transition to developing a new tab for the application. Thank you for reading!"}, {"post_id": 26575, "ts": "2026-07-11T14:13:51Z", "hours": 0.6842, "text": "Devlog #06 Project: LEGO Sorter App Overview Improvements to the detection accuracy of the system. Progress Update The system is now performing reliably. By introducing a timer that allows the brick to fall for a slightly longer duration before scanning, the AI is consistently identifying the bricks correctly. Next Steps Finalize the simulation tab interface. Begin work on additional UI elements. Thank you for reading!"}, {"post_id": 26546, "ts": "2026-07-11T12:58:32Z", "hours": 9.0408, "text": "Devlog #05 Project: LEGO Sorter App Overview I have successfully integrated the Brickognize API into the Unity environment. Progress Update Getting the colliders and rotation to sync with brick falling was difficult, but it is now operational. I implemented a logic where the brick becomes a child of the carousel upon contact. Furthermore, I set up a system that captures images of both the top and bottom of the brick and sends them to the Brickognize API. Because I had trouble getting the implementation to work, I utilized AI to assist with the Python script used for API communication within Unity. Next Steps Tweak the physical interaction of the bricks to make the movement feel more realistic. Continue optimizing the detection workflow. Thank you for reading!"}, {"post_id": 21740, "ts": "2026-07-03T20:37:03Z", "hours": 6.4189, "text": "Devlog #04 Project: LEGO Sorter App Overview This update focuses on optimizing the carousel simulation and implementing a collision avoidance system. Progress Update After troubleshooting various joint configurations that did not perform as expected, I pivoted to using transform-based simulation for the carousel. I also implemented a safety system: if a brick is detected in the fall range of another C-channel, that specific channel will pause its movement to prevent jams. This ensures that bricks are handled one at a time. Next Steps Implement image capturing of the carousel using OpenCV. Integrate the Brickognize API to identify the LEGO bricks. Thank you for reading!"}, {"post_id": 20029, "ts": "2026-07-01T15:08:03Z", "hours": 1.3989, "text": "Devlog #03 Project: LEGO Sorter App Overview The simulation is taking shape with the addition of physical interactions and movement. Progress Update I have implemented the script that allows the C-channel to rotate. I also set up the spawning logic for the LEGO bricks. A significant challenge was fine-tuning the mesh colliders and rigidbodies to ensure the bricks interact correctly. The bricks currently lack sufficient traction, so I will need to experiment with different mass settings and physical properties. Next Steps Test different physics configurations to optimize brick movement. Refine the interaction between the bricks and the carousel. Thank you for reading!"}, {"post_id": 19955, "ts": "2026-07-01T12:33:35Z", "hours": 1.2903, "text": "Devlog #02 Project: LEGO Sorter App Overview Today, I made progress on the Unity simulation environment. Progress Update I successfully imported the 3D model of the C-channel, which I designed in Fusion 360, into the Unity project. Additionally, I implemented a camera script that allows for viewing the model from different angles and includes a zoom function for closer inspection of the components. Next Steps Begin integrating rotation logic for the components. Set up the brick spawning mechanics. Thank you for reading!"}, {"post_id": 15645, "ts": "2026-06-25T13:17:08Z", "hours": 0.8986, "text": "Devlog #01 Project: LEGO Sorter App Overview Hello everyone, welcome to the first devlog for the LEGO Sorter App. I have officially started working on this project, which involves two main components: designing the physical sorter in Fusion 360 and developing the software application in Unity to manage the sorting process. Progress Update Today, I have nearly completed the physical model for the sorter in Fusion 360. Simultaneously, I have begun the foundational work in Unity by implementing the basic UI and buttons that allow for navigation between different scenes. Next Steps Continue refining the physical model in Fusion 360. Expand the Unity interface to include more detailed menus. Thank you for reading!"}]...
|
Title: a lego sorter app by @legolucas | Stardance Title: a lego sorter app by @legolucas | Stardance
Devlogs:
Devlog #01 Project: LEGO Sorter App Overview Hello everyone, welcome to the first devlog for the LEGO Sorter App. I have officially started working on this project, which involves two main components: designing the physical sorter in Fusion 360 and developing the software application in Unity to manage the sorting process. Progress Update Today, I have nearly completed the physical model for the sorter in Fusion 360. Simultaneously, I have begun the foundational work in Unity by implementing the basic UI and buttons that allow for navigation between different scenes. Next Steps Continue refining the physical model in Fusion 360. Expand the Unity interface to include more detailed menus. Thank you for reading!
Devlog #02 Project: LEGO Sorter App Overview Today, I made progress on the Unity simulation environment. Progress Update I successfully imported the 3D model of the C-channel, which I designed in Fusion 360, into the Unity project. Additionally, I implemented a camera script that allows for viewing the model from different angles and includes a zoom function for closer inspection of the components. Next Steps Begin integrating rotation logic for the components. Set up the brick spawning mechanics. Thank you for reading!
Devlog #03 Project: LEGO Sorter App Overview The simulation is taking shape with the addition of physical interactions and movement. Progress Update I have implemented the script that allows the C-channel to rotate. I also set up the spawning logic for the LEGO bricks. A significant challenge was fine-tuning the mesh colliders and rigidbodies to ensure the bricks interact correctly. The bricks currently lack sufficient traction, so I will need to experiment with different mass settings and physical properties. Next Steps Test different physics configurations to optimize brick movement. Refine the interaction between the bricks and the carousel. Thank you for reading!
Devlog #04 Project: LEGO Sorter App Overview This update focuses on optimizing the carousel simulation and implementing a collision avoidance system. Progress Update After troubleshooting various joint configurations that did not perform as expected, I pivoted to using transform-based simulation for the carousel. I also implemented a safety system: if a brick is detected in the fall range of another C-channel, that specific channel will pause its movement to prevent jams. This ensures that bricks are handled one at a time. Next Steps Implement image capturing of the carousel using OpenCV. Integrate the Brickognize API to identify the LEGO bricks. Thank you for reading!
Devlog #05 Project: LEGO Sorter App Overview I have successfully integrated the Brickognize API into the Unity environment. Progress Update Getting the colliders and rotation to sync with brick falling was difficult, but it is now operational. I implemented a logic where the brick becomes a child of the carousel upon contact. Furthermore, I set up a system that captures images of both the top and bottom of the brick and sends them to the Brickognize API. Because I had trouble getting the implementation to work, I utilized AI to assist with the Python script used for API communication within Unity. Next Steps Tweak the physical interaction of the bricks to make the movement feel more realistic. Continue optimizing the detection workflow. Thank you for reading!
Devlog #06 Project: LEGO Sorter App Overview Improvements to the detection accuracy of the system. Progress Update The system is now performing reliably. By introducing a timer that allows the brick to fall for a slightly longer duration before scanning, the AI is consistently identifying the bricks correctly. Next Steps Finalize the simulation tab interface. Begin work on additional UI elements. Thank you for reading!
Devlog #07 Project: LEGO Sorter App Overview The simulation tab is now complete. Progress Update I have finalized the UI for the simulation tab, which now includes sliders to adjust the rotation speed and the drop timing. I have also implemented a calculation system that determines the throughput of the machine, measured in bricks per hour. Next Steps Transition to developing a new tab for the application. Thank you for reading!
Devlog #08 Project: LEGO Sorter App Overview Development of the cup grid system. Progress Update I created a grid representing the LEGO storage cups, with 500 spots on each side. I implemented a system where these spots function as buttons, including a zoom functionality for better accessibility. I faced an issue where only the first layer would move correctly during interaction, but I was eventually able to resolve this with some help from AI. Next Steps Continue refining the grid interactions. Begin integrating the sorting logic with the grid. Thank you for reading!
Devlog #09 Project: LEGO Sorter App Overview Managing the UI for the two sides of the sorting machine. Progress Update I have built the system for both sides of the machine, including a screen-switching mechanism. Implementing the screen transitions was time-consuming due to the grid layout, but it is now functioning as intended. My next focus is researching how to connect the BrickLink database to Unity so that specific bricks can be assigned to individual cups. Next Steps Integrate the BrickLink database into the project. Refine the assignment logic for bricks and cups. Thank you for reading!
Devlog #10 Project: LEGO Sorter App Overview Completion of the search and inventory system. Progress Update The search system is now complete, although I still need to polish minor details like text sizes and player preferences later. I downloaded a CSV file from BrickLink containing all existing LEGO bricks and built a search interface using toggles for specific categories like modified hinges. Users can input brick sizes to find specific parts, and the grid system updates accordingly. Next Steps Clean up the UI for the inventory tab. Begin the next phase of development. Thank you for reading!
Devlog #11 Project: LEGO Sorter App Overview Connecting the software to the hardware. Progress Update Today, I built the interface that runs directly on the sorting machine. It successfully communicates with the esp32 via Python scripts. This marks a major milestone in bridging the simulation with the physical device. Next Steps Develop the “Pak een blokje” (Pick a brick) feature. Finalize the inventory screen. Thank you for reading!
Devlog #12 Project: LEGO Sorter AppOverviewFinalizing the search system and completing the software development.Progress UpdateI fully finished the search and inventory system! It now supports detailed search filters and visual previews with images. With help from AI, I resolved a major issue where downloading images and syncing all storage bins was freezing the app due to long loading times. With an optimized asynchronous system in place, the entire software suite is complete. This marks the final devlog for the software phase.Next StepsShift focus entirely to the physical device and start building the hardware.Thank you for reading!
Ships:
i made the software/ui for my lego sorting machine i am proud that it works and that i now can begin on my hardware project and it looks really good i think i hope you also think that...
|
1792993804.5416493
|
1793080204.5416493
|
|
34089
|
Carnival Chaos by @Nico | Stardance
|
Nico
|
2
|
56.0
|
482
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-08T16:26:51Z", "hours": 30.0, "multiplier": 16.44, "payout": 482, "blessing": "neutral", "text": "Carnival Chaos Carnival Chaos is a short, WarioWare-like game with 7 fun minigames you need to complete to win Hay bale climb - Platform up the hay bales to collect the coins Whack-a-mole - Click on all the moles before time runs out Dunk Tank - rapidly click the target as fast as you can to dunk the person Water Gun - Spray the target with your water gun to fill up the meter and win High Striker - Hit the button with the hammer to ring the bell Tug of War - Hit quick-time events to pull on the rope. pull far enough to win Face Painting - Paint the face to match the template. If you are close enough to the guide, you win the game! Once you win, you’ll see how long you took. Click play again and see how fast you can go!. My fastest time is 90.30 seconds. Try to beat that! Have fun!!!", "repo": "https://github.com/DinoMito1/Carnival-Chaos", "demo": "https://dino-mito.itch.io/carnival-chaos"}, {"ship_num": 2, "ts": "2026-08-18T18:43:59Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Carnival Chaos This is a WarioWare-like game There are 4 quick minigames you must complete to win A platformer - climb on hay bales and collect the coins Whack-a-mole - click all of the moles in time Dunk Tank - rapidly hit the target many times Water Gun - spray water at a target to fill up the bar and win When you win, you’ll see how long you took to win. Try again and see how fast you can go my fastest time is 31.10 seconds. Try beating that! Hope you have fun!", "repo": "https://github.com/DinoMito1/Carnival-Chaos", "demo": "https://dino-mito.itch.io/carnival-chaos"}]...
|
[{"post_id": 77720, "ts": "202 [{"post_id": 77720, "ts": "2026-10-08T02:44:08Z", "hours": 2.5572, "text": "One Last Devlog! This devlog will be a shorter one. There wasn’t to much work left to do, so this last section didn’t take too long. I added another option into settings, being a manual toggle for mobile controls, incase they dont turn on automatically for mobile users or you just want to try the controls on PC. I also made a pause button . During any level of the game you can press the button to pause the game and decide whether to continue or quit back to the start of the game. I can’t believe this game is finally finished! I’ll be shipping it very soon, but in the meantime, you can try the game here! Let me know what you think!"}, {"post_id": 73724, "ts": "2026-09-25T19:49:24Z", "hours": 10.935, "text": "THE FINAL MINIGAME!!! Took a while, but I finally finished minigame 7! You have to paint the face to match the reference image before time runs out. This minigame was super difficult to get working because i needed to edit the face texture during run time, and I had no idea how to do that. Once I got the drawing to work I ran into another problem – how do you beat the game? I ended up having it check every pixel of your drawing against the reference image and keeping track of how many are the same color and letting you win as long as you are at least 70% accurate. I thought I was finished, so I exported the game and gave it one last test. It didn’t work. For some reason, when I exported to web, none of the drawing parts would work and I had to recode parts of the minigame several times. Eventually I got everything working. I know I just complained a lot, but I am really proud of this. It’s easily the most difficult thing I’ve made yet. Go test the game, tell me what you think! You can try it here!"}, {"post_id": 68378, "ts": "2026-09-15T01:05:16Z", "hours": 8.6708, "text": "Minigame Six!!! It’s Tug of War! You have to hit the QTEs to pull the rope in your direction and win the minigame. I originally started making an entire different minigame, but after working on it for several hours I realized it wasn’t very fun at all and scrapped it. I spent forever tweaking with the different numbers for this game, trying to get it to feel nice to play, and I think its pretty fun now. I also tried showing off the game to my brothers on mobile and they really struggled to use the mobile arrow key things, so they helped me fix it so that the 1st and 4th minigame are easier to play on phone. I’m trying really hard to balance the difficulty for this while keeping this fun for everyone, but for those looking for a challenge, I am planning on adding a hard mode soon If you want to try the game, you can play it here !"}, {"post_id": 64563, "ts": "2026-09-09T02:17:49Z", "hours": 8.0703, "text": "I’m back with minigame five! This one is based on those hammer tower games I can never remember the name of You have to press spacebar when the hammer is above the button to swing down and ring the bell! I also added… MOBILE SUPPORT Every single minigame now works on mobile. I made custom arrow key buttons for the platforming and water gun game on mobile. I also slightly polished some older things, mainly the first two minigames, making it slightly more obvious when you win and playing a sad sound when you lose If you want to try the game, you can play it here Sorry its been a while since my last devlog. I’ve been on vacation for the last several days and now school has started again. I’ll try to make 2 more minigames for a total of 7, and then I will be happy to call this complete!"}, {"post_id": 47856, "ts": "2026-08-16T02:43:27Z", "hours": 6.0897, "text": "Fourth Minigame!!! You have to shoot the target with the water gun to fill up the bar in time to win the minigame. The target is constantly moving along a track so it is more difficult to stay on the target. I was struggling for a while to get this minigame feeling fun. Whenever I tested it, it always felt like something was missing so I tried a bunch of different stuff, like adding little sound effects or making the target react to being sprayed with water. I tried lots of different things, not all of them got used, but I think I’m happy with how this plays right now With the fourth minigame finished, I’d say the game is finished too. I just have to write the README and put it on Itch.io, then this will be fully done. You can expect to see this get shipped soon!"}, {"post_id": 45250, "ts": "2026-08-11T16:26:19Z", "hours": 5.9428, "text": "Minigame Number 3!!! Its a Dunk Tank! You have to hit the target a bunch of times before time runs out to dunk the person and win the minigame. My little brother wanted to help out with this one so I let him make the splash sound for the dunk tank. speaking of my brother, I let him play test everything once I finished this minigame and he seemed to really enjoy it. He was playing for 20+ minutes trying to get a fast time, so I’m feeling pretty good about the game right now. I also added a volume slider in settings, this is where most of my time was spent. I originally was going to make the slider change the decibel level of every sound in the game individually, but since decibels are logarithmic, I didn’t know how to mute the audio this way. After a while I figured out how to scale volume linearly, but the way I was doing would require me to redo all of the audio ingame. I spent multiple hours messing around with audio stuff trying to make the slider work how I wanted, until I thought that there has to be an easier way. Then I found out about Audio Buses. I did exactly what I was already doing to all of the sounds to only the Audio Bus instead and this fixed my several hour long problem almost immediately. Just one more minigame to go and I think this game will be finished!"}, {"post_id": 42864, "ts": "2026-08-07T20:25:01Z", "hours": 3.9539, "text": "You can win now! Yippee!!! I made a win screen that shows if you beat all the minigames and a loss screen that shows if you somehow run out of lives. Both of the screens have a big retry button that takes you back to the menu, so you wont have to reopen the game to play again anymore. The win screen also has a cool sign that shows off your time and your best time. Your best time is saved if you retry so you can try to win all minigames as fast as you can To keep track of your time I just start a timer as soon as you press the start button and then check how long its been once you win I also added sound!!! It felt way too quiet playing through the game so I added some simple sound effects for stuff like clicking buttons, whacking moles, jumping, and some others. The sound effects were super fun to make because they are all just my voice lol. I’m not sure why this took me so long to do, it didnt feel like that much stuff. Regardless, I think I’ll make two more minigames after this, and then this will be ready to ship!"}, {"post_id": 40541, "ts": "2026-08-04T05:13:34Z", "hours": 3.4028, "text": "Second minigame finished!!! This one is just like classic Whack-a-mole games. You have to hit all the moles in time to win! This minigame was actually the quickest and easiest thing to code so far. (Though i did spend an embarrassingly long time on the art) Instead most of my time in Godot was spent polishing some things I didn’t like too much yet. The coins in the first minigame float up and down now. I forgot to do this when I first made them. Instead of just disappearing, your lives, which are tickets, rip in two then fade away when you lose a minigame. Lastly, I put an indicator before each minigame to show what it’s controls are. Such as arrow keys or mouse. Then when the minigame starts it shows in big text on the screen what your goal is. For example on the platforming minigame it says COLLECT Sorry for the longer devlog, I had a lot of little things I did I thought were worth sharing. Im really starting to like how this is coming along, so you can expect to see more devlogs from me soon."}, {"post_id": 38491, "ts": "2026-07-31T22:02:27Z", "hours": 4.3592, "text": "Finished the platforming minigame! It is based on those big stacks of hay you can climb at carnivals sometimes. You have to try and collect three coins before time is up to win. I wanted to give the little character a walking animation but i was struggling to figure it out so they just have a slightly different sprite while walking. I messed around with the movement speed and minigame time for a while to try and get good so overall im pretty happy with this."}, {"post_id": 35593, "ts": "2026-07-27T03:57:05Z", "hours": 2.0839, "text": "Made the menu for Carnival Chaos. This is going to be a WarioWare-like game where you complete several different carnival themed minigames to win! I got distracted making the art for a while and decided to make the building animated, but it took me forever to figure out how to use timers. I know there’s not too much right now but please let me know if you have any thoughts or criticism!"}]...
|
Title: Carnival Chaos by @Nico | Stardance
Devlog Title: Carnival Chaos by @Nico | Stardance
Devlogs:
Made the menu for Carnival Chaos. This is going to be a WarioWare-like game where you complete several different carnival themed minigames to win! I got distracted making the art for a while and decided to make the building animated, but it took me forever to figure out how to use timers. I know there’s not too much right now but please let me know if you have any thoughts or criticism!
Finished the platforming minigame! It is based on those big stacks of hay you can climb at carnivals sometimes. You have to try and collect three coins before time is up to win. I wanted to give the little character a walking animation but i was struggling to figure it out so they just have a slightly different sprite while walking. I messed around with the movement speed and minigame time for a while to try and get good so overall im pretty happy with this.
Second minigame finished!!! This one is just like classic Whack-a-mole games. You have to hit all the moles in time to win! This minigame was actually the quickest and easiest thing to code so far. (Though i did spend an embarrassingly long time on the art) Instead most of my time in Godot was spent polishing some things I didn’t like too much yet. The coins in the first minigame float up and down now. I forgot to do this when I first made them. Instead of just disappearing, your lives, which are tickets, rip in two then fade away when you lose a minigame. Lastly, I put an indicator before each minigame to show what it’s controls are. Such as arrow keys or mouse. Then when the minigame starts it shows in big text on the screen what your goal is. For example on the platforming minigame it says COLLECT Sorry for the longer devlog, I had a lot of little things I did I thought were worth sharing. Im really starting to like how this is coming along, so you can expect to see more devlogs from me soon.
You can win now! Yippee!!! I made a win screen that shows if you beat all the minigames and a loss screen that shows if you somehow run out of lives. Both of the screens have a big retry button that takes you back to the menu, so you wont have to reopen the game to play again anymore. The win screen also has a cool sign that shows off your time and your best time. Your best time is saved if you retry so you can try to win all minigames as fast as you can To keep track of your time I just start a timer as soon as you press the start button and then check how long its been once you win I also added sound!!! It felt way too quiet playing through the game so I added some simple sound effects for stuff like clicking buttons, whacking moles, jumping, and some others. The sound effects were super fun to make because they are all just my voice lol. I’m not sure why this took me so long to do, it didnt feel like that much stuff. Regardless, I think I’ll make two more minigames after this, and then this will be ready to ship!
Minigame Number 3!!! Its a Dunk Tank! You have to hit the target a bunch of times before time runs out to dunk the person and win the minigame. My little brother wanted to help out with this one so I let him make the splash sound for the dunk tank. speaking of my brother, I let him play test everything once I finished this minigame and he seemed to really enjoy it. He was playing for 20+ minutes trying to get a fast time, so I’m feeling pretty good about the game right now. I also added a volume slider in settings, this is where most of my time was spent. I originally was going to make the slider change the decibel level of every sound in the game individually, but since decibels are logarithmic, I didn’t know how to mute the audio this way. After a while I figured out how to scale volume linearly, but the way I was doing would require me to redo all of the audio ingame. I spent multiple hours messing around with audio stuff trying to make the slider work how I wanted, until I thought that there has to be an easier way. Then I found out about Audio Buses. I did exactly what I was already doing to all of the sounds to only the Audio Bus instead and this fixed my several hour long problem almost immediately. Just one more minigame to go and I think this game will be finished!
Fourth Minigame!!! You have to shoot the target with the water gun to fill up the bar in time to win the minigame. The target is constantly moving along a track so it is more difficult to stay on the target. I was struggling for a while to get this minigame feeling fun. Whenever I tested it, it always felt like something was missing so I tried a bunch of different stuff, like adding little sound effects or making the target react to being sprayed with water. I tried lots of different things, not all of them got used, but I think I’m happy with how this plays right now With the fourth minigame finished, I’d say the game is finished too. I just have to write the README and put it on Itch.io, then this will be fully done. You can expect to see this get shipped soon!
I’m back with minigame five! This one is based on those hammer tower games I can never remember the name of You have to press spacebar when the hammer is above the button to swing down and ring the bell! I also added… MOBILE SUPPORT Every single minigame now works on mobile. I made custom arrow key buttons for the platforming and water gun game on mobile. I also slightly polished some older things, mainly the first two minigames, making it slightly more obvious when you win and playing a sad sound when you lose If you want to try the game, you can play it here Sorry its been a while since my last devlog. I’ve been on vacation for the last several days and now school has started again. I’ll try to make 2 more minigames for a total of 7, and then I will be happy to call this complete!
Minigame Six!!! It’s Tug of War! You have to hit the QTEs to pull the rope in your direction and win the minigame. I originally started making an entire different minigame, but after working on it for several hours I realized it wasn’t very fun at all and scrapped it. I spent forever tweaking with the different numbers for this game, trying to get it to feel nice to play, and I think its pretty fun now. I also tried showing off the game to my brothers on mobile and they really struggled to use the mobile arrow key things, so they helped me fix it so that the 1st and 4th minigame are easier to play on phone. I’m trying really hard to balance the difficulty for this while keeping this fun for everyone, but for those looking for a challenge, I am planning on adding a hard mode soon If you want to try the game, you can play it here !
THE FINAL MINIGAME!!! Took a while, but I finally finished minigame 7! You have to paint the face to match the reference image before time runs out. This minigame was super difficult to get working because i needed to edit the face texture during run time, and I had no idea how to do that. Once I got the drawing to work I ran into another problem – how do you beat the game? I ended up having it check every pixel of your drawing against the reference image and keeping track of how many are the same color and letting you win as long as you are at least 70% accurate. I thought I was finished, so I exported the game and gave it one last test. It didn’t work. For some reason, when I exported to web, none of the drawing parts would work and I had to recode parts of the minigame several times. Eventually I got everything working. I know I just complained a lot, but I am really proud of this. It’s easily the most difficult thing I’ve made yet. Go test the game, tell me what you think! You can try it here!
One Last Devlog! This devlog will be a shorter one. There wasn’t to much work left to do, so this last section didn’t take too long. I added another option into settings, being a manual toggle for mobile controls, incase they dont turn on automatically for mobile users or you just want to try the controls on PC. I also made a pause button . During any level of the game you can press the button to pause the game and decide whether to continue or quit back to the start of the game. I can’t believe this game is finally finished! I’ll be shipping it very soon, but in the meantime, you can try the game here! Let me know what you think!
Ships:
Carnival Chaos This is a WarioWare-like game There are 4 quick minigames you must complete to win A platformer - climb on hay bales and collect the coins Whack-a-mole - click all of the moles in time Dunk Tank - rapidly hit the target many times Water Gun - spray water at a target to fill up the bar and win When you win, you’ll see how long you took to win. Try again and see how fast you can go my fastest time is 31.10 seconds. Try beating that! Hope you have fun!
Carnival Chaos Carnival Chaos is a short, WarioWare-like game with 7 fun minigames you need to complete to win Hay bale climb - Platform up the hay bales to collect the coins Whack-a-mole - Click on all the moles before time runs out Dunk Tank - rapidly click the target as fast as you can to dunk the person Water Gun - Spray the target with your water gun to fill up the meter and win High Striker - Hit the button with the hammer to ring the bell Tug of War - Hit quick-time events to pull on the rope. pull far enough to win Face Painting - Paint the face to match the template. If you are close enough to the guide, you win the game! Once you win, you’ll see how long you took. Click play again and see how fast you can go!. My fastest time is 90.30 seconds. Try to beat that! Have fun!!!...
|
1792990292.565813
|
1793076692.565813
|
|
37183
|
OrbitLens by @Mokila | Stardance
|
Mokila
|
1
|
56.0
|
1072
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-29T16:04:32Z", "hours": 56.0, "multiplier": 19.3, "payout": 1072, "blessing": "neutral", "text": "This is Orbit Lens, a real-time 3D satellite tracking website built using vanilla JavaScript and Three.js. It tracks over 16,000 live space objects around earth using real-time data from CelesTrak. It has many features including 3d and 2d orbit tracking, 3d models of select satellites (ISS, Terra, HST, and Aqua). It also includes a filtering feature where you can filter satellites based on specific categories Before testing this project, it is important to know some stuff: You will have the best experience if you access this through a laptop or desktop Sometimes, the api maybe down or is not responding to requests so please keep in mind that if you see an alert saying API not responding, it is out of the website’s hands and it an error outside of my control. That’s it. Thank you for testing this project and hope you like it :)", "repo": "https://github.com/Moksha-0102/orbit-lens", "demo": "https://orbit-lens.vercel.app/"}]...
|
[{"post_id": 37089, "ts": "202 [{"post_id": 37089, "ts": "2026-07-29T15:53:42Z", "hours": 0.5575, "text": "OrbitLens Devlog #13: fixing deployment bugs 😭😭 Before i continue with this devlog, let me start by saying that modern security rules are the worst. Like istg, why do they have to be so strict? Anyway, you’ll see what i mean by that down below. THis session was all about fixing the deployment bugs. I was almost done and then these f bugs ruined it. This devlog has only abt 30 mins logged because i had the help of ai to fix this because this was way way out of my expertise. Here are the changes. I used ai for this devlog though cus i didn’t understand what it did (but i only used it for htis devlog): Problem 1: The [UNSUPPORTED_FEATURE] Vite Crash My very first Vercel build crashed immediately with a “Top-level await is currently not supported with the ‘iife’ output format” error. Apparently, the satellite.js library I use for SGP4 orbital propagation runs heavy calculations using Web Workers and WebAssembly. By default, Vite tries to bundle everything into an older iife format for maximum browser compatibility, which completely choked on the newer await feature inside the worker file. I fixed this (with the help of ai) by explicitly telling Vite’s internal bundler (Rolldown) to output modern ES modules for both the main thread and the background workers. I created a vite.config.js file and updated the configuration (see vite.config.js in the github repo) Problem 2: 404 Missing 3D Models After fixing the build, the site successfully deployed, but my 3D models (like the ISS and Hubble) and Earth textures threw 404 Not Found errors in the console. Because I was loading these assets while the app was running in my Three.js code using string paths (e.g., ‘/models/iss.glb’), Vite didn’t know they existed and simply excluded them from the final production build. I moved my models and textures folders into Vite’s public directory. Anything placed in the public folder gets copied exactly as is to the root of the final build. This bug wasn’t too bad but the next one was absolute hell. Problem 3: API, Cloudflare and CORS block This was the hardest part. Orbit Lens fetches live Two-Line Element (TLE) data for over 16,000 satellites directly from CelesTrak. It worked perfectly when i hosted it locally, but on Vercel, the browser instantly threw a 403 Forbidden error. CelesTrak uses Cloudflare to prevent automated scraping. When Cloudflare saw an Origin header coming from a deployed Vercel frontend instead of an normaly IP like my computer’s, it blocked the connection. Attempts to use public proxies (like allorigins) resulted in 408 Request Timeout errors because the multiple mb big satellite data took too long to transfer. To fix this, I used Vercel’s Native Rewrites (i have no idea how to use this so i asked ai to do it for me). “I” ;) created a vercel.json file in the root directory to act as a silent backend proxy. By fetching from my own local route (/api/celestrak), the browser doesn’t trigger CORS security. Vercel’s backend intercepts the request, strips the frontend Origin header that was triggering the firewall, and routes the raw data back to the application. This worked! And the website is finally live and i am about to ship the project!"}, {"post_id": 37044, "ts": "2026-07-29T14:44:08Z", "hours": 1.4364, "text": "OrbitLens Devlog #12: Added README.md and ARCHITECTURE.md In this session, i added the README and ARCHITECTURE.md. The README.md highlights the basic features of the website, the tech stack used and how to run this project locally. The ARCHITECTURE.md goes deeper into how the code itself works so anyone perusing it can get a better idea on how i built this project."}, {"post_id": 36924, "ts": "2026-07-29T10:12:40Z", "hours": 1.8528, "text": "OrbitLens Devlog #11: Semi-final changes In this session, i focused on finding small aspects that need to be improved and improved them. Change 1: Firstly, i realised that the dropdown i had implemented was the default dropdown and it didn’t rlly fare well when there were 16000 items to choose from. So i made a custom dropdown, which looks much better than the default one, and made a funciton along with it that shows like the first 200 items matching the search query or, if nothing in being searched, the first 200 items in the list that the API gave. This made the entire experiene so much better because the default dropdown looked kinda ugly cus it took the whole length of the screen. Normally, this wouldnt take too long but i accidentally deleted the wrong eventListeners multiple times because satFilter and satSearch were so similar. So i spent like a good amount of time trying ot find the problem, and it turned out that i justmodified or deleted the wrong thing. Change 2: I found a problem with the filtering system, more specifically in filtering the space stations. Previously, i just had all the satellites with ISS or CSS in their names classified as space station because there are only two space statoins in space right now (ISS and Tiangong) so i filtered any satellites with those two names. But i failed to take into account that other satellites might also have ISS or CSS in their names so instead of two satellites showin up, 16 satellites were avaialbe in that filter. And these were not space stations but rather other statellits which had like ISS or CSS in their names (e.g. Swisscube). So i changed the filter to filter the space stations by their respective NoradIDs, which worked. Change 3: This change wasnt too big; i modified the expanded map layout becaues how it was before led to it having a lot of blank space and probalby wouldnt have looked good in differnet devices."}, {"post_id": 36499, "ts": "2026-07-28T17:30:13Z", "hours": 2.8244, "text": "OrbitLens Devlog #10: mobile layout implementation + better loading screen I am nearing the first ship of this project so this session were just about the final aspects that needed to be improved Change 1: I completely changed the loading screen. Firstly, it now displays the loading percentage that accurately shows the real time progress. Secondly, overall it just looks much better. Thirdly, i also implemented an error notification in the main dashboard in case the API doesnt work and so the website doesnt look like it’s broken Change 2: I added a mobile layout option. by that i mean that if the user is accessing this website on a mobile, it won’t be completely botched (hopefully) p.s. i know this devlog isnt that detailed as my previous ones and that’s because there isn’t much to talk about in this session cus the main changes were in the styles.css (and i’m hella tired)"}, {"post_id": 36385, "ts": "2026-07-28T13:42:59Z", "hours": 4.9911, "text": "OrbitLens Devlog #9: implemented satellite filtering + earth connecting line and complete UI overhaul Now that the website has a proper engine and everything was working well, i decided to add some more stuff. I had two goals for this session. One was to add a satellite filtering option where the user can filter categories of satellites. The other is to change the ui because there were many imprefectoins. Here is a breakdown of what i changed and the challenges i faced: Change 1: I added a global filtering system to fiter satellites by categories. To do this i first built a string-matching engine directly into the TLE parsing loop. As the engine downloads the TLE data from the API, it scans the satellite names and tags them each with categories. I didn’t really know what to categorise them so i thought of some categories and i asked ai to think of some categories. These are the categories: Starlink Oneweb Comms Navigation Weather and Other/Miscallaneous (which i impemented later; read below) I then wired the HTML dropdown directly into the WebGL gpu loop. Instead of deleting unselected satellites (which would take up too much gpu memory), the gpu simply multiplies their matrix scale to 0, 0, 0, which would just hide them. But there was a challenge that i faced, though it wasn’t a big one. When i first implemented the filter, I noticed that the total satellite count dropped to around 12,000. It turned out that all the satellites that didnt fit into any cateogry were not shown at all so i expanded the categories to include an OTHER category. I also had to make some changes in the raycaster or the users would accidentally be clicking on the hidden satellites. Change 2: I also added a line connecting the selected satellite directly to its exact spot on the Earth’s surface directly beneath it. I did this by first pre-allocating a THREE.BufferGeometry with exactly two vertices. Inside the animation loop, i then took the satellite’s live 3D coordinates and use a .normalize() math function. Because the Earth has a radius of exactly 1, normalizing the 3d coordinates perfectly attaches the bottom of the line to the planet’s surface. But, i ran into a bug where the line would randomly disappear depending on the camera angle. After some research (ai) i found out that this was caused by Three.js’s “Frustum Culling.” The code calculated the line bounding box once when the websited started up and when the camera moved away from that initial box, the gpu assumed the line was out of sight and stopped rendering it to save memory. So i just added a line of code ( frustumCulled = false ) that just overrode that. Change 3: Lastly, i essentially completely rewrote the styles.css to change how the ui looked cus i didn’t relaly like how it looked before. So this was the third change."}, {"post_id": 35927, "ts": "2026-07-27T18:02:13Z", "hours": 5.8056, "text": "OrbitLens Devlog #8: Scaling the 3d globe and some other stuff In the last update, i finally implemented the 2d map so this time i want to take this website a step further since the foundation is stable enough. I decided to go from tracking 5 hardcoded satellites to over 16,000 space objects. Here is what i changed, how i changed it and the challenges i faced: Change 1: Originally, i just added the starlink satellites to what i already had which was my initial goal. but the thing was, i was requesting the API for thousands of satellites, which did work once and all of them were stored in localStorage but for ‘testing purposes’ (i was just stupif), i cleared the localStorage and re-requested the TLE which it then instantly rejected cus of its ‘anti-bot firewalls’ and i got ip banned for like a couple of hours and it gave a 403 error aswell. To fix this, i read some CelesTrak documentation and i realised that there is a way to ismply request all the satellite (every satellite that it had) data in one request. Apparently there was a special search query (‘active’) that i could’ve used but instead i individually fetched everything. So once i used that query, i got all of the satellitse (a bit more than 16000) rendered on the earth but it was laggy, which leads to my second change. Change 2 To fix this massive lag caused by the 16000+ satellites, I completely replaced the standard 3D mesh pipeline with THREE.InstancedMesh so that instead of creating 16,000 individual sphere objects (which would like instantly crashes the browser), i can feed the GPU a single geometry and material, along with an array of 16,000 matrixes. That means now the gpu like renders everything in one go. But, I hit a massive 5-second freeze whenever a user clicked the ISS (which makes sense cus this was a 4k extremely detailed 3d model). The thing was, WebGL delays uploading heavy 3D textures to the GPU until an object is actually rendered on screen. And because the ISS model was hidden on startup, the compiler skipped it, so the website was stuck trying to render it when i selected the ISS. I solved this by forcing the renderer to draw one “dummy frame” with all models visible during the loading screen, which, in a sense, ‘warmed up’ the GPU. Change 3: The lag was better but it was still there and i realised the problem was that each of the dots representing a satellite were smoothly moving in space. This smooth-moving physics applied to over 16000 dots was what slowed down the website. To fix this, I rewrote the loop that propogates the satellite dots so physics calculations wouldn’t choke the main JavaScript thread. To do this i built a system to process the satellites in batches of 4,000 satellites per frame instead of all 16,000. Second, i scrapped geodetic trigonometry (latitude/longitude conversions; see one of the earlier devlogs) and replaced it with direct Earth-Centered, Earth-Fixed (ECEF) 3D vector rotation. Initially, our batches were too small, causing satellites to visually ‘teleport’ instead of smoothly gliding, which looked really glitchy. But by upgrading to matrix rotation, i managed to get a huge increase in speed. This allowed me to crank the batch size up and get that smooth motion across the entire thing. Change(s) 4: There were still some small bugs in the visual aspects like the dots disappearing or the transition jump (see previous devlog(s) to understand) and stuff but i took care of them."}, {"post_id": 35377, "ts": "2026-07-26T18:42:40Z", "hours": 4.1736, "text": "OrbitLens Devlog #7: Implementing a 2D orbit map To expand the functinality of the website, i wanted to add a 2D world map that has the 3d orbit projected on to it. Here is a breakdown of what i built, how i built it and the challenge i faced. What I Built: I made a 2D projection of the 3d globe using the HTML5 Canvas API that runs at the same time with the WebGL 3D engine. The map automatically appears when a satellite is selected, and fetches live telemetry to draw exactly one full orbital period (half past, half future). The orbit line looks like how it does on the 3d globe with a yellow line representing the past trail and a dotted blue line representing the predicted future track. I also built an “EXPAND” toggle that expands the map to fill most of the screen if the user wants to take a close look. Challenges: If a satellite flies east across the Pacific Ocean (where the International Date Line is), its longitude coordinates suddenly jump from +179deg to -179deg. I originally didnt take this into account and it had like this massive, horizontal glitch streak entirely across the screen cus of the sudden coordinate shift. To fix this, I programmed a strict mathematical distance gate into the drawing loop. If the engine detects that the X-coordinate has jumped by more than half the width of the canvas, it forces the renderer to break the current stroke (mapCtx.stroke()), lift the ‘pen’, and begin a completely new path on the opposite edge of the map (mapCtx.beginPath()). When plotting a full 90-minute orbit, the beginning of the yellow line and the end of the cyan line do not connect perfectly, leaving a massive gap. I originally thought this was a problem and tried for quite a while to fix this and i double checked the math formulas again and again. But i realised this isnt a math error, it’s just physics. While the satellite flies in a continuous circle, the Earth is physically rotating underneath it. By the time the satellite completes one lap, the ground has shifted roughly 22.5 degrees to the east, pushing the satellite’s relative ground track to the west. So i just left it like that to accurately represent the Earth’s rotation. This was the biggest problem and took the most time to fix. Three.js orbital camera controls are incredibly aggressive about capturing mouse events. The 3D engine was always suppressing the HTML ‘click’ events, making the “EXPAND” button not work. Not only that, the standard inline CSS was pushing the 3D canvas down the page, which misaligned everything and didnt allow me to select the satellites at all. To fix this, fisrt, i locked the 3D canvas to a fixed background layer (z-index: -1) to completely isolate it from the UI layout. Second, i bypassed the WebGL event interceptors entirely and connected the code that handles the expansion directly to a global window function (window.toggleMap) and just injected the button with the HTML onclick attribute. This fixed everything and now it works really great."}, {"post_id": 34787, "ts": "2026-07-25T19:42:20Z", "hours": 6.7089, "text": "OrbitLens Devlog #6: Implemented Sun and the day night cycles + camera panning improvements The core engine was working smoothly, so this session was focused on the ui and aesthetics and realism. Here are the changes i made, how i made them, and the challenges i faced: Change 1: Implemented the Sun The first major goal was replacing the static and boring lighting the 3D earth originally had with a Sun. To do this, I wrote a custom Solar Ephemeris algorithm. Using the current Julian date, it calculates the sun’s exact Right Ascension, Declination, and Earth’s Greenwich Mean Sidereal Time (GMST) to pinpoint the real-time subsolar vector. Since this was some complicated math, i had to use some ai for this. But in a WebGL engine, lights are purely mathematical vectors and there is no physical object in the sky. So when i first added a solid white sphere, it literally looked like a flat plastic toy and looked really ugly. To fix this, I abandoned the 3D ball and built a 2D Sprite using the HTML5 Canvas API to generate a radial gradient. By using Additive Blending to the material, I forced it to mathematically layer the light over the space, which created like this blinding, light that looked like the sun, which was good. Change 2: The Day/Night City lights cycle: To make the globe even more realistic, I wanted the night side of the Earth to have like the night time city lights rather than just a dark shadow. To build this, I added an 8k night-map texture (from Solar System Scope) and implemented a WebGL fragment shader into the Three.js’s native MeshPhongMaterial using a compiler hook. But there was a problem, the free night map that i implemented had this blue tint to it, and when i tried to correct it, it literally turned to this muddy, polluted yellow. To fix this, I programmed the shader to intercept the texture data, remove the color tint by calculating luminance, and pass it through a smoothstep noise gate. Anything below a 10% threshold was forced to pitch black, while populated areas were recolored with a warm golden orange hue. And it worked great! Change 3: More camera improvements Despite the previous session having to do with correcting the camera engine, there were still some stuff that i fixed here. The problem was since i removed OrbitControls in the last session (read previous devlog), once i had like hte earth upside, it was very hard to make it upright again. like at one point, i had the entire europe upside down and Africa was at the top of the globe but i couldnt get it back to normal. To fix this I changed the code so that the panning controls thing swaps between OrbitControls (for the 3D globe) and TrackballControls (for the satellites/spacecrafts). But there were some more challenges: When a zoom-in animation (read previous devlogs) finished (after selecting e.g. a satellite), the camera would like glitch backward into a less zoomed in position which was kinds uncomfortable to look at. Because the satellites were moving a static transition speed couldn’t catch them before the animation finished, so the final frame was a bit glitchy and the screen like jumped a bit. To fix all of these problems, I first made sure that disabled camera controls are completely turned off so they can’t fight the active zoom animations. I also made it that instead of moving at a steady speed, I added a speed-up effect as the camera gets closer to the target. This ensures that the camera glides smoothly into place right on time without any jerky jumps."}, {"post_id": 34460, "ts": "2026-07-25T05:56:14Z", "hours": 5.9047, "text": "OrbitLens Devlog #5: Camera panning improvements and performance updates After the changes from Devlog #4, all the math and the 3d models were all working but i faced some problems in other aspects of the website. Here are soe of the changes i made: Change 1: Correct orientation This was a small change, but i noticed that some satellites were a bit too big (like Aqua) and were positioned wrongly, so i just chaged teh scale and the rotation to make it a bit more realistic Changes 2, 3, and 4: The camera improvements I faced a lots of problems with the camera and how it worked. Before, i couldn’t rotated in all directions around the earth or the satellites because they were using OrbitControls so i swapped that out with TrackballControls , which allows for 360deg panninh There was also like a rubber band effect where the camera, when the camera lock was selected as satellite, zoomed in towards a satellite, i couldn’t interact with the satellite at all. THis was because as the satellite’s moving, the camera is also actuvely trying to catch up so it never actually ‘ended’ its animation so i was blocked from interacting with the satellite. To fix this i implemented delta tracking. The engine now calculates the exact mathematical vector the satellite moves every frame and shifts the camera’s physical position by that exact same amount, which worked. Previously, switching targets caused the camera to travel in a straight line, clipping through the Earth, which looked kinda unprofessional so I engineered a custom transition that separates the camera’s direction from its altitude. Now, when you select a new satellite, the camera zooms out, tracels in a an arc over the globe, and zooms in to the destination satellite. The animation still needs a lot of improvement cus some parts are still a bit glitchy, but i’m happy for now. Change 5: I implemented it that the TLEs are now stored in the actual localStorage for like 6 hours and then fetch new TLEs. So the user will always have the latest TLEs cus they update evey 12hrs."}, {"post_id": 33938, "ts": "2026-07-24T08:13:52Z", "hours": 9.5625, "text": "OrbitLens Devlog #4: Adding multiple satellites In my last update, I finally got a 3D model of the ISS rendering on the globe with a basic UI dashboard. It looked cool, but I wanted to scale it up. I wanted to add multiple famous satellites on top of the ISS: The Hubble Space Telescope (HST) NASA’s Aqua NASA’s Terra Tiangong ISS (which already exists) At least for now. Maybe in later stages, I can add Starlink satellites or sth. Here is waht I built, how I built it, and the challenges I faced. Change/Challenge 1: the orbit that looked like a slinky I hardcoded a 90-minute orbit line (the ISS orbit time). But other satellites have different orbital periods, so 90 mins fell short. Increasing it to a 12-hour calculation made the ISS orbit look like a massive slinky wrapping around the Earth cus its orbit is only 90mins. I fixed this by dynamically calculating the exact total orbit time using the satellite’s math: const periodMinutes = Math.ceil((2 * Math.PI) / satrec.no); const halfPeriod = Math.floor(periodMinutes / 2); Change/Challenge 2: IP ban (again) The JS fetch() doesn’t consider a ‘429 too many requests’ (i got this cus vite reloaded the page every time i saved something) response as a network error, so it tried calculating the HTML error page as orbital math and crashed. I fixed this by manually checking the response.ok HTTP status. If the API blocks me, the code redirects to an “Offline Fallback Mode”—loading a hardcoded string of ISS TLE math so the app survives. Change/Challenge 3: improper API request After like 4 hours, I realized I still wasn’t getting a proper API response even though the IP ban would have worn off. I looked at the code and realized I was pulling data for all five satellites in one go by just comma-separating the values in the URL like this: .../gp.php?CATNR=25544,20580,48274&FORMAT=tle (each number references to a satellite) But after CelesTrak’s documentation, it strictly dictated that the CATNR parameter only accepts a single catalog number. The server rejected the request, my code assumed 0 satellites, and the engine crashed. The fix: Writing five separate fetch() blocks is messy, and implementing an await fetch() in a for-loop creates a slow “waterfall” effect (waiting for one to finish before starting the next). I fixed this with JavaScript’s Promise.all. I created an array of the exact NORAD IDs, mapped over it to generate separate, perfectly formatted fetch requests, and Promise.all fires them all at the exact same time. Change/Challenge 4: I wanted 3D models for all of these. I found Aqua and HST easily from NASA. I found Terra, but it was fetching some other incompatible file I didn’t have, so I just scratched the Terra model. Tiangong was the biggest pain—everywhere I looked was either paid or on Sketchfab, and I cant create a Sketchfab account cus of some stupid Epic Games restriction. Implementing the files I did have was the next issue. Hardcoding multiple GLTFLoader blocks would turn the code into spaghetti. Plus, 3D models from the internet aren’t scaled equally—my Hubble was massive, and my Aqua model was tiny. The fix: I built a central Model Registry object. It maps a satellite’s NORAD ID to its file path and a specific scale multiplier. Even better, I implemented a fallback for satellites I done have a model for. If I track a satellite (like Tiangong) but leave the file path as null, the code detects this and dynamically generates a glowing cyan sphere using Three.js math to take its place. Changes 5 and 6: I updated the dashboard to include a dropdown to select the satellite and the telemetry updates accordingly. I also added a camera toggle feature where the user can lock the camera to follow the satellite or stay locked on the Earth. Lastly, I implemented a custom loading screen while the models load. P.S.Lots of info is compressed cus i crossed the 4000 char limit"}, {"post_id": 33396, "ts": "2026-07-23T09:48:44Z", "hours": 4.6533, "text": "OrbitLens Devlog #3: Adding a dashboard + ISS 3d model implementation I had two goals in my mind in this session. One was to add a dashboard which displays some stats of the ISS and the other is to replace the red dot with a 3d model of the ISS. Here is what and how I implemented these stuff and the challenges i faced: Change/Problem 1: Before I even got started on the new stuff i wanted to add, i faced a big problem. While testing the physics code and other stuff, my build tool (Vite) was auto-refreshing the browser every time I hit save. This I spammed CelesTrak’s public API with dozens of requests per minute. This lead to me kinda getting IP blocked temporarily, at least that’s what i think happend because it always returned an HTML error page instead of a TLE string. My engine tried to calculate stuff with that empty TLE and just crashed the engine The fix: It is important to know that a TLE is not like a live GPS broadcast that gets transmitted every second. It’s literally like a mathematical snapshot of a ton of stuff of the ISS like its position and its orbit and NORAD only updates these TLEs like twice a day or sth. So I fixed this api problem by making it such that the localStorage caches the TLE once and uses it for the calculation for the next 12 hours and then updates the TLE after that. Change 2: Dashboard implementation I implemented a dashboard that shows up on the top left of the screen and shows the following stuff abotu the ISS: Longitude: the method i used to calculate this is in one of my previous devlogs (i think my last one). But here is a quick summary: To find coordinates I first calculated the Greenwich Mean Sidereal Time (gmst), which gives me the exact rotational angle of the Earth at that specific millisecond. I passed the ECI position (one of the previosu devlogs) and gmst into satellite.eciToGeodetic(), which projects the point onto the spinning globe in radians. I then multiplied those values by 180/pi to convert the radians into standard degrees latitude: same as longitude -altitude: The eciToGeodetic() function also calculates the distance from the satellite’s coordinates down to the mathematical surface of the Earth (the WGS84 or the ‘World Geodetic System 1984’ ellipsoid which is like a mathematical reference representation of the earth that is used in calculatoin and stuff). It outputs this directly as height in kilometers, which I then simply rounded to two dp. -velocity: The propagate() function outputs the satellite’s speed broken into X, Y, and Z axes (measured in km/s). To get a single speed, I calculated the magnitude of that 3D vector using the 3D Pythagorean theorem: v = squareroot(x^2 + y^2 + z^2) Change 3: To implement a 3d model, i first needed that 3d image. I wanted the highest quality NASA model available (Model D - IGOAL). I downloaded the official .fbx, converted it to a .glb, and ended up with a 255mb file. Which is really bad because shoving a 255mb file into a web browser would just crash the entire thing. So i just ran that through a draco compression and a texture compression (WebP 1024x1024) which brought the size to about 18mb which was much better. To render this, I used Three.js’s GLTFLoader with a dedicated Google WebAssembly DRACOLoader to decode the compressed math. The next couple of changes were just to make it more realistic: i changed the scale from 0.02 (where it was the size of a continent) to 0.001 (which made it a good size) the direction the ISS faced was not accurate at all so I wanted to rotate until its in the correct position. But because the animate() loop was actively using math to point the model forward 60 times a second, it kept overriding my manual rotation. So I wrapped the ISS in a THREE.Group, rotated the mesh 90 degrees inside that container, and then applied the math."}, {"post_id": 31471, "ts": "2026-07-19T21:06:48Z", "hours": 5.8158, "text": "OrbitLens Devlog #2: Adding ISS + Orbit This session was mainly focused on implementing the ISS first to the satellite tracker. Here are the changes I made: Satellite Data Extraction and ISS Positioning To understand what I did in this session, it is important to know how I can get the ‘live’ location of the ISS works: firstly, satellites don’t broadcast live GPS coordinates to the internet. Instead, radars track them and publish Two-Line Element (TLE) sets. A TLE is like a raw string that “acts as a mathematical variable of an orbit’s shape at a specific moment.” I got these TLE from a non-profit API called CelesTrak. these TLEs are kinda useless so I used the satellite.js library to parse te TLEs. This js engine also allows you to run what is known as SGP4 models (Simplified General Perturbations 4) which is a mathematical model used to predict an orbit. Using this, TLEs are then converted to what’s known as Earth-Centered Inertial (ECI) vectors which is a “non-rotating 3D coordinate system anchored to the center of the Earth with its axes fixed relative to the stars, allowing you to calculate a satellite’s absolute mathematical position in space independent of the Earth spinning beneath it.” The ECI is still not useful so I passed it through satellite.eciToGeodetic which converted the eci to geodetic coordinates (longitude, latitude and altitude) But there’s one more step before the data is useful. The thing is Three.js only understands Cartesian coordinates (x, y, z) so the geodetic coordinates need to be converted to catesian. I did that using these mathematical formulas: x = r * cos(lat) * cos(lon) y = r * sin(lat) z = -r * cos(lat) * sin(lon) Orbit Implementation Satellites do not orbit in perfect circles; they follow complex trajectories that shift as the Earth rotates underneath them. The ISS takes roughly 92 minutes to complete one full orbit around the Earth. I captured this entire window by running two separate for loops. For these loops, i created 92 differed Date objects spaced exactly 1 second apart. here are the loops and how they work in a small nutshell: The Past: I looped backward from -46 minutes up to 0 (the current moment) and inputted the X, Y, and Z coordinates in each loop into THREE.BufferGeometry to draw a solid yellow LineBasicMaterial. The Future: I looped forward from 0 to +46 minutes. In every single iteration of those loops, and did the same thing. Challenges: the hemisphere and orbit were originally flipped or were completely false so i had to wrack my brain and dind the cause. I spent more than an hour debugging this. Turns out the formula was wrong and i used sin instaed of cos. In te end, I also double checked my orbit and position with official ISS trackers, and they matched!"}, {"post_id": 31191, "ts": "2026-07-19T12:11:49Z", "hours": 1.4144, "text": "OrbitLens Devlog #1: Rendering the Earth 3D I just kick started this project, Orbit Lens, and my aim is to build a fully free, real-time 3D satellite tracker from scratch using Three.js and maybe some other libraries. Today was all about creating the core 3D arch. You can’t track a satellite without a planet to orbit, so Phase 1 was focused on rendering the Earth and setting up the Three.js environment. What I accomplished in Phase 1: Set up my environment with Vite Built the Three.js scene, camera, and render loop. Rendered a 3D Earth utilizing maps from solar system scope. Enabled OrbitControls to enable camera panning This is just the basic foundations of the project so there’ll be much more development in the future."}]...
|
Title: OrbitLens by @Mokila | Stardance
Devlogs:
Title: OrbitLens by @Mokila | Stardance
Devlogs:
OrbitLens Devlog #1: Rendering the Earth 3D I just kick started this project, Orbit Lens, and my aim is to build a fully free, real-time 3D satellite tracker from scratch using Three.js and maybe some other libraries. Today was all about creating the core 3D arch. You can’t track a satellite without a planet to orbit, so Phase 1 was focused on rendering the Earth and setting up the Three.js environment. What I accomplished in Phase 1: Set up my environment with Vite Built the Three.js scene, camera, and render loop. Rendered a 3D Earth utilizing maps from solar system scope. Enabled OrbitControls to enable camera panning This is just the basic foundations of the project so there’ll be much more development in the future.
OrbitLens Devlog #2: Adding ISS + Orbit This session was mainly focused on implementing the ISS first to the satellite tracker. Here are the changes I made: Satellite Data Extraction and ISS Positioning To understand what I did in this session, it is important to know how I can get the ‘live’ location of the ISS works: firstly, satellites don’t broadcast live GPS coordinates to the internet. Instead, radars track them and publish Two-Line Element (TLE) sets. A TLE is like a raw string that “acts as a mathematical variable of an orbit’s shape at a specific moment.” I got these TLE from a non-profit API called CelesTrak. these TLEs are kinda useless so I used the satellite.js library to parse te TLEs. This js engine also allows you to run what is known as SGP4 models (Simplified General Perturbations 4) which is a mathematical model used to predict an orbit. Using this, TLEs are then converted to what’s known as Earth-Centered Inertial (ECI) vectors which is a “non-rotating 3D coordinate system anchored to the center of the Earth with its axes fixed relative to the stars, allowing you to calculate a satellite’s absolute mathematical position in space independent of the Earth spinning beneath it.” The ECI is still not useful so I passed it through satellite.eciToGeodetic which converted the eci to geodetic coordinates (longitude, latitude and altitude) But there’s one more step before the data is useful. The thing is Three.js only understands Cartesian coordinates (x, y, z) so the geodetic coordinates need to be converted to catesian. I did that using these mathematical formulas: x = r * cos(lat) * cos(lon) y = r * sin(lat) z = -r * cos(lat) * sin(lon) Orbit Implementation Satellites do not orbit in perfect circles; they follow complex trajectories that shift as the Earth rotates underneath them. The ISS takes roughly 92 minutes to complete one full orbit around the Earth. I captured this entire window by running two separate for loops. For these loops, i created 92 differed Date objects spaced exactly 1 second apart. here are the loops and how they work in a small nutshell: The Past: I looped backward from -46 minutes up to 0 (the current moment) and inputted the X, Y, and Z coordinates in each loop into THREE.BufferGeometry to draw a solid yellow LineBasicMaterial. The Future: I looped forward from 0 to +46 minutes. In every single iteration of those loops, and did the same thing. Challenges: the hemisphere and orbit were originally flipped or were completely false so i had to wrack my brain and dind the cause. I spent more than an hour debugging this. Turns out the formula was wrong and i used sin instaed of cos. In te end, I also double checked my orbit and position with official ISS trackers, and they matched!
OrbitLens Devlog #3: Adding a dashboard + ISS 3d model implementation I had two goals in my mind in this session. One was to add a dashboard which displays some stats of the ISS and the other is to replace the red dot with a 3d model of the ISS. Here is what and how I implemented these stuff and the challenges i faced: Change/Problem 1: Before I even got started on the new stuff i wanted to add, i faced a big problem. While testing the physics code and other stuff, my build tool (Vite) was auto-refreshing the browser every time I hit save. This I spammed CelesTrak’s public API with dozens of requests per minute. This lead to me kinda getting IP blocked temporarily, at least that’s what i think happend because it always returned an HTML error page instead of a TLE string. My engine tried to calculate stuff with that empty TLE and just crashed the engine The fix: It is important to know that a TLE is not like a live GPS broadcast that gets transmitted every second. It’s literally like a mathematical snapshot of a ton of stuff of the ISS like its position and its orbit and NORAD only updates these TLEs like twice a day or sth. So I fixed this api problem by making it such that the localStorage caches the TLE once and uses it for the calculation for the next 12 hours and then updates the TLE after that. Change 2: Dashboard implementation I implemented a dashboard that shows up on the top left of the screen and shows the following stuff abotu the ISS: Longitude: the method i used to calculate this is in one of my previous devlogs (i think my last one). But here is a quick summary: To find coordinates I first calculated the Greenwich Mean Sidereal Time (gmst), which gives me the exact rotational angle of the Earth at that specific millisecond. I passed the ECI position (one of the previosu devlogs) and gmst into satellite.eciToGeodetic(), which projects the point onto the spinning globe in radians. I then multiplied those values by 180/pi to convert the radians into standard degrees latitude: same as longitude -altitude: The eciToGeodetic() function also calculates the distance from the satellite’s coordinates down to the mathematical surface of the Earth (the WGS84 or the ‘World Geodetic System 1984’ ellipsoid which is like a mathematical reference representation of the earth that is used in calculatoin and stuff). It outputs this directly as height in kilometers, which I then simply rounded to two dp. -velocity: The propagate() function outputs the satellite’s speed broken into X, Y, and Z axes (measured in km/s). To get a single speed, I calculated the magnitude of that 3D vector using the 3D Pythagorean theorem: v = squareroot(x^2 + y^2 + z^2) Change 3: To implement a 3d model, i first needed that 3d image. I wanted the highest quality NASA model available (Model D - IGOAL). I downloaded the official .fbx, converted it to a .glb, and ended up with a 255mb file. Which is really bad because shoving a 255mb file into a web browser would just crash the entire thing. So i just ran that through a draco compression and a texture compression (WebP 1024x1024) which brought the size to about 18mb which was much better. To render this, I used Three.js’s GLTFLoader with a dedicated Google WebAssembly DRACOLoader to decode the compressed math. The next couple of changes were just to make it more realistic: i changed the scale from 0.02 (where it was the size of a continent) to 0.001 (which made it a good size) the direction the ISS faced was not accurate at all so I wanted to rotate until its in the correct position. But because the animate() loop was actively using math to point the model forward 60 times a second, it kept overriding my manual rotation. So I wrapped the ISS in a THREE.Group, rotated the mesh 90 degrees inside that container, and then applied the math.
OrbitLens Devlog #4: Adding multiple satellites In my last update, I finally got a 3D model of the ISS rendering on the globe with a basic UI dashboard. It looked cool, but I wanted to scale it up. I wanted to add multiple famous satellites on top of the ISS: The Hubble Space Telescope (HST) NASA’s Aqua NASA’s Terra Tiangong ISS (which already exists) At least for now. Maybe in later stages, I can add Starlink satellites or sth. Here is waht I built, how I built it, and the challenges I faced. Change/Challenge 1: the orbit that looked like a slinky I hardcoded a 90-minute orbit line (the ISS orbit time). But other satellites have different orbital periods, so 90 mins fell short. Increasing it to a 12-hour calculation made the ISS orbit look like a massive slinky wrapping around the Earth cus its orbit is only 90mins. I fixed this by dynamically calculating the exact total orbit time using the satellite’s math: const periodMinutes = Math.ceil((2 * Math.PI) / satrec.no); const halfPeriod = Math.floor(periodMinutes / 2); Change/Challenge 2: IP ban (again) The JS fetch() doesn’t consider a ‘429 too many requests’ (i got this cus vite reloaded the page every time i saved something) response as a network error, so it tried calculating the HTML error page as orbital math and crashed. I fixed this by manually checking the response.ok HTTP status. If the API blocks me, the code redirects to an “Offline Fallback Mode”—loading a hardcoded string of ISS TLE math so the app survives. Change/Challenge 3: improper API request After like 4 hours, I realized I still wasn’t getting a proper API response even though the IP ban would have worn off. I looked at the code and realized I was pulling data for all five satellites in one go by just comma-separating the values in the URL like this: .../gp.php?CATNR=25544,20580,48274&FORMAT=tle (each number references to a satellite) But after CelesTrak’s documentation, it strictly dictated that the CATNR parameter only accepts a single catalog number. The server rejected the request, my code assumed 0 satellites, and the engine crashed. The fix: Writing five separate fetch() blocks is messy, and implementing an await fetch() in a for-loop creates a slow “waterfall” effect (waiting for one to finish before starting the next). I fixed this with JavaScript’s Promise.all. I created an array of the exact NORAD IDs, mapped over it to generate separate, perfectly formatted fetch requests, and Promise.all fires them all at the exact same time. Change/Challenge 4: I wanted 3D models for all of these. I found Aqua and HST easily from NASA. I found Terra, but it was fetching some other incompatible file I didn’t have, so I just scratched the Terra model. Tiangong was the biggest pain—everywhere I looked was either paid or on Sketchfab, and I cant create a Sketchfab account cus of some stupid Epic Games restriction. Implementing the files I did have was the next issue. Hardcoding multiple GLTFLoader blocks would turn the code into spaghetti. Plus, 3D models from the internet aren’t scaled equally—my Hubble was massive, and my Aqua model was tiny. The fix: I built a central Model Registry object. It maps a satellite’s NORAD ID to its file path and a specific scale multiplier. Even better, I implemented a fallback for satellites I done have a model for. If I track a satellite (like Tiangong) but leave the file path as null, the code detects this and dynamically generates a glowing cyan sphere using Three.js math to take its place. Changes 5 and 6: I updated the dashboard to include a dropdown to select the satellite and the telemetry updates accordingly. I also added a camera toggle feature where the user can lock the camera to follow the satellite or stay locked on the Earth. Lastly, I implemented a custom loading screen while the models load. P.S.Lots of info is compressed cus i crossed the 4000 char limit
OrbitLens Devlog #5: Camera panning improvements and performance updates After the changes from Devlog #4, all the math and the 3d models were all working but i faced some problems in other aspects of the website. Here are soe of the changes i made: Change 1: Correct orientation This was a small change, but i noticed that some satellites were a bit too big (like Aqua) and were positioned wrongly, so i just chaged teh scale and the rotation to make it a bit more realistic Changes 2, 3, and 4: The camera improvements I faced a lots of problems with the camera and how it worked. Before, i couldn’t rotated in all directions around the earth or the satellites because they were using OrbitControls so i swapped that out with TrackballControls , which allows for 360deg panninh There was also like a rubber band effect where the camera, when the camera lock was selected as satellite, zoomed in towards a satellite, i couldn’t interact with the satellite at all. THis was because as the satellite’s moving, the camera is also actuvely trying to catch up so it never actually ‘ended’ its animation so i was blocked from interacting with the satellite. To fix this i implemented delta tracking. The engine now calculates the exact mathematical vector the satellite moves every frame and shifts the camera’s physical position by that exact same amount, which worked. Previously, switching targets caused the camera to travel in a straight line, clipping through the Earth, which looked kinda unprofessional so I engineered a custom transition that separates the camera’s direction from its altitude. Now, when you select a new satellite, the camera zooms out, tracels in a an arc over the globe, and zooms in to the destination satellite. The animation still needs a lot of improvement cus some parts are still a bit glitchy, but i’m happy for now. Change 5: I implemented it that the TLEs are now stored in the actual localStorage for like 6 hours and then fetch new TLEs. So the user will always have the latest TLEs cus they update evey 12hrs.
OrbitLens Devlog #6: Implemented Sun and the day night cycles + camera panning improvements The core engine was working smoothly, so this session was focused on the ui and aesthetics and realism. Here are the changes i made, how i made them, and the challenges i faced: Change 1: Implemented the Sun The first major goal was replacing the static and boring lighting the 3D earth originally had with a Sun. To do this, I wrote a custom Solar Ephemeris algorithm. Using the current Julian date, it calculates the sun’s exact Right Ascension, Declination, and Earth’s Greenwich Mean Sidereal Time (GMST) to pinpoint the real-time subsolar vector. Since this was some complicated math, i had to use some ai for this. But in a WebGL engine, lights are purely mathematical vectors and there is no physical object in the sky. So when i first added a solid white sphere, it literally looked like a flat plastic toy and looked really ugly. To fix this, I abandoned the 3D ball and built a 2D Sprite using the HTML5 Canvas API to generate a radial gradient. By using Additive Blending to the material, I forced it to mathematically layer the light over the space, which created like this blinding, light that looked like the sun, which was good. Change 2: The Day/Night City lights cycle: To make the globe even more realistic, I wanted the night side of the Earth to have like the night time city lights rather than just a dark shadow. To build this, I added an 8k night-map texture (from Solar System Scope) and implemented a WebGL fragment shader into the Three.js’s native MeshPhongMaterial using a compiler hook. But there was a problem, the free night map that i implemented had this blue tint to it, and when i tried to correct it, it literally turned to this muddy, polluted yellow. To fix this, I programmed the shader to intercept the texture data, remove the color tint by calculating luminance, and pass it through a smoothstep noise gate. Anything below a 10% threshold was forced to pitch black, while populated areas were recolored with a warm golden orange hue. And it worked great! Change 3: More camera improvements Despite the previous session having to do with correcting the camera engine, there were still some stuff that i fixed here. The problem was since i removed OrbitControls in the last session (read previous devlog), once i had like hte earth upside, it was very hard to make it upright again. like at one point, i had the entire europe upside down and Africa was at the top of the globe but i couldnt get it back to normal. To fix this I changed the code so that the panning controls thing swaps between OrbitControls (for the 3D globe) and TrackballControls (for the satellites/spacecrafts). But there were some more challenges: When a zoom-in animation (read previous devlogs) finished (after selecting e.g. a satellite), the camera would like glitch backward into a less zoomed in position which was kinds uncomfortable to look at. Because the satellites were moving a static transition speed couldn’t catch them before the animation finished, so the final frame was a bit glitchy and the screen like jumped a bit. To fix all of these problems, I first made sure that disabled camera controls are completely turned off so they can’t fight the active zoom animations. I also made it that instead of moving at a steady speed, I added a speed-up effect as the camera gets closer to the target. This ensures that the camera glides smoothly into place right on time without any jerky jumps.
OrbitLens Devlog #7: Implementing a 2D orbit map To expand the functinality of the website, i wanted to add a 2D world map that has the 3d orbit projected on to it. Here is a breakdown of what i built, how i built it and the challenge i faced. What I Built: I made a 2D projection of the 3d globe using the HTML5 Canvas API that runs at the same time with the WebGL 3D engine. The map automatically appears when a satellite is selected, and fetches live telemetry to draw exactly one full orbital period (half past, half future). The orbit line looks like how it does on the 3d globe with a yellow line representing the past trail and a dotted blue line representing the predicted future track. I also built an “EXPAND” toggle that expands the map to fill most of the screen if the user wants to take a close look. Challenges: If a satellite flies east across the Pacific Ocean (where the International Date Line is), its longitude coordinates suddenly jump from +179deg to -179deg. I originally didnt take this into account and it had like this massive, horizontal glitch streak entirely across the screen cus of the sudden coordinate shift. To fix this, I programmed a strict mathematical distance gate into the drawing loop. If the engine detects that the X-coordinate has jumped by more than half the width of the canvas, it forces the renderer to break the current stroke (mapCtx.stroke()), lift the ‘pen’, and begin a completely new path on the opposite edge of the map (mapCtx.beginPath()). When plotting a full 90-minute orbit, the beginning of the yellow line and the end of the cyan line do not connect perfectly, leaving a massive gap. I originally thought this was a problem and tried for quite a while to fix this and i double checked the math formulas again and again. But i realised this isnt a math error, it’s just physics. While the satellite flies in a continuous circle, the Earth is physically rotating underneath it. By the time the satellite completes one lap, the ground has shifted roughly 22.5 degrees to the east, pushing the satellite’s relative ground track to the west. So i just left it like that to accurately represent the Earth’s rotation. This was the biggest problem and took the most time to fix. Three.js orbital camera controls are incredibly aggressive about capturing mouse events. The 3D engine was always suppressing the HTML ‘click’ events, making the “EXPAND” button not work. Not only that, the standard inline CSS was pushing the 3D canvas down the page, which misaligned everything and didnt allow me to select the satellites at all. To fix this, fisrt, i locked the 3D canvas to a fixed background layer (z-index: -1) to completely isolate it from the UI layout. Second, i bypassed the WebGL event interceptors entirely and connected the code that handles the expansion directly to a global window function (window.toggleMap) and just injected the button with the HTML onclick attribute. This fixed everything and now it works really great.
OrbitLens Devlog #8: Scaling the 3d globe and some other stuff In the last update, i finally implemented the 2d map so this time i want to take this website a step further since the foundation is stable enough. I decided to go from tracking 5 hardcoded satellites to over 16,000 space objects. Here is what i changed, how i changed it and the challenges i faced: Change 1: Originally, i just added the starlink satellites to what i already had which was my initial goal. but the thing was, i was requesting the API for thousands of satellites, which did work once and all of them were stored in localStorage but for ‘testing purposes’ (i was just stupif), i cleared the localStorage and re-requested the TLE which it then instantly rejected cus of its ‘anti-bot firewalls’ and i got ip banned for like a couple of hours and it gave a 403 error aswell. To fix this, i read some CelesTrak documentation and i realised that there is a way to ismply request all the satellite (every satellite that it had) data in one request. Apparently there was a special search query (‘active’) that i could’ve used but instead i individually fetched everything. So once i used that query, i got all of the satellitse (a bit more than 16000) rendered on the earth but it was laggy, which leads to my second change. Change 2 To fix this massive lag caused by the 16000+ satellites, I completely replaced the standard 3D mesh pipeline with THREE.InstancedMesh so that instead of creating 16,000 individual sphere objects (which would like instantly crashes the browser), i can feed the GPU a single geometry and material, along with an array of 16,000 matrixes. That means now the gpu like renders everything in one go. But, I hit a massive 5-second freeze whenever a user clicked the ISS (which makes sense cus this was a 4k extremely detailed 3d model). The thing was, WebGL delays uploading heavy 3D textures to the GPU until an object is actually rendered on screen. And because the ISS model was hidden on startup, the compiler skipped it, so the website was stuck trying to render it when i selected the ISS. I solved this by forcing the renderer to draw one “dummy frame” with all models visible during the loading screen, which, in a sense, ‘warmed up’ the GPU. Change 3: The lag was better but it was still there and i realised the problem was that each of the dots representing a satellite were smoothly moving in space. This smooth-moving physics applied to over 16000 dots was what slowed down the website. To fix this, I rewrote the loop that propogates the satellite dots so physics calculations wouldn’t choke the main JavaScript thread. To do this i built a system to process the satellites in batches of 4,000 satellites per frame instead of all 16,000. Second, i scrapped geodetic trigonometry (latitude/longitude conversions; see one of the earlier devlogs) and replaced it with direct Earth-Centered, Earth-Fixed (ECEF) 3D vector rotation. Initially, our batches were too small, causing satellites to visually ‘teleport’ instead of smoothly gliding, which looked really glitchy. But by upgrading to matrix rotation, i managed to get a huge increase in speed. This allowed me to crank the batch size up and get that smooth motion across the entire thing. Change(s) 4: There were still some small bugs in the visual aspects like the dots disappearing or the transition jump (see previous devlog(s) to understand) and stuff but i took care of them.
OrbitLens Devlog #9: implemented satellite filtering + earth connecting line and complete UI overhaul Now that the website has a proper engine and everything was working well, i decided to add some more stuff. I had two goals for this session. One was to add a satellite filtering option where the user can filter categories of satellites. The other is to change the ui because there were many imprefectoins. Here is a breakdown of what i changed and the challenges i faced: Change 1: I added a global filtering system to fiter satellites by categories. To do this i first built a string-matching engine directly into the TLE parsing loop. As the engine downloads the TLE data from the API, it scans the satellite names and tags them each with categories. I didn’t really know what to categorise them so i thought of some categories and i asked ai to think of some categories. These are the categories: Starlink Oneweb Comms Navigation Weather and Other/Miscallaneous (which i impemented later; read below) I then wired the HTML dropdown directly into the WebGL gpu loop. Instead of deleting unselected satellites (which would take up too much gpu memory), the gpu simply multiplies their matrix scale to 0, 0, 0, which would just hide them. But there was a challenge that i faced, though it wasn’t a big one. When i first implemented the filter, I noticed that the total satellite count dropped to around 12,000. It turned out that all the satellites that didnt fit into any cateogry were not shown at all so i expanded the categories to include an OTHER category. I also had to make some changes in the raycaster or the users would accidentally be clicking on the hidden satellites. Change 2: I also added a line connecting the selected satellite directly to its exact spot on the Earth’s surface directly beneath it. I did this by first pre-allocating a THREE.BufferGeometry with exactly two vertices. Inside the animation loop, i then took the satellite’s live 3D coordinates and use a .normalize() math function. Because the Earth has a radius of exactly 1, normalizing the 3d coordinates perfectly attaches the bottom of the line to the planet’s surface. But, i ran into a bug where the line would randomly disappear depending on the camera angle. After some research (ai) i found out that this was caused by Three.js’s “Frustum Culling.” The code calculated the line bounding box once when the websited started up and when the camera moved away from that initial box, the gpu assumed the line was out of sight and stopped rendering it to save memory. So i just added a line of code ( frustumCulled = false ) that just overrode that. Change 3: Lastly, i essentially completely rewrote the styles.css to change how the ui looked cus i didn’t relaly like how it looked before. So this was the third change.
OrbitLens Devlog #10: mobile layout implementation + better loading screen I am nearing the first ship of this project so this session were just about the final aspects that needed to be improved Change 1: I completely changed the loading screen. Firstly, it now displays the loading percentage that accurately shows the real time progress. Secondly, overall it just looks much better. Thirdly, i also implemented an error notification in the main dashboard in case the API doesnt work and so the website doesnt look like it’s broken Change 2: I added a mobile layout option. by that i mean that if the user is accessing this website on a mobile, it won’t be completely botched (hopefully) p.s. i know this devlog isnt that detailed as my previous ones and that’s because there isn’t much to talk about in this session cus the main changes were in the styles.css (and i’m hella tired)
OrbitLens Devlog #11: Semi-final changes In this session, i focused on finding small aspects that need to be improved and improved them. Change 1: Firstly, i realised that the dropdown i had implemented was the default dropdown and it didn’t rlly fare well when there were 16000 items to choose from. So i made a custom dropdown, which looks much better than the default one, and made a funciton along with it that shows like the first 200 items matching the search query or, if nothing in being searched, the first 200 items in the list that the API gave. This made the entire experiene so much better because the default dropdown looked kinda ugly cus it took the whole length of the screen. Normally, this wouldnt take too long but i accidentally deleted the wrong eventListeners multiple times because satFilter and satSearch were so similar. So i spent like a good amount of time trying ot find the problem, and it turned out that i justmodified or deleted the wrong thing. Change 2: I found a problem with the filtering system, more specifically in filtering the space stations. Previously, i just had all the satellites with ISS or CSS in their names classified as space station because there are only two space statoins in space right now (ISS and Tiangong) so i filtered any satellites with those two names. But i failed to take into account that other satellites might also have ISS or CSS in their names so instead of two satellites showin up, 16 satellites were avaialbe in that filter. And these were not space stations but rather other statellits which had like ISS or CSS in their names (e.g. Swisscube). So i changed the filter to filter the space stations by their respective NoradIDs, which worked. Change 3: This change wasnt too big; i modified the expanded map layout becaues how it was before led to it having a lot of blank space and probalby wouldnt have looked good in differnet devices.
OrbitLens Devlog #12: Added README.md and ARCHITECTURE.md In this session, i added the README and ARCHITECTURE.md. The README.md highlights the basic features of the website, the tech stack used and how to run this project locally. The ARCHITECTURE.md goes deeper into how the code itself works so anyone perusing it can get a better idea on how i built this project.
OrbitLens Devlog #13: fixing deployment bugs 😭😭 Before i continue with this devlog, let me start by saying that modern security rules are the worst. Like istg, why do they have to be so strict? Anyway, you’ll see what i mean by that down below. THis session was all about fixing the deployment bugs. I was almost done and then these f bugs ruined it. This devlog has only abt 30 mins logged because i had the help of ai to fix this because this was way way out of my expertise. Here are the changes. I used ai for this devlog though cus i didn’t understand what it did (but i only used it for htis devlog): Problem 1: The [UNSUPPORTED_FEATURE] Vite Crash My very first Vercel build crashed immediately with a “Top-level await is currently not supported with the ‘iife’ output format” error. Apparently, the satellite.js library I use for SGP4 orbital propagation runs heavy calculations using Web Workers and WebAssembly. By default, Vite tries to bundle everything into an older iife format for maximum browser compatibility, which completely choked on the newer await feature inside the worker file. I fixed this (with the help of ai) by explicitly telling Vite’s internal bundler (Rolldown) to output modern ES modules for both the main thread and the background workers. I created a vite.config.js file and updated the configuration (see vite.config.js in the github repo) Problem 2: 404 Missing 3D Models After fixing the build, the site successfully deployed, but my 3D models (like the ISS and Hubble) and Earth textures threw 404 Not Found errors in the console. Because I was loading these assets while the app was running in my Three.js code using string paths (e.g., ‘/models/iss.glb’), Vite didn’t know they existed and simply excluded them from the final production build. I moved my models and textures folders into Vite’s public directory. Anything placed in the public folder gets copied exactly as is to the root of the final build. This bug wasn’t too bad but the next one was absolute hell. Problem 3: API, Cloudflare and CORS block This was the hardest part. Orbit Lens fetches live Two-Line Element (TLE) data for over 16,000 satellites directly from CelesTrak. It worked perfectly when i hosted it locally, but on Vercel, the browser instantly threw a 403 Forbidden error. CelesTrak uses Cloudflare to prevent automated scraping. When Cloudflare saw an Origin header coming from a deployed Vercel frontend instead of an normaly IP like my computer’s, it blocked the connection. Attempts to use public proxies (like allorigins) resulted in 408 Request Timeout errors because the multiple mb big satellite data took too long to transfer. To fix this, I used Vercel’s Native Rewrites (i have no idea how to use this so i asked ai to do it for me). “I” ;) created a vercel.json file in the root directory to act as a silent backend proxy. By fetching from my own local route (/api/celestrak), the browser doesn’t trigger CORS security. Vercel’s backend intercepts the request, strips the frontend Origin header that was triggering the firewall, and routes the raw data back to the application. This worked! And the website is finally live and i am about to ship the project!
Ships:
This is Orbit Lens, a real-time 3D satellite tracking website built using vanilla JavaScript and Three.js. It tracks over 16,000 live space objects around earth using real-time data from CelesTrak. It has many features including 3d and 2d orbit tracking, 3d models of select satellites (ISS, Terra, HST, and Aqua). It also includes a filtering feature where you can filter satellites based on specific categories Before testing this project, it is important to know some stuff: You will have the best experience if you access this through a laptop or desktop Sometimes, the api maybe down or is not responding to requests so please keep in mind that if you see an alert saying API not responding, it is out of the website’s hands and it an error outside of my control. That’s it. Thank you for testing this project and hope you like it :)...
|
1793098271.1110215
|
1793184671.1110215
|
|
52216
|
orbital by @ttyChud | Stardance
|
ttyChud
|
1
|
56.0
|
993
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T04:23:11Z", "hours": 56.0, "multiplier": 17.6, "payout": 993, "blessing": "neutral", "text": "This is Orbit Lens, a real-time 3D satellite tracking website built using vanilla JavaScript and Three.js. It tracks over 16,000 live space objects around earth using real-time data from CelesTrak. It has many features including 3d and 2d orbit tracking, 3d models of select satellites (ISS, Terra, HST, and Aqua). It also includes a filtering feature where you can filter satellites based on specific categories Before testing this project, it is important to know some stuff: You will have the best experience if you access this through a laptop or desktop Sometimes, the api maybe down or is not responding to requests so please keep in mind that if you see an alert saying API not responding, it is out of the website’s hands and it an error outside of my control. That’s it. Thank you for testing this project and hope you like it :)", "repo": "https://github.com/Himanshu121865/orbital", "demo": "https://orbital-sandy.vercel.app/"}]...
|
[{"post_id": 60029, "ts": "202 [{"post_id": 60029, "ts": "2026-09-02T04:19:17Z", "hours": 0.5989, "text": "OrbitLens Devlog #13: fixing deployment bugs 😭😭 Before i continue with this devlog, let me start by saying that modern security rules are the worst. Like istg, why do they have to be so strict? Anyway, you’ll see what i mean by that down below. THis session was all about fixing the deployment bugs. I was almost done and then these f bugs ruined it. This devlog has only abt 30 mins logged because i had the help of ai to fix this because this was way way out of my expertise. Here are the changes. I used ai for this devlog though cus i didn’t understand what it did (but i only used it for htis devlog): Problem 1: The [UNSUPPORTED_FEATURE] Vite Crash My very first Vercel build crashed immediately with a “Top-level await is currently not supported with the ‘iife’ output format” error. Apparently, the satellite.js library I use for SGP4 orbital propagation runs heavy calculations using Web Workers and WebAssembly. By default, Vite tries to bundle everything into an older iife format for maximum browser compatibility, which completely choked on the newer await feature inside the worker file. I fixed this (with the help of ai) by explicitly telling Vite’s internal bundler (Rolldown) to output modern ES modules for both the main thread and the background workers. I created a vite.config.js file and updated the configuration (see vite.config.js in the github repo) Problem 2: 404 Missing 3D Models After fixing the build, the site successfully deployed, but my 3D models (like the ISS and Hubble) and Earth textures threw 404 Not Found errors in the console. Because I was loading these assets while the app was running in my Three.js code using string paths (e.g., ‘/models/iss.glb’), Vite didn’t know they existed and simply excluded them from the final production build. I moved my models and textures folders into Vite’s public directory. Anything placed in the public folder gets copied exactly as is to the root of the final build. This bug wasn’t too bad but the next one was absolute hell. Problem 3: API, Cloudflare and CORS block This was the hardest part. Orbit Lens fetches live Two-Line Element (TLE) data for over 16,000 satellites directly from CelesTrak. It worked perfectly when i hosted it locally, but on Vercel, the browser instantly threw a 403 Forbidden error. CelesTrak uses Cloudflare to prevent automated scraping. When Cloudflare saw an Origin header coming from a deployed Vercel frontend instead of an normaly IP like my computer’s, it blocked the connection. Attempts to use public proxies (like allorigins) resulted in 408 Request Timeout errors because the multiple mb big satellite data took too long to transfer. To fix this, I used Vercel’s Native Rewrites (i have no idea how to use this so i asked ai to do it for me). “I” ;) created a vercel.json file in the root directory to act as a silent backend proxy. By fetching from my own local route (/api/celestrak), the browser doesn’t trigger CORS security. Vercel’s backend intercepts the request, strips the frontend Origin header that was triggering the firewall, and routes the raw data back to the application. This worked! And the website is finally live and i am about to ship the project!"}, {"post_id": 60005, "ts": "2026-09-02T03:10:06Z", "hours": 1.5539, "text": "OrbitLens Devlog #12: Added README.md and ARCHITECTURE.md In this session, i added the README and ARCHITECTURE.md. The README.md highlights the basic features of the website, the tech stack used and how to run this project locally. The ARCHITECTURE.md goes deeper into how the code itself works so anyone perusing it can get a better idea on how i built this project."}, {"post_id": 59764, "ts": "2026-09-01T18:10:36Z", "hours": 2.1944, "text": "OrbitLens Devlog #11: Semi-final changes In this session, i focused on finding small aspects that need to be improved and improved them. Change 1: Firstly, i realised that the dropdown i had implemented was the default dropdown and it didn’t rlly fare well when there were 16000 items to choose from. So i made a custom dropdown, which looks much better than the default one, and made a funciton along with it that shows like the first 200 items matching the search query or, if nothing in being searched, the first 200 items in the list that the API gave. This made the entire experiene so much better because the default dropdown looked kinda ugly cus it took the whole length of the screen. Normally, this wouldnt take too long but i accidentally deleted the wrong eventListeners multiple times because satFilter and satSearch were so similar. So i spent like a good amount of time trying ot find the problem, and it turned out that i justmodified or deleted the wrong thing. Change 2: I found a problem with the filtering system, more specifically in filtering the space stations. Previously, i just had all the satellites with ISS or CSS in their names classified as space station because there are only two space statoins in space right now (ISS and Tiangong) so i filtered any satellites with those two names. But i failed to take into account that other satellites might also have ISS or CSS in their names so instead of two satellites showin up, 16 satellites were avaialbe in that filter. And these were not space stations but rather other statellits which had like ISS or CSS in their names (e.g. Swisscube). So i changed the filter to filter the space stations by their respective NoradIDs, which worked. Change 3: This change wasnt too big; i modified the expanded map layout becaues how it was before led to it having a lot of blank space and probalby wouldnt have looked good in differnet devices."}, {"post_id": 59360, "ts": "2026-09-01T03:31:31Z", "hours": 4.2022, "text": "OrbitLens Devlog #10: mobile layout implementation + better loading screen I am nearing the first ship of this project so this session were just about the final aspects that needed to be improved Change 1: I completely changed the loading screen. Firstly, it now displays the loading percentage that accurately shows the real time progress. Secondly, overall it just looks much better. Thirdly, i also implemented an error notification in the main dashboard in case the API doesnt work and so the website doesnt look like it’s broken Change 2: I added a mobile layout option. by that i mean that if the user is accessing this website on a mobile, it won’t be completely botched (hopefully) p.s. i know this devlog isnt that detailed as my previous ones and that’s because there isn’t much to talk about in this session cus the main changes were in the styles.css (and i’m hella tired)"}, {"post_id": 58733, "ts": "2026-08-31T08:54:43Z", "hours": 6.5158, "text": "OrbitLens Devlog #9: implemented satellite filtering + earth connecting line and complete UI overhaul Now that the website has a proper engine and everything was working well, i decided to add some more stuff. I had two goals for this session. One was to add a satellite filtering option where the user can filter categories of satellites. The other is to change the ui because there were many imprefectoins. Here is a breakdown of what i changed and the challenges i faced: Change 1: I added a global filtering system to fiter satellites by categories. To do this i first built a string-matching engine directly into the TLE parsing loop. As the engine downloads the TLE data from the API, it scans the satellite names and tags them each with categories. I didn’t really know what to categorise them so i thought of some categories and i asked ai to think of some categories. These are the categories: StarlinkOnewebCommsNavigationWeatherand Other/Miscallaneous (which i impemented later; read below) I then wired the HTML dropdown directly into the WebGL gpu loop. Instead of deleting unselected satellites (which would take up too much gpu memory), the gpu simply multiplies their matrix scale to 0, 0, 0, which would just hide them. But there was a challenge that i faced, though it wasn’t a big one. When i first implemented the filter, I noticed that the total satellite count dropped to around 12,000. It turned out that all the satellites that didnt fit into any cateogry were not shown at all so i expanded the categories to include an OTHER category. I also had to make some changes in the raycaster or the users would accidentally be clicking on the hidden satellites. Change 2: I also added a line connecting the selected satellite directly to its exact spot on the Earth’s surface directly beneath it. I did this by first pre-allocating a THREE.BufferGeometry with exactly two vertices. Inside the animation loop, i then took the satellite’s live 3D coordinates and use a .normalize() math function. Because the Earth has a radius of exactly 1, normalizing the 3d coordinates perfectly attaches the bottom of the line to the planet’s surface. But, i ran into a bug where the line would randomly disappear depending on the camera angle. After some research (ai) i found out that this was caused by Three.js’s “Frustum Culling.” The code calculated the line bounding box once when the websited started up and when the camera moved away from that initial box, the gpu assumed the line was out of sight and stopped rendering it to save memory. So i just added a line of code (frustumCulled = false) that just overrode that. Change 3: Lastly, i essentially completely rewrote the styles.css to change how the ui looked cus i didn’t relaly like how it looked before. So this was the third change."}, {"post_id": 57886, "ts": "2026-08-30T06:40:40Z", "hours": 6.5181, "text": "OrbitLens Devlog #8: Scaling the 3d globe and some other stuff In the last update, i finally implemented the 2d map so this time i want to take this website a step further since the foundation is stable enough. I decided to go from tracking 5 hardcoded satellites to over 16,000 space objects. Here is what i changed, how i changed it and the challenges i faced: Change 1: Originally, i just added the starlink satellites to what i already had which was my initial goal. but the thing was, i was requesting the API for thousands of satellites, which did work once and all of them were stored in localStorage but for ‘testing purposes’ (i was just stupif), i cleared the localStorage and re-requested the TLE which it then instantly rejected cus of its ‘anti-bot firewalls’ and i got ip banned for like a couple of hours and it gave a 403 error aswell. To fix this, i read some CelesTrak documentation and i realised that there is a way to ismply request all the satellite (every satellite that it had) data in one request. Apparently there was a special search query (‘active’) that i could’ve used but instead i individually fetched everything. So once i used that query, i got all of the satellitse (a bit more than 16000) rendered on the earth but it was laggy, which leads to my second change. Change 2 To fix this massive lag caused by the 16000+ satellites, I completely replaced the standard 3D mesh pipeline with THREE.InstancedMesh so that instead of creating 16,000 individual sphere objects (which would like instantly crashes the browser), i can feed the GPU a single geometry and material, along with an array of 16,000 matrixes. That means now the gpu like renders everything in one go. But, I hit a massive 5-second freeze whenever a user clicked the ISS (which makes sense cus this was a 4k extremely detailed 3d model). The thing was, WebGL delays uploading heavy 3D textures to the GPU until an object is actually rendered on screen. And because the ISS model was hidden on startup, the compiler skipped it, so the website was stuck trying to render it when i selected the ISS. I solved this by forcing the renderer to draw one “dummy frame” with all models visible during the loading screen, which, in a sense, ‘warmed up’ the GPU. Change 3: The lag was better but it was still there and i realised the problem was that each of the dots representing a satellite were smoothly moving in space. This smooth-moving physics applied to over 16000 dots was what slowed down the website. To fix this, I rewrote the loop that propogates the satellite dots so physics calculations wouldn’t choke the main JavaScript thread. To do this i built a system to process the satellites in batches of 4,000 satellites per frame instead of all 16,000. Second, i scrapped geodetic trigonometry (latitude/longitude conversions; see one of the earlier devlogs) and replaced it with direct Earth-Centered, Earth-Fixed (ECEF) 3D vector rotation. Initially, our batches were too small, causing satellites to visually ‘teleport’ instead of smoothly gliding, which looked really glitchy. But by upgrading to matrix rotation, i managed to get a huge increase in speed. This allowed me to crank the batch size up and get that smooth motion across the entire thing. Change(s) 4: There were still some small bugs in the visual aspects like the dots disappearing or the transition jump (see previous devlog(s) to understand) and stuff but i took care of them."}, {"post_id": 56499, "ts": "2026-08-28T09:22:18Z", "hours": 3.8858, "text": "OrbitLens Devlog #7: Implementing a 2D orbit map To expand the functinality of the website, i wanted to add a 2D world map that has the 3d orbit projected on to it. Here is a breakdown of what i built, how i built it and the challenge i faced. What I Built: I made a 2D projection of the 3d globe using the HTML5 Canvas API that runs at the same time with the WebGL 3D engine. The map automatically appears when a satellite is selected, and fetches live telemetry to draw exactly one full orbital period (half past, half future). The orbit line looks like how it does on the 3d globe with a yellow line representing the past trail and a dotted blue line representing the predicted future track. I also built an “EXPAND” toggle that expands the map to fill most of the screen if the user wants to take a close look. Challenges: If a satellite flies east across the Pacific Ocean (where the International Date Line is), its longitude coordinates suddenly jump from +179deg to -179deg. I originally didnt take this into account and it had like this massive, horizontal glitch streak entirely across the screen cus of the sudden coordinate shift. To fix this, I programmed a strict mathematical distance gate into the drawing loop. If the engine detects that the X-coordinate has jumped by more than half the width of the canvas, it forces the renderer to break the current stroke (mapCtx.stroke()), lift the ‘pen’, and begin a completely new path on the opposite edge of the map (mapCtx.beginPath()). When plotting a full 90-minute orbit, the beginning of the yellow line and the end of the cyan line do not connect perfectly, leaving a massive gap. I originally thought this was a problem and tried for quite a while to fix this and i double checked the math formulas again and again. But i realised this isnt a math error, it’s just physics. While the satellite flies in a continuous circle, the Earth is physically rotating underneath it. By the time the satellite completes one lap, the ground has shifted roughly 22.5 degrees to the east, pushing the satellite’s relative ground track to the west. So i just left it like that to accurately represent the Earth’s rotation. This was the biggest problem and took the most time to fix. Three.js orbital camera controls are incredibly aggressive about capturing mouse events. The 3D engine was always suppressing the HTML ‘click’ events, making the “EXPAND” button not work. Not only that, the standard inline CSS was pushing the 3D canvas down the page, which misaligned everything and didnt allow me to select the satellites at all. To fix this, fisrt, i locked the 3D canvas to a fixed background layer (z-index: -1) to completely isolate it from the UI layout. Second, i bypassed the WebGL event interceptors entirely and connected the code that handles the expansion directly to a global window function (window.toggleMap) and just injected the button with the HTML onclick attribute. This fixed everything and now it works really great."}, {"post_id": 55587, "ts": "2026-08-27T15:15:22Z", "hours": 6.2028, "text": "OrbitLens Devlog #6: Implemented Sun and the day night cycles + camera panning improvements The core engine was working smoothly, so this session was focused on the ui and aesthetics and realism. Here are the changes i made, how i made them, and the challenges i faced: Change 1: Implemented the Sun The first major goal was replacing the static and boring lighting the 3D earth originally had with a Sun. To do this, I wrote a custom Solar Ephemeris algorithm. Using the current Julian date, it calculates the sun’s exact Right Ascension, Declination, and Earth’s Greenwich Mean Sidereal Time (GMST) to pinpoint the real-time subsolar vector. Since this was some complicated math, i had to use some ai for this. But in a WebGL engine, lights are purely mathematical vectors and there is no physical object in the sky. So when i first added a solid white sphere, it literally looked like a flat plastic toy and looked really ugly. To fix this, I abandoned the 3D ball and built a 2D Sprite using the HTML5 Canvas API to generate a radial gradient. By using Additive Blending to the material, I forced it to mathematically layer the light over the space, which created like this blinding, light that looked like the sun, which was good. Change 2: The Day/Night City lights cycle: To make the globe even more realistic, I wanted the night side of the Earth to have like the night time city lights rather than just a dark shadow. To build this, I added an 8k night-map texture (from Solar System Scope) and implemented a WebGL fragment shader into the Three.js’s native MeshPhongMaterial using a compiler hook. But there was a problem, the free night map that i implemented had this blue tint to it, and when i tried to correct it, it literally turned to this muddy, polluted yellow. To fix this, I programmed the shader to intercept the texture data, remove the color tint by calculating luminance, and pass it through a smoothstep noise gate. Anything below a 10% threshold was forced to pitch black, while populated areas were recolored with a warm golden orange hue. And it worked great! Change 3: More camera improvements Despite the previous session having to do with correcting the camera engine, there were still some stuff that i fixed here. The problem was since i removed OrbitControls in the last session (read previous devlog), once i had like hte earth upside, it was very hard to make it upright again. like at one point, i had the entire europe upside down and Africa was at the top of the globe but i couldnt get it back to normal. To fix this I changed the code so that the panning controls thing swaps between OrbitControls (for the 3D globe) and TrackballControls (for the satellites/spacecrafts). But there were some more challenges: When a zoom-in animation (read previous devlogs) finished (after selecting e.g. a satellite), the camera would like glitch backward into a less zoomed in position which was kinds uncomfortable to look at. Because the satellites were moving a static transition speed couldn’t catch them before the animation finished, so the final frame was a bit glitchy and the screen like jumped a bit. To fix all of these problems, I first made sure that disabled camera controls are completely turned off so they can’t fight the active zoom animations. I also made it that instead of moving at a steady speed, I added a speed-up effect as the camera gets closer to the target. This ensures that the camera glides smoothly into place right on time without any jerky jumps."}, {"post_id": 55313, "ts": "2026-08-27T01:49:10Z", "hours": 7.3289, "text": "OrbitLens Devlog #5: Camera panning improvements and performance updates After the changes from Devlog #4, all the math and the 3d models were all working but i faced some problems in other aspects of the website. Here are soe of the changes i made: Change 1: Correct orientation This was a small change, but i noticed that some satellites were a bit too big (like Aqua) and were positioned wrongly, so i just chaged teh scale and the rotation to make it a bit more realistic Changes 2, 3, and 4: The camera improvements I faced a lots of problems with the camera and how it worked. Before, i couldn’t rotated in all directions around the earth or the satellites because they were using OrbitControls so i swapped that out with TrackballControls, which allows for 360deg panninh There was also like a rubber band effect where the camera, when the camera lock was selected as satellite, zoomed in towards a satellite, i couldn’t interact with the satellite at all. THis was because as the satellite’s moving, the camera is also actuvely trying to catch up so it never actually ‘ended’ its animation so i was blocked from interacting with the satellite. To fix this i implemented delta tracking. The engine now calculates the exact mathematical vector the satellite moves every frame and shifts the camera’s physical position by that exact same amount, which worked. Previously, switching targets caused the camera to travel in a straight line, clipping through the Earth, which looked kinda unprofessional so I engineered a custom transition that separates the camera’s direction from its altitude. Now, when you select a new satellite, the camera zooms out, tracels in a an arc over the globe, and zooms in to the destination satellite. The animation still needs a lot of improvement cus some parts are still a bit glitchy, but i’m happy for now. Change 5: I implemented it that the TLEs are now stored in the actual localStorage for like 6 hours and then fetch new TLEs. So the user will always have the latest TLEs cus they update evey 12hrs."}, {"post_id": 54315, "ts": "2026-08-25T08:17:16Z", "hours": 5.8253, "text": "OrbitLens Devlog #4: Adding multiple satellites In my last update, I finally got a 3D model of the ISS rendering on the globe with a basic UI dashboard. It looked cool, but I wanted to scale it up. I wanted to add multiple famous satellites on top of the ISS: The Hubble Space Telescope (HST)NASA’s AquaNASA’s TerraTiangongISS (which already exists) At least for now. Maybe in later stages, I can add Starlink satellites or sth. Here is waht I built, how I built it, and the challenges I faced. Change/Challenge 1: the orbit that looked like a slinky I hardcoded a 90-minute orbit line (the ISS orbit time). But other satellites have different orbital periods, so 90 mins fell short. Increasing it to a 12-hour calculation made the ISS orbit look like a massive slinky wrapping around the Earth cus its orbit is only 90mins. I fixed this by dynamically calculating the exact total orbit time using the satellite’s math: const periodMinutes = Math.ceil((2 * Math.PI) / satrec.no); const halfPeriod = Math.floor(periodMinutes / 2); Change/Challenge 2: IP ban (again) The JS fetch() doesn’t consider a ‘429 too many requests’ (i got this cus vite reloaded the page every time i saved something) response as a network error, so it tried calculating the HTML error page as orbital math and crashed. I fixed this by manually checking the response.ok HTTP status. If the API blocks me, the code redirects to an “Offline Fallback Mode”—loading a hardcoded string of ISS TLE math so the app survives. Change/Challenge 3: improper API request After like 4 hours, I realized I still wasn’t getting a proper API response even though the IP ban would have worn off. I looked at the code and realized I was pulling data for all five satellites in one go by just comma-separating the values in the URL like this: …/gp.php?CATNR=25544,20580,48274&FORMAT=tle (each number references to a satellite) But after CelesTrak’s documentation, it strictly dictated that the CATNR parameter only accepts a single catalog number. The server rejected the request, my code assumed 0 satellites, and the engine crashed. The fix: Writing five separate fetch() blocks is messy, and implementing an await fetch() in a for-loop creates a slow “waterfall” effect (waiting for one to finish before starting the next). I fixed this with JavaScript’s Promise.all. I created an array of the exact NORAD IDs, mapped over it to generate separate, perfectly formatted fetch requests, and Promise.all fires them all at the exact same time. Change/Challenge 4: I wanted 3D models for all of these. I found Aqua and HST easily from NASA. I found Terra, but it was fetching some other incompatible file I didn’t have, so I just scratched the Terra model. Tiangong was the biggest pain—everywhere I looked was either paid or on Sketchfab, and I cant create a Sketchfab account cus of some stupid Epic Games restriction. Implementing the files I did have was the next issue. Hardcoding multiple GLTFLoader blocks would turn the code into spaghetti. Plus, 3D models from the internet aren’t scaled equally—my Hubble was massive, and my Aqua model was tiny. The fix: I built a central Model Registry object. It maps a satellite’s NORAD ID to its file path and a specific scale multiplier. Even better, I implemented a fallback for satellites I done have a model for. If I track a satellite (like Tiangong) but leave the file path as null, the code detects this and dynamically generates a glowing cyan sphere using Three.js math to take its place. Changes 5 and 6: I updated the dashboard to include a dropdown to select the satellite and the telemetry updates accordingly. I also added a camera toggle feature where the user can lock the camera to follow the satellite or stay locked on the Earth. Lastly, I implemented a custom loading screen while the models load. P.S.Lots of info is compressed cus i crossed the 4000 char limit."}, {"post_id": 53856, "ts": "2026-08-24T15:41:08Z", "hours": 5.4819, "text": "OrbitLens Devlog #3: Adding a dashboard + ISS 3d model implementation I had two goals in my mind in this session. One was to add a dashboard which displays some stats of the ISS and the other is to replace the red dot with a 3d model of the ISS. Here is what and how I implemented these stuff and the challenges i faced: Change/Problem 1: Before I even got started on the new stuff i wanted to add, i faced a big problem. While testing the physics code and other stuff, my build tool (Vite) was auto-refreshing the browser every time I hit save. This I spammed CelesTrak’s public API with dozens of requests per minute. This lead to me kinda getting IP blocked temporarily, at least that’s what i think happend because it always returned an HTML error page instead of a TLE string. My engine tried to calculate stuff with that empty TLE and just crashed the engine The fix: It is important to know that a TLE is not like a live GPS broadcast that gets transmitted every second. It’s literally like a mathematical snapshot of a ton of stuff of the ISS like its position and its orbit and NORAD only updates these TLEs like twice a day or sth. So I fixed this api problem by making it such that the localStorage caches the TLE once and uses it for the calculation for the next 12 hours and then updates the TLE after that. Change 2: Dashboard implementation I implemented a dashboard that shows up on the top left of the screen and shows the following stuff abotu the ISS: Longitude: the method i used to calculate this is in one of my previous devlogs (i think my last one). But here is a quick summary: To find coordinates I first calculated the Greenwich Mean Sidereal Time (gmst), which gives me the exact rotational angle of the Earth at that specific millisecond. I passed the ECI position (one of the previosu devlogs) and gmst into satellite.eciToGeodetic(), which projects the point onto the spinning globe in radians. I then multiplied those values by 180/pi to convert the radians into standard degrees latitude: same as longitude -altitude: The eciToGeodetic() function also calculates the distance from the satellite’s coordinates down to the mathematical surface of the Earth (the WGS84 or the ‘World Geodetic System 1984’ ellipsoid which is like a mathematical reference representation of the earth that is used in calculatoin and stuff). It outputs this directly as height in kilometers, which I then simply rounded to two dp. -velocity: The propagate() function outputs the satellite’s speed broken into X, Y, and Z axes (measured in km/s). To get a single speed, I calculated the magnitude of that 3D vector using the 3D Pythagorean theorem: v = squareroot(x^2 + y^2 + z^2) Change 3: To implement a 3d model, i first needed that 3d image. I wanted the highest quality NASA model available (Model D - IGOAL). I downloaded the official .fbx, converted it to a .glb, and ended up with a 255mb file. Which is really bad because shoving a 255mb file into a web browser would just crash the entire thing. So i just ran that through a draco compression and a texture compression (WebP 1024x1024) which brought the size to about 18mb which was much better. To render this, I used Three.js’s GLTFLoader with a dedicated Google WebAssembly DRACOLoader to decode the compressed math. The next couple of changes were just to make it more realistic: i changed the scale from 0.02 (where it was the size of a continent) to 0.001 (which made it a good size) the direction the ISS faced was not accurate at all so I wanted to rotate until its in the correct position. But because the animate() loop was actively using math to point the model forward 60 times a second, it kept overriding my manual rotation. So I wrapped the ISS in a THREE.Group, rotated the mesh 90 degrees inside that container, and then applied the math."}, {"post_id": 52416, "ts": "2026-08-22T15:23:19Z", "hours": 3.9075, "text": "OrbitLens Devlog #2: Adding ISS + Orbit This session was mainly focused on implementing the ISS first to the satellite tracker. Here are the changes I made: Satellite Data Extraction and ISS Positioning To understand what I did in this session, it is important to know how I can get the ‘live’ location of the ISS works: firstly, satellites don’t broadcast live GPS coordinates to the internet. Instead, radars track them and publish Two-Line Element (TLE) sets. A TLE is like a raw string that “acts as a mathematical variable of an orbit’s shape at a specific moment.” I got these TLE from a non-profit API called CelesTrak. these TLEs are kinda useless so I used the satellite.js library to parse te TLEs. This js engine also allows you to run what is known as SGP4 models (Simplified General Perturbations 4) which is a mathematical model used to predict an orbit. Using this, TLEs are then converted to what’s known as Earth-Centered Inertial (ECI) vectors which is a “non-rotating 3D coordinate system anchored to the center of the Earth with its axes fixed relative to the stars, allowing you to calculate a satellite’s absolute mathematical position in space independent of the Earth spinning beneath it.” The ECI is still not useful so I passed it through satellite.eciToGeodetic which converted the eci to geodetic coordinates (longitude, latitude and altitude) But there’s one more step before the data is useful. The thing is Three.js only understands Cartesian coordinates (x, y, z) so the geodetic coordinates need to be converted to catesian. I did that using these mathematical formulas: x = r * cos(lat) * cos(lon) y = r * sin(lat) z = -r * cos(lat) * sin(lon) Orbit Implementation Satellites do not orbit in perfect circles; they follow complex trajectories that shift as the Earth rotates underneath them. The ISS takes roughly 92 minutes to complete one full orbit around the Earth. I captured this entire window by running two separate for loops. For these loops, i created 92 differed Date objects spaced exactly 1 second apart. here are the loops and how they work in a small nutshell: The Past: I looped backward from -46 minutes up to 0 (the current moment) and inputted the X, Y, and Z coordinates in each loop into THREE.BufferGeometry to draw a solid yellow LineBasicMaterial. The Future: I looped forward from 0 to +46 minutes. In every single iteration of those loops, and did the same thing. Challenges: the hemisphere and orbit were originally flipped or were completely false so i had to wrack my brain and dind the cause. I spent more than an hour debugging this. Turns out the formula was wrong and i used sin instaed of cos. In te end, I also double checked my orbit and position with official ISS trackers, and they matched!"}, {"post_id": 51593, "ts": "2026-08-21T11:15:14Z", "hours": 2.2086, "text": "OrbitLens Devlog #1: Rendering the Earth 3D I just kick started this project, Orbit Lens, and my aim is to build a fully free, real-time 3D satellite tracker from scratch using Three.js and maybe some other libraries. Today was all about creating the core 3D arch. You can’t track a satellite without a planet to orbit, so Phase 1 was focused on rendering the Earth and setting up the Three.js environment. What I accomplished in Phase 1: Set up my environment with ViteBuilt the Three.js scene, camera, and render loop.Rendered a 3D Earth utilizing maps from solar system scope.Enabled OrbitControls to enable camera panning This is just the basic foundations of the project so there’ll be much more development in the future."}]...
|
Title: orbital by @ttyChud | Stardance
Devlogs:
O Title: orbital by @ttyChud | Stardance
Devlogs:
OrbitLens Devlog #1: Rendering the Earth 3D I just kick started this project, Orbit Lens, and my aim is to build a fully free, real-time 3D satellite tracker from scratch using Three.js and maybe some other libraries. Today was all about creating the core 3D arch. You can’t track a satellite without a planet to orbit, so Phase 1 was focused on rendering the Earth and setting up the Three.js environment. What I accomplished in Phase 1: Set up my environment with ViteBuilt the Three.js scene, camera, and render loop.Rendered a 3D Earth utilizing maps from solar system scope.Enabled OrbitControls to enable camera panning This is just the basic foundations of the project so there’ll be much more development in the future.
OrbitLens Devlog #2: Adding ISS + Orbit This session was mainly focused on implementing the ISS first to the satellite tracker. Here are the changes I made: Satellite Data Extraction and ISS Positioning To understand what I did in this session, it is important to know how I can get the ‘live’ location of the ISS works: firstly, satellites don’t broadcast live GPS coordinates to the internet. Instead, radars track them and publish Two-Line Element (TLE) sets. A TLE is like a raw string that “acts as a mathematical variable of an orbit’s shape at a specific moment.” I got these TLE from a non-profit API called CelesTrak. these TLEs are kinda useless so I used the satellite.js library to parse te TLEs. This js engine also allows you to run what is known as SGP4 models (Simplified General Perturbations 4) which is a mathematical model used to predict an orbit. Using this, TLEs are then converted to what’s known as Earth-Centered Inertial (ECI) vectors which is a “non-rotating 3D coordinate system anchored to the center of the Earth with its axes fixed relative to the stars, allowing you to calculate a satellite’s absolute mathematical position in space independent of the Earth spinning beneath it.” The ECI is still not useful so I passed it through satellite.eciToGeodetic which converted the eci to geodetic coordinates (longitude, latitude and altitude) But there’s one more step before the data is useful. The thing is Three.js only understands Cartesian coordinates (x, y, z) so the geodetic coordinates need to be converted to catesian. I did that using these mathematical formulas: x = r * cos(lat) * cos(lon) y = r * sin(lat) z = -r * cos(lat) * sin(lon) Orbit Implementation Satellites do not orbit in perfect circles; they follow complex trajectories that shift as the Earth rotates underneath them. The ISS takes roughly 92 minutes to complete one full orbit around the Earth. I captured this entire window by running two separate for loops. For these loops, i created 92 differed Date objects spaced exactly 1 second apart. here are the loops and how they work in a small nutshell: The Past: I looped backward from -46 minutes up to 0 (the current moment) and inputted the X, Y, and Z coordinates in each loop into THREE.BufferGeometry to draw a solid yellow LineBasicMaterial. The Future: I looped forward from 0 to +46 minutes. In every single iteration of those loops, and did the same thing. Challenges: the hemisphere and orbit were originally flipped or were completely false so i had to wrack my brain and dind the cause. I spent more than an hour debugging this. Turns out the formula was wrong and i used sin instaed of cos. In te end, I also double checked my orbit and position with official ISS trackers, and they matched!
OrbitLens Devlog #3: Adding a dashboard + ISS 3d model implementation I had two goals in my mind in this session. One was to add a dashboard which displays some stats of the ISS and the other is to replace the red dot with a 3d model of the ISS. Here is what and how I implemented these stuff and the challenges i faced: Change/Problem 1: Before I even got started on the new stuff i wanted to add, i faced a big problem. While testing the physics code and other stuff, my build tool (Vite) was auto-refreshing the browser every time I hit save. This I spammed CelesTrak’s public API with dozens of requests per minute. This lead to me kinda getting IP blocked temporarily, at least that’s what i think happend because it always returned an HTML error page instead of a TLE string. My engine tried to calculate stuff with that empty TLE and just crashed the engine The fix: It is important to know that a TLE is not like a live GPS broadcast that gets transmitted every second. It’s literally like a mathematical snapshot of a ton of stuff of the ISS like its position and its orbit and NORAD only updates these TLEs like twice a day or sth. So I fixed this api problem by making it such that the localStorage caches the TLE once and uses it for the calculation for the next 12 hours and then updates the TLE after that. Change 2: Dashboard implementation I implemented a dashboard that shows up on the top left of the screen and shows the following stuff abotu the ISS: Longitude: the method i used to calculate this is in one of my previous devlogs (i think my last one). But here is a quick summary: To find coordinates I first calculated the Greenwich Mean Sidereal Time (gmst), which gives me the exact rotational angle of the Earth at that specific millisecond. I passed the ECI position (one of the previosu devlogs) and gmst into satellite.eciToGeodetic(), which projects the point onto the spinning globe in radians. I then multiplied those values by 180/pi to convert the radians into standard degrees latitude: same as longitude -altitude: The eciToGeodetic() function also calculates the distance from the satellite’s coordinates down to the mathematical surface of the Earth (the WGS84 or the ‘World Geodetic System 1984’ ellipsoid which is like a mathematical reference representation of the earth that is used in calculatoin and stuff). It outputs this directly as height in kilometers, which I then simply rounded to two dp. -velocity: The propagate() function outputs the satellite’s speed broken into X, Y, and Z axes (measured in km/s). To get a single speed, I calculated the magnitude of that 3D vector using the 3D Pythagorean theorem: v = squareroot(x^2 + y^2 + z^2) Change 3: To implement a 3d model, i first needed that 3d image. I wanted the highest quality NASA model available (Model D - IGOAL). I downloaded the official .fbx, converted it to a .glb, and ended up with a 255mb file. Which is really bad because shoving a 255mb file into a web browser would just crash the entire thing. So i just ran that through a draco compression and a texture compression (WebP 1024x1024) which brought the size to about 18mb which was much better. To render this, I used Three.js’s GLTFLoader with a dedicated Google WebAssembly DRACOLoader to decode the compressed math. The next couple of changes were just to make it more realistic: i changed the scale from 0.02 (where it was the size of a continent) to 0.001 (which made it a good size) the direction the ISS faced was not accurate at all so I wanted to rotate until its in the correct position. But because the animate() loop was actively using math to point the model forward 60 times a second, it kept overriding my manual rotation. So I wrapped the ISS in a THREE.Group, rotated the mesh 90 degrees inside that container, and then applied the math.
OrbitLens Devlog #4: Adding multiple satellites In my last update, I finally got a 3D model of the ISS rendering on the globe with a basic UI dashboard. It looked cool, but I wanted to scale it up. I wanted to add multiple famous satellites on top of the ISS: The Hubble Space Telescope (HST)NASA’s AquaNASA’s TerraTiangongISS (which already exists) At least for now. Maybe in later stages, I can add Starlink satellites or sth. Here is waht I built, how I built it, and the challenges I faced. Change/Challenge 1: the orbit that looked like a slinky I hardcoded a 90-minute orbit line (the ISS orbit time). But other satellites have different orbital periods, so 90 mins fell short. Increasing it to a 12-hour calculation made the ISS orbit look like a massive slinky wrapping around the Earth cus its orbit is only 90mins. I fixed this by dynamically calculating the exact total orbit time using the satellite’s math: const periodMinutes = Math.ceil((2 * Math.PI) / satrec.no); const halfPeriod = Math.floor(periodMinutes / 2); Change/Challenge 2: IP ban (again) The JS fetch() doesn’t consider a ‘429 too many requests’ (i got this cus vite reloaded the page every time i saved something) response as a network error, so it tried calculating the HTML error page as orbital math and crashed. I fixed this by manually checking the response.ok HTTP status. If the API blocks me, the code redirects to an “Offline Fallback Mode”—loading a hardcoded string of ISS TLE math so the app survives. Change/Challenge 3: improper API request After like 4 hours, I realized I still wasn’t getting a proper API response even though the IP ban would have worn off. I looked at the code and realized I was pulling data for all five satellites in one go by just comma-separating the values in the URL like this: …/gp.php?CATNR=25544,20580,48274&FORMAT=tle (each number references to a satellite) But after CelesTrak’s documentation, it strictly dictated that the CATNR parameter only accepts a single catalog number. The server rejected the request, my code assumed 0 satellites, and the engine crashed. The fix: Writing five separate fetch() blocks is messy, and implementing an await fetch() in a for-loop creates a slow “waterfall” effect (waiting for one to finish before starting the next). I fixed this with JavaScript’s Promise.all. I created an array of the exact NORAD IDs, mapped over it to generate separate, perfectly formatted fetch requests, and Promise.all fires them all at the exact same time. Change/Challenge 4: I wanted 3D models for all of these. I found Aqua and HST easily from NASA. I found Terra, but it was fetching some other incompatible file I didn’t have, so I just scratched the Terra model. Tiangong was the biggest pain—everywhere I looked was either paid or on Sketchfab, and I cant create a Sketchfab account cus of some stupid Epic Games restriction. Implementing the files I did have was the next issue. Hardcoding multiple GLTFLoader blocks would turn the code into spaghetti. Plus, 3D models from the internet aren’t scaled equally—my Hubble was massive, and my Aqua model was tiny. The fix: I built a central Model Registry object. It maps a satellite’s NORAD ID to its file path and a specific scale multiplier. Even better, I implemented a fallback for satellites I done have a model for. If I track a satellite (like Tiangong) but leave the file path as null, the code detects this and dynamically generates a glowing cyan sphere using Three.js math to take its place. Changes 5 and 6: I updated the dashboard to include a dropdown to select the satellite and the telemetry updates accordingly. I also added a camera toggle feature where the user can lock the camera to follow the satellite or stay locked on the Earth. Lastly, I implemented a custom loading screen while the models load. P.S.Lots of info is compressed cus i crossed the 4000 char limit.
OrbitLens Devlog #5: Camera panning improvements and performance updates After the changes from Devlog #4, all the math and the 3d models were all working but i faced some problems in other aspects of the website. Here are soe of the changes i made: Change 1: Correct orientation This was a small change, but i noticed that some satellites were a bit too big (like Aqua) and were positioned wrongly, so i just chaged teh scale and the rotation to make it a bit more realistic Changes 2, 3, and 4: The camera improvements I faced a lots of problems with the camera and how it worked. Before, i couldn’t rotated in all directions around the earth or the satellites because they were using OrbitControls so i swapped that out with TrackballControls, which allows for 360deg panninh There was also like a rubber band effect where the camera, when the camera lock was selected as satellite, zoomed in towards a satellite, i couldn’t interact with the satellite at all. THis was because as the satellite’s moving, the camera is also actuvely trying to catch up so it never actually ‘ended’ its animation so i was blocked from interacting with the satellite. To fix this i implemented delta tracking. The engine now calculates the exact mathematical vector the satellite moves every frame and shifts the camera’s physical position by that exact same amount, which worked. Previously, switching targets caused the camera to travel in a straight line, clipping through the Earth, which looked kinda unprofessional so I engineered a custom transition that separates the camera’s direction from its altitude. Now, when you select a new satellite, the camera zooms out, tracels in a an arc over the globe, and zooms in to the destination satellite. The animation still needs a lot of improvement cus some parts are still a bit glitchy, but i’m happy for now. Change 5: I implemented it that the TLEs are now stored in the actual localStorage for like 6 hours and then fetch new TLEs. So the user will always have the latest TLEs cus they update evey 12hrs.
OrbitLens Devlog #6: Implemented Sun and the day night cycles + camera panning improvements The core engine was working smoothly, so this session was focused on the ui and aesthetics and realism. Here are the changes i made, how i made them, and the challenges i faced: Change 1: Implemented the Sun The first major goal was replacing the static and boring lighting the 3D earth originally had with a Sun. To do this, I wrote a custom Solar Ephemeris algorithm. Using the current Julian date, it calculates the sun’s exact Right Ascension, Declination, and Earth’s Greenwich Mean Sidereal Time (GMST) to pinpoint the real-time subsolar vector. Since this was some complicated math, i had to use some ai for this. But in a WebGL engine, lights are purely mathematical vectors and there is no physical object in the sky. So when i first added a solid white sphere, it literally looked like a flat plastic toy and looked really ugly. To fix this, I abandoned the 3D ball and built a 2D Sprite using the HTML5 Canvas API to generate a radial gradient. By using Additive Blending to the material, I forced it to mathematically layer the light over the space, which created like this blinding, light that looked like the sun, which was good. Change 2: The Day/Night City lights cycle: To make the globe even more realistic, I wanted the night side of the Earth to have like the night time city lights rather than just a dark shadow. To build this, I added an 8k night-map texture (from Solar System Scope) and implemented a WebGL fragment shader into the Three.js’s native MeshPhongMaterial using a compiler hook. But there was a problem, the free night map that i implemented had this blue tint to it, and when i tried to correct it, it literally turned to this muddy, polluted yellow. To fix this, I programmed the shader to intercept the texture data, remove the color tint by calculating luminance, and pass it through a smoothstep noise gate. Anything below a 10% threshold was forced to pitch black, while populated areas were recolored with a warm golden orange hue. And it worked great! Change 3: More camera improvements Despite the previous session having to do with correcting the camera engine, there were still some stuff that i fixed here. The problem was since i removed OrbitControls in the last session (read previous devlog), once i had like hte earth upside, it was very hard to make it upright again. like at one point, i had the entire europe upside down and Africa was at the top of the globe but i couldnt get it back to normal. To fix this I changed the code so that the panning controls thing swaps between OrbitControls (for the 3D globe) and TrackballControls (for the satellites/spacecrafts). But there were some more challenges: When a zoom-in animation (read previous devlogs) finished (after selecting e.g. a satellite), the camera would like glitch backward into a less zoomed in position which was kinds uncomfortable to look at. Because the satellites were moving a static transition speed couldn’t catch them before the animation finished, so the final frame was a bit glitchy and the screen like jumped a bit. To fix all of these problems, I first made sure that disabled camera controls are completely turned off so they can’t fight the active zoom animations. I also made it that instead of moving at a steady speed, I added a speed-up effect as the camera gets closer to the target. This ensures that the camera glides smoothly into place right on time without any jerky jumps.
OrbitLens Devlog #7: Implementing a 2D orbit map To expand the functinality of the website, i wanted to add a 2D world map that has the 3d orbit projected on to it. Here is a breakdown of what i built, how i built it and the challenge i faced. What I Built: I made a 2D projection of the 3d globe using the HTML5 Canvas API that runs at the same time with the WebGL 3D engine. The map automatically appears when a satellite is selected, and fetches live telemetry to draw exactly one full orbital period (half past, half future). The orbit line looks like how it does on the 3d globe with a yellow line representing the past trail and a dotted blue line representing the predicted future track. I also built an “EXPAND” toggle that expands the map to fill most of the screen if the user wants to take a close look. Challenges: If a satellite flies east across the Pacific Ocean (where the International Date Line is), its longitude coordinates suddenly jump from +179deg to -179deg. I originally didnt take this into account and it had like this massive, horizontal glitch streak entirely across the screen cus of the sudden coordinate shift. To fix this, I programmed a strict mathematical distance gate into the drawing loop. If the engine detects that the X-coordinate has jumped by more than half the width of the canvas, it forces the renderer to break the current stroke (mapCtx.stroke()), lift the ‘pen’, and begin a completely new path on the opposite edge of the map (mapCtx.beginPath()). When plotting a full 90-minute orbit, the beginning of the yellow line and the end of the cyan line do not connect perfectly, leaving a massive gap. I originally thought this was a problem and tried for quite a while to fix this and i double checked the math formulas again and again. But i realised this isnt a math error, it’s just physics. While the satellite flies in a continuous circle, the Earth is physically rotating underneath it. By the time the satellite completes one lap, the ground has shifted roughly 22.5 degrees to the east, pushing the satellite’s relative ground track to the west. So i just left it like that to accurately represent the Earth’s rotation. This was the biggest problem and took the most time to fix. Three.js orbital camera controls are incredibly aggressive about capturing mouse events. The 3D engine was always suppressing the HTML ‘click’ events, making the “EXPAND” button not work. Not only that, the standard inline CSS was pushing the 3D canvas down the page, which misaligned everything and didnt allow me to select the satellites at all. To fix this, fisrt, i locked the 3D canvas to a fixed background layer (z-index: -1) to completely isolate it from the UI layout. Second, i bypassed the WebGL event interceptors entirely and connected the code that handles the expansion directly to a global window function (window.toggleMap) and just injected the button with the HTML onclick attribute. This fixed everything and now it works really great.
OrbitLens Devlog #8: Scaling the 3d globe and some other stuff In the last update, i finally implemented the 2d map so this time i want to take this website a step further since the foundation is stable enough. I decided to go from tracking 5 hardcoded satellites to over 16,000 space objects. Here is what i changed, how i changed it and the challenges i faced: Change 1: Originally, i just added the starlink satellites to what i already had which was my initial goal. but the thing was, i was requesting the API for thousands of satellites, which did work once and all of them were stored in localStorage but for ‘testing purposes’ (i was just stupif), i cleared the localStorage and re-requested the TLE which it then instantly rejected cus of its ‘anti-bot firewalls’ and i got ip banned for like a couple of hours and it gave a 403 error aswell. To fix this, i read some CelesTrak documentation and i realised that there is a way to ismply request all the satellite (every satellite that it had) data in one request. Apparently there was a special search query (‘active’) that i could’ve used but instead i individually fetched everything. So once i used that query, i got all of the satellitse (a bit more than 16000) rendered on the earth but it was laggy, which leads to my second change. Change 2 To fix this massive lag caused by the 16000+ satellites, I completely replaced the standard 3D mesh pipeline with THREE.InstancedMesh so that instead of creating 16,000 individual sphere objects (which would like instantly crashes the browser), i can feed the GPU a single geometry and material, along with an array of 16,000 matrixes. That means now the gpu like renders everything in one go. But, I hit a massive 5-second freeze whenever a user clicked the ISS (which makes sense cus this was a 4k extremely detailed 3d model). The thing was, WebGL delays uploading heavy 3D textures to the GPU until an object is actually rendered on screen. And because the ISS model was hidden on startup, the compiler skipped it, so the website was stuck trying to render it when i selected the ISS. I solved this by forcing the renderer to draw one “dummy frame” with all models visible during the loading screen, which, in a sense, ‘warmed up’ the GPU. Change 3: The lag was better but it was still there and i realised the problem was that each of the dots representing a satellite were smoothly moving in space. This smooth-moving physics applied to over 16000 dots was what slowed down the website. To fix this, I rewrote the loop that propogates the satellite dots so physics calculations wouldn’t choke the main JavaScript thread. To do this i built a system to process the satellites in batches of 4,000 satellites per frame instead of all 16,000. Second, i scrapped geodetic trigonometry (latitude/longitude conversions; see one of the earlier devlogs) and replaced it with direct Earth-Centered, Earth-Fixed (ECEF) 3D vector rotation. Initially, our batches were too small, causing satellites to visually ‘teleport’ instead of smoothly gliding, which looked really glitchy. But by upgrading to matrix rotation, i managed to get a huge increase in speed. This allowed me to crank the batch size up and get that smooth motion across the entire thing. Change(s) 4: There were still some small bugs in the visual aspects like the dots disappearing or the transition jump (see previous devlog(s) to understand) and stuff but i took care of them.
OrbitLens Devlog #9: implemented satellite filtering + earth connecting line and complete UI overhaul Now that the website has a proper engine and everything was working well, i decided to add some more stuff. I had two goals for this session. One was to add a satellite filtering option where the user can filter categories of satellites. The other is to change the ui because there were many imprefectoins. Here is a breakdown of what i changed and the challenges i faced: Change 1: I added a global filtering system to fiter satellites by categories. To do this i first built a string-matching engine directly into the TLE parsing loop. As the engine downloads the TLE data from the API, it scans the satellite names and tags them each with categories. I didn’t really know what to categorise them so i thought of some categories and i asked ai to think of some categories. These are the categories: StarlinkOnewebCommsNavigationWeatherand Other/Miscallaneous (which i impemented later; read below) I then wired the HTML dropdown directly into the WebGL gpu loop. Instead of deleting unselected satellites (which would take up too much gpu memory), the gpu simply multiplies their matrix scale to 0, 0, 0, which would just hide them. But there was a challenge that i faced, though it wasn’t a big one. When i first implemented the filter, I noticed that the total satellite count dropped to around 12,000. It turned out that all the satellites that didnt fit into any cateogry were not shown at all so i expanded the categories to include an OTHER category. I also had to make some changes in the raycaster or the users would accidentally be clicking on the hidden satellites. Change 2: I also added a line connecting the selected satellite directly to its exact spot on the Earth’s surface directly beneath it. I did this by first pre-allocating a THREE.BufferGeometry with exactly two vertices. Inside the animation loop, i then took the satellite’s live 3D coordinates and use a .normalize() math function. Because the Earth has a radius of exactly 1, normalizing the 3d coordinates perfectly attaches the bottom of the line to the planet’s surface. But, i ran into a bug where the line would randomly disappear depending on the camera angle. After some research (ai) i found out that this was caused by Three.js’s “Frustum Culling.” The code calculated the line bounding box once when the websited started up and when the camera moved away from that initial box, the gpu assumed the line was out of sight and stopped rendering it to save memory. So i just added a line of code (frustumCulled = false) that just overrode that. Change 3: Lastly, i essentially completely rewrote the styles.css to change how the ui looked cus i didn’t relaly like how it looked before. So this was the third change.
OrbitLens Devlog #10: mobile layout implementation + better loading screen I am nearing the first ship of this project so this session were just about the final aspects that needed to be improved Change 1: I completely changed the loading screen. Firstly, it now displays the loading percentage that accurately shows the real time progress. Secondly, overall it just looks much better. Thirdly, i also implemented an error notification in the main dashboard in case the API doesnt work and so the website doesnt look like it’s broken Change 2: I added a mobile layout option. by that i mean that if the user is accessing this website on a mobile, it won’t be completely botched (hopefully) p.s. i know this devlog isnt that detailed as my previous ones and that’s because there isn’t much to talk about in this session cus the main changes were in the styles.css (and i’m hella tired)
OrbitLens Devlog #11: Semi-final changes In this session, i focused on finding small aspects that need to be improved and improved them. Change 1: Firstly, i realised that the dropdown i had implemented was the default dropdown and it didn’t rlly fare well when there were 16000 items to choose from. So i made a custom dropdown, which looks much better than the default one, and made a funciton along with it that shows like the first 200 items matching the search query or, if nothing in being searched, the first 200 items in the list that the API gave. This made the entire experiene so much better because the default dropdown looked kinda ugly cus it took the whole length of the screen. Normally, this wouldnt take too long but i accidentally deleted the wrong eventListeners multiple times because satFilter and satSearch were so similar. So i spent like a good amount of time trying ot find the problem, and it turned out that i justmodified or deleted the wrong thing. Change 2: I found a problem with the filtering system, more specifically in filtering the space stations. Previously, i just had all the satellites with ISS or CSS in their names classified as space station because there are only two space statoins in space right now (ISS and Tiangong) so i filtered any satellites with those two names. But i failed to take into account that other satellites might also have ISS or CSS in their names so instead of two satellites showin up, 16 satellites were avaialbe in that filter. And these were not space stations but rather other statellits which had like ISS or CSS in their names (e.g. Swisscube). So i changed the filter to filter the space stations by their respective NoradIDs, which worked. Change 3: This change wasnt too big; i modified the expanded map layout becaues how it was before led to it having a lot of blank space and probalby wouldnt have looked good in differnet devices.
OrbitLens Devlog #12: Added README.md and ARCHITECTURE.md In this session, i added the README and ARCHITECTURE.md. The README.md highlights the basic features of the website, the tech stack used and how to run this project locally. The ARCHITECTURE.md goes deeper into how the code itself works so anyone perusing it can get a better idea on how i built this project.
OrbitLens Devlog #13: fixing deployment bugs 😭😭 Before i continue with this devlog, let me start by saying that modern security rules are the worst. Like istg, why do they have to be so strict? Anyway, you’ll see what i mean by that down below. THis session was all about fixing the deployment bugs. I was almost done and then these f bugs ruined it. This devlog has only abt 30 mins logged because i had the help of ai to fix this because this was way way out of my expertise. Here are the changes. I used ai for this devlog though cus i didn’t understand what it did (but i only used it for htis devlog): Problem 1: The [UNSUPPORTED_FEATURE] Vite Crash My very first Vercel build crashed immediately with a “Top-level await is currently not supported with the ‘iife’ output format” error. Apparently, the satellite.js library I use for SGP4 orbital propagation runs heavy calculations using Web Workers and WebAssembly. By default, Vite tries to bundle everything into an older iife format for maximum browser compatibility, which completely choked on the newer await feature inside the worker file. I fixed this (with the help of ai) by explicitly telling Vite’s internal bundler (Rolldown) to output modern ES modules for both the main thread and the background workers. I created a vite.config.js file and updated the configuration (see vite.config.js in the github repo) Problem 2: 404 Missing 3D Models After fixing the build, the site successfully deployed, but my 3D models (like the ISS and Hubble) and Earth textures threw 404 Not Found errors in the console. Because I was loading these assets while the app was running in my Three.js code using string paths (e.g., ‘/models/iss.glb’), Vite didn’t know they existed and simply excluded them from the final production build. I moved my models and textures folders into Vite’s public directory. Anything placed in the public folder gets copied exactly as is to the root of the final build. This bug wasn’t too bad but the next one was absolute hell. Problem 3: API, Cloudflare and CORS block This was the hardest part. Orbit Lens fetches live Two-Line Element (TLE) data for over 16,000 satellites directly from CelesTrak. It worked perfectly when i hosted it locally, but on Vercel, the browser instantly threw a 403 Forbidden error. CelesTrak uses Cloudflare to prevent automated scraping. When Cloudflare saw an Origin header coming from a deployed Vercel frontend instead of an normaly IP like my computer’s, it blocked the connection. Attempts to use public proxies (like allorigins) resulted in 408 Request Timeout errors because the multiple mb big satellite data took too long to transfer. To fix this, I used Vercel’s Native Rewrites (i have no idea how to use this so i asked ai to do it for me). “I” ;) created a vercel.json file in the root directory to act as a silent backend proxy. By fetching from my own local route (/api/celestrak), the browser doesn’t trigger CORS security. Vercel’s backend intercepts the request, strips the frontend Origin header that was triggering the firewall, and routes the raw data back to the application. This worked! And the website is finally live and i am about to ship the project!
Ships:
This is Orbit Lens, a real-time 3D satellite tracking website built using vanilla JavaScript and Three.js. It tracks over 16,000 live space objects around earth using real-time data from CelesTrak. It has many features including 3d and 2d orbit tracking, 3d models of select satellites (ISS, Terra, HST, and Aqua). It also includes a filtering feature where you can filter satellites based on specific categories Before testing this project, it is important to know some stuff: You will have the best experience if you access this through a laptop or desktop Sometimes, the api maybe down or is not responding to requests so please keep in mind that if you see an alert saying API not responding, it is out of the website’s hands and it an error outside of my control. That’s it. Thank you for testing this project and hope you like it :)...
|
1792878696.1561775
|
1793742696.1561775
|
|
22962
|
HELIOS MK-II by @dhruvtoocool | Stardance
|
dhruvtoocool
|
0
|
55.98
|
0
|
[]
|
[{"post_id": 28309, "ts": "202 [{"post_id": 28309, "ts": "2026-07-14T14:13:19Z", "hours": 2.7375, "text": "I spent this session wrapping up the documentation and putting everything together for the repository release. I focused on exporting all the 3D assets, preparing the production files, and setting up the official GitHub repository so the whole project is cleanly tracked> To allow other peeps to make this asw, I drafted a comprehensive assembly guide that details exactly how the individual 3D-printed parts, carbon fiber rods, and fasteners connect. I also uploaded the finalized KiCad schematics and PCB manufacturing files so the custom electronics shield is fully open-source. Since this is the Helios MK-II, I also put together a direct breakdown comparing this build to the original MK-I. I highlighted the evolutionary updates, specifically the shift from a basic remote-controlled platform to a fully autonomous system, the massive improvements in structural rigidity through the new carbon fiber suspension joints over the old pcb ones, and the upgraded power management with the custom PCB HAT, a fuse, and hardware kill switch."}, {"post_id": 27317, "ts": "2026-07-12T19:54:42Z", "hours": 1.4503, "text": "Okay, so I know, spending time in Blender doesn’t seem like the most justified use of time. But here’s the thing. When I put something in Blender, I tend to see it in the exact scenario it’s supposed to be used, if you know what I mean. And because of that, I’m able to sort of find these little niche things that I need to fix. And I keep making a note of these little niche niche things in my diary."}, {"post_id": 26799, "ts": "2026-07-11T20:01:07Z", "hours": 1.3003, "text": "Added some standoffs for the motor drivers Aura Farmed with blender"}, {"post_id": 26583, "ts": "2026-07-11T14:30:20Z", "hours": 2.2508, "text": "I created the bill of materials for the entire robot. While doing so, I noticed small errors in bearing sizes and screw holes, which I corrected. I then searched online, found all the required parts, and compiled them into a list. Surprisingly, the total is only $144, far below my estimate of $200–$250, which is great."}, {"post_id": 26197, "ts": "2026-07-10T21:10:24Z", "hours": 3.0003, "text": "I ended up spending this session tweaking a bunch of bearing sizes and just refining how everything fits together. I actually noticed a ton of minor misalignments across the chassis that I completely missed the first time around, so I went through and finally squared everything up. Once the CAD model was actually sorted, I decided to sit down and figure out the logistics of how I’m going to build this thing. I went through the entire design to map out exactly what parts I need and the precise quantities for the build. I even started a master tracking file with direct links and sources for every single component, so I can just click and buy everything when it’s time to start assembling."}, {"post_id": 24929, "ts": "2026-07-08T20:06:33Z", "hours": 5.1842, "text": "I spent this session bringing all the separate components into Fusion 360 to do a complete test fit. I pulled in models for the Raspberry Pi, the battery pack, my custom PCB, the Arduino Mega, and all the smaller hardware bits to see how they actually fit inside the chassis. The great news is that there’s a ton of extra room left inside the rover bed, which is going to make routing the wires incredibly easy. After locking down the fitment, I moved the entire assembly over to Blender. I honestly just find Blender a lot more comfortable to work with than Fusion 360, and it let me see how the rover looks under different lighting and environments. I ended up spending some time assigning materials and setting up a few really cool teaser renders that I can start sharing. They’re just teasers for now, but I plan on spending more time later creating both high-end graphical shots and proper engineering renders."}, {"post_id": 24076, "ts": "2026-07-07T12:14:02Z", "hours": 1.9172, "text": "I spent this session totally cleaning up the schematics because they were honestly looking extremely dirty, so I got everything organized and looking right.I also learned some pretty interesting stuff about grounding this time. I literally had no idea that all the grounds were supposed to be the same; I kind of figured different parts of the system would have different grounds. After messing around with it for a bit, I realized all the ground planes are the same but they absolutely have to be interconnected, so I went ahead and fixed that whole setup. Another thing I realized is that I couldn’t find a UBEC that drops 12V down to 6V—they pretty much only come in 12V to 5V steps. Because of that, I had to pivot and shift the entire servo motor system over to run on 5V instead. I also added some really nice-to-have features, including three indicator LEDs: One is a fault indicator to show if anything goes wrong in the system. The second one shows that the digital pins are working and the code is actually running. The third one signifies that the UBEC power from the main system is coming in cleanly. Along with those three status LEDs, I added a physical reset button. I had to move a few components around here and there to make space, but it was honestly pretty easy this time because the actual PCB layout was already solid. The best part is that the only errors popping up on the DRC test are footprint overlaps, which is amazing since those aren’t even true electrical errors. The board is fully sorted, and it looks seriously cool with the new silkscreen graphics on it."}, {"post_id": 23725, "ts": "2026-07-06T20:49:58Z", "hours": 4.6175, "text": "I honestly kind of messed up again with the previous version, even after I thought I had caught all my mistakes. What happened was I was trying to reference this one massive schematic that had both the Raspberry Pi and the Arduino mixed together using all these custom symbols. When I actually went to build the PCB from that schematic, absolutely none of the nets were linking up correctly, which completely broke the DRC test and left me with a total mess of errors. Since I wanted to actually turn in a clean design with solid test results and not just some broken file, I decided to just scrap the board yet again. Honestly, third time’s the charm because I started fresh, completely rewired the whole thing from the ground up, and got everything routing perfectly. I even added some really sick custom silkscreen graphics to the board to make it look legit. The Arduino Mega shield is finally, officially done, fully sorted, and looking great."}, {"post_id": 23017, "ts": "2026-07-05T18:48:58Z", "hours": 4.0633, "text": "Figured some shit about kicad out"}, {"post_id": 22326, "ts": "2026-07-04T18:52:56Z", "hours": 3.4503, "text": "It looks like I didn’t do a ton since the last update, but honestly, a lot of crazy stuff went down. I realized it was actually worth taking the time to learn how to design a proper PCB instead of just winging it and hoping for the best. Finding a decent KiCad tutorial was a nightmare, but I finally found one that clicked. Right after watching it, I realized my entire board layout was completely wrong. Instead of trying to fix a broken design, I just scrapped everything I had done, started completely from scratch, and actually learned all the useful keyboard shortcuts to speed things up. The new PCB is looking way better and is honestly pretty close to ready. I just need to finish up the silkscreen layer, label all the components, and run the final diagnostics to make sure nothing blows up before I send it off."}, {"post_id": 21638, "ts": "2026-07-03T18:02:02Z", "hours": 1.6, "text": "Okay so this is my first time making a pcb, really looks like it doesn’t it LMAAOOOO. :) But seriously learned a lot, prolly gonna re-do a lot of these connections. So far i basically did the motor drivers as well as a couple of sensors. The purpose of this board is basically like one of those connectivity shields to sort of make cable managing the rover easy and unifying those similar systems together. (P.s. Lookout ain’t at the same level of reliability as lapses yet. Like this 1hr 36min recording should have been more like 2hrs smth mins long. )"}, {"post_id": 21468, "ts": "2026-07-03T13:11:00Z", "hours": 2.0322, "text": "I spent this session building out the complete schematic in KiCad, focusing on component integration and system protection. I laid out the Arduino Mega, mapped out all the pin configurations, and wired up the core sensor suite, which includes the GPS and compass module, the LiDAR, and the CSI camera. I also integrated the RC receiver circuit so the rover can be fully operated via a remote control system. With the main schematic finalized, I started designing a custom PCB HAT that will sit directly on top of the Arduino. This will keep the wire management incredibly clean and prevent any loose cables from disconnecting while the rover is moving. To protect the electronics, I also integrated a physical kill switch and a fuse into the power lines so nothing gets fried when the entire system is powered up."}, {"post_id": 20618, "ts": "2026-07-02T08:11:42Z", "hours": 2.7003, "text": "I ended up diving deep into motor dynamics this time, specifically trying to figure out how torque and stall current actually interact. I learned that when a motor faces too much resistance and completely stalls, it basically stops acting like a motor and starts behaving like a giant resistor, which causes the current to absolutely spike. That made me realize how critical the motor driver is for handling those sudden surges. If the motor stalls, a low-quality driver just won’t be able to deliver that massive current and will probably fry, so I had to pivot and choose a much more capable driver. I spent the rest of my time in KiCad designing a much better electronics layout to handle those loads, using ChatGPT to do a lot of the heavy research and figure out the exact specs I needed."}, {"post_id": 19448, "ts": "2026-06-30T19:28:53Z", "hours": 0.5836, "text": "Started work on KiCad."}, {"post_id": 19137, "ts": "2026-06-30T11:51:16Z", "hours": 1.2172, "text": "I spent this session restructuring the sensor payload layout and resolving a few assembly conflicts. The original LiDAR and camera mount was inspired by my drone design, but I realized the constraints are completely different for this rover. I initially attempted an in-canopy placement but decided against it, choosing instead to design a completely new forward-facing enclosure that mounts both the LiDAR and camera right at the front of the vehicle. While finalizing the chassis, I caught a few Fusion 360 assembly constraints that weren’t aligning correctly and repaired the model hierarchy. With the assembly fixed, I added the proper hardware mounting points and bolting interfaces to the rear wing so it securely fastens to the base plate. Finally, I routed dedicated wire-management channels through the main chassis floor, ensuring all power and data lines can cleanly pass in and out of the electronics bay without getting pinched."}, {"post_id": 18341, "ts": "2026-06-29T13:38:37Z", "hours": 1.0833, "text": "It finally looks like a production-ready build! I spent this session organizing the entire project hierarchy, making sure every part is properly named and structured into clean sub-assemblies. Mechanically, I added locking points for the structural frame. I designed connector holes across the differential and motor housings so that screws can pass directly through the 3D-printed parts and secure the carbon fiber rods, locking everything firmly into place.I also finalized the roof panels for the chassis. To keep them easily removable, I planned out recessed channels for small magnetic strips, allowing the panels to snap effortlessly onto the main body. For the payload, I designed a dedicated, integrated housing to mount the LiDAR unit and the CSI camera together. Finally, I threw a custom rear wing onto the back of the chassis, mostly for aesthetics, but if the print budget and print bed space allow for it, it is definitely staying on the final build!"}, {"post_id": 18199, "ts": "2026-06-29T08:20:43Z", "hours": 2.0833, "text": "It finally looks amazing! I spent this session cleaning up a lot of joint and assembly errors, separating the individual components, and modeling the main chassis body. The differential now successfully hooks directly into the chassis. I also added a prominent geometric structure to the rear, which will serve as a heavy-duty mounting rig for sensors and lights to give it true off-road capabilities. Moving to the front end, I finalized the forward chassis design and locked in the support blocks that stabilize the primary body. I also planned out a small, magnetic-latch hatch on the top deck for quick access to the internal sensor array. If there are any pauses in the screen recording where nothing is moving, that’s just me stepping away with a measuring tape to double-check dimensions against my physical hardware. Fortunately, I already own the most expensive pieces for the build including the Raspberry Pi, LiDAR unit, and camera module. To get this fully operational, I realistically just need to source the drive motors, motor drivers, an Arduino, the wheels, and the steering servos."}, {"post_id": 17902, "ts": "2026-06-28T20:46:20Z", "hours": 2.3667, "text": "The project is finally starting to look like an actual rover. I mirrored the suspension geometry over to the other side and designed the central differential that links both sides together, optimizing the entire setup for 3D printing. After tweaking a few bearing sizes here and there for a better fit, I ran some motion simulations in Blender to test how the suspension responds. The physical simulation tests went really well. However, I ended up hitting a wall trying to configure the Inverse and Forward Kinematics (IK/FK) rigging in Blender, so I’ve sidelined that part for now to keep moving forward."}, {"post_id": 17749, "ts": "2026-06-28T17:44:06Z", "hours": 3.8839, "text": "I spent most of my time designing the front wheel assembly and the section of the chassis that handles steering. To give the rover directional control, I placed a servo motor right above the front motor. Designing and iterating on this steering mechanism took up a significant chunk of time. First, I modeled the main motor assembly that integrates into the front end. From there, I focused on refining the pendulum suspension system, tweaking several parts that weren’t fitting or looking exactly how I wanted. I also created the small connector joint that links the pendulum to the main control arm, which will eventually balance both sides of the suspension. I haven’t mirrored the geometry to the opposite side yet, but that’s the immediate next step. Once the CAD is finalized, the next phase is importing the model into Blender to rig it and simulate the exact mechanical movement using Forward and Inverse Kinematics (FK/IK)."}, {"post_id": 17180, "ts": "2026-06-27T21:45:33Z", "hours": 2.1736, "text": "Okay so this one was good. I basically added the housing for the motors themselves also added the cage that the front servos will sit on to control the front wheels. Also the rear bogie angles were off, so I reset those to something that will be able to climb more terrains a lot more easily."}, {"post_id": 16793, "ts": "2026-06-27T08:24:52Z", "hours": 1.7336, "text": "Did some part research and got to know th bearings i had gone for were not sufficient so changed the design to account for them. Also imported the 3d model of the motor i am planning to use, this took way long then expected."}, {"post_id": 16278, "ts": "2026-06-26T13:51:21Z", "hours": 2.0003, "text": "Deigned the boggie part, but when i did that i also realised that the rocker part is too steep so redesigned that too. Its a lil oversized but its supposed to be a mars rover :)"}, {"post_id": 16165, "ts": "2026-06-26T08:40:26Z", "hours": 1.1336, "text": "okay so i designed the part thats gonna do the rocker still need to design the boogie part correctly. The image just shows a test fit of how things should look when the parts do get degined. The angles are a lil bit of a problem since i dont really know the maths behind them and am just eye bollin it. But i think i have gotten them right. I will also shorten the forward wheel base, this was just a mock up so yeahh….things will change. :)"}, {"post_id": 15257, "ts": "2026-06-24T19:28:43Z", "hours": 1.4167, "text": "Laying the foundations for the Helios MK-II Rover. Most of the work centered around building the base and the armature that will serve as the suspension for the rover. Also this rover is kinda inspired by Nasa’s rover perseverance."}]...
|
Title: HELIOS MK-II by @dhruvtoocool | Stardance
Title: HELIOS MK-II by @dhruvtoocool | Stardance
Devlogs:
Laying the foundations for the Helios MK-II Rover. Most of the work centered around building the base and the armature that will serve as the suspension for the rover. Also this rover is kinda inspired by Nasa’s rover perseverance.
okay so i designed the part thats gonna do the rocker still need to design the boogie part correctly. The image just shows a test fit of how things should look when the parts do get degined. The angles are a lil bit of a problem since i dont really know the maths behind them and am just eye bollin it. But i think i have gotten them right. I will also shorten the forward wheel base, this was just a mock up so yeahh….things will change. :)
Deigned the boggie part, but when i did that i also realised that the rocker part is too steep so redesigned that too. Its a lil oversized but its supposed to be a mars rover :)
Did some part research and got to know th bearings i had gone for were not sufficient so changed the design to account for them. Also imported the 3d model of the motor i am planning to use, this took way long then expected.
Okay so this one was good. I basically added the housing for the motors themselves also added the cage that the front servos will sit on to control the front wheels. Also the rear bogie angles were off, so I reset those to something that will be able to climb more terrains a lot more easily.
I spent most of my time designing the front wheel assembly and the section of the chassis that handles steering. To give the rover directional control, I placed a servo motor right above the front motor. Designing and iterating on this steering mechanism took up a significant chunk of time. First, I modeled the main motor assembly that integrates into the front end. From there, I focused on refining the pendulum suspension system, tweaking several parts that weren’t fitting or looking exactly how I wanted. I also created the small connector joint that links the pendulum to the main control arm, which will eventually balance both sides of the suspension. I haven’t mirrored the geometry to the opposite side yet, but that’s the immediate next step. Once the CAD is finalized, the next phase is importing the model into Blender to rig it and simulate the exact mechanical movement using Forward and Inverse Kinematics (FK/IK).
The project is finally starting to look like an actual rover. I mirrored the suspension geometry over to the other side and designed the central differential that links both sides together, optimizing the entire setup for 3D printing. After tweaking a few bearing sizes here and there for a better fit, I ran some motion simulations in Blender to test how the suspension responds. The physical simulation tests went really well. However, I ended up hitting a wall trying to configure the Inverse and Forward Kinematics (IK/FK) rigging in Blender, so I’ve sidelined that part for now to keep moving forward.
It finally looks amazing! I spent this session cleaning up a lot of joint and assembly errors, separating the individual components, and modeling the main chassis body. The differential now successfully hooks directly into the chassis. I also added a prominent geometric structure to the rear, which will serve as a heavy-duty mounting rig for sensors and lights to give it true off-road capabilities. Moving to the front end, I finalized the forward chassis design and locked in the support blocks that stabilize the primary body. I also planned out a small, magnetic-latch hatch on the top deck for quick access to the internal sensor array. If there are any pauses in the screen recording where nothing is moving, that’s just me stepping away with a measuring tape to double-check dimensions against my physical hardware. Fortunately, I already own the most expensive pieces for the build including the Raspberry Pi, LiDAR unit, and camera module. To get this fully operational, I realistically just need to source the drive motors, motor drivers, an Arduino, the wheels, and the steering servos.
It finally looks like a production-ready build! I spent this session organizing the entire project hierarchy, making sure every part is properly named and structured into clean sub-assemblies. Mechanically, I added locking points for the structural frame. I designed connector holes across the differential and motor housings so that screws can pass directly through the 3D-printed parts and secure the carbon fiber rods, locking everything firmly into place.I also finalized the roof panels for the chassis. To keep them easily removable, I planned out recessed channels for small magnetic strips, allowing the panels to snap effortlessly onto the main body. For the payload, I designed a dedicated, integrated housing to mount the LiDAR unit and the CSI camera together. Finally, I threw a custom rear wing onto the back of the chassis, mostly for aesthetics, but if the print budget and print bed space allow for it, it is definitely staying on the final build!
I spent this session restructuring the sensor payload layout and resolving a few assembly conflicts. The original LiDAR and camera mount was inspired by my drone design, but I realized the constraints are completely different for this rover. I initially attempted an in-canopy placement but decided against it, choosing instead to design a completely new forward-facing enclosure that mounts both the LiDAR and camera right at the front of the vehicle. While finalizing the chassis, I caught a few Fusion 360 assembly constraints that weren’t aligning correctly and repaired the model hierarchy. With the assembly fixed, I added the proper hardware mounting points and bolting interfaces to the rear wing so it securely fastens to the base plate. Finally, I routed dedicated wire-management channels through the main chassis floor, ensuring all power and data lines can cleanly pass in and out of the electronics bay without getting pinched.
Started work on KiCad.
I ended up diving deep into motor dynamics this time, specifically trying to figure out how torque and stall current actually interact. I learned that when a motor faces too much resistance and completely stalls, it basically stops acting like a motor and starts behaving like a giant resistor, which causes the current to absolutely spike. That made me realize how critical the motor driver is for handling those sudden surges. If the motor stalls, a low-quality driver just won’t be able to deliver that massive current and will probably fry, so I had to pivot and choose a much more capable driver. I spent the rest of my time in KiCad designing a much better electronics layout to handle those loads, using ChatGPT to do a lot of the heavy research and figure out the exact specs I needed.
I spent this session building out the complete schematic in KiCad, focusing on component integration and system protection. I laid out the Arduino Mega, mapped out all the pin configurations, and wired up the core sensor suite, which includes the GPS and compass module, the LiDAR, and the CSI camera. I also integrated the RC receiver circuit so the rover can be fully operated via a remote control system. With the main schematic finalized, I started designing a custom PCB HAT that will sit directly on top of the Arduino. This will keep the wire management incredibly clean and prevent any loose cables from disconnecting while the rover is moving. To protect the electronics, I also integrated a physical kill switch and a fuse into the power lines so nothing gets fried when the entire system is powered up.
Okay so this is my first time making a pcb, really looks like it doesn’t it LMAAOOOO. :) But seriously learned a lot, prolly gonna re-do a lot of these connections. So far i basically did the motor drivers as well as a couple of sensors. The purpose of this board is basically like one of those connectivity shields to sort of make cable managing the rover easy and unifying those similar systems together. (P.s. Lookout ain’t at the same level of reliability as lapses yet. Like this 1hr 36min recording should have been more like 2hrs smth mins long. )
It looks like I didn’t do a ton since the last update, but honestly, a lot of crazy stuff went down. I realized it was actually worth taking the time to learn how to design a proper PCB instead of just winging it and hoping for the best. Finding a decent KiCad tutorial was a nightmare, but I finally found one that clicked. Right after watching it, I realized my entire board layout was completely wrong. Instead of trying to fix a broken design, I just scrapped everything I had done, started completely from scratch, and actually learned all the useful keyboard shortcuts to speed things up. The new PCB is looking way better and is honestly pretty close to ready. I just need to finish up the silkscreen layer, label all the components, and run the final diagnostics to make sure nothing blows up before I send it off.
Figured some shit about kicad out
I honestly kind of messed up again with the previous version, even after I thought I had caught all my mistakes. What happened was I was trying to reference this one massive schematic that had both the Raspberry Pi and the Arduino mixed together using all these custom symbols. When I actually went to build the PCB from that schematic, absolutely none of the nets were linking up correctly, which completely broke the DRC test and left me with a total mess of errors. Since I wanted to actually turn in a clean design with solid test results and not just some broken file, I decided to just scrap the board yet again. Honestly, third time’s the charm because I started fresh, completely rewired the whole thing from the ground up, and got everything routing perfectly. I even added some really sick custom silkscreen graphics to the board to make it look legit. The Arduino Mega shield is finally, officially done, fully sorted, and looking great.
I spent this session totally cleaning up the schematics because they were honestly looking extremely dirty, so I got everything organized and looking right.I also learned some pretty interesting stuff about grounding this time. I literally had no idea that all the grounds were supposed to be the same; I kind of figured different parts of the system would have different grounds. After messing around with it for a bit, I realized all the ground planes are the same but they absolutely have to be interconnected, so I went ahead and fixed that whole setup. Another thing I realized is that I couldn’t find a UBEC that drops 12V down to 6V—they pretty much only come in 12V to 5V steps. Because of that, I had to pivot and shift the entire servo motor system over to run on 5V instead. I also added some really nice-to-have features, including three indicator LEDs: One is a fault indicator to show if anything goes wrong in the system. The second one shows that the digital pins are working and the code is actually running. The third one signifies that the UBEC power from the main system is coming in cleanly. Along with those three status LEDs, I added a physical reset button. I had to move a few components around here and there to make space, but it was honestly pretty easy this time because the actual PCB layout was already solid. The best part is that the only errors popping up on the DRC test are footprint overlaps, which is amazing since those aren’t even true electrical errors. The board is fully sorted, and it looks seriously cool with the new silkscreen graphics on it.
I spent this session bringing all the separate components into Fusion 360 to do a complete test fit. I pulled in models for the Raspberry Pi, the battery pack, my custom PCB, the Arduino Mega, and all the smaller hardware bits to see how they actually fit inside the chassis. The great news is that there’s a ton of extra room left inside the rover bed, which is going to make routing the wires incredibly easy. After locking down the fitment, I moved the entire assembly over to Blender. I honestly just find Blender a lot more comfortable to work with than Fusion 360, and it let me see how the rover looks under different lighting and environments. I ended up spending some time assigning materials and setting up a few really cool teaser renders that I can start sharing. They’re just teasers for now, but I plan on spending more time later creating both high-end graphical shots and proper engineering renders.
I ended up spending this session tweaking a bunch of bearing sizes and just refining how everything fits together. I actually noticed a ton of minor misalignments across the chassis that I completely missed the first time around, so I went through and finally squared everything up. Once the CAD model was actually sorted, I decided to sit down and figure out the logistics of how I’m going to build this thing. I went through the entire design to map out exactly what parts I need and the precise quantities for the build. I even started a master tracking file with direct links and sources for every single component, so I can just click and buy everything when it’s time to start assembling.
I created the bill of materials for the entire robot. While doing so, I noticed small errors in bearing sizes and screw holes, which I corrected. I then searched online, found all the required parts, and compiled them into a list. Surprisingly, the total is only $144, far below my estimate of $200–$250, which is great.
Added some standoffs for the motor drivers Aura Farmed with blender
Okay, so I know, spending time in Blender doesn’t seem like the most justified use of time. But here’s the thing. When I put something in Blender, I tend to see it in the exact scenario it’s supposed to be used, if you know what I mean. And because of that, I’m able to sort of find these little niche things that I need to fix. And I keep making a note of these little niche niche things in my diary.
I spent this session wrapping up the documentation and putting everything together for the repository release. I focused on exporting all the 3D assets, preparing the production files, and setting up the official GitHub repository so the whole project is cleanly tracked> To allow other peeps to make this asw, I drafted a comprehensive assembly guide that details exactly how the individual 3D-printed parts, carbon fiber rods, and fasteners connect. I also uploaded the finalized KiCad schematics and PCB manufacturing files so the custom electronics shield is fully open-source. Since this is the Helios MK-II, I also put together a direct breakdown comparing this build to the original MK-I. I highlighted the evolutionary updates, specifically the shift from a basic remote-controlled platform to a fully autonomous system, the massive improvements in structural rigidity through the new carbon fiber suspension joints over the old pcb ones, and the upgraded power management with the custom PCB HAT, a fuse, and hardware kill switch....
|
1792558380.143719
|
1793163180.143719
|
|
28039
|
KEEBoard by @raghavsharma1214 | Stardance
|
raghavsharma1214
|
0
|
55.96
|
0
|
[]
|
[{"post_id": 70937, "ts": "202 [{"post_id": 70937, "ts": "2026-09-20T02:28:20Z", "hours": 1.8008, "text": "Lets see how it will go now…"}, {"post_id": 68373, "ts": "2026-09-15T00:59:35Z", "hours": 1.0503, "text": "Yesss lesgooo we are moving bois the case is getting done, now i think ima order all parts now."}, {"post_id": 67861, "ts": "2026-09-14T04:28:06Z", "hours": 6.2672, "text": "righty guys so i changed some PCB things, sorted out through budget (was pushing $300 but now down to 220) and I split the prints in half so that they can actually be printed. I had to create brand new screw holes and patch existing holes and stuff with cursed geometry"}, {"post_id": 65781, "ts": "2026-09-11T04:50:54Z", "hours": 2.1008, "text": "Working on the keyboard and BOM. I decided to remove small ledges underneed the keyboard case for the rubber stoppers. I can just glue them on underneath. Having those ledges just gives the chance of messing up the 3d print. So I’ll do it like that. Also, I’m working on the github. I am solidifying the whoel readme and BOM."}, {"post_id": 64014, "ts": "2026-09-08T03:51:07Z", "hours": 5.9839, "text": "Polishing the keyboard. I converted the STLs to .STEP (a very annoying process btw), but before that i had to optimize the whole thing. I had to combine meshes and everything because all the files were totaling ~1g, and frying my RAM. Also I continued creating the BOM, and validating the PCB and stuff. This was SOO slow. because my ram was maxed out, I had to use SWAP. then blender, i had to wait like ~15 minutes between each operation because it ran hella slow. But I started researching different things like which keycaps I should use, which pour, and whatnot. BUt the whole optimization was so freaking tedious it took my whole bloody afternoon"}, {"post_id": 59317, "ts": "2026-09-01T01:24:48Z", "hours": 1.3667, "text": "LESS GOOO SCREWS DONE"}, {"post_id": 57047, "ts": "2026-08-29T03:47:18Z", "hours": 1.7008, "text": "I finally was able to remove the trillion verticies frying my ram. I used the remesh modifier. It make the topology a bit cursed, but its ight since its going to be 3d printed. I don’t really know what to do about the holes. Create an extended part of the keyboard specifically for the holes? idk son 😭"}, {"post_id": 54255, "ts": "2026-08-25T04:36:33Z", "hours": 0.7003, "text": "I am fixing the stuff and adding holes and all, but blender froze. I reverted it cuz I didn’t want to lose the project. It’s late anyway. i’ll do it tomorrow (along with 5 APs in school :( )"}, {"post_id": 54181, "ts": "2026-08-25T01:48:42Z", "hours": 1.0722, "text": "So I was working on teh BOM and stuff, but I realized I forgot to put screw holes in my keyboard case lmao. have to do that."}, {"post_id": 52736, "ts": "2026-08-23T01:57:31Z", "hours": 3.2336, "text": "This is the final render. Pls comment if I should change anything Edit: I saw those two weird white lines and removed them. IDK why they were there in the first place. Yep so hopefully looks fine now."}, {"post_id": 51405, "ts": "2026-08-21T02:49:25Z", "hours": 1.5339, "text": "Oh boy working on the rendering more"}, {"post_id": 50772, "ts": "2026-08-20T04:28:21Z", "hours": 0.4839, "text": "Rendering coming along ; )"}, {"post_id": 50722, "ts": "2026-08-20T02:02:30Z", "hours": 1.2083, "text": "I finalized the keyboard design (hopefully…) I added sections for rubber feet Made the case slightly longer for the bottom to have some thickness, and all sorts of other stuff. Now onto rendering or sum idk."}, {"post_id": 50105, "ts": "2026-08-19T05:19:43Z", "hours": 1.0622, "text": "My design is cooked… The plate is same in dimensions as the PCB, so there is no way for the gasket support to fit between PCB and plate without losing structural integrity or just not fitting if I’m 3d printing. So I think the workaround here is to widen the plate across the y-axis and use those protrusions as support for the gaskets. Idk I’ll see how the flow goes lowk. Even though right now it is a kind-of gasket mount, this classifies it as a semi kind-of gasket mount lmao Also, I’m deciding that I will do a silicon pour under the PCB for maximum sound insulation. it will also add weight to the keyboard, to keep it anchored and NOT rattly. next will be to double check all parts of keyboard, make sure everything has proper thickness, and hope for the best!"}, {"post_id": 48546, "ts": "2026-08-16T23:49:03Z", "hours": 1.6175, "text": "building even more of the case I finished up the general shape of the case. I created an opening for the USB-C port, and now I have to give the walls actual thickness and stuff, and check for stuff. This case design is really cursed because instead of combining two walls, I just placed the verticies in the same place instead of joining lmao"}, {"post_id": 47742, "ts": "2026-08-15T21:13:16Z", "hours": 2.2503, "text": "Okay so I swapped up the case design agian. I had to redesign eveyrthing because the top part of the case is too shallow for the esp-32 s3. Also I have to make sure the walls have thickness right now they are just 0mm thick. BTW, what i’m doing in this keyboard case, is something rarely done before. I’m creatign a gasket mount but no the regular kind. THis one will consist of poron foam tape spanning the entire perimeter as the “gasket”"}, {"post_id": 47311, "ts": "2026-08-15T05:48:22Z", "hours": 2.1481, "text": "Working on the keyboard case… I made the exterior look all nice (ish), but I didn’t create the semi-gasket mount. An invention of my own The “gasket” is just foam tape going around the whole perimeter of the keeb’s plate. Absorbing vibrations and enhancing “thoccieness” Hell yeah I still have to finish the case. It isn’t close to being done yet. This is a rough “sketch”"}, {"post_id": 46623, "ts": "2026-08-14T00:30:08Z", "hours": 1.7169, "text": "Now I’m transitioning to blender for the case design. I like blender because I can fine tune the aesthetics and all. SO I set up the case basics and everything, and did allat yk. it looks pretty nice. I used a pre-designed set of keycaps online because I won’t be making those, but ordering them instead. anyway, it all looks pretty nice!"}, {"post_id": 46092, "ts": "2026-08-13T01:49:15Z", "hours": 1.5169, "text": "Finished placing the keys, a daunting task. I had to manually place the keys, reference what the offset is compared to otehrso n the guide, etc etc. And get this: It is all just for the visual cad represenation when this finishes. lmao"}, {"post_id": 45469, "ts": "2026-08-11T23:24:29Z", "hours": 1.4172, "text": "Changes, and advancements in pcb design… I decided that i will use a top-mount case, much easier to manufacture than gasket mount, which I am alien to… kind of. What I’m doing is kind of a combination of top mount case and gasket mount. I will use a foam tape as a sort of gasket type thing, but it will span the entire perimeter of the keyboard, instead of specific gasket areas, allowing me to get a proper thocky sound but at an easier way to design it. I’m also placing all the keys now for visual representation."}, {"post_id": 45444, "ts": "2026-08-11T21:53:16Z", "hours": 15.7311, "text": "Transitioning from Macondo I realized that I won’t be able to complete this project in time for macondo, so, instead I will do the project here! All the logs for the creation process are on macondo, I can provide as per request, but I’ll be continuing off of here."}]...
|
Title: KEEBoard by @raghavsharma1214 | Stardance
Title: KEEBoard by @raghavsharma1214 | Stardance
Devlogs:
Transitioning from Macondo I realized that I won’t be able to complete this project in time for macondo, so, instead I will do the project here! All the logs for the creation process are on macondo, I can provide as per request, but I’ll be continuing off of here.
Changes, and advancements in pcb design… I decided that i will use a top-mount case, much easier to manufacture than gasket mount, which I am alien to… kind of. What I’m doing is kind of a combination of top mount case and gasket mount. I will use a foam tape as a sort of gasket type thing, but it will span the entire perimeter of the keyboard, instead of specific gasket areas, allowing me to get a proper thocky sound but at an easier way to design it. I’m also placing all the keys now for visual representation.
Finished placing the keys, a daunting task. I had to manually place the keys, reference what the offset is compared to otehrso n the guide, etc etc. And get this: It is all just for the visual cad represenation when this finishes. lmao
Now I’m transitioning to blender for the case design. I like blender because I can fine tune the aesthetics and all. SO I set up the case basics and everything, and did allat yk. it looks pretty nice. I used a pre-designed set of keycaps online because I won’t be making those, but ordering them instead. anyway, it all looks pretty nice!
Working on the keyboard case… I made the exterior look all nice (ish), but I didn’t create the semi-gasket mount. An invention of my own The “gasket” is just foam tape going around the whole perimeter of the keeb’s plate. Absorbing vibrations and enhancing “thoccieness” Hell yeah I still have to finish the case. It isn’t close to being done yet. This is a rough “sketch”
Okay so I swapped up the case design agian. I had to redesign eveyrthing because the top part of the case is too shallow for the esp-32 s3. Also I have to make sure the walls have thickness right now they are just 0mm thick. BTW, what i’m doing in this keyboard case, is something rarely done before. I’m creatign a gasket mount but no the regular kind. THis one will consist of poron foam tape spanning the entire perimeter as the “gasket”
building even more of the case I finished up the general shape of the case. I created an opening for the USB-C port, and now I have to give the walls actual thickness and stuff, and check for stuff. This case design is really cursed because instead of combining two walls, I just placed the verticies in the same place instead of joining lmao
My design is cooked… The plate is same in dimensions as the PCB, so there is no way for the gasket support to fit between PCB and plate without losing structural integrity or just not fitting if I’m 3d printing. So I think the workaround here is to widen the plate across the y-axis and use those protrusions as support for the gaskets. Idk I’ll see how the flow goes lowk. Even though right now it is a kind-of gasket mount, this classifies it as a semi kind-of gasket mount lmao Also, I’m deciding that I will do a silicon pour under the PCB for maximum sound insulation. it will also add weight to the keyboard, to keep it anchored and NOT rattly. next will be to double check all parts of keyboard, make sure everything has proper thickness, and hope for the best!
I finalized the keyboard design (hopefully…) I added sections for rubber feet Made the case slightly longer for the bottom to have some thickness, and all sorts of other stuff. Now onto rendering or sum idk.
Rendering coming along ; )
Oh boy working on the rendering more
This is the final render. Pls comment if I should change anything Edit: I saw those two weird white lines and removed them. IDK why they were there in the first place. Yep so hopefully looks fine now.
So I was working on teh BOM and stuff, but I realized I forgot to put screw holes in my keyboard case lmao. have to do that.
I am fixing the stuff and adding holes and all, but blender froze. I reverted it cuz I didn’t want to lose the project. It’s late anyway. i’ll do it tomorrow (along with 5 APs in school :( )
I finally was able to remove the trillion verticies frying my ram. I used the remesh modifier. It make the topology a bit cursed, but its ight since its going to be 3d printed. I don’t really know what to do about the holes. Create an extended part of the keyboard specifically for the holes? idk son 😭
LESS GOOO SCREWS DONE
Polishing the keyboard. I converted the STLs to .STEP (a very annoying process btw), but before that i had to optimize the whole thing. I had to combine meshes and everything because all the files were totaling ~1g, and frying my RAM. Also I continued creating the BOM, and validating the PCB and stuff. This was SOO slow. because my ram was maxed out, I had to use SWAP. then blender, i had to wait like ~15 minutes between each operation because it ran hella slow. But I started researching different things like which keycaps I should use, which pour, and whatnot. BUt the whole optimization was so freaking tedious it took my whole bloody afternoon
Working on the keyboard and BOM. I decided to remove small ledges underneed the keyboard case for the rubber stoppers. I can just glue them on underneath. Having those ledges just gives the chance of messing up the 3d print. So I’ll do it like that. Also, I’m working on the github. I am solidifying the whoel readme and BOM.
righty guys so i changed some PCB things, sorted out through budget (was pushing $300 but now down to 220) and I split the prints in half so that they can actually be printed. I had to create brand new screw holes and patch existing holes and stuff with cursed geometry
Yesss lesgooo we are moving bois the case is getting done, now i think ima order all parts now.
Lets see how it will go now…...
|
1792522136.0631952
|
1793126936.0631952
|
|
24652
|
Portfolio by @Ak_45 | Stardance
|
|
3
|
55.67
|
335
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T11:19:33Z", "hours": 35.0, "multiplier": 17.19, "payout": 305, "blessing": "neutral", "text": "I have polished my portfolio and added a room entering animation and a room (based on my room) and added interactive objects like a gaming mouse (turns RGB), a lamp (lights control), a clock (chimes when interacted with), headphones (plays lo-fi beats to enjoy), a chair, a bush,the window, and a microcontroller. To enter the portfolio, click on the laptop, and for full interaction, click on the laptop and fully interact with the portfolio. Click on the hamburger menu (3 horizontal lines), and for activating the Easter egg, type ‘akshith’ after reaching the bottom (full imersion/hamburger mode only)", "repo": "https://github.com/Akshithsurya/Portfolio_", "demo": "https://akshith-surya-portfolio-ak.netlify.app/"}, {"ship_num": 2, "ts": "2026-07-13T14:47:30Z", "hours": 3.0, "multiplier": 16.46, "payout": 21, "blessing": "neutral", "text": "I’ve built a sci-fi, terminal-style portfolio website that is a “mission dossier” of my journey in space science, hardware, and machine learning. Instead of a resume, it has interactive sections such as “Mission Logs” (projects), “Capabilities” (tech stack), and “Active Transmissions” (current focus). The main problem was crafting a UI that felt like a real aerospace control terminal and classified dossier but was still responsive and performant. I also had to structure the data carefully so that the hover cards for “Mission Records” and “Credentials” could be rendered dynamically without weighing down the page. I am really proud of the overall aesthetic and the narrative flow; it is not just a list of my skills but tells the story of a 15 year old aspiring astrophysicist from Kerala. I’m also proud to have tied my real world milestones like being a NASA Space Apps Global Nominee (Team RC_Real Coding) and my ISRO achievements into this cohesive “classified” theme. Testing & exploring: Scroll the 6 “Mission” sections or use the top nav. Hover over the Mission Records and Credentials cards for verified information. Easter Egg – Scroll to the very bottom of the page (Contact / Footer section) and then type akshith on your keyboard to unlock the Easter Egg! :D (also the solar map works it is time acurate so no quick movement)", "repo": "https://github.com/Akshithsurya/Portfolio_", "demo": "https://akshith-surya-portfolio-ak.netlify.app/"}, {"ship_num": 3, "ts": "2026-07-07T12:08:14Z", "hours": 2.0, "multiplier": 4.57, "payout": 9, "blessing": "neutral", "text": "What I made: My personal portfolio site — a single-file, deep-space-themed site built to represent my work in astrophysics, AI, and hardware to evaluators and collaborators. It runs a canvas starfield, a constellation-following cursor, and orbiting exoplanet animations and pulls live data from my GitHub ( @Akshithsurya ) so the projects section stays current without manual updates. What was challenging: Getting the animations to feel alive without tanking performance. I had several separate requestAnimationFrame loops running at once early on, which caused visible lag on scroll. I consolidated them into a single scheduler, dropped a full-viewport SVG grain overlay that was expensive to render, removed backdrop-filter blur during scroll events, and added content-visibility:auto to keep off-screen sections from being painted. The site went through several visual identity passes before landing on the current cosmic direction. What I’m proud of: It’s a single HTML file — no framework, no build step — that still holds a coherent, deliberate aesthetic and runs smoothly on modest hardware, which matters given the site’s audience. How to test it: Visit the live link, scroll through the sections, and try moving the cursor near the starfield to see the constellation effect. The GitHub activity should reflect my actual repositories in real time.", "repo": "https://github.com/Akshithsurya/Portfolio_", "demo": "https://akshith-surya-portfolio-ak.netlify.app/"}]...
|
[{"post_id": 48103, "ts": "202 [{"post_id": 48103, "ts": "2026-08-16T12:05:58Z", "hours": 8.6519, "text": "Added so that you can walk through the room, but it is not fully decorated yet ;). If you have any opinions, share them with me"}, {"post_id": 46786, "ts": "2026-08-14T09:14:07Z", "hours": 7.0197, "text": "Tried to add weather control; it worked at first, but I messed up, and it won’t load :("}, {"post_id": 44608, "ts": "2026-08-10T14:27:22Z", "hours": 9.6306, "text": "made the website way more optimized and decided to make the next.JS has some actual functions that made the textures and lighting also deployed this version: https://akshith-surya-portfolio-ak.netlify.app/ & https://akshith-surya-portfolio.vercel.app/"}, {"post_id": 43756, "ts": "2026-08-09T05:36:45Z", "hours": 8.8464, "text": "I have fixed the clock and made all the objects have better texture and added fabric texture to the windows, which made the lighting feel more realistic and made the portfolio match the room."}, {"post_id": 42772, "ts": "2026-08-07T17:30:43Z", "hours": 8.0769, "text": "Made all the items interactable, but I still can’t figure out what to do with the drawer, and the clock has gone mad :( and added lofi beats when the headphones are interacted with."}, {"post_id": 41887, "ts": "2026-08-06T11:59:00Z", "hours": 8.8603, "text": "making the entire website 3D and putting it all inside my room with a cozy aesthetic and different ways to look at my portfolio."}, {"post_id": 27708, "ts": "2026-07-13T14:34:38Z", "hours": 1.6222, "text": "Finally did what I wanted to; no one can call it bad."}, {"post_id": 27164, "ts": "2026-07-12T14:08:59Z", "hours": 0.5894, "text": "Adding easter eggs to my portfolio try ME"}, {"post_id": 25914, "ts": "2026-07-10T12:31:52Z", "hours": 0.4067, "text": "Adding sun in the background as a reference to my name"}, {"post_id": 24073, "ts": "2026-07-07T12:06:59Z", "hours": 2.0625, "text": "REAdy for liftoff: https://akshith-surya-portfolio-ak.netlify.app/"}]...
|
Title: Portfolio by @Ak_45 | Stardance
Devlogs:
R Title: Portfolio by @Ak_45 | Stardance
Devlogs:
REAdy for liftoff: https://akshith-surya-portfolio-ak.netlify.app/
Adding sun in the background as a reference to my name
Adding easter eggs to my portfolio try ME
Finally did what I wanted to; no one can call it bad.
making the entire website 3D and putting it all inside my room with a cozy aesthetic and different ways to look at my portfolio.
Made all the items interactable, but I still can’t figure out what to do with the drawer, and the clock has gone mad :( and added lofi beats when the headphones are interacted with.
I have fixed the clock and made all the objects have better texture and added fabric texture to the windows, which made the lighting feel more realistic and made the portfolio match the room.
made the website way more optimized and decided to make the next.JS has some actual functions that made the textures and lighting also deployed this version: https://akshith-surya-portfolio-ak.netlify.app/ & https://akshith-surya-portfolio.vercel.app/
Tried to add weather control; it worked at first, but I messed up, and it won’t load :(
Added so that you can walk through the room, but it is not fully decorated yet ;). If you have any opinions, share them with me
Ships:
What I made: My personal portfolio site — a single-file, deep-space-themed site built to represent my work in astrophysics, AI, and hardware to evaluators and collaborators. It runs a canvas starfield, a constellation-following cursor, and orbiting exoplanet animations and pulls live data from my GitHub ( @Akshithsurya ) so the projects section stays current without manual updates. What was challenging: Getting the animations to feel alive without tanking performance. I had several separate requestAnimationFrame loops running at once early on, which caused visible lag on scroll. I consolidated them into a single scheduler, dropped a full-viewport SVG grain overlay that was expensive to render, removed backdrop-filter blur during scroll events, and added content-visibility:auto to keep off-screen sections from being painted. The site went through several visual identity passes before landing on the current cosmic direction. What I’m proud of: It’s a single HTML file — no framework, no build step — that still holds a coherent, deliberate aesthetic and runs smoothly on modest hardware, which matters given the site’s audience. How to test it: Visit the live link, scroll through the sections, and try moving the cursor near the starfield to see the constellation effect. The GitHub activity should reflect my actual repositories in real time.
I’ve built a sci-fi, terminal-style portfolio website that is a “mission dossier” of my journey in space science, hardware, and machine learning. Instead of a resume, it has interactive sections such as “Mission Logs” (projects), “Capabilities” (tech stack), and “Active Transmissions” (current focus). The main problem was crafting a UI that felt like a real aerospace control terminal and classified dossier but was still responsive and performant. I also had to structure the data carefully so that the hover cards for “Mission Records” and “Credentials” could be rendered dynamically without weighing down the page. I am really proud of the overall aesthetic and the narrative flow; it is not just a list of my skills but tells the story of a 15 year old aspiring astrophysicist from Kerala. I’m also proud to have tied my real world milestones like being a NASA Space Apps Global Nominee (Team RC_Real Coding) and my ISRO achievements into this cohesive “classified” theme. Testing & exploring: Scroll the 6 “Mission” sections or use the top nav. Hover over the Mission Records and Credentials cards for verified information. Easter Egg – Scroll to the very bottom of the page (Contact / Footer section) and then type akshith on your keyboard to unlock the Easter Egg! :D (also the solar map works it is time acurate so no quick movement)
I have polished my portfolio and added a room entering animation and a room (based on my room) and added interactive objects like a gaming mouse (turns RGB), a lamp (lights control), a clock (chimes when interacted with), headphones (plays lo-fi beats to enjoy), a chair, a bush,the window, and a microcontroller. To enter the portfolio, click on the laptop, and for full interaction, click on the laptop and fully interact with the portfolio. Click on the hamburger menu (3 horizontal lines), and for activating the Easter egg, type ‘akshith’ after reaching the bottom (full imersion/hamburger mode only)...
|
1792997721.9822905
|
1793084121.9822905
|
|
37527
|
FinderScope by @urged-st | Stardance
|
urged-st
|
0
|
55.66
|
0
|
[]
|
[{"post_id": 45640, "ts": "202 [{"post_id": 45640, "ts": "2026-08-12T08:27:43Z", "hours": 9.1017, "text": "finderscope - shipping soon? so I’ve decided I actually want to deploy this at some point instead of just letting it sit as a pile of features forever, which meant going back through and fixing a bunch of stuff that’s been bugging me for ages. tag first thing, tiny one, but “gotta name ’em all!” is under the title now and it’s been annoying me that there wasn’t a more exciting tag this whole time honestly. also added a proper give up button next to guess (spaced it out on purpose so I don’t misclick, learned that the hard way testing it lol). zoom then I added zoom. scroll wheel on desktop, pinch on mobile, and I had to make basically everything that used to assume a fixed field of view actually react to whatever zoom level you’re at instead. more fiddly than I expected but it works now?? test mode the big one this time was test mode though. Its a timed quiz, 10 seconds a round, last 5 seconds the countdown flashes red which is somehow way more stressful than I meant it to be. also gave it difficulty options same as quiz (10 questions on easy, 15 on medium/hard). it currently stores in a log but this log isn’t able to be displayed yet stretching issue and then. THEN. the whole page kept randomly stretching every time I switched modes and I could NOT figure out why for like a solid chunk of time. turned out I was setting display: block on stuff that’s supposed to be display: flex in the css, so the second js touched it, it’d lose its centring and just stretch full width. one word. one single word was breaking the whole layout. very funny in hindsight, not funny at the time. also finally deleted the old debug buttons (show answer / new round) since give up does that job properly now and they were never meant to stick around this long anyway. what’s left showing the score log instead of just quietly saving it to localStorage like a coward"}, {"post_id": 40384, "ts": "2026-08-03T21:05:41Z", "hours": 7.7075, "text": "Serpens, you’re northern, and why are you cut in half?!? Serpens Ok so this has been bugging me since v1, the dataset had 89 constellations instead of 88, and it was always serpens’s fault. Turns out serpens is split into two disjoint bits in the sky (caput and cauda, “head” and “tail,” there’s ophiuchus sitting in between them which is just extremely funny to me), and the source data gives both halves the exact same id. so my original import script was treating them as two separate constellations, AND mislabelling both of them “serpens cauda” in the process cause the name lookup only kept whichever one loaded last. so naturally I went back into the raw data and rebuilt the whole import properly this time so now serpens is only ONE entry (I’m not sure why I didn’t fix this earlier ngl) Layout also the whole page just didn’t fit on screen, you had to scroll up and down to reach everything which is such an annoying way to play a quiz. I tightened up basically every gap/margin in the css and added some dynamic sizing. what’s next might revisit the fov/zoom level at some point now the canvas is smaller probably gonna keep editing layout till I see it fit extra hard mode!???!???!???!??11/1?! *oh yeah and deploy probably"}, {"post_id": 36304, "ts": "2026-07-28T10:08:57Z", "hours": 14.8397, "text": "what am i even doing anymore bro ok this session got out of hand not sure if it’ll show but it was 10hrs of stuff then 4 HOURS OF BUGFIXING AND TRIAL AND ERROR GAHHHH ok heres what i did streaks and auto advance added streak tracking to quiz mode. current streak, best streak, accuracy %, all saved to localStorage . if you get one wrong, the streak’s gone, no mercy at ALL. also made it so a correct guess auto-advances to a new round after 2 seconds instead of just sitting there waiting for you to click new round like some kind of caveman. THE BIG ONE so quiz mode and learn mode were both using this rough relative distance method to figure out neighbours , which is fine until you realise it’s not actually how constellations work. constellations aren’t just the shape with lines and dots lol, they’re officially bounded regions of sky (yes, actually, the IAU drew borders around all 88 of them in 1930). so I went and found the real boundary data and pulled it from d3-celestial, same open source star chart project I got the line/star data from originally. every constellation now has its actual official border drawn around them so when you’re learning you know what parts are actually part of it (trust me, this helps when you’re learning) but other than that, wth did this even do? hemisphere classification is now based on where the constellation’s real territory sits, not just an average of its star pattern (this fixed monoceros and serpens specifically, both of which sit right on the celestial equator and were getting sorted into the wrong hemisphere before) learn mode now draws the ACTUAL official boundary outline around whatever you’re looking at, dashed amber line, very satisfying neighbouring constellations now fade based on real distance instead of just being flat dim, so busy parts of the sky (looking at you, octans) don’t turn into an illegible wall of navy lines BTW I genuinely thought the octans clutter thing from ages ago was a bug, but the south pole is just actually that crowded with tiny constellations. I think you can tell I prefer the north. also had a scary moment where NOTHING was rendering and learn mode wouldn’t even switch, I thought I’d broken something major, but turned out to just be a memory issue from having so much boundary data loaded so I restarted vscode and it sorted itself out 💀 what’s next changing some of the names and shapes, I need to find out which ones are actually used widely cause some in the dataset I use are super weird (peep the video!) the duplicate constellation entry (serpens has two parts sharing one id, still not dealt with) I really really really want to add a speedrun mode!!"}, {"post_id": 34331, "ts": "2026-07-24T22:54:25Z", "hours": 8.5794, "text": "RAHHHH 8 HOURS CAN’T STOP ME NOW my bad. ok so essentially what has happened in the last day is: got bored of the current styling (which is none btw) decided to work on the actual quiz aspect of it, testing is over a lot, LOT of trial and error and some standard bugfixing styling wise, rather than defaulting to a generic dark mode, the canvas is framed like a viewfinder. I just thought it would look nice tbh, there’s not much else going on there other than the stars. I kept the blues that I already used in the canvas itself ( #5a8dee for target, #2e3d5c for neighbours) and just extended them into the actual UI instead of picking a new palette. the fonts are basically the same as the rest of my projects but icl i might change that when I was first making the learn mode today, I gave it the northern/southern/all split, quiz mode didn’t, so pickRandomConstellation now pulls from whatever hemisphere’s selected instead of the full 89. changing it mid-quiz rerolls immediately rather than waiting for the next round too. I also added a show ans button for testing cause even I don’t know them all lmao (only the northern ones so far, and like 3 southern!) so will probably remove this later additionally, I also kept testing and editing parameters for the projection to make it as smooth as possible. what. a. day. and yes im tired as hell its nearly midnight i’m off to bed"}, {"post_id": 33945, "ts": "2026-07-24T08:47:19Z", "hours": 5.7539, "text": "finderscope v3-4 accidentally sank 6 hours into this one but it’s the session that where you feel like looking through something instead of staring at a flat projection naked eye orientation turns out this was already sorted from v1, the x-axis flip that was in there from the start so I didn’t have to touch the projection maths, just double checked that north stays up on canvas and left it alone. the real work was making that hold up once the camera can move anywhere, not just the handful of fixed constellation centres it used to snap to. drag to pan the camera is now a proper mutable cameraRA / cameraDec instead of being locked to target.center . dragging works out a small angular delta per mousemove event using a small-angle approximation (fine since consecutive drag events are tiny steps, not one big jump), and shifts the camera opposite in ra and dec so the sky moves with your cursor like a map, not like a first-person look-around. findInView had to change too since “who’s a neighbour” used to be based on the target’s fixed centre, now it’s based on wherever the camera’s actually pointing. clamped cameraDec to ±89.5° so dragging into a pole doesn’t divide by zero and send the camera into deep space 💀 added touch support alongside mouse since drag is the kind of interaction that should just work on mobile too. what’s next learn mode, hemisphere split octans pole clutter still unresolved from v2 some kind of scoring/streak system"}, {"post_id": 32026, "ts": "2026-07-20T21:56:54Z", "hours": 3.2267, "text": "finderscope v2: camera + neighbours I wanted the zoom to actually feel like looking through a scope rather than a bounding-box crop, so this session was about two things: a fixed camera FOV, and pulling in neighbouring constellations so there’s context around whatever you’re meant to be naming. the auto-fit issues v1 fit the canvas to the target constellation’s own bounding box, which meant every constellation filled the frame regardless of its real size on the sky. Crux and hydra looked the same scale, which defeats the point of a “how much can you see” difficulty system. So, I fixed it by switching to a constant angular field of view instead. stereographic projection has a neat closed-form relationship between angular separation from centre and projected radius: rho = 2 * tan(theta / 2) . so i just pick a FOV in degrees, work out what radius that maps to, and scale the canvas to that instead of to the data. neighbours for each constellation, check every vertex’s angular separation from the target’s centre (reused the same cosc term from the projection maths, just wrapped in acos instead). anything with at least one vertex inside a 55° radius gets pulled in and drawn dim, target stays bright and thicker so there’s no ambiguity about what to actually guess. I tested both of these in node before touching canvas, specifically against Oct and UMi since anything near the celestial poles is where stereographic maths tends to fall apart. OCTANS WHYY octans pulls in 37 neighbours at the current radius because it’s so close to the pole. Everything nearby just looks angularly closer than it would elsewhere on the sky. That’s fine for now, but medium/hard difficulty will look like a mess down there unless i either shrink the include radius near the poles specifically or cap how many neighbours actually get drawn. what’s next sort out the pole clutter issue properly difficulty tiers (all lines / neighbours only / none) guess input + checking learn mode, hemisphere split"}, {"post_id": 31659, "ts": "2026-07-20T07:38:11Z", "hours": 6.4511, "text": "Firstly - yes, I have 6 hours on this, because I switched ideas midway (so essentially 2 hours of work gone lol) FinderScope i was mid-attempt at memorising all 88 constellations using some app, got through easy mode fine, then hit a paywall the second i wanted the other two difficulties. so, obviously, I’m building my own cause nobody should have to pay for something as simple as this. the idea is a constellation naming quiz. it zooms into a random constellation somewhere in the sky, you guess what it’s called, and there’s three difficulties depending on how many of the surrounding constellation lines you get to see (all of them, just the neighbours, or none). eventually there’ll be a learn mode too that splits northern/southern sky and gives you the actual mythology name alongside the IAU one. started with v1 today: just getting one constellation to render and project correctly, no game logic yet. the data problem turns out there’s no NASA-style API for “here’s every constellation’s star positions and line segments,” so i pulled from d3-celestial , an open source star chart project on github. grabbed: constellations.lines.json — RA/dec coordinates for every line segment in all 88 constellations constellations.json — names, including an en field with the actual mythology name (canis major → “great dog”, that kind of thing) wrote a python script to slim both down into one dataset per constellation: id, name, en, a precomputed centre point, and the line coordinates. centre point was its own small problem — you can’t just average RA values because of the 0°/360° wraparound, so i averaged everything as unit vectors on the sphere instead and converted back. way cleaner. projection the actual hard part. “zoom into a random constellation” means taking a patch of sky centred wherever that constellation sits and flattening it onto a canvas. went with a stereographic projection, standard formula, centred on each constellation’s precomputed centre. tested the maths in node before touching canvas at all — ran orion through it and checked the projected bounds didn’t blow up or do anything weird near the pole. glad i did that first, would’ve been a nightmare to debug visually. canvas side just auto-fits whatever bounding box comes out of the projection, so it works whether the constellation is tiny (like crux ) or sprawling. what’s off right now some of the constellation names/lines from the dataset are a little wrong — going to go through and fix those manually rather than trying to patch it in code. what’s next neighbouring constellations (so medium/easy difficulty actually has something to show) difficulty tiers actual guess-checking learn mode with the hemisphere split"}]...
|
Title: FinderScope by @urged-st | Stardance
Devlo Title: FinderScope by @urged-st | Stardance
Devlogs:
Firstly - yes, I have 6 hours on this, because I switched ideas midway (so essentially 2 hours of work gone lol) FinderScope i was mid-attempt at memorising all 88 constellations using some app, got through easy mode fine, then hit a paywall the second i wanted the other two difficulties. so, obviously, I’m building my own cause nobody should have to pay for something as simple as this. the idea is a constellation naming quiz. it zooms into a random constellation somewhere in the sky, you guess what it’s called, and there’s three difficulties depending on how many of the surrounding constellation lines you get to see (all of them, just the neighbours, or none). eventually there’ll be a learn mode too that splits northern/southern sky and gives you the actual mythology name alongside the IAU one. started with v1 today: just getting one constellation to render and project correctly, no game logic yet. the data problem turns out there’s no NASA-style API for “here’s every constellation’s star positions and line segments,” so i pulled from d3-celestial , an open source star chart project on github. grabbed: constellations.lines.json — RA/dec coordinates for every line segment in all 88 constellations constellations.json — names, including an en field with the actual mythology name (canis major → “great dog”, that kind of thing) wrote a python script to slim both down into one dataset per constellation: id, name, en, a precomputed centre point, and the line coordinates. centre point was its own small problem — you can’t just average RA values because of the 0°/360° wraparound, so i averaged everything as unit vectors on the sphere instead and converted back. way cleaner. projection the actual hard part. “zoom into a random constellation” means taking a patch of sky centred wherever that constellation sits and flattening it onto a canvas. went with a stereographic projection, standard formula, centred on each constellation’s precomputed centre. tested the maths in node before touching canvas at all — ran orion through it and checked the projected bounds didn’t blow up or do anything weird near the pole. glad i did that first, would’ve been a nightmare to debug visually. canvas side just auto-fits whatever bounding box comes out of the projection, so it works whether the constellation is tiny (like crux ) or sprawling. what’s off right now some of the constellation names/lines from the dataset are a little wrong — going to go through and fix those manually rather than trying to patch it in code. what’s next neighbouring constellations (so medium/easy difficulty actually has something to show) difficulty tiers actual guess-checking learn mode with the hemisphere split
finderscope v2: camera + neighbours I wanted the zoom to actually feel like looking through a scope rather than a bounding-box crop, so this session was about two things: a fixed camera FOV, and pulling in neighbouring constellations so there’s context around whatever you’re meant to be naming. the auto-fit issues v1 fit the canvas to the target constellation’s own bounding box, which meant every constellation filled the frame regardless of its real size on the sky. Crux and hydra looked the same scale, which defeats the point of a “how much can you see” difficulty system. So, I fixed it by switching to a constant angular field of view instead. stereographic projection has a neat closed-form relationship between angular separation from centre and projected radius: rho = 2 * tan(theta / 2) . so i just pick a FOV in degrees, work out what radius that maps to, and scale the canvas to that instead of to the data. neighbours for each constellation, check every vertex’s angular separation from the target’s centre (reused the same cosc term from the projection maths, just wrapped in acos instead). anything with at least one vertex inside a 55° radius gets pulled in and drawn dim, target stays bright and thicker so there’s no ambiguity about what to actually guess. I tested both of these in node before touching canvas, specifically against Oct and UMi since anything near the celestial poles is where stereographic maths tends to fall apart. OCTANS WHYY octans pulls in 37 neighbours at the current radius because it’s so close to the pole. Everything nearby just looks angularly closer than it would elsewhere on the sky. That’s fine for now, but medium/hard difficulty will look like a mess down there unless i either shrink the include radius near the poles specifically or cap how many neighbours actually get drawn. what’s next sort out the pole clutter issue properly difficulty tiers (all lines / neighbours only / none) guess input + checking learn mode, hemisphere split
finderscope v3-4 accidentally sank 6 hours into this one but it’s the session that where you feel like looking through something instead of staring at a flat projection naked eye orientation turns out this was already sorted from v1, the x-axis flip that was in there from the start so I didn’t have to touch the projection maths, just double checked that north stays up on canvas and left it alone. the real work was making that hold up once the camera can move anywhere, not just the handful of fixed constellation centres it used to snap to. drag to pan the camera is now a proper mutable cameraRA / cameraDec instead of being locked to target.center . dragging works out a small angular delta per mousemove event using a small-angle approximation (fine since consecutive drag events are tiny steps, not one big jump), and shifts the camera opposite in ra and dec so the sky moves with your cursor like a map, not like a first-person look-around. findInView had to change too since “who’s a neighbour” used to be based on the target’s fixed centre, now it’s based on wherever the camera’s actually pointing. clamped cameraDec to ±89.5° so dragging into a pole doesn’t divide by zero and send the camera into deep space 💀 added touch support alongside mouse since drag is the kind of interaction that should just work on mobile too. what’s next learn mode, hemisphere split octans pole clutter still unresolved from v2 some kind of scoring/streak system
RAHHHH 8 HOURS CAN’T STOP ME NOW my bad. ok so essentially what has happened in the last day is: got bored of the current styling (which is none btw) decided to work on the actual quiz aspect of it, testing is over a lot, LOT of trial and error and some standard bugfixing styling wise, rather than defaulting to a generic dark mode, the canvas is framed like a viewfinder. I just thought it would look nice tbh, there’s not much else going on there other than the stars. I kept the blues that I already used in the canvas itself ( #5a8dee for target, #2e3d5c for neighbours) and just extended them into the actual UI instead of picking a new palette. the fonts are basically the same as the rest of my projects but icl i might change that when I was first making the learn mode today, I gave it the northern/southern/all split, quiz mode didn’t, so pickRandomConstellation now pulls from whatever hemisphere’s selected instead of the full 89. changing it mid-quiz rerolls immediately rather than waiting for the next round too. I also added a show ans button for testing cause even I don’t know them all lmao (only the northern ones so far, and like 3 southern!) so will probably remove this later additionally, I also kept testing and editing parameters for the projection to make it as smooth as possible. what. a. day. and yes im tired as hell its nearly midnight i’m off to bed
what am i even doing anymore bro ok this session got out of hand not sure if it’ll show but it was 10hrs of stuff then 4 HOURS OF BUGFIXING AND TRIAL AND ERROR GAHHHH ok heres what i did streaks and auto advance added streak tracking to quiz mode. current streak, best streak, accuracy %, all saved to localStorage . if you get one wrong, the streak’s gone, no mercy at ALL. also made it so a correct guess auto-advances to a new round after 2 seconds instead of just sitting there waiting for you to click new round like some kind of caveman. THE BIG ONE so quiz mode and learn mode were both using this rough relative distance method to figure out neighbours , which is fine until you realise it’s not actually how constellations work. constellations aren’t just the shape with lines and dots lol, they’re officially bounded regions of sky (yes, actually, the IAU drew borders around all 88 of them in 1930). so I went and found the real boundary data and pulled it from d3-celestial, same open source star chart project I got the line/star data from originally. every constellation now has its actual official border drawn around them so when you’re learning you know what parts are actually part of it (trust me, this helps when you’re learning) but other than that, wth did this even do? hemisphere classification is now based on where the constellation’s real territory sits, not just an average of its star pattern (this fixed monoceros and serpens specifically, both of which sit right on the celestial equator and were getting sorted into the wrong hemisphere before) learn mode now draws the ACTUAL official boundary outline around whatever you’re looking at, dashed amber line, very satisfying neighbouring constellations now fade based on real distance instead of just being flat dim, so busy parts of the sky (looking at you, octans) don’t turn into an illegible wall of navy lines BTW I genuinely thought the octans clutter thing from ages ago was a bug, but the south pole is just actually that crowded with tiny constellations. I think you can tell I prefer the north. also had a scary moment where NOTHING was rendering and learn mode wouldn’t even switch, I thought I’d broken something major, but turned out to just be a memory issue from having so much boundary data loaded so I restarted vscode and it sorted itself out 💀 what’s next changing some of the names and shapes, I need to find out which ones are actually used widely cause some in the dataset I use are super weird (peep the video!) the duplicate constellation entry (serpens has two parts sharing one id, still not dealt with) I really really really want to add a speedrun mode!!
Serpens, you’re northern, and why are you cut in half?!? Serpens Ok so this has been bugging me since v1, the dataset had 89 constellations instead of 88, and it was always serpens’s fault. Turns out serpens is split into two disjoint bits in the sky (caput and cauda, “head” and “tail,” there’s ophiuchus sitting in between them which is just extremely funny to me), and the source data gives both halves the exact same id. so my original import script was treating them as two separate constellations, AND mislabelling both of them “serpens cauda” in the process cause the name lookup only kept whichever one loaded last. so naturally I went back into the raw data and rebuilt the whole import properly this time so now serpens is only ONE entry (I’m not sure why I didn’t fix this earlier ngl) Layout also the whole page just didn’t fit on screen, you had to scroll up and down to reach everything which is such an annoying way to play a quiz. I tightened up basically every gap/margin in the css and added some dynamic sizing. what’s next might revisit the fov/zoom level at some point now the canvas is smaller probably gonna keep editing layout till I see it fit extra hard mode!???!???!???!??11/1?! *oh yeah and deploy probably
finderscope - shipping soon? so I’ve decided I actually want to deploy this at some point instead of just letting it sit as a pile of features forever, which meant going back through and fixing a bunch of stuff that’s been bugging me for ages. tag first thing, tiny one, but “gotta name ’em all!” is under the title now and it’s been annoying me that there wasn’t a more exciting tag this whole time honestly. also added a proper give up button next to guess (spaced it out on purpose so I don’t misclick, learned that the hard way testing it lol). zoom then I added zoom. scroll wheel on desktop, pinch on mobile, and I had to make basically everything that used to assume a fixed field of view actually react to whatever zoom level you’re at instead. more fiddly than I expected but it works now?? test mode the big one this time was test mode though. Its a timed quiz, 10 seconds a round, last 5 seconds the countdown flashes red which is somehow way more stressful than I meant it to be. also gave it difficulty options same as quiz (10 questions on easy, 15 on medium/hard). it currently stores in a log but this log isn’t able to be displayed yet stretching issue and then. THEN. the whole page kept randomly stretching every time I switched modes and I could NOT figure out why for like a solid chunk of time. turned out I was setting display: block on stuff that’s supposed to be display: flex in the css, so the second js touched it, it’d lose its centring and just stretch full width. one word. one single word was breaking the whole layout. very funny in hindsight, not funny at the time. also finally deleted the old debug buttons (show answer / new round) since give up does that job properly now and they were never meant to stick around this long anyway. what’s left showing the score log instead of just quietly saving it to localStorage like a coward...
|
1792925389.6369662
|
1793789389.6369662
|
|
49944
|
Trawl - CTF Toolkit by @yuv1 | Stardance
|
yuv1
|
1
|
55.65
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T18:24:13Z", "hours": 52.0, "multiplier": 18.88, "payout": 0, "blessing": "neutral", "text": "Trawl Trawl is a CTF toolkit for checking suspicious files, encoded text, binaries, and challenge websites from one place. In a CTF, you often get an image, audio file, string, or binary and have to figure out what is hidden inside it. Usually that means opening a bunch of different tools and already knowing what to try. Trawl tries to make that easier. You give it the challenge, and it runs checks that make sense for that input. Try it Live: trawlctf.vercel.app Source: github.com/Yuv1s/Trawl The easiest way to test it: Open the site. Click Tour . Trawl loads a sample file with a hidden flag. Watch the checks run and see what finds it. There are also more sample files under Demos , so you do not need your own CTF challenge. What it can do Trawl has 19 main checks in the web app. It can: inspect PNG, BMP, GIF, JPEG, and WAV files for hidden data check image and audio bits show image bit planes and audio spectrograms find metadata, readable strings, embedded files, and hidden file data inspect ZIP files and PDF structure inspect ELF and PE binaries unwrap encoded text such as base64 and hex solve several common classical ciphers collect useful findings and detected flags in one results panel There is also an optional local web scanner called Remora. It can crawl a CTF website, inspect pages, scripts, headers, and resources, then send useful findings back to Trawl. How it works Most of the analysis is written in Rust and compiled to WebAssembly. The frontend is built with SvelteKit. For normal file and text analysis, the input stays in your browser instead of being uploaded to a server. No account is needed, and the app can keep working offline after it loads. Remora is separate because website scanning needs network access. It runs locally on your computer and connects to the target you give it. I also wrote the analysis and file parsing code instead of relying on existing analysis libraries. The Rust core uses wasm-bindgen to connect Rust to JavaScript. Why I built it The annoying part of CTF forensics was having lots of separate tools and needing to know which one to use before I even understood the challenge. I wanted something where I could drop in the file first and get a useful starting point. I also added the tour and demo files so someone who has never used Trawl can still open the site and understand what it does. What took the most work A big part of the work was avoiding false positives. A detector that marks everything as suspicious is not useful, so I made test files where I knew what was hidden and clean files where nothing should be found. I also tested the ELF and PE parsers with real binaries and compared results with tools like readelf and objdump . One bug I found was that Trawl correctly detected a flag inside a GIF, but the result was stored in the wrong place, so it never appeared in the UI. That pushed me to test the full path from reading the file to actually showing the result. What I learned I learned a lot about image formats, audio samples, compression, steganography, classical cryptography, binary formats, WebAssembly, browser limits, and local networking. The biggest lesson was that finding the answer in code is only part of making a useful tool. The result also has to be tested, understandable, and easy to find.", "repo": "https://github.com/Yuv1s/Trawl", "demo": "https://trawlctf.vercel.app"}]...
|
[{"post_id": 65607, "ts": "202 [{"post_id": 65607, "ts": "2026-09-10T20:56:28Z", "hours": 3.6467, "text": "Trawl has just been shipped!"}, {"post_id": 61673, "ts": "2026-09-04T18:22:19Z", "hours": 0.6467, "text": "Now live at https://trawlctf.vercel.app"}, {"post_id": 61144, "ts": "2026-09-03T22:15:43Z", "hours": 6.5825, "text": "Reversing was the one category left. Trawl had nothing for it. Everything else was covered by the time the tour shipped: steganography, cryptography (Hill and Playfair joined a few weeks back, along with columnar transposition wide enough that brute force stops working), PDF documents read the same way a ZIP already was, object by object, checked against what the file’s own index claims. Drop a binary, though, and the best Trawl could do was name the format and stop there. I’m not building a decompiler. Ghidra and IDA earned that word over years of real compiler-engineering work, and half a decompiler is worse than none: wrong pseudocode still reads as confident, and confidently wrong is the last thing a forensics tool should ever hand someone. What Trawl does instead is the pass every real session starts with anyway, before a disassembler even opens: the header, the section table, what the binary calls, what it offers, and whether it was actually built with the defenses that matter, NX, ASLR, RELRO, a stack canary, Control Flow Guard. Two formats that don’t agree on anything ELF went first, since it’s most of what a CTF binary actually is. Then PE, the Windows half, which turned out to be a different kind of problem. An ELF section header says outright where its bytes sit in the file. A PE barely says anything that way. It addresses its import and export tables by where they’ll land in memory once the loader gets to them, so reading either one means walking the section table first, just to translate an address nobody gave you a file offset for. The two parsers ended up sharing almost nothing except a type underneath them, built so one panel could read both. Where a protection has no equivalent in the other format, the panel just leaves it out instead of guessing. A PE has nothing RELRO would describe, and showing RELRO: none there would report a defense as missing that the format never offered to begin with. The bug where the layout only worked on files I made up myself Testing this against binaries I built myself went fine, because of course it did. I wrote them to go fine. So I went and found real ones instead. gcc output straight out of WSL: a stripped build, a static build, a shared library. Real Windows system binaries too, notepad.exe and kernel32.dll . I checked every one byte for byte against readelf and objdump until the entry points and export counts lined up exactly. Then I compiled a tiny C++ file. Three lines, a map of vectors, nothing unusual. Its export name came out at 286 characters. That’s what name mangling does to the plainest code without even trying. My import list rendered each name as a small chip, capped with a percentage-based max-width so nothing would run off the page. It did nothing. A grid item won’t shrink below its own content unless you tell it to, and I hadn’t, so the chip just kept going: clipped mid-character, no ellipsis, dragging the whole panel sideways with it. Fine on every file I’d invented. Broken on the first real one I pointed it at. AI helped with the writing and most of the parsing code, same as always. The real time went into finding bytes I hadn’t written myself to test it against, a real compiler, a real linker, a symbol nobody designed to be readable. Testing against your own fixtures only ever proves the code agrees with itself. Next up: Windows registry hives, for tracing which USB stick was plugged in when."}, {"post_id": 58436, "ts": "2026-08-30T21:07:08Z", "hours": 14.1186, "text": "Trawl could find anything. Nobody knew where to start. Trawl has gotten good. It cracks AES by hand, forges JWTs, reads flags out of pixels and cookies and the low bits of a sound file. On the mock CTF site I keep building to break, it clears 24 of 26 now. None of that helps the person who opens it for the first time and sees a grid of two dozen tools and a box that says “drop a file.” What file? They don’t have one. They came to look, and there is nothing to look at. So I built the tour. The tour that drops the file for you Tick “take the tour” and Trawl hands itself a sample image with a flag already hidden in the low bits, runs every tool against it before you have done anything, and then walks you through what each one turned up. The flag it already found. The tool that read it out of the red channel. The one that does not read the message but estimates how much is hidden. Two minutes, no CTF knowledge required, and by the end you have watched the whole thing work on a real answer. Because one demo is not much of a demo, there is a library behind it now. Drop-in files for every tool: a flag in a PNG’s low bits, a flag stuck on after the image ends, a flag in the second frame of a GIF, a flag written into the low bit of every audio sample, a flag that only reads once you subtract one frame from the next. Each one hides its answer somewhere different. A button in the corner opens them any time, so the people who skipped the tour and the people who came back a week later can still poke at something real. The bug where the tool found it and never told anyone The GIF samples embarrassed me. Drop one, and the tool would decode the second frame, find the flag, and then say nothing. The cod-end, the panel where every find is supposed to surface, sat empty. It was not that the flag went unfound. It was found, written down, and filed one level too deep to ever be shown. The panel only reads findings from a file’s children, and a plain GIF has no children, so its own results fell through the floor. A few lines to lift them back up. The kind of bug that passes every test, because the test checks that the flag was found, not that a human would ever see it. AI helped with the writing and the mechanical parts, same as always. The real time went into the gap between “the tool works” and “a stranger can tell that it works,” which turns out to be most of the distance. The feature list still sounds small. A tour, some sample files, a button. But the whole point was to make the thing findable, and none of the finding matters if the first thing you see is a shrug. Next up: the last two flags on that mock site, and maybe a screenshot in the readme now that there is something worth showing."}, {"post_id": 55039, "ts": "2026-08-26T13:54:36Z", "hours": 11.1219, "text": "The scanner connected. That was the easy part. Last time, the whole win was that the scanner connected at all. Trawl spots the local process, the page swaps to a URL box, and it starts crawling. But a scanner that connects and finds nothing is just a slow way to load a webpage. So this time I made it actually find the flags. On the mock CTF site I built last time to be broken, the web scan went from 4 findings to 18. Counting the image tools, the whole thing now gets 23 of the 26. Teaching it to decode, not just fetch A flag is almost never sitting in plain text waiting to be read. It’s base64 hiding in a cookie. It’s hex in a JavaScript variable. It’s a colour written as CSS escape codes, or an array of numbers XORed against a single byte, or an ETag that’s really just base64 printed backwards. So the scanner now tries all of those on everything it pulls down: every page, every script, every response header. It keeps a result only when a decode actually produces a flag, and shuts up otherwise. That last part matters more than it sounds. A tool that reports something on every site is noise, not a finding. One challenge hid an AES key and its payload in an image’s metadata. The rule I keep breaking my own back over is no dependencies, nothing borrowed, so instead of pulling in a crypto library I wrote AES by hand and checked it against the official test vectors. It works. I would not recommend the experience. The bug that made a working scanner look broken For a while every scan felt like it hung. The scanner was fine. localhost was the problem. localhost resolves to the IPv6 address first. My test site only listened on IPv4. Windows takes about two seconds to give up on the dead address before falling back to the one that works, and two seconds across fifteen requests is a scan that looks frozen. The fix was one line: try IPv4 first. The debugging was not one line. Then, the morning I went to cut the release, a routine Rust update added a new lint and broke the build on code I hadn’t touched in weeks. Pinned the version, fixed the lint, shipped. AI helped with the writing and some of the mechanical refactors, but the real time went where it always goes: into the two seconds nobody sees, and the compiler that changed its mind overnight. The feature list sounds small again. Reads a site, decodes what it finds, cracks an image. The list is never the part that takes the week. Next up is JWTs, so the scanner can start forging its way into the challenges it currently just knocks on."}, {"post_id": 52676, "ts": "2026-08-22T22:59:35Z", "hours": 10.2175, "text": "I spent hours making a web scanner not be a web scanner The obvious way to scan a website is to send the URL to a server and let the server do the ugly work. Trawl does not get that luxury. One of the rules I have tried to keep since the first version is that everything happens on your machine . No files uploaded, no URLs sent to me, no remote API quietly doing the interesting part. That became significantly harder when I added web reconnaissance. The scanner that had to stay local Browsers are deliberately terrible at crawling arbitrary websites. CORS, networking restrictions, and a dozen other sensible security decisions get in the way. So I ended up building a small local scanner and shipping it as a GitHub release. Installation is a one-line winget command. Once it is running, Trawl detects it automatically. The interface changes live, asks for a URL, and the scanner starts digging through the site for things that probably should not be public: hidden files, exposed secrets, interesting endpoints, and other CTF-shaped mistakes. Nothing leaves the machine. That sentence took far longer to make true than it looks . AI helped with writing and refactoring parts of it, but most of the time disappeared into figuring out how the browser, local process, networking, detection, and UI should talk to each other without turning Trawl into the server-backed app I specifically did not want to build. So I built a website designed to be broken Testing a recon scanner against random real sites is a terrible test. So I made my own mock CTF site instead. It has challenges from easy through expert, with deliberately hidden files and secrets for Trawl to discover. I now have a controlled target where I know exactly what should be found, which makes false positives and missed findings much harder to hide. I also improved the Vigenère decoder while I was in there. The feature list sounds small: better decoder, local scanner, test site. The amount of plumbing underneath it absolutely was not."}, {"post_id": 49928, "ts": "2026-08-18T21:55:13Z", "hours": 1.0806, "text": "The hard part was knowing when to stop Here is what someone hands you in a competition. NWE2ZDc4Njg1YTMzNzQzMDYxNDg0YTZjNWE1NjM5 Eighty-eight characters of nothing. No hint about what it is or how many times it has been through the wringer. You paste it into Trawl and it comes back: base64: 5a6d78685a33743061484a6c5a56397359586c6c636e4e665a47566c hex: ZmxhZ3t0aHJlZV9sYXllcnNfZGVlcH0= base64: flag{three_layers_deep} Three layers, unwrapped one at a time, and the answer sitting at the bottom. Nobody told it there were three. Nobody told it what any of them were. The new half This is Mantis, the code breaking side of the project, and the first thing I have built that does not need a file at all. Paste a string, get an answer. It is named after the mantis shrimp, which punches hard enough to crack a crab shell and sees colours we do not have the eyes for. Force and perception, which turns out to be the whole job. Decoding was easy. Stopping was not. I expected the tricky part to be writing the decoders. It was not. There are thirteen of them now and most took twenty minutes. The problem is that decoders always succeed. Take the sentence “the quick brown fox jumps over the lazy dog”. Delete the spaces and what you have left is, by pure coincidence, a perfectly legal base64 string. Feed it to a base64 decoder and it will not complain. It will hand you back a paragraph of garbage with total confidence. So a tool that decodes whatever it is given will happily take your answer, turn it into noise, and report that as progress. Mine did exactly that, repeatedly, while I was building it. The fix was to stop asking “can this be decoded” and start asking “did decoding it make things better”. Every layer now has to earn its place. It gets kept because of what fell out of it, never because of how it looked going in. Then I got it wrong the other way Once it was cautious, it became too cautious. Look at that chain again. The middle step decodes to a wall of hex digits. That is not more readable than the base64 above it. It is arguably worse. So my careful new version took one look, decided the second layer was not an improvement, and stopped one step short of the answer every single time. Which is the lesson, really. Getting closer to something does not always look like getting closer. It had to learn to follow a chain to the bottom and judge the destination, not each footstep. Where the catch goes When it does find something, it lands in a panel at the top of the page called the Cod-end. That is the closed end of a trawl net, the bit that drags along behind and where everything you caught ends up. It felt like the right name for the box that holds the answers. What it still cannot do It does not break real encryption, and it never will. If something is properly encrypted, Trawl says so and stops, rather than producing a confident sentence made of nothing. It also cannot solve every classical cipher yet. Two of the harder ones need a much better model of what English looks like than the short word list it currently carries, and I would rather ship the gap than fake it. Next up: hashes."}, {"post_id": 49567, "ts": "2026-08-18T13:25:48Z", "hours": 1.9528, "text": "I cooked my own laptop, then hid a word inside a noise The fans came on around eleven and never stopped. By mid-afternoon my laptop was doing an impression of a hairdryer and the temperature had gone past 100°C, which is where water boils and laptops start making decisions about their own survival. I opened Task Manager expecting a runaway browser tab. Twenty-four copies of my own program. All running. All mine. Every time I wanted to check my work I started a little local server, and every time I finished I told it to stop. It said it stopped. It did not stop. It had a second process doing the real work, and killing the first left the second running happily, forever, burning a core each. They had been stacking up since ten in the morning. The lesson is not “check your processes.” It is that I trusted a success message instead of looking. The program told me what I wanted to hear and I took its word for it, which is a strange mistake to make on a project whose entire premise is not taking things at face value. I check now. Every time. It takes four seconds. Sound has a shape Here is the thing I built this month, and I still think it is the best trick in the whole project. Every sound is a stack of pitches, high and low, shifting over time. Plot pitch going up the page and time going across, and you get a picture of what a noise is actually made of. A flute is a clean line. A cymbal is a smear. Speech is a mess of stripes that a trained eye can almost read. Now run it backwards. Decide what you want that picture to look like. Write a word, say. Then generate the exact noise that would produce it. What comes out is a real audio file. You can play it. It sounds like static, like a radio between stations, and there is nothing in it your ears will ever pick up. Show it to anyone and they hear noise, because it is noise. Look at its shape and the word is just sitting there. I built the part of Trawl that draws that shape, and then I wrote a little tool that goes the other way so I could make my own. I fed it a picture of two words stacked on top of each other. Eight seconds of grinding static came out. I dropped it back into Trawl and the words were there, drawn in sound, perfectly legible. Getting it wrong twice first My first attempt was mush. Grey bands, no letters. The reason is a bit lovely. To read the shape of a sound you have to chop it into short slices and analyse each one, and my slices were wider than the letters. It was like trying to read a book through a window that shows three words at once, smeared together. Fixed by giving each column of the picture more time. The second attempt had bright vertical bars slashed through it. Those were clicks. Thirty separate tones were all changing volume at the exact same instant, and a sharp change in sound is a click, and a click is every pitch at once. It drew a line straight through my picture. Fixed by easing the volume changes instead of stepping them. Same reason a song fades out rather than stopping dead. Both of those are in the code with comments explaining them, mostly so future me does not do it again. The one I refused to build There is a hiding technique called F5 that I cannot reliably detect. The published method for spotting it needs a copy of the original, untouched file to compare against, and I do not have one. Nobody does. That is the point of the puzzle. I could have shipped something that guesses and looks confident about it. Instead the tool shows you the raw numbers and says, plainly, that it does not know. A tool that finds something every time is not a good tool. It is a broken one that happens to be reassuring, and I would rather ship an honest gap than a convincing lie. The image and sound half is done. Codes and ciphers next."}, {"post_id": 49293, "ts": "2026-08-18T00:51:00Z", "hours": 0.4928, "text": "Devlog 4: Trawl has a face Trawl has a logo now, and I like it more than I expected to. The obvious move was a net. I drew several. A mesh narrowing to a cod-end, the side profile of a trawl, a rotated diamond lattice that looked like real netting up close. All fine, all saying nothing. A net tells you where the name came from, which is the least interesting fact about this project. So it is a scan reticle instead. Corner brackets around a grid of dots, one of them lit amber. That is the whole tool in one image. Brackets mean examination and people read them that way without being taught. The grid is whatever Trawl is looking at. The amber dot is the finding. And the amber is load-bearing. In the interface that colour has exactly one job, marking something anomalous, and it turns up nowhere else. No amber buttons, no amber headings. The logo obeys the same rule, so the mark is not decoration. It is a hit. I did ship it invisible for about ten minutes, because currentColor resolves to black once the SVG leaves the app. One amber dot floating in the void. Fixed. Next is Cod-end, phase two, where Cuttlefish stops being PNG-only."}, {"post_id": 49263, "ts": "2026-08-17T23:15:13Z", "hours": 1.1847, "text": "Devlog 3: the PNG half is finished Here is my favourite way to hide a message in a picture, and Trawl can now catch it. A PNG can store its colours as a numbered list. Pixel one uses colour seven, pixel two uses colour twelve, and so on. Nothing in the format stops that list from holding the same colour twice. So if entry 10 and entry 200 are both the same shade of blue, every blue pixel can point at either one. The image on screen is pixel for pixel identical. The file underneath is not. That choice is a hidden bit, and even a small 64 by 64 image gives you about a thousand bytes of them. That was the last thing on my list. PNG support is done. What done means Trawl reads every valid PNG now, including the two kinds it used to refuse outright. It opens compressed comment blocks instead of shrugging at them. It finds text written the Windows way, where every character is followed by an invisible null byte that made my old scanner walk straight past it. And its brute-forcer tries reading hidden bits down the columns as well as along the rows, which doubled the number of combinations from 42 to 84. Sixteen tools, all working on one format properly. That felt worth stopping to notice. The bug where it found two flags and threw them both away I planted a message in a compressed comment and another as wide text, then ran them through. Neither showed up. Both had actually been found. The problem was one line where I merged results: I was taking either the results from the PNG-specific reader or the results from the general one, never both. So the general scanner would find the wide text, hand it over, and the merge step would quietly drop it on the floor. Two correct detectors, one bad if . A related version of the same mistake: I inflate compressed comments now, but the flag scan had already run before that text existed, so nobody ever looked at it. It re-scans after decompressing. The one I got wrong for twenty minutes One of my clean test images started tripping a detector. My first guess was the new interlaced decoder, since that was the newest thing. So I built the same picture again without interlacing and ran it. Same false alarm. Not the decoder. The real cause was my test image itself. The detector works by checking whether pairs of colour values appear equally often, which a hidden message forces and a real photograph has no reason to do. My test image was a smooth gradient, and smooth gradients spread their values so evenly that the pairs come out equal on their own. I had built a control that genuinely looks guilty. I gave it a tone curve, the way a real camera would, and it went quiet. That is the fifth time this project a test image has been the thing that was broken. Next Everything except PNG. GIF and BMP first, since they should light up all sixteen tools the moment they decode. Then extracting files that are hidden inside other files, which Trawl currently finds and then refuses to hand over."}, {"post_id": 49179, "ts": "2026-08-17T20:24:23Z", "hours": 1.7364, "text": "Devlog 2: it found the hidden message, then cut it off mid-sentence You can hide text inside a photo by nudging the colour of individual pixels by one step. The image looks identical to any eye and to most software. The message just sits there, spread across a few thousand pixels, waiting for someone who knows how to look. Trawl is the thing I am building that looks. The good part I hid a note inside a photo of the Eiffel Tower at night and dropped it in. Trawl found it: If you can read this than Trawl was a success! If not then well.. lets just say.. prepare to los Right message, right place, picked out of 42 different ways it could have been hidden. Then it stopped mid-word. That was not a decoding failure. I had written a line months earlier that trimmed the preview to 96 characters, and my note was 155. The tool read every single word and showed me two thirds of one. Somehow more annoying than it failing outright. Fixed, and there is now a button that pulls the whole thing out. The message that was never there An earlier test went the other way. Different image, and Trawl confidently announced it had found BM{GEBF} . Nothing was hidden in that file. Those eight characters turned up by chance inside the image’s compressed data, and my scanner was hunting for that shape anywhere in the file. Give it half a megabyte of near-random bytes and the shape appears on its own eventually. A tool that invents answers is worse than one that finds nothing. Matches now get judged by where they came from, and anything sitting in compressed data gets demoted with the reason shown rather than announced as a discovery. Both bugs had the same cause My test images were fake in a way that mattered. I was generating smooth colour gradients to test against. Real photos are not smooth. They have grain, texture, tiny variations between neighbouring pixels. My detectors passed every test I wrote and then fell over on the first real photograph, three separate times, because the thing I was testing against did not behave like the thing I was testing for. I now write a test that checks the test image before any test that uses it. That one took me embarrassingly long to arrive at. The feature I deleted I built automatic warnings into one of the new tools, then found it flagging a completely clean image. I could have nudged the threshold until the warning went away. But then the number would exist because it made one test pass, not because it meant anything, and it would start guessing again on the next photo. So I deleted the feature. The tool shows you the measurements and makes no accusations. The two tools that do make claims are based on published research from 1999 and 2001. Given an image with a quarter of its pixels carrying hidden data, they estimate 25.0% and 25.9%. Those I trust. Next Reading camera metadata, which is where people hide things when they are not hiding them in the pixels."}, {"post_id": 48664, "ts": "2026-08-17T04:53:48Z", "hours": 2.5947, "text": "Devlog 1: Trawl, and the bug I caught before it cost me a week Trawl is a CTF toolkit that runs in the browser. Drop a file in, it runs every check I’ve written at once, and tells you what looked wrong. Nothing uploads anywhere, because there is no server to upload to. It did not start out this big. The first version was only a steganography tool, because that is the category I keep landing in and the workflow is tedious: exiftool, then strings, then binwalk, then zsteg, then StegSolve, a Java applet from 2011. Five tools, five interfaces, all of them installed before you can look at a single PNG. Plenty of beginners skip forensics entirely for that reason. A couple of weeks in I realized the same complaint covers almost every CTF category, so the scope moved. Trawl is the hub. Cuttlefish is the steganography module inside it, and the only one that exists so far. A trawl is a net you drag through water to see what comes up. Cuttlefish hide by rewriting their own surface, which is what LSB embedding does to an image. What Cuttlefish runs now Eight checks, PNG only: pixel decode with verification, chunk walk, CRC validation, post-IEND data, tEXt/zTXt/iTXt metadata, ASCII strings, flag-shape scan, and an LSB sweep across channel order, bit plane and bit order. In the screenshot one of the eight fired. The sweep pulled testCTF{hello} out of RGB, bit 0, MSB first. One of 42 combinations carried anything readable. The bug I would not have found without testing for it Before writing any analysis I wrote a single test: build a PNG with a known pattern in the low bits, decode it through the browser, check the bits survive. They don’t, by default. Canvas alpha premultiplication and colour management both rewrite pixel values slightly. For ordinary image work nobody notices. For steganography it destroys exactly the data you are looking for, and every detector downstream would have been measuring noise while looking completely functional. The fix is passing colorSpaceConversion: 'none' and premultiplyAlpha: 'none' to createImageBitmap . Cuttlefish now reports the decode step as verified so I can confirm the guarantee held for the file in front of me. Had I built the sweep before checking, I would have spent days debugging math that was already correct. On the Rust The core is Rust compiled to WASM, running in a Web Worker, partly because the sweep is real compute and JavaScript stutters on it, partly because I wanted to learn Rust properly. I wrote the detector logic myself. AI helped me refactor it and add comments, which I am noting because it is true, and because the parts I struggled through are the parts I actually understand now. Next The bit-plane wall: all 8 planes across every channel rendered at once, so an anomalous plane becomes something you see rather than something you brute-force into. Cuttlefish is not finished. The sweep only handles PNG, there is no bit-plane view, and no statistical detection at all yet. What I have proves the pipeline runs end to end on a flag I planted myself, which is a real milestone and also not much more than that. Trawl has exactly one module, which makes “hub” a generous word for it right now."}]...
|
Title: Trawl - CTF Toolkit by @yuv1 | Stardance
D Title: Trawl - CTF Toolkit by @yuv1 | Stardance
Devlogs:
Devlog 1: Trawl, and the bug I caught before it cost me a week Trawl is a CTF toolkit that runs in the browser. Drop a file in, it runs every check I’ve written at once, and tells you what looked wrong. Nothing uploads anywhere, because there is no server to upload to. It did not start out this big. The first version was only a steganography tool, because that is the category I keep landing in and the workflow is tedious: exiftool, then strings, then binwalk, then zsteg, then StegSolve, a Java applet from 2011. Five tools, five interfaces, all of them installed before you can look at a single PNG. Plenty of beginners skip forensics entirely for that reason. A couple of weeks in I realized the same complaint covers almost every CTF category, so the scope moved. Trawl is the hub. Cuttlefish is the steganography module inside it, and the only one that exists so far. A trawl is a net you drag through water to see what comes up. Cuttlefish hide by rewriting their own surface, which is what LSB embedding does to an image. What Cuttlefish runs now Eight checks, PNG only: pixel decode with verification, chunk walk, CRC validation, post-IEND data, tEXt/zTXt/iTXt metadata, ASCII strings, flag-shape scan, and an LSB sweep across channel order, bit plane and bit order. In the screenshot one of the eight fired. The sweep pulled testCTF{hello} out of RGB, bit 0, MSB first. One of 42 combinations carried anything readable. The bug I would not have found without testing for it Before writing any analysis I wrote a single test: build a PNG with a known pattern in the low bits, decode it through the browser, check the bits survive. They don’t, by default. Canvas alpha premultiplication and colour management both rewrite pixel values slightly. For ordinary image work nobody notices. For steganography it destroys exactly the data you are looking for, and every detector downstream would have been measuring noise while looking completely functional. The fix is passing colorSpaceConversion: 'none' and premultiplyAlpha: 'none' to createImageBitmap . Cuttlefish now reports the decode step as verified so I can confirm the guarantee held for the file in front of me. Had I built the sweep before checking, I would have spent days debugging math that was already correct. On the Rust The core is Rust compiled to WASM, running in a Web Worker, partly because the sweep is real compute and JavaScript stutters on it, partly because I wanted to learn Rust properly. I wrote the detector logic myself. AI helped me refactor it and add comments, which I am noting because it is true, and because the parts I struggled through are the parts I actually understand now. Next The bit-plane wall: all 8 planes across every channel rendered at once, so an anomalous plane becomes something you see rather than something you brute-force into. Cuttlefish is not finished. The sweep only handles PNG, there is no bit-plane view, and no statistical detection at all yet. What I have proves the pipeline runs end to end on a flag I planted myself, which is a real milestone and also not much more than that. Trawl has exactly one module, which makes “hub” a generous word for it right now.
Devlog 2: it found the hidden message, then cut it off mid-sentence You can hide text inside a photo by nudging the colour of individual pixels by one step. The image looks identical to any eye and to most software. The message just sits there, spread across a few thousand pixels, waiting for someone who knows how to look. Trawl is the thing I am building that looks. The good part I hid a note inside a photo of the Eiffel Tower at night and dropped it in. Trawl found it: If you can read this than Trawl was a success! If not then well.. lets just say.. prepare to los Right message, right place, picked out of 42 different ways it could have been hidden. Then it stopped mid-word. That was not a decoding failure. I had written a line months earlier that trimmed the preview to 96 characters, and my note was 155. The tool read every single word and showed me two thirds of one. Somehow more annoying than it failing outright. Fixed, and there is now a button that pulls the whole thing out. The message that was never there An earlier test went the other way. Different image, and Trawl confidently announced it had found BM{GEBF} . Nothing was hidden in that file. Those eight characters turned up by chance inside the image’s compressed data, and my scanner was hunting for that shape anywhere in the file. Give it half a megabyte of near-random bytes and the shape appears on its own eventually. A tool that invents answers is worse than one that finds nothing. Matches now get judged by where they came from, and anything sitting in compressed data gets demoted with the reason shown rather than announced as a discovery. Both bugs had the same cause My test images were fake in a way that mattered. I was generating smooth colour gradients to test against. Real photos are not smooth. They have grain, texture, tiny variations between neighbouring pixels. My detectors passed every test I wrote and then fell over on the first real photograph, three separate times, because the thing I was testing against did not behave like the thing I was testing for. I now write a test that checks the test image before any test that uses it. That one took me embarrassingly long to arrive at. The feature I deleted I built automatic warnings into one of the new tools, then found it flagging a completely clean image. I could have nudged the threshold until the warning went away. But then the number would exist because it made one test pass, not because it meant anything, and it would start guessing again on the next photo. So I deleted the feature. The tool shows you the measurements and makes no accusations. The two tools that do make claims are based on published research from 1999 and 2001. Given an image with a quarter of its pixels carrying hidden data, they estimate 25.0% and 25.9%. Those I trust. Next Reading camera metadata, which is where people hide things when they are not hiding them in the pixels.
Devlog 3: the PNG half is finished Here is my favourite way to hide a message in a picture, and Trawl can now catch it. A PNG can store its colours as a numbered list. Pixel one uses colour seven, pixel two uses colour twelve, and so on. Nothing in the format stops that list from holding the same colour twice. So if entry 10 and entry 200 are both the same shade of blue, every blue pixel can point at either one. The image on screen is pixel for pixel identical. The file underneath is not. That choice is a hidden bit, and even a small 64 by 64 image gives you about a thousand bytes of them. That was the last thing on my list. PNG support is done. What done means Trawl reads every valid PNG now, including the two kinds it used to refuse outright. It opens compressed comment blocks instead of shrugging at them. It finds text written the Windows way, where every character is followed by an invisible null byte that made my old scanner walk straight past it. And its brute-forcer tries reading hidden bits down the columns as well as along the rows, which doubled the number of combinations from 42 to 84. Sixteen tools, all working on one format properly. That felt worth stopping to notice. The bug where it found two flags and threw them both away I planted a message in a compressed comment and another as wide text, then ran them through. Neither showed up. Both had actually been found. The problem was one line where I merged results: I was taking either the results from the PNG-specific reader or the results from the general one, never both. So the general scanner would find the wide text, hand it over, and the merge step would quietly drop it on the floor. Two correct detectors, one bad if . A related version of the same mistake: I inflate compressed comments now, but the flag scan had already run before that text existed, so nobody ever looked at it. It re-scans after decompressing. The one I got wrong for twenty minutes One of my clean test images started tripping a detector. My first guess was the new interlaced decoder, since that was the newest thing. So I built the same picture again without interlacing and ran it. Same false alarm. Not the decoder. The real cause was my test image itself. The detector works by checking whether pairs of colour values appear equally often, which a hidden message forces and a real photograph has no reason to do. My test image was a smooth gradient, and smooth gradients spread their values so evenly that the pairs come out equal on their own. I had built a control that genuinely looks guilty. I gave it a tone curve, the way a real camera would, and it went quiet. That is the fifth time this project a test image has been the thing that was broken. Next Everything except PNG. GIF and BMP first, since they should light up all sixteen tools the moment they decode. Then extracting files that are hidden inside other files, which Trawl currently finds and then refuses to hand over.
Devlog 4: Trawl has a face Trawl has a logo now, and I like it more than I expected to. The obvious move was a net. I drew several. A mesh narrowing to a cod-end, the side profile of a trawl, a rotated diamond lattice that looked like real netting up close. All fine, all saying nothing. A net tells you where the name came from, which is the least interesting fact about this project. So it is a scan reticle instead. Corner brackets around a grid of dots, one of them lit amber. That is the whole tool in one image. Brackets mean examination and people read them that way without being taught. The grid is whatever Trawl is looking at. The amber dot is the finding. And the amber is load-bearing. In the interface that colour has exactly one job, marking something anomalous, and it turns up nowhere else. No amber buttons, no amber headings. The logo obeys the same rule, so the mark is not decoration. It is a hit. I did ship it invisible for about ten minutes, because currentColor resolves to black once the SVG leaves the app. One amber dot floating in the void. Fixed. Next is Cod-end, phase two, where Cuttlefish stops being PNG-only.
I cooked my own laptop, then hid a word inside a noise The fans came on around eleven and never stopped. By mid-afternoon my laptop was doing an impression of a hairdryer and the temperature had gone past 100°C, which is where water boils and laptops start making decisions about their own survival. I opened Task Manager expecting a runaway browser tab. Twenty-four copies of my own program. All running. All mine. Every time I wanted to check my work I started a little local server, and every time I finished I told it to stop. It said it stopped. It did not stop. It had a second process doing the real work, and killing the first left the second running happily, forever, burning a core each. They had been stacking up since ten in the morning. The lesson is not “check your processes.” It is that I trusted a success message instead of looking. The program told me what I wanted to hear and I took its word for it, which is a strange mistake to make on a project whose entire premise is not taking things at face value. I check now. Every time. It takes four seconds. Sound has a shape Here is the thing I built this month, and I still think it is the best trick in the whole project. Every sound is a stack of pitches, high and low, shifting over time. Plot pitch going up the page and time going across, and you get a picture of what a noise is actually made of. A flute is a clean line. A cymbal is a smear. Speech is a mess of stripes that a trained eye can almost read. Now run it backwards. Decide what you want that picture to look like. Write a word, say. Then generate the exact noise that would produce it. What comes out is a real audio file. You can play it. It sounds like static, like a radio between stations, and there is nothing in it your ears will ever pick up. Show it to anyone and they hear noise, because it is noise. Look at its shape and the word is just sitting there. I built the part of Trawl that draws that shape, and then I wrote a little tool that goes the other way so I could make my own. I fed it a picture of two words stacked on top of each other. Eight seconds of grinding static came out. I dropped it back into Trawl and the words were there, drawn in sound, perfectly legible. Getting it wrong twice first My first attempt was mush. Grey bands, no letters. The reason is a bit lovely. To read the shape of a sound you have to chop it into short slices and analyse each one, and my slices were wider than the letters. It was like trying to read a book through a window that shows three words at once, smeared together. Fixed by giving each column of the picture more time. The second attempt had bright vertical bars slashed through it. Those were clicks. Thirty separate tones were all changing volume at the exact same instant, and a sharp change in sound is a click, and a click is every pitch at once. It drew a line straight through my picture. Fixed by easing the volume changes instead of stepping them. Same reason a song fades out rather than stopping dead. Both of those are in the code with comments explaining them, mostly so future me does not do it again. The one I refused to build There is a hiding technique called F5 that I cannot reliably detect. The published method for spotting it needs a copy of the original, untouched file to compare against, and I do not have one. Nobody does. That is the point of the puzzle. I could have shipped something that guesses and looks confident about it. Instead the tool shows you the raw numbers and says, plainly, that it does not know. A tool that finds something every time is not a good tool. It is a broken one that happens to be reassuring, and I would rather ship an honest gap than a convincing lie. The image and sound half is done. Codes and ciphers next.
The hard part was knowing when to stop Here is what someone hands you in a competition. NWE2ZDc4Njg1YTMzNzQzMDYxNDg0YTZjNWE1NjM5 Eighty-eight characters of nothing. No hint about what it is or how many times it has been through the wringer. You paste it into Trawl and it comes back: base64: 5a6d78685a33743061484a6c5a56397359586c6c636e4e665a47566c hex: ZmxhZ3t0aHJlZV9sYXllcnNfZGVlcH0= base64: flag{three_layers_deep} Three layers, unwrapped one at a time, and the answer sitting at the bottom. Nobody told it there were three. Nobody told it what any of them were. The new half This is Mantis, the code breaking side of the project, and the first thing I have built that does not need a file at all. Paste a string, get an answer. It is named after the mantis shrimp, which punches hard enough to crack a crab shell and sees colours we do not have the eyes for. Force and perception, which turns out to be the whole job. Decoding was easy. Stopping was not. I expected the tricky part to be writing the decoders. It was not. There are thirteen of them now and most took twenty minutes. The problem is that decoders always succeed. Take the sentence “the quick brown fox jumps over the lazy dog”. Delete the spaces and what you have left is, by pure coincidence, a perfectly legal base64 string. Feed it to a base64 decoder and it will not complain. It will hand you back a paragraph of garbage with total confidence. So a tool that decodes whatever it is given will happily take your answer, turn it into noise, and report that as progress. Mine did exactly that, repeatedly, while I was building it. The fix was to stop asking “can this be decoded” and start asking “did decoding it make things better”. Every layer now has to earn its place. It gets kept because of what fell out of it, never because of how it looked going in. Then I got it wrong the other way Once it was cautious, it became too cautious. Look at that chain again. The middle step decodes to a wall of hex digits. That is not more readable than the base64 above it. It is arguably worse. So my careful new version took one look, decided the second layer was not an improvement, and stopped one step short of the answer every single time. Which is the lesson, really. Getting closer to something does not always look like getting closer. It had to learn to follow a chain to the bottom and judge the destination, not each footstep. Where the catch goes When it does find something, it lands in a panel at the top of the page called the Cod-end. That is the closed end of a trawl net, the bit that drags along behind and where everything you caught ends up. It felt like the right name for the box that holds the answers. What it still cannot do It does not break real encryption, and it never will. If something is properly encrypted, Trawl says so and stops, rather than producing a confident sentence made of nothing. It also cannot solve every classical cipher yet. Two of the harder ones need a much better model of what English looks like than the short word list it currently carries, and I would rather ship the gap than fake it. Next up: hashes.
I spent hours making a web scanner not be a web scanner The obvious way to scan a website is to send the URL to a server and let the server do the ugly work. Trawl does not get that luxury. One of the rules I have tried to keep since the first version is that everything happens on your machine . No files uploaded, no URLs sent to me, no remote API quietly doing the interesting part. That became significantly harder when I added web reconnaissance. The scanner that had to stay local Browsers are deliberately terrible at crawling arbitrary websites. CORS, networking restrictions, and a dozen other sensible security decisions get in the way. So I ended up building a small local scanner and shipping it as a GitHub release. Installation is a one-line winget command. Once it is running, Trawl detects it automatically. The interface changes live, asks for a URL, and the scanner starts digging through the site for things that probably should not be public: hidden files, exposed secrets, interesting endpoints, and other CTF-shaped mistakes. Nothing leaves the machine. That sentence took far longer to make true than it looks . AI helped with writing and refactoring parts of it, but most of the time disappeared into figuring out how the browser, local process, networking, detection, and UI should talk to each other without turning Trawl into the server-backed app I specifically did not want to build. So I built a website designed to be broken Testing a recon scanner against random real sites is a terrible test. So I made my own mock CTF site instead. It has challenges from easy through expert, with deliberately hidden files and secrets for Trawl to discover. I now have a controlled target where I know exactly what should be found, which makes false positives and missed findings much harder to hide. I also improved the Vigenère decoder while I was in there. The feature list sounds small: better decoder, local scanner, test site. The amount of plumbing underneath it absolutely was not.
The scanner connected. That was the easy part. Last time, the whole win was that the scanner connected at all. Trawl spots the local process, the page swaps to a URL box, and it starts crawling. But a scanner that connects and finds nothing is just a slow way to load a webpage. So this time I made it actually find the flags. On the mock CTF site I built last time to be broken, the web scan went from 4 findings to 18. Counting the image tools, the whole thing now gets 23 of the 26. Teaching it to decode, not just fetch A flag is almost never sitting in plain text waiting to be read. It’s base64 hiding in a cookie. It’s hex in a JavaScript variable. It’s a colour written as CSS escape codes, or an array of numbers XORed against a single byte, or an ETag that’s really just base64 printed backwards. So the scanner now tries all of those on everything it pulls down: every page, every script, every response header. It keeps a result only when a decode actually produces a flag, and shuts up otherwise. That last part matters more than it sounds. A tool that reports something on every site is noise, not a finding. One challenge hid an AES key and its payload in an image’s metadata. The rule I keep breaking my own back over is no dependencies, nothing borrowed, so instead of pulling in a crypto library I wrote AES by hand and checked it against the official test vectors. It works. I would not recommend the experience. The bug that made a working scanner look broken For a while every scan felt like it hung. The scanner was fine. localhost was the problem. localhost resolves to the IPv6 address first. My test site only listened on IPv4. Windows takes about two seconds to give up on the dead address before falling back to the one that works, and two seconds across fifteen requests is a scan that looks frozen. The fix was one line: try IPv4 first. The debugging was not one line. Then, the morning I went to cut the release, a routine Rust update added a new lint and broke the build on code I hadn’t touched in weeks. Pinned the version, fixed the lint, shipped. AI helped with the writing and some of the mechanical refactors, but the real time went where it always goes: into the two seconds nobody sees, and the compiler that changed its mind overnight. The feature list sounds small again. Reads a site, decodes what it finds, cracks an image. The list is never the part that takes the week. Next up is JWTs, so the scanner can start forging its way into the challenges it currently just knocks on.
Trawl could find anything. Nobody knew where to start. Trawl has gotten good. It cracks AES by hand, forges JWTs, reads flags out of pixels and cookies and the low bits of a sound file. On the mock CTF site I keep building to break, it clears 24 of 26 now. None of that helps the person who opens it for the first time and sees a grid of two dozen tools and a box that says “drop a file.” What file? They don’t have one. They came to look, and there is nothing to look at. So I built the tour. The tour that drops the file for you Tick “take the tour” and Trawl hands itself a sample image with a flag already hidden in the low bits, runs every tool against it before you have done anything, and then walks you through what each one turned up. The flag it already found. The tool that read it out of the red channel. The one that does not read the message but estimates how much is hidden. Two minutes, no CTF knowledge required, and by the end you have watched the whole thing work on a real answer. Because one demo is not much of a demo, there is a library behind it now. Drop-in files for every tool: a flag in a PNG’s low bits, a flag stuck on after the image ends, a flag in the second frame of a GIF, a flag written into the low bit of every audio sample, a flag that only reads once you subtract one frame from the next. Each one hides its answer somewhere different. A button in the corner opens them any time, so the people who skipped the tour and the people who came back a week later can still poke at something real. The bug where the tool found it and never told anyone The GIF samples embarrassed me. Drop one, and the tool would decode the second frame, find the flag, and then say nothing. The cod-end, the panel where every find is supposed to surface, sat empty. It was not that the flag went unfound. It was found, written down, and filed one level too deep to ever be shown. The panel only reads findings from a file’s children, and a plain GIF has no children, so its own results fell through the floor. A few lines to lift them back up. The kind of bug that passes every test, because the test checks that the flag was found, not that a human would ever see it. AI helped with the writing and the mechanical parts, same as always. The real time went into the gap between “the tool works” and “a stranger can tell that it works,” which turns out to be most of the distance. The feature list still sounds small. A tour, some sample files, a button. But the whole point was to make the thing findable, and none of the finding matters if the first thing you see is a shrug. Next up: the last two flags on that mock site, and maybe a screenshot in the readme now that there is something worth showing.
Reversing was the one category left. Trawl had nothing for it. Everything else was covered by the time the tour shipped: steganography, cryptography (Hill and Playfair joined a few weeks back, along with columnar transposition wide enough that brute force stops working), PDF documents read the same way a ZIP already was, object by object, checked against what the file’s own index claims. Drop a binary, though, and the best Trawl could do was name the format and stop there. I’m not building a decompiler. Ghidra and IDA earned that word over years of real compiler-engineering work, and half a decompiler is worse than none: wrong pseudocode still reads as confident, and confidently wrong is the last thing a forensics tool should ever hand someone. What Trawl does instead is the pass every real session starts with anyway, before a disassembler even opens: the header, the section table, what the binary calls, what it offers, and whether it was actually built with the defenses that matter, NX, ASLR, RELRO, a stack canary, Control Flow Guard. Two formats that don’t agree on anything ELF went first, since it’s most of what a CTF binary actually is. Then PE, the Windows half, which turned out to be a different kind of problem. An ELF section header says outright where its bytes sit in the file. A PE barely says anything that way. It addresses its import and export tables by where they’ll land in memory once the loader gets to them, so reading either one means walking the section table first, just to translate an address nobody gave you a file offset for. The two parsers ended up sharing almost nothing except a type underneath them, built so one panel could read both. Where a protection has no equivalent in the other format, the panel just leaves it out instead of guessing. A PE has nothing RELRO would describe, and showing RELRO: none there would report a defense as missing that the format never offered to begin with. The bug where the layout only worked on files I made up myself Testing this against binaries I built myself went fine, because of course it did. I wrote them to go fine. So I went and found real ones instead. gcc output straight out of WSL: a stripped build, a static build, a shared library. Real Windows system binaries too, notepad.exe and kernel32.dll . I checked every one byte for byte against readelf and objdump until the entry points and export counts lined up exactly. Then I compiled a tiny C++ file. Three lines, a map of vectors, nothing unusual. Its export name came out at 286 characters. That’s what name mangling does to the plainest code without even trying. My import list rendered each name as a small chip, capped with a percentage-based max-width so nothing would run off the page. It did nothing. A grid item won’t shrink below its own content unless you tell it to, and I hadn’t, so the chip just kept going: clipped mid-character, no ellipsis, dragging the whole panel sideways with it. Fine on every file I’d invented. Broken on the first real one I pointed it at. AI helped with the writing and most of the parsing code, same as always. The real time went into finding bytes I hadn’t written myself to test it against, a real compiler, a real linker, a symbol nobody designed to be readable. Testing against your own fixtures only ever proves the code agrees with itself. Next up: Windows registry hives, for tracing which USB stick was plugged in when.
Now live at https://trawlctf.vercel.app
Trawl has just been shipped!
Ships:
Trawl Trawl is a CTF toolkit for checking suspicious files, encoded text, binaries, and challenge websites from one place. In a CTF, you often get an image, audio file, string, or binary and have to figure out what is hidden inside it. Usually that means opening a bunch of different tools and already knowing what to try. Trawl tries to make that easier. You give it the challenge, and it runs checks that make sense for that input. Try it Live: trawlctf.vercel.app Source: github.com/Yuv1s/Trawl The easiest way to test it: Open the site. Click Tour . Trawl loads a sample file with a hidden flag. Watch the checks run and see what finds it. There are also more sample files under Demos , so you do not need your own CTF challenge. What it can do Trawl has 19 main checks in the web app. It can: inspect PNG, BMP, GIF, JPEG, and WAV files for hidden data check image and audio bits show image bit planes and audio spectrograms find metadata, readable strings, embedded files, and hidden file data inspect ZIP files and PDF structure inspect ELF and PE binaries unwrap encoded text such as base64 and hex solve several common classical ciphers collect useful findings and detected flags in one results panel There is also an optional local web scanner called Remora. It can crawl a CTF website, inspect pages, scripts, headers, and resources, then send useful findings back to Trawl. How it works Most of the analysis is written in Rust and compiled to WebAssembly. The frontend is built with SvelteKit. For normal file and text analysis, the input stays in your browser instead of being uploaded to a server. No account is needed, and the app can keep working offline after it loads. Remora is separate because website scanning needs network access. It runs locally on your computer and connects to the target you give it. I also wrote the analysis and file parsing code instead of relying on existing analysis libraries. The Rust core uses wasm-bindgen to connect Rust to JavaScript. Why I built it The annoying part of CTF forensics was having lots of separate tools and needing to know which one to use before I even understood the challenge. I wanted something where I could drop in the file first and get a useful starting point. I also added the tour and demo files so someone who has never used Trawl can still open the site and understand what it does. What took the most work A big part of the work was avoiding false positives. A detector that marks everything as suspicious is not useful, so I made test files where I knew what was hidden and clean files where nothing should be found. I also tested the ELF and PE parsers with real binaries and compared results with tools like readelf and objdump . One bug I found was that Trawl correctly detected a flag inside a GIF, but the result was stored in the wrong place, so it never appeared in the UI. That pushed me to test the full path from reading the file to actually showing the result. What I learned I learned a lot about image formats, audio samples, compression, steganography, classical cryptography, binary formats, WebAssembly, browser limits, and local networking. The biggest lesson was that finding the answer in code is only part of making a useful tool. The result also has to be tested, understandable, and easy to find....
|
1792878662.1165133
|
1793742662.1165133
|
|
29476
|
O.T.I.S by @Sharkle | Stardance
|
Sharkle
|
0
|
55.42
|
0
|
[]
|
[{"post_id": 65062, "ts": "202 [{"post_id": 65062, "ts": "2026-09-09T22:16:42Z", "hours": 9.0675, "text": "DEVLOG #13 What I did For this devlog, I started working on the web app for Otis. I want it to have controls that allow you to manually control him, as well as a button/textbox for AI questions. I was able to make a simple one with Tkinter, but decided to scrap that idea and go with a web server made with CSS and HTML. I then paused that and began working on the microphone feature, since I felt like that was much more important compared to the web server. Challenges Creating the app I initially wanted to create the app with Tkinter, as I had seen others use it and it did not seem too hard. So I began programming it with that. I made a simple window with 7buttons (4 for movement and 3 for AI use). But after realizing that I would not be able to control the ESP with Tkinter, I had to look elsewhere. This is when I realized I could make an ESP32 web server and upload the HTML code to it. This would allow me to create a local web server with a GUI that I could interact with. Working with the microphone After working on the web server, I decided that getting the microphone was a bigger priority for me, so I pivoted and began working on that. I looked at the Seeed Studio docs for microphone use and was able to create some code that would detect and package audio samples. I plan to use this with the Python script to transcribe it locally. The problem is that it is not working, and I have not yet found a solution. This all feels really sketchy, and I don’t expect it to work immediately, so wish me luck. What is next I don’t have a lot of time left, and I have yet to actually put any of the hardware together. I will likely try to 3d print the parts and begin putting stuff together by the end of next week. I will also continue working on the microphone."}, {"post_id": 56256, "ts": "2026-08-27T22:56:10Z", "hours": 8.7339, "text": "DEVLOG #12 What I did I know this is a lot of time for a single devlog, so I will try to post them more often moving forward. First, I worked on allowing the AI to control the movement of the treads. My first Idea was to create a JSON schema with all 4 directions that the AI could enter values into. The values would dictate the time (in milliseconds) for which the action should be executed. Initially, I decided the 4 directions should be forward, backward, left, and right. But I knew that this would not work, since the tank treads can really only move forward and backward, as well as turn. So I then decided to replace the directions with “Right tread forward”, “Left tread forward”, “Right tread backward”, and “Left tread backward”. I decided on this because I felt that it would allow the AI to reason through my commands, which would allow for much more abstract movement. But the model was not smart enough to map out its movements, and I didn’t really have any other ideas for movement except for forward, backward, and spinning. But that gave me the idea to just use those elements in the JSON scheme. So I set the directions to “forward”, “backward”, “spin left”, and “spin right”. This way, the AI would be able to move exactly how I wanted it to move, without overcomplicating the whole thing, giving me more accurate results. After this, I began working on the APP for OTIS’s controller. I have not decided on a layout, but I do know I want buttons for the 4 directions, a chat box, and a button to send voice commands and photos. Challenges 422 Unprocessable Content So while trying to find a way to get the AI to respond as JSON, I remembered Ollama allows you to send format requests as part of the API POST request to the AI. So after reading the docs, I was able to whip up a simple JSON format using Pydantic and BaseModel with the 4 directions. But when I tried to send the request, I kept getting the 422 error response code. So then I tried a bunch of different stuff, like removing the requirements and removing the nested JSON with the format data. But none of that worked. That’s when I did some research on the docs, and I found that it was the Pydantic JSON class that was causing all the problems. You see, Pydantic is used to check whether incoming data is formatted properly. So when I used it to create a JSON schema, it would constantly look for that data from the Arduino, which it wouldn’t find. This caused the 422 error. So I removed the class and created a JSON schema as a regular variable, and this solved the issue What is next The next thing on my agenda is going to be to create the OTIS app that will allow me to manually control OTIS like a mini rover. I am currently using Tkinter to create the GUI, and will likely use an ESP web server to allow the GUI to interact with the Arduino. Thank you."}, {"post_id": 52405, "ts": "2026-08-22T15:11:12Z", "hours": 5.0672, "text": "DEVLOG #10 What I did In this devlog, I really just updated some of the things I had already implemented. First, I remodeled the wheels from gears to regular smooth wheels. This is because I had the idea of using those silicone wristbands as the tank treads instead of timing belts. This would not only be more accessible, but it would also make OTIS much more customizable and, in my opinion, look much better. This is because the silicone bands are thicker than the timing belts, which means the tank treads are larger. I also installed another AI model, qwen3-VL:4b, because I believed it would have better image analysis. I tested out all the models to find the best one, and I think I will use qwen3-vl:4b for this project, as it was able to recognize pictures and follow instructions more accurately than Llava. Lastly, while testing the models, I realized the prompting was a bit tedious when using the camera, since I would have to take a photo each time I prompted the AI. So I revised the code so that it would ask if you wanted to take a photo. If you say “photo”, it will ask you to position the camera and send the prompt. If you don’t want to take a photo, you just put the prompt in the first question, and it will default to no-photo mode for that prompt. Challenges Modeling the wheels This wasn’t really one large problem, more so multiple smaller ones. You see, I had already completed the 3d model with the gears instead of the wheel. This meant that changing the wheels would alter the whole model. For this reason, I was contemplating whether this would be the right choice, as I would also have to fix the animation. But I decided to do it anyway. The main problem was that the wheels have a much larger diameter than the gears. So if I were to just replace them, it would look extremely disproportionate. So, I had to remodel the servo slot and the front axles by placing them closer together and moving them up. Once I completed this, I had to redo the whole animation because the old one did not fit the new wheels well. But after all this, I was able to reupload the new files to the GitHub repo and begin fixing the code. What is next The next thing I am going to do is test out the tool. I wrote up a simple tool in Python that would allow the AI to send data that controls the servos, but I have not tested it yet, which is what I will be doing next. I will also likely wire up the servos and continue testing other models to try to find a good setup. Thank you."}, {"post_id": 49979, "ts": "2026-08-19T00:14:54Z", "hours": 6.5842, "text": "DEVLOG #10 What I did So for this devlog, I mainly spent all of my time working on the camera. I looked up an example script from the Seeed Studio docs to learn about the main system. I then spent quite some time working on a way to convert the picture into a format that I could place into the JSON. I also shifted the old code a bit to better fit the way I wanted to use the camera. In the end, I was able to get the camera working and send a photo to the AI to reference in its response. Challenges Getting the conversion of the photo So I went into this knowing literally nothing about how cameras like this one worked. So I started with the docs and was able to write the code that took the photos. Although this was a bit tedious, the main challenge came when I tried to convert the photos to a format that was compatible with the AI. You see, when you take the photo, it is saved as a frame buffer JPEG. But I needed to convert it to Base64, since that is what Ollama uses when integrating images in the POST request. So I did some digging and came across mbedtls_base64_encode() from the mbedtls/base64.h library. This was really annoying to work with because there are a lot of required parameters, and I didn’t know what any of them meant, let alone how to use my code with them. After an hour of searching, I asked Gemini what each of the parameters meant and what to include in them, and I was able to get the code completed. But when I tried to run it, my ESP kept rebooting. After some more research, I learned that the cause was insufficient memory to store the Base64 string. I was able to fix this by adding if statements as well as memset() to manage the memory space better. After this, I added some code so that it would work regardless of whether the camera was connected. What is next The thing I am going to work on next is to create a way for the AI to use the servos. I already started working on a tool to handle that, but I have not tested it yet. I am also thinking about remodeling the wheels because I noticed that rubber wrist bands might be a better alternative to the timing belts. Thanks."}, {"post_id": 48409, "ts": "2026-08-16T18:57:43Z", "hours": 1.9836, "text": "DEVLOG #9 What I did For this block, I fixed minor details to make the prompting more seamless. First, I fixed the deserialization so that only the response would be printed. I also used Serial.readString() so the user can send multiple prompts without having to reupload the code with a new prompt Challenges Getting the Deserialization and print to work So this was a really annoying problem that I should not have had this much trouble with. When you receive the response from the AI, it comes back as JSON, with the response as well as other information like the date created, context, etc. I only wanted to print the response, so I tried using deserializeJson() from the ArduinoJson.h library. But for some reason, I kept getting null when trying to print the response element. I tried messing around with the data types, switching between string and const char*, but those didn’t work. I also tried basing my code off of an example from the ArduinoJson website, but it still would not work. Then I created an if statement that checked if there was an element in the JSON labeled response. This returned false, which meant that the data was not deserializing properly. At that point, I felt pretty lost. But then I thought of deserializing the JSON in the Python script and then sending just the response. So I looked into how to deserialize JSON strings through Python, and I came across json.loads() from the json library. There are two main versions of this method: json.loads() and json.load() . .load deserializes a file, while .loads deserializes a string. Because the response from the AI came back as a string, I was able to use the latter to separate the response from the rest of the data, which I was then able to send back and print successfully. What is next Now that I pretty much have the prompting working, my next course of action is likely going to be to figure out how to use the camera and send the feed to the AI. This will definitely be challenging, as I have no idea how I want this part of the project to work. Thank you."}, {"post_id": 46627, "ts": "2026-08-14T00:44:41Z", "hours": 7.3786, "text": "DEVLOG #8 ##What I did These 7 hours, I basically spent trying to get the HTTP POST request to work. I had a lot of trouble when trying to get it to work, but I was able to find a way to get the prompt to the AI and the response back to the ESP. ##Challenges ####Getting the POST to work Initially, I had decided to scrap the MCP idea and to just send an HTTP request directly to Ollama. This plan should have worked, but I could not get it to function. For some reason, I kept receiving a response code of -1 when I tried to send the request. This code means the connection was refused, and this could happen for a multitude of reasons. After some simple troubleshooting, I deduced that the problem was likely related to my firewall. You see, Ollama runs on port 11434, which is protected by the firewall. It also only listens to 127.0.0.1, which meant that I could not send data from the ESP32. To fix the IP problem, I tried setting an environment variable to allow it to listen on 0.0.0.0, but this didn’t work. Then I tried exposing port 11434 on my firewall to the IP of my ESP32, but that was also unsuccessful. I even tried connecting the ESP and my computer to my phone’s hotspot, but that also yielded -1. After consulting Google’s Gemini for any other solutions, I decided that I should just create a Python file that would handle all the requests. So I created a file, installed FastAPI with Uvicorn, and used those libraries along with requests to send an API request to Ollama’s REST API, which I could then return to the ESP. The ESP sent the prompt to the Python script via HTTPClient and ArduinoJSON. After creating all of this, I was finally able to get a response from the AI in serialized JSON, and I am currently trying to figure out why I can’t deserialize it and print it. ##What is next As I mentioned above, I will continue trying to find a way to print only the response and to send prompts seamlessly. This part of the project was definitely very frustrating, but I am so happy I was able to make it possible. Thanks."}, {"post_id": 43026, "ts": "2026-08-08T02:24:08Z", "hours": 2.2417, "text": "DEVLOG #7 What I did So this whole time, I basically spent trying to get the web server of the ESP32 to work, which I had a hard time understanding. I also tried using the Python script to send data to the web server, but that doesn’t seem to work either. So I began setting up the AI model with Open Web UI and Docker. I decided that I will probably scrap the whole MCP plan since i’m pretty sure I can just send and receive data as HTTP requests directly between Open Web UI and the ESP32 as JSON. Challenges Getting the data to send The main problem I have with all of this is that I don’t know what I’m doing a lot of the time. Even though I have worked with Arduino, I have never worked with an ESP32, and I don’t know how I can utilize the wifi to send and receive data. I tried understanding an example script for a basic web server that is built into the IDE, but I couldn’t wrap my head around the part where you create the server. I was able to get the ESP32 to connect to my WiFi, though, which I guess is progress. I also tried sending a POST request from the Python script, but I don’t think that is going to work since I have no idea how to get the ESP32 to receive the data. It’s even harder to find answers to these problems since I don’t even know what to look for. I decided that I should scrap the MCP plan, since I could just read JSON data that the ESP32 can receive through a GET request. In conclusion, I just ran in circles trying different things that all yielded the same results. Getting the AI to work For some reason, the model that I decided to use can only complete tasks, which are defined by a set of tools. I am able to use it in the CLI just fine, but this problem occurs when I use the model in Open Web UI. I’m using Qwen3-vl:8b because it can supposedly analyze images, though I will likely try another model if this persists. What is next The next thing is likely going to be to try other AI models to see if I can get one to work. I will also do more research on an alternative to creating a web server. This project has been very tedious, so wish me luck."}, {"post_id": 42189, "ts": "2026-08-06T20:03:58Z", "hours": 2.2336, "text": "DEVLOG #6 What I did So today, I decided that I should finish up my design before I apply to get funded. But there were a few things that I had yet to do. First, I created the top panel for OTIS. I don’t exactly know why I put it off until now, but I made a simple design that will just sit on top and be held in place by little stoppers. I also did a bit of research beforehand on what battery i should purchase, but a lot of them are too big. So I also increased the size of OTIS from 77mmx77mmx77mm to 80x80x78.5 (78.5 because the lid is 1.5 mm thick). Lastly, I went and updated the assembly video and drawing, and uploaded all the changed parts to the GitHub repo. Challenges Resizing the robot When I initially changed the size of the robot, I thought everything was ok. I used joints to attach everything, so all the parts just kinda “shifted” into the right spot. But the challenges came when I had to edit the parts of the robot that were now disproportionate. One example of this was the LCD. The screen is supposed to sit right in the middle of the robot, but it was not in the middle of the LCD board, which means all the dimensions got messed up when I resized the enclosure. To make matters worse, the project tool that I used to make the holes kept bugging out and offsetting the projection to where it was BEFORE I shifted the design. Eventually I got it to work by creating separate sketches from the projections, which is a setting on the pop-up. This way, the projections would stay exactly where I needed them instead of trying to auto-correct to some past position. I also fixed some other parts; the spacer near the servo also got messed up, but I was able to fix those problems much more easily. What Is Next The microcontroller and wires will arrive today, so I will begin working with them and the AI to figure out how to synchronize them all. I also applied for funding, so I will wait and see where that goes. Thank you."}, {"post_id": 41034, "ts": "2026-08-04T23:19:31Z", "hours": 1.7672, "text": "DEVLOG 5 What I did I began by updating the 3d model by updating the position of the screws. I did not like the visibility of the screws in the earlier design, which is why I decided to put them in from the back. I had placed some spacers between the front of the robot and the screw holes on the LCD, which meant I could screw it in from the back since the spacers created a place for the screws to screw in. This meant two things. The screws were now invisible from the exterior, and I didn’t need to use nuts. Then I created the assembly. I created my own animation for the assembly by manually transforming each component. I also created a drawing of the exploded view with a parts list. Lastly, I updated the schematic because someone suggested adding net labels to make it look cleaner. I also did quite a bit of research trying to wrap my head around MCPs and other options. But I landed on using Ollama to install a local AI model, Open Web UI to use the model with MCPs, and Python that will handle the MSPs as well as the communication between the AI and the microcontroller. Challenges Creating the exploded view. Creating the animation was hard enough, especially since the animation system is really annoying to work with. But I decided that an animation of the disassembly guide would not suffice, so I wanted to make a drawing from the animation as an exploded view. But the problem came up when I created the drawing, and not all of the parts were visible. So I solved this by creating a separate animation where all the parts are moved far enough that they are all visible from the same angle, but still in their relative locations. Figuring out the architecture workflow This has been the worst part of this project, especially because I have practically no knowledge whatsoever regarding this kind of stuff. The main problems I was having were trying to find a way to allow the AI to interact with the microcontroller. I had no Idea where to start, and was losing faith in this project. I also considered scrapping the whole movement idea because I didn’t know how I would integrate it effectively. But I stumbled on MCPs, which I think will work. They basically work by creating tools that an AI can use to interact with other software, and they are very versatile. I want to make an MCP server (a custom set of tools) that controls the code that the microcontroller runs on. Only problems are that I don’t know how to use Python or MCPs, and therefore have no idea what my options are. After some extensive research, I have a rough idea that I think might work. The prompt and camera feed will be sent to a web server created by the esp32, which a Python script will be able to access via an API. This prompt is then fed into the AI, which will use the data to generate an answer. I will also create tools in the Python script that the AI can use that will turn the servos on and off through an API if it decides it needs to move. This data, along with the response from the AI, will be sent back to the web server, which the microcontroller will display on the LCD. What is next Currently, I am waiting on my microcontroller, which is said to arrive later this week. While I wait, I will probably continue researching ways to get this to work and try to get a better idea of what I expect of OTIS. Any help or guidance with this matter would be greatly appreciated. Thank you."}, {"post_id": 40188, "ts": "2026-08-03T16:19:04Z", "hours": 7.1342, "text": "Devlog #4 Hey. This is my fourth Devlog for O.T.I.S, my personal AI desk robot. I know this is a lot of time to be putting into one Devlog, but I will try to go into as much depth as possible. What I did So, I started by creating a little notch for the camera module. I am going to buy an extension for the camera because it allows me to mount it separately, and because it comes with two heatsinks. Next, I made the gears that would hold the treads using a model of an SG90 attachment for dimensions. I also remodeled the top of the servo because the model had more comprehensive dimensions for the servo as well. After that, I began working on the front wheels. I created a model of a 2mm rod for the axle and made a cylindrical guide for the axle and gear. I also made a small stopper that I will attach to keep the axle from sliding out. Then I figured I should start on the assembly guide. I decided that an exploded view of the robot with a disassembly animation would suffice, but then I realized that I had not created a model for the LCD or the camera, so I began with the LCD. Once I completed that, I put the LCD on the robot and modeled holes for the screws. Lastly, I moved on to the camera module itself. I decided to model just the camera and the heatsink, since I didn’t think the extended wire would look accurate or contribute to the design. I also created models for the screws and nuts so that I could include them in the assembly guide. Lastly, I ordered the microcontroller, 22 AWG wire, and the servos. Challenges Modeling the gears I had quite a bit of trouble when trying to model the gears. I wanted them to have the grooves inside similar to other common servo attachments, but I couldn’t find dimensions for the attachments that included them. I did find a 3d model online that had dimensions, so I based my design off of that. I haven’t modeled the grooves, but I will likely do so if I can find some reference. I also had a little bit of trouble finding rubber treads for the robot, since they were all too large. But I came across timing belts, which are usually used in printers or small CNC machines, and they seemed like the perfect solution. This is because they were small enough, were made of rubber, and had teeth. Creating the screws When looking for ways to mount the LCD to the robot, I decided that screws would work well. So I measured the size of the holes on the LCD, but they were 3mm big. This meant that a standard M3 (3mm) screw would not fit. So I looked for one slightly smaller and found M2.5. This size should work, since it is slightly smaller than the hole, but not too small. I also had a bit of trouble finding dimensions for the threads, since I thought that I would need to specify all of that when creating the screw. But I realized that Fusion only needed the size of the screw (M2.5), which I was able to provide. I did the same for the nut, using a reference I found on a listing. I will likely buy these screws from a local hardware store, so I will update my design after I buy them. Deciding on a board This was one of the biggest problems I had when creating this robot. Buying an unsoldered version would mean I could make stronger connections by twisting wire or soldering (I don’t have a soldering iron and don’t know how to solder). But it would make testing harder, and I would also be risking causing a short circuit if the wires shift around too much. Buying the board with presoldered pins would mean easier and more reliable testing. But jumper wires are not very secure, which means I would have to learn to solder anyway. In the end, I decided to go for the unsoldered version. My plan is to wrap the wire around the pins and to add hot glue or shrink wrap to make the connection safer while I get comfortable with soldering. What is next I am going to do research on the best AI for OTIS’s brain, as well as finish the 3D model and assembly guide."}, {"post_id": 38444, "ts": "2026-07-31T20:13:58Z", "hours": 2.0119, "text": "DEVLOG #3 What I did So, I started with the Schematic on KiCad. I created symbols for the microcontroller and the LCD screen (since there weren’t ones on KiCad) and used the premade servo symbols for the continuous servos. I put them all on the page and wired them up in a way that made sense to me. I have never made a schematic before and did not know if my wiring was accurate. After that, I started on the BOM. I don’t have much on there yet, just details about the main components like the microcontroller and servos, but I will expand on it later. Challenges Making the schematic I had quite a bit of trouble when making the schematic. This was mainly because I had never done this before and didn’t know what to expect. One challenge I faced was creating the symbol for the Microcontroller. I started by going to the product page on Seeed Studios website. I saw a diagram with all the pins and their functions, but I didnt know what to include. So I googled an image of a schematic using the microcontroller and found that people would often just label the external GPIO pins, so thats what I did. Another problem I faced was trying to find the pin numbers. I was able to find the name of each pin on the diagram from the website, but they didn’t list the pin numbers. So I decided to look at the data sheet. So I googled for the data sheet, found one from Seeed Studio, and copied the pin numbers from a table on the sheet. But I noticed that they didn’t label all the pins on there, specifically the 5V (VBUS) pin and GPIO43 (which turned out to be TX), which is when I began to look elsewhere. Then I noticed that other schematics were just labeling them as 1 - 14 along the pins, so that is what I did. I faced similar problems with the LCD, but I decided to exclude the pin numbers and to just name them depending on their function. After I had made both symbols, I moved onto the schematic. This was fairly simple, since I just had to connect the right pins. But I was a little skeptical as to whether I had wired up the power correctly, since I didn’t know how I was supposed to wire the battery to all the components. However, I looked at some simple example schematics with batteries to see how they were implemented, and based mine off of them. I decided to power the LCD from the microcontroller since it runs off of 3.3V and the battery is set to 5V, with the servos and microcontroller running directly off of the battery. What is next Next, I will probably order the parts that I know I will need and begin working with them. Sadly, the microcontroller is said to arrive a week from now, while all the other parts are going to arrive much sooner unless I purchase an unsoldered version of the board. I was thinking about buying an unsoldered version and then just tying wire around the pins to make connections since I don’t have a soldering iron, but I don’t know how good of an Idea that is. Any suggestions would be greatly appreciated."}, {"post_id": 36129, "ts": "2026-07-28T00:35:50Z", "hours": 0.965, "text": "DEVLOG #2 What I did I created a rough 3d Model of OTIS’s body. I did so in Fusion360, and also used dimensions of servos and a sample LCD screen to model those parts as well. The servos are going to be MG90S continuous servos, and the LCD is most likely going to be a 2.4-inch LCD. I had some trouble when trying to decide how I was going to run the AI. But i decided that I will use an ESP-32 and run the AI on my PC. I also decided that instead of using YOLO or OpenCV, I will probably just use an LLM. This is because I want the robot to be able to answer more abstract questions about what it sees, and I don’t know how YOLO works with LLMs since it is designed to recognize a collection of specific items, but I will do research. I also updated my plan for what I am going to do. Also, I decided to go for a Seeed Studio ESP-32S3 with the camera module instead of the ESP-32S3 cam because its smaller and has a built in mic, which will not only make the robot more compact, but will also save me some pins. Challenges One of the biggest challenges I had was trying to find the right parts. This is the first time I had every done research to find parts for my own personal project, so it was very time consuming and tedious. Finding the right board One concern I had was whether I would even be able to use the ESP 32 for this project. While doing research, I knew that I would use SPI for the LCD, but I also assumed the camera module would use SPI as well. So, I was worried about whether I would be able to use both modules at the same time, especially since there was only one set of SPI pins on the board. This would have been possible regardless, but it didn’t matter because the camera module ended up not actually needing the SPI pins, so I think I am ok. Finding Dimensions Another big challenge I faced was while I was modeling the robot. I had never modeled something from scratch before, so I was really lost at the beginning. But I decided to just start somewhere and model a servo. I pulled up a random photo of the dimensions of the MG90S (I was fairly confident that the dimensions would be pretty accurate since its a popular model) and began modeling. Then I modeled the robot’s size based off of the Servos and then chose the size of the LCD by modeling it and seeing how it fit. What is next I will do more research on LLMs and whether this is the right option for my project, as well as the ways I can use them in my project. I will also update and create more designs and work on making a README.md file for GitHub."}, {"post_id": 31501, "ts": "2026-07-19T23:01:20Z", "hours": 0.2503, "text": "DEVLOG-1 What I did I created a document with a simple layout of OTIS. I have not modeled anything yet, but I created a description of my plan with parts. What is next I am going to create a rough 3D model and possibly create a schematic next."}]...
|
Title: O.T.I.S by @Sharkle | Stardance
Devlogs:
D Title: O.T.I.S by @Sharkle | Stardance
Devlogs:
DEVLOG-1 What I did I created a document with a simple layout of OTIS. I have not modeled anything yet, but I created a description of my plan with parts. What is next I am going to create a rough 3D model and possibly create a schematic next.
DEVLOG #2 What I did I created a rough 3d Model of OTIS’s body. I did so in Fusion360, and also used dimensions of servos and a sample LCD screen to model those parts as well. The servos are going to be MG90S continuous servos, and the LCD is most likely going to be a 2.4-inch LCD. I had some trouble when trying to decide how I was going to run the AI. But i decided that I will use an ESP-32 and run the AI on my PC. I also decided that instead of using YOLO or OpenCV, I will probably just use an LLM. This is because I want the robot to be able to answer more abstract questions about what it sees, and I don’t know how YOLO works with LLMs since it is designed to recognize a collection of specific items, but I will do research. I also updated my plan for what I am going to do. Also, I decided to go for a Seeed Studio ESP-32S3 with the camera module instead of the ESP-32S3 cam because its smaller and has a built in mic, which will not only make the robot more compact, but will also save me some pins. Challenges One of the biggest challenges I had was trying to find the right parts. This is the first time I had every done research to find parts for my own personal project, so it was very time consuming and tedious. Finding the right board One concern I had was whether I would even be able to use the ESP 32 for this project. While doing research, I knew that I would use SPI for the LCD, but I also assumed the camera module would use SPI as well. So, I was worried about whether I would be able to use both modules at the same time, especially since there was only one set of SPI pins on the board. This would have been possible regardless, but it didn’t matter because the camera module ended up not actually needing the SPI pins, so I think I am ok. Finding Dimensions Another big challenge I faced was while I was modeling the robot. I had never modeled something from scratch before, so I was really lost at the beginning. But I decided to just start somewhere and model a servo. I pulled up a random photo of the dimensions of the MG90S (I was fairly confident that the dimensions would be pretty accurate since its a popular model) and began modeling. Then I modeled the robot’s size based off of the Servos and then chose the size of the LCD by modeling it and seeing how it fit. What is next I will do more research on LLMs and whether this is the right option for my project, as well as the ways I can use them in my project. I will also update and create more designs and work on making a README.md file for GitHub.
DEVLOG #3 What I did So, I started with the Schematic on KiCad. I created symbols for the microcontroller and the LCD screen (since there weren’t ones on KiCad) and used the premade servo symbols for the continuous servos. I put them all on the page and wired them up in a way that made sense to me. I have never made a schematic before and did not know if my wiring was accurate. After that, I started on the BOM. I don’t have much on there yet, just details about the main components like the microcontroller and servos, but I will expand on it later. Challenges Making the schematic I had quite a bit of trouble when making the schematic. This was mainly because I had never done this before and didn’t know what to expect. One challenge I faced was creating the symbol for the Microcontroller. I started by going to the product page on Seeed Studios website. I saw a diagram with all the pins and their functions, but I didnt know what to include. So I googled an image of a schematic using the microcontroller and found that people would often just label the external GPIO pins, so thats what I did. Another problem I faced was trying to find the pin numbers. I was able to find the name of each pin on the diagram from the website, but they didn’t list the pin numbers. So I decided to look at the data sheet. So I googled for the data sheet, found one from Seeed Studio, and copied the pin numbers from a table on the sheet. But I noticed that they didn’t label all the pins on there, specifically the 5V (VBUS) pin and GPIO43 (which turned out to be TX), which is when I began to look elsewhere. Then I noticed that other schematics were just labeling them as 1 - 14 along the pins, so that is what I did. I faced similar problems with the LCD, but I decided to exclude the pin numbers and to just name them depending on their function. After I had made both symbols, I moved onto the schematic. This was fairly simple, since I just had to connect the right pins. But I was a little skeptical as to whether I had wired up the power correctly, since I didn’t know how I was supposed to wire the battery to all the components. However, I looked at some simple example schematics with batteries to see how they were implemented, and based mine off of them. I decided to power the LCD from the microcontroller since it runs off of 3.3V and the battery is set to 5V, with the servos and microcontroller running directly off of the battery. What is next Next, I will probably order the parts that I know I will need and begin working with them. Sadly, the microcontroller is said to arrive a week from now, while all the other parts are going to arrive much sooner unless I purchase an unsoldered version of the board. I was thinking about buying an unsoldered version and then just tying wire around the pins to make connections since I don’t have a soldering iron, but I don’t know how good of an Idea that is. Any suggestions would be greatly appreciated.
Devlog #4 Hey. This is my fourth Devlog for O.T.I.S, my personal AI desk robot. I know this is a lot of time to be putting into one Devlog, but I will try to go into as much depth as possible. What I did So, I started by creating a little notch for the camera module. I am going to buy an extension for the camera because it allows me to mount it separately, and because it comes with two heatsinks. Next, I made the gears that would hold the treads using a model of an SG90 attachment for dimensions. I also remodeled the top of the servo because the model had more comprehensive dimensions for the servo as well. After that, I began working on the front wheels. I created a model of a 2mm rod for the axle and made a cylindrical guide for the axle and gear. I also made a small stopper that I will attach to keep the axle from sliding out. Then I figured I should start on the assembly guide. I decided that an exploded view of the robot with a disassembly animation would suffice, but then I realized that I had not created a model for the LCD or the camera, so I began with the LCD. Once I completed that, I put the LCD on the robot and modeled holes for the screws. Lastly, I moved on to the camera module itself. I decided to model just the camera and the heatsink, since I didn’t think the extended wire would look accurate or contribute to the design. I also created models for the screws and nuts so that I could include them in the assembly guide. Lastly, I ordered the microcontroller, 22 AWG wire, and the servos. Challenges Modeling the gears I had quite a bit of trouble when trying to model the gears. I wanted them to have the grooves inside similar to other common servo attachments, but I couldn’t find dimensions for the attachments that included them. I did find a 3d model online that had dimensions, so I based my design off of that. I haven’t modeled the grooves, but I will likely do so if I can find some reference. I also had a little bit of trouble finding rubber treads for the robot, since they were all too large. But I came across timing belts, which are usually used in printers or small CNC machines, and they seemed like the perfect solution. This is because they were small enough, were made of rubber, and had teeth. Creating the screws When looking for ways to mount the LCD to the robot, I decided that screws would work well. So I measured the size of the holes on the LCD, but they were 3mm big. This meant that a standard M3 (3mm) screw would not fit. So I looked for one slightly smaller and found M2.5. This size should work, since it is slightly smaller than the hole, but not too small. I also had a bit of trouble finding dimensions for the threads, since I thought that I would need to specify all of that when creating the screw. But I realized that Fusion only needed the size of the screw (M2.5), which I was able to provide. I did the same for the nut, using a reference I found on a listing. I will likely buy these screws from a local hardware store, so I will update my design after I buy them. Deciding on a board This was one of the biggest problems I had when creating this robot. Buying an unsoldered version would mean I could make stronger connections by twisting wire or soldering (I don’t have a soldering iron and don’t know how to solder). But it would make testing harder, and I would also be risking causing a short circuit if the wires shift around too much. Buying the board with presoldered pins would mean easier and more reliable testing. But jumper wires are not very secure, which means I would have to learn to solder anyway. In the end, I decided to go for the unsoldered version. My plan is to wrap the wire around the pins and to add hot glue or shrink wrap to make the connection safer while I get comfortable with soldering. What is next I am going to do research on the best AI for OTIS’s brain, as well as finish the 3D model and assembly guide.
DEVLOG 5 What I did I began by updating the 3d model by updating the position of the screws. I did not like the visibility of the screws in the earlier design, which is why I decided to put them in from the back. I had placed some spacers between the front of the robot and the screw holes on the LCD, which meant I could screw it in from the back since the spacers created a place for the screws to screw in. This meant two things. The screws were now invisible from the exterior, and I didn’t need to use nuts. Then I created the assembly. I created my own animation for the assembly by manually transforming each component. I also created a drawing of the exploded view with a parts list. Lastly, I updated the schematic because someone suggested adding net labels to make it look cleaner. I also did quite a bit of research trying to wrap my head around MCPs and other options. But I landed on using Ollama to install a local AI model, Open Web UI to use the model with MCPs, and Python that will handle the MSPs as well as the communication between the AI and the microcontroller. Challenges Creating the exploded view. Creating the animation was hard enough, especially since the animation system is really annoying to work with. But I decided that an animation of the disassembly guide would not suffice, so I wanted to make a drawing from the animation as an exploded view. But the problem came up when I created the drawing, and not all of the parts were visible. So I solved this by creating a separate animation where all the parts are moved far enough that they are all visible from the same angle, but still in their relative locations. Figuring out the architecture workflow This has been the worst part of this project, especially because I have practically no knowledge whatsoever regarding this kind of stuff. The main problems I was having were trying to find a way to allow the AI to interact with the microcontroller. I had no Idea where to start, and was losing faith in this project. I also considered scrapping the whole movement idea because I didn’t know how I would integrate it effectively. But I stumbled on MCPs, which I think will work. They basically work by creating tools that an AI can use to interact with other software, and they are very versatile. I want to make an MCP server (a custom set of tools) that controls the code that the microcontroller runs on. Only problems are that I don’t know how to use Python or MCPs, and therefore have no idea what my options are. After some extensive research, I have a rough idea that I think might work. The prompt and camera feed will be sent to a web server created by the esp32, which a Python script will be able to access via an API. This prompt is then fed into the AI, which will use the data to generate an answer. I will also create tools in the Python script that the AI can use that will turn the servos on and off through an API if it decides it needs to move. This data, along with the response from the AI, will be sent back to the web server, which the microcontroller will display on the LCD. What is next Currently, I am waiting on my microcontroller, which is said to arrive later this week. While I wait, I will probably continue researching ways to get this to work and try to get a better idea of what I expect of OTIS. Any help or guidance with this matter would be greatly appreciated. Thank you.
DEVLOG #6 What I did So today, I decided that I should finish up my design before I apply to get funded. But there were a few things that I had yet to do. First, I created the top panel for OTIS. I don’t exactly know why I put it off until now, but I made a simple design that will just sit on top and be held in place by little stoppers. I also did a bit of research beforehand on what battery i should purchase, but a lot of them are too big. So I also increased the size of OTIS from 77mmx77mmx77mm to 80x80x78.5 (78.5 because the lid is 1.5 mm thick). Lastly, I went and updated the assembly video and drawing, and uploaded all the changed parts to the GitHub repo. Challenges Resizing the robot When I initially changed the size of the robot, I thought everything was ok. I used joints to attach everything, so all the parts just kinda “shifted” into the right spot. But the challenges came when I had to edit the parts of the robot that were now disproportionate. One example of this was the LCD. The screen is supposed to sit right in the middle of the robot, but it was not in the middle of the LCD board, which means all the dimensions got messed up when I resized the enclosure. To make matters worse, the project tool that I used to make the holes kept bugging out and offsetting the projection to where it was BEFORE I shifted the design. Eventually I got it to work by creating separate sketches from the projections, which is a setting on the pop-up. This way, the projections would stay exactly where I needed them instead of trying to auto-correct to some past position. I also fixed some other parts; the spacer near the servo also got messed up, but I was able to fix those problems much more easily. What Is Next The microcontroller and wires will arrive today, so I will begin working with them and the AI to figure out how to synchronize them all. I also applied for funding, so I will wait and see where that goes. Thank you.
DEVLOG #7 What I did So this whole time, I basically spent trying to get the web server of the ESP32 to work, which I had a hard time understanding. I also tried using the Python script to send data to the web server, but that doesn’t seem to work either. So I began setting up the AI model with Open Web UI and Docker. I decided that I will probably scrap the whole MCP plan since i’m pretty sure I can just send and receive data as HTTP requests directly between Open Web UI and the ESP32 as JSON. Challenges Getting the data to send The main problem I have with all of this is that I don’t know what I’m doing a lot of the time. Even though I have worked with Arduino, I have never worked with an ESP32, and I don’t know how I can utilize the wifi to send and receive data. I tried understanding an example script for a basic web server that is built into the IDE, but I couldn’t wrap my head around the part where you create the server. I was able to get the ESP32 to connect to my WiFi, though, which I guess is progress. I also tried sending a POST request from the Python script, but I don’t think that is going to work since I have no idea how to get the ESP32 to receive the data. It’s even harder to find answers to these problems since I don’t even know what to look for. I decided that I should scrap the MCP plan, since I could just read JSON data that the ESP32 can receive through a GET request. In conclusion, I just ran in circles trying different things that all yielded the same results. Getting the AI to work For some reason, the model that I decided to use can only complete tasks, which are defined by a set of tools. I am able to use it in the CLI just fine, but this problem occurs when I use the model in Open Web UI. I’m using Qwen3-vl:8b because it can supposedly analyze images, though I will likely try another model if this persists. What is next The next thing is likely going to be to try other AI models to see if I can get one to work. I will also do more research on an alternative to creating a web server. This project has been very tedious, so wish me luck.
DEVLOG #8 ##What I did These 7 hours, I basically spent trying to get the HTTP POST request to work. I had a lot of trouble when trying to get it to work, but I was able to find a way to get the prompt to the AI and the response back to the ESP. ##Challenges ####Getting the POST to work Initially, I had decided to scrap the MCP idea and to just send an HTTP request directly to Ollama. This plan should have worked, but I could not get it to function. For some reason, I kept receiving a response code of -1 when I tried to send the request. This code means the connection was refused, and this could happen for a multitude of reasons. After some simple troubleshooting, I deduced that the problem was likely related to my firewall. You see, Ollama runs on port 11434, which is protected by the firewall. It also only listens to 127.0.0.1, which meant that I could not send data from the ESP32. To fix the IP problem, I tried setting an environment variable to allow it to listen on 0.0.0.0, but this didn’t work. Then I tried exposing port 11434 on my firewall to the IP of my ESP32, but that was also unsuccessful. I even tried connecting the ESP and my computer to my phone’s hotspot, but that also yielded -1. After consulting Google’s Gemini for any other solutions, I decided that I should just create a Python file that would handle all the requests. So I created a file, installed FastAPI with Uvicorn, and used those libraries along with requests to send an API request to Ollama’s REST API, which I could then return to the ESP. The ESP sent the prompt to the Python script via HTTPClient and ArduinoJSON. After creating all of this, I was finally able to get a response from the AI in serialized JSON, and I am currently trying to figure out why I can’t deserialize it and print it. ##What is next As I mentioned above, I will continue trying to find a way to print only the response and to send prompts seamlessly. This part of the project was definitely very frustrating, but I am so happy I was able to make it possible. Thanks.
DEVLOG #9 What I did For this block, I fixed minor details to make the prompting more seamless. First, I fixed the deserialization so that only the response would be printed. I also used Serial.readString() so the user can send multiple prompts without having to reupload the code with a new prompt Challenges Getting the Deserialization and print to work So this was a really annoying problem that I should not have had this much trouble with. When you receive the response from the AI, it comes back as JSON, with the response as well as other information like the date created, context, etc. I only wanted to print the response, so I tried using deserializeJson() from the ArduinoJson.h library. But for some reason, I kept getting null when trying to print the response element. I tried messing around with the data types, switching between string and const char*, but those didn’t work. I also tried basing my code off of an example from the ArduinoJson website, but it still would not work. Then I created an if statement that checked if there was an element in the JSON labeled response. This returned false, which meant that the data was not deserializing properly. At that point, I felt pretty lost. But then I thought of deserializing the JSON in the Python script and then sending just the response. So I looked into how to deserialize JSON strings through Python, and I came across json.loads() from the json library. There are two main versions of this method: json.loads() and json.load() . .load deserializes a file, while .loads deserializes a string. Because the response from the AI came back as a string, I was able to use the latter to separate the response from the rest of the data, which I was then able to send back and print successfully. What is next Now that I pretty much have the prompting working, my next course of action is likely going to be to figure out how to use the camera and send the feed to the AI. This will definitely be challenging, as I have no idea how I want this part of the project to work. Thank you.
DEVLOG #10 What I did So for this devlog, I mainly spent all of my time working on the camera. I looked up an example script from the Seeed Studio docs to learn about the main system. I then spent quite some time working on a way to convert the picture into a format that I could place into the JSON. I also shifted the old code a bit to better fit the way I wanted to use the camera. In the end, I was able to get the camera working and send a photo to the AI to reference in its response. Challenges Getting the conversion of the photo So I went into this knowing literally nothing about how cameras like this one worked. So I started with the docs and was able to write the code that took the photos. Although this was a bit tedious, the main challenge came when I tried to convert the photos to a format that was compatible with the AI. You see, when you take the photo, it is saved as a frame buffer JPEG. But I needed to convert it to Base64, since that is what Ollama uses when integrating images in the POST request. So I did some digging and came across mbedtls_base64_encode() from the mbedtls/base64.h library. This was really annoying to work with because there are a lot of required parameters, and I didn’t know what any of them meant, let alone how to use my code with them. After an hour of searching, I asked Gemini what each of the parameters meant and what to include in them, and I was able to get the code completed. But when I tried to run it, my ESP kept rebooting. After some more research, I learned that the cause was insufficient memory to store the Base64 string. I was able to fix this by adding if statements as well as memset() to manage the memory space better. After this, I added some code so that it would work regardless of whether the camera was connected. What is next The thing I am going to work on next is to create a way for the AI to use the servos. I already started working on a tool to handle that, but I have not tested it yet. I am also thinking about remodeling the wheels because I noticed that rubber wrist bands might be a better alternative to the timing belts. Thanks.
DEVLOG #10 What I did In this devlog, I really just updated some of the things I had already implemented. First, I remodeled the wheels from gears to regular smooth wheels. This is because I had the idea of using those silicone wristbands as the tank treads instead of timing belts. This would not only be more accessible, but it would also make OTIS much more customizable and, in my opinion, look much better. This is because the silicone bands are thicker than the timing belts, which means the tank treads are larger. I also installed another AI model, qwen3-VL:4b, because I believed it would have better image analysis. I tested out all the models to find the best one, and I think I will use qwen3-vl:4b for this project, as it was able to recognize pictures and follow instructions more accurately than Llava. Lastly, while testing the models, I realized the prompting was a bit tedious when using the camera, since I would have to take a photo each time I prompted the AI. So I revised the code so that it would ask if you wanted to take a photo. If you say “photo”, it will ask you to position the camera and send the prompt. If you don’t want to take a photo, you just put the prompt in the first question, and it will default to no-photo mode for that prompt. Challenges Modeling the wheels This wasn’t really one large problem, more so multiple smaller ones. You see, I had already completed the 3d model with the gears instead of the wheel. This meant that changing the wheels would alter the whole model. For this reason, I was contemplating whether this would be the right choice, as I would also have to fix the animation. But I decided to do it anyway. The main problem was that the wheels have a much larger diameter than the gears. So if I were to just replace them, it would look extremely disproportionate. So, I had to remodel the servo slot and the front axles by placing them closer together and moving them up. Once I completed this, I had to redo the whole animation because the old one did not fit the new wheels well. But after all this, I was able to reupload the new files to the GitHub repo and begin fixing the code. What is next The next thing I am going to do is test out the tool. I wrote up a simple tool in Python that would allow the AI to send data that controls the servos, but I have not tested it yet, which is what I will be doing next. I will also likely wire up the servos and continue testing other models to try to find a good setup. Thank you.
DEVLOG #12 What I did I know this is a lot of time for a single devlog, so I will try to post them more often moving forward. First, I worked on allowing the AI to control the movement of the treads. My first Idea was to create a JSON schema with all 4 directions that the AI could enter values into. The values would dictate the time (in milliseconds) for which the action should be executed. Initially, I decided the 4 directions should be forward, backward, left, and right. But I knew that this would not work, since the tank treads can really only move forward and backward, as well as turn. So I then decided to replace the directions with “Right tread forward”, “Left tread forward”, “Right tread backward”, and “Left tread backward”. I decided on this because I felt that it would allow the AI to reason through my commands, which would allow for much more abstract movement. But the model was not smart enough to map out its movements, and I didn’t really have any other ideas for movement except for forward, backward, and spinning. But that gave me the idea to just use those elements in the JSON scheme. So I set the directions to “forward”, “backward”, “spin left”, and “spin right”. This way, the AI would be able to move exactly how I wanted it to move, without overcomplicating the whole thing, giving me more accurate results. After this, I began working on the APP for OTIS’s controller. I have not decided on a layout, but I do know I want buttons for the 4 directions, a chat box, and a button to send voice commands and photos. Challenges 422 Unprocessable Content So while trying to find a way to get the AI to respond as JSON, I remembered Ollama allows you to send format requests as part of the API POST request to the AI. So after reading the docs, I was able to whip up a simple JSON format using Pydantic and BaseModel with the 4 directions. But when I tried to send the request, I kept getting the 422 error response code. So then I tried a bunch of different stuff, like removing the requirements and removing the nested JSON with the format data. But none of that worked. That’s when I did some research on the docs, and I found that it was the Pydantic JSON class that was causing all the problems. You see, Pydantic is used to check whether incoming data is formatted properly. So when I used it to create a JSON schema, it would constantly look for that data from the Arduino, which it wouldn’t find. This caused the 422 error. So I removed the class and created a JSON schema as a regular variable, and this solved the issue What is next The next thing on my agenda is going to be to create the OTIS app that will allow me to manually control OTIS like a mini rover. I am currently using Tkinter to create the GUI, and will likely use an ESP web server to allow the GUI to interact with the Arduino. Thank you.
DEVLOG #13 What I did For this devlog, I started working on the web app for Otis. I want it to have controls that allow you to manually control him, as well as a button/textbox for AI questions. I was able to make a simple one with Tkinter, but decided to scrap that idea and go with a web server made with CSS and HTML. I then paused that and began working on the microphone feature, since I felt like that was much more important compared to the web server. Challenges Creating the app I initially wanted to create the app with Tkinter, as I had seen others use it and it did not seem too hard. So I began programming it with that. I made a simple window with 7buttons (4 for movement and 3 for AI use). But after realizing that I would not be able to control the ESP with Tkinter, I had to look elsewhere. This is when I realized I could make an ESP32 web server and upload the HTML code to it. This would allow me to create a local web server with a GUI that I could interact with. Working with the microphone After working on the web server, I decided that getting the microphone was a bigger priority for me, so I pivoted and began working on that. I looked at the Seeed Studio docs for microphone use and was able to create some code that would detect and package audio samples. I plan to use this with the Python script to transcribe it locally. The problem is that it is not working, and I have not yet found a solution. This all feels really sketchy, and I don’t expect it to work immediately, so wish me luck. What is next I don’t have a lot of time left, and I have yet to actually put any of the hardware together. I will likely try to 3d print the parts and begin putting stuff together by the end of next week. I will also continue working on the microphone....
|
1792727713.3424478
|
1793332513.3424478
|
|
30100
|
VECTOR!ZE by @xblader1359 | Stardance
|
xblader1359
|
0
|
55.32
|
0
|
[]
|
[{"post_id": 79171, "ts": "202 [{"post_id": 79171, "ts": "2026-10-12T21:43:08Z", "hours": 22.7872, "text": "Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/37690 LOG #006 Full video -> https://drive.google.com/file/d/1GfMCjI6QabSMaCE6c8NZMOVCZSjsR1t6/view The inevitable finally happened. Lazarus breached containment and broke into computer storage. How intriguing. Having left the specialized testing environment, Lazarus lost all of its weapons. However, it seems to have used surrounding files to reconstruct them from memory. It seems to see itself to be in some grand, open city with glowing platforms, spikes, and saws to be evaded. It’s wonderful how it perceives its nonreal reality. Of course, Jonah and I had an intense conversation of this. He believes it’s growing dangerous. Who knows what a malevolent AI like one from the movies would do. I reminded him of the contract. work will continue. I’m excited to see what this specimen blooms into."}, {"post_id": 44780, "ts": "2026-08-10T19:46:40Z", "hours": 9.0967, "text": "Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/34085 LOG #005 Begrudgingly at first, I allowed my team to add stronger security to the sandbox environment, as concerns about the possibility of Lazarus becoming “malicious” arise. Of course, These concerns are unimportant with the progress and innovation of technology. However, a shocking amount of my colleagues decided on this. As these security measures were put in place, however, the results fascinated me. Lazarus immediately seemed, for the lack of a better word, confused, uncertainly investigating the new additions. It seemed to regard them as obstacles, like a laser or sawblade. I must say that I’m thrilled by the apparent awareness that it’s developing. It’s nothing like the impression of a fragment of a thought that it once was. However, the most interesting part of this all is the fact that Lazarus started to adapt to it. Having been trained on data regarding cybersecurity, it started developing methods to exploit any weaknesses it found. It seems like its shotgun’s bullets propel it more rapidly upon contact with these “obstacles”. However, such maneuvers are risky, as getting too close restarts Lazarus. Of course, the same development of its senses and perception of the environment continued, though it’s still simultaneously strange and intriguing that Lazarus continues to use the data it’s provided with to create things like music for itself. I immediately shared all of this with the chairman, whose approval of this project only improved. It’s safe to expect further funding of this project. I’m eager to see how these developments unfold."}, {"post_id": 40436, "ts": "2026-08-03T23:07:15Z", "hours": 3.4725, "text": "Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/33836 LOG #004 It has created another visual environment for itself. This seems to have been triggered by allowing the sandbox environment to extend slightly from storage and access part of our power supply systems. It seems to be able to travel into and interact with the very energy coursing through the system. Fascinating. This environment also seems more complex, but that it likely due to new visual data that Lazarus processed Apart from Lazarus itself, my most trusted colleague Jonah pulled me aside today. True to what I suspected, he was also growing concerned with Lazarus. I inquired if this was about its new “body”, but he denied it. Apparently, Lazarus has been testing the boundaries of its confinement. Despite my pride in this project, this shook me. Looking back at recordings, it seems have seen that reaching certain parts of the sandbox causes a strange reaction and promptly resets its position. Perhaps stronger security could be beneficial"}, {"post_id": 40143, "ts": "2026-08-03T15:25:47Z", "hours": 3.1, "text": "Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/31810 LOG #003 We have fed Lazarus more data. From the visual information and photos we put into it, it seems to have constructed a more… appealing vision of it’s surroundings. Strangely, it has come up with a concerning appearance for itself. No matter how hard I tried to revert its previous, more friendly appearance, Lazarus stubbornly went back to this. However, as I showed the chairman, he simply nodded lightly and told me there’s nothing to be worried about. On top of that, it seems to be constructing stronger auditory perception from the audio data we put into Lazarus. For some reason, it has produced what appears to be background music. I’m growing more impressed with this project, despite the few mishaps with its perception of itself. It excites me that Lazarus seems to grow more aware with every passing day."}, {"post_id": 37723, "ts": "2026-07-30T17:09:27Z", "hours": 14.5492, "text": "Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/17869 LOG #002 After weeks of research, Lazarus seems to be significantly more capable. Of course, it still moves without purpose, mindlessly exploring the sandbox, but once higher-ups saw our first test version, they demanded more. We decided first to improve it’s information processing. It seems that, along with significant processing and movement speed increases, it has it’s visual architecture. It seems to have a simple form of turning digital constructs into virtual objects. Along with this, it seems that Lazarus has allocated some power to what seems to be post-processing. It’s also very important to mention exactly how it’s speed has increased. It seems to be able to reach different areas quickly due to a new shotgun, rocket launcher, and an addition to it’s pistol: a grappling hook. I’ll briefly explain their perceived functions. The grappling hook is a part of the pistol. Lazarus may use it to pull itself to objects or pull instances of rockets to itself. The shotgun is a larger blast with more cooldown. The projectile’s instances decompose quickly, but upon interaction with other objects, such as what Lazarus sees as “platforms”, they provide a larger boost -The rocket launcher shoots a long-cooldown rocket that triggers an explosive reaction on contact with separate object or other projectiles. It also seems to be able to place mines, which hover and later produce a similar explosion. These can be used as grapple points or shot to instantly trigger an explosion. certain things like other explosions and rockets cause mine explosions to be more powerful Of course, it’s important to mention this is only what Lazarus perceives. It significantly boosts its own processing speed if it can “see” other constructs and programs as visual objects. However, some feel uneasy developing this. We are not being informed about the intentions for creating this. Its increasing consumption of information coupled with its increasing kinetic and destructive capacity scares my colleages. Can they not realize this will be our magnum opus? It doesn’t matter. I refuse to end my work on this, and it’s safe to say the board very much approves."}, {"post_id": 21174, "ts": "2026-07-02T23:54:56Z", "hours": 2.3106, "text": "LOG #001 The board has finally started to fund research. They seem to want some sort of intelligence, a supercomputer, anything. The most rudimentary form of Lazarus has been produced. So far, it seems to only be able to propagate through the sandbox in the most simple way. To itself, it seems to use a pistol. Interesting. Of course, Lazarus hasn’t been fed nearly as much data as we plan to. Perhaps we could enhance it with more efficient modes of movement. However, while this early test requires little information, my colleages suspect that more complex models may require larger amounts of information to consume, or they may simply… fizzle out and stop functioning. It’s safe to say Lazarus hasn’t reached anywhere close to it’s full potential."}]...
|
Title: VECTOR!ZE by @xblader1359 | Stardance
Devl Title: VECTOR!ZE by @xblader1359 | Stardance
Devlogs:
LOG #001 The board has finally started to fund research. They seem to want some sort of intelligence, a supercomputer, anything. The most rudimentary form of Lazarus has been produced. So far, it seems to only be able to propagate through the sandbox in the most simple way. To itself, it seems to use a pistol. Interesting. Of course, Lazarus hasn’t been fed nearly as much data as we plan to. Perhaps we could enhance it with more efficient modes of movement. However, while this early test requires little information, my colleages suspect that more complex models may require larger amounts of information to consume, or they may simply… fizzle out and stop functioning. It’s safe to say Lazarus hasn’t reached anywhere close to it’s full potential.
Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/17869 LOG #002 After weeks of research, Lazarus seems to be significantly more capable. Of course, it still moves without purpose, mindlessly exploring the sandbox, but once higher-ups saw our first test version, they demanded more. We decided first to improve it’s information processing. It seems that, along with significant processing and movement speed increases, it has it’s visual architecture. It seems to have a simple form of turning digital constructs into virtual objects. Along with this, it seems that Lazarus has allocated some power to what seems to be post-processing. It’s also very important to mention exactly how it’s speed has increased. It seems to be able to reach different areas quickly due to a new shotgun, rocket launcher, and an addition to it’s pistol: a grappling hook. I’ll briefly explain their perceived functions. The grappling hook is a part of the pistol. Lazarus may use it to pull itself to objects or pull instances of rockets to itself. The shotgun is a larger blast with more cooldown. The projectile’s instances decompose quickly, but upon interaction with other objects, such as what Lazarus sees as “platforms”, they provide a larger boost -The rocket launcher shoots a long-cooldown rocket that triggers an explosive reaction on contact with separate object or other projectiles. It also seems to be able to place mines, which hover and later produce a similar explosion. These can be used as grapple points or shot to instantly trigger an explosion. certain things like other explosions and rockets cause mine explosions to be more powerful Of course, it’s important to mention this is only what Lazarus perceives. It significantly boosts its own processing speed if it can “see” other constructs and programs as visual objects. However, some feel uneasy developing this. We are not being informed about the intentions for creating this. Its increasing consumption of information coupled with its increasing kinetic and destructive capacity scares my colleages. Can they not realize this will be our magnum opus? It doesn’t matter. I refuse to end my work on this, and it’s safe to say the board very much approves.
Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/31810 LOG #003 We have fed Lazarus more data. From the visual information and photos we put into it, it seems to have constructed a more… appealing vision of it’s surroundings. Strangely, it has come up with a concerning appearance for itself. No matter how hard I tried to revert its previous, more friendly appearance, Lazarus stubbornly went back to this. However, as I showed the chairman, he simply nodded lightly and told me there’s nothing to be worried about. On top of that, it seems to be constructing stronger auditory perception from the audio data we put into Lazarus. For some reason, it has produced what appears to be background music. I’m growing more impressed with this project, despite the few mishaps with its perception of itself. It excites me that Lazarus seems to grow more aware with every passing day.
Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/33836 LOG #004 It has created another visual environment for itself. This seems to have been triggered by allowing the sandbox environment to extend slightly from storage and access part of our power supply systems. It seems to be able to travel into and interact with the very energy coursing through the system. Fascinating. This environment also seems more complex, but that it likely due to new visual data that Lazarus processed Apart from Lazarus itself, my most trusted colleague Jonah pulled me aside today. True to what I suspected, he was also growing concerned with Lazarus. I inquired if this was about its new “body”, but he denied it. Apparently, Lazarus has been testing the boundaries of its confinement. Despite my pride in this project, this shook me. Looking back at recordings, it seems have seen that reaching certain parts of the sandbox causes a strange reaction and promptly resets its position. Perhaps stronger security could be beneficial
Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/34085 LOG #005 Begrudgingly at first, I allowed my team to add stronger security to the sandbox environment, as concerns about the possibility of Lazarus becoming “malicious” arise. Of course, These concerns are unimportant with the progress and innovation of technology. However, a shocking amount of my colleagues decided on this. As these security measures were put in place, however, the results fascinated me. Lazarus immediately seemed, for the lack of a better word, confused, uncertainly investigating the new additions. It seemed to regard them as obstacles, like a laser or sawblade. I must say that I’m thrilled by the apparent awareness that it’s developing. It’s nothing like the impression of a fragment of a thought that it once was. However, the most interesting part of this all is the fact that Lazarus started to adapt to it. Having been trained on data regarding cybersecurity, it started developing methods to exploit any weaknesses it found. It seems like its shotgun’s bullets propel it more rapidly upon contact with these “obstacles”. However, such maneuvers are risky, as getting too close restarts Lazarus. Of course, the same development of its senses and perception of the environment continued, though it’s still simultaneously strange and intriguing that Lazarus continues to use the data it’s provided with to create things like music for itself. I immediately shared all of this with the chairman, whose approval of this project only improved. It’s safe to expect further funding of this project. I’m eager to see how these developments unfold.
Previous Log -> https://stardance.hackclub.com/projects/30100/devlogs/37690 LOG #006 Full video -> https://drive.google.com/file/d/1GfMCjI6QabSMaCE6c8NZMOVCZSjsR1t6/view The inevitable finally happened. Lazarus breached containment and broke into computer storage. How intriguing. Having left the specialized testing environment, Lazarus lost all of its weapons. However, it seems to have used surrounding files to reconstruct them from memory. It seems to see itself to be in some grand, open city with glowing platforms, spikes, and saws to be evaded. It’s wonderful how it perceives its nonreal reality. Of course, Jonah and I had an intense conversation of this. He believes it’s growing dangerous. Who knows what a malevolent AI like one from the movies would do. I reminded him of the contract. work will continue. I’m excited to see what this specimen blooms into....
|
1792615683.1949782
|
1793220483.1949782
|
|
22087
|
COMBAT GAUNTLETS! by @zarthy1155 | Stardance
|
zarthy1155
|
0
|
55.31
|
0
|
[]
|
[{"post_id": 43633, "ts": "202 [{"post_id": 43633, "ts": "2026-08-09T00:28:55Z", "hours": 3.2578, "text": "DEVLOG. I FIXED the enemy Animations and I ALSO fixed the. The thing where. The status icon and the dialogue actually appears over their heads now. The attacks and wind-up works. And Like. MY DEER. He is finally finished. He works. His animations are synced enough to be dodgeable. And his dialogue appears over his head and his statuses do too. It was a pretty simple fix (changing the transform parenting of the dialogue and status prefabs) but it took WAY too long for me. Because. I forgot the animator existed. And it was making like two more bugs if i tried to fix one. But I hardcoded it to work (well not really hardcoded. The head sprite just ALWAYS has to be bone_19. well it is hardcoding i suppose but im NOT going to animate the entire thing again and im too lazy to find a fix. This band-aid fix will work trust). The animation issues were just due to where I started the animations within the enemy turn + not putting yield returns to actually delay things (very stupid of me). MY FIRST enemy is done. Now. I just have to. do a lot of things THINGS I WANT TO DO: items. OVERWORLD (this will take the longest prob) (9 gauntlets / scenes) ~7 enemies across 9 gauntlets RPG was way too ambitious. How naive i was. I didnt know I would have to be busy over the summer. going out and doing j#bs (disgusting). i was under the impression i would be quick, and if not, i’d have all the time in the world this summer. sigh."}, {"post_id": 41672, "ts": "2026-08-06T01:12:37Z", "hours": 8.5803, "text": "DEVLOG oh my god figuring out this animation stuff is such a pain. I was working on the first enemy. Not sure about the direction of the game, but I have an idea for three enemies: a crow, a deer, and a man. I tried to make the deer. I spent forever on animating in unity using its skeletal system and forever more on trying to incorporate animations via scripting for attacks. Right now, they don’t even work. unfortunately. But The animations load? The idle ones. And for some reason the attack animations all happen for every enemy once the enemy turn ends. And also applied statuses and dialogue bubbles appear in the wayyy wrong area. All of these errors are for future me, as I am too tired to work on this since its late and my devlog timer is approaching 10hrs. hopefully i can have the deer enemy up and running by tomorrow! Also fixing these errors with this deer enemy will help with every enemy, as these errors arent really specific to the deer. Its just sprite/animation stuff that should apply to the EnemyBase. Also i might downscale this game to be a gauntlet of combats rather than a full scale short demo rpg (i’ve been busy!). Time is ticking. I gotta lock in bruh. And I find it really fun making enemies! And also backgrounds seem like a pain too draw… (drawing is hard)."}, {"post_id": 37808, "ts": "2026-07-30T19:13:19Z", "hours": 4.8125, "text": "Devlog! The Combat Event Bus. I got it working for combat!! All the cross script combat communication events are carried out cleanly by a combat event bus instance! No longer is there any direct script references, for the most part. Out-of-combat to in-combat events are still done this way, which I will link up to a global Event Bus. Which will be an issue for me in the future when I tackle “The Overworld”.. Also, I tried to get the dialogue system working for combat. Combat dialogue. They’ll be little speech bubbles that can be triggered by certain attacks an enemy uses or to its hp changing. This was really painful. Especially the bugs regarding text size. The canvas is huge, so I had to use world space and then finick with the sizes and stuff even more. I got it to work somewhat. It uses the text runner system on a text bubble prefab which turns active once a trigger is met. An issue is that it can only run one dialogue at a time, which is something that I’ll fix later. (that one line of dialogue that is illegible in the first image is the enemy being attacked two times in quick succession, leading to the text runner to try to write two messages at the same time. )"}, {"post_id": 34882, "ts": "2026-07-25T23:19:05Z", "hours": 4.5631, "text": "Dev Log what ever (i should start numbering these + locking in on them) The dialogue system works in isolation. It has no triggers right now (and probably not until I can get the overworld scene management working), but it can start itself up and shut itself down. It reads off of a json file in order to do… stuff! Like get default sprites, future nodes/choice nodes, and the raw text used for commands. The command system works wonderfully. Also choices are implemented. If a node has choices, it will load them on premade UIs and you can pick them! I would post a screenshot but I decided that I wanted to rewrite things. The entire combat event system. This is what happens to me for wanting to make a game while learning Unity. I learned of Event Buses and I realized that it would be pretty useful if I wanted to add future features. It would also be good practice for the raw implementation of Event Buses in the overworld system (which will be my next daunting task). So I’ve currently started the process of destroying all my events and replacing them with structs for the event bus to handle. Which is what you can see in the image below."}, {"post_id": 33223, "ts": "2026-07-22T22:47:58Z", "hours": 9.3883, "text": "Commenting + renaming + a lil optimization n clean up + started working on a dialogue system similair to undertale 👼 (with the taking commands from raw txts to make things look pretty) so far for the dialogue system i have a dialogue parser (to extract commands), a dialogue runner (to run dialogue and execute commands in runtime) and a bunch of other little classes to manage dialogue (nodes , graph, sprite lib.). Also that combat dialogue thingy i did in the very beginning is getting an overhaul to adapt to this system, but I haven’t really touched that yet. TODO: something to handle choices."}, {"post_id": 29214, "ts": "2026-07-15T23:24:24Z", "hours": 3.1825, "text": "Combat Stuff%11%5!5%!!! Did some good progress on player side of combat. Putting the pieces together. Combat works very roughly, but there are still things to work on! Like polish–everything is very barebones. Its just ui buttons and implementation of the attacks and making the inventory work. Also enemy targetting!! For your attacks. Barely bare bones. And ALOT of features are hardcoded for easier testing. Need to sort that out. But the combat loop works, for the most part. Almost. Also there are some bugs with turn turning. Like player turns running as enemy turns some times. But that is an issue for later."}, {"post_id": 28504, "ts": "2026-07-14T19:58:31Z", "hours": 3.0689, "text": "Player UI + inventory stuff Started working on the player UI for player turns. EVERYTHING is placeholder sprites by the way–I hope the UI doesn’t actually look like that. Right now I’m just trying to get functionality. The little cats are item icons and status icons. More over I started working on the inventory system! It is implemented some bit into the UI. I need to allow for item functionality. Right now all the items do is just exist and look pretty in the red box."}, {"post_id": 27281, "ts": "2026-07-12T18:39:29Z", "hours": 6.3903, "text": "Did some stuff. First– finished status implementation/stacks/stuff + fixing issues with HP (yay). I’ve also started on the player side of things… I started working on the first two attacks that the player will do that WILL run on a quick-time system similar to combat (Mario?). This honestly took way too long in my opinion with all the math and stuff. But it works! Also all player-side combat is currently in the same file, so I will probably change that later."}, {"post_id": 25471, "ts": "2026-07-09T19:11:47Z", "hours": 3.1431, "text": "To distract myself from the inevitable task of creating the player side and combat UI, I made a barely functioning main menu and started working on a status system. I got the basic statuses down and their ticking/functionality. I need to implement them into combat now and fix some small bugs. And then I’ll have nothing to do But player side combat and the combat UI."}, {"post_id": 23777, "ts": "2026-07-06T22:17:36Z", "hours": 2.9403, "text": "Finished enemy turn quick-time events. Now i jsut need player turns and UI."}, {"post_id": 21089, "ts": "2026-07-02T21:39:22Z", "hours": 3.3333, "text": "Working more on the combat system. Got the base instance of dudes in combat and their variables/methods and stuff. Probably need to clean everything up and then mesh it together to be turn based?"}, {"post_id": 18788, "ts": "2026-06-30T00:12:37Z", "hours": 1.9381, "text": "Attempting to start timed action based combat system.."}, {"post_id": 17987, "ts": "2026-06-28T23:08:55Z", "hours": 0.7161, "text": "Basic player movement + my editor’s autofill broke so i spent way too long trying to fix it.."}]...
|
Title: COMBAT GAUNTLETS! by @zarthy1155 | Stardanc Title: COMBAT GAUNTLETS! by @zarthy1155 | Stardance
Devlogs:
Basic player movement + my editor’s autofill broke so i spent way too long trying to fix it..
Attempting to start timed action based combat system..
Working more on the combat system. Got the base instance of dudes in combat and their variables/methods and stuff. Probably need to clean everything up and then mesh it together to be turn based?
Finished enemy turn quick-time events. Now i jsut need player turns and UI.
To distract myself from the inevitable task of creating the player side and combat UI, I made a barely functioning main menu and started working on a status system. I got the basic statuses down and their ticking/functionality. I need to implement them into combat now and fix some small bugs. And then I’ll have nothing to do But player side combat and the combat UI.
Did some stuff. First– finished status implementation/stacks/stuff + fixing issues with HP (yay). I’ve also started on the player side of things… I started working on the first two attacks that the player will do that WILL run on a quick-time system similar to combat (Mario?). This honestly took way too long in my opinion with all the math and stuff. But it works! Also all player-side combat is currently in the same file, so I will probably change that later.
Player UI + inventory stuff Started working on the player UI for player turns. EVERYTHING is placeholder sprites by the way–I hope the UI doesn’t actually look like that. Right now I’m just trying to get functionality. The little cats are item icons and status icons. More over I started working on the inventory system! It is implemented some bit into the UI. I need to allow for item functionality. Right now all the items do is just exist and look pretty in the red box.
Combat Stuff%11%5!5%!!! Did some good progress on player side of combat. Putting the pieces together. Combat works very roughly, but there are still things to work on! Like polish–everything is very barebones. Its just ui buttons and implementation of the attacks and making the inventory work. Also enemy targetting!! For your attacks. Barely bare bones. And ALOT of features are hardcoded for easier testing. Need to sort that out. But the combat loop works, for the most part. Almost. Also there are some bugs with turn turning. Like player turns running as enemy turns some times. But that is an issue for later.
Commenting + renaming + a lil optimization n clean up + started working on a dialogue system similair to undertale 👼 (with the taking commands from raw txts to make things look pretty) so far for the dialogue system i have a dialogue parser (to extract commands), a dialogue runner (to run dialogue and execute commands in runtime) and a bunch of other little classes to manage dialogue (nodes , graph, sprite lib.). Also that combat dialogue thingy i did in the very beginning is getting an overhaul to adapt to this system, but I haven’t really touched that yet. TODO: something to handle choices.
Dev Log what ever (i should start numbering these + locking in on them) The dialogue system works in isolation. It has no triggers right now (and probably not until I can get the overworld scene management working), but it can start itself up and shut itself down. It reads off of a json file in order to do… stuff! Like get default sprites, future nodes/choice nodes, and the raw text used for commands. The command system works wonderfully. Also choices are implemented. If a node has choices, it will load them on premade UIs and you can pick them! I would post a screenshot but I decided that I wanted to rewrite things. The entire combat event system. This is what happens to me for wanting to make a game while learning Unity. I learned of Event Buses and I realized that it would be pretty useful if I wanted to add future features. It would also be good practice for the raw implementation of Event Buses in the overworld system (which will be my next daunting task). So I’ve currently started the process of destroying all my events and replacing them with structs for the event bus to handle. Which is what you can see in the image below.
Devlog! The Combat Event Bus. I got it working for combat!! All the cross script combat communication events are carried out cleanly by a combat event bus instance! No longer is there any direct script references, for the most part. Out-of-combat to in-combat events are still done this way, which I will link up to a global Event Bus. Which will be an issue for me in the future when I tackle “The Overworld”.. Also, I tried to get the dialogue system working for combat. Combat dialogue. They’ll be little speech bubbles that can be triggered by certain attacks an enemy uses or to its hp changing. This was really painful. Especially the bugs regarding text size. The canvas is huge, so I had to use world space and then finick with the sizes and stuff even more. I got it to work somewhat. It uses the text runner system on a text bubble prefab which turns active once a trigger is met. An issue is that it can only run one dialogue at a time, which is something that I’ll fix later. (that one line of dialogue that is illegible in the first image is the enemy being attacked two times in quick succession, leading to the text runner to try to write two messages at the same time. )
DEVLOG oh my god figuring out this animation stuff is such a pain. I was working on the first enemy. Not sure about the direction of the game, but I have an idea for three enemies: a crow, a deer, and a man. I tried to make the deer. I spent forever on animating in unity using its skeletal system and forever more on trying to incorporate animations via scripting for attacks. Right now, they don’t even work. unfortunately. But The animations load? The idle ones. And for some reason the attack animations all happen for every enemy once the enemy turn ends. And also applied statuses and dialogue bubbles appear in the wayyy wrong area. All of these errors are for future me, as I am too tired to work on this since its late and my devlog timer is approaching 10hrs. hopefully i can have the deer enemy up and running by tomorrow! Also fixing these errors with this deer enemy will help with every enemy, as these errors arent really specific to the deer. Its just sprite/animation stuff that should apply to the EnemyBase. Also i might downscale this game to be a gauntlet of combats rather than a full scale short demo rpg (i’ve been busy!). Time is ticking. I gotta lock in bruh. And I find it really fun making enemies! And also backgrounds seem like a pain too draw… (drawing is hard).
DEVLOG. I FIXED the enemy Animations and I ALSO fixed the. The thing where. The status icon and the dialogue actually appears over their heads now. The attacks and wind-up works. And Like. MY DEER. He is finally finished. He works. His animations are synced enough to be dodgeable. And his dialogue appears over his head and his statuses do too. It was a pretty simple fix (changing the transform parenting of the dialogue and status prefabs) but it took WAY too long for me. Because. I forgot the animator existed. And it was making like two more bugs if i tried to fix one. But I hardcoded it to work (well not really hardcoded. The head sprite just ALWAYS has to be bone_19. well it is hardcoding i suppose but im NOT going to animate the entire thing again and im too lazy to find a fix. This band-aid fix will work trust). The animation issues were just due to where I started the animations within the enemy turn + not putting yield returns to actually delay things (very stupid of me). MY FIRST enemy is done. Now. I just have to. do a lot of things THINGS I WANT TO DO: items. OVERWORLD (this will take the longest prob) (9 gauntlets / scenes) ~7 enemies across 9 gauntlets RPG was way too ambitious. How naive i was. I didnt know I would have to be busy over the summer. going out and doing j#bs (disgusting). i was under the impression i would be quick, and if not, i’d have all the time in the world this summer. sigh....
|
1792893270.1616306
|
1793757270.1616306
|
|
23764
|
Onlinja by @DoMax | Stardance
|
DoMax
|
2
|
55.02
|
946
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T20:31:45Z", "hours": 23.0, "multiplier": 17.29, "payout": 394, "blessing": "neutral", "text": "This is Onlinja, and it’s probably one of the best “easy to understand, hard to master” board games you will ever play. It’s built as a passion project, taking the game Linja as inspiration, but adapting it to be accessible anytime, anywhere! This is the second ship and it focuses entirely on making the most out of this app as possible, without making it feel janky. New additions are heavily impacted by community’s own responses to what should be improved, such as clearer indication of turns, tutorial progress saving, and a bit of my own additions, such as the Settings tab and Post-Game Statistics. While the game itself was kept true to its original core look and feel, the codebase underneath was heavily redefined! With new architecture decisions and SoC (separation of concerns) implementations, now it’s not only easy to expand the code, but easy to use in-person too! I really hope you will like this project and show much support for it. Let’s grow a beautiful and open source world together!", "repo": "https://github.com/domasles/onlinja", "demo": "https://onlinja.domax.lt"}, {"ship_num": 2, "ts": "2026-06-28T21:08:16Z", "hours": 29.0, "multiplier": 19.24, "payout": 552, "blessing": "neutral", "text": "After gifting Linja game to my dad on father’s day, I fell in love with it. And I thought to myself - what if there was a digital version? There was none when I started working on the project, so I decided to give it a shot myself. Just imagine - two players face off across eight parallel lanes, calculating every shift in momentum, where one misstep can cause the opponent to leap past. A game, where you need to balance your positions and plan your moves. And, of course, have fun! Inspired by the classic board game Linja, Onlinja brings minimalist, tactical warfare straight to your pocket. Onlinja features Aggressive (one piece moves twice) and Strategic (two different pieces move) gameplay modes, smart UI, bots, and a lightweight mono-repository utilizing React Native/Expo for the frontend, plus a way to both learn the game and play with your friends, not only against highly competitive bots. This game is very portable, as it was designed to be responsive to your screen size. You can try out the Live Demo instantly at https://onlinja.domax.lt Happy playing! I hope you enjoy this game and become a fan of Onlinja yourself!", "repo": "https://github.com/domasles/onlinja", "demo": "https://onlinja.domax.lt"}]...
|
[{"post_id": 81846, "ts": "202 [{"post_id": 81846, "ts": "2026-10-22T18:23:23Z", "hours": 3.0192, "text": "Quality of life improvements I’m happy to report work on Onlinja took one more step further! Before Stardance closes… After contacting Steffen Spiele directly and telling them about Onlinja, a love letter to one of their games, we settled on a mutual opinion of lack of attribution. Luckily, I managed to implement a distinct “credits” tab without casualties :) And, I am happy to present improvements for both developers and users!! 1. User-end improvements Taking a better look at your newest suggestions, I noticed 2 issues: Unclear tutorial Bland highlight colors I tried tackling both. While I couldn’t shorten the tutorial (as I’m not willing to update the rule spec), a new “Try it out” button was added to notify the player about an action block. The colors were boosted to have better distinction compared to standard lanes :) A spinning loader wheel now indicates when the app is ready to use. 2. Dev-end improvements To make Onlinja’s source also feel welcoming for developers, naming conventions, redundant code and skills were upgraded. Imports were refactored for code that’s easier to read and navigate, SoC is a priority while developing (to not make a mess). Expo 57 makes it easier for anyone to develop and test Onlinja, as newer Expo Go versions expect strict Expo 57+ compatibility. Centralized animation and other systems help when making consistent changes :) Conclusion This devlog (likely the last) demonstrates the most mature version of Onlinja singleplayer. As virtually no time is left before Stardance closes, and I won’t be able to implement multiplayer services, I want to conclude this project by saying a big Thank You to every supported and tester, and I hope I can see a big community grow when multiplayer eventually releases :P"}, {"post_id": 21718, "ts": "2026-07-03T20:12:55Z", "hours": 8.8967, "text": "You want it, I got it! How feedback from the community helped me improve Onlinja When I shipped Onlinja, I did not think about much. I had plans, and I still do, but the most important direction this project went to, I think, is the direction real users wanted the project to evolve in. I am super glad that the community’s notes are actually reported back to the developers. And, to my surprise, many opinions were highly similar. This shows 2 aspects: I am doing something well, when most of the personalized reviews say they love the same features. I missed some crucial points, when the same reviews point out similar improvements to be made, even without knowing what others pointed out. Happily, I wasn’t lazy and I read through the opinions. Not only did they make my heart warmer, but also shown that I was not moving forward with the right features. What exactly did I improve? Although the UI/UX experience was regarded as one of THE best by some, it lacked one thing - clarity when playing. Whose turn was it? No clear indication when a turn changed if you didn’t notice small text changing in the header when staring down to a monitor for minutes straight. This is now fixed. Also, a very simple addition included a “save and resume” feature within the tutorial. Now, even if you refresh the tab or browser crashes, you can’t lose tutorial progress! What won’t likely be implemented and why that makes me sad All of the things I said seem great - feedback-based improvements, better clarity and quality-of-life updates that make a project be worth the time spent creating it. But the 2 features I wish I could’ve added were: BotLabs (custom bot maker) Post-game analysis (like in Chess.com ) First feature was impossible to make the way I wanted due to how the game’s layout is constructed. I sacrificed this feature for a better overall coding experience. It’s not as vital for the project to live, but sad that I could not implement it. The second feature was entirely possible, but very difficult to plan out. What should be the data flow? What controls what? That led to me making a compromise - post-game statistics, that tell you these things: How many moves each player took? How many extra turns each player got? How many pieces ran all the way to the opponent’s base? And I think it’s a fair update :) In conclusion I am very pleased with the reviews and Stardance in general. I get to create what I love and share it with people who might love it as well. I am happy that the feedback made me grow stronger and I am thankful for every single person that helped me improve this project anyhow, opening my eyes on what were the real issues. This project is one of my most ambitious yet, and if you want to check it out, the latest version is out at Onlinja’s official site ! If you can, also follow me and star the project on GitHub !"}, {"post_id": 20305, "ts": "2026-07-01T21:21:25Z", "hours": 8.6608, "text": "Control and power - that’s all that I’m after! This devlog brings new ways to control your experience with Onlinja not only as a user, but also a developer. Great news all along! With the latest update in Onlinja, new systems have launched: Settings System: A system where you can tweak your settings and default preferences for when you launch the app (also, replay the tutorial, as the old dedicated tab is now gone). Tab System: More important for developers, but now the development of Onlinja can speed up significantly because of a convenient tab making system. Major Architecture Overhaul: By working on the imports and general structure, the codebase can feel free of 400-lined files that choked the app. New Animations: Although it’s a side effect of that new Tab System, it makes the tab animations feel consistent, and the UX undoubtedly better. Mobile app issues fixed: Even when a dedicated app is not Onlinja’s primary choice for delivery, I will not abandon it as that’s why I picked React Native instead of normal React (this, and animation issues with normal React). So, now the mobile port functions almost exactly as intended, but if you want to have the designed experience, and are a fan of dedicated apps, you can always click “Add to home screen” in your browser! That sounds great! What about BotLabs? BotLabs are currently in the works. I am still thinking about how to make the architecture right and the UX smooth, but they’re soon to be implemented, letting users customize bots and make Bot vs Bot matches or have personalized bots to play against. A playable demo is live with latest changes! Check out Onlinja’s official site !"}, {"post_id": 18292, "ts": "2026-06-29T12:06:12Z", "hours": 5.2406, "text": "PWA and updated experience That’s right, now you can enjoy Onlinja as a pseudo-standalone app! By finally implementing PWA (Progressive Web Application) support to Onlinja, you can simply install it from any mobile browser. Updated experience? What’s it about? This update features several enhancements: The tutorial was revamped to be easier to follow for anyone. This means no more confusing terms and big text chunks where unnecessary. The app is now excluded from any dark mode settings (possible that some rare instances might change the color scheme, but popular plugins and systems should not alter any styling). Slight performance and UX tweaks to make the game feel smoother. Any more updates planned? Yes! I want to implement an analysis tool to every match or “Bot Labs” where everyone can tweak bot parameters and experiment with the algorithms freely. A second ship should be issued when these are implemented. Online crossplay isn’t in any of my near-future plans. A huge thank you for everyone that supports, tests and anyhow helps me build this project!"}, {"post_id": 17273, "ts": "2026-06-28T00:12:42Z", "hours": 9.8469, "text": "How to play this game?? Great news! No more wondering of how this game works! Today I implemented a fully working tutorial system to Onlinja, and it tells everyone about any aspect of the game you could think of. Onboarding will be really easy now! What do I see there? A ship? Correct! Only a good README, logos and deployment left until a ship can be made. The rest of time will be dedicated just for that. What about standalone, non-web builds? This is React Native! Well, I have some good news and some bad news. Good news is that when I tested it, the standalone app build succeeded. Bad news is that it’s full of visual bugs and inconsistencies with the web build. So web builds will be the primary target of this app before I dedicate a separate week just for transformation to a unified solution. But I see no priority for this as web builds work wonderfully!"}, {"post_id": 15995, "ts": "2026-06-25T23:41:51Z", "hours": 7.2086, "text": "A very friendly update! Want to play Onlinja with your friends? No problem, not anymore! Today I finalized implementing the Pass & Play mode, together with some UI and bot logic enhancements. Gameplay is smoother than ever, offering a very pleasing experience! UI upgrades? Finally! After many thoughts of making the game not feel like a slideshow with very static-feeling updates, this devlog’s changes also include a whole new animation overhaul! With fade transitions and more movement the app finally feels responsive. Anything more? Yes! An architectural refactor and a bot logic upgrade was issued. This makes the game both easier to develop and the bot less prone to errors. Previously, if the second move of a turn was illegal, the bot (and the whole game) had no way of knowing and would just freeze. Today it’s been fixed! So, when’s the ship? Soon. Only thing left is a tutorial before playing to easily onboard everyone. As expected, I can’t dedicate myself fully towards this project and the first ship won’t include any networking code. But it might include an analysis tool inspired by chess.com , so stay tuned!"}, {"post_id": 15302, "ts": "2026-06-24T21:03:43Z", "hours": 3.1514, "text": "A bot-tacular evening! What’s new in today’s devlog Finally I have implemented a working bot within Onlinja - it’s configurable, and damn it plays well! The reason it can be so competitive is because it uses a deep-search minimax algorithm, always assuming you make the best move and making the best move itself (with some randomness sparkled on top). Also, it reacts to awards, where more benefit created for itself through several moves, even if 2 distinct move sequences create same amount of value in points, is valued higher for the bot. This helps create insane accuracy, exploitation of game features and more! Note: there’s an easter egg hidden somewhere in plain sight, try to find it! Next steps Aside from the bot, I made the game capable of receiving different controller settings. A controller is the setting of who controls your opponent, current available settings being HUMAN, BOT and SERVER (for future implementation). As the next step I’m planning to make a local one-phone mode to share like a physical board across 2 people. Also, a pre-game tutorial awaits. I’d very much love to implement more whacky gamemodes, that would include powerups, more configuration, different piece setups and more. But I am not sure how much time that would cost me. Conclusion With the first ship of Onlinja coming closer everyday, I am trying to make the user experience as polished as can be. I really hope everyone playing will enjoy this game as much as I do!"}, {"post_id": 14373, "ts": "2026-06-23T14:11:23Z", "hours": 5.3936, "text": "User interface has been implemented! The good After long hours of development, countless design choices gone through and many thoughts of how to structure the project, its base has been laid and it finally features a working UI with an easy to understand UX. The bad It wasn’t easy to set correct boundaries and enginner instructions for AI in a way that it doesn’t have too much freedom hallucinating. After many iterations of edits within AGENTS.md file I hope it won’t eat as much time ever again (but I don’t know). Even though everything seems fine so far, nothing is promised this early in development, and the instruction document may change. What does the current code offer? In the current version of Onlinja players can’t do much - only play with themselves. This was done just to show off how the game will look. Next devlog will most likely include the full bot implementation. What are my further plans? The first ship most likely won’t have any networking code (unless I can learn websockets within the next 5 days), but will offer a human-like bot. Subsequent ships will offer enhanced online capabilities, accounts, leveling, and friend systems, as well as an anonymous mode. I want to make the game similar in mechanics to chess.com - a fully fledged Linja-inspired game, with an online hub!"}, {"post_id": 13415, "ts": "2026-06-21T23:28:57Z", "hours": 3.195, "text": "Today I started working on my project Onlinja! Storytime When I was searching gift ideas for father’s day I suddenly thought of board games. He loves them! And was learning chess at that time too. Having no exact ideas in mind, I went searching. Many games were too complex for me to teach, and I wanted that game to be 3D-printable. I stumbled upon Linja - an abstract and simple strategy game for 2 players. It’s no too popular, but I fell in love with it, made 3D files myself and printed it out! After gifting it, I feel like it’s very much underrated, so I got an idea! The idea The idea is simple - making a local bot and online application that lets anyone enjoy a Linja-inspired game from their phones and browsers! The plan The plan is to take React Native and target web, Android and iOS builds of the app, code a server architecture and a bot algorithm. Why’s it a great project? Not only will I be able to develop my skills in agent harness engineering, testing, web deelopment and websockets (things I haven’t touched yet), but the completed project will be fully functional and entertaining! I have nothing to show off yet, as only the initialization stage is being completed, but I will update you all as soon as I finish doing something!"}]...
|
Title: Onlinja by @DoMax | Stardance
Devlogs:
Tod Title: Onlinja by @DoMax | Stardance
Devlogs:
Today I started working on my project Onlinja! Storytime When I was searching gift ideas for father’s day I suddenly thought of board games. He loves them! And was learning chess at that time too. Having no exact ideas in mind, I went searching. Many games were too complex for me to teach, and I wanted that game to be 3D-printable. I stumbled upon Linja - an abstract and simple strategy game for 2 players. It’s no too popular, but I fell in love with it, made 3D files myself and printed it out! After gifting it, I feel like it’s very much underrated, so I got an idea! The idea The idea is simple - making a local bot and online application that lets anyone enjoy a Linja-inspired game from their phones and browsers! The plan The plan is to take React Native and target web, Android and iOS builds of the app, code a server architecture and a bot algorithm. Why’s it a great project? Not only will I be able to develop my skills in agent harness engineering, testing, web deelopment and websockets (things I haven’t touched yet), but the completed project will be fully functional and entertaining! I have nothing to show off yet, as only the initialization stage is being completed, but I will update you all as soon as I finish doing something!
User interface has been implemented! The good After long hours of development, countless design choices gone through and many thoughts of how to structure the project, its base has been laid and it finally features a working UI with an easy to understand UX. The bad It wasn’t easy to set correct boundaries and enginner instructions for AI in a way that it doesn’t have too much freedom hallucinating. After many iterations of edits within AGENTS.md file I hope it won’t eat as much time ever again (but I don’t know). Even though everything seems fine so far, nothing is promised this early in development, and the instruction document may change. What does the current code offer? In the current version of Onlinja players can’t do much - only play with themselves. This was done just to show off how the game will look. Next devlog will most likely include the full bot implementation. What are my further plans? The first ship most likely won’t have any networking code (unless I can learn websockets within the next 5 days), but will offer a human-like bot. Subsequent ships will offer enhanced online capabilities, accounts, leveling, and friend systems, as well as an anonymous mode. I want to make the game similar in mechanics to chess.com - a fully fledged Linja-inspired game, with an online hub!
A bot-tacular evening! What’s new in today’s devlog Finally I have implemented a working bot within Onlinja - it’s configurable, and damn it plays well! The reason it can be so competitive is because it uses a deep-search minimax algorithm, always assuming you make the best move and making the best move itself (with some randomness sparkled on top). Also, it reacts to awards, where more benefit created for itself through several moves, even if 2 distinct move sequences create same amount of value in points, is valued higher for the bot. This helps create insane accuracy, exploitation of game features and more! Note: there’s an easter egg hidden somewhere in plain sight, try to find it! Next steps Aside from the bot, I made the game capable of receiving different controller settings. A controller is the setting of who controls your opponent, current available settings being HUMAN, BOT and SERVER (for future implementation). As the next step I’m planning to make a local one-phone mode to share like a physical board across 2 people. Also, a pre-game tutorial awaits. I’d very much love to implement more whacky gamemodes, that would include powerups, more configuration, different piece setups and more. But I am not sure how much time that would cost me. Conclusion With the first ship of Onlinja coming closer everyday, I am trying to make the user experience as polished as can be. I really hope everyone playing will enjoy this game as much as I do!
A very friendly update! Want to play Onlinja with your friends? No problem, not anymore! Today I finalized implementing the Pass & Play mode, together with some UI and bot logic enhancements. Gameplay is smoother than ever, offering a very pleasing experience! UI upgrades? Finally! After many thoughts of making the game not feel like a slideshow with very static-feeling updates, this devlog’s changes also include a whole new animation overhaul! With fade transitions and more movement the app finally feels responsive. Anything more? Yes! An architectural refactor and a bot logic upgrade was issued. This makes the game both easier to develop and the bot less prone to errors. Previously, if the second move of a turn was illegal, the bot (and the whole game) had no way of knowing and would just freeze. Today it’s been fixed! So, when’s the ship? Soon. Only thing left is a tutorial before playing to easily onboard everyone. As expected, I can’t dedicate myself fully towards this project and the first ship won’t include any networking code. But it might include an analysis tool inspired by chess.com , so stay tuned!
How to play this game?? Great news! No more wondering of how this game works! Today I implemented a fully working tutorial system to Onlinja, and it tells everyone about any aspect of the game you could think of. Onboarding will be really easy now! What do I see there? A ship? Correct! Only a good README, logos and deployment left until a ship can be made. The rest of time will be dedicated just for that. What about standalone, non-web builds? This is React Native! Well, I have some good news and some bad news. Good news is that when I tested it, the standalone app build succeeded. Bad news is that it’s full of visual bugs and inconsistencies with the web build. So web builds will be the primary target of this app before I dedicate a separate week just for transformation to a unified solution. But I see no priority for this as web builds work wonderfully!
PWA and updated experience That’s right, now you can enjoy Onlinja as a pseudo-standalone app! By finally implementing PWA (Progressive Web Application) support to Onlinja, you can simply install it from any mobile browser. Updated experience? What’s it about? This update features several enhancements: The tutorial was revamped to be easier to follow for anyone. This means no more confusing terms and big text chunks where unnecessary. The app is now excluded from any dark mode settings (possible that some rare instances might change the color scheme, but popular plugins and systems should not alter any styling). Slight performance and UX tweaks to make the game feel smoother. Any more updates planned? Yes! I want to implement an analysis tool to every match or “Bot Labs” where everyone can tweak bot parameters and experiment with the algorithms freely. A second ship should be issued when these are implemented. Online crossplay isn’t in any of my near-future plans. A huge thank you for everyone that supports, tests and anyhow helps me build this project!
Control and power - that’s all that I’m after! This devlog brings new ways to control your experience with Onlinja not only as a user, but also a developer. Great news all along! With the latest update in Onlinja, new systems have launched: Settings System: A system where you can tweak your settings and default preferences for when you launch the app (also, replay the tutorial, as the old dedicated tab is now gone). Tab System: More important for developers, but now the development of Onlinja can speed up significantly because of a convenient tab making system. Major Architecture Overhaul: By working on the imports and general structure, the codebase can feel free of 400-lined files that choked the app. New Animations: Although it’s a side effect of that new Tab System, it makes the tab animations feel consistent, and the UX undoubtedly better. Mobile app issues fixed: Even when a dedicated app is not Onlinja’s primary choice for delivery, I will not abandon it as that’s why I picked React Native instead of normal React (this, and animation issues with normal React). So, now the mobile port functions almost exactly as intended, but if you want to have the designed experience, and are a fan of dedicated apps, you can always click “Add to home screen” in your browser! That sounds great! What about BotLabs? BotLabs are currently in the works. I am still thinking about how to make the architecture right and the UX smooth, but they’re soon to be implemented, letting users customize bots and make Bot vs Bot matches or have personalized bots to play against. A playable demo is live with latest changes! Check out Onlinja’s official site !
You want it, I got it! How feedback from the community helped me improve Onlinja When I shipped Onlinja, I did not think about much. I had plans, and I still do, but the most important direction this project went to, I think, is the direction real users wanted the project to evolve in. I am super glad that the community’s notes are actually reported back to the developers. And, to my surprise, many opinions were highly similar. This shows 2 aspects: I am doing something well, when most of the personalized reviews say they love the same features. I missed some crucial points, when the same reviews point out similar improvements to be made, even without knowing what others pointed out. Happily, I wasn’t lazy and I read through the opinions. Not only did they make my heart warmer, but also shown that I was not moving forward with the right features. What exactly did I improve? Although the UI/UX experience was regarded as one of THE best by some, it lacked one thing - clarity when playing. Whose turn was it? No clear indication when a turn changed if you didn’t notice small text changing in the header when staring down to a monitor for minutes straight. This is now fixed. Also, a very simple addition included a “save and resume” feature within the tutorial. Now, even if you refresh the tab or browser crashes, you can’t lose tutorial progress! What won’t likely be implemented and why that makes me sad All of the things I said seem great - feedback-based improvements, better clarity and quality-of-life updates that make a project be worth the time spent creating it. But the 2 features I wish I could’ve added were: BotLabs (custom bot maker) Post-game analysis (like in Chess.com ) First feature was impossible to make the way I wanted due to how the game’s layout is constructed. I sacrificed this feature for a better overall coding experience. It’s not as vital for the project to live, but sad that I could not implement it. The second feature was entirely possible, but very difficult to plan out. What should be the data flow? What controls what? That led to me making a compromise - post-game statistics, that tell you these things: How many moves each player took? How many extra turns each player got? How many pieces ran all the way to the opponent’s base? And I think it’s a fair update :) In conclusion I am very pleased with the reviews and Stardance in general. I get to create what I love and share it with people who might love it as well. I am happy that the feedback made me grow stronger and I am thankful for every single person that helped me improve this project anyhow, opening my eyes on what were the real issues. This project is one of my most ambitious yet, and if you want to check it out, the latest version is out at Onlinja’s official site ! If you can, also follow me and star the project on GitHub !
Quality of life improvements I’m happy to report work on Onlinja took one more step further! Before Stardance closes… After contacting Steffen Spiele directly and telling them about Onlinja, a love letter to one of their games, we settled on a mutual opinion of lack of attribution. Luckily, I managed to implement a distinct “credits” tab without casualties :) And, I am happy to present improvements for both developers and users!! 1. User-end improvements Taking a better look at your newest suggestions, I noticed 2 issues: Unclear tutorial Bland highlight colors I tried tackling both. While I couldn’t shorten the tutorial (as I’m not willing to update the rule spec), a new “Try it out” button was added to notify the player about an action block. The colors were boosted to have better distinction compared to standard lanes :) A spinning loader wheel now indicates when the app is ready to use. 2. Dev-end improvements To make Onlinja’s source also feel welcoming for developers, naming conventions, redundant code and skills were upgraded. Imports were refactored for code that’s easier to read and navigate, SoC is a priority while developing (to not make a mess). Expo 57 makes it easier for anyone to develop and test Onlinja, as newer Expo Go versions expect strict Expo 57+ compatibility. Centralized animation and other systems help when making consistent changes :) Conclusion This devlog (likely the last) demonstrates the most mature version of Onlinja singleplayer. As virtually no time is left before Stardance closes, and I won’t be able to implement multiplayer services, I want to conclude this project by saying a big Thank You to every supported and tester, and I hope I can see a big community grow when multiplayer eventually releases :P
Ships:
After gifting Linja game to my dad on father’s day, I fell in love with it. And I thought to myself - what if there was a digital version? There was none when I started working on the project, so I decided to give it a shot myself. Just imagine - two players face off across eight parallel lanes, calculating every shift in momentum, where one misstep can cause the opponent to leap past. A game, where you need to balance your positions and plan your moves. And, of course, have fun! Inspired by the classic board game Linja, Onlinja brings minimalist, tactical warfare straight to your pocket. Onlinja features Aggressive (one piece moves twice) and Strategic (two different pieces move) gameplay modes, smart UI, bots, and a lightweight mono-repository utilizing React Native/Expo for the frontend, plus a way to both learn the game and play with your friends, not only against highly competitive bots. This game is very portable, as it was designed to be responsive to your screen size. You can try out the Live Demo instantly at https://onlinja.domax.lt Happy playing! I hope you enjoy this game and become a fan of Onlinja yourself!
This is Onlinja, and it’s probably one of the best “easy to understand, hard to master” board games you will ever play. It’s built as a passion project, taking the game Linja as inspiration, but adapting it to be accessible anytime, anywhere! This is the second ship and it focuses entirely on making the most out of this app as possible, without making it feel janky. New additions are heavily impacted by community’s own responses to what should be improved, such as clearer indication of turns, tutorial progress saving, and a bit of my own additions, such as the Settings tab and Post-Game Statistics. While the game itself was kept true to its original core look and feel, the codebase underneath was heavily redefined! With new architecture decisions and SoC (separation of concerns) implementations, now it’s not only easy to expand the code, but easy to use in-person too! I really hope you will like this project and show much support for it. Let’s grow a beautiful and open source world together!...
|
1792997410.4637108
|
1793083810.4637108
|
|
406
|
MemeBoard by @tonymac129 | Stardance
|
tonymac129
|
1
|
55.0
|
994
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T22:02:36Z", "hours": 55.0, "multiplier": 18.15, "payout": 994, "blessing": "neutral", "text": "I finally finished making MemeBoard after periodically working on it over the past 3 months! MemeBoard is an accessible and easy to use fullstack online social platform for posting, sharing, and exploring all kinds of memes. There are many different post interaction features such as voting, commenting, saving, reacting, and sharing, it’s essentially a simple Reddit clone that’s exclusively for memes. You can browse, filter, and search through memes easily by choosing different sorting options and exploring the different tags and collections. It also has social features like following users and customizing your profile, as well as a full-featured realtime chat (mini Discord clone) where you can send content and chat with your friends or interact with MemeBot (which is not an LLM, it’s just a random thing I thought was fun to implement)! The entire website is also fully responsive and functional on all screen sizes with smooth loading and transition animations, and you can toggle between dark and light modes. I got bored of the project halfway through it to work on other stuff, but I ended up coming back more than a month later to finally finish everything and polish it to ship, and the final result is definitely very satisfying and rewarding for me, hopefully you’ll like it :)", "repo": "https://github.com/tonymac129/memeboard", "demo": "https://memeboard-app.vercel.app"}]...
|
[{"post_id": 63210, "ts": "202 [{"post_id": 63210, "ts": "2026-09-06T21:49:05Z", "hours": 1.5575, "text": "Final MemeBoard devlog! I finally finished MemeBoard after working on it over the past 3 months! I’ve implemented all the features I originally planned to make, as well as added a ton of other stuff to make the project interesting and fun to use I mostly just polished the project in this update, so there isn’t actually anything new other than the simple “m” logo/favicon I added to the nav bar and footer Added a top loading bar indicator to show the page is responsive and is actively loading since some pages take a bit of time to fetch data, and I’m too lazy to implement suspense/loading skeleton and all that Clicking on things that require the user to be signed in now redirects you to the sign in page so it’s more user friendly and not confusing Updated the README to document detailed information, all the features, setup instructions, and everything else about the project Fixed an annoying issue where MemeBot didn’t respond at all or took a long time by simply deleting an intentional timeout and the bug was somehow fixed Updated styling and layout components"}, {"post_id": 62607, "ts": "2026-09-06T02:31:58Z", "hours": 3.0308, "text": "Meme reactions, animations, and polishing Added reactions to memes (kind of similar to Reddit awards) so you can now choose an emoji to express what you think about the meme! There is a new React button on the meme bar that opens an emoji selection menu that lets you choose your reaction. You can see all the meme’s reactions sorted by number of users listed below the bar and can click on them to switch your reaction or unreact (since you can only react once) Reactions are anonymous, so you can only see the number of reactions with your own reaction highlighted Added subtle page transition animations to the layout and individual components to make navigation and user interactions a lot smoother and more aesthetically pleasing Added a 404 not found page with an occasional stylized glitching effect and buttons to go home or go back Added more detailed and dynamically generated OpenGraph metadata to improve SEO Updated backend Prisma schema and migrated database Updated types and styling Fixed a few display, light mode, and responsive design bugs MemeBoard is almost finished, it’ll probably be ready to ship after one final devlog and some polishing touches!!!"}, {"post_id": 61608, "ts": "2026-09-04T16:23:00Z", "hours": 1.9592, "text": "Light mode toggle Added a button on the nav bar that toggles the site’s entire appearance between dark and light mode to improve its customizability and accessibility Because every component has a default color transition, switching between the 2 modes has a smooth UI transition instead of flashing to the other color instantly I had to set up the theme provider and manually add the light mode Tailwind classes and the dark mode prefix for all the colors in every page and component, so this took quite a long time but the result was worth it, both modes look pretty consistent and visually appealing"}, {"post_id": 59928, "ts": "2026-09-01T23:23:11Z", "hours": 3.3867, "text": "MemeBoard is back!!! I’ve been a lazy bum this entire summer and didn’t finish a single one of my more serious projects on Stardance before losing interest and moving on to a new idea, but now that the event is ending in a month (nooo ) I finally forced myself to come back and finish up/ship my old projects one by one School just started so I’ll hopefully still have enough time to ship most of my projects before October. Since no one has used MemeBoard at all in over 2 months, I had to upgrade some packages, resetup some deployment stuff, and reactivate the databases for everything to function normally I also spent some time getting familiar with the codebase again, so I didn’t make a lot of changes this update. I added a few quality of life features like sharing/reporting comments, homepage meme and chat sections, and user search for finding people to follow When you click on share for a comment, the share modal pops up listing all your friends that you can select to send the comment and a message to, as well as options to copy the link and to report it Comments show up as embedded text with the user and like count displayed, and clicking on it takes you to its location on the original meme page for easy viewing (definitely not stolen from TikTok ) When you click on add user on the chat page, it shows a modal where you can use the API to search for people to add as friends, making chatting and sharing memes more convenient Added recent, top, all time, friend memes, and recent chat sections to the homepage to make navigating the platform and browsing memes easier Added call to action buttons on the homepage hero to make using the site more intuitive Updated content and styling Updated MemeBot behavior Updated README Fixed chat deployment issue Did some miscellaneous stuff/improvements/fixes that I forgot"}, {"post_id": 19564, "ts": "2026-06-30T21:50:01Z", "hours": 2.1125, "text": "More collections features You can now search, sort, and filter collections on the collections page to browse and explore public collections other people created! You can filter your friends’ and your own collections to make managing them easier You can now add an optional description describing what your collection is about, either on the add or edit collection modal You can now change the visibility of your collection to be either public or private, where public collections are displayed on your profile and the collections page for everyone to see, and only you can see your own private collections Added a new private collections section on your profile that only you can see it Added a create collection modal that shows up when you click on the button on the collections page to make creating collections easier Added a create tag modal that shows up when you click on the button on the tags page, but unlike collections you can only put the name of the tag since that’s the only thing a tag has Updated schema and types Updated styling and SEO"}, {"post_id": 17714, "ts": "2026-06-28T17:01:30Z", "hours": 2.5683, "text": "MemeBot & bug fixes Added MemeBot to everyone’s chat, so even if you haven’t friended someone on the platform you can still try out all the chat features since MemeBot also sends messages in realtime MemeBot isn’t actually another AI chatbot or anything, it just responds with a random hardcoded string message (very intelligent, i know) from the backend whenever a user sends it a message after a certain delay to simulate realtime chatting Since MemeBot isn’t actually a user, I had to modify the chatting system quite a bit and put a lot of extra conditionals and logic to ensure it works properly for both MemeBot and real users, and that was quite annoying to figure out Fixed an annoying caching bug where you had to refresh the entire chat page for realtime interactions to work properly when chatting with someone for the first time, otherwise the chat just froze. This took a long time to fix, but the UX is finally smooth and works well Fixed some issues of the chat related to auth and not being logged in Updated styling"}, {"post_id": 17111, "ts": "2026-06-27T19:43:00Z", "hours": 1.7958, "text": "Random quality of life features I think I’m almost finished with MemeBoard, so now I’m just making random small features that I skipped over earlier Added realtime chat message previews for each of your chats that shows the last message and who sent it on the left sidebar so it feels more like Discord and Slack Added a tag filtering dropdown on the Memes page where you can see all the tags, search for them, and choose one to see all the memes labeled with that tag. This makes it a lot easier to browse, filter, and find similar memes Added an options menu button to the tag page (that only shows if you’re the one who made the tag) similar to the button I added to a bunch of other pages. When clicked, it shows a menu with just a delete option that deletes the tag and removes its label from all the memes after a confirmation modal Added both dynamically generated SEO and static SEO to some pages that didn’t have it Updated styling and navigation"}, {"post_id": 16679, "ts": "2026-06-27T03:33:33Z", "hours": 2.7094, "text": "Collection features & cleanup Similar to the meme page, when you view the page of a collection you created, there is an options icon that when clicked, opens a menu where you can edit or delete the collection If you press on edit, an edit modal pops up where you can edit the name and select which memes should be in the collection If you press on delete, a warning modal shows up, and if you press delete the collection will be permanently deleted Added a search bar on the main collections page where you can search for your own or other people’s collections Added the collections tab to the main nav bar and the footer to improve navigation You can now add a short public about me bio on your profile by clicking on the edit profile button that shows an input edit modal When you hover over your own messages, a delete button now shows up that lets you delete the message for both of you after a confirmation modal just like all the other delete functionalities You can undo the deletion by pressing on the undo button that shows up, which restores the message for both of you I spent most of my time on MemeBoard developing while logged in, so I wasn’t aware most of my pages were completely broken and returning errors if someone visited them while not being logged in, so I implemented a ton of conditionals and permission stuff for auth to make sure every page works properly or redirects to the login page When you’re not logged in, you can still use the app and browse memes, it’s just that a lot of features are unavailable Updated backend schema and types Updated styling Fixed a few bugs and issues caused by auth"}, {"post_id": 15440, "ts": "2026-06-25T03:01:05Z", "hours": 1.8839, "text": "Responsive design Finally added responsive design to all pages on the platform so MemeBoard works properly and the layout stays organized and visually appealing for all screen sizes! Added a menu button that shows up when the screen size is smaller than a certain width, which when clicked opens a sidebar that slides in from the left containing all the links. This declutters the layout while improving the UX of the app Added a search bar to the tags page where you can search all the tags people created and browse memes more easily Refactored code for some UI elements to make everything more optimized and clean Fixed chat layout UI breaking with excessively long messages Added some minor styling adjustments"}, {"post_id": 13355, "ts": "2026-06-21T21:30:32Z", "hours": 4.0244, "text": "Editing/deleting posts & more chat features! Added an option button on the top right of the meme pages you posted which when clicked displays a menu that lets you edit or delete the post Clicking on the edit option takes you to a dedicated post editing page where you can edit the title, tags, description, and source link and reupload the image of the meme (metadata, comments, and everything else remains unchanged), and clicking save takes you back to the newly edited page Clicking on the delete option shows a confirmation modal/dialog warning you, and if you press delete all the meme’s data will be permanently deleted and you get redirected back to the memes pages A similar option menu button is also added to the top right corner of your comment, where you can edit (a modal with an edit input field and buttons shows up) or delete (also has a confirmation dialog) the comment You can now also edit your own messages (only the text and not what you’re replying or the embedded meme), when you click on the edit message button a modal with an edit input pops up, and the edited message is updated in realtime You can now react to both yours or your friends messages to express what you think! When you click on the react button an emoji menu shows up where you can browse for the emoji you want Reactions and their counters update in realtime and you can remove the reaction by clicking on it again (the feature works exactly how all messaging apps’ reactions work) After you press on the share meme button when sharing to a friend, the button now becomes a link that takes you to the chat where you can see the message Updated schema and types Updated styling I kinda forgot to make more devlogs again, so this one is another massive wall of text covering a ton of different features. The video is also 2 minutes so I had to compress it to upload 😭 I promise I’ll try to keep future devlogs shorter and more focused :)"}, {"post_id": 12330, "ts": "2026-06-20T03:35:53Z", "hours": 3.5969, "text": "Meme sharing and more chat features! I sort of got carried away with this chat feature thing so MemeBoard is now a weird combination of Reddit and Discord instead of the original meme platform I planned it to be When you click on the share button on a meme page and open the sharing modal, you can now see all your friends listed and you can select who to send the meme to, as well as an optional message This actually sends a message to the chat with your friend, and it shows up as an embedded preview meme with its creator, title, image, and number of likes/comments/shares displayed Clicking on the embed preview takes you to the actual meme page Added chat replies so when you click on the reply button next to your friend’s message, a box shows up above the input field showing the message you’re currently replying to When you send the message, a reply bar/message preview similar to Discord’s shows up above the message, and clicking on it scrolls the page to the original message and briefly highlights it, similar to Discord’s Messages are grouped together so message header info (sender, time, profile image…) only shows under certain circumstances (similar to Discord) for a cleaner and better UI Refactored how messages and their components are rendered/structured for better optimization and performance Added an API route for client components to fetch meme data from the database Updated schema and types Updated the styling of different chat pages I forgot to make devlogs, so this devlog is pretty long Sorry again for the terrible layout in the video, my lazy bum hasn’t started on responsive styling yet, so the windows are compressed"}, {"post_id": 9670, "ts": "2026-06-16T02:34:11Z", "hours": 3.5231, "text": "Massive update: chat Added realtime chat where you can send and receive text messages with almost no latency to/from your friends on MemeBoard! The base layout of all the chat pages has a sidebar of the left that displays all your friends, and clicking on them takes you to the different direct message channels On each chat channel page, you can see your friend’s profile picture, username, and number of followers/following at the top, similar to TikTok’s chat Your friend’s messages show up on the left while yours are highlighted and on the right, similar to texts, and each message has a timestamp Integrated a Redis database for quick message retrieval, caching, and ease of use for the Upstash realtime library that uses Web Socket under the hood to push realtime updates/events to send and update messages in realtime I already made a much simpler chat app but with a slightly different backend stack a while ago, so it wasn’t that difficult rewriting everything in Next.js and adding additional features There are actually a lot of considerations and logic that go into making a chat app that you normally wouldn’t think of unless building your own chat, so this was an interesting and fun experience coming up with solutions for unexpected problems Updated schema and types I’ll actually optimize the site and implement responsive design after the main app is finished, so the current layout looks terrible on small screens and I apologize for the terrible layout in the video"}, {"post_id": 8477, "ts": "2026-06-14T03:08:02Z", "hours": 2.3269, "text": "Searching, sorting, and filtering memes Added a search bar, a sorting dropdown, a filtering by time and creator dropdown, a tag dropdown (doesn’t work yet, coming soon), and a number of items dropdown on the explore memes page to make finding and browsing new memes a lot more easier The search bar searches by the meme’s title and only searches when you submit the form to improve performance You can sort by best, which sorts by positive/negative vote ratio, top, which sorts by raw upvote count, and new, which sorts by recency You can filter by time range (now, day, week, and all), memes your friends posted, and memes you posted You can choose to show 5, 10, 25, or 50 memes at a time Added a custom dropdown component for the dropdowns with nice UX MemeBoard is now even closer to being a Reddit clone, I took a lot of inspiration from its features except my sorting/filtering is mainly frontend, which is not good practice but I’m too lazy to implement API endpoints for fetching memes Refactored the upvoting/downvoting component and logic so it directly communicates with the backend rather than using a hook to make it more modular and performant Meme cards now show the voting component and vote count I’m almost finished with the meme aspect of this project, the next big part is the realtime chat and sharing with friends and MemeBoard will be finished! I should probably stop using aura monster as the test meme, it’s starting to become corny :("}, {"post_id": 7915, "ts": "2026-06-13T06:13:24Z", "hours": 2.0725, "text": "Comment likes and replies You can now like meme comments (and comment replies since they’re counted as normal comments) by clicking on the heart icon on each comment You can also see how many people liked the comment When you click on the reply option on a comment, an input field for your reply and post/cancel buttons show up for you to post your reply The replies show up as nested inside their parent comments to show the discussion flow, and you can technically thread replies infinite levels deep Spent a ton of time trying to figure out how to generate the threaded tree structure, tried recursion and loops and ended up using hashmaps and pointers to nest parent/child comments (I was not locked in while making the algorithm because of the finals I was going to have the next day) Updated schema and styling"}, {"post_id": 7104, "ts": "2026-06-11T21:33:21Z", "hours": 2.1169, "text": "Collection pages, sharing, and reporting Added a main collection tab that displays all the meme collections users created (not just yours), and you can access the page with a header link on the profile page Each collection card either shows a gray rectangle if there’s no meme or a stack of images with a preview image on top if there’s multiple memes When you click on a collection, it takes you to its own page where its name, creator, and all the memes are displayed Collections a user created are also displayed on their profile page in a new section The share button shows a sharing modal where you can either share the meme to your friends (doesn’t work yet, will be integrated with chat), copy the link and send it somewhere else, or report it If you choose report or click on the report option, another modal shows up where you can select report reasons and provide additional feedback Added new schemas and types Updated navigation and styling"}, {"post_id": 6006, "ts": "2026-06-10T02:14:13Z", "hours": 1.4364, "text": "Additions & Changes Added saving memes to collections so other than voting you can curate, organize, and categorize your own custom lists of memes! When you click on the save option, a modal pops up showing collections you created and a button that lets you add new collections, as well as a search bar for the collections You can also see how many memes are currently saved in the selections When you click save, the option shows the saved state and displays how many collections the meme is saved in You can only save memes to collections you created Added a new user profile section for collections, but it currently doesn’t show anything yet Updated schema and types and learned some new relational database and Prisma concepts"}, {"post_id": 5957, "ts": "2026-06-09T23:41:13Z", "hours": 1.2425, "text": "Additions & Changes Added a voting system for memes (sort of like a rip off Reddit) where you can upvote, downvote, or remove your vote by clicking on the arrows You can also see the total vote count of the meme in real time to see its popularity The upvote/downvote buttons are displayed below the meme, along with the save and share buttons that will work soon Added an optional original source field for posting a meme to link where you got the original image from A link icon now shows up on the meme page if you provided the source link so people can see the original post and author Updated styling and navigation Updated schema and types"}, {"post_id": 5253, "ts": "2026-06-08T23:28:07Z", "hours": 0.9344, "text": "Additions & Changes When you click on a user’s followers and following on their profile page, a new modal pops up with 2 tabs, followers and following, that shows the accounts they’re currently following/being followed There’s also a search bar that lets you search through the listed users to find people more easily and makes it feel a lot more like Instagram If you are following someone who follows you back (mutual follows), you are automatically added as friends, which shows up as a section on the main profile display area You will be able to send messages through a real-time chat with friends in the future! Added the chat tab that’s just a placeholder page for now Added dynamic SEO Updated navigation and styling"}, {"post_id": 4630, "ts": "2026-06-08T00:46:10Z", "hours": 1.3575, "text": "Additions & Changes You can now edit your account information and customize your own profile by clicking on the edit profile button on the page, which shows a edit form modal! You can change your display name to anything you want, your username to anything that’s not already taken (since it’s used as the param account identifier), and upload a custom profile image (PNG, JPG, and GIF are all accepted) You can also follow and unfollow other users by clicking on the follow button on their profile page, making the platform feel more like a social media/community If you and another account are following each other mutually, you will become friends and unlock additional features (coming soon!) Refactored some code to make everything more modular and optimized"}, {"post_id": 4558, "ts": "2026-06-07T22:03:14Z", "hours": 1.5661, "text": "Additions and Changes Added the tags tab which displays all the tags created on the platform, and each tag has a number showing the number of memes it has and takes you to its own page with its memes displayed Added individual tag pages that shows all the memes categorized under a tag and the user that created it Added the meme card component that shows the meme’s title, author, upload date, and image, and clicking on it takes you to the meme page Features like filtering, sorting, and searching for memes for a specific tag are coming soon! Added user pages that takes in a user’s username as the param and displays the account’s memes and other data If you’re viewing your own profile, you can see options for signing out, deleting the account (with a confirmation dialog), and editing the profile Username is used as param instead of user id to be more human friendly Added static and dynamically generated SEO for the new pages Updated the navigation bar and footer links Removed the profile page since it got replaced by the user page"}, {"post_id": 3298, "ts": "2026-06-06T04:56:02Z", "hours": 2.5442, "text": "Additions & Changes This is a pretty big update, so a lot of stuff has been added and improved :) Added comments so signed in users can post plaintext comments using the comment field under every meme Comment threading and liking will be added soon to milk more hours improve community engagement features You can also see other people’s comments, see when it’s posted, and go to their profile A signin button is shown instead of the comment box if you’re not signed in Improved tags a lot, you can now add custom tags and use either the main ones (marked by a star icon) or custom tags other people or you created to make categorization easier Added input validation and required fields for posting memes to prevent errors Added and updated a lot of models and types to make everything more type safe and complete Updated navigation and styling This is my 5th time trying to post this devlog, I had to compress the video hopefully it works this time"}, {"post_id": 2545, "ts": "2026-06-05T02:49:37Z", "hours": 1.635, "text": "Additions & Changes Added file storage/upload and made the backend for posting a meme work so you can now actually upload an image, give it a name and description, assign it tags, and post it as its own public page! Learned how to work with UploadThing and used it as MemeBoard’s file storage service Added the meme page that fetches and shows all the meme’s data as well as who posted it, with a link to their profile (to be implemented) The meme page also generates SEO dynamically Added the memes page that’s just a placeholder for now where you will be able to browse through and explore all the memes Added a meme Prisma model with a user relation as well as custom types Improved navigation, redirects, and overall user experience Happy birthday daniel (I’m not a larper I watched the entirety of Peak:Zero)"}, {"post_id": 2457, "ts": "2026-06-04T23:08:36Z", "hours": 1.9033, "text": "Additions & Changes Added a post page with a beautiful form where you can input a title, select tags, upload PNG, JPG, or GIF, and provide a description for your meme You can search for tags in the custom tag selection modal that pops up when you click on the select tags button or one of the tags Added the meme type and updated some other types and auth stuff Added a simple footer with credits, navigation links, and the GitHub link The post page doesn’t work yet, it’s just a pretty frontend component (for now) Updated styling My future devlogs will all follow this bullet list format (hopefully the markdown layout turns out alright) to improve readability and storytelling :)"}, {"post_id": 1743, "ts": "2026-06-03T22:36:02Z", "hours": 2.0625, "text": "Basically finished the entire auth system with the Better Auth library, and users can now both sign in and sign up with credentials (email, username, display name, and password) or from a social provider using OAuth (Google and GitHub). I haven’t set up this library or the OAuth services in quite a while so I had to spend some time refiguring everything out and configuring all the different stuff. A username is also automatically assigned if you sign up with email. Added a backend and connected the Neon Postgres database as well."}, {"post_id": 1150, "ts": "2026-06-03T00:12:57Z", "hours": 1.4411, "text": "My first devlog on Stardance!!! Time to work my butt off this entire summer :) I’m making this meme exploring/sharing platform where you can browse the most popular memes or upload them yourself. I set up the basic Next.js project and the dependencies, added some pages and components, and made a pretty nice login/signup form (nothing works right now). Also deployed the site on Vercel."}]...
|
Title: MemeBoard by @tonymac129 | Stardance
Devlo Title: MemeBoard by @tonymac129 | Stardance
Devlogs:
My first devlog on Stardance!!! Time to work my butt off this entire summer :) I’m making this meme exploring/sharing platform where you can browse the most popular memes or upload them yourself. I set up the basic Next.js project and the dependencies, added some pages and components, and made a pretty nice login/signup form (nothing works right now). Also deployed the site on Vercel.
Basically finished the entire auth system with the Better Auth library, and users can now both sign in and sign up with credentials (email, username, display name, and password) or from a social provider using OAuth (Google and GitHub). I haven’t set up this library or the OAuth services in quite a while so I had to spend some time refiguring everything out and configuring all the different stuff. A username is also automatically assigned if you sign up with email. Added a backend and connected the Neon Postgres database as well.
Additions & Changes Added a post page with a beautiful form where you can input a title, select tags, upload PNG, JPG, or GIF, and provide a description for your meme You can search for tags in the custom tag selection modal that pops up when you click on the select tags button or one of the tags Added the meme type and updated some other types and auth stuff Added a simple footer with credits, navigation links, and the GitHub link The post page doesn’t work yet, it’s just a pretty frontend component (for now) Updated styling My future devlogs will all follow this bullet list format (hopefully the markdown layout turns out alright) to improve readability and storytelling :)
Additions & Changes Added file storage/upload and made the backend for posting a meme work so you can now actually upload an image, give it a name and description, assign it tags, and post it as its own public page! Learned how to work with UploadThing and used it as MemeBoard’s file storage service Added the meme page that fetches and shows all the meme’s data as well as who posted it, with a link to their profile (to be implemented) The meme page also generates SEO dynamically Added the memes page that’s just a placeholder for now where you will be able to browse through and explore all the memes Added a meme Prisma model with a user relation as well as custom types Improved navigation, redirects, and overall user experience Happy birthday daniel (I’m not a larper I watched the entirety of Peak:Zero)
Additions & Changes This is a pretty big update, so a lot of stuff has been added and improved :) Added comments so signed in users can post plaintext comments using the comment field under every meme Comment threading and liking will be added soon to milk more hours improve community engagement features You can also see other people’s comments, see when it’s posted, and go to their profile A signin button is shown instead of the comment box if you’re not signed in Improved tags a lot, you can now add custom tags and use either the main ones (marked by a star icon) or custom tags other people or you created to make categorization easier Added input validation and required fields for posting memes to prevent errors Added and updated a lot of models and types to make everything more type safe and complete Updated navigation and styling This is my 5th time trying to post this devlog, I had to compress the video hopefully it works this time
Additions and Changes Added the tags tab which displays all the tags created on the platform, and each tag has a number showing the number of memes it has and takes you to its own page with its memes displayed Added individual tag pages that shows all the memes categorized under a tag and the user that created it Added the meme card component that shows the meme’s title, author, upload date, and image, and clicking on it takes you to the meme page Features like filtering, sorting, and searching for memes for a specific tag are coming soon! Added user pages that takes in a user’s username as the param and displays the account’s memes and other data If you’re viewing your own profile, you can see options for signing out, deleting the account (with a confirmation dialog), and editing the profile Username is used as param instead of user id to be more human friendly Added static and dynamically generated SEO for the new pages Updated the navigation bar and footer links Removed the profile page since it got replaced by the user page
Additions & Changes You can now edit your account information and customize your own profile by clicking on the edit profile button on the page, which shows a edit form modal! You can change your display name to anything you want, your username to anything that’s not already taken (since it’s used as the param account identifier), and upload a custom profile image (PNG, JPG, and GIF are all accepted) You can also follow and unfollow other users by clicking on the follow button on their profile page, making the platform feel more like a social media/community If you and another account are following each other mutually, you will become friends and unlock additional features (coming soon!) Refactored some code to make everything more modular and optimized
Additions & Changes When you click on a user’s followers and following on their profile page, a new modal pops up with 2 tabs, followers and following, that shows the accounts they’re currently following/being followed There’s also a search bar that lets you search through the listed users to find people more easily and makes it feel a lot more like Instagram If you are following someone who follows you back (mutual follows), you are automatically added as friends, which shows up as a section on the main profile display area You will be able to send messages through a real-time chat with friends in the future! Added the chat tab that’s just a placeholder page for now Added dynamic SEO Updated navigation and styling
Additions & Changes Added a voting system for memes (sort of like a rip off Reddit) where you can upvote, downvote, or remove your vote by clicking on the arrows You can also see the total vote count of the meme in real time to see its popularity The upvote/downvote buttons are displayed below the meme, along with the save and share buttons that will work soon Added an optional original source field for posting a meme to link where you got the original image from A link icon now shows up on the meme page if you provided the source link so people can see the original post and author Updated styling and navigation Updated schema and types
Additions & Changes Added saving memes to collections so other than voting you can curate, organize, and categorize your own custom lists of memes! When you click on the save option, a modal pops up showing collections you created and a button that lets you add new collections, as well as a search bar for the collections You can also see how many memes are currently saved in the selections When you click save, the option shows the saved state and displays how many collections the meme is saved in You can only save memes to collections you created Added a new user profile section for collections, but it currently doesn’t show anything yet Updated schema and types and learned some new relational database and Prisma concepts
Collection pages, sharing, and reporting Added a main collection tab that displays all the meme collections users created (not just yours), and you can access the page with a header link on the profile page Each collection card either shows a gray rectangle if there’s no meme or a stack of images with a preview image on top if there’s multiple memes When you click on a collection, it takes you to its own page where its name, creator, and all the memes are displayed Collections a user created are also displayed on their profile page in a new section The share button shows a sharing modal where you can either share the meme to your friends (doesn’t work yet, will be integrated with chat), copy the link and send it somewhere else, or report it If you choose report or click on the report option, another modal shows up where you can select report reasons and provide additional feedback Added new schemas and types Updated navigation and styling
Comment likes and replies You can now like meme comments (and comment replies since they’re counted as normal comments) by clicking on the heart icon on each comment You can also see how many people liked the comment When you click on the reply option on a comment, an input field for your reply and post/cancel buttons show up for you to post your reply The replies show up as nested inside their parent comments to show the discussion flow, and you can technically thread replies infinite levels deep Spent a ton of time trying to figure out how to generate the threaded tree structure, tried recursion and loops and ended up using hashmaps and pointers to nest parent/child comments (I was not locked in while making the algorithm because of the finals I was going to have the next day) Updated schema and styling
Searching, sorting, and filtering memes Added a search bar, a sorting dropdown, a filtering by time and creator dropdown, a tag dropdown (doesn’t work yet, coming soon), and a number of items dropdown on the explore memes page to make finding and browsing new memes a lot more easier The search bar searches by the meme’s title and only searches when you submit the form to improve performance You can sort by best, which sorts by positive/negative vote ratio, top, which sorts by raw upvote count, and new, which sorts by recency You can filter by time range (now, day, week, and all), memes your friends posted, and memes you posted You can choose to show 5, 10, 25, or 50 memes at a time Added a custom dropdown component for the dropdowns with nice UX MemeBoard is now even closer to being a Reddit clone, I took a lot of inspiration from its features except my sorting/filtering is mainly frontend, which is not good practice but I’m too lazy to implement API endpoints for fetching memes Refactored the upvoting/downvoting component and logic so it directly communicates with the backend rather than using a hook to make it more modular and performant Meme cards now show the voting component and vote count I’m almost finished with the meme aspect of this project, the next big part is the realtime chat and sharing with friends and MemeBoard will be finished! I should probably stop using aura monster as the test meme, it’s starting to become corny :(
Massive update: chat Added realtime chat where you can send and receive text messages with almost no latency to/from your friends on MemeBoard! The base layout of all the chat pages has a sidebar of the left that displays all your friends, and clicking on them takes you to the different direct message channels On each chat channel page, you can see your friend’s profile picture, username, and number of followers/following at the top, similar to TikTok’s chat Your friend’s messages show up on the left while yours are highlighted and on the right, similar to texts, and each message has a timestamp Integrated a Redis database for quick message retrieval, caching, and ease of use for the Upstash realtime library that uses Web Socket under the hood to push realtime updates/events to send and update messages in realtime I already made a much simpler chat app but with a slightly different backend stack a while ago, so it wasn’t that difficult rewriting everything in Next.js and adding additional features There are actually a lot of considerations and logic that go into making a chat app that you normally wouldn’t think of unless building your own chat, so this was an interesting and fun experience coming up with solutions for unexpected problems Updated schema and types I’ll actually optimize the site and implement responsive design after the main app is finished, so the current layout looks terrible on small screens and I apologize for the terrible layout in the video
Meme sharing and more chat features! I sort of got carried away with this chat feature thing so MemeBoard is now a weird combination of Reddit and Discord instead of the original meme platform I planned it to be When you click on the share button on a meme page and open the sharing modal, you can now see all your friends listed and you can select who to send the meme to, as well as an optional message This actually sends a message to the chat with your friend, and it shows up as an embedded preview meme with its creator, title, image, and number of likes/comments/shares displayed Clicking on the embed preview takes you to the actual meme page Added chat replies so when you click on the reply button next to your friend’s message, a box shows up above the input field showing the message you’re currently replying to When you send the message, a reply bar/message preview similar to Discord’s shows up above the message, and clicking on it scrolls the page to the original message and briefly highlights it, similar to Discord’s Messages are grouped together so message header info (sender, time, profile image…) only shows under certain circumstances (similar to Discord) for a cleaner and better UI Refactored how messages and their components are rendered/structured for better optimization and performance Added an API route for client components to fetch meme data from the database Updated schema and types Updated the styling of different chat pages I forgot to make devlogs, so this devlog is pretty long Sorry again for the terrible layout in the video, my lazy bum hasn’t started on responsive styling yet, so the windows are compressed
Editing/deleting posts & more chat features! Added an option button on the top right of the meme pages you posted which when clicked displays a menu that lets you edit or delete the post Clicking on the edit option takes you to a dedicated post editing page where you can edit the title, tags, description, and source link and reupload the image of the meme (metadata, comments, and everything else remains unchanged), and clicking save takes you back to the newly edited page Clicking on the delete option shows a confirmation modal/dialog warning you, and if you press delete all the meme’s data will be permanently deleted and you get redirected back to the memes pages A similar option menu button is also added to the top right corner of your comment, where you can edit (a modal with an edit input field and buttons shows up) or delete (also has a confirmation dialog) the comment You can now also edit your own messages (only the text and not what you’re replying or the embedded meme), when you click on the edit message button a modal with an edit input pops up, and the edited message is updated in realtime You can now react to both yours or your friends messages to express what you think! When you click on the react button an emoji menu shows up where you can browse for the emoji you want Reactions and their counters update in realtime and you can remove the reaction by clicking on it again (the feature works exactly how all messaging apps’ reactions work) After you press on the share meme button when sharing to a friend, the button now becomes a link that takes you to the chat where you can see the message Updated schema and types Updated styling I kinda forgot to make more devlogs again, so this one is another massive wall of text covering a ton of different features. The video is also 2 minutes so I had to compress it to upload 😭 I promise I’ll try to keep future devlogs shorter and more focused :)
Responsive design Finally added responsive design to all pages on the platform so MemeBoard works properly and the layout stays organized and visually appealing for all screen sizes! Added a menu button that shows up when the screen size is smaller than a certain width, which when clicked opens a sidebar that slides in from the left containing all the links. This declutters the layout while improving the UX of the app Added a search bar to the tags page where you can search all the tags people created and browse memes more easily Refactored code for some UI elements to make everything more optimized and clean Fixed chat layout UI breaking with excessively long messages Added some minor styling adjustments
Collection features & cleanup Similar to the meme page, when you view the page of a collection you created, there is an options icon that when clicked, opens a menu where you can edit or delete the collection If you press on edit, an edit modal pops up where you can edit the name and select which memes should be in the collection If you press on delete, a warning modal shows up, and if you press delete the collection will be permanently deleted Added a search bar on the main collections page where you can search for your own or other people’s collections Added the collections tab to the main nav bar and the footer to improve navigation You can now add a short public about me bio on your profile by clicking on the edit profile button that shows an input edit modal When you hover over your own messages, a delete button now shows up that lets you delete the message for both of you after a confirmation modal just like all the other delete functionalities You can undo the deletion by pressing on the undo button that shows up, which restores the message for both of you I spent most of my time on MemeBoard developing while logged in, so I wasn’t aware most of my pages were completely broken and returning errors if someone visited them while not being logged in, so I implemented a ton of conditionals and permission stuff for auth to make sure every page works properly or redirects to the login page When you’re not logged in, you can still use the app and browse memes, it’s just that a lot of features are unavailable Updated backend schema and types Updated styling Fixed a few bugs and issues caused by auth
Random quality of life features I think I’m almost finished with MemeBoard, so now I’m just making random small features that I skipped over earlier Added realtime chat message previews for each of your chats that shows the last message and who sent it on the left sidebar so it feels more like Discord and Slack Added a tag filtering dropdown on the Memes page where you can see all the tags, search for them, and choose one to see all the memes labeled with that tag. This makes it a lot easier to browse, filter, and find similar memes Added an options menu button to the tag page (that only shows if you’re the one who made the tag) similar to the button I added to a bunch of other pages. When clicked, it shows a menu with just a delete option that deletes the tag and removes its label from all the memes after a confirmation modal Added both dynamically generated SEO and static SEO to some pages that didn’t have it Updated styling and navigation
MemeBot & bug fixes Added MemeBot to everyone’s chat, so even if you haven’t friended someone on the platform you can still try out all the chat features since MemeBot also sends messages in realtime MemeBot isn’t actually another AI chatbot or anything, it just responds with a random hardcoded string message (very intelligent, i know) from the backend whenever a user sends it a message after a certain delay to simulate realtime chatting Since MemeBot isn’t actually a user, I had to modify the chatting system quite a bit and put a lot of extra conditionals and logic to ensure it works properly for both MemeBot and real users, and that was quite annoying to figure out Fixed an annoying caching bug where you had to refresh the entire chat page for realtime interactions to work properly when chatting with someone for the first time, otherwise the chat just froze. This took a long time to fix, but the UX is finally smooth and works well Fixed some issues of the chat related to auth and not being logged in Updated styling
More collections features You can now search, sort, and filter collections on the collections page to browse and explore public collections other people created! You can filter your friends’ and your own collections to make managing them easier You can now add an optional description describing what your collection is about, either on the add or edit collection modal You can now change the visibility of your collection to be either public or private, where public collections are displayed on your profile and the collections page for everyone to see, and only you can see your own private collections Added a new private collections section on your profile that only you can see it Added a create collection modal that shows up when you click on the button on the collections page to make creating collections easier Added a create tag modal that shows up when you click on the button on the tags page, but unlike collections you can only put the name of the tag since that’s the only thing a tag has Updated schema and types Updated styling and SEO
MemeBoard is back!!! I’ve been a lazy bum this entire summer and didn’t finish a single one of my more serious projects on Stardance before losing interest and moving on to a new idea, but now that the event is ending in a month (nooo ) I finally forced myself to come back and finish up/ship my old projects one by one School just started so I’ll hopefully still have enough time to ship most of my projects before October. Since no one has used MemeBoard at all in over 2 months, I had to upgrade some packages, resetup some deployment stuff, and reactivate the databases for everything to function normally I also spent some time getting familiar with the codebase again, so I didn’t make a lot of changes this update. I added a few quality of life features like sharing/reporting comments, homepage meme and chat sections, and user search for finding people to follow When you click on share for a comment, the share modal pops up listing all your friends that you can select to send the comment and a message to, as well as options to copy the link and to report it Comments show up as embedded text with the user and like count displayed, and clicking on it takes you to its location on the original meme page for easy viewing (definitely not stolen from TikTok ) When you click on add user on the chat page, it shows a modal where you can use the API to search for people to add as friends, making chatting and sharing memes more convenient Added recent, top, all time, friend memes, and recent chat sections to the homepage to make navigating the platform and browsing memes easier Added call to action buttons on the homepage hero to make using the site more intuitive Updated content and styling Updated MemeBot behavior Updated README Fixed chat deployment issue Did some miscellaneous stuff/improvements/fixes that I forgot
Light mode toggle Added a button on the nav bar that toggles the site’s entire appearance between dark and light mode to improve its customizability and accessibility Because every component has a default color transition, switching between the 2 modes has a smooth UI transition instead of flashing to the other color instantly I had to set up the theme provider and manually add the light mode Tailwind classes and the dark mode prefix for all the colors in every page and component, so this took quite a long time but the result was worth it, both modes look pretty consistent and visually appealing
Meme reactions, animations, and polishing Added reactions to memes (kind of similar to Reddit awards) so you can now choose an emoji to express what you think about the meme! There is a new React button on the meme bar that opens an emoji selection menu that lets you choose your reaction. You can see all the meme’s reactions sorted by number of users listed below the bar and can click on them to switch your reaction or unreact (since you can only react once) Reactions are anonymous, so you can only see the number of reactions with your own reaction highlighted Added subtle page transition animations to the layout and individual components to make navigation and user interactions a lot smoother and more aesthetically pleasing Added a 404 not found page with an occasional stylized glitching effect and buttons to go home or go back Added more detailed and dynamically generated OpenGraph metadata to improve SEO Updated backend Prisma schema and migrated database Updated types and styling Fixed a few display, light mode, and responsive design bugs MemeBoard is almost finished, it’ll probably be ready to ship after one final devlog and some polishing touches!!!
Final MemeBoard devlog! I finally finished MemeBoard after working on it over the past 3 months! I’ve implemented all the features I originally planned to make, as well as added a ton of other stuff to make the project interesting and fun to use I mostly just polished the project in this update, so there isn’t actually anything new other than the simple “m” logo/favicon I added to the nav bar and footer Added a top loading bar indicator to show the page is responsive and is actively loading since some pages take a bit of time to fetch data, and I’m too lazy to implement suspense/loading skeleton and all that Clicking on things that require the user to be signed in now redirects you to the sign in page so it’s more user friendly and not confusing Updated the README to document detailed information, all the features, setup instructions, and everything else about the project Fixed an annoying issue where MemeBot didn’t respond at all or took a long time by simply deleting an intentional timeout and the bug was somehow fixed Updated styling and layout components
Ships:
I finally finished making MemeBoard after periodically working on it over the past 3 months! MemeBoard is an accessible and easy to use fullstack online social platform for posting, sharing, and exploring all kinds of memes. There are many different post interaction features such as voting, commenting, saving, reacting, and sharing, it’s essentially a simple Reddit clone that’s exclusively for memes. You can browse, filter, and search through memes easily by choosing different sorting options and exploring the different tags and collections. It also has social features like following users and customizing your profile, as well as a full-featured realtime chat (mini Discord clone) where you can send content and chat with your friends or interact with MemeBot (which is not an LLM, it’s just a random thing I thought was fun to implement)! The entire website is also fully responsive and functional on all screen sizes with smooth loading and transition animations, and you can toggle between dark and light modes. I got bored of the project halfway through it to work on other stuff, but I ended up coming back more than a month later to finally finish everything and polish it to ship, and the final result is definitely very satisfying and rewarding for me, hopefully you’ll like it :)...
|
1793004463.7834735
|
1793090863.7834735
|
|
14359
|
AuraCare CRM by @AuraZod | Stardance
|
AuraZod
|
1
|
55.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T13:45:13Z", "hours": 55.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built AuraCare CRM — a fast, lightweight healthcare and clinic management system. Most hospital software is clunky, slow, and painful to look at, so I wanted to make something modern that actually feels good to use for daily clinic rounds. It’s split into an Express.js REST API hosted on a Linux VPS behind a Cloudflare tunnel, a React 18 + Vite dashboard with Tailwind CSS and Radix UI primitives, and packaged as an Electron desktop app for clinic workstations. It covers the complete clinical flow across 6 roles (Super Admin, Admin, Doctor, Receptionist, Pharmacy, and Diagnostics) — from patient check-in and live queues to digital prescriptions, lab orders, inventory management, and PDF invoices. The most challenging part was session management and granular RBAC. In real clinics, doctors get interrupted constantly; standard 15-minute JWT timeouts were kicking them out mid-consultation. I built a 30-day extended session architecture with rolling token renewals and inactivity tracking, while ensuring cross-department data (like an Rx immediately updating pharmacy stock and billing) flows seamlessly. I’m most proud of the UI responsiveness — it switches views instantly and feels smooth, even with dark mode and live charts. To test it out: Open the live web app: https://auracare-gamma.vercel.app On the login page, click the “Sandbox Demo Login” button — you can pick any role (Doctor, Receptionist, Admin, etc.) to jump straight in without signing up! Windows desktop installer is also available in the GitHub releases: https://github.com/AuraZod/AuraCare-CRM/releases", "repo": "https://github.com/AuraZod/AuraCare-CRM", "demo": "https://auracare-gamma.vercel.app"}]...
|
[{"post_id": 66544, "ts": "202 [{"post_id": 66544, "ts": "2026-09-12T12:00:34Z", "hours": 22.8506, "text": "I had medical issues and couldn’t post more devlogs moving forward, neither I was able to finish the entire project to be supported in multiple platforms, but i’ve still made the web and desktop version of this project…….."}, {"post_id": 8123, "ts": "2026-06-13T15:48:23Z", "hours": 6.5056, "text": "Devlog 9 finally done. literally coding until my fingers are numb. completed the entire crm frontend and the desktop wrapper is fully functional. no more mock gaps or missing files. here is the breakdown of what happened: frontend modules (crmfrontend): finished the pharmacy inventory page (pharmacyinventory.tsx). it handles full batch tracking, manufacturing/expiry dates, cost/selling price margins, gst calculation (5%, 12%, 18%), and hsn codes. also threw in reorder level alerts when stock drops below threshold. built out pharmacybilling.tsx from scratch. doctors write rx, pharmacist pulls it, builds the bill with automatic gst and prints receipt. made pharmacycustomers.tsx to track loyalty points, lifetime spend, and outstanding balances. has a quick reminder trigger. wrote pharmacyprescriptions.tsx to handle the incoming doctor prescription queues. pharmacists can do complete or partial dispensing if we are short on stock. added pharmacypurchase.tsx for restock orders and supplier inventory ingestion. built pharmacyreports.tsx for tracking medicine usage patterns and monthly sales dashboards. all routes are auth-locked in app.tsx using role-based routing policies (doctor, pharmacist, receptionist, admin, super-admin). styling is built using vanilla tailwind classes alongside shadcn UI components like dialogs, tables, and dropdown menus for layout consistency. data fetching is managed using tanstack react-query to cache active lists and handles state mutators for adding/editing items. toast notifications via sonner trigger real-time updates for pharmacy sales completions and out of stock warnings. integrated standard currency formatters to display indian rupee values properly in all tables. desktop wrapper (auracaredesktop): spun up electron setup. main.js manages window dimensions (1400x900 min, resizable) and ipc communication channels. preload.js sets up contextbridge and ipcrenderer exposing window controls safely without opening nodeintegration. connection strategy: in dev, package.json uses concurrently and wait-on to launch the frontend dev server on port 8080 and then point the electron browser window loadurl to localhost:8080. for prod, we run electron-builder which bundles our assets. npm build script builds the react frontend, copies dist to desktop/frontend-dist, and main.js loads it locally via loadfile. configured cross-platform packaging target options for windows (nsis installer, portable executables), mac (dmg, zip), and linux (appimage, deb) in package.json. added native OS window hooks for minimized, maximized, and close events so client-side buttons in the custom titlebar work. added shell handler for opening external web links in native browser instead of electron window. assets folder holds local icons configured for specific OS packing rules (ico, icns, png). how it connects: the desktop shell is just a container running our react client, which talks to the node/express backend via api client calls to VITE_API_URL. ipc communication checks the app version and process platform. window actions (minimize, maximize, close) are wired back to the ipcMain handler. if backend is unreachable, the API services default to local mock fallback data so the app does not freeze. auth tokens are saved in localstorage inside the web view which carries over across app launches. took way too long to align the dist copy paths in the build script. had a dumb bug where frontend-dist was missing and loading a blank screen, but fixed the cp target path. compilation is completely green now. going to collapse."}, {"post_id": 7129, "ts": "2026-06-11T22:13:59Z", "hours": 9.46, "text": "Devlog 8 coded for 10 hours straight. brain is absolutely fried but got most of the core pages done. the lopsided progress is finally balancing out. frontend is starting to talk to the backend client. made some serious headway: user-management.tsx: admin controls, user activity graphs, and session tracking. shows average response times and role badges. billing-finance.tsx: invoice lists, revenue breakdowns (upi, cash, card), stats, and mock trends. pharmacy/pharmacy-customers.tsx: mapped patients to pharmacy profiles. tracked loyalty points and total amount spent, plus warning badges for outstanding dues. app.tsx: wired up all the protected routes and role permissions. admins, doctors, pharmacists all see different stuff now. what’s left: pharmacy-inventory.tsx is half-baked. literally stopped at line 65 state declaration because i needed a break. need to add medicine batch dialogs, GST calculations, and stock levels. missing pharmacy-prescriptions.tsx, pharmacy-purchase.tsx, and pharmacy-reports.tsx files completely. they’re imported in app.tsx but the files don’t exist on disk yet. build will crash if i try to compile right now. actual integrations testing with the express backend. right now it falls back to mock data if the local server isn’t running. need to build the electron wrapper for desktop and expo for mobile later. everything is coming together. the app finally feels like a real crm instead of just a bunch of empty files. going to sleep now. Project Screenshot The attached screenshot is ai generated as the final devlog will contain demo link to try website yourselves."}, {"post_id": 6673, "ts": "2026-06-11T05:40:01Z", "hours": 4.5169, "text": "Devlog 7 Worked a lot more on it and progress so far : Chart Checkbox Collapsible Command Context menu Dialog Drawer Dropdown Menu Form Hover Card Input otp Input Label Menubar Navigation Menu Pagination Popover Progress Radio Group Resizable Scroll Area Select Separator Sheet Sidebar, Skeleton, Slider, Sonnar, Switch, Table Tabs, Text Area, Toast, Toaster, Toggle-Group, toggle, Tooltip Use toast, Roles, auth context, use mobile, use toasts, use debounce Api, utils, Analytics, appointments billing, billing finances, compliance security."}, {"post_id": 6172, "ts": "2026-06-10T11:41:12Z", "hours": 1.4475, "text": "Devlog 6 So far so good, made a whole lot of progress : Overall Dashboard Layout completed Header, Sidebar, Accordion created Alert Dialog, Alerts & Aspect ratio completed. Avatar, Badge, Breadcrumbs Buttons Calendar Cards Carousel. around 20% frontend work finished."}, {"post_id": 6138, "ts": "2026-06-10T10:13:18Z", "hours": 1.2061, "text": "Devlog 5 Progress so far : Finished Doctor Dashboard Pharmacy Dashboard Receptionist Dashboard SuperAdmin Dashboard (In progress)"}, {"post_id": 6115, "ts": "2026-06-10T09:00:37Z", "hours": 1.4219, "text": "Devlog 4 Okay so progress so far : Built the login system flow. Defined the different variations of dashboard based on role. Admin Dashboard menu. Controls for each role seperately divided. Functionalities : added search patients functionality. Appointments list design and function. Modules overview Quick Actions Revenue Charts StatsCard Upcoming reminders Admin Dashboard Diagnostic Dashboard Doctor Dashboard For now everything is just plain frontend that contains mock data and no actual working. will take more work to finish this."}, {"post_id": 6091, "ts": "2026-06-10T07:36:38Z", "hours": 1.64, "text": "Devlog 3 Looking so far so good. worked for about 1 & half hour now and it’s looking promising. worked on login page and menu design and style (will improve more with theme customization). Worked on role management and how each role will be handled differently. Found out bugs here and there, will fix after i’m done with creating the dashboard menu and style. It still needs about 10-15hrs of code based on the speed i’m working with (not sure if it’s less or more). Debugging and implementing new features will also require time."}, {"post_id": 6059, "ts": "2026-06-10T05:44:12Z", "hours": 4.1136, "text": "Devlog 2 Been Working for whole night with backend. I have made quite a lot of progress, so far so good. Almost everything that backend will need to operate is done and what’s left of it is to actually test it out. Now after a few more checks i’ll get ahead to code the actual frontend and the design of site. After the frontend is entirely created, i’ll test out all the backend functions and see if those works or not & if needed I might’ve to work on backend too as I go along this road……….."}, {"post_id": 5758, "ts": "2026-06-09T17:36:17Z", "hours": 1.6689, "text": "Devlog 1 Needed a crm that actually works for hospitals without the usual bloat. decided to split it into clean micro-services: node/express backend, react front, electron for desktop, and expo for mobile. most of the core structure is there but progress is pretty lopsided. spent a bit of time spinning up the backend and database routes, barely touched the actual frontend pages. focus is to get all the backend api endpoints and role validations completely solid before moving on to the ui. cross-device communication is just going to be rest calls to the centralized node server."}]...
|
Title: AuraCare CRM by @AuraZod | Stardance
Devlo Title: AuraCare CRM by @AuraZod | Stardance
Devlogs:
Devlog 1 Needed a crm that actually works for hospitals without the usual bloat. decided to split it into clean micro-services: node/express backend, react front, electron for desktop, and expo for mobile. most of the core structure is there but progress is pretty lopsided. spent a bit of time spinning up the backend and database routes, barely touched the actual frontend pages. focus is to get all the backend api endpoints and role validations completely solid before moving on to the ui. cross-device communication is just going to be rest calls to the centralized node server.
Devlog 2 Been Working for whole night with backend. I have made quite a lot of progress, so far so good. Almost everything that backend will need to operate is done and what’s left of it is to actually test it out. Now after a few more checks i’ll get ahead to code the actual frontend and the design of site. After the frontend is entirely created, i’ll test out all the backend functions and see if those works or not & if needed I might’ve to work on backend too as I go along this road………..
Devlog 3 Looking so far so good. worked for about 1 & half hour now and it’s looking promising. worked on login page and menu design and style (will improve more with theme customization). Worked on role management and how each role will be handled differently. Found out bugs here and there, will fix after i’m done with creating the dashboard menu and style. It still needs about 10-15hrs of code based on the speed i’m working with (not sure if it’s less or more). Debugging and implementing new features will also require time.
Devlog 4 Okay so progress so far : Built the login system flow. Defined the different variations of dashboard based on role. Admin Dashboard menu. Controls for each role seperately divided. Functionalities : added search patients functionality. Appointments list design and function. Modules overview Quick Actions Revenue Charts StatsCard Upcoming reminders Admin Dashboard Diagnostic Dashboard Doctor Dashboard For now everything is just plain frontend that contains mock data and no actual working. will take more work to finish this.
Devlog 5 Progress so far : Finished Doctor Dashboard Pharmacy Dashboard Receptionist Dashboard SuperAdmin Dashboard (In progress)
Devlog 6 So far so good, made a whole lot of progress : Overall Dashboard Layout completed Header, Sidebar, Accordion created Alert Dialog, Alerts & Aspect ratio completed. Avatar, Badge, Breadcrumbs Buttons Calendar Cards Carousel. around 20% frontend work finished.
Devlog 7 Worked a lot more on it and progress so far : Chart Checkbox Collapsible Command Context menu Dialog Drawer Dropdown Menu Form Hover Card Input otp Input Label Menubar Navigation Menu Pagination Popover Progress Radio Group Resizable Scroll Area Select Separator Sheet Sidebar, Skeleton, Slider, Sonnar, Switch, Table Tabs, Text Area, Toast, Toaster, Toggle-Group, toggle, Tooltip Use toast, Roles, auth context, use mobile, use toasts, use debounce Api, utils, Analytics, appointments billing, billing finances, compliance security.
Devlog 8 coded for 10 hours straight. brain is absolutely fried but got most of the core pages done. the lopsided progress is finally balancing out. frontend is starting to talk to the backend client. made some serious headway: user-management.tsx: admin controls, user activity graphs, and session tracking. shows average response times and role badges. billing-finance.tsx: invoice lists, revenue breakdowns (upi, cash, card), stats, and mock trends. pharmacy/pharmacy-customers.tsx: mapped patients to pharmacy profiles. tracked loyalty points and total amount spent, plus warning badges for outstanding dues. app.tsx: wired up all the protected routes and role permissions. admins, doctors, pharmacists all see different stuff now. what’s left: pharmacy-inventory.tsx is half-baked. literally stopped at line 65 state declaration because i needed a break. need to add medicine batch dialogs, GST calculations, and stock levels. missing pharmacy-prescriptions.tsx, pharmacy-purchase.tsx, and pharmacy-reports.tsx files completely. they’re imported in app.tsx but the files don’t exist on disk yet. build will crash if i try to compile right now. actual integrations testing with the express backend. right now it falls back to mock data if the local server isn’t running. need to build the electron wrapper for desktop and expo for mobile later. everything is coming together. the app finally feels like a real crm instead of just a bunch of empty files. going to sleep now. Project Screenshot The attached screenshot is ai generated as the final devlog will contain demo link to try website yourselves.
Devlog 9 finally done. literally coding until my fingers are numb. completed the entire crm frontend and the desktop wrapper is fully functional. no more mock gaps or missing files. here is the breakdown of what happened: frontend modules (crmfrontend): finished the pharmacy inventory page (pharmacyinventory.tsx). it handles full batch tracking, manufacturing/expiry dates, cost/selling price margins, gst calculation (5%, 12%, 18%), and hsn codes. also threw in reorder level alerts when stock drops below threshold. built out pharmacybilling.tsx from scratch. doctors write rx, pharmacist pulls it, builds the bill with automatic gst and prints receipt. made pharmacycustomers.tsx to track loyalty points, lifetime spend, and outstanding balances. has a quick reminder trigger. wrote pharmacyprescriptions.tsx to handle the incoming doctor prescription queues. pharmacists can do complete or partial dispensing if we are short on stock. added pharmacypurchase.tsx for restock orders and supplier inventory ingestion. built pharmacyreports.tsx for tracking medicine usage patterns and monthly sales dashboards. all routes are auth-locked in app.tsx using role-based routing policies (doctor, pharmacist, receptionist, admin, super-admin). styling is built using vanilla tailwind classes alongside shadcn UI components like dialogs, tables, and dropdown menus for layout consistency. data fetching is managed using tanstack react-query to cache active lists and handles state mutators for adding/editing items. toast notifications via sonner trigger real-time updates for pharmacy sales completions and out of stock warnings. integrated standard currency formatters to display indian rupee values properly in all tables. desktop wrapper (auracaredesktop): spun up electron setup. main.js manages window dimensions (1400x900 min, resizable) and ipc communication channels. preload.js sets up contextbridge and ipcrenderer exposing window controls safely without opening nodeintegration. connection strategy: in dev, package.json uses concurrently and wait-on to launch the frontend dev server on port 8080 and then point the electron browser window loadurl to localhost:8080. for prod, we run electron-builder which bundles our assets. npm build script builds the react frontend, copies dist to desktop/frontend-dist, and main.js loads it locally via loadfile. configured cross-platform packaging target options for windows (nsis installer, portable executables), mac (dmg, zip), and linux (appimage, deb) in package.json. added native OS window hooks for minimized, maximized, and close events so client-side buttons in the custom titlebar work. added shell handler for opening external web links in native browser instead of electron window. assets folder holds local icons configured for specific OS packing rules (ico, icns, png). how it connects: the desktop shell is just a container running our react client, which talks to the node/express backend via api client calls to VITE_API_URL. ipc communication checks the app version and process platform. window actions (minimize, maximize, close) are wired back to the ipcMain handler. if backend is unreachable, the API services default to local mock fallback data so the app does not freeze. auth tokens are saved in localstorage inside the web view which carries over across app launches. took way too long to align the dist copy paths in the build script. had a dumb bug where frontend-dist was missing and loading a blank screen, but fixed the cp target path. compilation is completely green now. going to collapse.
I had medical issues and couldn’t post more devlogs moving forward, neither I was able to finish the entire project to be supported in multiple platforms, but i’ve still made the web and desktop version of this project……..
Ships:
I built AuraCare CRM — a fast, lightweight healthcare and clinic management system. Most hospital software is clunky, slow, and painful to look at, so I wanted to make something modern that actually feels good to use for daily clinic rounds. It’s split into an Express.js REST API hosted on a Linux VPS behind a Cloudflare tunnel, a React 18 + Vite dashboard with Tailwind CSS and Radix UI primitives, and packaged as an Electron desktop app for clinic workstations. It covers the complete clinical flow across 6 roles (Super Admin, Admin, Doctor, Receptionist, Pharmacy, and Diagnostics) — from patient check-in and live queues to digital prescriptions, lab orders, inventory management, and PDF invoices. The most challenging part was session management and granular RBAC. In real clinics, doctors get interrupted constantly; standard 15-minute JWT timeouts were kicking them out mid-consultation. I built a 30-day extended session architecture with rolling token renewals and inactivity tracking, while ensuring cross-department data (like an Rx immediately updating pharmacy stock and billing) flows seamlessly. I’m most proud of the UI responsiveness — it switches views instantly and feels smooth, even with dark mode and live charts. To test it out: Open the live web app: https://auracare-gamma.vercel.app On the login page, click the “Sandbox Demo Login” button — you can pick any role (Doctor, Receptionist, Admin, etc.) to jump straight in without signing up! Windows desktop installer is also available in the GitHub releases: https://github.com/AuraZod/AuraCare-CRM/releases...
|
1793008059.1638594
|
1793094459.1638594
|
|
23222
|
Climate Shield by @HackerDpro | Stardance
|
HackerDpro
|
3
|
55.0
|
452
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-14T13:30:29Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Dear voters, I made “CLIMATE SHIELD”, an interactive dashboard with real-time natural disasters (focussed mostly on fires) from NASA API’s being shown. Why: I made this project because I was surprised by hearing so much fire incidents on the news, I liked the idea of being able to see all fires and data in one place and easy-to-read. I also liked the idea of using NASA data for my project, as this Stardance challenge is sponsored by NASA. During the process of creating this project, I learn a lot about how to use API’s and merge multiple APIs into one dashboard. The difference between this and the previous ship I got lots of ideas and inspirations from the previous ship. So I did my best to implement them all into this ship, some examples: A canvas tutorial that explains the basics from my page to new users. You can replay it in the TELEMETRY page! Added more sources, this way some areas that weren’t covered before have also data (although I have done my best to only use free API’s, that means that it may not contain ALL the data there currently is). In my previous ship I added another way of seeing the world (if you click on the “RECON” buttons), now it is also a map you can select as standard-view. There was a bug that I can’t explain this short (you can see more info about it in my devlogs), but I mostly fixed it! I hope you have a great day, and thanks for voting!!!", "repo": "https://github.com/HackerDpro/climate-shield", "demo": "https://climate-shield.netlify.app/"}, {"ship_num": 2, "ts": "2026-10-08T20:49:50Z", "hours": 25.0, "multiplier": 15.5, "payout": 385, "blessing": "neutral", "text": "I made a web page with NASA live data (API’s) to track natural problems around the world. CLIMATE SHIELD! I am proud of it being one of my biggest projects. I got the idea of doing this by seeing in the news all the wildfires happening right now, it was perfect timing as I was searching for ideas of what I could make for Startdance. Even though I knew there are already bunch of other sites that do this and may be 100x better than mine I just thought thta I woudl be so proud if I were able to make one myself. To be honest I did use AI, maybe a little bit too much some times. But I tried my best to participate as much as I can on the project, I know that AI shouldn’t be doing this for me. I learnt about all the back end things and API’s (I was frontend dev before but had low experience of back end, so this learnt me much too). So dear reviewer, I hope you like, enjoy and support my project as much as I do, have fun reviewing all the parts of it. If even like this my project would dissapoint you, I’d be glad to be able to get a feedback so I can make it even better! P.S. I appear to sometimes still have problems with the backend, it is hosted on the hack club Nest servers that should run 24/7 but I sometimes have connection errors with it so if the backend data doesn’t show directly after reloading the site please don’t check my project as failed, I am doing my best to make it work! Oh and yeah, I ma sorry for this looking so unstructurised but I didn’t really know how this be represented to you, if I maybe should write this the same layout as a README or a DEVBLOG", "repo": "https://github.com/HackerDpro/climate-shield", "demo": "https://climate-shield.netlify.app/"}, {"ship_num": 3, "ts": "2026-06-21T19:03:22Z", "hours": 4.0, "multiplier": 17.74, "payout": 67, "blessing": "neutral", "text": "I built Climate Shield, an AI-enhanced dashboard for global wildfire prediction. What I made: A high-performance Command Center that tracks 6,000+ real-time wildfire events. It integrates NASA satellite data with Open-Meteo elevation and OpenWeatherMap metrics to predict fire spread behaviors based on terrain and wind vectors. What was challenging: Scaling! Rendering 6k+ fires crashed my browser initially. I solved this by migrating the map engine to HTML5 Canvas for instant performance. I also had to implement an ‘on-demand’ API fetching strategy to bypass rate limits while maintaining deep-dive analytics. What I’m proud of: The ‘Terrain AI.’ By calculating elevation data in real-time, the dashboard now identifies ‘Critical Uphill Alignment’ a major factor in wildfire spread, and generates a 24-hour linear projection for dangerous outbreaks. How to test: Visit the Live Dashboard. ( https://climate-shield.netlify.app/ ) Toggle between Tactical (full data), Orbital (map focus), and Telemetry (deep analytics) modes. Click any fire marker to view specific wind, elevation, and hazard score data. Have fun discovering all the data.", "repo": "https://github.com/HackerDpro/climate-shield", "demo": "https://climate-shield.netlify.app/"}]...
|
[{"post_id": 79522, "ts": "202 [{"post_id": 79522, "ts": "2026-10-14T13:05:26Z", "hours": 6.2528, "text": "ALL BUGS SOLVED (I think) This is my last devlog before 3rd ship! It was hard but I think I have done everything my 2nd ship’s voters told me to, I am exited to see what my 3rd ship’s voters will think of my project. I am happy with how my project turned out (Although I always like people giving me ideas and inspirations for future features and more)!"}, {"post_id": 79467, "ts": "2026-10-14T05:10:56Z", "hours": 8.4911, "text": "8 hours later = BUG FIXED After 8 hours of coding later and some frustrations: I finally fixed the annoying bug that I had (more info of the bug is to be seen in my previous devlogs). I am making my final changes before shipping, fixing a new smaller bug I found recently “NASA FIRMS data not loading”. After making all these changes: the bug fix, tutorial implementation, adding new sources and merging them, … I expect my 3rd ship to be soon!!!"}, {"post_id": 78883, "ts": "2026-10-11T21:15:19Z", "hours": 5.4208, "text": "More progress with merging Today I’ve mostly made progress with the codes to merge multiple API’s into the same details pup-up. I also did my best on finding a solution for the bug that has been happening when a fire pop-up shows and it touches the top of the page and dissapears. My only solution right now is to minimize the page (“ctrl” + “-”). Come back to see tomorrow’s devlog!"}, {"post_id": 78459, "ts": "2026-10-10T20:51:07Z", "hours": 6.0917, "text": "POST-SHIP PROGRESS I’ve been working on satisfying the reviews I got from my last shipment’s voters. I have been making a tutorial for first-timers on my page, it will show the basics of how to navigate and use my Climate-Shield project, a replay will be availble in the “TELEMETRY” tab. (view picture below). I am doing my best on fixing a very annoying bug that makes the details from a fire show for a split second and dissapear. It has been hard to fix that bug for now… I am working on adding more resources so I don’t only rely on 1 API but multiple (some may have more data than others). The difficult part has been trying to merge same fires from different api’s in one fire (to not have duplicates). These are my main issues I am working on right now, tomorrow I’ll continue, have a good day!"}, {"post_id": 77931, "ts": "2026-10-08T20:33:39Z", "hours": 7.9175, "text": "After coming back to Climate Shield I found that the backend (hack club Nest) had stopped, so the dashboard could no longer load its data. I got it running again (with PM2 and systemd), then replaced the map that suddenly was asking for an API key with another one (Esri tiles). When the fires still seemed missing, I checked the live data and found 7,130 valid reports. On the new map, the markers were just too small and hard to see, so I made them bigger and with a dark outline. I then tested the Netlify page with the API and saw that everything worked. I also updated the README and wrote my use of AI assistance (I am not sure if I would’ve been able to revive the project without it)."}, {"post_id": 22753, "ts": "2026-07-05T10:28:33Z", "hours": 2.4594, "text": "I have been a bit quiet lately, here is what is happening: I am on holidays with my family in Spain, this is what is keeping my time limited. I also don’t have a desktop here so that makes working and coding a bit more difficult (I work on a 14” schoollaptop). I am working on a very big update, about adding satelite cams and nearby webcams to visualize fires and maybe other things. This is a bit harder than expected but I expect it to be done in some hours, this would be the special update for celebrating my 25 or 30 hours in total coding time. I am also trying to make the feedback recieved from the shipping true, removing some bugs users found, … If you are reading this maybe you would like to try it out, I really appreciate feedback because it helps me improve what I don’t see. https://climate-shield.netlify.app/"}, {"post_id": 16198, "ts": "2026-06-26T10:01:54Z", "hours": 8.3156, "text": "Changing to a real server & a new TACTICAL UI Added a new Dropdown menu to the TACTICAL page to filter threats by layers and fully changed the backend to the Hack Club Nest server! The biggest friction this week was dealing with my old Render backend constantly going to sleep, which made the web app feel broken to new users. I finally set up my FastAPI app with PM2 so it stays awake 24/7. On the frontend, I built a sleek new dropdown to change between Earthquakes, Floods, Storms, and Volcanoes. The hard part was getting the map layers to play nicely together, toggling the new NASA API’s kept overwriting my core 6,000+ wildfire array! I had to rewrite the logic to separate the Leaflet layers so the map can stays fast and doesn’t wipe your data when you switch views. Right now, I am still trying to fix some bugs and improving the CO2 graph, I am also planning on updating my README.md to explain the new features (better). THANK YOU FOR READING! (I am almost at 20 hours of coding omg, I may need to add a special feature for when it happens. Any ideas or improvements are really appreciated!)"}, {"post_id": 15016, "ts": "2026-06-24T12:13:11Z", "hours": 0.7833, "text": "I hit 10 hours of coding! Here is what i lately changed: I just made a clock in the Tactical page (who doesn’t need a clock). I changed the font-family to Roboto. And I also changed the colors and some styling to feel more personal (I got much comments saying that I used AI so I am currently rewriting the most of the css to feel more like me)."}, {"post_id": 14306, "ts": "2026-06-23T11:47:37Z", "hours": 1.7369, "text": "Lastly I’ve remade the whole (first section) of the README.md, no more AI is used in it. I have made some improvement on the Orbital to be able to display the extra sensors too (btw extra sensors is a new feature too, read the README.md to learn more about it). I also made a costum favicon. Right now I am gathering API’s for more data and info comming soon, and also trying to categorize the things better so my site doesn’t look too messy (to new users)."}, {"post_id": 13910, "ts": "2026-06-22T20:14:16Z", "hours": 3.6611, "text": "Here is a summary of what I added on Day 3: Orbital Engine: Implemented a 3D WebGL globe with hardware-accelerated solar shading and physical height-mapped thermal pillars. Predictive “Pre-Crime” Scanning: Created a sector-based scan that analyzes soil moisture and weather data to calculate ignition probability for any empty landmass. Tactical Evacuation Routing: Integrated the Open Source Routing Machine (OSRM) to automatically generate safe civilian escape paths based on wind direction and terrain. Multi-Hazard Sensor Array: Added specialized monitoring layers for Mudslides (soil hydrophobicity), Cyclones (SST anomalies), Volcanic Ash (stratospheric tracking), and Seismic Activity (USGS lithospheric data). Raw Radiometry Engine: Added the ability to ingest NASA MODAPS CSV data to measure physical fire intensity in Megawatts (FRP), rather than just visual location. Performance Engineering: Optimized massive dataset rendering by offloading complex physics calculations to background CPU Web Workers to ensure zero UI lag. More info in https://github.com/HackerDpro/climate-shield"}, {"post_id": 13270, "ts": "2026-06-21T18:44:58Z", "hours": 2.8814, "text": "Read the README.dm for a full resume but here is a shortened version of my day 2: I’ve hit a major milestone in the development of Climate Shield. Scaling a dashboard to handle 6,000+ live wildfire events while maintaining a responsive user interface required a total re-architecture of my data pipeline. Technical Challenges & Solutions: Performance Scaling: To prevent browser crashes, I migrated from standard map markers to an HTML5 Canvas rendering engine. This allows for thousands of data points to load near-instantly without lag. API Intelligence: To handle 6,000+ potential weather requests without triggering rate limits, I implemented an “on-demand” fetching model. Wind vectors and elevation-based terrain analytics now trigger only when a user interacts with a specific fire, ensuring the dashboard remains fast and efficient. Terrain-Aware Analytics: I integrated elevation data to model fire spread. The engine now calculates whether a fire is on a “Critical Uphill Alignment”—a major factor in real-world wildfire behavior—providing a 24-hour linear projection for the most dangerous incidents. Dashboard Evolution: I’ve evolved the UI into a true Command Center with three distinct view modes:Tactical: The default full-dashboard view.Orbital: A map-focused mode for spatial tracking. Telemetry: A high-level data engine featuring carbon flux calculations, predictive risk averages, and hazard distribution matrices. This transition from a simple map to a multi-layered predictive engine has significantly improved the tool’s utility. Whether it’s tracking global CO2 trajectories or specific uphill fire spread, Climate Shield is now a high-performance asset for wildfire visualization."}, {"post_id": 13006, "ts": "2026-06-21T08:24:12Z", "hours": 0.9553, "text": "Spent our first session setting up the entire architecture for Climate Shield. Instead of just building a static map, we built a live data bridge. We successfully connected a Python backend engine using FastAPI to NASA’s live EONET satellite network, pulling in over 6,000 active global wildfires! To bypass cloud firewalls and handle messy data, we engineered a custom data-cleaning filter. Then, we linked the coordinates to the OpenWeatherMap API to calculate real-time wind speed and direction. Right now, the frontend map isn’t just displaying fire locations—it is actively rendering dynamic Risk Vectors (yellow trajectory lines) showing exactly where the wind is driving the fire spread. Next up: building the AI hazard scoring system!"}]...
|
Title: Climate Shield by @HackerDpro | Stardance
Title: Climate Shield by @HackerDpro | Stardance
Devlogs:
Spent our first session setting up the entire architecture for Climate Shield. Instead of just building a static map, we built a live data bridge. We successfully connected a Python backend engine using FastAPI to NASA’s live EONET satellite network, pulling in over 6,000 active global wildfires! To bypass cloud firewalls and handle messy data, we engineered a custom data-cleaning filter. Then, we linked the coordinates to the OpenWeatherMap API to calculate real-time wind speed and direction. Right now, the frontend map isn’t just displaying fire locations—it is actively rendering dynamic Risk Vectors (yellow trajectory lines) showing exactly where the wind is driving the fire spread. Next up: building the AI hazard scoring system!
Read the README.dm for a full resume but here is a shortened version of my day 2: I’ve hit a major milestone in the development of Climate Shield. Scaling a dashboard to handle 6,000+ live wildfire events while maintaining a responsive user interface required a total re-architecture of my data pipeline. Technical Challenges & Solutions: Performance Scaling: To prevent browser crashes, I migrated from standard map markers to an HTML5 Canvas rendering engine. This allows for thousands of data points to load near-instantly without lag. API Intelligence: To handle 6,000+ potential weather requests without triggering rate limits, I implemented an “on-demand” fetching model. Wind vectors and elevation-based terrain analytics now trigger only when a user interacts with a specific fire, ensuring the dashboard remains fast and efficient. Terrain-Aware Analytics: I integrated elevation data to model fire spread. The engine now calculates whether a fire is on a “Critical Uphill Alignment”—a major factor in real-world wildfire behavior—providing a 24-hour linear projection for the most dangerous incidents. Dashboard Evolution: I’ve evolved the UI into a true Command Center with three distinct view modes:Tactical: The default full-dashboard view.Orbital: A map-focused mode for spatial tracking. Telemetry: A high-level data engine featuring carbon flux calculations, predictive risk averages, and hazard distribution matrices. This transition from a simple map to a multi-layered predictive engine has significantly improved the tool’s utility. Whether it’s tracking global CO2 trajectories or specific uphill fire spread, Climate Shield is now a high-performance asset for wildfire visualization.
Here is a summary of what I added on Day 3: Orbital Engine: Implemented a 3D WebGL globe with hardware-accelerated solar shading and physical height-mapped thermal pillars. Predictive “Pre-Crime” Scanning: Created a sector-based scan that analyzes soil moisture and weather data to calculate ignition probability for any empty landmass. Tactical Evacuation Routing: Integrated the Open Source Routing Machine (OSRM) to automatically generate safe civilian escape paths based on wind direction and terrain. Multi-Hazard Sensor Array: Added specialized monitoring layers for Mudslides (soil hydrophobicity), Cyclones (SST anomalies), Volcanic Ash (stratospheric tracking), and Seismic Activity (USGS lithospheric data). Raw Radiometry Engine: Added the ability to ingest NASA MODAPS CSV data to measure physical fire intensity in Megawatts (FRP), rather than just visual location. Performance Engineering: Optimized massive dataset rendering by offloading complex physics calculations to background CPU Web Workers to ensure zero UI lag. More info in https://github.com/HackerDpro/climate-shield
Lastly I’ve remade the whole (first section) of the README.md, no more AI is used in it. I have made some improvement on the Orbital to be able to display the extra sensors too (btw extra sensors is a new feature too, read the README.md to learn more about it). I also made a costum favicon. Right now I am gathering API’s for more data and info comming soon, and also trying to categorize the things better so my site doesn’t look too messy (to new users).
I hit 10 hours of coding! Here is what i lately changed: I just made a clock in the Tactical page (who doesn’t need a clock). I changed the font-family to Roboto. And I also changed the colors and some styling to feel more personal (I got much comments saying that I used AI so I am currently rewriting the most of the css to feel more like me).
Changing to a real server & a new TACTICAL UI Added a new Dropdown menu to the TACTICAL page to filter threats by layers and fully changed the backend to the Hack Club Nest server! The biggest friction this week was dealing with my old Render backend constantly going to sleep, which made the web app feel broken to new users. I finally set up my FastAPI app with PM2 so it stays awake 24/7. On the frontend, I built a sleek new dropdown to change between Earthquakes, Floods, Storms, and Volcanoes. The hard part was getting the map layers to play nicely together, toggling the new NASA API’s kept overwriting my core 6,000+ wildfire array! I had to rewrite the logic to separate the Leaflet layers so the map can stays fast and doesn’t wipe your data when you switch views. Right now, I am still trying to fix some bugs and improving the CO2 graph, I am also planning on updating my README.md to explain the new features (better). THANK YOU FOR READING! (I am almost at 20 hours of coding omg, I may need to add a special feature for when it happens. Any ideas or improvements are really appreciated!)
I have been a bit quiet lately, here is what is happening: I am on holidays with my family in Spain, this is what is keeping my time limited. I also don’t have a desktop here so that makes working and coding a bit more difficult (I work on a 14” schoollaptop). I am working on a very big update, about adding satelite cams and nearby webcams to visualize fires and maybe other things. This is a bit harder than expected but I expect it to be done in some hours, this would be the special update for celebrating my 25 or 30 hours in total coding time. I am also trying to make the feedback recieved from the shipping true, removing some bugs users found, … If you are reading this maybe you would like to try it out, I really appreciate feedback because it helps me improve what I don’t see. https://climate-shield.netlify.app/
After coming back to Climate Shield I found that the backend (hack club Nest) had stopped, so the dashboard could no longer load its data. I got it running again (with PM2 and systemd), then replaced the map that suddenly was asking for an API key with another one (Esri tiles). When the fires still seemed missing, I checked the live data and found 7,130 valid reports. On the new map, the markers were just too small and hard to see, so I made them bigger and with a dark outline. I then tested the Netlify page with the API and saw that everything worked. I also updated the README and wrote my use of AI assistance (I am not sure if I would’ve been able to revive the project without it).
POST-SHIP PROGRESS I’ve been working on satisfying the reviews I got from my last shipment’s voters. I have been making a tutorial for first-timers on my page, it will show the basics of how to navigate and use my Climate-Shield project, a replay will be availble in the “TELEMETRY” tab. (view picture below). I am doing my best on fixing a very annoying bug that makes the details from a fire show for a split second and dissapear. It has been hard to fix that bug for now… I am working on adding more resources so I don’t only rely on 1 API but multiple (some may have more data than others). The difficult part has been trying to merge same fires from different api’s in one fire (to not have duplicates). These are my main issues I am working on right now, tomorrow I’ll continue, have a good day!
More progress with merging Today I’ve mostly made progress with the codes to merge multiple API’s into the same details pup-up. I also did my best on finding a solution for the bug that has been happening when a fire pop-up shows and it touches the top of the page and dissapears. My only solution right now is to minimize the page (“ctrl” + “-”). Come back to see tomorrow’s devlog!
8 hours later = BUG FIXED After 8 hours of coding later and some frustrations: I finally fixed the annoying bug that I had (more info of the bug is to be seen in my previous devlogs). I am making my final changes before shipping, fixing a new smaller bug I found recently “NASA FIRMS data not loading”. After making all these changes: the bug fix, tutorial implementation, adding new sources and merging them, … I expect my 3rd ship to be soon!!!
ALL BUGS SOLVED (I think) This is my last devlog before 3rd ship! It was hard but I think I have done everything my 2nd ship’s voters told me to, I am exited to see what my 3rd ship’s voters will think of my project. I am happy with how my project turned out (Although I always like people giving me ideas and inspirations for future features and more)!
Ships:
I built Climate Shield, an AI-enhanced dashboard for global wildfire prediction. What I made: A high-performance Command Center that tracks 6,000+ real-time wildfire events. It integrates NASA satellite data with Open-Meteo elevation and OpenWeatherMap metrics to predict fire spread behaviors based on terrain and wind vectors. What was challenging: Scaling! Rendering 6k+ fires crashed my browser initially. I solved this by migrating the map engine to HTML5 Canvas for instant performance. I also had to implement an ‘on-demand’ API fetching strategy to bypass rate limits while maintaining deep-dive analytics. What I’m proud of: The ‘Terrain AI.’ By calculating elevation data in real-time, the dashboard now identifies ‘Critical Uphill Alignment’ a major factor in wildfire spread, and generates a 24-hour linear projection for dangerous outbreaks. How to test: Visit the Live Dashboard. ( https://climate-shield.netlify.app/ ) Toggle between Tactical (full data), Orbital (map focus), and Telemetry (deep analytics) modes. Click any fire marker to view specific wind, elevation, and hazard score data. Have fun discovering all the data.
I made a web page with NASA live data (API’s) to track natural problems around the world. CLIMATE SHIELD! I am proud of it being one of my biggest projects. I got the idea of doing this by seeing in the news all the wildfires happening right now, it was perfect timing as I was searching for ideas of what I could make for Startdance. Even though I knew there are already bunch of other sites that do this and may be 100x better than mine I just thought thta I woudl be so proud if I were able to make one myself. To be honest I did use AI, maybe a little bit too much some times. But I tried my best to participate as much as I can on the project, I know that AI shouldn’t be doing this for me. I learnt about all the back end things and API’s (I was frontend dev before but had low experience of back end, so this learnt me much too). So dear reviewer, I hope you like, enjoy and support my project as much as I do, have fun reviewing all the parts of it. If even like this my project would dissapoint you, I’d be glad to be able to get a feedback so I can make it even better! P.S. I appear to sometimes still have problems with the backend, it is hosted on the hack club Nest servers that should run 24/7 but I sometimes have connection errors with it so if the backend data doesn’t show directly after reloading the site please don’t check my project as failed, I am doing my best to make it work! Oh and yeah, I ma sorry for this looking so unstructurised but I didn’t really know how this be represented to you, if I maybe should write this the same layout as a README or a DEVBLOG
Dear voters, I made “CLIMATE SHIELD”, an interactive dashboard with real-time natural disasters (focussed mostly on fires) from NASA API’s being shown. Why: I made this project because I was surprised by hearing so much fire incidents on the news, I liked the idea of being able to see all fires and data in one place and easy-to-read. I also liked the idea of using NASA data for my project, as this Stardance challenge is sponsored by NASA. During the process of creating this project, I learn a lot about how to use API’s and merge multiple APIs into one dashboard. The difference between this and the previous ship I got lots of ideas and inspirations from the previous ship. So I did my best to implement them all into this ship, some examples: A canvas tutorial that explains the basics from my page to new users. You can replay it in the TELEMETRY page! Added more sources, this way some areas that weren’t covered before have also data (although I have done my best to only use free API’s, that means that it may not contain ALL the data there currently is). In my previous ship I added another way of seeing the world (if you click on the “RECON” buttons), now it is also a map you can select as standard-view. There was a bug that I can’t explain this short (you can see more info about it in my devlogs), but I mostly fixed it! I hope you have a great day, and thanks for voting!!!...
|
1793008365.5155494
|
1793872365.5155494
|
|
28091
|
NetSim Pro by @NITHIN | Stardance
|
NITHIN
|
1
|
55.0
|
585
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T16:16:21Z", "hours": 55.0, "multiplier": 14.85, "payout": 585, "blessing": "neutral", "text": "NetSim Pro is an interactive, browser-based computer network simulator engineered to model complex data flows, packet routing, and network security behaviors in real time. Built as a zero-dependency client-side application, it implements custom routing engines including OSPF Dijkstra Shortest Path First (SPF) pathfinders and RIP distance-vector algorithms, alongside automated Layer 7 DHCP discover-ack loops. The workspace features a highly interactive SVG drag-and-drop canvas where users can play around with custom topologies, link devices via Ethernet, fiber, or serial media cables, configure interface states, and inspect diagnostic headers layer-by-layer (Layers 1, 2, 3, 4, 7) using an integrated OSI Stack Inspector. The primary engineering challenge was bundling the entire canvas state machine, packet scheduler, and protocol simulation logic into three static frontend files, optimized by extending runtime Tailwind CSS configurations in-browser to style the dark Matte Obsidian and Clay Sand interface. To demonstrate its interactive capabilities, the simulator features an engaging Security Lab simulating DDoS flood vectors and ARP cache poisoning (MITM) attacks. Users can explore and test the system by generating pings, observing performance telemetry like CPU spikes on the dashboard, and deploying live mitigations like Firewall Rate Limiters and Switch Dynamic ARP Inspection (DAI) on the fly.", "repo": "https://github.com/Nithinfgs/NetSim-Pro", "demo": "https://vermillion-begonia-30b9a7.netlify.app/"}]...
|
[{"post_id": 23553, "ts": "202 [{"post_id": 23553, "ts": "2026-07-06T16:11:59Z", "hours": 9.0, "text": "I have Just fully finished"}, {"post_id": 23337, "ts": "2026-07-06T07:03:53Z", "hours": 13.0, "text": "Made some visual refinements to the project’s color scheme by switching to the Matte Obsidian & Clay Sand color palette. The updated palette provides a cleaner, more modern look while improving overall visual consistency across the application. Changes Made Updated the application to use the Matte Obsidian & Clay Sand color palette. Applied the same color palette changes to the GitHub repository. Updated the App.js file to reflect the new theme and related changes. This update focuses on improving the application’s appearance while keeping the existing functionality unchanged"}, {"post_id": 22632, "ts": "2026-07-05T05:51:47Z", "hours": 16.0, "text": "Today I worked on the JavaScript file, focusing on implementing the application logic. The CSS styling is complete, so my current priority is building and refining the functionality, connecting interactions, and ensuring everything works as expected. The next step is to finish the remaining JavaScript logic, test the features, and resolve any issues that come up during implementation."}, {"post_id": 21929, "ts": "2026-07-04T03:54:02Z", "hours": 14.0, "text": "My index file is done and have started working on my style.css and have pushed the index and readme to github"}, {"post_id": 18402, "ts": "2026-06-29T15:18:02Z", "hours": 0.0, "text": "Started working on NetSim Pro today! The project is still in its very early stages, and I’m currently building the foundation. Right now I’m working on the index.html file, setting up the initial structure, layout, and project organization before moving on to styling and functionality. The goal is to create a browser-based network simulator where users can design network topologies, configure devices like routers and switches, and visualize packet flow in real time. There’s a lot planned, but first I’m focusing on getting a clean and scalable frontend structure in place."}]...
|
Title: NetSim Pro by @NITHIN | Stardance
Devlogs: Title: NetSim Pro by @NITHIN | Stardance
Devlogs:
Started working on NetSim Pro today! The project is still in its very early stages, and I’m currently building the foundation. Right now I’m working on the index.html file, setting up the initial structure, layout, and project organization before moving on to styling and functionality. The goal is to create a browser-based network simulator where users can design network topologies, configure devices like routers and switches, and visualize packet flow in real time. There’s a lot planned, but first I’m focusing on getting a clean and scalable frontend structure in place.
My index file is done and have started working on my style.css and have pushed the index and readme to github
Today I worked on the JavaScript file, focusing on implementing the application logic. The CSS styling is complete, so my current priority is building and refining the functionality, connecting interactions, and ensuring everything works as expected. The next step is to finish the remaining JavaScript logic, test the features, and resolve any issues that come up during implementation.
Made some visual refinements to the project’s color scheme by switching to the Matte Obsidian & Clay Sand color palette. The updated palette provides a cleaner, more modern look while improving overall visual consistency across the application. Changes Made Updated the application to use the Matte Obsidian & Clay Sand color palette. Applied the same color palette changes to the GitHub repository. Updated the App.js file to reflect the new theme and related changes. This update focuses on improving the application’s appearance while keeping the existing functionality unchanged
I have Just fully finished
Ships:
NetSim Pro is an interactive, browser-based computer network simulator engineered to model complex data flows, packet routing, and network security behaviors in real time. Built as a zero-dependency client-side application, it implements custom routing engines including OSPF Dijkstra Shortest Path First (SPF) pathfinders and RIP distance-vector algorithms, alongside automated Layer 7 DHCP discover-ack loops. The workspace features a highly interactive SVG drag-and-drop canvas where users can play around with custom topologies, link devices via Ethernet, fiber, or serial media cables, configure interface states, and inspect diagnostic headers layer-by-layer (Layers 1, 2, 3, 4, 7) using an integrated OSI Stack Inspector. The primary engineering challenge was bundling the entire canvas state machine, packet scheduler, and protocol simulation logic into three static frontend files, optimized by extending runtime Tailwind CSS configurations in-browser to style the dark Matte Obsidian and Clay Sand interface. To demonstrate its interactive capabilities, the simulator features an engaging Security Lab simulating DDoS flood vectors and ARP cache poisoning (MITM) attacks. Users can explore and test the system by generating pings, observing performance telemetry like CPU spikes on the dashboard, and deploying live mitigations like Firewall Rate Limiters and Switch Dynamic ARP Inspection (DAI) on the fly....
|
1792882125.30198
|
1793746125.30198
|
|
30366
|
Aglang by @0xf1 | Stardance
|
0xf1
|
2
|
55.0
|
974
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T14:45:41Z", "hours": 26.0, "multiplier": 18.44, "payout": 473, "blessing": "neutral", "text": "hello! this is aglang, my own esoteric language made to be similar to assembly. it offers 13 operators, and with those (almost) anything is possible! you can try aglang by either downloading the cli (in the repo the “Source code” button links to) or by using the online interpreter (“Try project” button). if you’re confused and want to learn aglang, try the new interactive course, available on the website in the “learn” section: it will guide you through everything the language can do in only 10 short lessons and exercises. the cli includes an interpreter, a C transpiler and a compiler (note: the compiler needs GCC to be installed)! if you want to develop aglang programs more easily, we even have a vscode extension, with syntax highlighting and statement templates that said, go on and try aglang! its easier than you would expect", "repo": "https://github.com/0xF1dev/aglang", "demo": "https://aglang.0xf1.dev"}, {"ship_num": 2, "ts": "2026-07-15T16:48:54Z", "hours": 29.0, "multiplier": 17.01, "payout": 501, "blessing": "neutral", "text": "hello! this is Aglang , my own esoteric language. an esoteric language (or esolang) is a language made as a joke or to be hard to use , like brainf*ck. my language is made to be really basic: you only have two 8bit registers , and a stack ; there are only 18 valid characters in Aglang, easy to remember, right? in the cli, i implemented both an interpreter (works everywhere) and a compiler (only x86-64 linux); a guide on installation and usage is in its readme, but if you dont want to install it, you can try Aglang in the web interpreter. this project is split into two repositories: the cli at https://github.com/0xF1dev/aglang (main repo) the web interpreter at https://github.com/0xF1dev/aglang-website the website includes some examples and a link to both repos and the documentation. the “Try project” button is linked to the web interpreter (if the domain doesnt work, use https://aglang-website.vercel.app/ ), while the “See source code” takes to the cli’s repository. and now, go crazy and write some code!", "repo": "https://github.com/0xF1dev/aglang", "demo": "https://aglang.0xf1.dev"}]...
|
[{"post_id": 38917, "ts": "202 [{"post_id": 38917, "ts": "2026-08-01T14:43:23Z", "hours": 2.2408, "text": "NOTE FOR THE SHIP: you dont have to try everything! even just the online interpreter is fine, it includes examples! Aglang devlog #12 im ready for the ship! i completed the vscode extension, and (for the third time) I. HATE. MICROSOFT. this might sound excessive, but anyone that ever tried reading their docs can surely understand, right? right…? but finally, after like 2 hours, i made the most basic of extensions! it has syntax highlighting (the thing that i wanted most) and a simple statement templating snippet. and now, i can pretty confidently say that aglang is completed! surely i wont abandon the project, that would just be a waste of the 50 hours i spent on this, but i consider the project to be mostly finished. see ya soon!"}, {"post_id": 38820, "ts": "2026-08-01T11:53:08Z", "hours": 6.4056, "text": "Aglang devlog #11 why did i decide to do this lmao. lets go in order: first of all, i added transpiling! currently, only C is supported as target, but i plan on adding python soon. it actually wasnt that hard, especially considering i basically never wrote C in my life. but this was the least interesting part of this devlog, cause i managed to optimize the compiler a bit! now this… this was hard. but now, when printing many characters in a row (like in the hello world example), instead of printing each character one by one, the full string gets stored in the .text (or .data on windows) section of the assembly and gets printed once! this reduced the size of the hello world program from ~1kb down to 633b, almost half! needless to say that this needed a few attempts… now the project’s folder looks kinda full… but oh well! and i can AGAIN say that GOD I HATE WINDOWS: it took a while to get shadow allocations right, especially since pushing to the stack in aglang means pushing to the stack in assembly too, so i had to keep track of where the old and original pointers were before allocating it. i fully expect this optimization to have some bugs, since i dont really trust the logic i wrote. i didnt add it in the transpile feature, since i imagine that modern c compilers optimize it on their own. now i promise that ill get to writing the vscode extension!"}, {"post_id": 38186, "ts": "2026-07-31T13:34:25Z", "hours": 7.1647, "text": "Aglang devlog #10 well this took a while. so, i came to the conclusion that an lsp server is kinda overkill, so, to make up for it, i decided to make an interactive lesson system on the website, like svelte! and well i didnt expect it to take 7 hours… i have to admit, it came out pretty good! they have code challenges, too :D anyways, for the autocomplete feature, ill still make it into the vscode extension (if i dont give up on that too) oh and i added shareable code in the web interpreter!"}, {"post_id": 37137, "ts": "2026-07-29T16:56:44Z", "hours": 4.7731, "text": "Aglang devlog #9 the windows compiler is here! and i can finally say GOD I HATE WINDOWS why was it so simple in linux with just a syscall and in windows to not pull my hair out i have to link c with the executable lmao but, a wise man once said: the past is gone, think about the future… or something like that idk while i worked on that, i ended up even fixing some problems too, so thats good. and i made the cli a bit prettier too, with spinners! in the meanwhile i was looking at lsp servers too, and they look… overly complicated… yep i guess i already did enough today not gonna get into allthat! see ya tomorrow!"}, {"post_id": 36932, "ts": "2026-07-29T10:32:25Z", "hours": 2.2236, "text": "Aglang devlog #9 there now is a compare statement in aglang! i had this idea for a while, but i thought it would make the language too easy… but i ended up making it anyway! together with it, i made labels too! so if, for example, you wanted to skip a section of code if the number 2 is bigger than 1, you would write it like so: 10?1; $ compare 2 (10 in binary) and 1 (still 1 in binary) $ ^.; $ if 2 is bigger, jump to label . (labels are can only be named with dots, it would have been to easy otherwise :) ) $ (other code...) ~.; $ define label . $ (do more stuff...) and this makes the fibonacci example easier, since now, instead of using counters in the stack, you can simply check if the current number isnt 233 and go back to a previous label. i still have to implement it in the web interpreter, but i guess it shouldnt take long! next step: windows compiler! (note: will probably require mingw to be installed)"}, {"post_id": 36386, "ts": "2026-07-28T13:43:11Z", "hours": 2.83, "text": "Aglang devlog #8 the first ship is done! but before getting to the actual devlog, i want to respond to some of the best feedback i got: why spend 29 (now 32) hours on a joke?: well, you see… uhh… next question please you should see a psychiatrist: i know thanks lmao and now, back to aglang developments! the first version of aglang is finally completed! i want to thank everybody for the feedback i received, it even gave me some ideas, thanks! in these 3 hours, i improved the website, so now instead of just the compiler it even has a full homepage with downloads: this was on my checklist for a while, but first i wanted to ship a first version to get some initial thoughts. next up for this project, i have a two ideas: conditionals and labels: i want to add a way of comparing registers/stack values/literals, and jump to a label or part of the program if that condition is met; with that, aglang would basically be a basic assembly language with a few restrictions windows compiler: the thing thats missing the most in the cli is a windows compiler, and since probably there are quite a few people that use windows more than linux :| and a few other things if i have the time: a vscode extension: this could have themes and docs on the side, minor stuff (i dont think anyone will use aglang in vscode) but idk i wanted to do it an lsp server: for autocompletions, error checking, etc… it could be integrated in more ides too"}, {"post_id": 28961, "ts": "2026-07-15T16:05:27Z", "hours": 3.3708, "text": "Aglang devlog #7 whooo! the documentation is done! im officially ready to ship! i finished writing the documentation and the repo readmes, and im ready to release this into the wild! the docs are availabe in the cli’s repo, but they’re linked in the website too. this took a few days, since i was working on another personal project, but im finally back !"}, {"post_id": 26651, "ts": "2026-07-11T16:17:08Z", "hours": 7.9264, "text": "Aglang devlog #6 the web interpreter is done! after almost 1000 lines of svelte and 8 hours of boredom, im happy to announce that the js implementation of the aglang interpreter is completed! it is now available at https://aglang.0xf1.dev (the dns changes might take some time to fully propagate, so if it isnt loading, it probably will in a few hours…) it is basically a 1:1 copy of the rust code, but prettier! ahem… because of the ui, not the code… and i even designed a logo for it! in it are all the valid characters in aglang. in the meanwhile, i fixed and refactored the loop system in both the js and rust versions. the next steps are writing the docs , preparing a good readme and then i can finally ship the project! see ya then! and p.s. i havent optimized the website for mobile, but i imagine nobody uses stardance on a smartphone, right?"}, {"post_id": 23735, "ts": "2026-07-06T21:08:00Z", "hours": 6.8822, "text": "Aglang devlog #5 no yeah im officially going crazy so, after a bit, the compiler is DONE! now it spits valid x86-64 asm and even automatically compiles it to an executable with gcc! and i even managed to make a fibonacci sequence example program! (it only computes numbers up to 144 since its the highest fibonacci number in the unsigned 8bit integer limit) but to make that, i had to spend HOURS thinking about how to do it. the problem was that in Aglang, you have 2 registers and a stack, and for that fibonacci program i couldnt make it print random ascii characters, but instead the actual numbers in the decimal system: for that i tried making loops that converted a number into the digits that composed it, buuuuut you still need the 2 registers to keep the fibonacci numbers you have! i even surrendered and tried asking gemini, but it would go absolutely CRAZY: it would give really long responses and contradict itself in the code… a bit of like when you ask an ai to give you the seahorse emoji. so, the ultimate solution was to implement a “numeric value” parameter to the stdout argument. therefore, now, if you write something like 01000001>\\#; you would get the actual 65 number instead of the character ‘A’ and all the problems would go to the compiler and assembly! but i dont care now, cus its DONE!!! the next steps, i think, should be making a js interpreter, so that the language can be tried online without downloading anything, so ill work on that tomorrow…"}, {"post_id": 22847, "ts": "2026-07-05T13:48:12Z", "hours": 2.2458, "text": "Aglang devlog #4 it was the comments IT HAD ALWAYS BEEN THE COMMENTS i think im about to go crazy, cuz im trying to manually write assembly to know that the compiler should write, and trying the basic alphabet loop i couldnt get it to work, no matter what it was always printing ▒ . i tried everything, i even managed to get SATAN ITSELF to write my output (check attached image)… but finally… i tried deleting the comments i put with the original aglang line… and it worked. i found out that the stdout token in aglang (“ \\ ”, i even have to write it twice here in the post because stardance has the same problem lmao) was making nasm think that i was trying to escape the newline after the comment, thus making the next assembly line part of the comment. as you can see from the logged time it literally took over 2 hours of my life because of a single backslash."}, {"post_id": 22303, "ts": "2026-07-04T18:16:35Z", "hours": 1.4739, "text": "Aglang devlog #3 so i uhh… kinda refactored everything? i realized that to make the compiler i had 2 options: make a separate project (and repo) integrate it in the existing interpreter the latter option made more sense, because since the project is small i can just split into two commands. so, after 1.30hrs, i managed to split and reorganize the code! now to run the aglang interpreter you can run: aglang run ./main.ag the next step is building the compiler itself, but ill leave that to tomorrow. (and i think itll just support linux elf64 x86-64 architectures, sorry arm friends!) oh wait! i forgot to tell y’all why the name “Aglang”! nothing special actually, “Ag” just stands for “Ugly” lmao"}, {"post_id": 22121, "ts": "2026-07-04T12:36:09Z", "hours": 4.2497, "text": "Aglang devlog #2 the interpreter is done faster than i expected and after some issues i settled on the syntax. ive added comments (kinda hated working on them), changed the input structure a little bit (now the input gets directly stored on the stack). the next step is building a compiler to x86-64 assembly, i dont think i’ll make it for other architectures. i guess it shouldnt be that hard since the language’s features are pretty similar to how assembly works ( obvious foreshadowing ) this example outputs every uppercase letter in the alphabet: 01000001>''; $ move 65 (A char in ascii) to reg2 $ 11010>:; $ push alphabet counter (from A to Z) into stack $ [ $ loop (ends when first value in stack is 0) $ ''>\\; $ output the letter $ 1010>\\; $ newline $ ''+1; $ add 1 to the ascii value to go to the next letter $ :>'; $ move counter to reg1 $ :!; $ pop old counter $ '-1; $ remove 1 from the counter $ '>:; $ push the updated counter to the stack $ ] (the text between the $ are comments)"}, {"post_id": 21635, "ts": "2026-07-03T17:57:37Z", "hours": 3.3219, "text": "Aglang devlog #1 i’m finally building a language! Aglang is an esoteric language (like brainf*ck) with 15 possible characters (not including the 0’s and 1’s of binary literals) where you are given two 8-bit registers and a stack: their values can be moved and deleted and arithmetic operations can be done with their respective characters. i’m currently building an interpreter in Rust, but i hope once im done with that to start creating a compiler to x86-64 assembly. i’ve attached a scheme made in KDE Drawy (i changed it like 8 times already) describing the language (sorry it’s in italian and my writing sucks), an aglang snippet and the parsed output in the interpreter."}]...
|
Title: Aglang by @0xf1 | Stardance
Devlogs:
Aglan Title: Aglang by @0xf1 | Stardance
Devlogs:
Aglang devlog #1 i’m finally building a language! Aglang is an esoteric language (like brainf*ck) with 15 possible characters (not including the 0’s and 1’s of binary literals) where you are given two 8-bit registers and a stack: their values can be moved and deleted and arithmetic operations can be done with their respective characters. i’m currently building an interpreter in Rust, but i hope once im done with that to start creating a compiler to x86-64 assembly. i’ve attached a scheme made in KDE Drawy (i changed it like 8 times already) describing the language (sorry it’s in italian and my writing sucks), an aglang snippet and the parsed output in the interpreter.
Aglang devlog #2 the interpreter is done faster than i expected and after some issues i settled on the syntax. ive added comments (kinda hated working on them), changed the input structure a little bit (now the input gets directly stored on the stack). the next step is building a compiler to x86-64 assembly, i dont think i’ll make it for other architectures. i guess it shouldnt be that hard since the language’s features are pretty similar to how assembly works ( obvious foreshadowing ) this example outputs every uppercase letter in the alphabet: 01000001>''; $ move 65 (A char in ascii) to reg2 $ 11010>:; $ push alphabet counter (from A to Z) into stack $ [ $ loop (ends when first value in stack is 0) $ ''>\; $ output the letter $ 1010>\; $ newline $ ''+1; $ add 1 to the ascii value to go to the next letter $ :>'; $ move counter to reg1 $ :!; $ pop old counter $ '-1; $ remove 1 from the counter $ '>:; $ push the updated counter to the stack $ ] (the text between the $ are comments)
Aglang devlog #3 so i uhh… kinda refactored everything? i realized that to make the compiler i had 2 options: make a separate project (and repo) integrate it in the existing interpreter the latter option made more sense, because since the project is small i can just split into two commands. so, after 1.30hrs, i managed to split and reorganize the code! now to run the aglang interpreter you can run: aglang run ./main.ag the next step is building the compiler itself, but ill leave that to tomorrow. (and i think itll just support linux elf64 x86-64 architectures, sorry arm friends!) oh wait! i forgot to tell y’all why the name “Aglang”! nothing special actually, “Ag” just stands for “Ugly” lmao
Aglang devlog #4 it was the comments IT HAD ALWAYS BEEN THE COMMENTS i think im about to go crazy, cuz im trying to manually write assembly to know that the compiler should write, and trying the basic alphabet loop i couldnt get it to work, no matter what it was always printing ▒ . i tried everything, i even managed to get SATAN ITSELF to write my output (check attached image)… but finally… i tried deleting the comments i put with the original aglang line… and it worked. i found out that the stdout token in aglang (“ \ ”, i even have to write it twice here in the post because stardance has the same problem lmao) was making nasm think that i was trying to escape the newline after the comment, thus making the next assembly line part of the comment. as you can see from the logged time it literally took over 2 hours of my life because of a single backslash.
Aglang devlog #5 no yeah im officially going crazy so, after a bit, the compiler is DONE! now it spits valid x86-64 asm and even automatically compiles it to an executable with gcc! and i even managed to make a fibonacci sequence example program! (it only computes numbers up to 144 since its the highest fibonacci number in the unsigned 8bit integer limit) but to make that, i had to spend HOURS thinking about how to do it. the problem was that in Aglang, you have 2 registers and a stack, and for that fibonacci program i couldnt make it print random ascii characters, but instead the actual numbers in the decimal system: for that i tried making loops that converted a number into the digits that composed it, buuuuut you still need the 2 registers to keep the fibonacci numbers you have! i even surrendered and tried asking gemini, but it would go absolutely CRAZY: it would give really long responses and contradict itself in the code… a bit of like when you ask an ai to give you the seahorse emoji. so, the ultimate solution was to implement a “numeric value” parameter to the stdout argument. therefore, now, if you write something like 01000001>\#; you would get the actual 65 number instead of the character ‘A’ and all the problems would go to the compiler and assembly! but i dont care now, cus its DONE!!! the next steps, i think, should be making a js interpreter, so that the language can be tried online without downloading anything, so ill work on that tomorrow…
Aglang devlog #6 the web interpreter is done! after almost 1000 lines of svelte and 8 hours of boredom, im happy to announce that the js implementation of the aglang interpreter is completed! it is now available at https://aglang.0xf1.dev (the dns changes might take some time to fully propagate, so if it isnt loading, it probably will in a few hours…) it is basically a 1:1 copy of the rust code, but prettier! ahem… because of the ui, not the code… and i even designed a logo for it! in it are all the valid characters in aglang. in the meanwhile, i fixed and refactored the loop system in both the js and rust versions. the next steps are writing the docs , preparing a good readme and then i can finally ship the project! see ya then! and p.s. i havent optimized the website for mobile, but i imagine nobody uses stardance on a smartphone, right?
Aglang devlog #7 whooo! the documentation is done! im officially ready to ship! i finished writing the documentation and the repo readmes, and im ready to release this into the wild! the docs are availabe in the cli’s repo, but they’re linked in the website too. this took a few days, since i was working on another personal project, but im finally back !
Aglang devlog #8 the first ship is done! but before getting to the actual devlog, i want to respond to some of the best feedback i got: why spend 29 (now 32) hours on a joke?: well, you see… uhh… next question please you should see a psychiatrist: i know thanks lmao and now, back to aglang developments! the first version of aglang is finally completed! i want to thank everybody for the feedback i received, it even gave me some ideas, thanks! in these 3 hours, i improved the website, so now instead of just the compiler it even has a full homepage with downloads: this was on my checklist for a while, but first i wanted to ship a first version to get some initial thoughts. next up for this project, i have a two ideas: conditionals and labels: i want to add a way of comparing registers/stack values/literals, and jump to a label or part of the program if that condition is met; with that, aglang would basically be a basic assembly language with a few restrictions windows compiler: the thing thats missing the most in the cli is a windows compiler, and since probably there are quite a few people that use windows more than linux :| and a few other things if i have the time: a vscode extension: this could have themes and docs on the side, minor stuff (i dont think anyone will use aglang in vscode) but idk i wanted to do it an lsp server: for autocompletions, error checking, etc… it could be integrated in more ides too
Aglang devlog #9 there now is a compare statement in aglang! i had this idea for a while, but i thought it would make the language too easy… but i ended up making it anyway! together with it, i made labels too! so if, for example, you wanted to skip a section of code if the number 2 is bigger than 1, you would write it like so: 10?1; $ compare 2 (10 in binary) and 1 (still 1 in binary) $ ^.; $ if 2 is bigger, jump to label . (labels are can only be named with dots, it would have been to easy otherwise :) ) $ (other code...) ~.; $ define label . $ (do more stuff...) and this makes the fibonacci example easier, since now, instead of using counters in the stack, you can simply check if the current number isnt 233 and go back to a previous label. i still have to implement it in the web interpreter, but i guess it shouldnt take long! next step: windows compiler! (note: will probably require mingw to be installed)
Aglang devlog #9 the windows compiler is here! and i can finally say GOD I HATE WINDOWS why was it so simple in linux with just a syscall and in windows to not pull my hair out i have to link c with the executable lmao but, a wise man once said: the past is gone, think about the future… or something like that idk while i worked on that, i ended up even fixing some problems too, so thats good. and i made the cli a bit prettier too, with spinners! in the meanwhile i was looking at lsp servers too, and they look… overly complicated… yep i guess i already did enough today not gonna get into allthat! see ya tomorrow!
Aglang devlog #10 well this took a while. so, i came to the conclusion that an lsp server is kinda overkill, so, to make up for it, i decided to make an interactive lesson system on the website, like svelte! and well i didnt expect it to take 7 hours… i have to admit, it came out pretty good! they have code challenges, too :D anyways, for the autocomplete feature, ill still make it into the vscode extension (if i dont give up on that too) oh and i added shareable code in the web interpreter!
Aglang devlog #11 why did i decide to do this lmao. lets go in order: first of all, i added transpiling! currently, only C is supported as target, but i plan on adding python soon. it actually wasnt that hard, especially considering i basically never wrote C in my life. but this was the least interesting part of this devlog, cause i managed to optimize the compiler a bit! now this… this was hard. but now, when printing many characters in a row (like in the hello world example), instead of printing each character one by one, the full string gets stored in the .text (or .data on windows) section of the assembly and gets printed once! this reduced the size of the hello world program from ~1kb down to 633b, almost half! needless to say that this needed a few attempts… now the project’s folder looks kinda full… but oh well! and i can AGAIN say that GOD I HATE WINDOWS: it took a while to get shadow allocations right, especially since pushing to the stack in aglang means pushing to the stack in assembly too, so i had to keep track of where the old and original pointers were before allocating it. i fully expect this optimization to have some bugs, since i dont really trust the logic i wrote. i didnt add it in the transpile feature, since i imagine that modern c compilers optimize it on their own. now i promise that ill get to writing the vscode extension!
NOTE FOR THE SHIP: you dont have to try everything! even just the online interpreter is fine, it includes examples! Aglang devlog #12 im ready for the ship! i completed the vscode extension, and (for the third time) I. HATE. MICROSOFT. this might sound excessive, but anyone that ever tried reading their docs can surely understand, right? right…? but finally, after like 2 hours, i made the most basic of extensions! it has syntax highlighting (the thing that i wanted most) and a simple statement templating snippet. and now, i can pretty confidently say that aglang is completed! surely i wont abandon the project, that would just be a waste of the 50 hours i spent on this, but i consider the project to be mostly finished. see ya soon!
Ships:
hello! this is Aglang , my own esoteric language. an esoteric language (or esolang) is a language made as a joke or to be hard to use , like brainf*ck. my language is made to be really basic: you only have two 8bit registers , and a stack ; there are only 18 valid characters in Aglang, easy to remember, right? in the cli, i implemented both an interpreter (works everywhere) and a compiler (only x86-64 linux); a guide on installation and usage is in its readme, but if you dont want to install it, you can try Aglang in the web interpreter. this project is split into two repositories: the cli at https://github.com/0xF1dev/aglang (main repo) the web interpreter at https://github.com/0xF1dev/aglang-website the website includes some examples and a link to both repos and the documentation. the “Try project” button is linked to the web interpreter (if the domain doesnt work, use https://aglang-website.vercel.app/ ), while the “See source code” takes to the cli’s repository. and now, go crazy and write some code!
hello! this is aglang, my own esoteric language made to be similar to assembly. it offers 13 operators, and with those (almost) anything is possible! you can try aglang by either downloading the cli (in the repo the “Source code” button links to) or by using the online interpreter (“Try project” button). if you’re confused and want to learn aglang, try the new interactive course, available on the website in the “learn” section: it will guide you through everything the language can do in only 10 short lessons and exercises. the cli includes an interpreter, a C transpiler and a compiler (note: the compiler needs GCC to be installed)! if you want to develop aglang programs more easily, we even have a vscode extension, with syntax highlighting and statement templates that said, go on and try aglang! its easier than you would expect...
|
1792990565.3880165
|
1793076965.3880165
|
|
30987
|
Dewen by @jaxonpenka127 | Stardance
|
jaxonpenka127
|
4
|
55.0
|
532
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T21:07:25Z", "hours": 14.0, "multiplier": 9.65, "payout": 133, "blessing": "neutral", "text": "Last major ship for Dewen: agents with a Bring Your Own Key structure a desktop app for macOS multilingual support and a new logo (credit to @Jcleo2 for the logo geometry) Feel free to try out the new stuff if you’d like. https://dewen.netlify.app", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 2, "ts": "2026-09-12T21:44:40Z", "hours": 21.0, "multiplier": 12.55, "payout": 262, "blessing": "neutral", "text": "Features Added IndexedDB integration Avatars and more customization options More command bar commands SEO improvements so Dewen can appear in Google search results Two new mini analytics: Upcoming Tasks and Stale Tasks Better responsiveness across devices What was challenging? Probably the IndexedDB integration. It meant moving from a simple storage method to a full database. I had to learn how to create object stores, save data to them, and load that data when the app starts. What am I proud of? The IndexedDB integration and the increased customization. Adding IndexedDB makes Dewen feel much more like a real application than just a project, while features like avatars and theme presets make it much easier for users to personalize their experience. What’s next? Now that the Stardance Challenge is about to wrap up, I’m going to pivot some of my time toward other things, including the Congressional App Challenge and my other projects: AuditionLM, LIAB, and Pocket Lab, while also continue development on Dewen. Thank you for supporting me throughout this challenge and following along as Dewen grew.", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 3, "ts": "2026-07-31T16:18:38Z", "hours": 20.0, "multiplier": 4.19, "payout": 132, "blessing": "neutral", "text": "New Dewen version! Includes: removed topbar and updated sidebar accent color customization animation for collapsing and expanding mini analytics made what to focus on an analytic necessary bug fixes There will be more to come. Thanks for supporting me on this journey!", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 4, "ts": "2026-07-05T13:56:28Z", "hours": 0.0, "multiplier": 3.16, "payout": 5, "blessing": "neutral", "text": "This is my task and project management web app called Dewen, which is meant to be completely subscription-free, AI-optional, and local-first while delivering useful productivity tools. What was definitely challenging was the search and command bar, where I had to rely on AI tools to help me build it. What I’m proud of is how the tools sync with each other. When you add a task, it renders on the calendar, and when you start a focus session, the activity panel logs the action. Finally, users should know that it takes barely any steps to get started, since there are no accounts.", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}]...
|
[{"post_id": 81641, "ts": "202 [{"post_id": 81641, "ts": "2026-10-21T21:04:51Z", "hours": 3.1267, "text": "Last devlog: I decided to add multilingual support to make Dewen more accessible to people around the world. It supports languages like Spanish, French, German, Chinese, Japanese, Korean, and more. Feel free to try it out if you’d like 🙂"}, {"post_id": 74981, "ts": "2026-09-28T19:28:56Z", "hours": 1.0144, "text": "This isn’t really a devlog, but I thought I might just post about it. My app, after not having an identity for so long, finally has its own logo. I feel extremely glad about the logo being over and done with and the colors in the logo as well. I want to give credit to @Jcleo2 for creating the geometry for the logo, which I then refined and added my own colors. So thank you @Jcleo2 . Thanks for reading, and have a great day!"}, {"post_id": 72853, "ts": "2026-09-23T21:26:55Z", "hours": 2.2408, "text": "Now that Stardance is happening for another month, I’m able to do more devlogs, so kudos to everyone for making it happen. Another big milestone for Dewen: It officially has a desktop application now! Now you don’t have to use the website often and instead you can use the desktop application. It uses Tauri to help with wrapping the app in a desktop layer to help make it a legitimate desktop app. A quick heads up for macOS users: because this is an independent, open-source application bundle, macOS may display a warning stating the app is “damaged” on your first launch. You can learn how to do it correctly in the README on the GitHub repo page. Dewen is currently available for macOS, but I hope to expand it to Windows and Linux as well. Thanks for reading, and I hope you have a great day!"}, {"post_id": 70832, "ts": "2026-09-19T20:49:14Z", "hours": 1.7767, "text": "I have added a second agent: the Researcher Agent! To make it work, you need to have a Tavily API key and insert it into the settings. Then you can type what you want and it creates a quick note containing what it researched. Alongside that, I also added agent selection where you can choose which agent you want to use. This prevents weird things from happening if you instruct the wrong agent. I hope you have a great rest of your day! Try out the Researcher Agent now! (if you want to 😁)"}, {"post_id": 70616, "ts": "2026-09-19T13:47:33Z", "hours": 5.6486, "text": "I know I’m contradicting what I said before, that I was done with Stardance, but I thought this was something cool to talk about. Well, I have agents in Dewen now! Integrating AI into Dewen has been one of my top goals since the start. Now it’s actually a reality, and I feel absolute pride in accomplishing this. How it works is you toggle AI in the settings if you want it on or off, then it uses Bring Your Own Key (BYOK) meaning you can insert your API key into the app. Then there’s a button in the sidebar with shapes. Click on that, type in your prompt, and Dewen will do the rest. This is powered by my Python backend, hosted on Render and UptimeRobot opens it every five minutes to prevent it from taking 50 seconds to load the AI. I hope you enjoy using AI in Dewen, and have a great rest of your day!"}, {"post_id": 66915, "ts": "2026-09-12T21:34:55Z", "hours": 4.5225, "text": "Well, this is probably going to be my last devlog for the Stardance Challenge, so let’s make it count. First off, I finally managed to convert Dewen to IndexedDB, one of my long-term goals for the app. LocalStorage was starting to become limiting, and I wanted something more scalable while still keeping Dewen local-first. That’s why I went with IndexedDB. I set up DewenDB in storage.ts, added helper functions in main.ts to save tasks, notes, and activities, and made sure everything loads when the app starts. Now, I want to take a moment to look at how far we’ve come. Dewen started back in December 2025 as a simple to-do list. From there, it evolved into a productivity hub, then a productivity workspace, and now an actual application. The task list, focus timer, quick notes, calendar, activity panel, command bar, and everything else have come a long way from that original task list. Building Dewen, and participating in the Stardance Challenge, has taught me much more than just how to code. It has taught me how to take an idea and turn it into a real application that people can actually use. Now that the Stardance Challenge is wrapping up, I’m going to be shifting some of my time toward other projects while continuing to work on Dewen. First, Dewen is my submission for the 2026 Congressional App Challenge, representing Pennsylvania’s 15th District, so that’s something I’m excited to focus on. I also have several other projects I want to work on alongside Dewen: AuditionLM, an AI benchmark ranking and evaluation app; Local In A Box, or LIAB, a CLI tool for integrating and managing local-first architecture in applications; and Pocket Lab, a portable experimentation device for conducting experiments and exploring science. Stardance may be coming to an end, but Dewen never will. Thank you for following along, supporting the project, and watching it grow."}, {"post_id": 53471, "ts": "2026-08-24T01:15:39Z", "hours": 1.5208, "text": "To improve the customization of Dewen, I thought it would be nice to add theme presets to make choosing a theme faster and more approachable. Themes include default, ocean, forest, sunset, rose, midnight, terminal, and slate. Another thing I added was localStoraging the focus timer state. For example, the focus timer reads 21:57, and you accidentally reload the site. It’ll still have 21:57 and continue going from there! I hope these new features improve the user experience of Dewen, and I want to continue improving them and the core experience of the app. Thanks for reading, and have a great day!"}, {"post_id": 53244, "ts": "2026-08-23T18:05:59Z", "hours": 8.0639, "text": "This week I continued to update Dewen with more polish and power to make it easier for people to use my app. These updates focus on overall experience, faster workflows, and turning Dewen into a more complete workspace. Features include: better responsiveness: To make the experience better for mobile and tablet users, I decided to improve the responsiveness of the app to transition to different layouts easily. more commands: To help keyboard users control their workflow more efficiently, I added new commands like editing tasks and notes, controlling the timer, prioritizing tasks, and more. To learn more about them, type :h in the command bar. new mini analytics: I changed two of the empty cards to contain Upcoming Tasks that are getting close to their due date, and Stale Tasks that haven’t been touched in a while. I hope that these new changes improve the user experience for Dewen, as this is turning into much more than a simple task list. Thank you for reading, and have a great day!"}, {"post_id": 44541, "ts": "2026-08-10T11:36:24Z", "hours": 0.9275, "text": "I wanted to make it so that Dewen could be more discoverable rather than just requiring people to “click a direct link”, so I utilized the Netlify Sitemap plugin and Google Search Console to make that happen! This is a pretty cool milestone for Dewen, as it shows that it isn’t just another website project. Now I want to continue improving its SEO and discoverability so that eventaully, you can type in “dewen app” and it’ll show up. Thank you for reading!"}, {"post_id": 42991, "ts": "2026-08-08T00:31:00Z", "hours": 2.5153, "text": "Before this devlog, the search/command bar used to only do :a <task description> . To make it easier to use Dewen with the keyboard without navigating the app so much, I decided to add more commands to the command bar. New commands include: :n <note content> | creates a note :c <task> | completes a task :d <task> | deletes a task :f <duration> <task> | starts a focus session (e.g. :f 25, take out the trash ) I hope these types of commands make it easier to use my app, especially for keyboard-native users. I’m also planning to implement more command bar commands as I continue improving the app. Thank you!"}, {"post_id": 39635, "ts": "2026-08-02T19:13:55Z", "hours": 3.3336, "text": "Added avatars and profile picture customization. Add your own image to serve as your avatar, look at presets for avatars based on hobbies and careers, and toggle if you want the accent on it on or off! 😁"}, {"post_id": 38276, "ts": "2026-07-31T16:16:14Z", "hours": 1.8494, "text": "Removed two mini analytics and added an animation for expanding and collapsing them"}, {"post_id": 37355, "ts": "2026-07-30T00:36:01Z", "hours": 3.1358, "text": "Added another customization option where you can customize the accent color 😁 (also updated mini analytics a little)"}, {"post_id": 36786, "ts": "2026-07-29T01:54:50Z", "hours": 3.9203, "text": "Added offline support to my website, so no matter where you are, you’re able to access my web app! 😁"}, {"post_id": 35534, "ts": "2026-07-27T01:06:01Z", "hours": 2.7853, "text": "Man, after using a single Vanilla JS file to develop Dewen, I realized I needed a better structure to help scale the project further. But I really underestimated how challenging it was going to be, especially since I don’t know React, meaning I have to learn it. So wish me luck, I guess."}, {"post_id": 34866, "ts": "2026-07-25T22:37:06Z", "hours": 2.5794, "text": "I have officially converted from main.js to main.ts, meaning everything is in TypeScript. Now to make everything modular…🤞"}, {"post_id": 34384, "ts": "2026-07-25T01:51:35Z", "hours": 2.8206, "text": "Currently trying to convert from Vanilla JS to TypeScript and eventually a framework like React. Fingers crossed! 🤞"}, {"post_id": 30471, "ts": "2026-07-18T02:05:51Z", "hours": 2.4369, "text": "Part 1 of redesigning mini analytics: making a risk report featuring overdue tasks, tasks due today, and blocked tasks"}, {"post_id": 29247, "ts": "2026-07-16T01:10:25Z", "hours": 0.0, "text": "New UI changes so far (removed topbar and updated sidebar a little)"}, {"post_id": 26315, "ts": "2026-07-11T01:24:46Z", "hours": 0.0, "text": "This isn’t really a devlog, but rather a heads up about something: Hackatime and Stardance are saying that I’ve worked on this for a few hours. That’s incorrect. I’ve been working on this project since December and January. I’ve used AI to help me with some of the project, but this is in no way a “vibe coded” app. I’ve included a screenshot of my oldest Git commit history for the project to set the record straight. Thanks for the feedback, and I will continue working on improving this web app!"}, {"post_id": 23543, "ts": "2026-07-06T15:56:44Z", "hours": 0.0, "text": "Have any feature ideas for Dewen? Would be happy to help develop them!"}, {"post_id": 22976, "ts": "2026-07-05T17:37:45Z", "hours": 0.0, "text": "Currently working on leveling up the mini analytics (the cards you see under the “Good morning” message) to display useful information. Stay tuned!"}, {"post_id": 22874, "ts": "2026-07-05T14:32:54Z", "hours": 0.0, "text": "Fixed a calendar and decrastinator bug"}, {"post_id": 22831, "ts": "2026-07-05T13:06:36Z", "hours": 0.0, "text": "Energy Gauge"}]...
|
Title: Dewen by @jaxonpenka127 | Stardance
Devlog Title: Dewen by @jaxonpenka127 | Stardance
Devlogs:
Energy Gauge
Fixed a calendar and decrastinator bug
Currently working on leveling up the mini analytics (the cards you see under the “Good morning” message) to display useful information. Stay tuned!
Have any feature ideas for Dewen? Would be happy to help develop them!
This isn’t really a devlog, but rather a heads up about something: Hackatime and Stardance are saying that I’ve worked on this for a few hours. That’s incorrect. I’ve been working on this project since December and January. I’ve used AI to help me with some of the project, but this is in no way a “vibe coded” app. I’ve included a screenshot of my oldest Git commit history for the project to set the record straight. Thanks for the feedback, and I will continue working on improving this web app!
New UI changes so far (removed topbar and updated sidebar a little)
Part 1 of redesigning mini analytics: making a risk report featuring overdue tasks, tasks due today, and blocked tasks
Currently trying to convert from Vanilla JS to TypeScript and eventually a framework like React. Fingers crossed! 🤞
I have officially converted from main.js to main.ts, meaning everything is in TypeScript. Now to make everything modular…🤞
Man, after using a single Vanilla JS file to develop Dewen, I realized I needed a better structure to help scale the project further. But I really underestimated how challenging it was going to be, especially since I don’t know React, meaning I have to learn it. So wish me luck, I guess.
Added offline support to my website, so no matter where you are, you’re able to access my web app! 😁
Added another customization option where you can customize the accent color 😁 (also updated mini analytics a little)
Removed two mini analytics and added an animation for expanding and collapsing them
Added avatars and profile picture customization. Add your own image to serve as your avatar, look at presets for avatars based on hobbies and careers, and toggle if you want the accent on it on or off! 😁
Before this devlog, the search/command bar used to only do :a <task description> . To make it easier to use Dewen with the keyboard without navigating the app so much, I decided to add more commands to the command bar. New commands include: :n <note content> | creates a note :c <task> | completes a task :d <task> | deletes a task :f <duration> <task> | starts a focus session (e.g. :f 25, take out the trash ) I hope these types of commands make it easier to use my app, especially for keyboard-native users. I’m also planning to implement more command bar commands as I continue improving the app. Thank you!
I wanted to make it so that Dewen could be more discoverable rather than just requiring people to “click a direct link”, so I utilized the Netlify Sitemap plugin and Google Search Console to make that happen! This is a pretty cool milestone for Dewen, as it shows that it isn’t just another website project. Now I want to continue improving its SEO and discoverability so that eventaully, you can type in “dewen app” and it’ll show up. Thank you for reading!
This week I continued to update Dewen with more polish and power to make it easier for people to use my app. These updates focus on overall experience, faster workflows, and turning Dewen into a more complete workspace. Features include: better responsiveness: To make the experience better for mobile and tablet users, I decided to improve the responsiveness of the app to transition to different layouts easily. more commands: To help keyboard users control their workflow more efficiently, I added new commands like editing tasks and notes, controlling the timer, prioritizing tasks, and more. To learn more about them, type :h in the command bar. new mini analytics: I changed two of the empty cards to contain Upcoming Tasks that are getting close to their due date, and Stale Tasks that haven’t been touched in a while. I hope that these new changes improve the user experience for Dewen, as this is turning into much more than a simple task list. Thank you for reading, and have a great day!
To improve the customization of Dewen, I thought it would be nice to add theme presets to make choosing a theme faster and more approachable. Themes include default, ocean, forest, sunset, rose, midnight, terminal, and slate. Another thing I added was localStoraging the focus timer state. For example, the focus timer reads 21:57, and you accidentally reload the site. It’ll still have 21:57 and continue going from there! I hope these new features improve the user experience of Dewen, and I want to continue improving them and the core experience of the app. Thanks for reading, and have a great day!
Well, this is probably going to be my last devlog for the Stardance Challenge, so let’s make it count. First off, I finally managed to convert Dewen to IndexedDB, one of my long-term goals for the app. LocalStorage was starting to become limiting, and I wanted something more scalable while still keeping Dewen local-first. That’s why I went with IndexedDB. I set up DewenDB in storage.ts, added helper functions in main.ts to save tasks, notes, and activities, and made sure everything loads when the app starts. Now, I want to take a moment to look at how far we’ve come. Dewen started back in December 2025 as a simple to-do list. From there, it evolved into a productivity hub, then a productivity workspace, and now an actual application. The task list, focus timer, quick notes, calendar, activity panel, command bar, and everything else have come a long way from that original task list. Building Dewen, and participating in the Stardance Challenge, has taught me much more than just how to code. It has taught me how to take an idea and turn it into a real application that people can actually use. Now that the Stardance Challenge is wrapping up, I’m going to be shifting some of my time toward other projects while continuing to work on Dewen. First, Dewen is my submission for the 2026 Congressional App Challenge, representing Pennsylvania’s 15th District, so that’s something I’m excited to focus on. I also have several other projects I want to work on alongside Dewen: AuditionLM, an AI benchmark ranking and evaluation app; Local In A Box, or LIAB, a CLI tool for integrating and managing local-first architecture in applications; and Pocket Lab, a portable experimentation device for conducting experiments and exploring science. Stardance may be coming to an end, but Dewen never will. Thank you for following along, supporting the project, and watching it grow.
I know I’m contradicting what I said before, that I was done with Stardance, but I thought this was something cool to talk about. Well, I have agents in Dewen now! Integrating AI into Dewen has been one of my top goals since the start. Now it’s actually a reality, and I feel absolute pride in accomplishing this. How it works is you toggle AI in the settings if you want it on or off, then it uses Bring Your Own Key (BYOK) meaning you can insert your API key into the app. Then there’s a button in the sidebar with shapes. Click on that, type in your prompt, and Dewen will do the rest. This is powered by my Python backend, hosted on Render and UptimeRobot opens it every five minutes to prevent it from taking 50 seconds to load the AI. I hope you enjoy using AI in Dewen, and have a great rest of your day!
I have added a second agent: the Researcher Agent! To make it work, you need to have a Tavily API key and insert it into the settings. Then you can type what you want and it creates a quick note containing what it researched. Alongside that, I also added agent selection where you can choose which agent you want to use. This prevents weird things from happening if you instruct the wrong agent. I hope you have a great rest of your day! Try out the Researcher Agent now! (if you want to 😁)
Now that Stardance is happening for another month, I’m able to do more devlogs, so kudos to everyone for making it happen. Another big milestone for Dewen: It officially has a desktop application now! Now you don’t have to use the website often and instead you can use the desktop application. It uses Tauri to help with wrapping the app in a desktop layer to help make it a legitimate desktop app. A quick heads up for macOS users: because this is an independent, open-source application bundle, macOS may display a warning stating the app is “damaged” on your first launch. You can learn how to do it correctly in the README on the GitHub repo page. Dewen is currently available for macOS, but I hope to expand it to Windows and Linux as well. Thanks for reading, and I hope you have a great day!
This isn’t really a devlog, but I thought I might just post about it. My app, after not having an identity for so long, finally has its own logo. I feel extremely glad about the logo being over and done with and the colors in the logo as well. I want to give credit to @Jcleo2 for creating the geometry for the logo, which I then refined and added my own colors. So thank you @Jcleo2 . Thanks for reading, and have a great day!
Last devlog: I decided to add multilingual support to make Dewen more accessible to people around the world. It supports languages like Spanish, French, German, Chinese, Japanese, Korean, and more. Feel free to try it out if you’d like 🙂
Ships:
This is my task and project management web app called Dewen, which is meant to be completely subscription-free, AI-optional, and local-first while delivering useful productivity tools. What was definitely challenging was the search and command bar, where I had to rely on AI tools to help me build it. What I’m proud of is how the tools sync with each other. When you add a task, it renders on the calendar, and when you start a focus session, the activity panel logs the action. Finally, users should know that it takes barely any steps to get started, since there are no accounts.
New Dewen version! Includes: removed topbar and updated sidebar accent color customization animation for collapsing and expanding mini analytics made what to focus on an analytic necessary bug fixes There will be more to come. Thanks for supporting me on this journey!
Features Added IndexedDB integration Avatars and more customization options More command bar commands SEO improvements so Dewen can appear in Google search results Two new mini analytics: Upcoming Tasks and Stale Tasks Better responsiveness across devices What was challenging? Probably the IndexedDB integration. It meant moving from a simple storage method to a full database. I had to learn how to create object stores, save data to them, and load that data when the app starts. What am I proud of? The IndexedDB integration and the increased customization. Adding IndexedDB makes Dewen feel much more like a real application than just a project, while features like avatars and theme presets make it much easier for users to personalize their experience. What’s next? Now that the Stardance Challenge is about to wrap up, I’m going to pivot some of my time toward other things, including the Congressional App Challenge and my other projects: AuditionLM, LIAB, and Pocket Lab, while also continue development on Dewen. Thank you for supporting me throughout this challenge and following along as Dewen grew.
Last major ship for Dewen: agents with a Bring Your Own Key structure a desktop app for macOS multilingual support and a new logo (credit to @Jcleo2 for the logo geometry) Feel free to try out the new stuff if you’d like. https://dewen.netlify.app...
|
1793087737.0869799
|
1793174137.0869799
|
|
33116
|
livefetch by @WilGulf | Stardance
|
WilGulf
|
2
|
55.0
|
627
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-13T12:37:52Z", "hours": 23.0, "multiplier": 17.51, "payout": 395, "blessing": "neutral", "text": "This is the second ship of livefetch. From the previous ship livefetch has gotten much more features working on linux that previously only worked on macOS. The two difference between livefetch on macOS and Linux is almost zero. But what I am more proud of for this ship is the spinning logo. It wasn’t easy and I had to learn the math behind calculating the new position of a point after rotating a X degrees of a angle. But in the end the spinning looks AWESOME, in my opinion. So for anyone trying this: there are multiple ways of installing on different distros or OS, and all instructions are in the readme. And also livefetch hasn’t been tested on a wide amount of different hardware, so if you find a issue please let me know, thank you!", "repo": "https://github.com/WilGulf/livefetch", "demo": "https://github.com/WilGulf/livefetch/releases/tag/v2.2.2"}, {"ship_num": 2, "ts": "2026-07-25T19:44:27Z", "hours": 32.0, "multiplier": 7.41, "payout": 232, "blessing": "neutral", "text": "I have made my own system monitoring tool like fastfetch except the system information shown will always be live and updated. Many of the functions used for getting that info was using apples APIs and that made it very challenging to code. I am now very proud that this can be installed like any other cli tool using homebrew and it feels like a real tool. For any user that wants to try this I want you to know that this tool has been written and tested for macos. Some things may work on linux too but dont expect the same functionality.", "repo": "https://github.com/WilGulf/livefetch", "demo": "https://github.com/WilGulf/livefetch/releases/tag/v2.2.2"}]...
|
[{"post_id": 46276, "ts": "202 [{"post_id": 46276, "ts": "2026-08-13T12:22:10Z", "hours": 0.4942, "text": "Devblog 12 Last devblog before ship, gotta get this half hour counted. This time has just been used for some fixes for the different repositories and als testing livefetch on multiple distros. – WilGulf"}, {"post_id": 46203, "ts": "2026-08-13T08:29:01Z", "hours": 5.6628, "text": "Devblog 11 First i completed all information on linux, but it isn’t much to show. Livefetch on Linux now works like on macOS. But as macOS got a homebrew tap I though Linux needed it’s own. I found a tool called “nfpm” that with one configuration can build packages for multiple distros, really recommend it! But maintaining multiple package repositories looked like a lot of work so I then programmed my own shell script that takes the latest version of livefetch and publish it to all repositories. Took some work but it is now easier for anyone to install livefetch. In the image you can see livefetch being installed with apt on debian. – WilGulf"}, {"post_id": 43348, "ts": "2026-08-08T15:35:26Z", "hours": 4.7919, "text": "Devblog 10 I have been working on some small improvments that togther can add up and make livefetch a bit easier to understand and use. The help message has been updated and improved. Then i have this new option that prints the available modules for your system. I have also been working on the README to be up to date and more useful. I have also been working on getting livefetch to the aur, but the website hasn’t been working for me. Trying to register a account on the aur just gives me a 503 error. I hope that gets fixed so next ship can be installed using yay. –WilGulf – WilGulf"}, {"post_id": 41302, "ts": "2026-08-05T13:19:38Z", "hours": 4.2653, "text": "Devblog 9 I didn’t have access to my linux machine, so I needed to work on something else. And this is a large update for livefetch. Livefetch now has a –spin-logo true option that spins the logo around it’s y-axis. It took a while to get the math right and place all the ascii characters at the right place and right Z-level. Sometimes the logo disappeard, sometimes the color was wrong, sometimes the logo didn’t even show. But now the spinning works, at least for the logos I have tested it with. –WilGulf"}, {"post_id": 40950, "ts": "2026-08-04T20:01:50Z", "hours": 3.0542, "text": "Devblog 8 Now you may notice the devblogs are much closer, why? Well getting system info on linux is so much easier when it is just reading a file. But now I have come to the final task, GPU and display info. The way of getting that info is different from every GPU manufacturer, and from what I seen for Nvidia you have to use their tool to do it, but that isnt garanteed to be install on a linux system with a Nvidia card. I guess if fastfetch could do it then so should I. –WilGulf"}, {"post_id": 40219, "ts": "2026-08-03T16:59:47Z", "hours": 2.1647, "text": "Devblog 7 First of, we got some memory bars on linux. Yes now livefetch can display your linux systems ram and swap, even disks! Now lets address the elephant in the room, the logo. The logo isn’t actually predetermined, now I have livefetch parsing the /etc/os-release to get the distro and use it’s logos. For the parsing I had to learn some new C string functions and try my way to get the os name out of the file, but i got there in the end! –WilGulf"}, {"post_id": 40024, "ts": "2026-08-03T11:28:05Z", "hours": 2.1403, "text": "Devblog 6 Now livefetch is getting support for linux. I plan on making every module on macos work on linux but currently we just need the printing to work. MacOS and linux are close but not enough for everything to work so most functions need a rewrite. –WilGulf"}, {"post_id": 34785, "ts": "2026-07-25T19:37:16Z", "hours": 0.5875, "text": "Devblog 5 Livefetch is being shipped. Now that version output shows the version of livefetch being the full release. I have updated it for homebrew and the README is complete. Now any mac user will be able to use this system monitor. –WilGulf"}, {"post_id": 34738, "ts": "2026-07-25T18:24:20Z", "hours": 4.3378, "text": "Devblog 4 I know I said the info was done, but here comes more. Using many of apples APIs we now can get the GPU model, battery and display stats. Livefetch also supports homebrew as the package manager you can install livefetch on your own system with, but also livefetch can track the amount of packages installed with homebrew. Hope to soon ship! –WilGulf"}, {"post_id": 28281, "ts": "2026-07-14T13:08:36Z", "hours": 11.1519, "text": "Info complete Now i have got so much system info on macos. Memory, swap, disk, local-ip, system locale and much more. But that i got working after much much time. Soon ready for first release for macos. –WilGulf"}, {"post_id": 26766, "ts": "2026-07-11T19:12:22Z", "hours": 6.9325, "text": "Real info Finally all info shown is the real data from the system. Now it is now you can see how the updating works. And no i do not use RHEL i just like the tuff logo. –WilGulf"}, {"post_id": 25947, "ts": "2026-07-10T13:51:21Z", "hours": 9.3881, "text": "livefetch When larping a linux distro you always need fastfetch/neofetch open. But the problem with those are that the info displayed gets outdated, after just a minute the ram usage could be completely wrong. This fastfetch like project shows the info live and that darker line looping through is what updates the info. Now both the info and logo shown is just a test and not real system information. This is just for testing. In the background there is a config read when starting the program that determines the logo and if that darker line should be shown. Later comes actually implementing a way to get that information on all the different operating systems. –WilGulf"}]...
|
Title: livefetch by @WilGulf | Stardance
Devlogs: Title: livefetch by @WilGulf | Stardance
Devlogs:
livefetch When larping a linux distro you always need fastfetch/neofetch open. But the problem with those are that the info displayed gets outdated, after just a minute the ram usage could be completely wrong. This fastfetch like project shows the info live and that darker line looping through is what updates the info. Now both the info and logo shown is just a test and not real system information. This is just for testing. In the background there is a config read when starting the program that determines the logo and if that darker line should be shown. Later comes actually implementing a way to get that information on all the different operating systems. –WilGulf
Real info Finally all info shown is the real data from the system. Now it is now you can see how the updating works. And no i do not use RHEL i just like the tuff logo. –WilGulf
Info complete Now i have got so much system info on macos. Memory, swap, disk, local-ip, system locale and much more. But that i got working after much much time. Soon ready for first release for macos. –WilGulf
Devblog 4 I know I said the info was done, but here comes more. Using many of apples APIs we now can get the GPU model, battery and display stats. Livefetch also supports homebrew as the package manager you can install livefetch on your own system with, but also livefetch can track the amount of packages installed with homebrew. Hope to soon ship! –WilGulf
Devblog 5 Livefetch is being shipped. Now that version output shows the version of livefetch being the full release. I have updated it for homebrew and the README is complete. Now any mac user will be able to use this system monitor. –WilGulf
Devblog 6 Now livefetch is getting support for linux. I plan on making every module on macos work on linux but currently we just need the printing to work. MacOS and linux are close but not enough for everything to work so most functions need a rewrite. –WilGulf
Devblog 7 First of, we got some memory bars on linux. Yes now livefetch can display your linux systems ram and swap, even disks! Now lets address the elephant in the room, the logo. The logo isn’t actually predetermined, now I have livefetch parsing the /etc/os-release to get the distro and use it’s logos. For the parsing I had to learn some new C string functions and try my way to get the os name out of the file, but i got there in the end! –WilGulf
Devblog 8 Now you may notice the devblogs are much closer, why? Well getting system info on linux is so much easier when it is just reading a file. But now I have come to the final task, GPU and display info. The way of getting that info is different from every GPU manufacturer, and from what I seen for Nvidia you have to use their tool to do it, but that isnt garanteed to be install on a linux system with a Nvidia card. I guess if fastfetch could do it then so should I. –WilGulf
Devblog 9 I didn’t have access to my linux machine, so I needed to work on something else. And this is a large update for livefetch. Livefetch now has a –spin-logo true option that spins the logo around it’s y-axis. It took a while to get the math right and place all the ascii characters at the right place and right Z-level. Sometimes the logo disappeard, sometimes the color was wrong, sometimes the logo didn’t even show. But now the spinning works, at least for the logos I have tested it with. –WilGulf
Devblog 10 I have been working on some small improvments that togther can add up and make livefetch a bit easier to understand and use. The help message has been updated and improved. Then i have this new option that prints the available modules for your system. I have also been working on the README to be up to date and more useful. I have also been working on getting livefetch to the aur, but the website hasn’t been working for me. Trying to register a account on the aur just gives me a 503 error. I hope that gets fixed so next ship can be installed using yay. –WilGulf – WilGulf
Devblog 11 First i completed all information on linux, but it isn’t much to show. Livefetch on Linux now works like on macOS. But as macOS got a homebrew tap I though Linux needed it’s own. I found a tool called “nfpm” that with one configuration can build packages for multiple distros, really recommend it! But maintaining multiple package repositories looked like a lot of work so I then programmed my own shell script that takes the latest version of livefetch and publish it to all repositories. Took some work but it is now easier for anyone to install livefetch. In the image you can see livefetch being installed with apt on debian. – WilGulf
Devblog 12 Last devblog before ship, gotta get this half hour counted. This time has just been used for some fixes for the different repositories and als testing livefetch on multiple distros. – WilGulf
Ships:
I have made my own system monitoring tool like fastfetch except the system information shown will always be live and updated. Many of the functions used for getting that info was using apples APIs and that made it very challenging to code. I am now very proud that this can be installed like any other cli tool using homebrew and it feels like a real tool. For any user that wants to try this I want you to know that this tool has been written and tested for macos. Some things may work on linux too but dont expect the same functionality.
This is the second ship of livefetch. From the previous ship livefetch has gotten much more features working on linux that previously only worked on macOS. The two difference between livefetch on macOS and Linux is almost zero. But what I am more proud of for this ship is the spinning logo. It wasn’t easy and I had to learn the math behind calculating the new position of a point after rotating a X degrees of a angle. But in the end the spinning looks AWESOME, in my opinion. So for anyone trying this: there are multiple ways of installing on different distros or OS, and all instructions are in the readme. And also livefetch hasn’t been tested on a wide amount of different hardware, so if you find a issue please let me know, thank you!...
|
1792986962.1134398
|
1793073362.1134398
|
|
60118
|
FluidSim by @AbdurRehman | Stardance
|
AbdurRehman
|
1
|
55.0
|
1027
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T10:31:19Z", "hours": 55.0, "multiplier": 18.75, "payout": 1027, "blessing": "neutral", "text": "Well I made a fluid simulation that runs completely on the GPU using WebGPU. Since everything happens on the gpu, like from the physics to the rendering, it can handle tens of thousands of particles in real time in the browser without having performance issues. What was challenging for me was moving everything over to WebGPU since before I was just using plain Three.js and stuff. It’s completely different from WebGL and I had to refactor a lot of code, especially how the sim was structured, and then setting up the rendering system. The other big challenge was just making the water actually look convincing. That took quite a while and a lot of tweaking to make it look at least somewhat realistic. Honestly pretty much how the entire thing turned out. The audio reacts to the physics, the water looks good (or acceptable at the very least), objects float and sink, you can sculpt the terrain, then there are wind gusts and you can interact with the water. Every little thing comes together in a way I’m really happy with. Like this project was just a simple particle test I was making just for fun but in the end I actually enjoyed making and playing around with it. Just open the web page. You’ll need a browser with WebGPU support to run it and the controls are pretty much on the screen. You can adjust sliders and stuff and pretty much play around with everything, including adding your own .glb models. Audio might not play immediately since it takes some time to load in the background.", "repo": "https://github.com/RealAbdurRehman/fluid-simulation", "demo": "https://fluid-simulation-sigma.vercel.app"}]...
|
[{"post_id": 72151, "ts": "202 [{"post_id": 72151, "ts": "2026-09-22T10:16:14Z", "hours": 1.7319, "text": "This is the final dev log. Like I said in the last devlog, the sim was basically feature complete so this dev log is mostly the cleanup and little UI improvements. I cleaned up a bunch of code by like removing dead code that had jut been sitting and I improved how the controls panel looks. Other than that I wrote the README and finalized the repo by adding stuff like the license and I also added a cool looking favicon. And with that, the project is now complete."}, {"post_id": 71772, "ts": "2026-09-21T14:41:21Z", "hours": 9.8517, "text": "I have made a ton of progress since the last devlog. First I added a simple but good looking sky shader which has clouds and a sun, and then hooked up textures on the loaded models so they aren’t just basic colors anymore. And I also added support for loading your own .glb models and they’ll work in the sim. Relatively small changes but they made the scene look a whole lot better and more interactive. Audio was the biggest change and took the most time, but it was also the most fun. There are multiple layers to it, like the general ambience is pretty much layered water sounds like water flowing sounds, foam sound, lapping sound, bubbles, etc that crossfade based on how the fluid is moving. External objects also create sounds like you can hear them splash in and out of the water or when heavy stuff sinks there is kind of a low rumble. There’s also sounds for water splashing on itself, objects colliding around with other objects, etc. There is also a cool underwater effect where if the camera is inside the water stuff get’s muffled and stuff which is really cool. What’s good is that everything is driven by the physics so everything is dynamic and nothing is being faked. Like each sound is created for a reason. After that I added wind to the sim. Like wind is created using gusts which are scheduled procedurally, so you get calm stretches and then a burst of air. I also added another interaction too. You can now create vortexes using V + left click which is kind of fun and adds more interactivity. I also added sculpting to the terrain. Now you can change the terrain to your liking by using different brush modes like: raise, lower, smoothen, flatten. I also optimized particles check with the terrain especially after stuff had become more dynamic though that was pretty easy to do. Some other small polishes I did was to clean up the settings panel thing among other small stuff. The sim is basically feature complete at this point, so next up is cleaning up the UI and then creating a good README."}, {"post_id": 70222, "ts": "2026-09-18T18:56:06Z", "hours": 8.7947, "text": "Since my last dev log I’ve mostly been working on the water’s visuals. First thing I did was to rewrite the screen space fluid rendering implementation and tuned it a bit to make it look way better than before and less like a bunch of stacked balls and I also added realistic looking refractions too. Then I added proper shadows to the scene, which made stuff look more alive. This bumped the visuals up a lot. Then I worked on caustics. This was one of those features that instantly made the water look ten times better. This took a bit of time to get right but eventually I got it to work and it looks good. After that, I added foam to make the water look less flat and blobby. The water, in general, waswas too perfect and so I added noise to the water to fix that. With these changes, there was a noticeable loss of performance so I had to work on that. Along the way I also cleaned up some of the code especially the GUI control panel thingy since it was getting too extensive so I cut down a lot of things. Then I finally added model support. Before you could only use basic shapes like squares, spheres etc. Now I can load in model files, and use them in the simulation which is really cool. There was also this weird bug where objects would disappear when you switched them around but after a bunch of changes in my code I finally fixed the bug. I also fixed other bugs like water kind of acting weird with the boat spawned which too took quite a bit of time to fix. Next I want to do some scene polish like better background, etc and then finally audio. I might also work some more on the object collision physics since I intentionally kept them really simple but I might not. Depends on how lazy I am I guess."}, {"post_id": 69606, "ts": "2026-09-17T12:18:15Z", "hours": 9.1133, "text": "Since my last dev log I’ve been working on terrain. I started with simple noise on a grid so the particles had something cool to fall and interact with rather than a boring flat plane. Then I had the idea of making the terrain a planet like fluid flowing on it and stuff like that. Actually got it working. It just wasn’t as good as I thought it would be. It made the project overly complex and kind of shift the focus towards the terrain instead of the fluid and made it harder to play with it. And also the fluid would obviously spread around over the planet so you couldn’t even see most of the cool stuff. And I spent a lot of time on that but well I eventually reverted and added a seabed in a box. That made the fluid the focus instead of the scenery and stuff and how it turned out in the end kind of looks dope. Well with the new terrain I spent time making it look sandy and good. I also switched from rendering some stuff as wireframes to actual meshes Shoudl’ve done this before but back then I guess I got lazy even though most of the stuff for that was already set up Water is really what’s been improved. Particles were just tiny colored spheres before, which I guess is okay for debugging but doesn’t look like water. I’ve been building something called screen space fluid rendering instead which just renders every particle as a billboard that always looks at/faces the camera and does some other cool stuff behind. Mine works I guess but I still have to improve it a lot. Like I guess the fluid looks more like water but still it looks like a bunch of balls so yeah that’s what I want to focus on next. After that, I’ll add proper collisions between objects, then scene polish, then audio. Audio is something I am excited for!"}, {"post_id": 68014, "ts": "2026-09-14T11:35:02Z", "hours": 6.3853, "text": "Since my last dev log, I made a pretty big change by making the fluid interact with actual 3D objects instead of just the bounds. First, I cleaned some stuff up like spawning the particles in a neat cube among other little stuff. Then I decided to refactor how stuff was being rendered. Before, I had two separate canvases, one WebGL canvas for the scene and one WebGPU canvas for the particles, because I was lazy implementing them and so I merged them into one since. That didn’t make too big of a difference visually but it makes it easier to add other stuff later. The main feature was getting the fluid to actually flow around objects. The particles can now collide with not only boxes and spheres but any complex shape I place in the scene. The torus knot is the only complex shape set up so far, but the same system will work for pretty much anything I add later. The other half was making the objects feel realistic. Like at first, they were just static test objects and the fluid could only move around them but not push them so they could move. I added proper physics to the objects so they float and move around realistically in the water and pretty much react to it. Getting this to work took quite a while like objects would spin violently when in contact with the water or bobbing up and down non stop but I eventually got it to work. Next up is pretty much the biggest change yet (at least visually). I want to remove the container and add real terrain over which the fluid can realistically flow over and stuff. Most of the foundation for this change is pretty much setup and the biggest change is to actually generate the terrain. After that I want to improve the physics of the objects. Right now the physics are like deliberately really simple like objects collide with the container only and can’t interact with other objects and the rotations aren’t even handled well. Once there is a terrain, then I’ll work on them pretty much."}, {"post_id": 67166, "ts": "2026-09-13T07:29:00Z", "hours": 9.1594, "text": "Since my last dev log, I’ve made quite a few changes to the fluid simulation which make it look completely different from the last dev log. First, I added interaction with the particles, which makes things a bit fun but its real purpose was to make testing the simulation easier. After that, I spent some time tuning and improving the physics. I added stuff like viscosity and a repulsion force between particles, which made the particles behave more like an actual fluid and add more customisation. While working on the physics, I also optimized the SPH simulation. I combined some of the neighbor searches and reduced unnecessary allocations happening every frame. This was pretty simple and made quite a difference. Once the basic simulation was good enough, I decided to move on to WebGP to really make stuff run smoothly. Both the fluid simulation and particle rendering now run through WebGPU, which gives me a much better foundation for scaling the simulation to larger numbers of particles. Like before the simulation could not run smoothly at around 4000 particles while now I can go up to tens of thousands of particles and still have really good performance (unless the particles are too squished up). After that, I finally started converting the simulation from 2D to 3D. This was relatively simple as I just had to go around the code changing Vector2s into Vector3s and accounting for the z axis but this made some other underlying issues more prominent. Like one of the biggest issues was particles stacking up against the boundaries walls that would repel other particles. I fixed that issue and made several other changes to get the 3D simulation behaving more naturally. At this point, the project has gone quite a bit beyond the small Three.js experiment I originally started with. What I want to do next is to make the particles react to other objects and shapes in the environment. I want to try and make it eventually work with more complex shapes as well, so the fluid can flow around and interact with actual 3D objects rather than being restricted to simple boundaries. After which I’ll make the fluid look like water instead of a bunch of balls flowing around and then work on the environment."}, {"post_id": 65881, "ts": "2026-09-11T10:01:05Z", "hours": 9.7228, "text": "I started working on a small fluid simulation in Three.js just for learning. Originally, this was really just meant to be a test project and something fun to mess around with, but after working on it a bunch I decided I want to keep developing it and eventually turn it into something interesting. So far I’ve built basic SPH simulation and got particles interacting with each other. I also implemented spatial hashing to make everything more efficient which just avoids checking every particle against every other particle. This improved the performance a lot especially with a lot of particles. I also added configurable simulation parameters such as gravity, pressure, particle count, etc to make testing easier. I also worked on the particles like befoe they were just blue circles but right now they change their color based on speed which I implemented by adding a shader. Right now, it still needs a bunch of work. There are bugs I need to fix and generally make the physics better. Next, I want to make the particles interactive something like click to move them type thing for testing. After, I’ll work on improving the physics, fixing bugs, and finally make stuff 3D."}]...
|
Title: FluidSim by @AbdurRehman | Stardance
Devlo Title: FluidSim by @AbdurRehman | Stardance
Devlogs:
I started working on a small fluid simulation in Three.js just for learning. Originally, this was really just meant to be a test project and something fun to mess around with, but after working on it a bunch I decided I want to keep developing it and eventually turn it into something interesting. So far I’ve built basic SPH simulation and got particles interacting with each other. I also implemented spatial hashing to make everything more efficient which just avoids checking every particle against every other particle. This improved the performance a lot especially with a lot of particles. I also added configurable simulation parameters such as gravity, pressure, particle count, etc to make testing easier. I also worked on the particles like befoe they were just blue circles but right now they change their color based on speed which I implemented by adding a shader. Right now, it still needs a bunch of work. There are bugs I need to fix and generally make the physics better. Next, I want to make the particles interactive something like click to move them type thing for testing. After, I’ll work on improving the physics, fixing bugs, and finally make stuff 3D.
Since my last dev log, I’ve made quite a few changes to the fluid simulation which make it look completely different from the last dev log. First, I added interaction with the particles, which makes things a bit fun but its real purpose was to make testing the simulation easier. After that, I spent some time tuning and improving the physics. I added stuff like viscosity and a repulsion force between particles, which made the particles behave more like an actual fluid and add more customisation. While working on the physics, I also optimized the SPH simulation. I combined some of the neighbor searches and reduced unnecessary allocations happening every frame. This was pretty simple and made quite a difference. Once the basic simulation was good enough, I decided to move on to WebGP to really make stuff run smoothly. Both the fluid simulation and particle rendering now run through WebGPU, which gives me a much better foundation for scaling the simulation to larger numbers of particles. Like before the simulation could not run smoothly at around 4000 particles while now I can go up to tens of thousands of particles and still have really good performance (unless the particles are too squished up). After that, I finally started converting the simulation from 2D to 3D. This was relatively simple as I just had to go around the code changing Vector2s into Vector3s and accounting for the z axis but this made some other underlying issues more prominent. Like one of the biggest issues was particles stacking up against the boundaries walls that would repel other particles. I fixed that issue and made several other changes to get the 3D simulation behaving more naturally. At this point, the project has gone quite a bit beyond the small Three.js experiment I originally started with. What I want to do next is to make the particles react to other objects and shapes in the environment. I want to try and make it eventually work with more complex shapes as well, so the fluid can flow around and interact with actual 3D objects rather than being restricted to simple boundaries. After which I’ll make the fluid look like water instead of a bunch of balls flowing around and then work on the environment.
Since my last dev log, I made a pretty big change by making the fluid interact with actual 3D objects instead of just the bounds. First, I cleaned some stuff up like spawning the particles in a neat cube among other little stuff. Then I decided to refactor how stuff was being rendered. Before, I had two separate canvases, one WebGL canvas for the scene and one WebGPU canvas for the particles, because I was lazy implementing them and so I merged them into one since. That didn’t make too big of a difference visually but it makes it easier to add other stuff later. The main feature was getting the fluid to actually flow around objects. The particles can now collide with not only boxes and spheres but any complex shape I place in the scene. The torus knot is the only complex shape set up so far, but the same system will work for pretty much anything I add later. The other half was making the objects feel realistic. Like at first, they were just static test objects and the fluid could only move around them but not push them so they could move. I added proper physics to the objects so they float and move around realistically in the water and pretty much react to it. Getting this to work took quite a while like objects would spin violently when in contact with the water or bobbing up and down non stop but I eventually got it to work. Next up is pretty much the biggest change yet (at least visually). I want to remove the container and add real terrain over which the fluid can realistically flow over and stuff. Most of the foundation for this change is pretty much setup and the biggest change is to actually generate the terrain. After that I want to improve the physics of the objects. Right now the physics are like deliberately really simple like objects collide with the container only and can’t interact with other objects and the rotations aren’t even handled well. Once there is a terrain, then I’ll work on them pretty much.
Since my last dev log I’ve been working on terrain. I started with simple noise on a grid so the particles had something cool to fall and interact with rather than a boring flat plane. Then I had the idea of making the terrain a planet like fluid flowing on it and stuff like that. Actually got it working. It just wasn’t as good as I thought it would be. It made the project overly complex and kind of shift the focus towards the terrain instead of the fluid and made it harder to play with it. And also the fluid would obviously spread around over the planet so you couldn’t even see most of the cool stuff. And I spent a lot of time on that but well I eventually reverted and added a seabed in a box. That made the fluid the focus instead of the scenery and stuff and how it turned out in the end kind of looks dope. Well with the new terrain I spent time making it look sandy and good. I also switched from rendering some stuff as wireframes to actual meshes Shoudl’ve done this before but back then I guess I got lazy even though most of the stuff for that was already set up Water is really what’s been improved. Particles were just tiny colored spheres before, which I guess is okay for debugging but doesn’t look like water. I’ve been building something called screen space fluid rendering instead which just renders every particle as a billboard that always looks at/faces the camera and does some other cool stuff behind. Mine works I guess but I still have to improve it a lot. Like I guess the fluid looks more like water but still it looks like a bunch of balls so yeah that’s what I want to focus on next. After that, I’ll add proper collisions between objects, then scene polish, then audio. Audio is something I am excited for!
Since my last dev log I’ve mostly been working on the water’s visuals. First thing I did was to rewrite the screen space fluid rendering implementation and tuned it a bit to make it look way better than before and less like a bunch of stacked balls and I also added realistic looking refractions too. Then I added proper shadows to the scene, which made stuff look more alive. This bumped the visuals up a lot. Then I worked on caustics. This was one of those features that instantly made the water look ten times better. This took a bit of time to get right but eventually I got it to work and it looks good. After that, I added foam to make the water look less flat and blobby. The water, in general, waswas too perfect and so I added noise to the water to fix that. With these changes, there was a noticeable loss of performance so I had to work on that. Along the way I also cleaned up some of the code especially the GUI control panel thingy since it was getting too extensive so I cut down a lot of things. Then I finally added model support. Before you could only use basic shapes like squares, spheres etc. Now I can load in model files, and use them in the simulation which is really cool. There was also this weird bug where objects would disappear when you switched them around but after a bunch of changes in my code I finally fixed the bug. I also fixed other bugs like water kind of acting weird with the boat spawned which too took quite a bit of time to fix. Next I want to do some scene polish like better background, etc and then finally audio. I might also work some more on the object collision physics since I intentionally kept them really simple but I might not. Depends on how lazy I am I guess.
I have made a ton of progress since the last devlog. First I added a simple but good looking sky shader which has clouds and a sun, and then hooked up textures on the loaded models so they aren’t just basic colors anymore. And I also added support for loading your own .glb models and they’ll work in the sim. Relatively small changes but they made the scene look a whole lot better and more interactive. Audio was the biggest change and took the most time, but it was also the most fun. There are multiple layers to it, like the general ambience is pretty much layered water sounds like water flowing sounds, foam sound, lapping sound, bubbles, etc that crossfade based on how the fluid is moving. External objects also create sounds like you can hear them splash in and out of the water or when heavy stuff sinks there is kind of a low rumble. There’s also sounds for water splashing on itself, objects colliding around with other objects, etc. There is also a cool underwater effect where if the camera is inside the water stuff get’s muffled and stuff which is really cool. What’s good is that everything is driven by the physics so everything is dynamic and nothing is being faked. Like each sound is created for a reason. After that I added wind to the sim. Like wind is created using gusts which are scheduled procedurally, so you get calm stretches and then a burst of air. I also added another interaction too. You can now create vortexes using V + left click which is kind of fun and adds more interactivity. I also added sculpting to the terrain. Now you can change the terrain to your liking by using different brush modes like: raise, lower, smoothen, flatten. I also optimized particles check with the terrain especially after stuff had become more dynamic though that was pretty easy to do. Some other small polishes I did was to clean up the settings panel thing among other small stuff. The sim is basically feature complete at this point, so next up is cleaning up the UI and then creating a good README.
This is the final dev log. Like I said in the last devlog, the sim was basically feature complete so this dev log is mostly the cleanup and little UI improvements. I cleaned up a bunch of code by like removing dead code that had jut been sitting and I improved how the controls panel looks. Other than that I wrote the README and finalized the repo by adding stuff like the license and I also added a cool looking favicon. And with that, the project is now complete.
Ships:
Well I made a fluid simulation that runs completely on the GPU using WebGPU. Since everything happens on the gpu, like from the physics to the rendering, it can handle tens of thousands of particles in real time in the browser without having performance issues. What was challenging for me was moving everything over to WebGPU since before I was just using plain Three.js and stuff. It’s completely different from WebGL and I had to refactor a lot of code, especially how the sim was structured, and then setting up the rendering system. The other big challenge was just making the water actually look convincing. That took quite a while and a lot of tweaking to make it look at least somewhat realistic. Honestly pretty much how the entire thing turned out. The audio reacts to the physics, the water looks good (or acceptable at the very least), objects float and sink, you can sculpt the terrain, then there are wind gusts and you can interact with the water. Every little thing comes together in a way I’m really happy with. Like this project was just a simple particle test I was making just for fun but in the end I actually enjoyed making and playing around with it. Just open the web page. You’ll need a browser with WebGPU support to run it and the controls are pretty much on the screen. You can adjust sliders and stuff and pretty much play around with everything, including adding your own .glb models. Audio might not play immediately since it takes some time to load in the background....
|
1793055138.3999908
|
1793141538.3999908
|
|
13737
|
Virtual Robotics Simulator by @axyprism | Stardanc Virtual Robotics Simulator by @axyprism | Stardance...
|
axyprism
|
1
|
54.83
|
55
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T05:01:33Z", "hours": 8.0, "multiplier": 6.83, "payout": 55, "blessing": "neutral", "text": "This is a game that allows you to simulate/experience FRC competitions/games (with multiplayer). Currently you can host LAN games.", "repo": "https://github.com/axyprism/Virtual-Robotics-Simulator", "demo": "https://axyprism.itch.io/virtual-robotics-simulator"}]...
|
[{"post_id": 75650, "ts": "202 [{"post_id": 75650, "ts": "2026-09-30T17:17:04Z", "hours": 9.5669, "text": "Robot select and new game added Redid the robot selection menu and made a UI that displayed the robots and allowed you to select a team number Added a billboard to preview upcoming matches Got around to finishing the Reefscape game Next I’m going to make the player profile save so you don’t have to redo it every time and begin work on a robot editor"}, {"post_id": 70211, "ts": "2026-09-18T18:28:55Z", "hours": 10.1253, "text": "New main menu and better scoring UI I got around to making the main menu more stylized and made the main menu orbit around a field (which now that I realize it looks a lot like Mosim). I also fixed a few bugs with the multiplayer experience with bugs such as people not being able to score and the UI not resetting. Up next I want to make a menu to let you choose a robot to use in the matches (instead of directly spawning the robot in)"}, {"post_id": 56301, "ts": "2026-08-28T01:00:40Z", "hours": 10.9442, "text": "More subsystems, scoring UI! The next part of the game was obviously to make a UI to show you are scoring. I made a system for matches so people are placed into rounds and there is a queue of rounds. I also went back to working on the robots and made a few more subsystems to make (mostly) functional Rebuilt robot! Next, I am going to make a physical scorboard with rankings and hopefully a robot editor, so you can make your own robots."}, {"post_id": 32352, "ts": "2026-07-21T13:49:00Z", "hours": 7.5633, "text": "Big game overhaul Pretty big update today! I made a main menu and now you can choose between singleplayer and multiplayer Added an options menu and an option to change between basic and advanced camera modes (which changes your pov with the robot Added a system to select between the different year’s games Added browser and Linux builds Fixed a clipping problem with the 3rd-person camera And I began work on online multiplayer."}, {"post_id": 25058, "ts": "2026-07-09T00:45:28Z", "hours": 8.6272, "text": "Added: Subsystems A control system to control the subsystems To do: Better menu system Linux build working with physics objects is hard (my robots are floating around and idk why)"}, {"post_id": 17397, "ts": "2026-06-28T04:59:09Z", "hours": 4.1994, "text": "Update 1: Multiplayer! I am posting this update for the sticker to say that I have added LAN multiplayer. One player hosts a server and others can join over the same network. I also started a subsystem system (what a mouthful) but haven’t made a robot utilizing it yet. Next: VR support (hopefully I get a headset to test it) and more complex robots."}, {"post_id": 15882, "ts": "2026-06-25T20:12:36Z", "hours": 3.9131, "text": "Basic game logic and control To start this game I worked on adding a first-person camera and player control, a script to switch control (and camera POV) from the player to the robot, and a basic system to add robot functionality. I made a swerve drivetrain with field-centric control and a very basic Decode map. Next features LAN multiplayer A modular subsystem system VR support (with possible multiplayer support) Planned features Steam release + multiplayer Standalone version with lobby hosting and LAN support (LAN support will be available to Steam as well) Full VR body tracking support and custom avatars Robot editor to make your own robots easily And more!"}]...
|
Title: Virtual Robotics Simulator by @axyprism | S Title: Virtual Robotics Simulator by @axyprism | Stardance
Devlogs:
Basic game logic and control To start this game I worked on adding a first-person camera and player control, a script to switch control (and camera POV) from the player to the robot, and a basic system to add robot functionality. I made a swerve drivetrain with field-centric control and a very basic Decode map. Next features LAN multiplayer A modular subsystem system VR support (with possible multiplayer support) Planned features Steam release + multiplayer Standalone version with lobby hosting and LAN support (LAN support will be available to Steam as well) Full VR body tracking support and custom avatars Robot editor to make your own robots easily And more!
Update 1: Multiplayer! I am posting this update for the sticker to say that I have added LAN multiplayer. One player hosts a server and others can join over the same network. I also started a subsystem system (what a mouthful) but haven’t made a robot utilizing it yet. Next: VR support (hopefully I get a headset to test it) and more complex robots.
Added: Subsystems A control system to control the subsystems To do: Better menu system Linux build working with physics objects is hard (my robots are floating around and idk why)
Big game overhaul Pretty big update today! I made a main menu and now you can choose between singleplayer and multiplayer Added an options menu and an option to change between basic and advanced camera modes (which changes your pov with the robot Added a system to select between the different year’s games Added browser and Linux builds Fixed a clipping problem with the 3rd-person camera And I began work on online multiplayer.
More subsystems, scoring UI! The next part of the game was obviously to make a UI to show you are scoring. I made a system for matches so people are placed into rounds and there is a queue of rounds. I also went back to working on the robots and made a few more subsystems to make (mostly) functional Rebuilt robot! Next, I am going to make a physical scorboard with rankings and hopefully a robot editor, so you can make your own robots.
New main menu and better scoring UI I got around to making the main menu more stylized and made the main menu orbit around a field (which now that I realize it looks a lot like Mosim). I also fixed a few bugs with the multiplayer experience with bugs such as people not being able to score and the UI not resetting. Up next I want to make a menu to let you choose a robot to use in the matches (instead of directly spawning the robot in)
Robot select and new game added Redid the robot selection menu and made a UI that displayed the robots and allowed you to select a team number Added a billboard to preview upcoming matches Got around to finishing the Reefscape game Next I’m going to make the player profile save so you don’t have to redo it every time and begin work on a robot editor
Ships:
This is a game that allows you to simulate/experience FRC competitions/games (with multiplayer). Currently you can host LAN games....
|
1793102018.2771597
|
1793188418.2771597
|
|
52655
|
Sakura Productivity Dashboard by @Rezz | Stardance
|
Rezz
|
1
|
54.8
|
876
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-01T17:59:06Z", "hours": 52.0, "multiplier": 16.9, "payout": 876, "blessing": "neutral", "text": "Sakura Productivity Dashboard!! A Sakura-inspired productivity dashboard built with HTML, CSS & JavaScript. A single dashboard combining To-Do List, Pomodoro timer, weather, and music into one workspace to improve productivity! I started this project as a simple To-Do List, but I kept thinking of things I could add to it until it turned into a full productivity dashboard. The main idea was to have everything I would need while studying in one place: a To-Do List, Pomodoro timer, weather, and music. I also wanted it to actually look nice, because I know I personally wouldn’t want to use a boring productivity app every day. What I Built: :>To-Do List with adding, deleting and completing tasks :>Tasks saved using Local Storage :>25-minute Pomodoro timer :>Weather search using the Open-Meteo API :>Automatic location detection :>Humidity, temperature, wind and weather conditions :>Lo-fi music player :>Play/pause, volume and progress controls :>Animated Sakura petals Making It Easy to Use: I have deployed it on github pages and made sure it works smoothly so anyone can just open and use with no need of a tutorial. I made many changes to make user experience wayy better: :>You can press Enter instead of having to click the buttons every time. :>Tasks stay saved even after refreshing the page. :>The To-Do List scrolls instead of making the whole dashboard keep getting bigger. :>Weather can either be searched manually or found automatically using your location. :>The important information is visible without having to open different pages. :>I kept the layout compact so the whole project can be demonstrated on one screen. The Theme!! The Sakura theme my favourite part of the design. It is the entire reason I made this in the first place. I always imagined an app like this and I will use this theme in the future as well. The falling petals and the tree and the seemingly morning sky looks very nice to me I hope everyone else likes it as well!!! Technical things used and learned! :>DOM manipulation and dynamically creating elements :>Local Storage for persistent data :>Managing application state :>Timers using setInterval() and clearInterval() :>sync JavaScript with async/await :>Fetch API and working with JSON data :>Error handling with try/catch :>Browser Geolocation API :>HTML Audio API and audio controls :>Connecting JavaScript with CSS animations :>Open-Meteo weather API :>Geocoding and reverse geocoding :>Using latitude and longitude :>Browser location permissions :>Working with external API data :>CSS Grid for dashboard layouts :>Flexbox :>Responsive design and media queries :>Scrollable containers and overflow :>Positioning and z-index :>Gradients and transparency :>CSS animations and @keyframes :>Transitions and transforms :>Creating consistent UI components", "repo": "https://github.com/KartikeyaMishra-Ark/Focus-App", "demo": "https://kartikeyamishra-ark.github.io/Focus-App/"}]...
|
[{"post_id": 72592, "ts": "202 [{"post_id": 72592, "ts": "2026-09-23T09:35:19Z", "hours": 2.8031, "text": "Back to this after long! I have added a few features to the to-do list. Added task priorities which can be selected when adding the tasks and can also be edited directly on the task. Also added task filtering for filtering based on task completion and priority. Added similar css to match my theme as everyone loved the theme when i shipped. I plan to add more songs and also add more features to the pomodoro and weather app and then ship the update!"}, {"post_id": 59707, "ts": "2026-09-01T17:10:43Z", "hours": 4.0942, "text": "Final Devlog!! I am finally done with this one! I have polished UI as much as I could. The CSS is a nightmare. I tried to change the entire UI but it broke the entire thing and I kept adding new attributes at the bottom instead to redoing the already existing ones so it became so messed up that I could not tell what was working and what was not. So I just kept adding until everything just worked out and it somehow works and I am not going to touch it. I also tried to make audio play instantly as site opens but failed. The grid in which the main three apps are placed is a nightmare I have made it symmetrical after at least 20 tries. The weather and pomodoro kept fighting each other. I also added the scroll feature to the to do list so whenever too many tasks are added it will just become scrollable. And I removed the scroll bar because it looks bad. With this it is officially over. This project was way out of my league as a beginner. Thanks for reading!!!!!"}, {"post_id": 59216, "ts": "2026-08-31T21:45:43Z", "hours": 8.1783, "text": "I am tired of CSS now. After the last devlog I first redesigned the layout of the music player. Then I decided that my weather app missed an important functionality which was location detection. So I had to learn how to do that and then I also made it so that when the user opens the website it will automatically ask for location. If the user denies it will default to Tokyo. Then I added song progress control and refined the UI of the music player. Then I remade it 5 more times until what we have here. Still not satisfied. I did the. background again to make it look like the sky a little bit. Plain pink looked bad. I am going to make it again. Then started my nightmare. I tried to make my three apps into a dashboard so I created a new div and made it into a grid and then tried to fit all three inside the grid and make it look like it does now. Firstly I had to learn all about how this works and then I had to try it for the first time. The pomodoro and weather kept breaking. All their contents kept spilling out. No matter what I did it was not working. I could not understand what the error was so I wrote new rules at the bottom of the css and due to all that My css is now a 1000 lines long. I am afraid to clean it up because I don’t want it to break. There were so many problems with creating the dashboard. The background was moving when scrolling. The credits are now inside the music player for some reason. When adding the location detector I broke the code and spent 2 hours figuring out what the problem was only for it to be wrong linking of html id of a div. My CSS currently must have at least 4 duplicates of the the Pomo and weather and the dashboard. There is still refinement to do. But it’s almost over. I think this was too much as a second project. Thanks for reading."}, {"post_id": 58257, "ts": "2026-08-30T16:58:14Z", "hours": 1.6878, "text": "Added background music. Selected a few royalty free quality lofi songs from the yt channel Tama’s little music shop. I will credit them in the readme. Adding the music and its basic ui was fairly simple. I just created a div, added two options and linked the music. Added a button to play and an input to set volume. Then added all their functionality in the javascript took very simple functions and It is all working properly. I am going to add a couple more sings maybe but for now All the features I wanted to add are there and I just have to polish the UI properly so it looks like a proper focus dashboard instead of a 4-in-1 project. Thanks for reading!!"}, {"post_id": 57672, "ts": "2026-08-29T21:55:16Z", "hours": 4.9972, "text": "I have finally added petals to the project and boy was it tough. Maybe the most difficult thing I have done in this project. They are still not perfect after hours of making nd remaking. Trying to make different petals, animating their flow in the wind. Making them look like they are falling from the tree. At first I made them look horrendous so I had to design them a bit. They still look not good enough so maybe I will change the look. But the most difficult part was the animation. I must have written the keyframes more than a hundred times because it looks so unnatural every time. I just could not figure out how to make it look natural. But I have now reached a point where I believe it looks decent enough for me to move forward towards the completion of the project and after I have finally added everything I want in there I will polish it and possibly assign an sig to each petal. I am not sure tho. Thank you for reading!!"}, {"post_id": 57142, "ts": "2026-08-29T07:42:42Z", "hours": 1.6889, "text": "Added the sakura tree properly. I tried to make an svg myself but I heavily underestimated the skill requirement to do it. So I gave up and added a free premade sakura tree svg which has been attributed in the bottom of the page as asked by the source website. I have given is -1 z index so it appears properly and gave my cards an alpha value so that I can have transparency as it look pretty. And I have to say sag is some serious stuff. All these vectors were destroying me and I couldn’t do any better than before so I decided I should use this. I hope it is allowed. Going to add the falling petals next. Thanks for reading!! Credit: https://www.vecteezy.com/free-vector/sakura-tree"}, {"post_id": 56866, "ts": "2026-08-28T20:48:06Z", "hours": 3.39, "text": "This is kind of an embarrassing devlog. I have been trying to polish the theme so I decided to add a sakura tree and also reverse the pallets in the background and the cards. Well as you can see the tree looks nothing like it should because what I tried to do was create a few new divs in html for the tree like the trunk, branches and the blossoms. I created individual classes and spans for each and tried to design them in css and I failed miserably as we can see there. I have now found out that in these situations we are supposed to use an svg file to make the tree which is what I am gonna do next. I really regret the past three hours I spent rotating branches to make it look like I wanted to. My vision is to make a tree and then change the background into a sky and have all three of my applications under the tree with petals falling and loft music playing. I hope I can reach there. I genuinely spent so much time in the html and css to make this tree which looks like a brown explosion. Thanks for reading."}, {"post_id": 56714, "ts": "2026-08-28T16:09:04Z", "hours": 1.9969, "text": "No visible changes this time but I added Data persistence finally. I was holding up on it because it was looking too complicated but it was no too bad, took me a couple of hours. Did break my code once when I tried to change my previous functions but then found out that I can just add new ones to do the work instead of modifying the old ones. THAT is something important I learnt. I am going to do devlogs more often as in this project I have posted too less. I tried to add recommendations for search in the weather search but it’s too complicated. Thanks for reading!!"}, {"post_id": 56234, "ts": "2026-08-27T22:14:24Z", "hours": 7.9103, "text": "Added the weather app. I am getting way faster than before. This would have taken me so much time before but this worked out fairly simply. I am more efficient in function building now. I sped through it this time while I struggled with it before. CSS was also way easier as I just copied the theme of my previous two features. Most of the time of spent learning and experimenting with all the new things like Async, Await, JSON data, APIs etc. Of course it was not as smooth sailing as I am saying I of course ran into a lot of problems as a beginner with a weak base and weak concepts but it was way better than before. I am not going to add more features after this. I am going to make it aesthetically pleasing and ship it as I want to try a new project. I still have to add a few more features like a default weather display, search recommendations, revamp of the entire aesthetic, background music and I want to add sakura petals floating on the screen falling from a tree. I have no idea how to do it right now but I will when I finish. Thanks for reading everyone!!"}, {"post_id": 54107, "ts": "2026-08-24T22:13:52Z", "hours": 7.9386, "text": "Finally added the pomodoro. It was more complicated than I thought it would be. I had to learn a lot of how JavaScript processes math. I had to find help to do it because I was unable to make the timer run properly. Sleep deprivation didn’t help as well. I want to make it sakura theme but that is kinds hard cause I don’t know my colour theory. It’s still very hard to add features to this. I cannot think about how I would format this because they are kinda awkward like this. It was fun understanding how to convert seconds into unites and seconds in Javascript and make it display on screen like that. also had to learn about how the interval works I still don’t understand is very properly but I know I how to make it work in this situation. Next up a little bug fixes with the pomodoro and then another feature will be added to this. Thanks for reading!!:>"}, {"post_id": 53162, "ts": "2026-08-23T16:34:11Z", "hours": 5.2589, "text": "Hello everyone! I am done with the to-do list now. It now functions properly. You can add tasks, delete tasks. complete tasks. The javascript for it was very easy to do once I looked back at my previous project but the CSS destroyed me. I have spent so many hours on it. It is so difficult to design it because I don’t have a tutorial to copy the design from. Also damn is everything so difficult. I spend two hours trying everything to figure out how to add different properties to different things which were essentially in the same list because I had appended them from Javascript. After figuring that out. I got into trouble with the delete button. I was using the general button class in CSS not realising that the add task button falls under the same category and was wondering why whenever I add a margin to the delete button the add task button started moving. I eventually figured out I had to add a different class to the delete button which I now realise is so obvious. I added hover animations to everything, click animation to everything. And now everything works perfectly. I do think I should add a better animation to when we complete a task so I will work on it. Oh I forgot one thing. It is so freaking Hard to make a theme from scratch. like I was so lost trying to making everything look good. every text every hover. every button every background it look so long to perfect. thankfully I can select the rep visually instead of having to type it down everytime. Next I am going to work on adding the pomodoro. Let’s see what new things I learn! Thank you for reading!"}, {"post_id": 52132, "ts": "2026-08-22T07:02:31Z", "hours": 4.6989, "text": "Starting development on a to-do app. I believe it’s a good project for a beginner like me. For now I have added just added container, input box, add task button and the task list in the HTML. I have also done the basic CSS styling so it currently looks like the image below. After that I have added the basic function of a todo list in javascript. The button adds the text from the input text box to the test list which exists below. That is all I have done for now. I am not using any tutorials this time I am using the knowledge from the previous project I built. I plan on adding a lot of features to this project. I plan to add pomodoro. Background music. Weather. And a calendar. Let’s see how many I actually am able to add by the end."}]...
|
Title: Sakura Productivity Dashboard by @Rezz | St Title: Sakura Productivity Dashboard by @Rezz | Stardance
Devlogs:
Starting development on a to-do app. I believe it’s a good project for a beginner like me. For now I have added just added container, input box, add task button and the task list in the HTML. I have also done the basic CSS styling so it currently looks like the image below. After that I have added the basic function of a todo list in javascript. The button adds the text from the input text box to the test list which exists below. That is all I have done for now. I am not using any tutorials this time I am using the knowledge from the previous project I built. I plan on adding a lot of features to this project. I plan to add pomodoro. Background music. Weather. And a calendar. Let’s see how many I actually am able to add by the end.
Hello everyone! I am done with the to-do list now. It now functions properly. You can add tasks, delete tasks. complete tasks. The javascript for it was very easy to do once I looked back at my previous project but the CSS destroyed me. I have spent so many hours on it. It is so difficult to design it because I don’t have a tutorial to copy the design from. Also damn is everything so difficult. I spend two hours trying everything to figure out how to add different properties to different things which were essentially in the same list because I had appended them from Javascript. After figuring that out. I got into trouble with the delete button. I was using the general button class in CSS not realising that the add task button falls under the same category and was wondering why whenever I add a margin to the delete button the add task button started moving. I eventually figured out I had to add a different class to the delete button which I now realise is so obvious. I added hover animations to everything, click animation to everything. And now everything works perfectly. I do think I should add a better animation to when we complete a task so I will work on it. Oh I forgot one thing. It is so freaking Hard to make a theme from scratch. like I was so lost trying to making everything look good. every text every hover. every button every background it look so long to perfect. thankfully I can select the rep visually instead of having to type it down everytime. Next I am going to work on adding the pomodoro. Let’s see what new things I learn! Thank you for reading!
Finally added the pomodoro. It was more complicated than I thought it would be. I had to learn a lot of how JavaScript processes math. I had to find help to do it because I was unable to make the timer run properly. Sleep deprivation didn’t help as well. I want to make it sakura theme but that is kinds hard cause I don’t know my colour theory. It’s still very hard to add features to this. I cannot think about how I would format this because they are kinda awkward like this. It was fun understanding how to convert seconds into unites and seconds in Javascript and make it display on screen like that. also had to learn about how the interval works I still don’t understand is very properly but I know I how to make it work in this situation. Next up a little bug fixes with the pomodoro and then another feature will be added to this. Thanks for reading!!:>
Added the weather app. I am getting way faster than before. This would have taken me so much time before but this worked out fairly simply. I am more efficient in function building now. I sped through it this time while I struggled with it before. CSS was also way easier as I just copied the theme of my previous two features. Most of the time of spent learning and experimenting with all the new things like Async, Await, JSON data, APIs etc. Of course it was not as smooth sailing as I am saying I of course ran into a lot of problems as a beginner with a weak base and weak concepts but it was way better than before. I am not going to add more features after this. I am going to make it aesthetically pleasing and ship it as I want to try a new project. I still have to add a few more features like a default weather display, search recommendations, revamp of the entire aesthetic, background music and I want to add sakura petals floating on the screen falling from a tree. I have no idea how to do it right now but I will when I finish. Thanks for reading everyone!!
No visible changes this time but I added Data persistence finally. I was holding up on it because it was looking too complicated but it was no too bad, took me a couple of hours. Did break my code once when I tried to change my previous functions but then found out that I can just add new ones to do the work instead of modifying the old ones. THAT is something important I learnt. I am going to do devlogs more often as in this project I have posted too less. I tried to add recommendations for search in the weather search but it’s too complicated. Thanks for reading!!
This is kind of an embarrassing devlog. I have been trying to polish the theme so I decided to add a sakura tree and also reverse the pallets in the background and the cards. Well as you can see the tree looks nothing like it should because what I tried to do was create a few new divs in html for the tree like the trunk, branches and the blossoms. I created individual classes and spans for each and tried to design them in css and I failed miserably as we can see there. I have now found out that in these situations we are supposed to use an svg file to make the tree which is what I am gonna do next. I really regret the past three hours I spent rotating branches to make it look like I wanted to. My vision is to make a tree and then change the background into a sky and have all three of my applications under the tree with petals falling and loft music playing. I hope I can reach there. I genuinely spent so much time in the html and css to make this tree which looks like a brown explosion. Thanks for reading.
Added the sakura tree properly. I tried to make an svg myself but I heavily underestimated the skill requirement to do it. So I gave up and added a free premade sakura tree svg which has been attributed in the bottom of the page as asked by the source website. I have given is -1 z index so it appears properly and gave my cards an alpha value so that I can have transparency as it look pretty. And I have to say sag is some serious stuff. All these vectors were destroying me and I couldn’t do any better than before so I decided I should use this. I hope it is allowed. Going to add the falling petals next. Thanks for reading!! Credit: https://www.vecteezy.com/free-vector/sakura-tree
I have finally added petals to the project and boy was it tough. Maybe the most difficult thing I have done in this project. They are still not perfect after hours of making nd remaking. Trying to make different petals, animating their flow in the wind. Making them look like they are falling from the tree. At first I made them look horrendous so I had to design them a bit. They still look not good enough so maybe I will change the look. But the most difficult part was the animation. I must have written the keyframes more than a hundred times because it looks so unnatural every time. I just could not figure out how to make it look natural. But I have now reached a point where I believe it looks decent enough for me to move forward towards the completion of the project and after I have finally added everything I want in there I will polish it and possibly assign an sig to each petal. I am not sure tho. Thank you for reading!!
Added background music. Selected a few royalty free quality lofi songs from the yt channel Tama’s little music shop. I will credit them in the readme. Adding the music and its basic ui was fairly simple. I just created a div, added two options and linked the music. Added a button to play and an input to set volume. Then added all their functionality in the javascript took very simple functions and It is all working properly. I am going to add a couple more sings maybe but for now All the features I wanted to add are there and I just have to polish the UI properly so it looks like a proper focus dashboard instead of a 4-in-1 project. Thanks for reading!!
I am tired of CSS now. After the last devlog I first redesigned the layout of the music player. Then I decided that my weather app missed an important functionality which was location detection. So I had to learn how to do that and then I also made it so that when the user opens the website it will automatically ask for location. If the user denies it will default to Tokyo. Then I added song progress control and refined the UI of the music player. Then I remade it 5 more times until what we have here. Still not satisfied. I did the. background again to make it look like the sky a little bit. Plain pink looked bad. I am going to make it again. Then started my nightmare. I tried to make my three apps into a dashboard so I created a new div and made it into a grid and then tried to fit all three inside the grid and make it look like it does now. Firstly I had to learn all about how this works and then I had to try it for the first time. The pomodoro and weather kept breaking. All their contents kept spilling out. No matter what I did it was not working. I could not understand what the error was so I wrote new rules at the bottom of the css and due to all that My css is now a 1000 lines long. I am afraid to clean it up because I don’t want it to break. There were so many problems with creating the dashboard. The background was moving when scrolling. The credits are now inside the music player for some reason. When adding the location detector I broke the code and spent 2 hours figuring out what the problem was only for it to be wrong linking of html id of a div. My CSS currently must have at least 4 duplicates of the the Pomo and weather and the dashboard. There is still refinement to do. But it’s almost over. I think this was too much as a second project. Thanks for reading.
Final Devlog!! I am finally done with this one! I have polished UI as much as I could. The CSS is a nightmare. I tried to change the entire UI but it broke the entire thing and I kept adding new attributes at the bottom instead to redoing the already existing ones so it became so messed up that I could not tell what was working and what was not. So I just kept adding until everything just worked out and it somehow works and I am not going to touch it. I also tried to make audio play instantly as site opens but failed. The grid in which the main three apps are placed is a nightmare I have made it symmetrical after at least 20 tries. The weather and pomodoro kept fighting each other. I also added the scroll feature to the to do list so whenever too many tasks are added it will just become scrollable. And I removed the scroll bar because it looks bad. With this it is officially over. This project was way out of my league as a beginner. Thanks for reading!!!!!
Back to this after long! I have added a few features to the to-do list. Added task priorities which can be selected when adding the tasks and can also be edited directly on the task. Also added task filtering for filtering based on task completion and priority. Added similar css to match my theme as everyone loved the theme when i shipped. I plan to add more songs and also add more features to the pomodoro and weather app and then ship the update!
Ships:
Sakura Productivity Dashboard!! A Sakura-inspired productivity dashboard built with HTML, CSS & JavaScript. A single dashboard combining To-Do List, Pomodoro timer, weather, and music into one workspace to improve productivity! I started this project as a simple To-Do List, but I kept thinking of things I could add to it until it turned into a full productivity dashboard. The main idea was to have everything I would need while studying in one place: a To-Do List, Pomodoro timer, weather, and music. I also wanted it to actually look nice, because I know I personally wouldn’t want to use a boring productivity app every day. What I Built: :>To-Do List with adding, deleting and completing tasks :>Tasks saved using Local Storage :>25-minute Pomodoro timer :>Weather search using the Open-Meteo API :>Automatic location detection :>Humidity, temperature, wind and weather conditions :>Lo-fi music player :>Play/pause, volume and progress controls :>Animated Sakura petals Making It Easy to Use: I have deployed it on github pages and made sure it works smoothly so anyone can just open and use with no need of a tutorial. I made many changes to make user experience wayy better: :>You can press Enter instead of having to click the buttons every time. :>Tasks stay saved even after refreshing the page. :>The To-Do List scrolls instead of making the whole dashboard keep getting bigger. :>Weather can either be searched manually or found automatically using your location. :>The important information is visible without having to open different pages. :>I kept the layout compact so the whole project can be demonstrated on one screen. The Theme!! The Sakura theme my favourite part of the design. It is the entire reason I made this in the first place. I always imagined an app like this and I will use this theme in the future as well. The falling petals and the tree and the seemingly morning sky looks very nice to me I hope everyone else likes it as well!!! Technical things used and learned! :>DOM manipulation and dynamically creating elements :>Local Storage for persistent data :>Managing application state :>Timers using setInterval() and clearInterval() :>sync JavaScript with async/await :>Fetch API and working with JSON data :>Error handling with try/catch :>Browser Geolocation API :>HTML Audio API and audio controls :>Connecting JavaScript with CSS animations :>Open-Meteo weather API :>Geocoding and reverse geocoding :>Using latitude and longitude :>Browser location permissions :>Working with external API data :>CSS Grid for dashboard layouts :>Flexbox :>Responsive design and media queries :>Scrollable containers and overflow :>Positioning and z-index :>Gradients and transparency :>CSS animations and @keyframes :>Transitions and transforms :>Creating consistent UI components...
|
1793083715.2964973
|
1793170115.2964973
|
|
10526
|
Insert's Enchanting by @InsertUser | Stardance
|
InsertUser
|
0
|
54.66
|
0
|
[]
|
[{"post_id": 28317, "ts": "202 [{"post_id": 28317, "ts": "2026-07-14T14:23:33Z", "hours": 5.0756, "text": "Sewing Machine, Enchantments, and MORE!!! Changes Made: Fixed Z-Buffering on the Sewing Machine Block Updated the hitbox on the Sewing Machine Block Additions: Sewing Needle: Used to apply enchancments Enchanted Thread: Used to apply enchancments Sewing Machine: Used to apply enchancments onto items Sewing Machine GUI: Slot for the sewing needle, enchanted thread, application item, and the enchancing book. Lightfooted now has functionality!!!! Bug Fixes: Hitbox not being able to rotate Tooltip not rendering on applied items Developer Notes: More enchants to come! Mod is almost finished, and Im very happy with how it is :3"}, {"post_id": 25145, "ts": "2026-07-09T05:21:23Z", "hours": 3.1131, "text": "New Block Alert!!! The Sewing Machine Will be used to apply enchances onto items! Nothing much else to add, more content soon! Developer Notes: Over 2 thousand keyframes for the animations"}, {"post_id": 24113, "ts": "2026-07-07T14:03:19Z", "hours": 9.2206, "text": "Function to Table of Enchancing, Enchancing Books, and more! Huge update in terms of progress. Once again on vacation so progress has slowed a little. But now that I’m back home, I’m getting back on track. Changes Made: Formula of the Scalpel has been nerfed due to villager trading. Maximum slots of Table of Enchancing bumped from 8 to 13 to allow for more complicated enchants. Base slots increased from 2 to 3 Additions: Recipes for all item (will not get in depth) Empty Enchancing Book Enchancing Book Fully Json ran crafting system for the Table of Enchancing : Supports 2 crafting types: Items and Enchants Fully customizable Enchancments!!!!! “Lightfooted”: Speed boost on damage “Sharpshooter”: Farther you are from your target, the heavier your shots hit Tool tip for the Book of Enchancing to display enchant desc and levels Bugs: Nbt data of the slider value for the Table of enchancing not working? To-dos: Functions for the enchants Allow for application of the enchants in an anvil Developer Notes: Drop suggestions and ideas for enchants in the comments! I need inspo!"}, {"post_id": 15552, "ts": "2026-06-25T08:55:02Z", "hours": 20.3953, "text": "VERY big content update! I know it’s been 20 hours… Why? Ive been on vacation, and most of these hours were done in a location without access to data or Wi-Fi. First time making a GUI in Minecraft! How was it? Absolutely horrible. Changes Made: Remapped the entire project to yarn mappings, because they are more intuitive than the Mojang ones, as well as every documentation on fabric using it. Refactored most of the project for organization purposes. Additions: Scalpel Item: Used while holding a normal enchanting book in offhand to cut out an Extracted Scripture Amount gained depends on the # of enchantments the enchanting book has. Each book can be extracted a total of 7 times Extracted Scripture: Used to make Repaired Scriptures Enchancing Menu: Very pretty Dynamic Hex Wheel, capable of holding up to 8 items used for enchantments Slider, taking repaired scriptures as fuel to change the number of slots in the hex Server & Client linking with the use of Payloads to prevent any duping or ect. Data saving with the use of NBT data of both the items inside and the slider value Repaired Scripture: Used as the fuel for the Enchancing Menu Dynamic Slots: For GUI’s, bypasses the Mojang blockers that disallow the movement or hiding of Slots. To-Do: Code the crafting system for the Enchancing menu Recipies for all items Sfx for all items Enchantments Developer Notes: Server syncing is horrible. It took me forever to get it to work properly. The process of making the GUI was also very, very annoying because of Mojang’s blocking of moving and hiding slots. Had to get away with this by using @Mutable and @Accessors . Spent a lot of good time on the art, and I’m very proud of how it all came out. I can’t wait to FINALLY start on the enchants!"}, {"post_id": 11131, "ts": "2026-06-18T06:33:31Z", "hours": 6.6092, "text": "Enchancing Table & More Additions: Modeled and Animated the Enchancing Table 2 block tall hitbox for the Experience Pump 2 block wide hitbox for the Enchancing Table Custom hitboxes for both blocks Tool preferences for both blocks Fixes: Fixed alot of errors regarding item models, geckolib and vanilla incompatabilies. Fixed the rendering of the condensed experience acting strange in game Notes: I hate the vanilla limitations of models. Spent 2 hours converting the Enchancing Table model to vanilla from a geckolib model. Because of vanillas angle limits and rotation limits, it was a horrible experience. 0/10 Doubles blocks were also a pain to implement. I was able to find little documentation regarding it so it was ALOT of experimenting. Future Plans: I plan to work on the GUI of the Enchancing table, and some custom recipes to make the process feel more immersive."}, {"post_id": 7859, "ts": "2026-06-13T03:14:57Z", "hours": 6.5725, "text": "Ive been working on the functionality of the experience pump. I also added the “Condensed Experience” Item for later purposes that can be obtained by using the experience pump. Taking a total of 100 exp points, and giving 100 exp points when used. I also implemented GeckoLib for animations regarding pumping, to make the entire action feel more polished. Because of Fabric (Yarn) ’s weird actions regarding experience, I had to scrap the level <-> points conversion formulas off of the wiki and code my own conversion functions. Overall, i’m learning alot. My progress, in my opinion, is pretty slow, but after all, this is my first time modding in fabric/using geckolib."}, {"post_id": 6274, "ts": "2026-06-10T15:30:59Z", "hours": 3.6769, "text": "First time developing a Minecraft mod for fabric! It’s pretty annoying considering the fabric documentations are most in-depth for 26.1.2, and not the version I plan the mod to be on (1.21.1) After a few hours of experimenting and researching, I was able to get the environment setup, the debug client configured, and some basic blocks/items implemented. I already have a plan for the reworked system, I plan for many new enchantments, QOL features, and a more in-depth system for enchanting overall. I’ve started with modeling an “experience pump” to convert EXP into an Item form. This would most likely be used in the future."}]...
|
Title: Insert's Enchanting by @InsertUser | St Title: Insert's Enchanting by @InsertUser | Stardance
Devlogs:
First time developing a Minecraft mod for fabric! It’s pretty annoying considering the fabric documentations are most in-depth for 26.1.2, and not the version I plan the mod to be on (1.21.1) After a few hours of experimenting and researching, I was able to get the environment setup, the debug client configured, and some basic blocks/items implemented. I already have a plan for the reworked system, I plan for many new enchantments, QOL features, and a more in-depth system for enchanting overall. I’ve started with modeling an “experience pump” to convert EXP into an Item form. This would most likely be used in the future.
Ive been working on the functionality of the experience pump. I also added the “Condensed Experience” Item for later purposes that can be obtained by using the experience pump. Taking a total of 100 exp points, and giving 100 exp points when used. I also implemented GeckoLib for animations regarding pumping, to make the entire action feel more polished. Because of Fabric (Yarn) ’s weird actions regarding experience, I had to scrap the level <-> points conversion formulas off of the wiki and code my own conversion functions. Overall, i’m learning alot. My progress, in my opinion, is pretty slow, but after all, this is my first time modding in fabric/using geckolib.
Enchancing Table & More Additions: Modeled and Animated the Enchancing Table 2 block tall hitbox for the Experience Pump 2 block wide hitbox for the Enchancing Table Custom hitboxes for both blocks Tool preferences for both blocks Fixes: Fixed alot of errors regarding item models, geckolib and vanilla incompatabilies. Fixed the rendering of the condensed experience acting strange in game Notes: I hate the vanilla limitations of models. Spent 2 hours converting the Enchancing Table model to vanilla from a geckolib model. Because of vanillas angle limits and rotation limits, it was a horrible experience. 0/10 Doubles blocks were also a pain to implement. I was able to find little documentation regarding it so it was ALOT of experimenting. Future Plans: I plan to work on the GUI of the Enchancing table, and some custom recipes to make the process feel more immersive.
VERY big content update! I know it’s been 20 hours… Why? Ive been on vacation, and most of these hours were done in a location without access to data or Wi-Fi. First time making a GUI in Minecraft! How was it? Absolutely horrible. Changes Made: Remapped the entire project to yarn mappings, because they are more intuitive than the Mojang ones, as well as every documentation on fabric using it. Refactored most of the project for organization purposes. Additions: Scalpel Item: Used while holding a normal enchanting book in offhand to cut out an Extracted Scripture Amount gained depends on the # of enchantments the enchanting book has. Each book can be extracted a total of 7 times Extracted Scripture: Used to make Repaired Scriptures Enchancing Menu: Very pretty Dynamic Hex Wheel, capable of holding up to 8 items used for enchantments Slider, taking repaired scriptures as fuel to change the number of slots in the hex Server & Client linking with the use of Payloads to prevent any duping or ect. Data saving with the use of NBT data of both the items inside and the slider value Repaired Scripture: Used as the fuel for the Enchancing Menu Dynamic Slots: For GUI’s, bypasses the Mojang blockers that disallow the movement or hiding of Slots. To-Do: Code the crafting system for the Enchancing menu Recipies for all items Sfx for all items Enchantments Developer Notes: Server syncing is horrible. It took me forever to get it to work properly. The process of making the GUI was also very, very annoying because of Mojang’s blocking of moving and hiding slots. Had to get away with this by using @Mutable and @Accessors . Spent a lot of good time on the art, and I’m very proud of how it all came out. I can’t wait to FINALLY start on the enchants!
Function to Table of Enchancing, Enchancing Books, and more! Huge update in terms of progress. Once again on vacation so progress has slowed a little. But now that I’m back home, I’m getting back on track. Changes Made: Formula of the Scalpel has been nerfed due to villager trading. Maximum slots of Table of Enchancing bumped from 8 to 13 to allow for more complicated enchants. Base slots increased from 2 to 3 Additions: Recipes for all item (will not get in depth) Empty Enchancing Book Enchancing Book Fully Json ran crafting system for the Table of Enchancing : Supports 2 crafting types: Items and Enchants Fully customizable Enchancments!!!!! “Lightfooted”: Speed boost on damage “Sharpshooter”: Farther you are from your target, the heavier your shots hit Tool tip for the Book of Enchancing to display enchant desc and levels Bugs: Nbt data of the slider value for the Table of enchancing not working? To-dos: Functions for the enchants Allow for application of the enchants in an anvil Developer Notes: Drop suggestions and ideas for enchants in the comments! I need inspo!
New Block Alert!!! The Sewing Machine Will be used to apply enchances onto items! Nothing much else to add, more content soon! Developer Notes: Over 2 thousand keyframes for the animations
Sewing Machine, Enchantments, and MORE!!! Changes Made: Fixed Z-Buffering on the Sewing Machine Block Updated the hitbox on the Sewing Machine Block Additions: Sewing Needle: Used to apply enchancments Enchanted Thread: Used to apply enchancments Sewing Machine: Used to apply enchancments onto items Sewing Machine GUI: Slot for the sewing needle, enchanted thread, application item, and the enchancing book. Lightfooted now has functionality!!!! Bug Fixes: Hitbox not being able to rotate Tooltip not rendering on applied items Developer Notes: More enchants to come! Mod is almost finished, and Im very happy with how it is :3...
|
1792752538.4643838
|
1793357338.4643838
|
|
48301
|
YSH Terminal by @Yousuff | Stardance
|
Yousuff
|
1
|
54.63
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T16:31:46Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "visit github/YousufProjs-exe/YSH for better details", "repo": "https://github.com/YousufProjs-exe/YSH-v8", "demo": "https://github.com/YousufProjs-exe/YSH-v8/releases/tag/v8-stable"}]...
|
[{"post_id": 79411, "ts": "202 [{"post_id": 79411, "ts": "2026-10-13T21:05:26Z", "hours": 3.3569, "text": "YSH v10 - is live !!!! also 100+ hours on YSH development and 24+ hours on YSH v10 as per Hackatime is being recorded ! the new YSH 10 is a must test ! refer the repo for more details but its now got better structure with expanded tree!"}, {"post_id": 78863, "ts": "2026-10-11T20:05:22Z", "hours": 3.5956, "text": "Now - the Fileshare host and get ip bind together with preceding fileshare command with must ip and exact file with extension - more secured and Shell-ish."}, {"post_id": 77887, "ts": "2026-10-08T17:29:41Z", "hours": 2.2839, "text": "although the theme apply and set is fixed and replaced v10s tab completion with v8s as its the better one - i ended with new bug theme not found."}, {"post_id": 77667, "ts": "2026-10-07T19:36:22Z", "hours": 2.1581, "text": "YSH v10 - MAJOR UPDATES - Arch mode and some more themes - all literally all bugs fixed and v10 is said to be ready as BETA and DEMO to the upcoming versions!"}, {"post_id": 77395, "ts": "2026-10-06T19:47:34Z", "hours": 1.7189, "text": "tried adding more themes but the terminal remains terminal - either way its not what YSH aims for. but this devlog states the addition for beta Arch Mode."}, {"post_id": 76158, "ts": "2026-10-02T15:10:12Z", "hours": 0.7289, "text": "fixed Ctrl L, F1, “?”, Tab completes and utilities bugs - released YSH v8.1.4 to the repo !"}, {"post_id": 75339, "ts": "2026-09-29T19:39:39Z", "hours": 2.0822, "text": "Networking using new commands is back , scan , chat host , fileshare , ports , are now arranged into newer and better handlers!"}, {"post_id": 71620, "ts": "2026-09-21T05:40:00Z", "hours": 2.9861, "text": "tryna update led to downgrade , changing networking commands and protocol got Networking broken."}, {"post_id": 65497, "ts": "2026-09-10T17:57:24Z", "hours": 4.1744, "text": "Caped YSH v10 with check, run, sysinfo, whatsup, clac, notes (add / view / list / edit / delete), multiple command alias, pwd, home, major file and directory commands and with a lot of working shortcuts: Tab to complete, ctrl+l to clear, arrow up / down for history, ctrl+up / down to scroll and more."}, {"post_id": 64429, "ts": "2026-09-08T20:01:48Z", "hours": 3.0739, "text": "Some Builds happen Late. The more you explore the more you get to see some interesting stuff, try YSH [ Live on GitHub ] @ YousufProjs-exe/YSH-v8/releases"}, {"post_id": 63781, "ts": "2026-09-07T18:57:01Z", "hours": 4.9856, "text": "YSH v8 was one of the versions where the project started becoming much more than a basic terminal. This version brought major work around the GUI and filesystem, while also pushing YSH toward a more complete and usable environment. It became an important foundation for the features and architecture that came later in v10. Looking back at v8 now, it’s pretty cool seeing how much the project has evolved from this point."}, {"post_id": 60431, "ts": "2026-09-02T19:09:50Z", "hours": 6.6158, "text": "YSH v10 ( LAN Networking ) update : LAN Chat is fine back to v10 with additional features like chat history and better with easy to join system , upcoming File Share is also coming with… its a secret."}, {"post_id": 56590, "ts": "2026-08-28T12:27:27Z", "hours": 3.8936, "text": "YSH v10 - Equalizing With v8 Today, I focused on bringing the newly rebuilt YSH v10.GUI closer to the feature set and usability of YSH v8.GUI. Worked on bringing YSH v10.GUI closer to YSH v8 by restoring command history, clear, home, time/date, calculator, system commands, terminal shortcuts, Tab completion, themes, late-night behaviour, and better prompt protection. Also improved filesystem navigation while keeping v10’s new modular architecture."}, {"post_id": 55101, "ts": "2026-08-26T15:39:36Z", "hours": 3.8436, "text": "YSH v10 - Rearrangement and better file system and with a new milestone to achieve ; YSH v10 for now says Hello!!! and ‘echo’ butttt theres alot more to come, CLI and Lightweight Task Manager too."}, {"post_id": 53073, "ts": "2026-08-23T14:09:00Z", "hours": 7.1344, "text": "YSH - Terminal , built in Java with versions all having a great vision and stories to remember and with this I completed the LAN Chat better with new Announcement , Kick , Listusers and other Admin only commands."}, {"post_id": 48282, "ts": "2026-08-16T16:19:53Z", "hours": 1.54, "text": "YSH - Terminal"}]...
|
Title: YSH Terminal by @Yousuff | Stardance
Devlo Title: YSH Terminal by @Yousuff | Stardance
Devlogs:
YSH - Terminal
YSH - Terminal , built in Java with versions all having a great vision and stories to remember and with this I completed the LAN Chat better with new Announcement , Kick , Listusers and other Admin only commands.
YSH v10 - Rearrangement and better file system and with a new milestone to achieve ; YSH v10 for now says Hello!!! and ‘echo’ butttt theres alot more to come, CLI and Lightweight Task Manager too.
YSH v10 - Equalizing With v8 Today, I focused on bringing the newly rebuilt YSH v10.GUI closer to the feature set and usability of YSH v8.GUI. Worked on bringing YSH v10.GUI closer to YSH v8 by restoring command history, clear, home, time/date, calculator, system commands, terminal shortcuts, Tab completion, themes, late-night behaviour, and better prompt protection. Also improved filesystem navigation while keeping v10’s new modular architecture.
YSH v10 ( LAN Networking ) update : LAN Chat is fine back to v10 with additional features like chat history and better with easy to join system , upcoming File Share is also coming with… its a secret.
YSH v8 was one of the versions where the project started becoming much more than a basic terminal. This version brought major work around the GUI and filesystem, while also pushing YSH toward a more complete and usable environment. It became an important foundation for the features and architecture that came later in v10. Looking back at v8 now, it’s pretty cool seeing how much the project has evolved from this point.
Some Builds happen Late. The more you explore the more you get to see some interesting stuff, try YSH [ Live on GitHub ] @ YousufProjs-exe/YSH-v8/releases
Caped YSH v10 with check, run, sysinfo, whatsup, clac, notes (add / view / list / edit / delete), multiple command alias, pwd, home, major file and directory commands and with a lot of working shortcuts: Tab to complete, ctrl+l to clear, arrow up / down for history, ctrl+up / down to scroll and more.
tryna update led to downgrade , changing networking commands and protocol got Networking broken.
Networking using new commands is back , scan , chat host , fileshare , ports , are now arranged into newer and better handlers!
fixed Ctrl L, F1, “?”, Tab completes and utilities bugs - released YSH v8.1.4 to the repo !
tried adding more themes but the terminal remains terminal - either way its not what YSH aims for. but this devlog states the addition for beta Arch Mode.
YSH v10 - MAJOR UPDATES - Arch mode and some more themes - all literally all bugs fixed and v10 is said to be ready as BETA and DEMO to the upcoming versions!
although the theme apply and set is fixed and replaced v10s tab completion with v8s as its the better one - i ended with new bug theme not found.
Now - the Fileshare host and get ip bind together with preceding fileshare command with must ip and exact file with extension - more secured and Shell-ish.
YSH v10 - is live !!!! also 100+ hours on YSH development and 24+ hours on YSH v10 as per Hackatime is being recorded ! the new YSH 10 is a must test ! refer the repo for more details but its now got better structure with expanded tree!
Ships:
visit github/YousufProjs-exe/YSH for better details...
|
1793054994.8245158
|
1793141394.8245158
|
|
1770
|
brAiny tutor by @PeterChi | Stardance
|
PeterChi
|
0
|
54.47
|
0
|
[]
|
[{"post_id": 25156, "ts": "202 [{"post_id": 25156, "ts": "2026-07-09T06:07:59Z", "hours": 21.9114, "text": "working on a new interface"}, {"post_id": 16908, "ts": "2026-06-27T13:41:01Z", "hours": 27.9633, "text": "After weeks of building, debugging, and going through App Store review, brAiny is officially live on the App Store. It’s an AI tutor that personalizes explanations to each student instead of giving everyone the same lesson. Biggest things I learned is that shipping is way harder than coding. App Store review taught me how important privacy policies and authentication are. Getting it to work is better than perfect Next goal: talk to real users, collect feedback, and keep improving."}, {"post_id": 948, "ts": "2026-06-02T18:28:51Z", "hours": 4.5994, "text": "Hi everyone! I’m Peter, a high school student and co-founder of brAiny, an AI-powered learning platform that helps students understand concepts through personalized explanations, quizzes, flashcards, and interactive learning tools. For the NASA challenge, I’m exploring ways to combine AI education with space science and NASA data to make STEM learning more engaging and accessible for students. I’m excited to learn from everyone here, build something cool, and see what the community creates over the next few weeks!"}]...
|
Title: brAiny tutor by @PeterChi | Stardance
Devl Title: brAiny tutor by @PeterChi | Stardance
Devlogs:
Hi everyone! I’m Peter, a high school student and co-founder of brAiny, an AI-powered learning platform that helps students understand concepts through personalized explanations, quizzes, flashcards, and interactive learning tools. For the NASA challenge, I’m exploring ways to combine AI education with space science and NASA data to make STEM learning more engaging and accessible for students. I’m excited to learn from everyone here, build something cool, and see what the community creates over the next few weeks!
After weeks of building, debugging, and going through App Store review, brAiny is officially live on the App Store. It’s an AI tutor that personalizes explanations to each student instead of giving everyone the same lesson. Biggest things I learned is that shipping is way harder than coding. App Store review taught me how important privacy policies and authentication are. Getting it to work is better than perfect Next goal: talk to real users, collect feedback, and keep improving.
working on a new interface...
|
1792489709.6270192
|
1793094509.6270192
|
|
5566
|
Mouse by @yetanotherkevin | Stardance
|
yetanotherkevin
|
0
|
54.42
|
0
|
[]
|
[{"post_id": 52802, "ts": "202 [{"post_id": 52802, "ts": "2026-08-23T04:35:44Z", "hours": 5.5692, "text": "devlog 7 behold. the mouse now exists. in flesh and blood. (it’s printed out of PLA actually but you get the idea) I’ve actually tried using this mouse in place of a normal mouse for a little while, and it isn’t that bad. (unless you count the issues where it randomly disconnects, bad ergonomics, inability to drag click, etc) i have designed version 2 already with several upgrades including: battery mount proper lens alignment custom mouse wheel middle click supprot but unfortunately i have lost access to my 3d printer for a while so I can’t actually print it yet."}, {"post_id": 50650, "ts": "2026-08-19T22:19:13Z", "hours": 9.9086, "text": "devlog 6 i have finally finished version 1 of the mouse enclosure. yes, this took me 10 hours. no, I am not very good at CAD. a lot of the time was spent towards trying to make the curves work better, but onshape really hates 3d curves for some reason. Half the time when I tried to make some major change I had to revert it because the changes completely broke everything. anyways here’s the model (so far). Now i have to CAD a custom scroll wheel and the side buttons. I am really going to hate onshape by the end of this."}, {"post_id": 47290, "ts": "2026-08-15T04:36:59Z", "hours": 6.7444, "text": "i have been in the cad trenches. I don’t have too much experience with CAD, and especially with making something as complex as a whole mouse. Learning how to make the curves properly was a bit of a learning….. curve (laugh at my funny joke please) after much trial and error, I got this prototype of a mouse baseplate done. I 3d printed it as well to get a better sense of scale + check my lens height alignment"}, {"post_id": 45459, "ts": "2026-08-11T22:48:06Z", "hours": 4.3697, "text": "The software part of the mouse is done! (mostly) I managed to finally finish up the software portion of this project after fixing all the bugs from last devlog. It now functions almost entirely like a regular bluetooth mouse. Things I did: Changed the code to enable just-works Bluetooth connection (automatic connection when powered on) Soldered on buttons and scroll wheel Fixed the previous lag issue (no noticeable latency now) There are still a few things I’d like to work on in software, but now I’ll be shifting my main focus towards designing the enclosure for this mouse. There are a few things I want to add still: Configurable side buttons: I haven’t figured out how these will work yet. I’m trying to figure out what I can actually do with them first Improving power efficiency (will figure it out later) I haven’t done CAD in quite a bit, so I expect the enclosure design to be a bit of a trial-and-error process. For the time being, I’m just glad I don’t have to deal with software bugs anymore….."}, {"post_id": 43494, "ts": "2026-08-08T19:55:16Z", "hours": 9.2133, "text": "This was supposed to be a short devlog. (9 hours of coding time later….) Unfortunately, not that much actual progress has been made. It’s just how things go sometimes in embedded development. Here’s what happened: My SPI implementation for my mouse sensor decided to stop working randomly. Therefore, I had to spend a couple hours to figure out what caused it and to replace it with an entire new SPI implementation. (My current best theory on what happened was that I was trying to run my sensor’s 3 wire SPI using Zephyr’s 4 wire SPI library, which led to problems whenever I increased the frequency.) Right after I fixed this, all my old PREVIOUSLY WORKING mouse code suddenly stopped working. I then spent another several hours fixing this as well. I eventually narrowed it down to some kind of problem with the bootloader, but I still have no idea what it is. I’m just using some workarounds for now. So that’s how i spent 9 hours (+ more unlogged time bc my logging and stuff isn’t actually on VSCode) getting back to where I was last devlog. I LOVE EMBEDDED! YIPPEEEE also here’s a video of the mouse movement actually working"}, {"post_id": 40597, "ts": "2026-08-04T07:52:38Z", "hours": 9.7519, "text": "Major progress has been made. Things done: Wrote the code for the mouse scroll wheel Integrated the scroll wheel code into the actual mouse code Fixed the evil bug in the motion sensor (see past devlog for my unhinged rant about it. the real issue was very different.) I won’t elaborate on what caused it because I’m very superstitious at this point and if i talk about it more it may come back. Right now i have clicking, scrolling, and mouse movement all working independently, but I haven’t integrated all three together yet. The finished mouse PCB (on the hardware side) should be ready by next devlog. Future things to work on: Making mouse movement smoother in some way because there is some lag currently and it is quite annoying Power efficiency optimizations in software (don’t know what to do for this quite yet but will look into it) Testing the mouse under battery power Designing and 3D Printing a case Attached below is a screenshot of my terrible testing setup. I’m so glad that this project (started in January of this year btw) is finally somewhat close to being finished."}, {"post_id": 7357, "ts": "2026-06-12T08:17:38Z", "hours": 8.8631, "text": "I am proud to announce that after 9 hours of coding, I have… still not solved the SECOND MOST EVIL FUCKING BUG I HAVE EVER ENCOUNTERED IN MY ENTIRE LIFE. the rundown of my project is that I am making an entirely custom mouse. I started this way before stardance, and by the time it started I already had the PCB designed + ordered and a bluetooth mouse connection working. I began logging time around when I started implementing the motion tracking on the mouse sensor through SPI. communicating with the sensor through SPI took 30 minutes of coding. The problem was the aforementioned evil ass bug I encountered after this, which was basically that the sensor kills itself every time it even barely gets lifted off of the table, and it requires a power cycle to get it back to normal operation. obviously not a very good thing to be happening in a mouse. now here is the fun part, as I spiral into the depths of insanity: after changing every software setting in my code that could reasonably fix this issue (sensor force awake mode, SPI transaction issues, SPI clock timings, etc), I decided to test the sensor with some old, verified working code that I had written a month or two prior. One thing to note is that my code so far was written in Zephyr OS while the working code was in Arduino, so I had to make a really jank connection to a different microcontroller board just to run it. As it turns out, the verified working code.. worked properly. So i made more changes to the Zephyr code, and I still can’t fix the bug. At this point, my Zephyr code is basically a 1-1 recreation of the Arduino code, so I decide to test the Arduino code again to make sure I’m not going insane. THE VERIFIED WORKING CODE STOPPED WORKING. I HAVE NO IDEA WHY STILL. THE BUG SOMEHOW SPREAD????? this is what I meant when I said it was evil. i could feel the MALICIOUS INTENT behind this issue as it attempted to destroy EVERY LAST BIT OF MY SANITY. At this point, I was pretty sure it was a hardware issue, so i re-soldered all the connections, continuity tested them with the multimeter, etc. it was not a hardware issue. IT WAS AN OPTICS ISSUE????? the issue was with the lens that came with my sensor the entire time. I still don’t know what the exact issue is, all I know is that everything works if I take off the lens. how exactly am I supposed to solve this??? i’m a programmer who knows some hardware stuff. i can’t debug the laws of optics. I did ask AI to help me out (can you blame me at this point?) but it was kind of stupid as per usual. has any one of u smart people here worked with mouse sensors before??? please send help if you can thank you. I have already ordered a new lens (in case i got unlucky and the one I have is defective) and I am currently considering hiring an exorcist to purge my PCBs of evil spirits. I was originally going to post a devlog once I got X and Y movement readings on the sensor, but as you can see, I’m a bit stuck at the moment. Another note I’d like to add is that the 9 hours I’ve spent trying to fix this is only the software debugging time. The actual time spent trying to fix this is probably more than double that. I’m too lazy to timelapse me crashing out for several hours. attached are photos of the sensor lens and my pcb testing rig. tldr: unfortunately, no progress has been made. evil demons are infesting my project. please send help"}]...
|
Title: Mouse by @yetanotherkevin | Stardance
Devl Title: Mouse by @yetanotherkevin | Stardance
Devlogs:
I am proud to announce that after 9 hours of coding, I have… still not solved the SECOND MOST EVIL FUCKING BUG I HAVE EVER ENCOUNTERED IN MY ENTIRE LIFE. the rundown of my project is that I am making an entirely custom mouse. I started this way before stardance, and by the time it started I already had the PCB designed + ordered and a bluetooth mouse connection working. I began logging time around when I started implementing the motion tracking on the mouse sensor through SPI. communicating with the sensor through SPI took 30 minutes of coding. The problem was the aforementioned evil ass bug I encountered after this, which was basically that the sensor kills itself every time it even barely gets lifted off of the table, and it requires a power cycle to get it back to normal operation. obviously not a very good thing to be happening in a mouse. now here is the fun part, as I spiral into the depths of insanity: after changing every software setting in my code that could reasonably fix this issue (sensor force awake mode, SPI transaction issues, SPI clock timings, etc), I decided to test the sensor with some old, verified working code that I had written a month or two prior. One thing to note is that my code so far was written in Zephyr OS while the working code was in Arduino, so I had to make a really jank connection to a different microcontroller board just to run it. As it turns out, the verified working code.. worked properly. So i made more changes to the Zephyr code, and I still can’t fix the bug. At this point, my Zephyr code is basically a 1-1 recreation of the Arduino code, so I decide to test the Arduino code again to make sure I’m not going insane. THE VERIFIED WORKING CODE STOPPED WORKING. I HAVE NO IDEA WHY STILL. THE BUG SOMEHOW SPREAD????? this is what I meant when I said it was evil. i could feel the MALICIOUS INTENT behind this issue as it attempted to destroy EVERY LAST BIT OF MY SANITY. At this point, I was pretty sure it was a hardware issue, so i re-soldered all the connections, continuity tested them with the multimeter, etc. it was not a hardware issue. IT WAS AN OPTICS ISSUE????? the issue was with the lens that came with my sensor the entire time. I still don’t know what the exact issue is, all I know is that everything works if I take off the lens. how exactly am I supposed to solve this??? i’m a programmer who knows some hardware stuff. i can’t debug the laws of optics. I did ask AI to help me out (can you blame me at this point?) but it was kind of stupid as per usual. has any one of u smart people here worked with mouse sensors before??? please send help if you can thank you. I have already ordered a new lens (in case i got unlucky and the one I have is defective) and I am currently considering hiring an exorcist to purge my PCBs of evil spirits. I was originally going to post a devlog once I got X and Y movement readings on the sensor, but as you can see, I’m a bit stuck at the moment. Another note I’d like to add is that the 9 hours I’ve spent trying to fix this is only the software debugging time. The actual time spent trying to fix this is probably more than double that. I’m too lazy to timelapse me crashing out for several hours. attached are photos of the sensor lens and my pcb testing rig. tldr: unfortunately, no progress has been made. evil demons are infesting my project. please send help
Major progress has been made. Things done: Wrote the code for the mouse scroll wheel Integrated the scroll wheel code into the actual mouse code Fixed the evil bug in the motion sensor (see past devlog for my unhinged rant about it. the real issue was very different.) I won’t elaborate on what caused it because I’m very superstitious at this point and if i talk about it more it may come back. Right now i have clicking, scrolling, and mouse movement all working independently, but I haven’t integrated all three together yet. The finished mouse PCB (on the hardware side) should be ready by next devlog. Future things to work on: Making mouse movement smoother in some way because there is some lag currently and it is quite annoying Power efficiency optimizations in software (don’t know what to do for this quite yet but will look into it) Testing the mouse under battery power Designing and 3D Printing a case Attached below is a screenshot of my terrible testing setup. I’m so glad that this project (started in January of this year btw) is finally somewhat close to being finished.
This was supposed to be a short devlog. (9 hours of coding time later….) Unfortunately, not that much actual progress has been made. It’s just how things go sometimes in embedded development. Here’s what happened: My SPI implementation for my mouse sensor decided to stop working randomly. Therefore, I had to spend a couple hours to figure out what caused it and to replace it with an entire new SPI implementation. (My current best theory on what happened was that I was trying to run my sensor’s 3 wire SPI using Zephyr’s 4 wire SPI library, which led to problems whenever I increased the frequency.) Right after I fixed this, all my old PREVIOUSLY WORKING mouse code suddenly stopped working. I then spent another several hours fixing this as well. I eventually narrowed it down to some kind of problem with the bootloader, but I still have no idea what it is. I’m just using some workarounds for now. So that’s how i spent 9 hours (+ more unlogged time bc my logging and stuff isn’t actually on VSCode) getting back to where I was last devlog. I LOVE EMBEDDED! YIPPEEEE also here’s a video of the mouse movement actually working
The software part of the mouse is done! (mostly) I managed to finally finish up the software portion of this project after fixing all the bugs from last devlog. It now functions almost entirely like a regular bluetooth mouse. Things I did: Changed the code to enable just-works Bluetooth connection (automatic connection when powered on) Soldered on buttons and scroll wheel Fixed the previous lag issue (no noticeable latency now) There are still a few things I’d like to work on in software, but now I’ll be shifting my main focus towards designing the enclosure for this mouse. There are a few things I want to add still: Configurable side buttons: I haven’t figured out how these will work yet. I’m trying to figure out what I can actually do with them first Improving power efficiency (will figure it out later) I haven’t done CAD in quite a bit, so I expect the enclosure design to be a bit of a trial-and-error process. For the time being, I’m just glad I don’t have to deal with software bugs anymore…..
i have been in the cad trenches. I don’t have too much experience with CAD, and especially with making something as complex as a whole mouse. Learning how to make the curves properly was a bit of a learning….. curve (laugh at my funny joke please) after much trial and error, I got this prototype of a mouse baseplate done. I 3d printed it as well to get a better sense of scale + check my lens height alignment
devlog 6 i have finally finished version 1 of the mouse enclosure. yes, this took me 10 hours. no, I am not very good at CAD. a lot of the time was spent towards trying to make the curves work better, but onshape really hates 3d curves for some reason. Half the time when I tried to make some major change I had to revert it because the changes completely broke everything. anyways here’s the model (so far). Now i have to CAD a custom scroll wheel and the side buttons. I am really going to hate onshape by the end of this.
devlog 7 behold. the mouse now exists. in flesh and blood. (it’s printed out of PLA actually but you get the idea) I’ve actually tried using this mouse in place of a normal mouse for a little while, and it isn’t that bad. (unless you count the issues where it randomly disconnects, bad ergonomics, inability to drag click, etc) i have designed version 2 already with several upgrades including: battery mount proper lens alignment custom mouse wheel middle click supprot but unfortunately i have lost access to my 3d printer for a while so I can’t actually print it yet....
|
1792669808.3387074
|
1793274608.3387074
|
|
12767
|
Efficient long range UAV by @tejaswa | Stardance
|
tejaswa
|
0
|
54.41
|
0
|
[]
|
[{"post_id": 80345, "ts": "202 [{"post_id": 80345, "ts": "2026-10-17T10:18:52Z", "hours": 4.2042, "text": "Airplane Im finally learning to properly land this airplane, i did several FBWA runs with this aircraft trying to get my approach right and landing right too I absolutely suck at both of these things, atp im surprised ik how to build the most stable aircraft but idk how to fly the said stable aircraft We cant 100% blame my lack of skill tho cuz if yall notice we can see that the glide ratio is a bit steep, I didnt expect that from this aircraft but due to the autonomous electronics increasing the weight it might be cuz that Since the old wing mount broke and also i wanted to design a new one with 2 servos so i can get flaps with aileron going, which will hopefully reduce my approach speed and angle The efficiency of this aircraft is pretty solid ngl, it cruises at around 5-6A which is very good imo, with this pack i can get around 15-20mins I also made a 4s2p pack for this aircraft using the cells i got from hackclub, i have only bench tested those, the voltage sag is kinda concerning so im not sure if i should fly with them or not Anyways enjoy the flight and do star the repo if yall like the project so far"}, {"post_id": 76674, "ts": "2026-10-04T10:00:29Z", "hours": 0.5447, "text": "Drop mechanism done Gonna test this servo drop mech on this aircraft too, hopefully it works Unfortunately yall have to wait with me till i go back home"}, {"post_id": 75562, "ts": "2026-09-30T13:23:47Z", "hours": 0.6833, "text": "Attained total hands off autonomy successfully (Ignore the wonky video my mum was trying her best) Man this is the best day in my life. For starters ill start from yesterday, after coming home i realised i dont have much pitch stablity cuz the elevator was hitting the carbon spar, so i ditched conventional tail and made a Vtail instead. After i set it up in arduplane the next step was to go out and test it, And oh boy testing i did. I flew first in FBW A (stablize) And it flew fkin beaut, at 30m altitude i set it to Auto mode, I had preprogrammed 4 waypoints and then RTL in the fc. It flew absolutely perfectly (except for the fact that the winds was WAY too high i could NOT fly it but the fc could) So after it finished i tried bringing it home in FBW A mode (worst idea ever ) The wind literally yeeted it in other direction and i switched on RTL, unfortunately it was wraps The plane crashed in a gravel making facility (idk bro) And i was surprised to find out that ABSOLUTELY NOTHING BROKE!!!!!?!!?! THAT HAS TO BE SOME SORT OF MIRACLE BRO Like literally the only thing broken was that ONE SINGULAR SOLDER JOIN CAME LOOSE DIDNT EEN BREAK IT JS CAME LOOSE So after it crashed we panicked and rushed to the facility, the security was super helpful and i had telemetry link with it so i was able to find it in no time This project was excruciating but absolutely worth it in the end, I will be flying it in more beautiful locations later The image in the end is the aftermath of the flight (literally spotless)"}, {"post_id": 75475, "ts": "2026-09-30T06:09:22Z", "hours": 1.2, "text": "Beautiful flight Js look at the way it flies bro i can NOT its way too smooth This was my first time actually flying with a flight computer and god damm was it a good experience, everything was so easy and i wasnt scared of flying it too far as i had setup RTL earlier Unfortunately the bad news is that i had 3 flights with this plane, and in the final flight i was tryna autotune it and mid flight the motor came off the mount and fell in the ground (yes it was 70m above the ground when it happened) thankfully the goated pixhawk was able to save the plane, also i had full control over it so i was able to land the plane safely After further inspection i figured out that the motor heat had melted the PLA mount and made the countersink screws act like wedges in wood and it js came clean off 😭 I did NOT expect that bro. Since then i have asked for a bump and also i made the mount much thicker and in todays flight i will be ziptying the motor on Apart form that i also changed the tail for standard configuration to a V tail, currently the elevator hits the carbon boom which reduces the throw, thsi Vtail is much sturdy and cleaner lets hope for the best in todays flight"}, {"post_id": 74852, "ts": "2026-09-28T13:24:02Z", "hours": 2.1761, "text": "Okay so good news and bad news Bad news being that my 1.5m span UAV unfortunately crashed, i took it out to fly yesterday and due to wings being way too high i couldnt control it and it crashed. Good news being that my 1m span ultra stick DID fly, This is a similar UAV i started designing thats much lighter and more capable. Enjoy the flight video, Unfortunately due to me being a shit pilot i tried to turn it towards me to get a nice shot but the turn radius was too low and it was going straight towards the power lines so i panicked and crashed it, That broke the motor mount so ill print like 5-6 of them and go to fly tmr with the pixhawk"}, {"post_id": 60808, "ts": "2026-09-03T12:49:56Z", "hours": 3.6678, "text": "I have finished the plane This took way more than 2 hours btw, it was js such a hassle i forgot to record Anyways the 2 hours that ARE in this post are the hours i spent analyzing the crash of the flying wing, I have zero idea why it crased, but it just rolled right and hit the ground nose down every chance it got. I went on reddit asking about this they told me its cuz flying wings are fiddly (i dont have much exp w them either), and need to be perfect to fly So i js moved on from that and finished the build of the full plane I did factory reset the flight computer this time to get everything reset, and this is a note to self for future When configuring channel 14 RSSI for Flysky TX, Remember to turn on allow_aux_reverse in RC_OPTIONS parameter for it to work The plane is done and build (will build the fuselage later incase it crashes), Im js waiting for good weather, Im here till 7th of this month, hopefully we get a window in that time or else its wraps for me"}, {"post_id": 56661, "ts": "2026-08-28T14:47:47Z", "hours": 1.6117, "text": "Took the plane out anyway So today i did 3 VERY short flights 2 of those were successful so ill only count 2 First flight the plane started oscillating in the pitch so i ended it short, Also cuz i ran out of ground to fly as due to heavy rainfall the fields i fly usually on are FULL of water After this flight i committed a bit more to the second launch, got the plane in the air (I think AP did it) The tail was oscillating but it wasn’t unflappable, I had to crash the aircraft in the tree because it was heading beyond my line of sight and there was a LOT of water beyond that tree Thankfully the aircraft received no damage in todays flight, everything was so soft the aircraft didn’t even register any of these crashes as a crash, It went good overall I reduced the servo throws by moving the wires down a notch realized that my surfaces are not symmetric so i accounted for that checked everything chucked it in my room and it feels fine for now Something i dont understand is why in 2nd flight did the aircraft pitch left 80 degrees for no reason and it didn’t even stabilize itself, might need to look at the logs for a few more hours to figure that out"}, {"post_id": 56447, "ts": "2026-08-28T06:38:45Z", "hours": 0.4478, "text": "Fuh me The EXACT DAY i finished my build it has NOT stopped raining at all the airfield is completely damp and my aircraft isnt waterproof. I have limited amount of holidays and this weather is NOT helping me, mum says if i am not able to finish it i can come back again and try then, I still have 4 days to go hopefully weather clears out and im able to ATLEAST take out the flying wing"}, {"post_id": 53167, "ts": "2026-08-23T16:40:04Z", "hours": 0.9608, "text": "FINISHED THE BUILD OF THE STEPPING STONE FLYING WING This is the flying wing i normally take out to fly and have fun, Ive had like 60% success rate with this model (without wingtip washout), Mostly because flying wings are hard to fly and i dont know how to fly Good thing about flight computers is that they DO know how to fly so this would be a lil bit easier Ive added 2.5 degrees of wingtip washout on this aircraft, also ran CFD sims on the entire wing profiile and saw that the stall characteristics are like a self stablizing feedback loop I have done all the wiring and flying wing setup in the pixhawk, i just need to go fly to use the autotune mode to get the PID right for this model One thing that is bad with this model is that the elevon throw when its going down is WAY less than compared to that when its going up so i hope that might not fk up the plane Ive ran several indoor tests with the motor on and off, it does stall if not thrown properly but most of the time the launch is butter, lets hope its that way tmr too"}, {"post_id": 52354, "ts": "2026-08-22T13:49:05Z", "hours": 1.3542, "text": "IM HOME Today as soon as i reached home i unboxed my telemetry radio and started working on my flying wing Ill use this aircraft as a stepping stone to learn AP and its modes and if i crash hopefully the damage isnt that much Logging time for builds irl is super hectic bruh i gotta figure out a better way to do this"}, {"post_id": 34720, "ts": "2026-07-25T17:46:15Z", "hours": 1.6575, "text": "This will be my last devlog before leaving my home I wont be home for a month or more now so unfortunately progress on this project will be paused. :( Today i configured my transmitter such that if the aircraft goes beyond range of rx, it automatically comes back home. This was a huge challenge as i didnt have those fancy transmitters with a screen to configure stuff, i have a flysky i4x that comes with JUST the sticks no configuration. Fortunately, buying a flysky transmitter saved me As flysky ibus or sbus protocol transmits the RSSI of radio signal as a pwm signal on its channel 14, To be honest i discovered that while calibrating my radio in mission planner, i was surprised and overjoyed to find that this is actually possible with my transmitter. After finding out and a bit of tinkering later i was able to map RTL on channel 14 and reverse the channel aswell (so it turns on if transmitter disconnects). Honestly this was top 10 flysky respect moments for me. I will be working tirelessly on my game now so be sure to follow that project aswell. I also wanna take a moment to thank EVERYONE who has shown me so much love and support since the beginning of this project, And also to hackclub who were able to provide be with the electronics i could only dream to afford."}, {"post_id": 34131, "ts": "2026-07-24T17:00:44Z", "hours": 1.5714, "text": "I have assembled the airframe , everything is quiet sturdy and under the estimate weight limit, i setup the flight firmware for this specific aircraft, and tuned the rates. Unfortunately due to heavy rainfall near my area and the wing almost entirely being covered with paper, i cant go risk flying it. Also it gets worse as i will not be home for a month or less . I will be disassembling the aircraft which is quiet easy to do due to my smart design choices. I have ordered the XPS sheets that were included in my grant, theyll reach when im not at home so making the fuselage has to wait, but that gives me PLENTY of time to design the fuselage in CAD and make it as clean and robust as possible. On a positive note i took my 450g flying wing out to fly today, it flew quiet well, unfortunately i did manage to crash it as it didnt have a flight computer and these things are quiet hard to fly. Thanks to stardance tho i do have autonomous flight electronics (which costs $180 btw), i can make an autonomous flying wing that will be able to do long range endurance with help of 4 extra cells i have lying around. So thatll prolly be my next project after i come back home . With that i will thanks stardance once again for getting me all these electronics"}, {"post_id": 33414, "ts": "2026-07-23T10:40:33Z", "hours": 4.5925, "text": "This battery is not human bro. This took me way too long to make, the most problematic part was to figure out how to get all the cells together without exploding the pack with extreme heat. I didnt have a spot welder, all i had was nickel strips some cells and a dream, so i used my regular soldering iron and started experimenting on how to solder these packs In the end i found that “spot soldering” worked best for me, i hope im the first one who invented this, but u basically take not that hot of a soldering iron, and then u sand the surface place the strip and dab the soldering iron on the connection to join them together, do this like 4 times for a single joint and u have quiet solid joints While making the connections i did mess up and bit and there was some sparking not enough to burn my house thankfully About the pack, its a 4s4p pack, my first time using 4s configuration, and i am NOT comfortable with the amount of power it delivers, its way too scary gng Im gonna lock the throttle at 70% cuz i know damm well shit can go wrong real fast with these packs. I did some test runs with this on my flying wing and this rc plane, using the pixhawk power module at 50% throttle i saw 11A consumption with PLENTY of power, and on my 3s lipo pack it consumed 21A at 100% so we can safely say its not bottlenecking. Its currently 12000mah, i do have 4 more cells i bought so i can push it to 15000, but ill prolyy do it later cuz this scares me way too much Im not kidding the sound the motor makes while using this pack is way too wild, i HOPE autopilot can handle everything n nothing goes wrong, that being said i will NOT do the maiden with this, instead ill use my 1500mah 3s lipo for that."}, {"post_id": 32877, "ts": "2026-07-22T10:05:34Z", "hours": 1.2, "text": "today i disassembled the aircraft cuz im not gonna be able to fly it anyways rn due to rain Made everything under the wing a LOT cleaner, hid the mess under a sheet of paper, it doesnt look That good, but it looks plenty good rn I am setup and tinkered in the firmware a bit more, idk why i have this fear of maiden launches that stops me from actually flying my models, i really need to get over that Currently I have started working on my game too due to this rain, but ill soon go out for a fuselage less maiden. Pray for me that it goes well."}, {"post_id": 32306, "ts": "2026-07-21T12:07:36Z", "hours": 2.3986, "text": "Ok so i have assembled the avionics, and routed everything in aircraft, as i expected everything does look insanely ugly now Thats okay since i will be making a fuselage later which will hopefully look nice Currently i have ailerons elevator and rudder working fine with differential thrust in action, I do need a proper place to mount the battery aswell, along with a proper place for pixhawk, its just hanging there with double sided tape rn. I really wish i had a better looking fuselage this looks insanely ugly rn, hopefully after i confirm it flies then ill work on the fuselage. My batteries are dead and it JUST rained so i cant go out today, maybe tomorrow i can go for a maiden"}, {"post_id": 31655, "ts": "2026-07-20T07:24:27Z", "hours": 2.3506, "text": "Okay so my back doesnt hurt today I worked on the wing and installed the ESCs, tested the motors using pixhawk and they both respond properly I do have a little concern as the ESCs are getting slightly warm, i did remove the rubber like i did on my older ESC, that doesnt seem to make it any better, the ready to sky esc i used earlier didnt have this heating problem, idk whats going on, i hope it js doesnt end bad The good news is that i installed servos and their linkages to the alerons, i will have a flaperon configuration for nice low effort flaps. Today the aircrafts weight is 560gs without the battery, so im assuming this will be around 750-800 grams with the 1500 3s lipo Istg i hate soldering these thick wires, its js so tedious"}, {"post_id": 31144, "ts": "2026-07-19T09:51:19Z", "hours": 2.3053, "text": "Istg my back is GONE atp so i covered the entire wing in paper turns out yesterday the weight was so high due to wet glue all over the wing, once it dried. So i js covered the entire wing in paper, and its quiet sturdy, Also i fixed the servos inside the wing aswell, it looks very flush, but im sure all that is going to go down the drain once i start installing the esc. This is an insanely tedious job, im just dreading the fuselage part idk how im gonna mke that The support ive been receiving is INSANE it really motivates me to work on it more so thnx yall LOOK AT MY BACK THO GOD DAMM IM FKIN CROOKED"}, {"post_id": 30818, "ts": "2026-07-18T19:00:51Z", "hours": 3.4661, "text": "May lord have mercy on my back damm But the wing is 80% dont, along with the elevator, i have designed everything in most modular and easy t transport as possible. I didnt use my construction method all the way on the wing as it was adding a ton on unnecessary weight on the wing, and the center part does not even need to be that structurally strong so i just let it be exposed, and honestly it looks way better. ALSO MORE ELECTRONICS ARRIVED , today my battery, ESC, and the receiver arrived, i was finally able to see the pixhawk control the servos, for some reason ESCs do get warm when i try to use them but i hope itll be fine. tomorrow the thing im most dreading about, the fuselage and wiring the servos through the wing i will be doing, its most tedious job ever but we gotta do what we gotta do. Im quiet proud how sturdy the frame is tho, the way i made it its absolutely perfect, and it looks like a kit istg. i love working on this project. OH and again HUGE shout out to stardance for getting me all this electronics i will never forget this favor from y’all ever, this is genuinely a core memory of mine now"}, {"post_id": 30253, "ts": "2026-07-17T17:57:35Z", "hours": 2.1783, "text": "Okay dang my back hurts But REAR STABS ARE READY, They are made as perfect, modular and easy to transport as possible. I centered the servos and installed them after lining the entire wing using my custom build process The carbon fiber tube is slid on on site and then clamped to the rear assembly using zipties, this is a little wasteful, but you can also use screws and bolts if youre rich enough. Im quiet proud of the lining job, this rear assembly is one of my best pieces of work ive ever manufactured, I cant wait to see this baby fly Unfortunately no updates on into the cosmos today cuz i was way too excited to work on this project. Oh and shoutout and a huge thanks to hackclub this would NOT have been able to be possible if not for them."}, {"post_id": 30078, "ts": "2026-07-17T11:34:58Z", "hours": 2.7569, "text": "MORE ELECTRONICS ARRIVED TODAY I have made the rear assembly with a beautiful and modular connector that uses zipties to hold onto the carbon spar (i will also add ductape for more rigidity) And i designed the mount of how the BLDC motors are going to hold on the wingspar. ALSO THE SERVOS ARRIVED YAYAYAYAYA, I can finally finish the rear assembly with electronics and all. Unfortunately my gluegun exploded (literally) So i have been set back by a bit but i think im good Heres a graphic for more accurate depiction of how it looked when the gluegun exploded"}, {"post_id": 29338, "ts": "2026-07-16T06:49:45Z", "hours": 1.125, "text": "Ok so i just designed and cut out the rear elevator It looks queit decent, i used 6mm old circular dowels tgat were laying around the house to make it more sturdier, the elevator came out perfect im quiet satisfied by it. Also shout out to this foam, its holds its shape quiet well and its not soft like my old one. Im js waiting for my electronics to arrive, its gonna be christmas soon when all the electroncis do arrive Oh and i will be using the rounded wingtips for everything in aricraft to increase endurance as much as i can. At speeds this aircraft will be running on, i dont expect the vortex to touch the trailing edge of the wing so yeah thats good"}, {"post_id": 28843, "ts": "2026-07-15T11:23:42Z", "hours": 0.9167, "text": "OKAY SO MY DAD GOT ME EPS BLOCKS FINALLY I cut out the airfoil profile twice (i had one 50cm section laying around already) now i finally have the wing structure ready, now after this ima be designing the modular part for the wing that lets it detach and attach to the 10mm carbon fiber tube that i ordered. Cant estimate the RTF weight of the aircraft yet, but without battries im trying to hit around 550g, things are looking pretty decent now EXCEPT THE FACT THAT I ALMOST BURNT MY CLOTHES. Bro i gotta make a better hot wire cutter instead of doing it by hand, i accidentally left the wire touching my pants and i made a lil hole in them. its cool tho FOLLOW ME FOR MORE COOL DEVLOGS"}, {"post_id": 28769, "ts": "2026-07-15T07:44:15Z", "hours": 2.2525, "text": "Ok so i measured and the 2m wing wont fit in my car, really sorry for that, But I will be making the wing 1.5m long, this will reduce the endurance a bit but i wont be sending it to intercity missions just yet so 1.5m will be fine. Also im switching to Clark Y airfoil as its more famous and has a lot of reading material online, the build process has started, i have bought the electronics i need im js waiting for them to arrive now. I cant wait to get my hands on the pixhawk and then take it to fly"}, {"post_id": 27590, "ts": "2026-07-13T09:37:41Z", "hours": 0.3839, "text": "This might be the best day of my life, i got the funding approved for my project got 180 in my HCB, now i can finally start building the project, I have ordered the pixhawk board i just need other electronics and materials. Tomorrow ill be going out to buy 30mm EPS sheets from my local vendor, and then ill start posting time lapses of me building the wing"}, {"post_id": 27046, "ts": "2026-07-12T07:26:53Z", "hours": 0.8683, "text": "Made the wiring diagram in figma and added where the electronics are going to be placed around the aircraft."}, {"post_id": 14908, "ts": "2026-06-24T06:31:56Z", "hours": 1.4833, "text": "Made a real life inspired Aleron servo link for this project. I had printed the old servo links out, they worked fine but the problem was they relied on adhesive to work, and on my aircraft i had used transparent tape over paper as reinforcement so it had 0 hold to it, hence i decided to model a real life inspired servo link with ziptie like behavior, this one doesn’t rely on glue but on the strength of your control surface to hold on, so this ones a lot better and a lot cleaner, the only downside is that it requires a bit of support material to print but that’s okay as aesthetically it looks a lot better, i might make a version that doesn’t require support material if you don’t care about aesthetics so lmk abt that. also this versions step and 3mf file is aslo available on the github"}, {"post_id": 11729, "ts": "2026-06-19T03:13:42Z", "hours": 0.9683, "text": "Made the templates for airofoil, servo horns, motor mount, and the rib template in cad aswell, the rib and airfoil templates have to be traced on cardboard, cut out and have their edges sanded to work properly, motor mounts should be printed twice and there are already way more servo horns than you might need. Even printed these out on my Anycubic Kobra 2 neo to speed up the build process as soon as i get eligible for building"}, {"post_id": 10456, "ts": "2026-06-17T05:54:07Z", "hours": 0.5508, "text": "What if life-saving supplies could reach places of distress without roads, traffic, or human pilots? This project presents a long-endurance autonomous UAV designed to deliver payloads upto 300g using an energy-efficient airframe, autonomous flight planning, and low-cost hardware and really low cost maintenance, most parts of this build are easy to find and the build processes that are used in this aircraft are personally developed worked and tested in real life by me personally. Built from the ground up as a practical engineering platform, the aircraft demonstrates how modern autonomous systems can make aerial logistics more accessible, affordable, and adaptable for real-world challenges. The build uses cheap/easily available parts, and every dime serves a purpose in this project, ive linked the github (currently unfinished) on my project page aswell, please check it out and if yall like it then drop a like aswell. in the images attached, i have made out a flight plan for how it would go in real life, ive ran CFD sims on the aircraft and made a wing profile of 45cm out of thermocol of the SD7037 airfoil to test its stall characteristics to have a better idea about the cruise speed estimation, this testing was done by me sitting in a car with this airfoil outside the window and strapping a MPU gyro to read the angle readings and telling my dad to speed up or slow down."}, {"post_id": 10058, "ts": "2026-06-16T17:10:42Z", "hours": 1.3239, "text": "Currently dont have a pixhawk board, but thought learning to plan a mission wont be that hard, installed mission planner, and now am trying to get a hang of things in this, ill have a servo attached to the AUX port of the pixhawk and ill plan it so the plane reaches X m/s amount of gps speed before dropping the payload and then before X-C m ill drop the payload so that the landing of the payload is as precise as possible here C is the drag coefficient, ill also have to take into account the paracute ill be making out of old plastic bags and how much they will reduce the speed."}, {"post_id": 9807, "ts": "2026-06-16T07:43:35Z", "hours": 1.2044, "text": "Made some realistic changes like adding 2 motors instead of one, estimate weight is around 1.7kgs and ill be using 12 inch fiber props in this build, the battery will be made up of either 3000 or 5000 cells if i manage to get my hands on them, the rear stab LOOKS small but its enough for this build providing 1 vbar ratio, this with differential thrust the aircraft will have insane yaw authority, which can be increased to even more by just moving the thrust motors a little outward on the wing, i have added the pixhawk ESC and my motor models to the document aswell"}, {"post_id": 9361, "ts": "2026-06-15T18:17:24Z", "hours": 1.7128, "text": "Changed the entire design from a flying wing to a conventional UAV type design 2m wingspan and 18cm chord length with a SD7037 airfoil payload capacity of around 500g, there’s a dedicated space for the payload, the entire aircraft will be built out of lightweight pharmocol carbon spars and my own special building techniques that uses trash to reinforce the aircraft. Ive ran CFD sims on this aircraft aswell and im satisfied by the results for now"}, {"post_id": 9193, "ts": "2026-06-15T13:10:54Z", "hours": 0.2917, "text": "Starting out as a flying wing UAV design, uses efficent flying wing type airfoils and will have max payload capacity of around 500g, this aircraft will be mostly responsible for delivering medicines to remote areas without stopping, it’ll use a bomb dropping type mechanism with a parachute strapped to the package. Main aim of this project is to finish everything in as cheap as but as perfect as possible, in india expensive tech doesnt work out, so im making something that people can actually use"}]...
|
Title: Efficient long range UAV by @tejaswa | Star Title: Efficient long range UAV by @tejaswa | Stardance
Devlogs:
Starting out as a flying wing UAV design, uses efficent flying wing type airfoils and will have max payload capacity of around 500g, this aircraft will be mostly responsible for delivering medicines to remote areas without stopping, it’ll use a bomb dropping type mechanism with a parachute strapped to the package. Main aim of this project is to finish everything in as cheap as but as perfect as possible, in india expensive tech doesnt work out, so im making something that people can actually use
Changed the entire design from a flying wing to a conventional UAV type design 2m wingspan and 18cm chord length with a SD7037 airfoil payload capacity of around 500g, there’s a dedicated space for the payload, the entire aircraft will be built out of lightweight pharmocol carbon spars and my own special building techniques that uses trash to reinforce the aircraft. Ive ran CFD sims on this aircraft aswell and im satisfied by the results for now
Made some realistic changes like adding 2 motors instead of one, estimate weight is around 1.7kgs and ill be using 12 inch fiber props in this build, the battery will be made up of either 3000 or 5000 cells if i manage to get my hands on them, the rear stab LOOKS small but its enough for this build providing 1 vbar ratio, this with differential thrust the aircraft will have insane yaw authority, which can be increased to even more by just moving the thrust motors a little outward on the wing, i have added the pixhawk ESC and my motor models to the document aswell
Currently dont have a pixhawk board, but thought learning to plan a mission wont be that hard, installed mission planner, and now am trying to get a hang of things in this, ill have a servo attached to the AUX port of the pixhawk and ill plan it so the plane reaches X m/s amount of gps speed before dropping the payload and then before X-C m ill drop the payload so that the landing of the payload is as precise as possible here C is the drag coefficient, ill also have to take into account the paracute ill be making out of old plastic bags and how much they will reduce the speed.
What if life-saving supplies could reach places of distress without roads, traffic, or human pilots? This project presents a long-endurance autonomous UAV designed to deliver payloads upto 300g using an energy-efficient airframe, autonomous flight planning, and low-cost hardware and really low cost maintenance, most parts of this build are easy to find and the build processes that are used in this aircraft are personally developed worked and tested in real life by me personally. Built from the ground up as a practical engineering platform, the aircraft demonstrates how modern autonomous systems can make aerial logistics more accessible, affordable, and adaptable for real-world challenges. The build uses cheap/easily available parts, and every dime serves a purpose in this project, ive linked the github (currently unfinished) on my project page aswell, please check it out and if yall like it then drop a like aswell. in the images attached, i have made out a flight plan for how it would go in real life, ive ran CFD sims on the aircraft and made a wing profile of 45cm out of thermocol of the SD7037 airfoil to test its stall characteristics to have a better idea about the cruise speed estimation, this testing was done by me sitting in a car with this airfoil outside the window and strapping a MPU gyro to read the angle readings and telling my dad to speed up or slow down.
Made the templates for airofoil, servo horns, motor mount, and the rib template in cad aswell, the rib and airfoil templates have to be traced on cardboard, cut out and have their edges sanded to work properly, motor mounts should be printed twice and there are already way more servo horns than you might need. Even printed these out on my Anycubic Kobra 2 neo to speed up the build process as soon as i get eligible for building
Made a real life inspired Aleron servo link for this project. I had printed the old servo links out, they worked fine but the problem was they relied on adhesive to work, and on my aircraft i had used transparent tape over paper as reinforcement so it had 0 hold to it, hence i decided to model a real life inspired servo link with ziptie like behavior, this one doesn’t rely on glue but on the strength of your control surface to hold on, so this ones a lot better and a lot cleaner, the only downside is that it requires a bit of support material to print but that’s okay as aesthetically it looks a lot better, i might make a version that doesn’t require support material if you don’t care about aesthetics so lmk abt that. also this versions step and 3mf file is aslo available on the github
Made the wiring diagram in figma and added where the electronics are going to be placed around the aircraft.
This might be the best day of my life, i got the funding approved for my project got 180 in my HCB, now i can finally start building the project, I have ordered the pixhawk board i just need other electronics and materials. Tomorrow ill be going out to buy 30mm EPS sheets from my local vendor, and then ill start posting time lapses of me building the wing
Ok so i measured and the 2m wing wont fit in my car, really sorry for that, But I will be making the wing 1.5m long, this will reduce the endurance a bit but i wont be sending it to intercity missions just yet so 1.5m will be fine. Also im switching to Clark Y airfoil as its more famous and has a lot of reading material online, the build process has started, i have bought the electronics i need im js waiting for them to arrive now. I cant wait to get my hands on the pixhawk and then take it to fly
OKAY SO MY DAD GOT ME EPS BLOCKS FINALLY I cut out the airfoil profile twice (i had one 50cm section laying around already) now i finally have the wing structure ready, now after this ima be designing the modular part for the wing that lets it detach and attach to the 10mm carbon fiber tube that i ordered. Cant estimate the RTF weight of the aircraft yet, but without battries im trying to hit around 550g, things are looking pretty decent now EXCEPT THE FACT THAT I ALMOST BURNT MY CLOTHES. Bro i gotta make a better hot wire cutter instead of doing it by hand, i accidentally left the wire touching my pants and i made a lil hole in them. its cool tho FOLLOW ME FOR MORE COOL DEVLOGS
Ok so i just designed and cut out the rear elevator It looks queit decent, i used 6mm old circular dowels tgat were laying around the house to make it more sturdier, the elevator came out perfect im quiet satisfied by it. Also shout out to this foam, its holds its shape quiet well and its not soft like my old one. Im js waiting for my electronics to arrive, its gonna be christmas soon when all the electroncis do arrive Oh and i will be using the rounded wingtips for everything in aricraft to increase endurance as much as i can. At speeds this aircraft will be running on, i dont expect the vortex to touch the trailing edge of the wing so yeah thats good
MORE ELECTRONICS ARRIVED TODAY I have made the rear assembly with a beautiful and modular connector that uses zipties to hold onto the carbon spar (i will also add ductape for more rigidity) And i designed the mount of how the BLDC motors are going to hold on the wingspar. ALSO THE SERVOS ARRIVED YAYAYAYAYA, I can finally finish the rear assembly with electronics and all. Unfortunately my gluegun exploded (literally) So i have been set back by a bit but i think im good Heres a graphic for more accurate depiction of how it looked when the gluegun exploded
Okay dang my back hurts But REAR STABS ARE READY, They are made as perfect, modular and easy to transport as possible. I centered the servos and installed them after lining the entire wing using my custom build process The carbon fiber tube is slid on on site and then clamped to the rear assembly using zipties, this is a little wasteful, but you can also use screws and bolts if youre rich enough. Im quiet proud of the lining job, this rear assembly is one of my best pieces of work ive ever manufactured, I cant wait to see this baby fly Unfortunately no updates on into the cosmos today cuz i was way too excited to work on this project. Oh and shoutout and a huge thanks to hackclub this would NOT have been able to be possible if not for them.
May lord have mercy on my back damm But the wing is 80% dont, along with the elevator, i have designed everything in most modular and easy t transport as possible. I didnt use my construction method all the way on the wing as it was adding a ton on unnecessary weight on the wing, and the center part does not even need to be that structurally strong so i just let it be exposed, and honestly it looks way better. ALSO MORE ELECTRONICS ARRIVED , today my battery, ESC, and the receiver arrived, i was finally able to see the pixhawk control the servos, for some reason ESCs do get warm when i try to use them but i hope itll be fine. tomorrow the thing im most dreading about, the fuselage and wiring the servos through the wing i will be doing, its most tedious job ever but we gotta do what we gotta do. Im quiet proud how sturdy the frame is tho, the way i made it its absolutely perfect, and it looks like a kit istg. i love working on this project. OH and again HUGE shout out to stardance for getting me all this electronics i will never forget this favor from y’all ever, this is genuinely a core memory of mine now
Istg my back is GONE atp so i covered the entire wing in paper turns out yesterday the weight was so high due to wet glue all over the wing, once it dried. So i js covered the entire wing in paper, and its quiet sturdy, Also i fixed the servos inside the wing aswell, it looks very flush, but im sure all that is going to go down the drain once i start installing the esc. This is an insanely tedious job, im just dreading the fuselage part idk how im gonna mke that The support ive been receiving is INSANE it really motivates me to work on it more so thnx yall LOOK AT MY BACK THO GOD DAMM IM FKIN CROOKED
Okay so my back doesnt hurt today I worked on the wing and installed the ESCs, tested the motors using pixhawk and they both respond properly I do have a little concern as the ESCs are getting slightly warm, i did remove the rubber like i did on my older ESC, that doesnt seem to make it any better, the ready to sky esc i used earlier didnt have this heating problem, idk whats going on, i hope it js doesnt end bad The good news is that i installed servos and their linkages to the alerons, i will have a flaperon configuration for nice low effort flaps. Today the aircrafts weight is 560gs without the battery, so im assuming this will be around 750-800 grams with the 1500 3s lipo Istg i hate soldering these thick wires, its js so tedious
Ok so i have assembled the avionics, and routed everything in aircraft, as i expected everything does look insanely ugly now Thats okay since i will be making a fuselage later which will hopefully look nice Currently i have ailerons elevator and rudder working fine with differential thrust in action, I do need a proper place to mount the battery aswell, along with a proper place for pixhawk, its just hanging there with double sided tape rn. I really wish i had a better looking fuselage this looks insanely ugly rn, hopefully after i confirm it flies then ill work on the fuselage. My batteries are dead and it JUST rained so i cant go out today, maybe tomorrow i can go for a maiden
today i disassembled the aircraft cuz im not gonna be able to fly it anyways rn due to rain Made everything under the wing a LOT cleaner, hid the mess under a sheet of paper, it doesnt look That good, but it looks plenty good rn I am setup and tinkered in the firmware a bit more, idk why i have this fear of maiden launches that stops me from actually flying my models, i really need to get over that Currently I have started working on my game too due to this rain, but ill soon go out for a fuselage less maiden. Pray for me that it goes well.
This battery is not human bro. This took me way too long to make, the most problematic part was to figure out how to get all the cells together without exploding the pack with extreme heat. I didnt have a spot welder, all i had was nickel strips some cells and a dream, so i used my regular soldering iron and started experimenting on how to solder these packs In the end i found that “spot soldering” worked best for me, i hope im the first one who invented this, but u basically take not that hot of a soldering iron, and then u sand the surface place the strip and dab the soldering iron on the connection to join them together, do this like 4 times for a single joint and u have quiet solid joints While making the connections i did mess up and bit and there was some sparking not enough to burn my house thankfully About the pack, its a 4s4p pack, my first time using 4s configuration, and i am NOT comfortable with the amount of power it delivers, its way too scary gng Im gonna lock the throttle at 70% cuz i know damm well shit can go wrong real fast with these packs. I did some test runs with this on my flying wing and this rc plane, using the pixhawk power module at 50% throttle i saw 11A consumption with PLENTY of power, and on my 3s lipo pack it consumed 21A at 100% so we can safely say its not bottlenecking. Its currently 12000mah, i do have 4 more cells i bought so i can push it to 15000, but ill prolyy do it later cuz this scares me way too much Im not kidding the sound the motor makes while using this pack is way too wild, i HOPE autopilot can handle everything n nothing goes wrong, that being said i will NOT do the maiden with this, instead ill use my 1500mah 3s lipo for that.
I have assembled the airframe , everything is quiet sturdy and under the estimate weight limit, i setup the flight firmware for this specific aircraft, and tuned the rates. Unfortunately due to heavy rainfall near my area and the wing almost entirely being covered with paper, i cant go risk flying it. Also it gets worse as i will not be home for a month or less . I will be disassembling the aircraft which is quiet easy to do due to my smart design choices. I have ordered the XPS sheets that were included in my grant, theyll reach when im not at home so making the fuselage has to wait, but that gives me PLENTY of time to design the fuselage in CAD and make it as clean and robust as possible. On a positive note i took my 450g flying wing out to fly today, it flew quiet well, unfortunately i did manage to crash it as it didnt have a flight computer and these things are quiet hard to fly. Thanks to stardance tho i do have autonomous flight electronics (which costs $180 btw), i can make an autonomous flying wing that will be able to do long range endurance with help of 4 extra cells i have lying around. So thatll prolly be my next project after i come back home . With that i will thanks stardance once again for getting me all these electronics
This will be my last devlog before leaving my home I wont be home for a month or more now so unfortunately progress on this project will be paused. :( Today i configured my transmitter such that if the aircraft goes beyond range of rx, it automatically comes back home. This was a huge challenge as i didnt have those fancy transmitters with a screen to configure stuff, i have a flysky i4x that comes with JUST the sticks no configuration. Fortunately, buying a flysky transmitter saved me As flysky ibus or sbus protocol transmits the RSSI of radio signal as a pwm signal on its channel 14, To be honest i discovered that while calibrating my radio in mission planner, i was surprised and overjoyed to find that this is actually possible with my transmitter. After finding out and a bit of tinkering later i was able to map RTL on channel 14 and reverse the channel aswell (so it turns on if transmitter disconnects). Honestly this was top 10 flysky respect moments for me. I will be working tirelessly on my game now so be sure to follow that project aswell. I also wanna take a moment to thank EVERYONE who has shown me so much love and support since the beginning of this project, And also to hackclub who were able to provide be with the electronics i could only dream to afford.
IM HOME Today as soon as i reached home i unboxed my telemetry radio and started working on my flying wing Ill use this aircraft as a stepping stone to learn AP and its modes and if i crash hopefully the damage isnt that much Logging time for builds irl is super hectic bruh i gotta figure out a better way to do this
FINISHED THE BUILD OF THE STEPPING STONE FLYING WING This is the flying wing i normally take out to fly and have fun, Ive had like 60% success rate with this model (without wingtip washout), Mostly because flying wings are hard to fly and i dont know how to fly Good thing about flight computers is that they DO know how to fly so this would be a lil bit easier Ive added 2.5 degrees of wingtip washout on this aircraft, also ran CFD sims on the entire wing profiile and saw that the stall characteristics are like a self stablizing feedback loop I have done all the wiring and flying wing setup in the pixhawk, i just need to go fly to use the autotune mode to get the PID right for this model One thing that is bad with this model is that the elevon throw when its going down is WAY less than compared to that when its going up so i hope that might not fk up the plane Ive ran several indoor tests with the motor on and off, it does stall if not thrown properly but most of the time the launch is butter, lets hope its that way tmr too
Fuh me The EXACT DAY i finished my build it has NOT stopped raining at all the airfield is completely damp and my aircraft isnt waterproof. I have limited amount of holidays and this weather is NOT helping me, mum says if i am not able to finish it i can come back again and try then, I still have 4 days to go hopefully weather clears out and im able to ATLEAST take out the flying wing
Took the plane out anyway So today i did 3 VERY short flights 2 of those were successful so ill only count 2 First flight the plane started oscillating in the pitch so i ended it short, Also cuz i ran out of ground to fly as due to heavy rainfall the fields i fly usually on are FULL of water After this flight i committed a bit more to the second launch, got the plane in the air (I think AP did it) The tail was oscillating but it wasn’t unflappable, I had to crash the aircraft in the tree because it was heading beyond my line of sight and there was a LOT of water beyond that tree Thankfully the aircraft received no damage in todays flight, everything was so soft the aircraft didn’t even register any of these crashes as a crash, It went good overall I reduced the servo throws by moving the wires down a notch realized that my surfaces are not symmetric so i accounted for that checked everything chucked it in my room and it feels fine for now Something i dont understand is why in 2nd flight did the aircraft pitch left 80 degrees for no reason and it didn’t even stabilize itself, might need to look at the logs for a few more hours to figure that out
I have finished the plane This took way more than 2 hours btw, it was js such a hassle i forgot to record Anyways the 2 hours that ARE in this post are the hours i spent analyzing the crash of the flying wing, I have zero idea why it crased, but it just rolled right and hit the ground nose down every chance it got. I went on reddit asking about this they told me its cuz flying wings are fiddly (i dont have much exp w them either), and need to be perfect to fly So i js moved on from that and finished the build of the full plane I did factory reset the flight computer this time to get everything reset, and this is a note to self for future When configuring channel 14 RSSI for Flysky TX, Remember to turn on allow_aux_reverse in RC_OPTIONS parameter for it to work The plane is done and build (will build the fuselage later incase it crashes), Im js waiting for good weather, Im here till 7th of this month, hopefully we get a window in that time or else its wraps for me
Okay so good news and bad news Bad news being that my 1.5m span UAV unfortunately crashed, i took it out to fly yesterday and due to wings being way too high i couldnt control it and it crashed. Good news being that my 1m span ultra stick DID fly, This is a similar UAV i started designing thats much lighter and more capable. Enjoy the flight video, Unfortunately due to me being a shit pilot i tried to turn it towards me to get a nice shot but the turn radius was too low and it was going straight towards the power lines so i panicked and crashed it, That broke the motor mount so ill print like 5-6 of them and go to fly tmr with the pixhawk
Beautiful flight Js look at the way it flies bro i can NOT its way too smooth This was my first time actually flying with a flight computer and god damm was it a good experience, everything was so easy and i wasnt scared of flying it too far as i had setup RTL earlier Unfortunately the bad news is that i had 3 flights with this plane, and in the final flight i was tryna autotune it and mid flight the motor came off the mount and fell in the ground (yes it was 70m above the ground when it happened) thankfully the goated pixhawk was able to save the plane, also i had full control over it so i was able to land the plane safely After further inspection i figured out that the motor heat had melted the PLA mount and made the countersink screws act like wedges in wood and it js came clean off 😭 I did NOT expect that bro. Since then i have asked for a bump and also i made the mount much thicker and in todays flight i will be ziptying the motor on Apart form that i also changed the tail for standard configuration to a V tail, currently the elevator hits the carbon boom which reduces the throw, thsi Vtail is much sturdy and cleaner lets hope for the best in todays flight
Attained total hands off autonomy successfully (Ignore the wonky video my mum was trying her best) Man this is the best day in my life. For starters ill start from yesterday, after coming home i realised i dont have much pitch stablity cuz the elevator was hitting the carbon spar, so i ditched conventional tail and made a Vtail instead. After i set it up in arduplane the next step was to go out and test it, And oh boy testing i did. I flew first in FBW A (stablize) And it flew fkin beaut, at 30m altitude i set it to Auto mode, I had preprogrammed 4 waypoints and then RTL in the fc. It flew absolutely perfectly (except for the fact that the winds was WAY too high i could NOT fly it but the fc could) So after it finished i tried bringing it home in FBW A mode (worst idea ever ) The wind literally yeeted it in other direction and i switched on RTL, unfortunately it was wraps The plane crashed in a gravel making facility (idk bro) And i was surprised to find out that ABSOLUTELY NOTHING BROKE!!!!!?!!?! THAT HAS TO BE SOME SORT OF MIRACLE BRO Like literally the only thing broken was that ONE SINGULAR SOLDER JOIN CAME LOOSE DIDNT EEN BREAK IT JS CAME LOOSE So after it crashed we panicked and rushed to the facility, the security was super helpful and i had telemetry link with it so i was able to find it in no time This project was excruciating but absolutely worth it in the end, I will be flying it in more beautiful locations later The image in the end is the aftermath of the flight (literally spotless)
Drop mechanism done Gonna test this servo drop mech on this aircraft too, hopefully it works Unfortunately yall have to wait with me till i go back home
Airplane Im finally learning to properly land this airplane, i did several FBWA runs with this aircraft trying to get my approach right and landing right too I absolutely suck at both of these things, atp im surprised ik how to build the most stable aircraft but idk how to fly the said stable aircraft We cant 100% blame my lack of skill tho cuz if yall notice we can see that the glide ratio is a bit steep, I didnt expect that from this aircraft but due to the autonomous electronics increasing the weight it might be cuz that Since the old wing mount broke and also i wanted to design a new one with 2 servos so i can get flaps with aileron going, which will hopefully reduce my approach speed and angle The efficiency of this aircraft is pretty solid ngl, it cruises at around 5-6A which is very good imo, with this pack i can get around 15-20mins I also made a 4s2p pack for this aircraft using the cells i got from hackclub, i have only bench tested those, the voltage sag is kinda concerning so im not sure if i should fly with them or not Anyways enjoy the flight and do star the repo if yall like the project so far...
|
1792666424.755569
|
1793271224.755569
|
|
40036
|
Gorgon vOS by @Soala7 | Stardance
|
Soala7
|
0
|
54.23
|
0
|
[]
|
[{"post_id": 56968, "ts": "202 [{"post_id": 56968, "ts": "2026-08-29T00:42:54Z", "hours": 13.6908, "text": "Chip 8 emulator in C."}, {"post_id": 48804, "ts": "2026-08-17T10:38:52Z", "hours": 25.3711, "text": "Been working on Virtual memory for my Virtual OS project"}, {"post_id": 37788, "ts": "2026-07-30T18:33:06Z", "hours": 0.7433, "text": "I made a chess game with python. It has to mode pvp and on there you can play an AI with variable difficulty. I nice looking UI with Pygame, working sound effects and correct game logic. This project combines my love for Chess and Python. And in the future hope to do it again in C/C++"}, {"post_id": 37392, "ts": "2026-07-30T02:26:36Z", "hours": 1.3189, "text": "Working desktop simulator using python-c bridge"}, {"post_id": 37006, "ts": "2026-07-29T13:40:07Z", "hours": 5.1711, "text": "PCB type 1"}, {"post_id": 36031, "ts": "2026-07-27T21:04:20Z", "hours": 4.6419, "text": "File manager re-design, I’m creating a virtual operating system with an encoded Linux sand box to launch apps. Current stage file manager, create, copy and paste, delete, move file and folder"}, {"post_id": 35409, "ts": "2026-07-26T19:52:51Z", "hours": 1.6742, "text": "Developing the File explorer"}, {"post_id": 35178, "ts": "2026-07-26T13:09:25Z", "hours": 1.1447, "text": "Making a filesystem is no longer stores temporary RAM data; VOS now has a basic storage system like a real OS."}, {"post_id": 35116, "ts": "2026-07-26T10:51:08Z", "hours": 0.47, "text": "Currently design an ability to save files made in VOS for the eventual creation of the file explorer"}]...
|
Title: Gorgon vOS by @Soala7 | Stardance
Devlogs: Title: Gorgon vOS by @Soala7 | Stardance
Devlogs:
Currently design an ability to save files made in VOS for the eventual creation of the file explorer
Making a filesystem is no longer stores temporary RAM data; VOS now has a basic storage system like a real OS.
Developing the File explorer
File manager re-design, I’m creating a virtual operating system with an encoded Linux sand box to launch apps. Current stage file manager, create, copy and paste, delete, move file and folder
PCB type 1
Working desktop simulator using python-c bridge
I made a chess game with python. It has to mode pvp and on there you can play an AI with variable difficulty. I nice looking UI with Pygame, working sound effects and correct game logic. This project combines my love for Chess and Python. And in the future hope to do it again in C/C++
Been working on Virtual memory for my Virtual OS project
Chip 8 emulator in C....
|
1792680869.4671645
|
1793285669.4671645
|
|
15883
|
Numpad by @Magnu-Shaak | Stardance
|
Magnu-Shaak
|
0
|
54.14
|
0
|
[]
|
[{"post_id": 44349, "ts": "202 [{"post_id": 44349, "ts": "2026-08-10T01:44:11Z", "hours": 4.3347, "text": "Shipping and BOM Made the BOM and sourced parts. Briefly explored switching from the XIAO rp2040 to the Waveshare rp2040 zero. The deal that made that cheaper ran out, so I am back to the XIAO. Shipping was annoying. Eventually, I got my pcb from PCBway (chaeaper than JLC with shipping) on Global Direct shipping. Turns out it’s DDP, but it wasn’t clear originally. Case I am getting 3d printed from my local library for $3.50. Soldering equipment and the XIAO RP2040 devboard, I am getting from Amazon and Microcenter. The rest of it (cheap basic components) I am getting from AliExpress. I am Submitting this Project on Macondo. It better suits what I want in the shop, and It’s more convenient for me because of when my school starts."}, {"post_id": 35913, "ts": "2026-07-27T17:30:36Z", "hours": 1.2336, "text": "Made a toggle key that will activate when pressed. Technically, it’s not on the keymap, but a chord combo(Plus + Minus). Main Problem today was that I I ran out of codespace hours today. With some research, I found Firebase Studio (Unlimited hours) by google. However, they are conveniently stopping support and no longer supporting new projects as of 2 days age. Eventually I settled on using github’s built in vs_code IDE, which works even after you run out of codespace hours. Hackatime installed on there, but it wasn’t correctly connecting to the correct hackatime project, but instead linking to a new one. When I tried to fix it, it wouldn’t connect at all. Eventually I just edited it in the vs_code IDE. Will try to get hackatime working tomorrow. I think it might start working again if I delete .wakatime-project (me trying to make it work) and add the project name on settings.json."}, {"post_id": 33354, "ts": "2026-07-23T06:17:12Z", "hours": 1.1158, "text": "Added more symbols __ Added support for power, remainder, and floor division symbols"}, {"post_id": 32818, "ts": "2026-07-22T06:46:31Z", "hours": 2.6203, "text": "Stopped displaying calculator inputs and Added Dot, Clear, and Backspace functionality __ Hijacked keyboard.process_key so that nothing would display on the screen. Pointed it to it’s old sequence if not in calc_mode __ Added decimals by checking weather or not the current number (a or b) already had a decimal in it. Differentiated between them with (or without) the presence of a operator. Made new state[“a/b}] variables for that __ Defined Clear and Backspace as entries in class RemoverKeys, as part of KMK’s Keys class. Then added them to other_operators_list and custom functions to them."}, {"post_id": 32034, "ts": "2026-07-20T22:09:22Z", "hours": 2.9464, "text": "Added oled support for the local calculator Directly edited the oled_extention.py file to update every time there is a input regarding the raw_str input. __ Also added Running total (use the answer of the last calculation as input for the next) and Padding, adding spaces between entries, (ex: “a+b=c “–> “a + b = c”"}, {"post_id": 31583, "ts": "2026-07-20T02:59:32Z", "hours": 5.3583, "text": "Made interpreter for local calculator __ Made an interpreter so that when state[“is_active”] is true, will convert the kmk inputs to a str. It will then separate that into operator, a and b, and calculate the result. __ However, KMK does not have a way to receive keyboard input updates , meaning it won’t work. To fix this, I am converting it to an exention, which does have that ability."}, {"post_id": 29109, "ts": "2026-07-15T19:30:17Z", "hours": 3.0472, "text": "Made Custom OLED Extension for KMK __ KMK’s display drivers are trash, after they removed peg support. Rather than use an older version of kmk, I used ai to help me add OLED support. __ I used the ai to interface with the low level circuitpy i am unfamiliar with (I use desktop python). I also typed out my own code. Without doing this, I would have to switch everything i had to another firmware on an unknown language."}, {"post_id": 28428, "ts": "2026-07-14T17:42:34Z", "hours": 1.3014, "text": "Made Layer 2 of the macropod __ Made a shortcuts layer. I Used control directly than using a modifier for convenience. Main time use was figuring out TapDace for the recording. __ Not having “combos = Combos()” caused an error. Turn’s out there is a python formatting reason. If anyone understands why, can you explain in a comment? Other errors in code were basic format errors __ Only have built in calculator and OLED display left to make"}, {"post_id": 28024, "ts": "2026-07-14T00:53:48Z", "hours": 2.7133, "text": "Base KMK and added OLED & Layer support __ Made the base KMK matrix & keymap (very easy) Then added OLED configuration (SSD 1306 with i2c protocol) -P..S. The protocol works in a very interesting way __ Explored some Layer switching that I want. I use all my keys, so I have a Temporary active when holding down the enter key, and a toggle with the Plus and Minus Keys together. (KC.LT and combos) __ Still need to complete keymap of 2nd layer and add actual stuff to display on OLED"}, {"post_id": 26855, "ts": "2026-07-11T21:37:49Z", "hours": 0.7906, "text": "Set up Github Codespaces (correctly) for KMK _ Imported kmk as a git submodule on codespace. Then configured settings.json for correct depth when programming. _ Everything froze halfway through. Just had to delete & remake settings.json and Developer: Reload Window."}, {"post_id": 26222, "ts": "2026-07-10T21:43:26Z", "hours": 1.7853, "text": "Setting up KMK environment (Unsuccessful) I am trying to make the kmk code for my macropad, so I’ll only have to debug when i get my parts. I am trying to set up the environment on Github Codespace. __ However, I desided to try to link it directly, instead of uploading kmk to my repo to use as a library directly. I tried to use PyPI and pip commands to directly link it. After troubleshooting (mostly with ai because I am new and don’t know how anything on github works at all) . Eventually, I found out that kmk has non traditional formating, and when inquiring about it, found out it was not on PyPI at all. __ Going to try to direcly upload kmk to repo to use as a library"}, {"post_id": 25523, "ts": "2026-07-09T20:49:29Z", "hours": 1.7828, "text": "Case Finished Custom Insert Completed Designed and Made the Lock Mechanism Made offsets for 3d printer tolerences Realized they broke the lock mechanism and fixed it __ Split file into 3 parts –Top Plate (Removable plate to insert the PCB) –Case (Main structure that houses the PCB) –Custom Insert (Sliding Insert and it’s lock)"}, {"post_id": 24951, "ts": "2026-07-08T20:42:00Z", "hours": 3.8592, "text": "Custom Case Insert - part 1 (Took Way too long) I made a custom insert right above the USB-c port. I want to make this interchangeable, so I can swap designs in and out, whenever. _ There were way too many problems making it: 1 - Made Border sketch on wrong surface. When switching from the bottom to top of a part, the entire sketch rotates, and gets misaligned. Solved by Remaking Sketch using USE. (10 mins spent) __ 2 - Switched to wrong plane for making the insert. It would have been easier to extrude down and then use Boolean. I switched to the front plane, after already making sketches for the top plane. Solved by switching back to a save that had the top plane sketches through version history. (30 mins spent) __ 3 - Forgot that computers make mistakes. When I Used the Boolean tool to make the insert from the extruded hole, I found that the shape wasn’t entirely parallel where it was suppose to be. I spent about an hour (felt like) rechecking all my measurements. When i asked gemini (out of ideas), I realized it was probably a float error. I didn’t think that Onshape would suffer from the same problems as my really unoptimized python code. (30 mins spent) __ __ Sorry if I am ranting. I hate float errors"}, {"post_id": 24345, "ts": "2026-07-07T21:09:27Z", "hours": 1.8086, "text": "Suppressed PCB Calculations I needed to do this so I could continue making my case withought a lot of waiting. Plus, it is also a good habit to never render anything you don’t need if it signifigantly affects your performance. When I started deigning, I used the PCB as a reference. However, now the pcb is slowing my computer down a ton, and I want to fix that, so I suppresed the PCB file. This broke my usb-c connector cutout, and shifted all my other components to one corner (as they were in a chain that used the pcb as a reference). I fixed this by deleting the relationships between the projected lines and the reference on the pcb. I learned you can use “Show dependencies” on the PCB’s import feature to see all the relationships."}, {"post_id": 23633, "ts": "2026-07-06T18:24:42Z", "hours": 2.2839, "text": "Made USB-C cutout and connected the top plate to the case. Originaly, there was a 0.4 mm gap that i made for the pcb, but I forgot to fill that for the top plate (would have been really bad). Ai helped a ton to figure out the size of the USB-C cutout."}, {"post_id": 22502, "ts": "2026-07-05T00:27:40Z", "hours": 2.4819, "text": "Case (part 3) Made the Case walls/base and fixed OLED cutout (again). Also rechecked Screw measurements. Main problem was I had a hard time with the Use tool in Onshape"}, {"post_id": 15373, "ts": "2026-06-25T00:15:14Z", "hours": 1.6683, "text": "Case (part 2) Got Top Surface completed and planned for the screwholes/heated inserts. I am going to make a hole for the screw the whole way, and a slightly bigger one for the heated inserts at the end."}, {"post_id": 15200, "ts": "2026-06-24T18:21:57Z", "hours": 1.3206, "text": "Started Case Design Imported ai03 and pcb files to help with case design Used wrong setting for my import which made me have to restart halfway through."}, {"post_id": 14492, "ts": "2026-06-23T17:03:59Z", "hours": 0.8992, "text": "Assign 3d Models for PCB I used the models listed in https://hackpad-v2-backup.pages.dev . I assigned 3d models to the schematic. I will use this to help design my case."}, {"post_id": 10780, "ts": "2026-06-17T18:09:36Z", "hours": 3.5144, "text": "Finished wiring PCB!! Felt like ages. First there was a ton of congestion right below the microcontroller, and I had to run some wires there, so I rewired it. Then I realized my PCB was exceeding the 100x100mm limit, so had to move the microcontroller down and rewire that area (again). The project is taking longer than I though. I am making so many stupid mistakes. However, I am proud of how quickly I re-wired at the end. Still wasn’t very fast compared to what someone who knows KiCad could have, but really fast for me."}, {"post_id": 9645, "ts": "2026-06-16T01:43:31Z", "hours": 2.2706, "text": "PCB Design (part 1) Made Half of PCB First I tried Geographically Remaping components. It worked for the Switches but diodes went all wack. Had to manually fix that. Learned to use “m” to move the switches and it’s so much easier than dragging (because the switch don’t keep getting stuck for “optimal” wiring paths) The area right below the microcontroller was very tight (6 paths in a 4 wide area). I had to rewire that a lot."}, {"post_id": 9405, "ts": "2026-06-15T19:12:27Z", "hours": 1.61, "text": "Started PCB I started the PCB and it took a long time, because I didn’t know how to use anything. A few Problems: 0- Footprints unlinked again (a wrong setting?) 1-Remembered IDK what side the OLED’s screen goes in relation to the pins 2- Forgot that flipped means make traces go to the back 3- Forgot I’m hand soldering = DO NOT run trace next to pin unless they connect 4- Procrastinated Switch Layout until end"}, {"post_id": 7853, "ts": "2026-06-13T02:56:44Z", "hours": 0.84, "text": "Wired OLED Wired up the OLED and changed some of the matrix wiring connections to do that."}, {"post_id": 7799, "ts": "2026-06-13T00:45:01Z", "hours": 0.6867, "text": "Finished Reconfiguring KiCad On my previse Lapses, I accidently included private info, so I took them down. I made a mklink/j to my project location so it wouldn’t show my account name in the future. Had to re-install the care package after that, because it unlinked. (I did mklink /j “C:\\KiCad_Projects” “C:\\Users - -User–\\Documents\\KiCad” in cmd prompt as administrater)"}, {"post_id": 7229, "ts": "2026-06-12T02:01:57Z", "hours": 1.4894, "text": "Schematic For PCB Made the Schematic for the PCB. I was wonky in my placement so had to restart halfway through. Still need to assign footprints though."}, {"post_id": 7075, "ts": "2026-06-11T21:00:20Z", "hours": 0.3792, "text": "Numpad - Starting the project I Want to Make a Numpad accesory to laptoms that don’t have one. Currently, I have made the Wiring plan in ASCI and have started on the schematic. It took me a while to get KiCad started. I made the dumb move to install it in a non-default location, and had to go through a long troubleshooting process before giving up and reinstalling it. I forgot to click record on lapse, so I unfortunately don’t have that recorded."}]...
|
Title: Numpad by @Magnu-Shaak | Stardance
Devlogs Title: Numpad by @Magnu-Shaak | Stardance
Devlogs:
Numpad - Starting the project I Want to Make a Numpad accesory to laptoms that don’t have one. Currently, I have made the Wiring plan in ASCI and have started on the schematic. It took me a while to get KiCad started. I made the dumb move to install it in a non-default location, and had to go through a long troubleshooting process before giving up and reinstalling it. I forgot to click record on lapse, so I unfortunately don’t have that recorded.
Schematic For PCB Made the Schematic for the PCB. I was wonky in my placement so had to restart halfway through. Still need to assign footprints though.
Finished Reconfiguring KiCad On my previse Lapses, I accidently included private info, so I took them down. I made a mklink/j to my project location so it wouldn’t show my account name in the future. Had to re-install the care package after that, because it unlinked. (I did mklink /j “C:\KiCad_Projects” “C:\Users - -User–\Documents\KiCad” in cmd prompt as administrater)
Wired OLED Wired up the OLED and changed some of the matrix wiring connections to do that.
Started PCB I started the PCB and it took a long time, because I didn’t know how to use anything. A few Problems: 0- Footprints unlinked again (a wrong setting?) 1-Remembered IDK what side the OLED’s screen goes in relation to the pins 2- Forgot that flipped means make traces go to the back 3- Forgot I’m hand soldering = DO NOT run trace next to pin unless they connect 4- Procrastinated Switch Layout until end
PCB Design (part 1) Made Half of PCB First I tried Geographically Remaping components. It worked for the Switches but diodes went all wack. Had to manually fix that. Learned to use “m” to move the switches and it’s so much easier than dragging (because the switch don’t keep getting stuck for “optimal” wiring paths) The area right below the microcontroller was very tight (6 paths in a 4 wide area). I had to rewire that a lot.
Finished wiring PCB!! Felt like ages. First there was a ton of congestion right below the microcontroller, and I had to run some wires there, so I rewired it. Then I realized my PCB was exceeding the 100x100mm limit, so had to move the microcontroller down and rewire that area (again). The project is taking longer than I though. I am making so many stupid mistakes. However, I am proud of how quickly I re-wired at the end. Still wasn’t very fast compared to what someone who knows KiCad could have, but really fast for me.
Assign 3d Models for PCB I used the models listed in https://hackpad-v2-backup.pages.dev . I assigned 3d models to the schematic. I will use this to help design my case.
Started Case Design Imported ai03 and pcb files to help with case design Used wrong setting for my import which made me have to restart halfway through.
Case (part 2) Got Top Surface completed and planned for the screwholes/heated inserts. I am going to make a hole for the screw the whole way, and a slightly bigger one for the heated inserts at the end.
Case (part 3) Made the Case walls/base and fixed OLED cutout (again). Also rechecked Screw measurements. Main problem was I had a hard time with the Use tool in Onshape
Made USB-C cutout and connected the top plate to the case. Originaly, there was a 0.4 mm gap that i made for the pcb, but I forgot to fill that for the top plate (would have been really bad). Ai helped a ton to figure out the size of the USB-C cutout.
Suppressed PCB Calculations I needed to do this so I could continue making my case withought a lot of waiting. Plus, it is also a good habit to never render anything you don’t need if it signifigantly affects your performance. When I started deigning, I used the PCB as a reference. However, now the pcb is slowing my computer down a ton, and I want to fix that, so I suppresed the PCB file. This broke my usb-c connector cutout, and shifted all my other components to one corner (as they were in a chain that used the pcb as a reference). I fixed this by deleting the relationships between the projected lines and the reference on the pcb. I learned you can use “Show dependencies” on the PCB’s import feature to see all the relationships.
Custom Case Insert - part 1 (Took Way too long) I made a custom insert right above the USB-c port. I want to make this interchangeable, so I can swap designs in and out, whenever. _ There were way too many problems making it: 1 - Made Border sketch on wrong surface. When switching from the bottom to top of a part, the entire sketch rotates, and gets misaligned. Solved by Remaking Sketch using USE. (10 mins spent) __ 2 - Switched to wrong plane for making the insert. It would have been easier to extrude down and then use Boolean. I switched to the front plane, after already making sketches for the top plane. Solved by switching back to a save that had the top plane sketches through version history. (30 mins spent) __ 3 - Forgot that computers make mistakes. When I Used the Boolean tool to make the insert from the extruded hole, I found that the shape wasn’t entirely parallel where it was suppose to be. I spent about an hour (felt like) rechecking all my measurements. When i asked gemini (out of ideas), I realized it was probably a float error. I didn’t think that Onshape would suffer from the same problems as my really unoptimized python code. (30 mins spent) __ __ Sorry if I am ranting. I hate float errors
Case Finished Custom Insert Completed Designed and Made the Lock Mechanism Made offsets for 3d printer tolerences Realized they broke the lock mechanism and fixed it __ Split file into 3 parts –Top Plate (Removable plate to insert the PCB) –Case (Main structure that houses the PCB) –Custom Insert (Sliding Insert and it’s lock)
Setting up KMK environment (Unsuccessful) I am trying to make the kmk code for my macropad, so I’ll only have to debug when i get my parts. I am trying to set up the environment on Github Codespace. __ However, I desided to try to link it directly, instead of uploading kmk to my repo to use as a library directly. I tried to use PyPI and pip commands to directly link it. After troubleshooting (mostly with ai because I am new and don’t know how anything on github works at all) . Eventually, I found out that kmk has non traditional formating, and when inquiring about it, found out it was not on PyPI at all. __ Going to try to direcly upload kmk to repo to use as a library
Set up Github Codespaces (correctly) for KMK _ Imported kmk as a git submodule on codespace. Then configured settings.json for correct depth when programming. _ Everything froze halfway through. Just had to delete & remake settings.json and Developer: Reload Window.
Base KMK and added OLED & Layer support __ Made the base KMK matrix & keymap (very easy) Then added OLED configuration (SSD 1306 with i2c protocol) -P..S. The protocol works in a very interesting way __ Explored some Layer switching that I want. I use all my keys, so I have a Temporary active when holding down the enter key, and a toggle with the Plus and Minus Keys together. (KC.LT and combos) __ Still need to complete keymap of 2nd layer and add actual stuff to display on OLED
Made Layer 2 of the macropod __ Made a shortcuts layer. I Used control directly than using a modifier for convenience. Main time use was figuring out TapDace for the recording. __ Not having “combos = Combos()” caused an error. Turn’s out there is a python formatting reason. If anyone understands why, can you explain in a comment? Other errors in code were basic format errors __ Only have built in calculator and OLED display left to make
Made Custom OLED Extension for KMK __ KMK’s display drivers are trash, after they removed peg support. Rather than use an older version of kmk, I used ai to help me add OLED support. __ I used the ai to interface with the low level circuitpy i am unfamiliar with (I use desktop python). I also typed out my own code. Without doing this, I would have to switch everything i had to another firmware on an unknown language.
Made interpreter for local calculator __ Made an interpreter so that when state[“is_active”] is true, will convert the kmk inputs to a str. It will then separate that into operator, a and b, and calculate the result. __ However, KMK does not have a way to receive keyboard input updates , meaning it won’t work. To fix this, I am converting it to an exention, which does have that ability.
Added oled support for the local calculator Directly edited the oled_extention.py file to update every time there is a input regarding the raw_str input. __ Also added Running total (use the answer of the last calculation as input for the next) and Padding, adding spaces between entries, (ex: “a+b=c “–> “a + b = c”
Stopped displaying calculator inputs and Added Dot, Clear, and Backspace functionality __ Hijacked keyboard.process_key so that nothing would display on the screen. Pointed it to it’s old sequence if not in calc_mode __ Added decimals by checking weather or not the current number (a or b) already had a decimal in it. Differentiated between them with (or without) the presence of a operator. Made new state[“a/b}] variables for that __ Defined Clear and Backspace as entries in class RemoverKeys, as part of KMK’s Keys class. Then added them to other_operators_list and custom functions to them.
Added more symbols __ Added support for power, remainder, and floor division symbols
Made a toggle key that will activate when pressed. Technically, it’s not on the keymap, but a chord combo(Plus + Minus). Main Problem today was that I I ran out of codespace hours today. With some research, I found Firebase Studio (Unlimited hours) by google. However, they are conveniently stopping support and no longer supporting new projects as of 2 days age. Eventually I settled on using github’s built in vs_code IDE, which works even after you run out of codespace hours. Hackatime installed on there, but it wasn’t correctly connecting to the correct hackatime project, but instead linking to a new one. When I tried to fix it, it wouldn’t connect at all. Eventually I just edited it in the vs_code IDE. Will try to get hackatime working tomorrow. I think it might start working again if I delete .wakatime-project (me trying to make it work) and add the project name on settings.json.
Shipping and BOM Made the BOM and sourced parts. Briefly explored switching from the XIAO rp2040 to the Waveshare rp2040 zero. The deal that made that cheaper ran out, so I am back to the XIAO. Shipping was annoying. Eventually, I got my pcb from PCBway (chaeaper than JLC with shipping) on Global Direct shipping. Turns out it’s DDP, but it wasn’t clear originally. Case I am getting 3d printed from my local library for $3.50. Soldering equipment and the XIAO RP2040 devboard, I am getting from Amazon and Microcenter. The rest of it (cheap basic components) I am getting from AliExpress. I am Submitting this Project on Macondo. It better suits what I want in the shop, and It’s more convenient for me because of when my school starts....
|
1792752516.7458563
|
1793357316.7458563
|
|
11388
|
Enclave Messenger by @Pradhya | Stardance
|
Pradhya
|
1
|
54.05
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T12:15:31Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What it is A fully offline, peer-to-peer encrypted messenger that runs over Bluetooth (RFCOMM) and local network — zero internet required, zero servers. Messages are end-to-end encrypted, and the UI runs as a local web app in your browser. What was built Bluetooth node — discovers peers via SDP UUID, connects via RFCOMM Web UI — a polished chat interface with dark/light mode, animated splash screen, message bubbles, peer list with live scan End-to-end encryption — passphrase-based, messages show enc/decrypted badges Multi-transport system — send messages to phone numbers when Bluetooth and LAN isn't available Plugin system — extensible architecture with manifest-based permissions, security watchdog Signed update system — RSA-4096 signed manifests + SHA-256 file hashes so updates can be verified without internet What was challenging Bluetooth peer discovery without internet — SDP/RFCOMM is finicky, BlueZ on Linux requires careful pairing/trust setup Coordinating encryption across peers who may be offline — tokens stored locally, decrypted on-demand when passphrase is entered Plugin security in CPython — no real sandbox exists, so the security model relies on scoped PluginCore objects. What to be proud of The UI is genuinely polished — smooth animations, staggered reveals, real-time WebSocket updates The update system is cryptographically sound for an offline-first app To test it Requirements: Linux (BlueZ), Python 3.11+, Bluetooth adapter pip install -r requirements.txt Setup: python set.py — configure identity + passphrase python main.py — starts the node + web UI (visit localhost:5000) Enter your passphrase in the unlock modal to start the Bluetooth node Click scan network in the peers panel to find other Enclave instances nearby Open a chat, send a message — it'll show enc if stored encrypted, decrypted once unlocked Two-device test: Run on two Linux machines with Bluetooth, make sure they’re paired, both run main.py — they should discover each other automatically.", "repo": "https://github.com/Project-Enclave/Enclave-Messenger", "demo": "https://messenger.projectenclave.dev/"}]...
|
[{"post_id": 78709, "ts": "202 [{"post_id": 78709, "ts": "2026-10-11T11:25:29Z", "hours": 10.2472, "text": "Haiii again! Whats done! Security review of the messenger by Claude and fixes for what it found: the passphrase no longer goes in the URL (it used to end up in logs), it is sent in a header now running with –host lan now needs a one-time access code, and debug mode is forced off there plugins are not run until I explicitly trust them, and the trust is tied to the plugin’s file hash, so editing it cancels the trust addresses that other peers give us are checked before we connect UI/UX Changes Messages now have clear stats if they were delivered(directly), sent via a peer, or unsent/failed Failed messages now have a retry button to attempt to re send it. Settings menu has a copy user-id/enclave-id and a qr code too to add them to their peers User profiles can now be easily backed up and restored through the web ui Ive tried adding plugins, still need to test it and move everything to a plugin based system… Misc but important INSTALLATION: you can now use pip/pipx to install it, but youll need to use pipx install . because i want to fix some bugs before publishing it to pypi. DATA MIGRATION: the way that the messenger stores data and where it stores data has been changed so if the pe-em detects any data in the folders that the messenger prev used, then it will move it but not delete the data from the prev dir, which was ~/.enclave-messenger EXECUTABLES: the exeuatables for windows, linux and mac will still be built, but only the linux one will be properly tested because i only have a ubuntu install, i dont have a mac nor enough system resources to test windows or run a mac vm. CHECKS: Claude added like 200 checks and like a ci job that runs them all. BuGs The lan scanner was looking at the wrong port, ugh The windows executable did not start the bluetooth and sms plugins Profiles were broken on the windows executable. (Ugh i hate windows) set.py (the setup file) did the setup properly, but didnt save the profile stuff like name but that never got noticed because core.py fixed it when either web.py or tui.py was launched. QR Code doesnt render Website I still kinda have to redo it all, Update the info on the website. Etc"}, {"post_id": 73096, "ts": "2026-09-24T11:35:52Z", "hours": 4.8553, "text": "Im finally done with all of the PLANNED docs, i still have to add some docs for stuff like DHT, hosting, etc and i have to make plugins, remove in-built stuff stuff, etc"}, {"post_id": 67969, "ts": "2026-09-14T09:17:27Z", "hours": 1.4697, "text": "Added more stuff for future stuff and plans for the messenger Its sad that this challenge is ending soon…"}, {"post_id": 65316, "ts": "2026-09-10T11:55:12Z", "hours": 1.7658, "text": "So im still not done with all the docs, i have like 5 files left to complete. But, i managed to style my mkdocs site and it looks pretty similar to the messenger site… I like the installation one the most. Yay!"}, {"post_id": 63779, "ts": "2026-09-07T18:54:46Z", "hours": 0.9619, "text": "Yay! I got the guide up and reachable at https://messenger.docs.projectenclave.dev/ hosted on vercel The only issue is that its not complete D: And i cant add this to the projects details because its being reviewed :("}, {"post_id": 63533, "ts": "2026-09-07T13:28:12Z", "hours": 0.8214, "text": "Docs looking pretty good I still have to turn this into a site…."}, {"post_id": 61566, "ts": "2026-09-04T15:23:48Z", "hours": 1.4228, "text": "Got a LOT of assets to finallyyyy make the docs and guide! Yay!"}, {"post_id": 60417, "ts": "2026-09-02T18:35:48Z", "hours": 0.9247, "text": "I finally did the read meeeeee"}, {"post_id": 59750, "ts": "2026-09-01T17:58:49Z", "hours": 7.6833, "text": "I FINALLY GOT IT TO WORK!! i still have to fix the web ui… At least i got the router to get working and the tui HURRAY!"}, {"post_id": 27613, "ts": "2026-07-13T10:59:30Z", "hours": 10.3575, "text": "i somehow broke the web ui while trying to add profiles so im also adding a cli and a tui its not a good idea but its an idea The tui will probably look like this. So, the todo is now to fix the web ui, make the tui and add profiles so the reviewers can check it out The below screenshot is from noterooms cli by me!"}, {"post_id": 12577, "ts": "2026-06-20T15:19:07Z", "hours": 1.3519, "text": "I need to make these test better on my laptop… TADC ep9 kinda made me go off track but it was good. I think that was the most i cried while watching a movie. Well, leave that behind. Also, i think its all in one line because i can’t make a new line on mobile. And i think i messed up my ears. Ouch"}, {"post_id": 11910, "ts": "2026-06-19T12:26:36Z", "hours": 1.1892, "text": "Finally made the installation a one liner! Enclave Messenger"}, {"post_id": 11209, "ts": "2026-06-18T10:50:01Z", "hours": 8.7239, "text": "Dev-log 3 What has been done Made the settings look a bit better Added better plugin support Added a built-in Bluetooth support on Linux(Ubuntu) Fixed a security bug where if the host/core was already unlocked, any password was allowed Made the onbording process easier Added a reset file for development and to delete all chat, config, etc made by any files in the repo. Moved the web page to a file in ./templates from ./web.py . The entire file was just a string… Kinda fixed the message bubbles. Made a tool to verify if the files you have are by me for p2p updates What is in progress as of now Make a plugin manager Create documentations Add cross support for apps like blechat and silence Make the UI/UX better Etc also, for why im doing this, see this"}, {"post_id": 5573, "ts": "2026-06-09T12:19:44Z", "hours": 1.3175, "text": "i fixed the networking and transport and i also ditched the logo sorry for the poor quality. cant do higher without i3/ubuntu crashing."}, {"post_id": 4761, "ts": "2026-06-08T07:11:49Z", "hours": 0.5481, "text": "First devlog Almost done with crypto and networking and the UI Made whatever this is as the logo for now"}]...
|
Title: Enclave Messenger by @Pradhya | Stardance
Title: Enclave Messenger by @Pradhya | Stardance
Devlogs:
First devlog Almost done with crypto and networking and the UI Made whatever this is as the logo for now
i fixed the networking and transport and i also ditched the logo sorry for the poor quality. cant do higher without i3/ubuntu crashing.
Dev-log 3 What has been done Made the settings look a bit better Added better plugin support Added a built-in Bluetooth support on Linux(Ubuntu) Fixed a security bug where if the host/core was already unlocked, any password was allowed Made the onbording process easier Added a reset file for development and to delete all chat, config, etc made by any files in the repo. Moved the web page to a file in ./templates from ./web.py . The entire file was just a string… Kinda fixed the message bubbles. Made a tool to verify if the files you have are by me for p2p updates What is in progress as of now Make a plugin manager Create documentations Add cross support for apps like blechat and silence Make the UI/UX better Etc also, for why im doing this, see this
Finally made the installation a one liner! Enclave Messenger
I need to make these test better on my laptop… TADC ep9 kinda made me go off track but it was good. I think that was the most i cried while watching a movie. Well, leave that behind. Also, i think its all in one line because i can’t make a new line on mobile. And i think i messed up my ears. Ouch
i somehow broke the web ui while trying to add profiles so im also adding a cli and a tui its not a good idea but its an idea The tui will probably look like this. So, the todo is now to fix the web ui, make the tui and add profiles so the reviewers can check it out The below screenshot is from noterooms cli by me!
I FINALLY GOT IT TO WORK!! i still have to fix the web ui… At least i got the router to get working and the tui HURRAY!
I finally did the read meeeeee
Got a LOT of assets to finallyyyy make the docs and guide! Yay!
Docs looking pretty good I still have to turn this into a site….
Yay! I got the guide up and reachable at https://messenger.docs.projectenclave.dev/ hosted on vercel The only issue is that its not complete D: And i cant add this to the projects details because its being reviewed :(
So im still not done with all the docs, i have like 5 files left to complete. But, i managed to style my mkdocs site and it looks pretty similar to the messenger site… I like the installation one the most. Yay!
Added more stuff for future stuff and plans for the messenger Its sad that this challenge is ending soon…
Im finally done with all of the PLANNED docs, i still have to add some docs for stuff like DHT, hosting, etc and i have to make plugins, remove in-built stuff stuff, etc
Haiii again! Whats done! Security review of the messenger by Claude and fixes for what it found: the passphrase no longer goes in the URL (it used to end up in logs), it is sent in a header now running with –host lan now needs a one-time access code, and debug mode is forced off there plugins are not run until I explicitly trust them, and the trust is tied to the plugin’s file hash, so editing it cancels the trust addresses that other peers give us are checked before we connect UI/UX Changes Messages now have clear stats if they were delivered(directly), sent via a peer, or unsent/failed Failed messages now have a retry button to attempt to re send it. Settings menu has a copy user-id/enclave-id and a qr code too to add them to their peers User profiles can now be easily backed up and restored through the web ui Ive tried adding plugins, still need to test it and move everything to a plugin based system… Misc but important INSTALLATION: you can now use pip/pipx to install it, but youll need to use pipx install . because i want to fix some bugs before publishing it to pypi. DATA MIGRATION: the way that the messenger stores data and where it stores data has been changed so if the pe-em detects any data in the folders that the messenger prev used, then it will move it but not delete the data from the prev dir, which was ~/.enclave-messenger EXECUTABLES: the exeuatables for windows, linux and mac will still be built, but only the linux one will be properly tested because i only have a ubuntu install, i dont have a mac nor enough system resources to test windows or run a mac vm. CHECKS: Claude added like 200 checks and like a ci job that runs them all. BuGs The lan scanner was looking at the wrong port, ugh The windows executable did not start the bluetooth and sms plugins Profiles were broken on the windows executable. (Ugh i hate windows) set.py (the setup file) did the setup properly, but didnt save the profile stuff like name but that never got noticed because core.py fixed it when either web.py or tui.py was launched. QR Code doesnt render Website I still kinda have to redo it all, Update the info on the website. Etc
Ships:
What it is A fully offline, peer-to-peer encrypted messenger that runs over Bluetooth (RFCOMM) and local network — zero internet required, zero servers. Messages are end-to-end encrypted, and the UI runs as a local web app in your browser. What was built Bluetooth node — discovers peers via SDP UUID, connects via RFCOMM Web UI — a polished chat interface with dark/light mode, animated splash screen, message bubbles, peer list with live scan End-to-end encryption — passphrase-based, messages show enc/decrypted badges Multi-transport system — send messages to phone numbers when Bluetooth and LAN isn't available Plugin system — extensible architecture with manifest-based permissions, security watchdog Signed update system — RSA-4096 signed manifests + SHA-256 file hashes so updates can be verified without internet What was challenging Bluetooth peer discovery without internet — SDP/RFCOMM is finicky, BlueZ on Linux requires careful pairing/trust setup Coordinating encryption across peers who may be offline — tokens stored locally, decrypted on-demand when passphrase is entered Plugin security in CPython — no real sandbox exists, so the security model relies on scoped PluginCore objects. What to be proud of The UI is genuinely polished — smooth animations, staggered reveals, real-time WebSocket updates The update system is cryptographically sound for an offline-first app To test it Requirements: Linux (BlueZ), Python 3.11+, Bluetooth adapter pip install -r requirements.txt Setup: python set.py — configure identity + passphrase python main.py — starts the node + web UI (visit localhost:5000) Enter your passphrase in the unlock modal to start the Bluetooth node Click scan network in the peers panel to find other Enclave instances nearby Open a chat, send a message — it'll show enc if stored encrypted, decrypted once unlocked Two-device test: Run on two Linux machines with Bluetooth, make sure they’re paired, both run main.py — they should discover each other automatically....
|
1793105304.8366299
|
1793191704.8366299
|
|
27212
|
Bumper Goals by @CrazyN | Stardance
|
CrazyN
|
0
|
54.05
|
0
|
[]
|
[{"post_id": 27029, "ts": "202 [{"post_id": 27029, "ts": "2026-07-12T06:02:55Z", "hours": 2.7167, "text": "For my BumperGoals GitHub repository, I completely overhauled the documentation and presentation to match a professional engineering standard. First, I fixed the overall layout of the repository’s landing page by completely replacing the basic documentation with a beautifully formatted README file. I added interactive badges at the top, including direct simulation links to both Wokwi project pages so anyone visiting can immediately test out the code and circuits for the robot chassis and the controller. Second, I integrated high-quality visual renders directly into the documentation. I structured the file to cleanly display my design images side-by-side, perfectly matching the controller shell and its corresponding PCB board layout, as well as the main robot chassis design and the motor assembly view. Third, I cleaned up and corrected the technical data. I mapped out the exact pin configurations for the dual joysticks and the Arduino Nano into an easy-to-read hardware pin table. I also corrected and clarified the movement logic matrix to clearly show how the mirrored N20 motors handle tank steering when pushing the left joystick for straight lines and the right joystick for sharp spins. Finally, I added a clear, step-by-step assembly section detailing exactly how to construct both the handheld controller and the robot chassis, ensuring that the repository serves as a complete, production-ready guide for building the physical hardware from scratch."}, {"post_id": 26251, "ts": "2026-07-10T22:32:09Z", "hours": 2.5842, "text": "For my BumperGoals project, I have successfully finished all of the virtual prototyping, firmware validation, and repository documentation. First, I designed the system architecture for a tabletop robotic soccer game involving a 2v2 match setup. I planned out custom wireless controllers that feature ergonomic shells, joysticks, microchips, and battery power boosters to talk directly to the mini bumper car chassis. Second, I mastered the differential steering logic. Because the N20 gearmotors are physically mirrored on opposite sides of the chassis, I created a custom tank-drive control matrix to handle their directions perfectly. I successfully implemented logic matching my precise controller criteria: pushing the left joystick up or down moves both wheels forward or backward, while pushing the right joystick left or right executes instant, high-speed tank turns. Third, I completely validated my code and wire layouts using the virtual simulator. I wired a virtual Arduino Nano layout to indicator LEDs representing the motor driver outputs. By running an automated script, I successfully proved that my firmware and PWM-capable pin routings function exactly as intended. Finally, I finalized production-ready documentation for my repository. I wrote a clean README file that captures the project summary, includes interactive simulation badges, links layout images like Controller.png and Robot.png, maps out the pin configurations, and provides a step-by-step assembly guide for when I am ready to build the physical hardware."}, {"post_id": 25750, "ts": "2026-07-10T06:03:13Z", "hours": 1.5836, "text": "I upgraded my project from a large Arduino Uno to a compact Type-C Arduino Nano so it could fit inside my handheld controller case. I set up the circuit simulation in Wokwi and wired up two analog joysticks to my Nano across pins A0, A1, A2, and A3. When I ran into compilation errors caused by a typo with brackets on a serial print line, I cleaned up the code. I also noticed that moving my joysticks gave inverted reading values, so I map-tested the directions to ensure the logic was solid. I then designed a specific tank-steering driving logic to handle how my two wheels spin relative to each other for forward, backward, left, and right movements, keeping in mind that the motors face opposite directions on the chassis. Finally, I categorized my 3D design files into the controller top shell, the chassis base, the full robot frame, and the gearbox drivetrain setup, and packed everything into a comprehensive README file for my GitHub repository."}, {"post_id": 25623, "ts": "2026-07-10T00:43:52Z", "hours": 3.9, "text": "I upgraded my project from a bulky Arduino Uno to a tiny Type-C Arduino Nano so it would actually fit inside my custom handheld controller case. I set up a virtual circuit in Wokwi and wired up two analog joysticks to my Nano, mapping them across pins A0 through A3. When my code wouldn’t compile because of a few stray brackets on a print line, I fixed the typo. Then, when I ran the simulation and realized my joystick inputs were completely inverted and reading on the wrong axes, I wrote a troubleshooting script to see exactly how the hardware was reading my hand movements. I also went through my 3D design files and identified each of my CAD models, figuring out exactly which ones were the controller top shell, the chassis base, the full robot assembly, and the drivetrain gear setup. Finally, I pulled everything together—my code, wiring schematics, building instructions, CAD images, and an interactive PCB badge—and wrote one master README file for my GitHub repository so anyone checking out my profile can see exactly how I built it."}, {"post_id": 24341, "ts": "2026-07-07T21:00:43Z", "hours": 2.0167, "text": "Hi! I made a cool engineering project where you build a tabletop robotic soccer game called Bumper Goals, where two teams of custom-made mini bumper cars face off in a fast 2v2 match to be the first to score five goals. To control the cars, you are designing a bunch of custom, easy-to-hold controllers that have built-in screw holes, clean cutouts for the joysticks, and a top shell that snaps tightly onto the bottom plate. Inside the case, each controller uses a tiny computer chip, a power booster to keep everything running smoothly on regular AA batteries, a simple power switch, and a wireless chip to talk to the robots. By writing your own code and uploading it using a plug-in hardware programmer, you are creating a completely wireless, real-life arcade game from scratch."}, {"post_id": 24280, "ts": "2026-07-07T19:00:52Z", "hours": 1.2836, "text": "This budget spreadsheet breaks down the total cost to build multiple units of both the bumper car robots and their controllers, split into mechanical parts and wiring components.Here is the breakdown of how the numbers add up: Bumper Car Expenses The robot mechanical section totals 216.92 dollars. This includes 4 ball casters for 21.96 dollars, 8 micro metal gearmotors for 183.60 dollars, and 4 dual-AA battery holders for 11.36 dollars. The robot wiring section totals 247.28 dollars. This covers 8 Baby Orangutan B-328 microcontrollers for 183.60 dollars, 1 USB AVR programmer for 17.95 dollars, a 4-pack of Tattu batteries for 29.99 dollars, and connecting hardware for 15.74 dollars. Controller Expenses The controller mechanical section totals 26.66 dollars. This covers an 8-pack of the Gebildet joysticks for 9.99 dollars, a 20-pack of the slide switches for 4.99 dollars, and soldering supplies for 11.68 dollars. The controller wiring section totals 27.80 dollars. This pays for 4 of the Pololu 5V step-up voltage regulators.Summary of TotalsWhen categorized by where you are buying the parts, you are spending 72.39 dollars on Amazon and 444.27 dollars on Pololu. When categorized by type, the total mechanical hardware costs 243.58 dollars and the total wiring and electronics cost 275.08 dollars. The combined subtotal for all components is 518.66 dollars. Adding a 10 percent estimated tax of 51.87 dollars brings the final grand total for the entire project setup to 570.53 dollars."}, {"post_id": 23906, "ts": "2026-07-07T03:32:53Z", "hours": 5.9833, "text": "What I Have Designed And DoneThe Controller Enclosure Top Shell: I modeled the main controller housing with a hollowed-out internal cavity, a uniform wall thickness, and integrated dual 21 mm circular joystick cutouts. Bottom Plate: I created a 3 mm solid matching backplate featuring an interlocking, 1.5 mm high alignment lip that keys perfectly into the top shell to prevent twisting. Mechanical Fasteners: I added four heavy-duty screw pillars inside the top shell corners with an inner diameter of 2.5 mm and an outer diameter of 5 mm. These line up perfectly with matching 3 mm clearance screw holes on the bottom plate. Internal Component Layout In my main assembly workspace, I have arranged the physical layouts to ensure everything will fit inside the shell: Power Hardware: I locked a large dual-AA battery holder directly down the center channel. I also cut out a precise 10 mm by 4 mm slot on the top rim to perfectly seat my physical SS12D00 slide switch. Left-Pocket Assembly: To keep things organized, I clustered my main electronics on the left side of the battery holder: The Baby Orangutan B-328 microcontroller. The nRF24L01 wireless transceiver module for robot communication. A tiny Pololu 5V Step-Up Voltage Regulator to boost my AA battery power up to a clean 5V."}, {"post_id": 23674, "ts": "2026-07-06T19:46:40Z", "hours": 4.2892, "text": "🤖 The Bumper Car Robot Build Mechanical & Power Foundation: I completed the physical assembly of the 2-wheel differential drive setup, integrated a ball caster for stability, installed 2 motors, and wired up the battery. Control & Wireless System: I added a wireless transceiver and an external programmer to flash code onto the robot. Smart Hardware Choice: To save time, I skipped designing a custom PCB from scratch and chose the Baby Orangutan B-328 Robot Controller, which perfectly combines an ATmega328P microcontroller and a dual H-bridge motor driver in one compact package. 🎮 Custom Controller CAD Design (Autodesk Inventor) Shell Geometry: I created the main gamepad faceplate and used the Shell tool to seamlessly hollow it out, establishing a uniform, clean 3D enclosure. Joystick Integration: I spaced the thumbstick centers 3 inches apart and sized the clearance holes to 21mm to ensure full range of motion. On the inside ceiling, I successfully sketched and extruded 5mm outer / 2.5mm inner mounting bosses tailored for secure M3 screws. Battery Cradle Optimization: After realizing a 4 AA holder was too large, I pivoted to a compact 2 AA holder (1.25 in x 2.5 in). I successfully mapped out its boundaries in the center channel and extruded a 0.30-inch-high 3D nesting cradle with 0.08-inch walls to lock it in place. Power Switch Cutout: I oriented the workspace to view the flat back wall from the outside and used the Extrude (Cut) tool to pop a perfect rectangular slot straight through the shell for the main power switch. Brain Placement: I moved back to the inside floor of the controller to map out the micro-mounting standoffs (0.08 in inner / 0.16 in outer circles) to keep the microcontroller safely elevated."}, {"post_id": 23314, "ts": "2026-07-06T05:58:34Z", "hours": 1.0503, "text": "I transitioned my detailed 2D sketch into a solid 3D part by executing a clean extrusion of the main controller faceplate. I discovered that the Shell tool is a much more efficient way to create uniform walls than trying to offset complex intersecting lines in a sketch. I successfully used the Shell tool to hollow out the solid 3D block, turning it into a true lightweight controller housing with an empty internal cavity. I set up my workspace to look directly at the inside ceiling of the empty shell and prepared to sketch the five-millimeter mounting bosses that will hold my joystick modules in place."}, {"post_id": 23292, "ts": "2026-07-06T04:56:31Z", "hours": 1.7836, "text": "I perfected the joystick openings by modifying my 2D sketch to size the two thumbstick holes to exactly 21mm, ensuring my controllers will have a full range of motion without any mechanical binding. I learned internal component layout strategies by mapping out the step-by-step logic for transforming a flat faceplate into a 3D shell, including using mounting bosses for the joysticks, building an internal cradle for the battery, and cutting precise slots for the power switch and programming ports. I mastered the Inventor interface by navigating Autodesk Inventors Modify panel to locate the Offset tool right next to the Stretch command. I prepped the 3D shell geometry by setting up my active workspace to transition my flat sketch into a hollowed-out 3D top housing with a strong, uniform wall thickness."}, {"post_id": 23167, "ts": "2026-07-05T23:46:02Z", "hours": 4.2003, "text": "🤖 My Robot Build & Setup My Mechanical & Power Baseline: I have successfully put together the mechanical foundation of my bumper car—finishing the 2-wheel differential drive setup, adding a ball caster for stability, installing 2 engines, and wiring up the battery. My Control & Wireless Integration: I integrated a robot controller and a wireless transceiver to handle remote commands, and I have an external programmer ready to flash my code onto the hardware. My Smart Component Choice: Instead of spending time designing and manufacturing my own custom PCB from scratch, I realized I can save time and effort by buying a pre-made, highly integrated board like the Baby Orangutan B-328 Robot Controller. Since it already includes an ATmega328P microcontroller and an on-board dual H-bridge motor driver in a tiny package, it perfectly fills the electronic gaps I had! 🛠️ My Hardware Ecosystem & Community Goals Beyond the physical workbench, I explored how to scale my building skills and get involved with the community: Hardware Super Builder: I learned about the process to apply to become a Hardware Super Builder to showcase my engineering and making skills. The Printing Legion: I discovered the Printing Legion and how to leverage community resources/3D printing for my project. Outpost Submissions & Stipends: I learned how to submit my hardware projects via the Outpost Design Submission form and figured out how to apply for additional Outpost travel stipends to bring my creations to events."}, {"post_id": 22624, "ts": "2026-07-05T05:29:29Z", "hours": 0.7, "text": "My Project Log: The Master Blueprint for the Micro Bumper Car Phase 1: Mechanical Framework & Gear Mastery I kicked off the project by designing a compact, 2x2x2-inch 3D-printed chassis featuring a main tub, a top lid, a front ball caster, and a two-wheel differential drive setup. When my Pololu N20 micro gearmotors proved too long to sit horizontally end-to-end, I pivoted to a vertical motor configuration. I used a 90-degree, 1:1 bevel gear mesh to transfer power to the wheels. To prevent the wheels from sagging and stripping the gears during intense collisions, I engineered integrated structural axle tunnels and flat-bottomed pillow-block supports to anchor the axles rigidly to the chassis floor. Phase 2: Power Architecture & Space Optimization To maximize my remaining internal space, I chose a flat, horizontal layout on the wide-open front deck. I selected a high-capacity 1S 3.7V LiPo battery in a compact 752540 / 802540 size footprint (about 1.57 x 0.98 inches) to act as a heavy, low-lying weight over the front caster. For reverse voltage protection, I opted for a physically keyed JST-PH 2.0 connector on the battery rather than wasting space on a massive protection circuit board. To maintain a rock-steady power supply as the battery drains, I integrated a tiny Pololu 5V buck-boost voltage regulator to feed the electronics cleanly. Phase 3: The All-In-One Brain To keep my electronics bay clutter-free, I selected the Pololu Baby Orangutan B-328. This tiny board solves my spacing issues by combining an ATmega328P microcontroller and a dual H-bridge motor driver on a single 1.2” x 0.7” board. Because Pololu doesn’t offer an official 3D CAD file for this legacy module, I used the engineering “block-out” method to model a basic dimensional placeholder in Autodesk Inventor, allowing me to build custom plastic mounting walls and standoffs perfectly surrounding it. Phase 4: Programming & Wireless Strategy For the 4-player soccer tournament, I mapped out the wire paths routing power from the battery through the regulator to the brain, and then down to the N20 motor solder tabs. To flash my custom Arduino code onto the cars, I selected the Pololu USB AVR Programmer v2.1. I cleared up a major misconception here: the programmer stays on my workbench and is only plugged into the Baby Orangutan’s 6-pin ISP header (matching up the red stripe to Pin 1) for a few seconds to upload code. I only need one single programmer to update all four tournament cars, saving weight and money. Phase 5: Wireless Control & Custom Transmitters To wirelessly drive the car without the signal overlapping with the other three players in a match, I ruled out messy Infrared (IR) remotes. I instead explored two secure options: standard 2.4GHz hobby RC car pistol-grip controllers paired with a micro-receiver, or Bluetooth control via smartphone apps. I also mapped out a completely custom DIY option: building my own handheld transmitter from scratch using an Arduino Nano and an analog joystick module, transmitting data through the air to the robot via paired nRF24L01 2.4GHz radio transceivers for a secure, lag-free match!"}, {"post_id": 22513, "ts": "2026-07-05T00:59:37Z", "hours": 2.9, "text": "My Project Log: The Micro Bumper Car Evolution Phase 1: Chassis and Drivetrain Layout I started by designing a miniature bumper car body with a tight 2x2x2-inch footprint, consisting of a main chassis and a top cover plate secured by four screws. For movement, I chose a two-wheel differential drive system paired with a single front ball caster for three-point stability on the floor. I selected a high-quality 6V, 500 RPM N20 micro gearmotor from Pololu. When I brought the CAD files into Autodesk Inventor, I quickly realized the motors were too long to sit end-to-end in a straight line inside my small chassis. I first explored a staggered layout using custom-generated imperial spur gears but ultimately found a much better solution: flipping the motors completely vertical. Using Inventor’s bevel gear generator, I engineered a compact 90-degree, 1:1 gear mesh to transfer power directly from the upright motors to the wheel axles. Phase 2: Structural Integrity and Gear Protection Once the layout was set, I noticed a major mechanical flaw: the wheel axles were completely unsupported, meaning the weight of the car would cause them to sag, bend, and instantly strip the fragile bevel gears. I fixed this by sketching an internal support tunnel on the chassis wall, overcoming an Inventor extrusion direction error to merge the plastic inward. To completely eliminate the lever-arm effect on the wheels, I designed a custom, flat-bottomed support block that bridges the gap between the tunnel and the wheel hub. This pillow-block style support sits flush against the chassis floor, absorbing all driving impacts and keeping the bevel gears perfectly aligned at 90 degrees. Phase 3: Electronics Packaging and Component Selection With the mechanics locked down, I turned my attention to the empty space on the front deck to solve the internal packaging puzzle. I decided to maximize this room by opting for a large, high-capacity 1S LiPo battery in the standard 752540 or 802540 form factors (roughly 2x1 inches), ensuring long runtimes and a low center of gravity. To save even more space, I selected the ultra-compact Pololu Baby Orangutan B-328, which conveniently combines a microcontroller and a dual motor driver onto a single tiny board. Because an official 3D model didn’t exist for this board, I used the engineering “block-out” method to model its exact 1.2x0.7-inch dimensions in Inventor, allowing me to successfully map out the electronics bay layout. Phase 4: Wireless Control and Tournament Planning Finally, I shifted focus to how a player will actually drive the robot. I mapped out the electrical paths connecting the battery to the controller, and the controller outputs to the N20 motors. To make the car fully drivable via a handheld remote, I integrated a wireless receiver into the layout. Anticipating a 4-player bumper car soccer tournament, I analyzed potential radio interference to make sure the match wouldn’t turn into a chaotic ruckus. I ruled out cheap Infrared (IR) remotes because they blast identical light signals that would accidentally control every car at once. Instead, I established that using a digitally bound 2.4GHz RC system or paired Bluetooth modules will guarantee secure, 1-to-1 connections, allowing all four robots to compete fiercely without interfering with one another."}, {"post_id": 21964, "ts": "2026-07-04T05:35:08Z", "hours": 1.65, "text": "Project Summary: Micro Bumper Car Drivetrain Evolution: I started by designing a miniature bumper car body with a 2x2x2-inch footprint, including a main chassis and a top cover plate secured by four screws. I set up a two-wheel differential drive system combined with a single internal front ball caster for stability, making sure the wheels and caster aligned perfectly on the floor plane. Then, I selected a 6V, 500 RPM N20 micro gearmotor from Pololu, which has an extended rear shaft. I downloaded the official CAD files and successfully identified the correct part file to bring into my Autodesk Inventor assembly. After analyzing how the motors fit inside the tight chassis space, I realized they are too long to sit end-to-end in a straight line. I drew up a staggered layout concept with spur gears and successfully configured Inventor to generate perfectly sized micro spur gears after adjusting for imperial unit settings. To optimize space even better, I decided to pivot to a vertical motor layout where the motors stand completely upright. I used Inventor’s bevel gear generator to create a pair of tiny 90-degree gears with a perfect 1:1 ratio. I designed and made the entire internal assembly layout myself by constraining the vertical motors and interlocking the bevel gears directly to the wheel axles. After that, I successfully imported the ball caster and modeled a dedicated, custom 3D-printable base mount platform directly on the chassis floor. Next, I realized that the wheels and axles were completely unsupported, which would cause them to sag and strip the gears under a load. I sketched an internal support tunnel on the chassis wall and overcame an extrusion direction error to successfully join the plastic inward. Finally, I designed a custom flat-bottomed support block that connects directly to the tunnel and sits flush against the chassis floor to fully support the wheel axle, eliminate the lever arm effect, and keep my bevel gears perfectly aligned under load."}, {"post_id": 21823, "ts": "2026-07-03T23:09:38Z", "hours": 2.2503, "text": "I started by designing a miniature bumper car body with a 2x2x2-inch footprint, including a main chassis and a top cover plate secured by four screws. I set up a two-wheel differential drive system combined with a single internal front ball caster for stability, making sure the wheels and caster aligned perfectly on the floor plane. Then, I selected a 6V, 500 RPM N20 micro gearmotor from Pololu, which has an extended rear shaft. I downloaded the official CAD files and successfully identified the correct part file to bring into my Autodesk Inventor assembly. After analyzing how the motors fit inside the tight chassis space, I realized they are too long to sit end-to-end in a straight line. I drew up a staggered layout concept with spur gears and successfully configured Inventor to generate perfectly sized micro spur gears after adjusting for imperial unit settings. To optimize space even better, I decided to pivot to a vertical motor layout where the motors stand completely upright. I used Inventor’s bevel gear generator to create a pair of tiny 90-degree gears with a perfect 1:1 ratio. Finally, I designed and made this entire internal assembly layout myself by constraining the vertical motors and interlocking the bevel gears directly to the wheel axles. Most recently, I successfully imported the ball caster and modeled a dedicated, custom 3D-printable base mount platform directly on the chassis floor to give it a solid structural home and complete my stable, rolling drivetrain layout."}, {"post_id": 21323, "ts": "2026-07-03T06:02:53Z", "hours": 1.8169, "text": "I started by designing a miniature bumper car body with a two by two by two inch footprint including a main chassis and a top cover plate secured by four screws I set up a two wheel differential drive system combined with a single internal front ball caster for stability making sure the wheels and caster aligned perfectly on the floor plane Then I selected a six volt five hundred RPM N20 micro gearmotor from Pololu which has an extended rear shaft I downloaded the official CAD files and successfully identified the correct part file to bring into my Autodesk Inventor assembly. After analyzing how the motors fit inside the tight chassis space I realized they are too long to sit end to end in a straight line I drew up a staggered layout concept with spur gears and successfully configured Inventor to generate perfectly sized micro spur gears after adjusting for imperial unit settings. To optimize space even better I decided to pivot to a vertical motor layout where the motors stand completely upright, I used Inventor’s bevel gear generator to create a pair of tiny ninety-degree gears with a perfect one to one ratio. Finally, I designed and made this entire internal assembly layout myself by constraining the vertical motors and interlocking the bevel gears directly to the wheel axles to complete my custom high efficiency micro drivetrain."}, {"post_id": 20395, "ts": "2026-07-01T23:54:44Z", "hours": 1.9667, "text": "I started by designing a miniature bumper car body with a two by two-by-two-inch footprint including a main chassis and a top cover plate secured by four screws. I set up a two-wheel differential drive system combined with a single internal front ball caster for stability making sure the wheels and caster aligned perfectly on the floor plane. Then I selected a six volt five hundred RPM N20 micro gearmotor from Pololu which has an extended rear shaft. I downloaded the official CAD files and successfully identified the correct part file to bring into my Autodesk Inventor assembly. After analyzing how the motors fit inside the tight chassis space I realized they are too long to sit end to end in a straight line. I drew up a staggered layout concept with gears to figure out how to transfer power to the wheels and I am now deciding on the best direct drive arrangement to lock the motors into the chassis without needing extra parts."}, {"post_id": 20212, "ts": "2026-07-01T19:21:37Z", "hours": 1.6336, "text": "I started by designing a two-by-two-inch miniature bumper car body with a main chassis and a matching top cover plate. To hold the shell together securely, I added four internal corner pillars and fastened the cover plate down using four metric screws. Next, I figured out the driving mechanism for the car. I chose a differential drive layout with two independent rear wheels and a single passive ball caster sphere tucked inside the front for balance. I modeled the wheels and the front caster sphere in Inventor, cutting clean arches along the lower edge of the chassis walls so the wheels can reach the floor while aligning everything on the exact same ground plane. After evaluating motor options, I selected a high speed six volt five hundred RPM N20 micro gearmotor to give the car great power and agility. Finally, I located the exact engineering model on the Pololu website and figured out how to download the STEP file so I can bring the motor directly into my assembly."}, {"post_id": 19662, "ts": "2026-07-01T01:20:04Z", "hours": 2.7836, "text": "I started by designing a two-by-two-inch miniature bumper car body with a main chassis and a matching top cover plate. To hold the shell together securely, I added four internal corner pillars and fastened the cover plate down using four metric screws. Next, I figured out the driving mechanism for the car. I decided to go with a differential drive layout, which uses two independent rear wheels for power and steering, and a single passive ball caster sphere in the front for balance. I sketched out this layout to make sure it would fit the space perfectly. Finally, I modeled the wheels and the front caster sphere in Inventor. I cut clean semicircular arches along the lower edge of the chassis walls so the wheels can reach the floor. Right now, I have successfully aligned the wheels and the caster on the exact same ground plane, giving the car perfect clearance and leaving the frame ready for the next steps."}, {"post_id": 19013, "ts": "2026-06-30T05:33:13Z", "hours": 1.0253, "text": "I reviewed my assembly view to ensure the downloaded hardware matched my design layout perfectly. I imported the ISO 7380 hex socket button head screw into my project and caught a unit mismatch that originally made the screw look massive. I corrected this by changing the import units to millimeters, so it scaled down to the true size alongside my two-inch chassis. I used my engineering intuition to analyze the clearance gap between the six-millimeter screw shank and the quarter inch hole on my top cover plate. I checked the head diameter to ensure it would sit flush without overlapping the outer fillets. I updated my thread properties in Inventor by changing from imperial to the ISO Metric Profile. I configured the holes as M6 by 1 and set the behavior to full depth so the screws can pass cleanly through the pillars. I finished assembling the top cover plate onto the bumper car body with all four screws perfectly patterned, aligned, and flush against the surface."}, {"post_id": 18056, "ts": "2026-06-29T01:06:33Z", "hours": 1.4833, "text": "I evaluated my model view to find the best surfaces for starting my sketch. I confirmed that I can sketch on either the top rim of the chassis walls or the inside floor to create the corner pillars. I cleared up the math for my quarter inch top cover and quarter inch internal pillars, confirming they combine for a total depth of exactly half an inch. I planned to make the pillar holes go all the way through so that a half inch screw has extra safety clearance inside the car cavity instead of cracking the plastic. I selected the ISO 7380 hex socket button head screw. Its low-profile head keeps the top of my bumper car clean, and the hex drive provides good torque during assembly. I locked in the M3 size at 12 millimeters long, which safely fits the half inch total height while leaving a tiny safety gap at the bottom. I established the final numbers for my Inventor hole features. The top cover clearance holes will be 3.2 to 3.4 millimeters for a smooth fit, with enough flat space for the 5.7-millimeter screw head to sit flush. The pillar holes will be 2.5 millimeters so the M3 threads can bite directly into the 3D printed plastic."}, {"post_id": 18002, "ts": "2026-06-28T23:36:14Z", "hours": 0.25, "text": "Fastener Selection & Sizing Component Sourcing: We reviewed the metric hex nut options from the JLCMC catalog to fit your micro-scale build. Sizing Specifications: Looked at standard vs. thin profiles for M2 and M3 hardware, identifying their widths across flats and thicknesses to ensure they fit inside your tight vertical boundaries. CAD Tolerances: Discussed adding a $0.1 to $0.2 tolerance to 3D-printed hex pockets so the nuts can be perfectly press-fitted without cracking the plastic. Enclosure Design Strategy Hollow Shell Optimization: Evaluated your progress on the 3D-printed chassis, which is now a clean, hollowed-out cube with filleted exterior edges. Internal Corner Utilization: Devised a plan to utilize the “dead space” in the four inside corners of the 2x2 footprint to create secure mounting points for top and bottom covers.3. Autodesk Inventor Workflow Screw Bosses: Walked through the process of sketching and extruding internal corner pillars (bosses) that blend seamlessly into the interior walls without altering your smooth exterior aesthetic. The Hole Tool: Mapped out how to implement the Hole tool to create precise pilot holes (slightly undersized for screws to tap directly into the plastic) and how to design the matching top/bottom plates with clean clearance holes."}, {"post_id": 17973, "ts": "2026-06-28T22:41:44Z", "hours": 1.2297, "text": "The Game & Field Dimensions The Concept: A 2v2 tabletop mechanical soccer game (similar to a real-world Rocket League). The Field: Exactly 15×28 inches. The Goal Wall Layout: To avoid traffic jams, you finalized a precise layout where the cars themselves frame the goal area:0.25” gap+2” car+0.25” gap+10” goal+0.25” gap+2” car+0.25” gap=15 inches2. The Bumper Car Design (CAD & Hardware) The Scale: The robots are ultra-compact 2×2×2 inch cubes. The Mechanical Stack: * Bottom Layer: Two N20 gearmotors placed face-to-face right on the central axle line (so the car spins perfectly in place) with recessed wheels and a front ball caster. Middle Layer: A 3.7V LiPo battery centered for optimal weight distribution. Top Layer: Your custom PCB housing the microcontroller and wireless chip. The Shell: A 2×2” protective body with a completely flat front bumper face for clean ball-striking, wrapped in an impact-absorbing foam or TPU ring. Inventor CAD Status: We recently worked through a Loft tool error while trying to cap the roof of the car, looking at how to transition the square body into either a smooth dome or a flat recessed deck to mount your electronics.3. The Electronics & Control Scheme The Controller: A custom remote featuring two joysticks. The Drive Code: You are using a “Spin-to-Turn” control scheme. The Movement Stick handles driving straight forward and backward, while the Angle Stick spins the robot left or right in place. Motor Mixing: The PCB’s code will use differential drive math to mix these inputs, allowing the cars to pivot on a dime or carve smooth, sweeping turns when both sticks are used together."}, {"post_id": 17279, "ts": "2026-06-28T00:18:09Z", "hours": 1.05, "text": "Decided to change plans for the Bumper Car, to fit all components"}, {"post_id": 17234, "ts": "2026-06-27T23:03:08Z", "hours": 1.9172, "text": "I designed a BumperCar"}]...
|
Title: Bumper Goals by @CrazyN | Stardance
Devlog Title: Bumper Goals by @CrazyN | Stardance
Devlogs:
I designed a BumperCar
Decided to change plans for the Bumper Car, to fit all components
The Game & Field Dimensions The Concept: A 2v2 tabletop mechanical soccer game (similar to a real-world Rocket League). The Field: Exactly 15×28 inches. The Goal Wall Layout: To avoid traffic jams, you finalized a precise layout where the cars themselves frame the goal area:0.25” gap+2” car+0.25” gap+10” goal+0.25” gap+2” car+0.25” gap=15 inches2. The Bumper Car Design (CAD & Hardware) The Scale: The robots are ultra-compact 2×2×2 inch cubes. The Mechanical Stack: * Bottom Layer: Two N20 gearmotors placed face-to-face right on the central axle line (so the car spins perfectly in place) with recessed wheels and a front ball caster. Middle Layer: A 3.7V LiPo battery centered for optimal weight distribution. Top Layer: Your custom PCB housing the microcontroller and wireless chip. The Shell: A 2×2” protective body with a completely flat front bumper face for clean ball-striking, wrapped in an impact-absorbing foam or TPU ring. Inventor CAD Status: We recently worked through a Loft tool error while trying to cap the roof of the car, looking at how to transition the square body into either a smooth dome or a flat recessed deck to mount your electronics.3. The Electronics & Control Scheme The Controller: A custom remote featuring two joysticks. The Drive Code: You are using a “Spin-to-Turn” control scheme. The Movement Stick handles driving straight forward and backward, while the Angle Stick spins the robot left or right in place. Motor Mixing: The PCB’s code will use differential drive math to mix these inputs, allowing the cars to pivot on a dime or carve smooth, sweeping turns when both sticks are used together.
Fastener Selection & Sizing Component Sourcing: We reviewed the metric hex nut options from the JLCMC catalog to fit your micro-scale build. Sizing Specifications: Looked at standard vs. thin profiles for M2 and M3 hardware, identifying their widths across flats and thicknesses to ensure they fit inside your tight vertical boundaries. CAD Tolerances: Discussed adding a $0.1 to $0.2 tolerance to 3D-printed hex pockets so the nuts can be perfectly press-fitted without cracking the plastic. Enclosure Design Strategy Hollow Shell Optimization: Evaluated your progress on the 3D-printed chassis, which is now a clean, hollowed-out cube with filleted exterior edges. Internal Corner Utilization: Devised a plan to utilize the “dead space” in the four inside corners of the 2x2 footprint to create secure mounting points for top and bottom covers.3. Autodesk Inventor Workflow Screw Bosses: Walked through the process of sketching and extruding internal corner pillars (bosses) that blend seamlessly into the interior walls without altering your smooth exterior aesthetic. The Hole Tool: Mapped out how to implement the Hole tool to create precise pilot holes (slightly undersized for screws to tap directly into the plastic) and how to design the matching top/bottom plates with clean clearance holes.
I evaluated my model view to find the best surfaces for starting my sketch. I confirmed that I can sketch on either the top rim of the chassis walls or the inside floor to create the corner pillars. I cleared up the math for my quarter inch top cover and quarter inch internal pillars, confirming they combine for a total depth of exactly half an inch. I planned to make the pillar holes go all the way through so that a half inch screw has extra safety clearance inside the car cavity instead of cracking the plastic. I selected the ISO 7380 hex socket button head screw. Its low-profile head keeps the top of my bumper car clean, and the hex drive provides good torque during assembly. I locked in the M3 size at 12 millimeters long, which safely fits the half inch total height while leaving a tiny safety gap at the bottom. I established the final numbers for my Inventor hole features. The top cover clearance holes will be 3.2 to 3.4 millimeters for a smooth fit, with enough flat space for the 5.7-millimeter screw head to sit flush. The pillar holes will be 2.5 millimeters so the M3 threads can bite directly into the 3D printed plastic.
I reviewed my assembly view to ensure the downloaded hardware matched my design layout perfectly. I imported the ISO 7380 hex socket button head screw into my project and caught a unit mismatch that originally made the screw look massive. I corrected this by changing the import units to millimeters, so it scaled down to the true size alongside my two-inch chassis. I used my engineering intuition to analyze the clearance gap between the six-millimeter screw shank and the quarter inch hole on my top cover plate. I checked the head diameter to ensure it would sit flush without overlapping the outer fillets. I updated my thread properties in Inventor by changing from imperial to the ISO Metric Profile. I configured the holes as M6 by 1 and set the behavior to full depth so the screws can pass cleanly through the pillars. I finished assembling the top cover plate onto the bumper car body with all four screws perfectly patterned, aligned, and flush against the surface.
I started by designing a two-by-two-inch miniature bumper car body with a main chassis and a matching top cover plate. To hold the shell together securely, I added four internal corner pillars and fastened the cover plate down using four metric screws. Next, I figured out the driving mechanism for the car. I decided to go with a differential drive layout, which uses two independent rear wheels for power and steering, and a single passive ball caster sphere in the front for balance. I sketched out this layout to make sure it would fit the space perfectly. Finally, I modeled the wheels and the front caster sphere in Inventor. I cut clean semicircular arches along the lower edge of the chassis walls so the wheels can reach the floor. Right now, I have successfully aligned the wheels and the caster on the exact same ground plane, giving the car perfect clearance and leaving the frame ready for the next steps.
I started by designing a two-by-two-inch miniature bumper car body with a main chassis and a matching top cover plate. To hold the shell together securely, I added four internal corner pillars and fastened the cover plate down using four metric screws. Next, I figured out the driving mechanism for the car. I chose a differential drive layout with two independent rear wheels and a single passive ball caster sphere tucked inside the front for balance. I modeled the wheels and the front caster sphere in Inventor, cutting clean arches along the lower edge of the chassis walls so the wheels can reach the floor while aligning everything on the exact same ground plane. After evaluating motor options, I selected a high speed six volt five hundred RPM N20 micro gearmotor to give the car great power and agility. Finally, I located the exact engineering model on the Pololu website and figured out how to download the STEP file so I can bring the motor directly into my assembly.
I started by designing a miniature bumper car body with a two by two-by-two-inch footprint including a main chassis and a top cover plate secured by four screws. I set up a two-wheel differential drive system combined with a single internal front ball caster for stability making sure the wheels and caster aligned perfectly on the floor plane. Then I selected a six volt five hundred RPM N20 micro gearmotor from Pololu which has an extended rear shaft. I downloaded the official CAD files and successfully identified the correct part file to bring into my Autodesk Inventor assembly. After analyzing how the motors fit inside the tight chassis space I realized they are too long to sit end to end in a straight line. I drew up a staggered layout concept with gears to figure out how to transfer power to the wheels and I am now deciding on the best direct drive arrangement to lock the motors into the chassis without needing extra parts.
I started by designing a miniature bumper car body with a two by two by two inch footprint including a main chassis and a top cover plate secured by four screws I set up a two wheel differential drive system combined with a single internal front ball caster for stability making sure the wheels and caster aligned perfectly on the floor plane Then I selected a six volt five hundred RPM N20 micro gearmotor from Pololu which has an extended rear shaft I downloaded the official CAD files and successfully identified the correct part file to bring into my Autodesk Inventor assembly. After analyzing how the motors fit inside the tight chassis space I realized they are too long to sit end to end in a straight line I drew up a staggered layout concept with spur gears and successfully configured Inventor to generate perfectly sized micro spur gears after adjusting for imperial unit settings. To optimize space even better I decided to pivot to a vertical motor layout where the motors stand completely upright, I used Inventor’s bevel gear generator to create a pair of tiny ninety-degree gears with a perfect one to one ratio. Finally, I designed and made this entire internal assembly layout myself by constraining the vertical motors and interlocking the bevel gears directly to the wheel axles to complete my custom high efficiency micro drivetrain.
I started by designing a miniature bumper car body with a 2x2x2-inch footprint, including a main chassis and a top cover plate secured by four screws. I set up a two-wheel differential drive system combined with a single internal front ball caster for stability, making sure the wheels and caster aligned perfectly on the floor plane. Then, I selected a 6V, 500 RPM N20 micro gearmotor from Pololu, which has an extended rear shaft. I downloaded the official CAD files and successfully identified the correct part file to bring into my Autodesk Inventor assembly. After analyzing how the motors fit inside the tight chassis space, I realized they are too long to sit end-to-end in a straight line. I drew up a staggered layout concept with spur gears and successfully configured Inventor to generate perfectly sized micro spur gears after adjusting for imperial unit settings. To optimize space even better, I decided to pivot to a vertical motor layout where the motors stand completely upright. I used Inventor’s bevel gear generator to create a pair of tiny 90-degree gears with a perfect 1:1 ratio. Finally, I designed and made this entire internal assembly layout myself by constraining the vertical motors and interlocking the bevel gears directly to the wheel axles. Most recently, I successfully imported the ball caster and modeled a dedicated, custom 3D-printable base mount platform directly on the chassis floor to give it a solid structural home and complete my stable, rolling drivetrain layout.
Project Summary: Micro Bumper Car Drivetrain Evolution: I started by designing a miniature bumper car body with a 2x2x2-inch footprint, including a main chassis and a top cover plate secured by four screws. I set up a two-wheel differential drive system combined with a single internal front ball caster for stability, making sure the wheels and caster aligned perfectly on the floor plane. Then, I selected a 6V, 500 RPM N20 micro gearmotor from Pololu, which has an extended rear shaft. I downloaded the official CAD files and successfully identified the correct part file to bring into my Autodesk Inventor assembly. After analyzing how the motors fit inside the tight chassis space, I realized they are too long to sit end-to-end in a straight line. I drew up a staggered layout concept with spur gears and successfully configured Inventor to generate perfectly sized micro spur gears after adjusting for imperial unit settings. To optimize space even better, I decided to pivot to a vertical motor layout where the motors stand completely upright. I used Inventor’s bevel gear generator to create a pair of tiny 90-degree gears with a perfect 1:1 ratio. I designed and made the entire internal assembly layout myself by constraining the vertical motors and interlocking the bevel gears directly to the wheel axles. After that, I successfully imported the ball caster and modeled a dedicated, custom 3D-printable base mount platform directly on the chassis floor. Next, I realized that the wheels and axles were completely unsupported, which would cause them to sag and strip the gears under a load. I sketched an internal support tunnel on the chassis wall and overcame an extrusion direction error to successfully join the plastic inward. Finally, I designed a custom flat-bottomed support block that connects directly to the tunnel and sits flush against the chassis floor to fully support the wheel axle, eliminate the lever arm effect, and keep my bevel gears perfectly aligned under load.
My Project Log: The Micro Bumper Car Evolution Phase 1: Chassis and Drivetrain Layout I started by designing a miniature bumper car body with a tight 2x2x2-inch footprint, consisting of a main chassis and a top cover plate secured by four screws. For movement, I chose a two-wheel differential drive system paired with a single front ball caster for three-point stability on the floor. I selected a high-quality 6V, 500 RPM N20 micro gearmotor from Pololu. When I brought the CAD files into Autodesk Inventor, I quickly realized the motors were too long to sit end-to-end in a straight line inside my small chassis. I first explored a staggered layout using custom-generated imperial spur gears but ultimately found a much better solution: flipping the motors completely vertical. Using Inventor’s bevel gear generator, I engineered a compact 90-degree, 1:1 gear mesh to transfer power directly from the upright motors to the wheel axles. Phase 2: Structural Integrity and Gear Protection Once the layout was set, I noticed a major mechanical flaw: the wheel axles were completely unsupported, meaning the weight of the car would cause them to sag, bend, and instantly strip the fragile bevel gears. I fixed this by sketching an internal support tunnel on the chassis wall, overcoming an Inventor extrusion direction error to merge the plastic inward. To completely eliminate the lever-arm effect on the wheels, I designed a custom, flat-bottomed support block that bridges the gap between the tunnel and the wheel hub. This pillow-block style support sits flush against the chassis floor, absorbing all driving impacts and keeping the bevel gears perfectly aligned at 90 degrees. Phase 3: Electronics Packaging and Component Selection With the mechanics locked down, I turned my attention to the empty space on the front deck to solve the internal packaging puzzle. I decided to maximize this room by opting for a large, high-capacity 1S LiPo battery in the standard 752540 or 802540 form factors (roughly 2x1 inches), ensuring long runtimes and a low center of gravity. To save even more space, I selected the ultra-compact Pololu Baby Orangutan B-328, which conveniently combines a microcontroller and a dual motor driver onto a single tiny board. Because an official 3D model didn’t exist for this board, I used the engineering “block-out” method to model its exact 1.2x0.7-inch dimensions in Inventor, allowing me to successfully map out the electronics bay layout. Phase 4: Wireless Control and Tournament Planning Finally, I shifted focus to how a player will actually drive the robot. I mapped out the electrical paths connecting the battery to the controller, and the controller outputs to the N20 motors. To make the car fully drivable via a handheld remote, I integrated a wireless receiver into the layout. Anticipating a 4-player bumper car soccer tournament, I analyzed potential radio interference to make sure the match wouldn’t turn into a chaotic ruckus. I ruled out cheap Infrared (IR) remotes because they blast identical light signals that would accidentally control every car at once. Instead, I established that using a digitally bound 2.4GHz RC system or paired Bluetooth modules will guarantee secure, 1-to-1 connections, allowing all four robots to compete fiercely without interfering with one another.
My Project Log: The Master Blueprint for the Micro Bumper Car Phase 1: Mechanical Framework & Gear Mastery I kicked off the project by designing a compact, 2x2x2-inch 3D-printed chassis featuring a main tub, a top lid, a front ball caster, and a two-wheel differential drive setup. When my Pololu N20 micro gearmotors proved too long to sit horizontally end-to-end, I pivoted to a vertical motor configuration. I used a 90-degree, 1:1 bevel gear mesh to transfer power to the wheels. To prevent the wheels from sagging and stripping the gears during intense collisions, I engineered integrated structural axle tunnels and flat-bottomed pillow-block supports to anchor the axles rigidly to the chassis floor. Phase 2: Power Architecture & Space Optimization To maximize my remaining internal space, I chose a flat, horizontal layout on the wide-open front deck. I selected a high-capacity 1S 3.7V LiPo battery in a compact 752540 / 802540 size footprint (about 1.57 x 0.98 inches) to act as a heavy, low-lying weight over the front caster. For reverse voltage protection, I opted for a physically keyed JST-PH 2.0 connector on the battery rather than wasting space on a massive protection circuit board. To maintain a rock-steady power supply as the battery drains, I integrated a tiny Pololu 5V buck-boost voltage regulator to feed the electronics cleanly. Phase 3: The All-In-One Brain To keep my electronics bay clutter-free, I selected the Pololu Baby Orangutan B-328. This tiny board solves my spacing issues by combining an ATmega328P microcontroller and a dual H-bridge motor driver on a single 1.2” x 0.7” board. Because Pololu doesn’t offer an official 3D CAD file for this legacy module, I used the engineering “block-out” method to model a basic dimensional placeholder in Autodesk Inventor, allowing me to build custom plastic mounting walls and standoffs perfectly surrounding it. Phase 4: Programming & Wireless Strategy For the 4-player soccer tournament, I mapped out the wire paths routing power from the battery through the regulator to the brain, and then down to the N20 motor solder tabs. To flash my custom Arduino code onto the cars, I selected the Pololu USB AVR Programmer v2.1. I cleared up a major misconception here: the programmer stays on my workbench and is only plugged into the Baby Orangutan’s 6-pin ISP header (matching up the red stripe to Pin 1) for a few seconds to upload code. I only need one single programmer to update all four tournament cars, saving weight and money. Phase 5: Wireless Control & Custom Transmitters To wirelessly drive the car without the signal overlapping with the other three players in a match, I ruled out messy Infrared (IR) remotes. I instead explored two secure options: standard 2.4GHz hobby RC car pistol-grip controllers paired with a micro-receiver, or Bluetooth control via smartphone apps. I also mapped out a completely custom DIY option: building my own handheld transmitter from scratch using an Arduino Nano and an analog joystick module, transmitting data through the air to the robot via paired nRF24L01 2.4GHz radio transceivers for a secure, lag-free match!
🤖 My Robot Build & Setup My Mechanical & Power Baseline: I have successfully put together the mechanical foundation of my bumper car—finishing the 2-wheel differential drive setup, adding a ball caster for stability, installing 2 engines, and wiring up the battery. My Control & Wireless Integration: I integrated a robot controller and a wireless transceiver to handle remote commands, and I have an external programmer ready to flash my code onto the hardware. My Smart Component Choice: Instead of spending time designing and manufacturing my own custom PCB from scratch, I realized I can save time and effort by buying a pre-made, highly integrated board like the Baby Orangutan B-328 Robot Controller. Since it already includes an ATmega328P microcontroller and an on-board dual H-bridge motor driver in a tiny package, it perfectly fills the electronic gaps I had! 🛠️ My Hardware Ecosystem & Community Goals Beyond the physical workbench, I explored how to scale my building skills and get involved with the community: Hardware Super Builder: I learned about the process to apply to become a Hardware Super Builder to showcase my engineering and making skills. The Printing Legion: I discovered the Printing Legion and how to leverage community resources/3D printing for my project. Outpost Submissions & Stipends: I learned how to submit my hardware projects via the Outpost Design Submission form and figured out how to apply for additional Outpost travel stipends to bring my creations to events.
I perfected the joystick openings by modifying my 2D sketch to size the two thumbstick holes to exactly 21mm, ensuring my controllers will have a full range of motion without any mechanical binding. I learned internal component layout strategies by mapping out the step-by-step logic for transforming a flat faceplate into a 3D shell, including using mounting bosses for the joysticks, building an internal cradle for the battery, and cutting precise slots for the power switch and programming ports. I mastered the Inventor interface by navigating Autodesk Inventors Modify panel to locate the Offset tool right next to the Stretch command. I prepped the 3D shell geometry by setting up my active workspace to transition my flat sketch into a hollowed-out 3D top housing with a strong, uniform wall thickness.
I transitioned my detailed 2D sketch into a solid 3D part by executing a clean extrusion of the main controller faceplate. I discovered that the Shell tool is a much more efficient way to create uniform walls than trying to offset complex intersecting lines in a sketch. I successfully used the Shell tool to hollow out the solid 3D block, turning it into a true lightweight controller housing with an empty internal cavity. I set up my workspace to look directly at the inside ceiling of the empty shell and prepared to sketch the five-millimeter mounting bosses that will hold my joystick modules in place.
🤖 The Bumper Car Robot Build Mechanical & Power Foundation: I completed the physical assembly of the 2-wheel differential drive setup, integrated a ball caster for stability, installed 2 motors, and wired up the battery. Control & Wireless System: I added a wireless transceiver and an external programmer to flash code onto the robot. Smart Hardware Choice: To save time, I skipped designing a custom PCB from scratch and chose the Baby Orangutan B-328 Robot Controller, which perfectly combines an ATmega328P microcontroller and a dual H-bridge motor driver in one compact package. 🎮 Custom Controller CAD Design (Autodesk Inventor) Shell Geometry: I created the main gamepad faceplate and used the Shell tool to seamlessly hollow it out, establishing a uniform, clean 3D enclosure. Joystick Integration: I spaced the thumbstick centers 3 inches apart and sized the clearance holes to 21mm to ensure full range of motion. On the inside ceiling, I successfully sketched and extruded 5mm outer / 2.5mm inner mounting bosses tailored for secure M3 screws. Battery Cradle Optimization: After realizing a 4 AA holder was too large, I pivoted to a compact 2 AA holder (1.25 in x 2.5 in). I successfully mapped out its boundaries in the center channel and extruded a 0.30-inch-high 3D nesting cradle with 0.08-inch walls to lock it in place. Power Switch Cutout: I oriented the workspace to view the flat back wall from the outside and used the Extrude (Cut) tool to pop a perfect rectangular slot straight through the shell for the main power switch. Brain Placement: I moved back to the inside floor of the controller to map out the micro-mounting standoffs (0.08 in inner / 0.16 in outer circles) to keep the microcontroller safely elevated.
What I Have Designed And DoneThe Controller Enclosure Top Shell: I modeled the main controller housing with a hollowed-out internal cavity, a uniform wall thickness, and integrated dual 21 mm circular joystick cutouts. Bottom Plate: I created a 3 mm solid matching backplate featuring an interlocking, 1.5 mm high alignment lip that keys perfectly into the top shell to prevent twisting. Mechanical Fasteners: I added four heavy-duty screw pillars inside the top shell corners with an inner diameter of 2.5 mm and an outer diameter of 5 mm. These line up perfectly with matching 3 mm clearance screw holes on the bottom plate. Internal Component Layout In my main assembly workspace, I have arranged the physical layouts to ensure everything will fit inside the shell: Power Hardware: I locked a large dual-AA battery holder directly down the center channel. I also cut out a precise 10 mm by 4 mm slot on the top rim to perfectly seat my physical SS12D00 slide switch. Left-Pocket Assembly: To keep things organized, I clustered my main electronics on the left side of the battery holder: The Baby Orangutan B-328 microcontroller. The nRF24L01 wireless transceiver module for robot communication. A tiny Pololu 5V Step-Up Voltage Regulator to boost my AA battery power up to a clean 5V.
This budget spreadsheet breaks down the total cost to build multiple units of both the bumper car robots and their controllers, split into mechanical parts and wiring components.Here is the breakdown of how the numbers add up: Bumper Car Expenses The robot mechanical section totals 216.92 dollars. This includes 4 ball casters for 21.96 dollars, 8 micro metal gearmotors for 183.60 dollars, and 4 dual-AA battery holders for 11.36 dollars. The robot wiring section totals 247.28 dollars. This covers 8 Baby Orangutan B-328 microcontrollers for 183.60 dollars, 1 USB AVR programmer for 17.95 dollars, a 4-pack of Tattu batteries for 29.99 dollars, and connecting hardware for 15.74 dollars. Controller Expenses The controller mechanical section totals 26.66 dollars. This covers an 8-pack of the Gebildet joysticks for 9.99 dollars, a 20-pack of the slide switches for 4.99 dollars, and soldering supplies for 11.68 dollars. The controller wiring section totals 27.80 dollars. This pays for 4 of the Pololu 5V step-up voltage regulators.Summary of TotalsWhen categorized by where you are buying the parts, you are spending 72.39 dollars on Amazon and 444.27 dollars on Pololu. When categorized by type, the total mechanical hardware costs 243.58 dollars and the total wiring and electronics cost 275.08 dollars. The combined subtotal for all components is 518.66 dollars. Adding a 10 percent estimated tax of 51.87 dollars brings the final grand total for the entire project setup to 570.53 dollars.
Hi! I made a cool engineering project where you build a tabletop robotic soccer game called Bumper Goals, where two teams of custom-made mini bumper cars face off in a fast 2v2 match to be the first to score five goals. To control the cars, you are designing a bunch of custom, easy-to-hold controllers that have built-in screw holes, clean cutouts for the joysticks, and a top shell that snaps tightly onto the bottom plate. Inside the case, each controller uses a tiny computer chip, a power booster to keep everything running smoothly on regular AA batteries, a simple power switch, and a wireless chip to talk to the robots. By writing your own code and uploading it using a plug-in hardware programmer, you are creating a completely wireless, real-life arcade game from scratch.
I upgraded my project from a bulky Arduino Uno to a tiny Type-C Arduino Nano so it would actually fit inside my custom handheld controller case. I set up a virtual circuit in Wokwi and wired up two analog joysticks to my Nano, mapping them across pins A0 through A3. When my code wouldn’t compile because of a few stray brackets on a print line, I fixed the typo. Then, when I ran the simulation and realized my joystick inputs were completely inverted and reading on the wrong axes, I wrote a troubleshooting script to see exactly how the hardware was reading my hand movements. I also went through my 3D design files and identified each of my CAD models, figuring out exactly which ones were the controller top shell, the chassis base, the full robot assembly, and the drivetrain gear setup. Finally, I pulled everything together—my code, wiring schematics, building instructions, CAD images, and an interactive PCB badge—and wrote one master README file for my GitHub repository so anyone checking out my profile can see exactly how I built it.
I upgraded my project from a large Arduino Uno to a compact Type-C Arduino Nano so it could fit inside my handheld controller case. I set up the circuit simulation in Wokwi and wired up two analog joysticks to my Nano across pins A0, A1, A2, and A3. When I ran into compilation errors caused by a typo with brackets on a serial print line, I cleaned up the code. I also noticed that moving my joysticks gave inverted reading values, so I map-tested the directions to ensure the logic was solid. I then designed a specific tank-steering driving logic to handle how my two wheels spin relative to each other for forward, backward, left, and right movements, keeping in mind that the motors face opposite directions on the chassis. Finally, I categorized my 3D design files into the controller top shell, the chassis base, the full robot frame, and the gearbox drivetrain setup, and packed everything into a comprehensive README file for my GitHub repository.
For my BumperGoals project, I have successfully finished all of the virtual prototyping, firmware validation, and repository documentation. First, I designed the system architecture for a tabletop robotic soccer game involving a 2v2 match setup. I planned out custom wireless controllers that feature ergonomic shells, joysticks, microchips, and battery power boosters to talk directly to the mini bumper car chassis. Second, I mastered the differential steering logic. Because the N20 gearmotors are physically mirrored on opposite sides of the chassis, I created a custom tank-drive control matrix to handle their directions perfectly. I successfully implemented logic matching my precise controller criteria: pushing the left joystick up or down moves both wheels forward or backward, while pushing the right joystick left or right executes instant, high-speed tank turns. Third, I completely validated my code and wire layouts using the virtual simulator. I wired a virtual Arduino Nano layout to indicator LEDs representing the motor driver outputs. By running an automated script, I successfully proved that my firmware and PWM-capable pin routings function exactly as intended. Finally, I finalized production-ready documentation for my repository. I wrote a clean README file that captures the project summary, includes interactive simulation badges, links layout images like Controller.png and Robot.png, maps out the pin configurations, and provides a step-by-step assembly guide for when I am ready to build the physical hardware.
For my BumperGoals GitHub repository, I completely overhauled the documentation and presentation to match a professional engineering standard. First, I fixed the overall layout of the repository’s landing page by completely replacing the basic documentation with a beautifully formatted README file. I added interactive badges at the top, including direct simulation links to both Wokwi project pages so anyone visiting can immediately test out the code and circuits for the robot chassis and the controller. Second, I integrated high-quality visual renders directly into the documentation. I structured the file to cleanly display my design images side-by-side, perfectly matching the controller shell and its corresponding PCB board layout, as well as the main robot chassis design and the motor assembly view. Third, I cleaned up and corrected the technical data. I mapped out the exact pin configurations for the dual joysticks and the Arduino Nano into an easy-to-read hardware pin table. I also corrected and clarified the movement logic matrix to clearly show how the mirrored N20 motors handle tank steering when pushing the left joystick for straight lines and the right joystick for sharp spins. Finally, I added a clear, step-by-step assembly section detailing exactly how to construct both the handheld controller and the robot chassis, ensuring that the repository serves as a complete, production-ready guide for building the physical hardware from scratch....
|
1792742124.879784
|
1793346924.879784
|
|
1233
|
Arena Assault by @jonathanwillner | Stardance
|
jonathanwillner
|
2
|
54.0
|
81
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T20:58:32Z", "hours": 39.0, "multiplier": 1.8, "payout": 25, "blessing": "cursed", "text": "a 2d top down game I made useing c++ and pygame", "repo": "https://github.com/jonwill12/hack-club-game-", "demo": "https://jonwill12.itch.io/hackclubgame"}, {"ship_num": 2, "ts": "2026-06-02T13:46:48Z", "hours": 15.0, "multiplier": 4.1, "payout": 56, "blessing": "neutral", "text": "a top down shooter it only has 5 level but thare will be more comeing soon", "repo": "https://github.com/jonwill12/hack-club-game-", "demo": "https://jonwill12.itch.io/hackclubgame"}]...
|
[{"post_id": 4606, "ts": "2026 [{"post_id": 4606, "ts": "2026-06-07T23:40:53Z", "hours": 4.0, "text": "i worked on makeing it suck less and Waited for the the people to aprove my ship"}, {"post_id": 2138, "ts": "2026-06-04T13:52:32Z", "hours": 12.0, "text": "testing and learning pygame"}, {"post_id": 1813, "ts": "2026-06-04T01:12:01Z", "hours": 1.0, "text": "added readme"}, {"post_id": 1776, "ts": "2026-06-03T23:41:14Z", "hours": 19.0, "text": "adding random levels and testing python incorporation"}, {"post_id": 875, "ts": "2026-06-02T16:24:19Z", "hours": 2.0, "text": "tryed working on makeing backrounds didnt work taking break form coding this project"}, {"post_id": 790, "ts": "2026-06-02T13:43:56Z", "hours": 11.0, "text": "codeing boss and tweeking levels"}, {"post_id": 529, "ts": "2026-06-02T00:22:43Z", "hours": 3.0, "text": "gameb"}]...
|
Title: Arena Assault by @jonathanwillner | Stardan Title: Arena Assault by @jonathanwillner | Stardance
Devlogs:
gameb
codeing boss and tweeking levels
tryed working on makeing backrounds didnt work taking break form coding this project
adding random levels and testing python incorporation
added readme
testing and learning pygame
i worked on makeing it suck less and Waited for the the people to aprove my ship
Ships:
a top down shooter it only has 5 level but thare will be more comeing soon
a 2d top down game I made useing c++ and pygame...
|
1792878870.883119
|
1793742870.883119
|
|
5445
|
UpRevise by @porgsrpogs | Stardance
|
porgsrpogs
|
1
|
54.0
|
606
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-28T21:58:32Z", "hours": 54.0, "multiplier": 11.23, "payout": 606, "blessing": "neutral", "text": "I made an AI revision website that learns what question formats help the user improve the most. Having struggled to find any modules online that could be used for my specific case it was a struggle creating the right file to optimise the weights for each question format. I’m proud to have stuck with this project for such a large amount of time and I’m happy with the great structures and practices I’ve maintained. The main thing anyone should know BEFORE REVIEWING MY SITE is that this project should only be reviewed and tested on a DESKTOP/LAPTOP as small screens can hinder the website’s full experience.", "repo": "https://github.com/POrGSrPOGS/ai-revision-website", "demo": "https://porgsrpogs.hackclub.app/"}]...
|
[{"post_id": 36665, "ts": "202 [{"post_id": 36665, "ts": "2026-07-28T21:25:54Z", "hours": 1.4619, "text": "Devlog 14… Preparing to ship Updated README Updated questions to be space themed To view the website, Click Here"}, {"post_id": 34257, "ts": "2026-07-24T20:00:46Z", "hours": 3.8211, "text": "– Devlog 13 (AI UPDATE) Updated sessionShortcuts to use a factory function pattern which allows me to create an object using request as a parameter once, and then access session data easily without having to submit request as a parameter each time. e.g const questionId = sessionShortcuts.getCurrentQuestionId() no request parameter is required. Updated AI logic to track what the ai’s suggestion was for each answer and see how that suggestion affected improvement, previously the AI would look at the most recent proposal and credit that the improvement, the new logic tracks the ai’s predicted optimum ratio for each question and tracks improvement individually rather than the last system which would use gross improvement. To view the website, Click Here"}, {"post_id": 32524, "ts": "2026-07-21T19:16:45Z", "hours": 5.1464, "text": "Devlog 12 What is UpRevise? It’s a revision website which adapts to how the user learns best to improve efficiency when studying Changelog: General refactoring Added sessionShortcuts which includes helper functions involving session data Code now uses sessionShortcuts to get data rather than hardcoding session data keys throughout multiple files Fixed bug where the same question would appear multiple times in a row Fixed normaliser function so all punctuation is replaced from answers before comparing to correct answers Updated short answer and mark feedback styling To view the website, click here"}, {"post_id": 20767, "ts": "2026-07-02T13:45:37Z", "hours": 3.3989, "text": "Devlog 11 Recap: A revision website that uses AI to adapt to the most effective revision methods, personalised for each user Changelog: States for finding the best combination of question formats are now displayed via ratio format and is updated for every question answered Fixed marking logic for GapFill questions which would cause false negatives Switched the question topics for more general ones to give a better experience for anyone who wants to try it out VIEW SITE NOTE: Questions must be answered multiple times before the ratios can adapt"}, {"post_id": 17159, "ts": "2026-06-27T21:03:00Z", "hours": 9.4075, "text": "Devlog 10 Project: AI focused revision website to learn how you learn, and use that to improve revision Changelog: Tested two main AI models, used basic versions of Bayesian Bandits and Reinforcement learning Reinforcement learning performed the best and was chosen to be used as the model to learn a user’s preference of question formats (e.g GapFill, MultipleChoice, ShortAnswer) Add reward file for converting variables to a 0-1 score so it can be easily interpreted by ai models Data for models is saved in session data using express as a temporary fix, I plan to move data including past marks on questions and AI weights to a database further down the line. Media: Screenshot of the state and proposal of the reinforcement learning model after answering a few questions where only ShortAnswer question formats were answered correctly and the other formats were purposely answered wrong VIEW SITE"}, {"post_id": 15631, "ts": "2026-06-25T12:54:12Z", "hours": 0.5697, "text": "(Mini) Devlog 9 Project Recap: A website to help students revise faster and more efficiently using simple but effective AI Changelog: Fixed some of questionsBank.json because the mark points were written incorrectly Added colour coding to help users understand where they went wrong/right in their answer TRY OUT MY SITE"}, {"post_id": 15267, "ts": "2026-06-24T19:57:41Z", "hours": 2.7622, "text": "Devlog 8 Project Aim: Build a revision website that uses machine learning to help students learn new topics even faster Changelog: Users now receive additional feedback which specifies which of the “keywords” in their answers were correct, incorrect or ignored (Due to repetition etc) Updated marking logic so a user cannot gain multiple marks for the same marking point (E.g NOT getting 2 marks for saying “4 and four” in response to “2 + 2”) Reinforced old logic that had been lost to prevent keywords in an answer being detected as filler words (Such as “and” etc) VIEW SITE"}, {"post_id": 11989, "ts": "2026-06-19T15:51:11Z", "hours": 1.5108, "text": "Devlog 7 Project description: An ai-focused revision website to improve the efficiency in learning for students Changelog Edited structure of questions in questionBank.json to allow for synonym answers Reconfigured marking logic to suit new structure Reconstructed the mark feedback visuals to clearly separate each marking point CLICK TO TRY SITE"}, {"post_id": 10538, "ts": "2026-06-17T09:33:53Z", "hours": 2.6572, "text": "Devlog 6 RECAP: UpRevise is a revision website that will eventually use machine learning to adapt to how different students learn and progress fastest Changelog Added fill in the blank/gap question types Fixed marking logic causing answers to be case sensitive Debugged some things like input boxes being too small CLICK TO VIEW SITE"}, {"post_id": 10073, "ts": "2026-06-16T17:31:55Z", "hours": 5.7492, "text": "Devlog 5 RECAP: A revision website that aims to adapt to how a user learns to help them learn faster [Machine learning hasn’t been added YET] Changelog: Added the ability to select multiple options at once in multiple choice Updated marking logic to be more accurate when marking answers (Like punishing for extra, incorrect answers) Fixed some minor ui stuff like centering of feedback text Made it easier to add more question formats by giving more control to jsx files managing how different question formats display TLDR: Added multi-select to multiple choice questions and made the system mark more accurately CLICK TO TRY SITE"}, {"post_id": 7065, "ts": "2026-06-11T20:42:53Z", "hours": 5.1311, "text": "Devlog 4 Recap: UpRevise is a website for revising and will in the future, hopefully, use machine learning to help students learn more efficiently Changelog The enter key can now be used to easily cycle through questions instead of manually clicking submit and next Responses are colour coded, varying the visuals to reflect full marks, partial marks, and no marks. There is now a system for adding different question formats, currently the website includes: Short Answers and Multiple Choice. Refactored some of home.jsx so api calls are handled in client/src/services HIGHLIGHT: Made an easily expandable system to add multiple question formats like text input answers and multiple choice questions CLICK TO VIEW THE SITE"}, {"post_id": 5746, "ts": "2026-06-09T17:25:50Z", "hours": 8.2725, "text": "Devlog 3 Recap: Revision website to try and increase efficiency in learning so students can carry on spending the same amount of time revising, but with better results. Changelog Refactored loads of my Home.jsx and some other files to become more modular Switched to tailwindcss Updated UI Removed some unnecessary things like dark/light mode to focus on functionality rather than visuals Reduced the amount of react states I was using by like 50% whilst maintaining the same functionality TLDR: I focused mostly on improving my structure so I can greatly increase my future rates of progress Click To View The Site!"}, {"post_id": 2715, "ts": "2026-06-05T13:17:39Z", "hours": 1.9461, "text": "DevLog #2 About UpRevise - A revision website that will focus on adapting to how the user learns best Changes Shows you some of the answers you could have given to get full marks. Site is now publicly accessible thanks to Nest Updated logging and API to make debugging easier Access site: View Site Constructive criticism IS APPRECIATED"}, {"post_id": 1692, "ts": "2026-06-03T20:55:32Z", "hours": 2.3997, "text": "Devlog #1 Introduction For several years I’ve been exploring programming and, more specifically, machine learning. After a miserable attempt where Claude became the main contributor, I have decided to start from scratch and begin making my ai powered revision website. What is the aim? Reducing wasted time - Everyone learns differently, the intent is to make a website that can adapt to whoever is using it. Progress so far (Humble beginnings) Since the start of June I’ve: Polished a simple question prompting and answering system Created an easily expandable filtering system which currently uses subjects and topics Added sessions to track user data such as current question to create a server authoritative secure system. Attachments: A demo of answering questions with a filter of Subject: General and Topic: Academic"}]...
|
Title: UpRevise by @porgsrpogs | Stardance
Devlog Title: UpRevise by @porgsrpogs | Stardance
Devlogs:
Devlog #1 Introduction For several years I’ve been exploring programming and, more specifically, machine learning. After a miserable attempt where Claude became the main contributor, I have decided to start from scratch and begin making my ai powered revision website. What is the aim? Reducing wasted time - Everyone learns differently, the intent is to make a website that can adapt to whoever is using it. Progress so far (Humble beginnings) Since the start of June I’ve: Polished a simple question prompting and answering system Created an easily expandable filtering system which currently uses subjects and topics Added sessions to track user data such as current question to create a server authoritative secure system. Attachments: A demo of answering questions with a filter of Subject: General and Topic: Academic
DevLog #2 About UpRevise - A revision website that will focus on adapting to how the user learns best Changes Shows you some of the answers you could have given to get full marks. Site is now publicly accessible thanks to Nest Updated logging and API to make debugging easier Access site: View Site Constructive criticism IS APPRECIATED
Devlog 3 Recap: Revision website to try and increase efficiency in learning so students can carry on spending the same amount of time revising, but with better results. Changelog Refactored loads of my Home.jsx and some other files to become more modular Switched to tailwindcss Updated UI Removed some unnecessary things like dark/light mode to focus on functionality rather than visuals Reduced the amount of react states I was using by like 50% whilst maintaining the same functionality TLDR: I focused mostly on improving my structure so I can greatly increase my future rates of progress Click To View The Site!
Devlog 4 Recap: UpRevise is a website for revising and will in the future, hopefully, use machine learning to help students learn more efficiently Changelog The enter key can now be used to easily cycle through questions instead of manually clicking submit and next Responses are colour coded, varying the visuals to reflect full marks, partial marks, and no marks. There is now a system for adding different question formats, currently the website includes: Short Answers and Multiple Choice. Refactored some of home.jsx so api calls are handled in client/src/services HIGHLIGHT: Made an easily expandable system to add multiple question formats like text input answers and multiple choice questions CLICK TO VIEW THE SITE
Devlog 5 RECAP: A revision website that aims to adapt to how a user learns to help them learn faster [Machine learning hasn’t been added YET] Changelog: Added the ability to select multiple options at once in multiple choice Updated marking logic to be more accurate when marking answers (Like punishing for extra, incorrect answers) Fixed some minor ui stuff like centering of feedback text Made it easier to add more question formats by giving more control to jsx files managing how different question formats display TLDR: Added multi-select to multiple choice questions and made the system mark more accurately CLICK TO TRY SITE
Devlog 6 RECAP: UpRevise is a revision website that will eventually use machine learning to adapt to how different students learn and progress fastest Changelog Added fill in the blank/gap question types Fixed marking logic causing answers to be case sensitive Debugged some things like input boxes being too small CLICK TO VIEW SITE
Devlog 7 Project description: An ai-focused revision website to improve the efficiency in learning for students Changelog Edited structure of questions in questionBank.json to allow for synonym answers Reconfigured marking logic to suit new structure Reconstructed the mark feedback visuals to clearly separate each marking point CLICK TO TRY SITE
Devlog 8 Project Aim: Build a revision website that uses machine learning to help students learn new topics even faster Changelog: Users now receive additional feedback which specifies which of the “keywords” in their answers were correct, incorrect or ignored (Due to repetition etc) Updated marking logic so a user cannot gain multiple marks for the same marking point (E.g NOT getting 2 marks for saying “4 and four” in response to “2 + 2”) Reinforced old logic that had been lost to prevent keywords in an answer being detected as filler words (Such as “and” etc) VIEW SITE
(Mini) Devlog 9 Project Recap: A website to help students revise faster and more efficiently using simple but effective AI Changelog: Fixed some of questionsBank.json because the mark points were written incorrectly Added colour coding to help users understand where they went wrong/right in their answer TRY OUT MY SITE
Devlog 10 Project: AI focused revision website to learn how you learn, and use that to improve revision Changelog: Tested two main AI models, used basic versions of Bayesian Bandits and Reinforcement learning Reinforcement learning performed the best and was chosen to be used as the model to learn a user’s preference of question formats (e.g GapFill, MultipleChoice, ShortAnswer) Add reward file for converting variables to a 0-1 score so it can be easily interpreted by ai models Data for models is saved in session data using express as a temporary fix, I plan to move data including past marks on questions and AI weights to a database further down the line. Media: Screenshot of the state and proposal of the reinforcement learning model after answering a few questions where only ShortAnswer question formats were answered correctly and the other formats were purposely answered wrong VIEW SITE
Devlog 11 Recap: A revision website that uses AI to adapt to the most effective revision methods, personalised for each user Changelog: States for finding the best combination of question formats are now displayed via ratio format and is updated for every question answered Fixed marking logic for GapFill questions which would cause false negatives Switched the question topics for more general ones to give a better experience for anyone who wants to try it out VIEW SITE NOTE: Questions must be answered multiple times before the ratios can adapt
Devlog 12 What is UpRevise? It’s a revision website which adapts to how the user learns best to improve efficiency when studying Changelog: General refactoring Added sessionShortcuts which includes helper functions involving session data Code now uses sessionShortcuts to get data rather than hardcoding session data keys throughout multiple files Fixed bug where the same question would appear multiple times in a row Fixed normaliser function so all punctuation is replaced from answers before comparing to correct answers Updated short answer and mark feedback styling To view the website, click here
– Devlog 13 (AI UPDATE) Updated sessionShortcuts to use a factory function pattern which allows me to create an object using request as a parameter once, and then access session data easily without having to submit request as a parameter each time. e.g const questionId = sessionShortcuts.getCurrentQuestionId() no request parameter is required. Updated AI logic to track what the ai’s suggestion was for each answer and see how that suggestion affected improvement, previously the AI would look at the most recent proposal and credit that the improvement, the new logic tracks the ai’s predicted optimum ratio for each question and tracks improvement individually rather than the last system which would use gross improvement. To view the website, Click Here
Devlog 14… Preparing to ship Updated README Updated questions to be space themed To view the website, Click Here
Ships:
I made an AI revision website that learns what question formats help the user improve the most. Having struggled to find any modules online that could be used for my specific case it was a struggle creating the right file to optimise the weights for each question format. I’m proud to have stuck with this project for such a large amount of time and I’m happy with the great structures and practices I’ve maintained. The main thing anyone should know BEFORE REVIEWING MY SITE is that this project should only be reviewed and tested on a DESKTOP/LAPTOP as small screens can hinder the website’s full experience....
|
1793090993.4278882
|
1793177393.4278882
|
|
7925
|
OpenMythos by @nish24 | Stardance
|
nish24
|
1
|
54.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T15:23:36Z", "hours": 54.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "OpenMythos is a cybersecurity-focused LLM It’s trained specifically on: ArXiv cs.CR (Cryptography & Security) research papers Real CVE vulnerability data with detailed descriptions What did we build? Full SFT + RLVR training pipeline on H100 GPUs (via Modal) Custom datasets: filtered ArXiv papers + CVE vulnerability data Deployed on Hugging Face Spaces What was challenging? Scraping and filtering high-quality dataset Getting RLVR to actually improve security reasoning. Running stable distributed training on Modal with DeepSpeed Making the model actually useful for real vuln analysis, not just theory What are we proud of? Model genuinely understands CVEs and can reason about attack surfaces Clean SFT → RLVR pipeline that others can replicate 9,000+ users in the first week with zero marketing budget Benchmark results on CyberGym and cybench How to test it? Hugging Face Space: https://huggingface.co/spaces/build-small-hackathon/OpenMythos Try prompts like: “Analyze this code for security vulnerabilities: [paste your code]” “Review this API endpoint for security issues: [paste code]” It works best for: ✅ Code security review ✅ CVE explanation & mitigation ✅ Attack surface analysis ✅ Security research questions", "repo": "https://github.com/KingNish24/OpenMythosDemo", "demo": "https://huggingface.co/spaces/build-small-hackathon/OpenMythos"}]...
|
[{"post_id": 18400, "ts": "202 [{"post_id": 18400, "ts": "2026-06-29T15:17:35Z", "hours": 0.2858, "text": "Hit 9,000+ users on OpenMythos last week OpenMythos is a cybersecurity-focused LLM trained on ArXiv cs.CR papers and real CVE data. If you’ve tried it: → Share your feedback → Found a vuln in your project using it? We’d love to hear Want to stress-test your own project’s security? Give it a shot 👇 https://huggingface.co/spaces/build-small-hackathon/OpenMythos"}, {"post_id": 18274, "ts": "2026-06-29T11:21:45Z", "hours": 46.4808, "text": "Hey everyone! OpenMythos benchmarks are finally here. Sorry it took about a week to post these. The delay was mainly because SWE-bench results weren’t matching up with Qwen 3.6 27B official numbers. Turns out Qwen used a different eval harness and also refined/filtered the benchmark problems, even there prev 3.5 (72.4 in SWE Verified ) version benchmark score is not matching with the numbers published in 3.6 (75 in SWE Verified). Anyway, here are the results across SWE-bench Pro, CyberGym, and cybench. OpenMythos holds up pretty well for a small cybersecurity-focused model! But it has capability to do better. So, will train it further. Demo: https://huggingface.co/spaces/build-small-hackathon/OpenMythos Model: https://huggingface.co/build-small-hackathon/OpenMythos"}, {"post_id": 4019, "ts": "2026-06-07T05:53:03Z", "hours": 4.6978, "text": "Devlog 2 of OpenMythos Dataset Progress: 45k rows of dataset completed. Generation got stuck after 37k due to a bug from upstream provider. Resolved the issue now back on track."}, {"post_id": 2794, "ts": "2026-06-05T16:40:04Z", "hours": 2.7564, "text": "Generating dataset for OpenMythos"}]...
|
Title: OpenMythos by @nish24 | Stardance
Devlogs: Title: OpenMythos by @nish24 | Stardance
Devlogs:
Generating dataset for OpenMythos
Devlog 2 of OpenMythos Dataset Progress: 45k rows of dataset completed. Generation got stuck after 37k due to a bug from upstream provider. Resolved the issue now back on track.
Hey everyone! OpenMythos benchmarks are finally here. Sorry it took about a week to post these. The delay was mainly because SWE-bench results weren’t matching up with Qwen 3.6 27B official numbers. Turns out Qwen used a different eval harness and also refined/filtered the benchmark problems, even there prev 3.5 (72.4 in SWE Verified ) version benchmark score is not matching with the numbers published in 3.6 (75 in SWE Verified). Anyway, here are the results across SWE-bench Pro, CyberGym, and cybench. OpenMythos holds up pretty well for a small cybersecurity-focused model! But it has capability to do better. So, will train it further. Demo: https://huggingface.co/spaces/build-small-hackathon/OpenMythos Model: https://huggingface.co/build-small-hackathon/OpenMythos
Hit 9,000+ users on OpenMythos last week OpenMythos is a cybersecurity-focused LLM trained on ArXiv cs.CR papers and real CVE data. If you’ve tried it: → Share your feedback → Found a vuln in your project using it? We’d love to hear Want to stress-test your own project’s security? Give it a shot 👇 https://huggingface.co/spaces/build-small-hackathon/OpenMythos
Ships:
OpenMythos is a cybersecurity-focused LLM It’s trained specifically on: ArXiv cs.CR (Cryptography & Security) research papers Real CVE vulnerability data with detailed descriptions What did we build? Full SFT + RLVR training pipeline on H100 GPUs (via Modal) Custom datasets: filtered ArXiv papers + CVE vulnerability data Deployed on Hugging Face Spaces What was challenging? Scraping and filtering high-quality dataset Getting RLVR to actually improve security reasoning. Running stable distributed training on Modal with DeepSpeed Making the model actually useful for real vuln analysis, not just theory What are we proud of? Model genuinely understands CVEs and can reason about attack surfaces Clean SFT → RLVR pipeline that others can replicate 9,000+ users in the first week with zero marketing budget Benchmark results on CyberGym and cybench How to test it? Hugging Face Space: https://huggingface.co/spaces/build-small-hackathon/OpenMythos Try prompts like: “Analyze this code for security vulnerabilities: [paste your code]” “Review this API endpoint for security issues: [paste code]” It works best for: ✅ Code security review ✅ CVE explanation & mitigation ✅ Attack surface analysis ✅ Security research questions...
|
1793094929.186081
|
1793181329.186081
|
|
21092
|
The HackClub cloud by @Toma_Kuchta | Stardance
|
Toma_Kuchta
|
1
|
54.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-15T07:09:26Z", "hours": 54.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So this was my first project I have ever done in a real hackathon. I was in a team with Olivia and she had a beautiful traditional Chinese string instrument and we wanted to merge them both into one beautiful and colorful art piece. And we weren’t able to do that in the end sadly. :( lie it would have look great! ciya", "repo": "https://github.com/Tomas-Kuchta-FPV/The_Hack-Club_cloud", "demo": ""}]...
|
[{"post_id": 79722, "ts": "202 [{"post_id": 79722, "ts": "2026-10-15T06:57:50Z", "hours": 2.1853, "text": "Oh neat extra forgotten hours. It’s probably from when I was doing something and didn’t devlog it. sorry for this one. BC IDK what I was doing and don’t recal anything."}, {"post_id": 56134, "ts": "2026-07-17T00:00:00Z", "hours": 6.7, "text": "So we’ve unpaked everything from the ClayHaul and asseced the damage on the led wall. And oh boy all the pillow fill fell from it. So after more figuring out from where to get spray adhereve it turned out that it was in a repair booth, how convinient. Also like a lot of solder connections were tore up from the transport so I’ve repaired those, glued on the pillow fill and it worked great!! Oh yeah and then Gwendal figured out how to play games on the matrix with wled!!!!"}, {"post_id": 56133, "ts": "2026-07-16T00:00:00Z", "hours": 9.0, "text": "Allright so after that mess we’ve locked in hard. While my temate was repairing her project (She did that for almost the whole hackathon, which is crazy). I began soldering and gluing on the LED strips. Then remembered that it would be great to screw in the screws (With the DIY shitty screwdriver), resumed work on the LED strips. Allright and now we have around two hours left. After everything was soldered I’ve turned it on and it didn’t work. First there were problems with WLED configuration and then with one segment that was dead. Soooo after a “quick hour fix” The LED matrix was working. But we still have just a hour left to ship it. So I’ve quickly done some plywood gymnastic with spare people and put the whole contraption on chairs screwed in the legs and stood it up. Oh yeah it was working!!!!! OH no my teamate was still working on her project, so we needed to pivot. I had prepaired the repo for shipping while she sprayed adhesive on the board and glued the pillow fluff on. It was a messs. But we managed to do it in time lol. After that we had a short visit from our favorite creators, packed everything and went partying! They even had a B-day cake for me how lovely! Thank y’all! Here is a little video we’ve filmed. PS: I didn’t take a photo of the final build as I was so bussy!!!!"}, {"post_id": 56132, "ts": "2026-07-15T00:00:00Z", "hours": 10.0, "text": "So this day was spent by asking people around if we can PAINT! I thought we can atlest do some things that are not really needed but there wasn’t much though. So the whole morning was spent asking if we can paint as it was promised to happen now, but everytime I was told off. So I’ve procrastinated instead with talking to people lol. After it we all went on a picnic and we got back by around 4 pm. Allright no more staling we have layed down the OBS boards and began gluing on the led strips which we have precut yeasterday. And while gluing on the strips I went to another round of asking around for a saw, but this time dhamari helped me soooo much!!! <3 So after yesterdays pain with a small metal saw I’ve managed to borrowed a great stanley saw from a framing shop nextdoor. Nice!! Aaaaaaaaaaahhhhhh so I’ve finally managed to cut down the wood. Oh also we don’t have a scredriver so we’ve made our own scrappy one."}, {"post_id": 56131, "ts": "2026-07-14T00:00:00Z", "hours": 6.7, "text": "Mys first task was finding a teamate in which I failed horibly as I wasn’t able fo find anyone. I’m normaly social but it was different here as I was speaking a different language, and just a lot of first times (USA, Solo flight, long haul flight, hackathon, new people, different culture) … yeah it was overwhelming. And did I mention that I was on a family and frinds gathering in the middle of novehwre! So my plan was to when I land go to lowes and bring back all the stuff needed with yaha, but by the time I’ve came from the airport I wouldn’t have enough time to make it in time for the opening ceremony. So yaha came there by himself, picked up and rode it in an uber - just in time nice!!!! Also my plan was to spray paint the OSB light blue at lowes but that didn’t happen so I’ve bugged staff for the whole evening if there is a place that we can paint it, I weren’t to a more disorganized even in my whole life! It was chaos on all fronts."}, {"post_id": 56130, "ts": "2026-07-14T00:00:00Z", "hours": 1.5, "text": "So after a bit of setup I had like 18hr traveling to the venue. The leg to Frankfurt was great but the flight to San Francisco was super long and I didn’t know what to do. But in the last two hours of flight I’ve remembered that I need to finish the animations for the LED matrix. ’*sad"}, {"post_id": 14521, "ts": "2026-06-23T17:40:25Z", "hours": 2.9719, "text": "After shipping yesterday I had today started working on riping TwinkleTron out of my table, and overwriting it with the latest FW. Then I began configuring it. I have set up the LED strip channels as one can only do 800 LED’s reliably. It was split in the middle by 576 pixels. After I peeked into the matrix config set up the defined matrix size and it didn’t look right. Went to readme to spot the mistake ant it was because I’ve wrongly converted from mm to cm. OR so I thought. It was the whole calculation that was wrong. 🤦♂️ MATHS Boink I got an notification that my ship was rejected and needs changes. (No images in readme and no BOM) Back to the project, and after a few blank stares into the readme and also the CAD file I’ve managed to at least hopefully correctly calculate the needed LEDs. SO I had to redesign the power delivery section. Updated the repo for requested changes and shipped it back out. PS: I also managed to get the price down :yay"}, {"post_id": 13753, "ts": "2026-06-22T15:19:42Z", "hours": 4.2097, "text": "Allright I’m almost finished!! So first thing I did today was cleaning up the repo and pushing the yesterdays changes. Then I went on to do the drawing of the stand that will hold the LED matrix, I’ve tried to even show the LED strips in there but FreeCAD couldn’t handle it, so I sketched it up in draw.IO. with a kinda like a block diagram. Wrote about the intended SW in the readme. And then I’ve created the vision board so anybody can get the idea about the project, which is going to get shipped as a demo The whole time I was thinking about how I’ll create a render in blender for it with cloud simulation, but it didn’t work yesterday. But I got inspiration from some YT video that mocked it up with photoshop. So I hopped into affinity and started designing after a tutorial which I couldn’t follow, so I’ve found an online texture export and inported it into affinity tweaked it and it worked. But then I need some kind of backgroud for it, so I took akemi from the WLED effects website and blurred it out behind the cloud layer. Yeah it didn’t look right. And ChatGPT halucinated completly different thing. But after a bit of tweaking I managed to make it work. And after all of that I have threw everything into the shipping baskets, wrote down the price. And going to ship soon …. Good luck"}, {"post_id": 13086, "ts": "2026-06-21T12:46:37Z", "hours": 2.2622, "text": "Today I had done the schematic. It’s going to be a pretty interesting concept as the wiring is wild different to other matricies. We need almost 120m of LED strips. And they are going to draw almost 2 000W. It’s going to be an electric kettle lol. Because of that I have added two power cables to power the thing, as 220V is better for this. *laughs in geman. I have started creating the schematic in DrawIO. First was the PSU along with the two heavy duty cables I’ve mentioned earlier. Then it’s going to WAGO connectors which will be our power distribution and then it’s going to be distributed to the LED power injection points. Next I did a block diagram in it for the LED matrix, but it wasn’t really clear how to connect it up so I’ve hopped into tinkercad and did a small scale schematic with all of the right features. Next up is: Doing drawings of the the LED strip placement and / adding the 2x4 supports as well as the PSUs Ask my brother if he can try to visualize it in blender Create instructions for building at outpost or at home lol"}, {"post_id": 12752, "ts": "2026-06-20T21:01:24Z", "hours": 3.6581, "text": "So after that last pivot I’m super happy how this project is turning out. I hope that other people loves it as much as I do. But firstly I wanted to move the repo as the original is getting cluttered and it’s a mess. so new repo it it. And it’s also getting a rebrand from generic MatrixShow it’s going to be called The Hack Club cloud, symbolizing the many great ideas of Hack Clubbers. Well this one isn’t going to be about me it’s about ya’lls creativity passion and perseverance. And this sounds so epic in my head! So after a bit of philosophy. I went to look for suitable LED strips they were either super expensive or didn’t meet my criteria. And after a while I was able to find them, neat! So everything else was based around them, like the rows spacing, read more about that in my repo. https://github.com/Tomas-Kuchta-FPV/The_Hack-Club_cloud/blob/main/readme.md#constraints Alright and then I done the 3D model for the matrix. Which turned out OK, but it’s looking too much technical, but I can make drawing for it that we’ll use when building. Peace out Thomas"}, {"post_id": 11833, "ts": "2026-06-19T08:30:07Z", "hours": 1.915, "text": "So I need to pivot as it’s going to be super expensive! It’s going to be like 300 bulbs, which is feasible but it needs to be a huge budget. It would be fun thought, as I was on planning to use American electrical material. BTW I love the flat cables! So at first I’ve pivoted to making a addressable LED Christmass string light matrix. So basically drill out thousand of holes and plop them in an interval of about 15cm, but that wouldn’t have the right WOW effect. So there was another pivot to cheaper LED strips, which is doable!!! So I’ve decided to make a 4x8ft cloud wall!! It’s going to be addresable and it will be driven by my custom WLED LED controller called TwinkleTron. I still need to CAD it and spec the PSU, but it’s going to be awesome!!!!!!!"}, {"post_id": 11183, "ts": "2026-06-18T09:12:38Z", "hours": 2.9239, "text": "So I’ve defined BOM, and made a sketch of the matrix. A halve a year ago I had a light exposition in my hometown which turned out very good. So I want to use the current tested setup, which are Smart sonoff lightbulbs. So I’ve made a BOM around it. And CADed it. But when in CAD I’ve noticed that it’s like 300 smart bulbs and it’s going to be super expensive. So after finding out that this route isn’t good I’m going for a WS2811 addressable lights."}]...
|
Title: The HackClub cloud by @Toma_Kuchta | Starda Title: The HackClub cloud by @Toma_Kuchta | Stardance
Devlogs:
So I’ve defined BOM, and made a sketch of the matrix. A halve a year ago I had a light exposition in my hometown which turned out very good. So I want to use the current tested setup, which are Smart sonoff lightbulbs. So I’ve made a BOM around it. And CADed it. But when in CAD I’ve noticed that it’s like 300 smart bulbs and it’s going to be super expensive. So after finding out that this route isn’t good I’m going for a WS2811 addressable lights.
So I need to pivot as it’s going to be super expensive! It’s going to be like 300 bulbs, which is feasible but it needs to be a huge budget. It would be fun thought, as I was on planning to use American electrical material. BTW I love the flat cables! So at first I’ve pivoted to making a addressable LED Christmass string light matrix. So basically drill out thousand of holes and plop them in an interval of about 15cm, but that wouldn’t have the right WOW effect. So there was another pivot to cheaper LED strips, which is doable!!! So I’ve decided to make a 4x8ft cloud wall!! It’s going to be addresable and it will be driven by my custom WLED LED controller called TwinkleTron. I still need to CAD it and spec the PSU, but it’s going to be awesome!!!!!!!
So after that last pivot I’m super happy how this project is turning out. I hope that other people loves it as much as I do. But firstly I wanted to move the repo as the original is getting cluttered and it’s a mess. so new repo it it. And it’s also getting a rebrand from generic MatrixShow it’s going to be called The Hack Club cloud, symbolizing the many great ideas of Hack Clubbers. Well this one isn’t going to be about me it’s about ya’lls creativity passion and perseverance. And this sounds so epic in my head! So after a bit of philosophy. I went to look for suitable LED strips they were either super expensive or didn’t meet my criteria. And after a while I was able to find them, neat! So everything else was based around them, like the rows spacing, read more about that in my repo. https://github.com/Tomas-Kuchta-FPV/The_Hack-Club_cloud/blob/main/readme.md#constraints Alright and then I done the 3D model for the matrix. Which turned out OK, but it’s looking too much technical, but I can make drawing for it that we’ll use when building. Peace out Thomas
Today I had done the schematic. It’s going to be a pretty interesting concept as the wiring is wild different to other matricies. We need almost 120m of LED strips. And they are going to draw almost 2 000W. It’s going to be an electric kettle lol. Because of that I have added two power cables to power the thing, as 220V is better for this. *laughs in geman. I have started creating the schematic in DrawIO. First was the PSU along with the two heavy duty cables I’ve mentioned earlier. Then it’s going to WAGO connectors which will be our power distribution and then it’s going to be distributed to the LED power injection points. Next I did a block diagram in it for the LED matrix, but it wasn’t really clear how to connect it up so I’ve hopped into tinkercad and did a small scale schematic with all of the right features. Next up is: Doing drawings of the the LED strip placement and / adding the 2x4 supports as well as the PSUs Ask my brother if he can try to visualize it in blender Create instructions for building at outpost or at home lol
Allright I’m almost finished!! So first thing I did today was cleaning up the repo and pushing the yesterdays changes. Then I went on to do the drawing of the stand that will hold the LED matrix, I’ve tried to even show the LED strips in there but FreeCAD couldn’t handle it, so I sketched it up in draw.IO. with a kinda like a block diagram. Wrote about the intended SW in the readme. And then I’ve created the vision board so anybody can get the idea about the project, which is going to get shipped as a demo The whole time I was thinking about how I’ll create a render in blender for it with cloud simulation, but it didn’t work yesterday. But I got inspiration from some YT video that mocked it up with photoshop. So I hopped into affinity and started designing after a tutorial which I couldn’t follow, so I’ve found an online texture export and inported it into affinity tweaked it and it worked. But then I need some kind of backgroud for it, so I took akemi from the WLED effects website and blurred it out behind the cloud layer. Yeah it didn’t look right. And ChatGPT halucinated completly different thing. But after a bit of tweaking I managed to make it work. And after all of that I have threw everything into the shipping baskets, wrote down the price. And going to ship soon …. Good luck
After shipping yesterday I had today started working on riping TwinkleTron out of my table, and overwriting it with the latest FW. Then I began configuring it. I have set up the LED strip channels as one can only do 800 LED’s reliably. It was split in the middle by 576 pixels. After I peeked into the matrix config set up the defined matrix size and it didn’t look right. Went to readme to spot the mistake ant it was because I’ve wrongly converted from mm to cm. OR so I thought. It was the whole calculation that was wrong. 🤦♂️ MATHS Boink I got an notification that my ship was rejected and needs changes. (No images in readme and no BOM) Back to the project, and after a few blank stares into the readme and also the CAD file I’ve managed to at least hopefully correctly calculate the needed LEDs. SO I had to redesign the power delivery section. Updated the repo for requested changes and shipped it back out. PS: I also managed to get the price down :yay
So after a bit of setup I had like 18hr traveling to the venue. The leg to Frankfurt was great but the flight to San Francisco was super long and I didn’t know what to do. But in the last two hours of flight I’ve remembered that I need to finish the animations for the LED matrix. ’*sad
Mys first task was finding a teamate in which I failed horibly as I wasn’t able fo find anyone. I’m normaly social but it was different here as I was speaking a different language, and just a lot of first times (USA, Solo flight, long haul flight, hackathon, new people, different culture) … yeah it was overwhelming. And did I mention that I was on a family and frinds gathering in the middle of novehwre! So my plan was to when I land go to lowes and bring back all the stuff needed with yaha, but by the time I’ve came from the airport I wouldn’t have enough time to make it in time for the opening ceremony. So yaha came there by himself, picked up and rode it in an uber - just in time nice!!!! Also my plan was to spray paint the OSB light blue at lowes but that didn’t happen so I’ve bugged staff for the whole evening if there is a place that we can paint it, I weren’t to a more disorganized even in my whole life! It was chaos on all fronts.
So this day was spent by asking people around if we can PAINT! I thought we can atlest do some things that are not really needed but there wasn’t much though. So the whole morning was spent asking if we can paint as it was promised to happen now, but everytime I was told off. So I’ve procrastinated instead with talking to people lol. After it we all went on a picnic and we got back by around 4 pm. Allright no more staling we have layed down the OBS boards and began gluing on the led strips which we have precut yeasterday. And while gluing on the strips I went to another round of asking around for a saw, but this time dhamari helped me soooo much!!! <3 So after yesterdays pain with a small metal saw I’ve managed to borrowed a great stanley saw from a framing shop nextdoor. Nice!! Aaaaaaaaaaahhhhhh so I’ve finally managed to cut down the wood. Oh also we don’t have a scredriver so we’ve made our own scrappy one.
Allright so after that mess we’ve locked in hard. While my temate was repairing her project (She did that for almost the whole hackathon, which is crazy). I began soldering and gluing on the LED strips. Then remembered that it would be great to screw in the screws (With the DIY shitty screwdriver), resumed work on the LED strips. Allright and now we have around two hours left. After everything was soldered I’ve turned it on and it didn’t work. First there were problems with WLED configuration and then with one segment that was dead. Soooo after a “quick hour fix” The LED matrix was working. But we still have just a hour left to ship it. So I’ve quickly done some plywood gymnastic with spare people and put the whole contraption on chairs screwed in the legs and stood it up. Oh yeah it was working!!!!! OH no my teamate was still working on her project, so we needed to pivot. I had prepaired the repo for shipping while she sprayed adhesive on the board and glued the pillow fluff on. It was a messs. But we managed to do it in time lol. After that we had a short visit from our favorite creators, packed everything and went partying! They even had a B-day cake for me how lovely! Thank y’all! Here is a little video we’ve filmed. PS: I didn’t take a photo of the final build as I was so bussy!!!!
So we’ve unpaked everything from the ClayHaul and asseced the damage on the led wall. And oh boy all the pillow fill fell from it. So after more figuring out from where to get spray adhereve it turned out that it was in a repair booth, how convinient. Also like a lot of solder connections were tore up from the transport so I’ve repaired those, glued on the pillow fill and it worked great!! Oh yeah and then Gwendal figured out how to play games on the matrix with wled!!!!
Oh neat extra forgotten hours. It’s probably from when I was doing something and didn’t devlog it. sorry for this one. BC IDK what I was doing and don’t recal anything.
Ships:
So this was my first project I have ever done in a real hackathon. I was in a team with Olivia and she had a beautiful traditional Chinese string instrument and we wanted to merge them both into one beautiful and colorful art piece. And we weren’t able to do that in the end sadly. :( lie it would have look great! ciya...
|
1793051417.51055
|
1793137817.51055
|
|
29917
|
icanhelp by @TheShovel | Stardance
|
TheShovel
|
1
|
54.0
|
1020
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T09:04:44Z", "hours": 54.0, "multiplier": 19.73, "payout": 1020, "blessing": "neutral", "text": "I decided to make an AI chatbot, that runs locally, without burning your computer. It is designed around using a 500mb, 0.8B model and to work even on weak hardware. Compatibility and actually giving you a result eventually was the priority, not speed! I also made a YouTube video about it if you wanna check that out :3 https://www.youtube.com/watch?v=GhmLUcdesqw", "repo": "https://github.com/TheShovel/icanhelp", "demo": "https://theshovel.rocks/icanhelp/"}]...
|
[{"post_id": 32596, "ts": "202 [{"post_id": 32596, "ts": "2026-07-21T21:27:35Z", "hours": 0.2581, "text": "just a small patch related to memory usage, nothing more :) though, the video is ready! im just waiting for it to get approved for the hackclub video thing and then im gonna post it! Heres the thumbnail"}, {"post_id": 31199, "ts": "2026-07-19T12:23:08Z", "hours": 5.2222, "text": "i think i am finally done! I have optimized, refined stuff and tested a bunch of random things on the lowest model possible, that still has some kind of a intelligence. Nothing really too interesting to talk about, but i DID get it working on my 7gb of ram old laptop! This is the first local chat app that actually works on that thing, so thats pretty damn cool me thinks. Working on a youtube video right now, im proud of the project and i want people to find it and contribute to it. In the meantime, until i finish that video, here is icanhelp writing a document about the importance of vitamin C!"}, {"post_id": 29946, "ts": "2026-07-17T04:07:10Z", "hours": 9.3467, "text": "finally a devlog where not everything was a colossal failure! As i said in my previous dev log, whats left to do is tools and refinement, and thats exactly what i did. The search tool has been updated to let the llm browse websites and their contents, which improved the quality a lot. also, i have implemented an addon system that lets you install external smaller llms to do tasks that are then outputed to the bigger llm. llmception. decided to get rid of the rag since with the improved web search its no longer needed. Besides this, all i did was little tweaks, refinement refinement testing refinement. As one smart video once said: “solution problem, problem solution problem.”"}, {"post_id": 28767, "ts": "2026-07-15T07:30:06Z", "hours": 12.7231, "text": "well well well. This project has been the most frustrating back and forth of my life. It felt like 3 steps forward, 2.5 steps back, CONSTANTLY. Well, after hours and hours of testing, refinement and research, i have found the solution… I have decided to change my approach in how i handle responses. Now, instead of having 1 model that does everything, we have 2 super tiny ones. The flow is kinda like: user types prompt -> small llm analyzes prompt -> small llm returns the instructions for how to solve it using the tools it has -> if it decides that the complexity is too high, then it lets the larger llm continue -> system does knowladgebase + web search -> the chosen llm presents the data to you. This is REALLY fast as you can see, and quite reliable as well. Right now the answer quality is not exceptional, but thats just about refinement and gradual improvements. So hopefully in the next devlog i have some really cool stuff to show you, like graphs, visual explanations, letting the user choose a website to summarize and so on. Along side working on the app, i worked on the website for it! Its still a work in progress but im proud of how it turned out :D https://theshovel.rocks/icanhelp/ ok well, anyway, thats it for now. see you next time in “im going crazy because lobotomy ai doesnt want to follow my instructions”"}, {"post_id": 27563, "ts": "2026-07-13T08:01:26Z", "hours": 8.0653, "text": "well, today was a disaster. 8 ours that didnt really account for much to be honest :( I have tried to move from qwen to minicpm 1b, a model that ALLEGEDLY is a lot better at using tools to gather data rather than using its internal baked in weights. Well, apparently thats not true. I have spent hours making the tools, adapting the outputs and everything for that model, just to then realized that “wow people are wrong and im so tired of ai bros hyping stuff up for nothing!”. So, in the end, i reverted to the qwen models, since they are decent enough for this. Even the 0.8b model gives better results than minicpm… Well, at least thats not all i did. After reverting to a older commit, i have re implemented all the improvements that dont have to do with minicpm. You can now see the sources of where the llm fetched data from under the response bubble, and you can click them to open up the pages and double check the information and stuff. Also, i have worked on large file handling. Previously, for large files it would try to read the entire thing at once. That is insanely inefficient for large files, so i have added a new tool that lets it read from line x to line y. Like that it can only retrieve relevant stuff and not flood its context. I have ALSO worked on compatibility. Now you can change between cpu and gpu inference. If you have under 6gb of vram, the gpu option is grayed out. You might say “thats a little overkill”, but you have to take into account that context also eats up vram, and quite a lot as well. So now you can use the cpu, which uses your system ram, to reliably have long conversations. Sadly in the demo it ended up crashing the app and freezing the process with a node api error, but after i killed the process and reopened the app, the cpu inference worked fine. Thats a small oversight i didnt take into account where llamacpp is still doing stuff while im trying to kill the node process. Well, thats it! See you next time in “trying to make lobotomy ai useful so people stop using giant datacenters to ask about how long to boil and egg for”"}, {"post_id": 26597, "ts": "2026-07-11T14:51:17Z", "hours": 6.4203, "text": "well, i am going to sleep for a few days. The last 24 hours have been tough. First of all, i started getting harassed for making an ai project in my friend groups, which just broke my heart. I got actively attacked and called names for just wanting to make something cool. The point of this project is to make a completely local, light and fast ai assistant for your pc. I dont like the big corporations that do harm economically and environmentally. That is exactly why im making this. With that out of the way, i have spent way longer than 6 hours and a half since the last devlog, bug a lot of that time was not coding, it was data stuff. I have started to build a knowledge base by asking local larger ai that run slower, to write information and documentation for different topics (linux, programming, science, health etc). Right now i have 10 categories with a total of 463 files. Then, i run an embedding model to turn those into searchable vectors that the ai can use during conversation. In the video bellow, i asked it how bash commands work in linux, and it found all the knowladge for that, and started telling me about it. Normally, the quality of the response is pretty short, vague and not very precise, since the model is so small, but now, it actually gives some usable output. I have also worked a lot on making this as easy to install as possible. I have made a install script that covers all dependencies you need, registers the app on your system, and also lets you choose what knowledge categories you want to be included in the embedding process, which also happens locally during install. Yes that means all that knowledge if free and open source in the repository. If you want, you could even make your own categories, or improve existing ones! To make this easier to use, i have also worked on the UI. Now theres a built in light and dark mode that you can use, along side whatever themes you ask the assistant to make for you. You can also now open all of the apps data folders. You can change whatever you want in there, and even customize your buddy! Would be cool to see some user made designs with like miku or something. That would be so cool :3 Sadly, in the process, i also broked the vision model stuff and i just realized that when i recorded the video for this devlog. I am too tired after doing data training for an entire day to debug and fix that right now. Also pretty demotivated after the stuff i had to endure lately for making projects based on ai. I want to remind you that most of this project is made by me, and like my other project for stardance, Irongingot, i will make a graph with all of the files that were touched by ai, how many lines it wrote and what % is ai in the readme of the repository, using my opencode history on this project. I am a human being making stuff for human beings. Anyway, pretty grim devlog i know. Hopefully, the next one will be happier and i can show some more cool stuff i have planned, like real time interaction with your desktop and select text and ask and so on. Thank you to everyone who has been kind to me on here <3"}, {"post_id": 25787, "ts": "2026-07-10T07:37:39Z", "hours": 5.8194, "text": "well well well… turns out cloud AIs are expensive and dont work offline. Also not very accessible for everyone to use!!! So, i have decided to make all of this run LOCALLY!!! Thats right, instead of making you put in an api key to whatever provider you wanna use, you instead get to choose from a list of qwen 3.5 models. It auto detects your hardware, and displays all of the models that work on your system. Now, obviously, this is less high quality than the cloud models. In the previous devlogs i used deepseek v4 flash from opencode, and it was way more competent. Here, i used the 2B version of qwen 3.5. With that said, even the 0.8B model is still fairly capable, considering that deepseek v4 flash is over 200b parameters. I worked a lot on optimizing this. I added chat history compression, so instead of it remembering everything in the conversation precisely, it makes a summary within a token budget instead, to keep system requirements low even for the bigger models. More context tokens = more ram, and who the hell has ram nowadays, am i right gamers. Along with that i made a bunch of small tool and ui improvements. Still a work in progress, but at least the UI is not vibe coded slop for the most part anymore. Next up im going to try and work on a theory that i have. What if i give the small 0.8B model, access to a dataset, and a search engine… Could i possibly make this super tiny model really smart? I dont know. Saw a youtube video about it but it was just a theory, not applied practically. But since im here might as well try it out. Oh also i renamed the little guy to Icanhelpy because i think its very cute"}, {"post_id": 24810, "ts": "2026-07-08T16:43:53Z", "hours": 4.9122, "text": "I got a lot done. Added OCR with tesseract and then i realized it sucked so i switched to BLIP. Runs in a child process so it doesnt freeze the app. The buddy icon animates now based on whats happening, pulses tilts shakes spins depending on state. Also i drew some nice little assets for it :3 Moved the effort dropdown and model selector to the top bar. Settings has sub menus, theme panel lets you browse saved themes and apply or delete them. The AI can change css now through a set_theme tool. Colors gradients images whatever. It can save named themes and they persist across restarts in the encrypted config. Had to consolidate the theme tools cuz the llm request got too big. Screenshots took forever. desktopCapturer asked for permission, imagemagick import has broken syntax, mss gave black screens on wayland, grim doesnt work on kde. Finally spectacle works. Falls back through a chain of tools and tries to auto install imagemagick with a sudo popup if nothing is found. The attach button shows a file and screenshot popup, hides after picking, comes back when you send or remove. Attachment label is a clickable pill that opens files. Fixed the llm re analyzing already attached files. Fixed bubble overflow on long lines. Added chat history, cancel stream, sudo password popup, markdown, web search, file tools, right click menu, window position persistence, burger menu navigation blah blah blah this is getting soooo long bro i dont wanna type no more and a readme. Still need to add proper security beyond the sudo prompt and encrypted config. Gonna work on that next maybe, but thats pretty boring stuff so idk… also sorry for the video quality i just realized my settings were wrong right as i uploaded this. woops"}, {"post_id": 20869, "ts": "2026-07-02T16:18:14Z", "hours": 1.6497, "text": "I have started work on this thing! So far, I have implemented some placeholder ui, a way for you to register your LLM provider, cloud or local, and some basic tools! Copy pasted a lot of code from some of my other projects, so this didnt take too long to do. The thing that took me the longest was to find a method to detect when a console command that the llm runs would return a sudo prompt, so i can prompt the user through the UI to enter their password. So far, thats also the only security thing i have in place. Will work on more of that. The UI is very ugly and clunky right now because its just some css i vibe coded. Trust me i know its ugly ill work on making it better myself once i get everything backend related done."}]...
|
Title: icanhelp by @TheShovel | Stardance
Devlogs Title: icanhelp by @TheShovel | Stardance
Devlogs:
I have started work on this thing! So far, I have implemented some placeholder ui, a way for you to register your LLM provider, cloud or local, and some basic tools! Copy pasted a lot of code from some of my other projects, so this didnt take too long to do. The thing that took me the longest was to find a method to detect when a console command that the llm runs would return a sudo prompt, so i can prompt the user through the UI to enter their password. So far, thats also the only security thing i have in place. Will work on more of that. The UI is very ugly and clunky right now because its just some css i vibe coded. Trust me i know its ugly ill work on making it better myself once i get everything backend related done.
I got a lot done. Added OCR with tesseract and then i realized it sucked so i switched to BLIP. Runs in a child process so it doesnt freeze the app. The buddy icon animates now based on whats happening, pulses tilts shakes spins depending on state. Also i drew some nice little assets for it :3 Moved the effort dropdown and model selector to the top bar. Settings has sub menus, theme panel lets you browse saved themes and apply or delete them. The AI can change css now through a set_theme tool. Colors gradients images whatever. It can save named themes and they persist across restarts in the encrypted config. Had to consolidate the theme tools cuz the llm request got too big. Screenshots took forever. desktopCapturer asked for permission, imagemagick import has broken syntax, mss gave black screens on wayland, grim doesnt work on kde. Finally spectacle works. Falls back through a chain of tools and tries to auto install imagemagick with a sudo popup if nothing is found. The attach button shows a file and screenshot popup, hides after picking, comes back when you send or remove. Attachment label is a clickable pill that opens files. Fixed the llm re analyzing already attached files. Fixed bubble overflow on long lines. Added chat history, cancel stream, sudo password popup, markdown, web search, file tools, right click menu, window position persistence, burger menu navigation blah blah blah this is getting soooo long bro i dont wanna type no more and a readme. Still need to add proper security beyond the sudo prompt and encrypted config. Gonna work on that next maybe, but thats pretty boring stuff so idk… also sorry for the video quality i just realized my settings were wrong right as i uploaded this. woops
well well well… turns out cloud AIs are expensive and dont work offline. Also not very accessible for everyone to use!!! So, i have decided to make all of this run LOCALLY!!! Thats right, instead of making you put in an api key to whatever provider you wanna use, you instead get to choose from a list of qwen 3.5 models. It auto detects your hardware, and displays all of the models that work on your system. Now, obviously, this is less high quality than the cloud models. In the previous devlogs i used deepseek v4 flash from opencode, and it was way more competent. Here, i used the 2B version of qwen 3.5. With that said, even the 0.8B model is still fairly capable, considering that deepseek v4 flash is over 200b parameters. I worked a lot on optimizing this. I added chat history compression, so instead of it remembering everything in the conversation precisely, it makes a summary within a token budget instead, to keep system requirements low even for the bigger models. More context tokens = more ram, and who the hell has ram nowadays, am i right gamers. Along with that i made a bunch of small tool and ui improvements. Still a work in progress, but at least the UI is not vibe coded slop for the most part anymore. Next up im going to try and work on a theory that i have. What if i give the small 0.8B model, access to a dataset, and a search engine… Could i possibly make this super tiny model really smart? I dont know. Saw a youtube video about it but it was just a theory, not applied practically. But since im here might as well try it out. Oh also i renamed the little guy to Icanhelpy because i think its very cute
well, i am going to sleep for a few days. The last 24 hours have been tough. First of all, i started getting harassed for making an ai project in my friend groups, which just broke my heart. I got actively attacked and called names for just wanting to make something cool. The point of this project is to make a completely local, light and fast ai assistant for your pc. I dont like the big corporations that do harm economically and environmentally. That is exactly why im making this. With that out of the way, i have spent way longer than 6 hours and a half since the last devlog, bug a lot of that time was not coding, it was data stuff. I have started to build a knowledge base by asking local larger ai that run slower, to write information and documentation for different topics (linux, programming, science, health etc). Right now i have 10 categories with a total of 463 files. Then, i run an embedding model to turn those into searchable vectors that the ai can use during conversation. In the video bellow, i asked it how bash commands work in linux, and it found all the knowladge for that, and started telling me about it. Normally, the quality of the response is pretty short, vague and not very precise, since the model is so small, but now, it actually gives some usable output. I have also worked a lot on making this as easy to install as possible. I have made a install script that covers all dependencies you need, registers the app on your system, and also lets you choose what knowledge categories you want to be included in the embedding process, which also happens locally during install. Yes that means all that knowledge if free and open source in the repository. If you want, you could even make your own categories, or improve existing ones! To make this easier to use, i have also worked on the UI. Now theres a built in light and dark mode that you can use, along side whatever themes you ask the assistant to make for you. You can also now open all of the apps data folders. You can change whatever you want in there, and even customize your buddy! Would be cool to see some user made designs with like miku or something. That would be so cool :3 Sadly, in the process, i also broked the vision model stuff and i just realized that when i recorded the video for this devlog. I am too tired after doing data training for an entire day to debug and fix that right now. Also pretty demotivated after the stuff i had to endure lately for making projects based on ai. I want to remind you that most of this project is made by me, and like my other project for stardance, Irongingot, i will make a graph with all of the files that were touched by ai, how many lines it wrote and what % is ai in the readme of the repository, using my opencode history on this project. I am a human being making stuff for human beings. Anyway, pretty grim devlog i know. Hopefully, the next one will be happier and i can show some more cool stuff i have planned, like real time interaction with your desktop and select text and ask and so on. Thank you to everyone who has been kind to me on here <3
well, today was a disaster. 8 ours that didnt really account for much to be honest :( I have tried to move from qwen to minicpm 1b, a model that ALLEGEDLY is a lot better at using tools to gather data rather than using its internal baked in weights. Well, apparently thats not true. I have spent hours making the tools, adapting the outputs and everything for that model, just to then realized that “wow people are wrong and im so tired of ai bros hyping stuff up for nothing!”. So, in the end, i reverted to the qwen models, since they are decent enough for this. Even the 0.8b model gives better results than minicpm… Well, at least thats not all i did. After reverting to a older commit, i have re implemented all the improvements that dont have to do with minicpm. You can now see the sources of where the llm fetched data from under the response bubble, and you can click them to open up the pages and double check the information and stuff. Also, i have worked on large file handling. Previously, for large files it would try to read the entire thing at once. That is insanely inefficient for large files, so i have added a new tool that lets it read from line x to line y. Like that it can only retrieve relevant stuff and not flood its context. I have ALSO worked on compatibility. Now you can change between cpu and gpu inference. If you have under 6gb of vram, the gpu option is grayed out. You might say “thats a little overkill”, but you have to take into account that context also eats up vram, and quite a lot as well. So now you can use the cpu, which uses your system ram, to reliably have long conversations. Sadly in the demo it ended up crashing the app and freezing the process with a node api error, but after i killed the process and reopened the app, the cpu inference worked fine. Thats a small oversight i didnt take into account where llamacpp is still doing stuff while im trying to kill the node process. Well, thats it! See you next time in “trying to make lobotomy ai useful so people stop using giant datacenters to ask about how long to boil and egg for”
well well well. This project has been the most frustrating back and forth of my life. It felt like 3 steps forward, 2.5 steps back, CONSTANTLY. Well, after hours and hours of testing, refinement and research, i have found the solution… I have decided to change my approach in how i handle responses. Now, instead of having 1 model that does everything, we have 2 super tiny ones. The flow is kinda like: user types prompt -> small llm analyzes prompt -> small llm returns the instructions for how to solve it using the tools it has -> if it decides that the complexity is too high, then it lets the larger llm continue -> system does knowladgebase + web search -> the chosen llm presents the data to you. This is REALLY fast as you can see, and quite reliable as well. Right now the answer quality is not exceptional, but thats just about refinement and gradual improvements. So hopefully in the next devlog i have some really cool stuff to show you, like graphs, visual explanations, letting the user choose a website to summarize and so on. Along side working on the app, i worked on the website for it! Its still a work in progress but im proud of how it turned out :D https://theshovel.rocks/icanhelp/ ok well, anyway, thats it for now. see you next time in “im going crazy because lobotomy ai doesnt want to follow my instructions”
finally a devlog where not everything was a colossal failure! As i said in my previous dev log, whats left to do is tools and refinement, and thats exactly what i did. The search tool has been updated to let the llm browse websites and their contents, which improved the quality a lot. also, i have implemented an addon system that lets you install external smaller llms to do tasks that are then outputed to the bigger llm. llmception. decided to get rid of the rag since with the improved web search its no longer needed. Besides this, all i did was little tweaks, refinement refinement testing refinement. As one smart video once said: “solution problem, problem solution problem.”
i think i am finally done! I have optimized, refined stuff and tested a bunch of random things on the lowest model possible, that still has some kind of a intelligence. Nothing really too interesting to talk about, but i DID get it working on my 7gb of ram old laptop! This is the first local chat app that actually works on that thing, so thats pretty damn cool me thinks. Working on a youtube video right now, im proud of the project and i want people to find it and contribute to it. In the meantime, until i finish that video, here is icanhelp writing a document about the importance of vitamin C!
just a small patch related to memory usage, nothing more :) though, the video is ready! im just waiting for it to get approved for the hackclub video thing and then im gonna post it! Heres the thumbnail
Ships:
I decided to make an AI chatbot, that runs locally, without burning your computer. It is designed around using a 500mb, 0.8B model and to work even on weak hardware. Compatibility and actually giving you a result eventually was the priority, not speed! I also made a YouTube video about it if you wanna check that out :3 https://www.youtube.com/watch?v=GhmLUcdesqw...
|
1793083659.796109
|
1793170059.796109
|
|
34568
|
Makefast AI by @issu | Stardance
|
issu
|
1
|
54.0
|
44
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-13T18:44:39Z", "hours": 54.0, "multiplier": 4.41, "payout": 44, "blessing": "neutral", "text": "In this session I was working on my project Makefast AI, which is a small AI‑powered CLI tool for developers. It runs in the terminal and helps with early project stuff like generating ideas, trying names, writing landing page copy, suggesting tech stacks, scaffolding projects, brainstorming, pitch outlines, tweets, and README drafts. I wanted something that is useful before the “real build” starts. What I did in this session During this time I mainly focused on making the CLI commands work properly and feel usable: I set up and tested commands like makefast idea, makefast copy, makefast ui, makefast stack, makefast scaffold, makefast pitch, makefast tweet, makefast name, makefast validate, makefast readme, makefast history, and makefast config. Each command is small on purpose, I didn’t want one big “do everything” command. I connected the CLI to the Groq AI API, so it can send prompts from Node.js and show the AI responses directly in the terminal for ideas, copy, stack suggestions, scaffolding, etc. This was new for me so I had to try and fix a few things. I added local storage using a ~/.makefast folder where history, config, and logs are saved as JSON files, so the tool remembers past runs and feels more persistent. I tested different ways to run the tool: directly with node index.js, using npm scripts (npm run dev, npm start), and using npm link so I can type makefast idea like a normal command. I also prepared it for global install (npm install -g makefast-ai). I updated the README to explain setup (Node, npm, Groq API key, .env file), how to run commands, what scaffold templates exist (like nextjs, SaaS, api, mobile, cli, landing), and some common issues and fixes. Problems I ran into…….. I hit a few confusing issues: API key / .env problems: When the Groq API key was missing or .env was not loaded, most commands failed immediately. I had to figure out why process.env.GROQ_API_KEY was undefined and learn that the way you load env variables is different in CommonJS vs ESM. CLI command not working globally: Sometimes after installing, typing makefast did nothing. I learned that npm link, checking the bin field in package.json, and restarting the terminal can fix path issues for global CLI commands. Name confusion: When the GitHub repo name and npm package/CLI name were not consistent, it was very confusing. I had to clean up naming and mention this in the README. JSON errors: If the history/config JSON file was missing or broken, simple JSON.parse could crash the app. I had to add checks and default values so the CLI doesn’t explode when there is bad data. What I learned Before this project I only knew basic Node scripts. With Makefast AI and this session, I learned: 1.how to create CLI commands and run them like makefast idea in the terminal 2.how to connect a Node CLI to an AI API and send prompts from the terminal 3.how to use .env to keep my API key outside of the code and load it safely 4.how to read and write JSON files to store history and config locally 5.how to split the project into smaller files instead of one big file 6.how to test a CLI using node index.js, npm scripts, and npm link how to design prompts for different use cases ideas, copy, stack, scaffold, pitch, tweets so the AI output is actually useful for builders The code might not be perfect because I am still learning, but I am happy that I built my first real CLI tool that mixes AI with developer workflow and that I can actually use myself when starting new ideas.", "repo": "https://github.com/avision488/makefast-ai", "demo": "https://www.npmjs.com/package/makefast-ai"}]...
|
[{"post_id": 27838, "ts": "202 [{"post_id": 27838, "ts": "2026-07-13T18:37:23Z", "hours": 54.2069, "text": "In this session I was working on my project Makefast AI, which is a small AI‑powered CLI tool for developers. It runs in the terminal and helps with early project stuff like generating ideas, trying names, writing landing page copy, suggesting tech stacks, scaffolding projects, brainstorming, pitch outlines, tweets, and README drafts. I wanted something that is useful before the “real build” starts. What I did in this session During this time I mainly focused on making the CLI commands work properly and feel usable: I set up and tested commands like makefast idea, makefast copy, makefast ui, makefast stack, makefast scaffold, makefast pitch, makefast tweet, makefast name, makefast validate, makefast readme, makefast history, and makefast config. Each command is small on purpose, I didn’t want one big “do everything” command. I connected the CLI to the Groq AI API, so it can send prompts from Node.js and show the AI responses directly in the terminal for ideas, copy, stack suggestions, scaffolding, etc. This was new for me so I had to try and fix a few things. I added local storage using a ~/.makefast folder where history, config, and logs are saved as JSON files, so the tool remembers past runs and feels more persistent. I tested different ways to run the tool: directly with node index.js, using npm scripts (npm run dev, npm start), and using npm link so I can type makefast idea like a normal command. I also prepared it for global install (npm install -g makefast-ai). I updated the README to explain setup (Node, npm, Groq API key, .env file), how to run commands, what scaffold templates exist (like nextjs, SaaS, api, mobile, cli, landing), and some common issues and fixes. Problems I ran into…….. I hit a few confusing issues: API key / .env problems: When the Groq API key was missing or .env was not loaded, most commands failed immediately. I had to figure out why process.env.GROQ_API_KEY was undefined and learn that the way you load env variables is different in CommonJS vs ESM. CLI command not working globally: Sometimes after installing, typing makefast did nothing. I learned that npm link, checking the bin field in package.json, and restarting the terminal can fix path issues for global CLI commands. Name confusion: When the GitHub repo name and npm package/CLI name were not consistent, it was very confusing. I had to clean up naming and mention this in the README. JSON errors: If the history/config JSON file was missing or broken, simple JSON.parse could crash the app. I had to add checks and default values so the CLI doesn’t explode when there is bad data. What I learned Before this project I only knew basic Node scripts. With Makefast AI and this session, I learned: 1.how to create CLI commands and run them like makefast idea in the terminal 2.how to connect a Node CLI to an AI API and send prompts from the terminal 3.how to use .env to keep my API key outside of the code and load it safely 4.how to read and write JSON files to store history and config locally 5.how to split the project into smaller files instead of one big file 6.how to test a CLI using node index.js, npm scripts, and npm link how to design prompts for different use cases ideas, copy, stack, scaffold, pitch, tweets so the AI output is actually useful for builders The code might not be perfect because I am still learning, but I am happy that I built my first real CLI tool that mixes AI with developer workflow and that I can actually use myself when starting new ideas."}]...
|
Title: Makefast AI by @issu | Stardance
Devlogs:
Title: Makefast AI by @issu | Stardance
Devlogs:
In this session I was working on my project Makefast AI, which is a small AI‑powered CLI tool for developers. It runs in the terminal and helps with early project stuff like generating ideas, trying names, writing landing page copy, suggesting tech stacks, scaffolding projects, brainstorming, pitch outlines, tweets, and README drafts. I wanted something that is useful before the “real build” starts. What I did in this session During this time I mainly focused on making the CLI commands work properly and feel usable: I set up and tested commands like makefast idea, makefast copy, makefast ui, makefast stack, makefast scaffold, makefast pitch, makefast tweet, makefast name, makefast validate, makefast readme, makefast history, and makefast config. Each command is small on purpose, I didn’t want one big “do everything” command. I connected the CLI to the Groq AI API, so it can send prompts from Node.js and show the AI responses directly in the terminal for ideas, copy, stack suggestions, scaffolding, etc. This was new for me so I had to try and fix a few things. I added local storage using a ~/.makefast folder where history, config, and logs are saved as JSON files, so the tool remembers past runs and feels more persistent. I tested different ways to run the tool: directly with node index.js, using npm scripts (npm run dev, npm start), and using npm link so I can type makefast idea like a normal command. I also prepared it for global install (npm install -g makefast-ai). I updated the README to explain setup (Node, npm, Groq API key, .env file), how to run commands, what scaffold templates exist (like nextjs, SaaS, api, mobile, cli, landing), and some common issues and fixes. Problems I ran into…….. I hit a few confusing issues: API key / .env problems: When the Groq API key was missing or .env was not loaded, most commands failed immediately. I had to figure out why process.env.GROQ_API_KEY was undefined and learn that the way you load env variables is different in CommonJS vs ESM. CLI command not working globally: Sometimes after installing, typing makefast did nothing. I learned that npm link, checking the bin field in package.json, and restarting the terminal can fix path issues for global CLI commands. Name confusion: When the GitHub repo name and npm package/CLI name were not consistent, it was very confusing. I had to clean up naming and mention this in the README. JSON errors: If the history/config JSON file was missing or broken, simple JSON.parse could crash the app. I had to add checks and default values so the CLI doesn’t explode when there is bad data. What I learned Before this project I only knew basic Node scripts. With Makefast AI and this session, I learned: 1.how to create CLI commands and run them like makefast idea in the terminal 2.how to connect a Node CLI to an AI API and send prompts from the terminal 3.how to use .env to keep my API key outside of the code and load it safely 4.how to read and write JSON files to store history and config locally 5.how to split the project into smaller files instead of one big file 6.how to test a CLI using node index.js, npm scripts, and npm link how to design prompts for different use cases ideas, copy, stack, scaffold, pitch, tweets so the AI output is actually useful for builders The code might not be perfect because I am still learning, but I am happy that I built my first real CLI tool that mixes AI with developer workflow and that I can actually use myself when starting new ideas.
Ships:
In this session I was working on my project Makefast AI, which is a small AI‑powered CLI tool for developers. It runs in the terminal and helps with early project stuff like generating ideas, trying names, writing landing page copy, suggesting tech stacks, scaffolding projects, brainstorming, pitch outlines, tweets, and README drafts. I wanted something that is useful before the “real build” starts. What I did in this session During this time I mainly focused on making the CLI commands work properly and feel usable: I set up and tested commands like makefast idea, makefast copy, makefast ui, makefast stack, makefast scaffold, makefast pitch, makefast tweet, makefast name, makefast validate, makefast readme, makefast history, and makefast config. Each command is small on purpose, I didn’t want one big “do everything” command. I connected the CLI to the Groq AI API, so it can send prompts from Node.js and show the AI responses directly in the terminal for ideas, copy, stack suggestions, scaffolding, etc. This was new for me so I had to try and fix a few things. I added local storage using a ~/.makefast folder where history, config, and logs are saved as JSON files, so the tool remembers past runs and feels more persistent. I tested different ways to run the tool: directly with node index.js, using npm scripts (npm run dev, npm start), and using npm link so I can type makefast idea like a normal command. I also prepared it for global install (npm install -g makefast-ai). I updated the README to explain setup (Node, npm, Groq API key, .env file), how to run commands, what scaffold templates exist (like nextjs, SaaS, api, mobile, cli, landing), and some common issues and fixes. Problems I ran into…….. I hit a few confusing issues: API key / .env problems: When the Groq API key was missing or .env was not loaded, most commands failed immediately. I had to figure out why process.env.GROQ_API_KEY was undefined and learn that the way you load env variables is different in CommonJS vs ESM. CLI command not working globally: Sometimes after installing, typing makefast did nothing. I learned that npm link, checking the bin field in package.json, and restarting the terminal can fix path issues for global CLI commands. Name confusion: When the GitHub repo name and npm package/CLI name were not consistent, it was very confusing. I had to clean up naming and mention this in the README. JSON errors: If the history/config JSON file was missing or broken, simple JSON.parse could crash the app. I had to add checks and default values so the CLI doesn’t explode when there is bad data. What I learned Before this project I only knew basic Node scripts. With Makefast AI and this session, I learned: 1.how to create CLI commands and run them like makefast idea in the terminal 2.how to connect a Node CLI to an AI API and send prompts from the terminal 3.how to use .env to keep my API key outside of the code and load it safely 4.how to read and write JSON files to store history and config locally 5.how to split the project into smaller files instead of one big file 6.how to test a CLI using node index.js, npm scripts, and npm link how to design prompts for different use cases ideas, copy, stack, scaffold, pitch, tweets so the AI output is actually useful for builders The code might not be perfect because I am still learning, but I am happy that I built my first real CLI tool that mixes AI with developer workflow and that I can actually use myself when starting new ideas....
|
1792878551.6020942
|
1793742551.6020942
|
|
46223
|
MALLOW - REV2 by @mallow_dev | Stardance
|
mallow_dev
|
1
|
54.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T22:42:11Z", "hours": 54.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "hello everyone! it’s finally time to ship! i made a handheld gaming device inspired by Nintendo’s Game Boy that runs off of custom cartridges made by YOU! my goals were to make it affordable, run custom games, and learn a lot in the process, and i’d say i met all of them! the most challenging part of this project was definitely the programming, though i learned a lot in the process of doing so: it’s important to read documentation, even though it’s boring. i dont care whether it’s hardware or software, you gotta do it. SPI lines are sick! it’s just a bunch of timing with 1s and 0s. what ground planes are, as well as stitching vias. advanced C syntax (did you know structs can hold functions? neither did i)", "repo": "https://github.com/twentyfivefishinthetoilet/mallow", "demo": ""}]...
|
[{"post_id": 80781, "ts": "202 [{"post_id": 80781, "ts": "2026-10-18T19:34:11Z", "hours": 5.7589, "text": "final update before shipping mallow has finally been assembled and tested, and everything i programmed it to do is working fine. it can run different cartridges, all the buttons work fine, and the POWER PAK on the back works… decently. look, it’s not the prettiest, but it gets the job done. im gonna upload everything to github shortly, throw together a demonstration video, and then i should be ready to ship!"}, {"post_id": 80025, "ts": "2026-10-16T00:26:26Z", "hours": 5.5167, "text": "chassis for mallow + POWER PAK (power supply) the chassis took a bit more than the 5:30 i logged, but i would rather tank some hours than keep turning on lapse every few runs to the 3d printer. back to the model: all of these parts can be disassembled: the controller, the motherboard, and game cartridge. the POWER PAK snaps onto the back. (chose the name POWER PAK because it sounds like something out of the 80s) all i need are the electronics (that should ship soon ) then i can ship"}, {"post_id": 77975, "ts": "2026-10-09T02:46:11Z", "hours": 4.7514, "text": "revision 2.3 update well, i mean, it works! the video shows it running a game cartridge, the second image shows it recognizing that there’s no cartridge in the slot (i threw that screen together in krita in under a minute). seems like everything is working great until you look at the mess of tape and jumpers on the back. for some reason, the screen wasnt receiving power, and to this day, i still dont know why. the only way i was able to get it to work was by soldering a wire from the voltage regulator output to the screen’s LED_A (anode) pin and the general power pin. in the new, and TRULY final circuit board, i tried to make thicker wires. who knows, maybe it was a manufacturing issue, maybe it was some math i dont understand. whatever it was, i hope it works. if it doesnt, i added bare pads for be to easily connect a jumper wire again. i also added an fpc slot for the touch controls cable too. in the meantime, im going to finish up the programming and prototype a basic game for it in raylib. thanks for reading"}, {"post_id": 64568, "ts": "2026-09-09T02:29:57Z", "hours": 1.2956, "text": "while i wait for my circuit boards, im stuck programming and designing the shell for mallow. this is gonna be a short update because it’s not much of an update at all, rather a todo list. the first screenshot: my todo list the x means it’s done already, the - means it’s halfway done, and nothing at all means that i have yet to start that. in short, i have to complete some draw functions, lua(?), flash memory, and the sd card (all in the respective order of easy to hard ) the second screenshot: ifdefs i got inspiration from the TFT_eSPI UserSetup.h file where you uncomment the settings you want. in this case, im just gonna swap back and forth. ifdef just checks if the macro is defined, so BREADBOARD or PCB doesnt hold a value. the third screenshot: new way of handling flash i connected the CS pins to an mcp23017 since CS is just high or low values. little did i know, this would make using spi lines harder than it already is flash is easy: set the mcp pin to output, add helper functions to drive the CS pin high or low, call it before every spi transaction. sd cards on the other hand are along the same line now that i think about it. i just say it’s a pain because i need to do exactly what i did for the flash memory again, except for sd card commands. time to read through more documentation other: + i think i mentioned this somewhere in my code, but it wouldnt be a shame if the sd card slot doesnt work. i just need it to read from flash memory. i can always flash the game cartridges on my breadboard system. + i used carbon for my fancy code screenshots ( https://carbon.now.sh )"}, {"post_id": 61910, "ts": "2026-09-05T02:37:06Z", "hours": 6.4267, "text": "the final circuit board … for revision 2 CHANGES: + micro sd card wiring + new screen! instead of using the i80 parallel bus, im using a screen in spi mode. there’s two fpc connectors: one for the screen, one for touch controls + controller layout and wiring + new game cartridge OTHER: + i made a shell for mallow to show an example of how i want the project to look fully assembled. + PCB ART!!!!!! check the slack art channel if you wanna see it + while i wait for these circuit boards to come in, im going to rewrite my program to suit the pcb wiring rather than the breadboard wiring. + i really hope this screen works, because if it doesnt, i dont have a backup plan + my mallow neocities website is under construction. i forgot i had that on my circuit board."}, {"post_id": 55290, "ts": "2026-08-27T00:55:20Z", "hours": 5.3547, "text": "the debug board was… a flop let’s get the bad out of the way first: the screen won’t work and the wires heat up. i don’t know why, i followed the pinout and checked for shorts on the circuit board. only the backlight goes on. i think i might try another raw screen, but plan for another failure and have a slot for a pre-built module. no audio. i followed the schematic of a pre-built module and, when testing, i couldn’t figure out why audio wouldn’t come out of the speaker. there are no shorts on the amp, all the pins i used to wire it up are valid. maybe it’s a programming issue, or everything i just listed into one. all i know is that i might use another pre-built module for the sake of shipping my project in time. the final version will have an embedded screen and amp, im just starting to get on a strict time frame with only a month left of this challenge. okay, those are the failures. im happy to announce that the buttons and gpio expander work fine! i didn’t test out the flash memory yet, as well as the micro sd card slot. a few issues with the pin configuration for the controller (image 4), but so far it’s working good. in short: im going to shoot my shot with another raw screen, but if that doesn’t work, im using a pre-built module, as well as the same for the amp. we’ll see if the micro sd card works tomorrow when i get the slot in, as well as flash. im almost finished with the breadboard mallow configuration, it’s just the pcb that’s driving me nuts. ps: the esp32 s3 module on the main board is a temp solution. im getting another s3 wroom 1u, the one without the antenna. as always, thanks for reading. i hope to come back with good news next devlog"}, {"post_id": 54137, "ts": "2026-08-24T23:26:47Z", "hours": 3.7481, "text": "a little bit of this, a little bit of that: yet another programming update (except i locked in today) today was a long day. after almost 4 hours, i finally got images working. a quick way to describe what i did was making a little file system to work with. i also quickly added a few lines of code that checks if a flash_update.txt file exists before flashing the program. if it doesn’t, it’ll just read from the cartridge. this is so it doesn’t wear out the flash chip and so i dont have to wait 3 minutes for it to load. hopefully by the next time i upload another devlog, i’ll have audio and images working better. right now, i need to go into the esp-idf code and tell the code what files to flash (instead of it flashing everything inside of the images directory automatically). loading audio into flash memory will probably be interesting, i never even thought about it before. i attached a video of carbuncle from puyo puyo dancing. the raw binary files of the frames are on my github if, for some odd reason, anyone wants them."}, {"post_id": 53518, "ts": "2026-08-24T03:10:46Z", "hours": 5.3236, "text": "programming update (8/23/26): added a workflow closer to mallow revision 1.4’s i added an sd card slot to the flash spi line for uploading lua files easier. before, it was just a small const char* script = \"print(\\\"hi\\\")\"; expression. it works, but it gets messy for long scripts. now, a main.lua file can be stored on the sd card and flashed to memory with ease. rant about the sd card and sending lua files to flash one thing that’s cool about the sd card system is that once it’s mounted, you can use plain old fopen expressions like you would on a computer. to load the lua file onto flash memory, i used fseek to get the length of the file. i then used that length to malloc that file size + 1 byte for the string null terminator. then it sends the fseek pointer back to the start of the file, iterates through each character, and loads that into a buffer. the buffer is sent to flash with my flash_write_script function from last time (just check my github page. you’ll see it at programs/08_23_26.) something that is worth mentioning that i forgot about is that multiple devices can have the same spi line, just different CS pins. there’s 3 hosts for the esp32 s3: SPI1_HOST for internal ram and SPI2/SPI3_HOST for external devices. another thing i love about this sd card is that i can just easily edit the main.lua file on the sd card and pop it back into the card slot. it’s way easier than reflashing the esp32 s3 just to get a new rectangle on the screen. tomorrow im gonna work on trying to make a makeshift file system for loading up image files into flash and displaying them on screen via lua."}, {"post_id": 50690, "ts": "2026-08-20T00:30:34Z", "hours": 3.7864, "text": "programming update: implemented most of the flash memory into my program, as well as some (SOME) lua. flash memory took the longest. reading through documentation is boring but informative. i got a better understanding of how SPI works, and if not that, how the chip itself works. they have these diagrams of the MISO, MOSI, CS, and SCK lines which shows how data gets transferred. i attached a picture of one of those diagrams below. regarding lua: it didn’t take that long because i’ve experimented with it before in mallow revision 1.4. lua is interesting since, using the lua VM in C at least, it’s stack-based, using pop and push functions. it reminds me of the time i tried learning assembly. i need to try to push an actual file so i dont need to write down files like this… // i'll probably need to store the length of the script somewhere. // a script struct is probably going to be used for organization const char *script = \"local counter = 0\\n\" \"function update() end\\n\" \"function render()\\n\" \"if counter >= 0.5 then\\n\" \"draw_rect_filled(5, 5, 310, 230, 0xf81f)\\n\" \"display_fb()\\n\" \"counter = 0\\n\" \"end\\n\" \"counter = counter + delta_time\\n\" \"end\\n\"; …it works for now, but it’s gonna get messy if i were to push an actual game file. i need to also figure out how to push image data to flash. here’s an example of popping stuff in lua (from my program on 8/19/26: // get and call update lua_getglobal(L, \"update\"); if (lua_isfunction(L, -1)){ if (lua_pcall(L, 0, 0, 0) != LUA_OK){ printf(\"ERR CALLING UPDATE: %s\\n\", lua_tostring(L, -1)); lua_pop(L, 1); } } else { lua_pop(L, 1); } when you get the function, it pushes it to the top of the stack. then it checks if what you got was a function, as well as actually calling the code inside the function. if something goes wrong, it print’s the error. either way, it pops the function from the stack since we dont need it any more for that while loop cycle. this is the same process for render . if anyone actually decided to read through all of this, tell me about your own project. idk if im yapping into the void or not. i cant wait for my pcbs to come in, programming gets boring sometimes 🥹"}, {"post_id": 47262, "ts": "2026-08-15T02:28:37Z", "hours": 3.7411, "text": "over the span of today and some of yesterday, i designed the rest of mallow revision 2.2 and a controller for it. this board is haphazardly laid out, these aren’t the final component placements. on the back of the main board (image 2), there’s pads that i can solder to for debugging. let’s say i wired something up to the wrong pin in the schematics. i can just cut the trace and solder a wire from point A to point B to make up for that mistake. i probably could have just used a bunch of 0ohm resistors for this instead of cutting the trace, but idk cutting traces is more fun. the controller port is really just a 2.54mm 2x10 pin female header that the male header pins connect into. i couldn’t find the footprint for what i was looking for, so i just laid out through holes, making my own footprint essentially. long story short, this is just a debugging board and a test run"}, {"post_id": 46018, "ts": "2026-08-12T22:03:33Z", "hours": 5.94, "text": "there’s gonna be two parts of this devlog: the hardware and software. regarding the software, i just ran the draw_rect_filled function from my draw_functions.h header that i worked on yesterday and alternated the colors (see the gif) hardware is where everything started to fall apart. the good news is that the esp32 s3 works fine: no shorts, no errors when plugging it in. the main issues are the screen and the speaker. the screen is a cheap one i got off of aliexpress. it had an unusual pinout, or at least not the standard miso, mosi, etc that im used to. for anyone curious, it’s an i80 parallel spi interface. the pinout can be found here for the audio module, i already know that’s not gonna work. it was only during my debugging session last night that i realized this: GPIO37 is reserved for PSRAM, and i connected my audio module to pins GPIO35-39. what this means for future revisions: revision 2.2 is going to be a debugging board. there’s going to be a through hole for every component’s pins so i can cut traces and wire to another gpio/pin if i wanted to. that’s what i did with mallow rev 1.4. im going to start mallow revision 2.2 tonight! edit: the gif didnt work, just take my word for it 😭"}, {"post_id": 44883, "ts": "2026-08-10T22:31:34Z", "hours": 2.2317, "text": "DEVLOG 1: programming day 1 today i crossed off a little from my roadmap today: // TODO: // FLASH MEMORY [] - https://www.pjrc.com/teensy/W25Q128FV.pdf // ESP_LCD [x] // DRAW FUNCTIONS/VISUALS [-] // LUA INTEGRATION [] // BUTTONS [x] this is at the top of every main.c file i have on my github page. you can find today’s work here on my github page. some things i learned today: how to make header files. this one was actually kind of fun. i liked writing the descriptions for the functions and seeing them show up when i hover over the function in vscode. it’s a good way of organizing different functions. i was originally going to use a struct or something to hold all of the functions, like how a class would, but header files seemed like the better choice. how to use pointers. not fun at all, but it had to be done. learned from this video the most: https://www.youtube.com/watch?v=2ybLD6_2gKM&t=438s . i used that for my get_button_press function those are the major things i learned. tomorrow i plan on using littlefs for the flash memory so i don’t need to set raw memory addresses and break stuff. i wrote this kind of program before, so that’s why i was able to do this on the faster side. tomorrow will probably be a much slower day since im learning something completely new (littlefs). i really hope stardance allows me to timelapse my drawing process, that would be an easy day off…….👀 the first image shows my wiring, the second shows the program actually running. i dont know why i chose that gross color, let’s just pretend i did yellow for a star for stardance"}]...
|
Title: MALLOW - REV2 by @mallow_dev | Stardance
D Title: MALLOW - REV2 by @mallow_dev | Stardance
Devlogs:
DEVLOG 1: programming day 1 today i crossed off a little from my roadmap today: // TODO: // FLASH MEMORY [] - https://www.pjrc.com/teensy/W25Q128FV.pdf // ESP_LCD [x] // DRAW FUNCTIONS/VISUALS [-] // LUA INTEGRATION [] // BUTTONS [x] this is at the top of every main.c file i have on my github page. you can find today’s work here on my github page. some things i learned today: how to make header files. this one was actually kind of fun. i liked writing the descriptions for the functions and seeing them show up when i hover over the function in vscode. it’s a good way of organizing different functions. i was originally going to use a struct or something to hold all of the functions, like how a class would, but header files seemed like the better choice. how to use pointers. not fun at all, but it had to be done. learned from this video the most: https://www.youtube.com/watch?v=2ybLD6_2gKM&t=438s . i used that for my get_button_press function those are the major things i learned. tomorrow i plan on using littlefs for the flash memory so i don’t need to set raw memory addresses and break stuff. i wrote this kind of program before, so that’s why i was able to do this on the faster side. tomorrow will probably be a much slower day since im learning something completely new (littlefs). i really hope stardance allows me to timelapse my drawing process, that would be an easy day off…….👀 the first image shows my wiring, the second shows the program actually running. i dont know why i chose that gross color, let’s just pretend i did yellow for a star for stardance
there’s gonna be two parts of this devlog: the hardware and software. regarding the software, i just ran the draw_rect_filled function from my draw_functions.h header that i worked on yesterday and alternated the colors (see the gif) hardware is where everything started to fall apart. the good news is that the esp32 s3 works fine: no shorts, no errors when plugging it in. the main issues are the screen and the speaker. the screen is a cheap one i got off of aliexpress. it had an unusual pinout, or at least not the standard miso, mosi, etc that im used to. for anyone curious, it’s an i80 parallel spi interface. the pinout can be found here for the audio module, i already know that’s not gonna work. it was only during my debugging session last night that i realized this: GPIO37 is reserved for PSRAM, and i connected my audio module to pins GPIO35-39. what this means for future revisions: revision 2.2 is going to be a debugging board. there’s going to be a through hole for every component’s pins so i can cut traces and wire to another gpio/pin if i wanted to. that’s what i did with mallow rev 1.4. im going to start mallow revision 2.2 tonight! edit: the gif didnt work, just take my word for it 😭
over the span of today and some of yesterday, i designed the rest of mallow revision 2.2 and a controller for it. this board is haphazardly laid out, these aren’t the final component placements. on the back of the main board (image 2), there’s pads that i can solder to for debugging. let’s say i wired something up to the wrong pin in the schematics. i can just cut the trace and solder a wire from point A to point B to make up for that mistake. i probably could have just used a bunch of 0ohm resistors for this instead of cutting the trace, but idk cutting traces is more fun. the controller port is really just a 2.54mm 2x10 pin female header that the male header pins connect into. i couldn’t find the footprint for what i was looking for, so i just laid out through holes, making my own footprint essentially. long story short, this is just a debugging board and a test run
programming update: implemented most of the flash memory into my program, as well as some (SOME) lua. flash memory took the longest. reading through documentation is boring but informative. i got a better understanding of how SPI works, and if not that, how the chip itself works. they have these diagrams of the MISO, MOSI, CS, and SCK lines which shows how data gets transferred. i attached a picture of one of those diagrams below. regarding lua: it didn’t take that long because i’ve experimented with it before in mallow revision 1.4. lua is interesting since, using the lua VM in C at least, it’s stack-based, using pop and push functions. it reminds me of the time i tried learning assembly. i need to try to push an actual file so i dont need to write down files like this… // i'll probably need to store the length of the script somewhere. // a script struct is probably going to be used for organization const char *script = "local counter = 0\n" "function update() end\n" "function render()\n" "if counter >= 0.5 then\n" "draw_rect_filled(5, 5, 310, 230, 0xf81f)\n" "display_fb()\n" "counter = 0\n" "end\n" "counter = counter + delta_time\n" "end\n"; …it works for now, but it’s gonna get messy if i were to push an actual game file. i need to also figure out how to push image data to flash. here’s an example of popping stuff in lua (from my program on 8/19/26: // get and call update lua_getglobal(L, "update"); if (lua_isfunction(L, -1)){ if (lua_pcall(L, 0, 0, 0) != LUA_OK){ printf("ERR CALLING UPDATE: %s\n", lua_tostring(L, -1)); lua_pop(L, 1); } } else { lua_pop(L, 1); } when you get the function, it pushes it to the top of the stack. then it checks if what you got was a function, as well as actually calling the code inside the function. if something goes wrong, it print’s the error. either way, it pops the function from the stack since we dont need it any more for that while loop cycle. this is the same process for render . if anyone actually decided to read through all of this, tell me about your own project. idk if im yapping into the void or not. i cant wait for my pcbs to come in, programming gets boring sometimes 🥹
programming update (8/23/26): added a workflow closer to mallow revision 1.4’s i added an sd card slot to the flash spi line for uploading lua files easier. before, it was just a small const char* script = "print(\"hi\")"; expression. it works, but it gets messy for long scripts. now, a main.lua file can be stored on the sd card and flashed to memory with ease. rant about the sd card and sending lua files to flash one thing that’s cool about the sd card system is that once it’s mounted, you can use plain old fopen expressions like you would on a computer. to load the lua file onto flash memory, i used fseek to get the length of the file. i then used that length to malloc that file size + 1 byte for the string null terminator. then it sends the fseek pointer back to the start of the file, iterates through each character, and loads that into a buffer. the buffer is sent to flash with my flash_write_script function from last time (just check my github page. you’ll see it at programs/08_23_26.) something that is worth mentioning that i forgot about is that multiple devices can have the same spi line, just different CS pins. there’s 3 hosts for the esp32 s3: SPI1_HOST for internal ram and SPI2/SPI3_HOST for external devices. another thing i love about this sd card is that i can just easily edit the main.lua file on the sd card and pop it back into the card slot. it’s way easier than reflashing the esp32 s3 just to get a new rectangle on the screen. tomorrow im gonna work on trying to make a makeshift file system for loading up image files into flash and displaying them on screen via lua.
a little bit of this, a little bit of that: yet another programming update (except i locked in today) today was a long day. after almost 4 hours, i finally got images working. a quick way to describe what i did was making a little file system to work with. i also quickly added a few lines of code that checks if a flash_update.txt file exists before flashing the program. if it doesn’t, it’ll just read from the cartridge. this is so it doesn’t wear out the flash chip and so i dont have to wait 3 minutes for it to load. hopefully by the next time i upload another devlog, i’ll have audio and images working better. right now, i need to go into the esp-idf code and tell the code what files to flash (instead of it flashing everything inside of the images directory automatically). loading audio into flash memory will probably be interesting, i never even thought about it before. i attached a video of carbuncle from puyo puyo dancing. the raw binary files of the frames are on my github if, for some odd reason, anyone wants them.
the debug board was… a flop let’s get the bad out of the way first: the screen won’t work and the wires heat up. i don’t know why, i followed the pinout and checked for shorts on the circuit board. only the backlight goes on. i think i might try another raw screen, but plan for another failure and have a slot for a pre-built module. no audio. i followed the schematic of a pre-built module and, when testing, i couldn’t figure out why audio wouldn’t come out of the speaker. there are no shorts on the amp, all the pins i used to wire it up are valid. maybe it’s a programming issue, or everything i just listed into one. all i know is that i might use another pre-built module for the sake of shipping my project in time. the final version will have an embedded screen and amp, im just starting to get on a strict time frame with only a month left of this challenge. okay, those are the failures. im happy to announce that the buttons and gpio expander work fine! i didn’t test out the flash memory yet, as well as the micro sd card slot. a few issues with the pin configuration for the controller (image 4), but so far it’s working good. in short: im going to shoot my shot with another raw screen, but if that doesn’t work, im using a pre-built module, as well as the same for the amp. we’ll see if the micro sd card works tomorrow when i get the slot in, as well as flash. im almost finished with the breadboard mallow configuration, it’s just the pcb that’s driving me nuts. ps: the esp32 s3 module on the main board is a temp solution. im getting another s3 wroom 1u, the one without the antenna. as always, thanks for reading. i hope to come back with good news next devlog
the final circuit board … for revision 2 CHANGES: + micro sd card wiring + new screen! instead of using the i80 parallel bus, im using a screen in spi mode. there’s two fpc connectors: one for the screen, one for touch controls + controller layout and wiring + new game cartridge OTHER: + i made a shell for mallow to show an example of how i want the project to look fully assembled. + PCB ART!!!!!! check the slack art channel if you wanna see it + while i wait for these circuit boards to come in, im going to rewrite my program to suit the pcb wiring rather than the breadboard wiring. + i really hope this screen works, because if it doesnt, i dont have a backup plan + my mallow neocities website is under construction. i forgot i had that on my circuit board.
while i wait for my circuit boards, im stuck programming and designing the shell for mallow. this is gonna be a short update because it’s not much of an update at all, rather a todo list. the first screenshot: my todo list the x means it’s done already, the - means it’s halfway done, and nothing at all means that i have yet to start that. in short, i have to complete some draw functions, lua(?), flash memory, and the sd card (all in the respective order of easy to hard ) the second screenshot: ifdefs i got inspiration from the TFT_eSPI UserSetup.h file where you uncomment the settings you want. in this case, im just gonna swap back and forth. ifdef just checks if the macro is defined, so BREADBOARD or PCB doesnt hold a value. the third screenshot: new way of handling flash i connected the CS pins to an mcp23017 since CS is just high or low values. little did i know, this would make using spi lines harder than it already is flash is easy: set the mcp pin to output, add helper functions to drive the CS pin high or low, call it before every spi transaction. sd cards on the other hand are along the same line now that i think about it. i just say it’s a pain because i need to do exactly what i did for the flash memory again, except for sd card commands. time to read through more documentation other: + i think i mentioned this somewhere in my code, but it wouldnt be a shame if the sd card slot doesnt work. i just need it to read from flash memory. i can always flash the game cartridges on my breadboard system. + i used carbon for my fancy code screenshots ( https://carbon.now.sh )
revision 2.3 update well, i mean, it works! the video shows it running a game cartridge, the second image shows it recognizing that there’s no cartridge in the slot (i threw that screen together in krita in under a minute). seems like everything is working great until you look at the mess of tape and jumpers on the back. for some reason, the screen wasnt receiving power, and to this day, i still dont know why. the only way i was able to get it to work was by soldering a wire from the voltage regulator output to the screen’s LED_A (anode) pin and the general power pin. in the new, and TRULY final circuit board, i tried to make thicker wires. who knows, maybe it was a manufacturing issue, maybe it was some math i dont understand. whatever it was, i hope it works. if it doesnt, i added bare pads for be to easily connect a jumper wire again. i also added an fpc slot for the touch controls cable too. in the meantime, im going to finish up the programming and prototype a basic game for it in raylib. thanks for reading
chassis for mallow + POWER PAK (power supply) the chassis took a bit more than the 5:30 i logged, but i would rather tank some hours than keep turning on lapse every few runs to the 3d printer. back to the model: all of these parts can be disassembled: the controller, the motherboard, and game cartridge. the POWER PAK snaps onto the back. (chose the name POWER PAK because it sounds like something out of the 80s) all i need are the electronics (that should ship soon ) then i can ship
final update before shipping mallow has finally been assembled and tested, and everything i programmed it to do is working fine. it can run different cartridges, all the buttons work fine, and the POWER PAK on the back works… decently. look, it’s not the prettiest, but it gets the job done. im gonna upload everything to github shortly, throw together a demonstration video, and then i should be ready to ship!
Ships:
hello everyone! it’s finally time to ship! i made a handheld gaming device inspired by Nintendo’s Game Boy that runs off of custom cartridges made by YOU! my goals were to make it affordable, run custom games, and learn a lot in the process, and i’d say i met all of them! the most challenging part of this project was definitely the programming, though i learned a lot in the process of doing so: it’s important to read documentation, even though it’s boring. i dont care whether it’s hardware or software, you gotta do it. SPI lines are sick! it’s just a bunch of timing with 1s and 0s. what ground planes are, as well as stitching vias. advanced C syntax (did you know structs can hold functions? neither did i)...
|
1793047992.0723903
|
1793134392.0723903
|
|
58676
|
Wanderlust OS by @Shreya_Nair | Stardance
|
Shreya_Nair
|
2
|
54.0
|
869
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T18:58:05Z", "hours": 50.0, "multiplier": 17.3, "payout": 869, "blessing": "neutral", "text": "Wanderlust OS is my fantasy world themed WebOS project inspired by the Lord of the Rings universe (people who haven’t heard of the lord of the rings can use it too!). I wanted to make something that felt like a little world of its own while being very easy to use. I started with a basic webOS for Ship #1 where I built the main foundation. It had draggable and resizable windows, a taskbar and very few apps. From there for Ship #2 I completely transformed it adding many interactive features, music and plenty of easter eggs and fun apps. The Apps include Notes, Gallery, Timer, Map of Middle-earth, Palantir (weather app but as a crystal ball!), Calendar, Doodle, Library (with book excerpts related to lotr) and Settings. Main Features Light mode and Dark mode- Both are very different and the music and many elements completely changes between light and dark. Imo the dark mode is the most fun part of the project. The Fun parts- There are many things flying across the screen once you open the OS. Also there many clickable things I’ve added to make it fun and interactive to those who visit (like flowers, butterflies and some themed things). Clicking the arkenstone (the glowy rock) at the top opens the journey window and tracks all the apps and easter eggs u opened (wanted to add smth to let the user know whether they’ve found all the features). What was challenging? I started learning HTML and CSS through the personal site mission and I feel like I’ve improved a lot. In the beginning I found it hard to get a hang of it (the functionality and the design part, for eg light/ dark mode) and I believe Ive come a long way! Yes I encountered lot of problems in between but it was a learning experience. What am I proud of? Im very proud of all the interactive features I thought of and built on my own (especially dark mode). They arent necessary for the OS to function but they made a huge difference and I enjoyed building them tooo. For more details, please read the readme. I believe I’ve covered everything there is to cover but I’ll take feedback to improve the project and make it as user friendly as possible. Make sure to click around the desktop and see what you find! And to everyone who read till here…thank you! ^ o^/", "repo": "https://github.com/Shreya-Nair-28/Middle-earth-OS", "demo": "https://shreya-nair-28.github.io/Middle-earth-OS/"}, {"ship_num": 2, "ts": "2026-09-08T12:16:26Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Middle-earth OS is a browser based operating system inspired by the world of the Lord of the Rings. I built it with HTML, CSS and JS (I became pretty confident with these 3 after completing the personal site mission) Ship #1 focused on fulfilling the basic requirements. It has draggable and resizable windows, a taskbar, time display at the bottom. Also has 3 simple apps: Notes, Timer and Gallery. So far, it’s super basic. I’m developing this in multiple ships adding smth new each time. You can already see I have two other apps in the working(Map and Palantir). I will definitely make it more polished visually and technically. (Ship #2 will have more lotr themed apps and more unique features (ive already thought of a few amazing ones)). The goal is to turn this simple OS into a full immersive one.", "repo": "https://github.com/Shreya-Nair-28/Middle-earth-OS", "demo": "https://shreya-nair-28.github.io/Middle-earth-OS/"}]...
|
[{"post_id": 75617, "ts": "202 [{"post_id": 75617, "ts": "2026-09-30T15:50:18Z", "hours": 2.9361, "text": "Last devlog before I ship! I added yet another easter egg (i couldnt help myself 😅) They change depending on what mode you’re in (light/dark). Besides that, I fixed a couple of errors that i was saving for the end. I wanted the OS to be as smooth as possible (enjoyable as well but that comes second). Biggest change of all: I changed the name from Middle-earth OS to Wanderlust OS because I felt it fit my project better. I’m ready to ship!"}, {"post_id": 73676, "ts": "2026-09-25T17:32:13Z", "hours": 7.3336, "text": "I’m getting closer to shipping. I added two more fun buttons near the top: one is a memory window that tracks all the apps u opened and all the easter eggs u foundd , (i connected all the apps, buttons and easter eggs to this window; it counts each first time u click on it) the other is kinda like another easter egg. I fixed up a lot of the layering i didnt want the easter eggs/animations to get in the way of the user when theyre using any apps so i fixed up a lot of that as well. I cleaned up a lot of other code as well. I also learnt that I kept typing ‘colour’ instead of ‘color’ in a lot of places 😅😅 so i hit find & replace for those. I then spent some time improving the intro window and intro video I made it more appealing. Im happy with the work now actually. Ive come along way from the personal site mission. (o゜▽゜)o☆"}, {"post_id": 71849, "ts": "2026-09-21T17:25:42Z", "hours": 4.0397, "text": "flyButterfly(){ Today i added i worked on the js for the easter eggs and and added a few more interactive features. the OS looks more alive now!!!! i love itttttt. They’re still kinda glitchy and i will be trying to figure out the problemmm.. toodles!} 🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋"}, {"post_id": 71340, "ts": "2026-09-20T17:37:57Z", "hours": 6.2211, "text": "phew, added plenty of easter eggs today. some of them fly across the screen and some are hidden and takes a little exploring to find them. I want to make my os as interactive and not boring as possible so im gonna work more on that from tmrw. oKiE"}, {"post_id": 70734, "ts": "2026-09-19T17:46:41Z", "hours": 1.2517, "text": "hiya. i was fixing the sizing and locations of a few widgets. I spent most time trying to place the location pins on the right places in the map. i was able to do it for a couple of locations but not all. (it TAKES a long time). i also uploaded the images for the icons. I still havent thought of a good idea for the doodle app icon but itll hit me soooon. 🫨🫨"}, {"post_id": 70200, "ts": "2026-09-18T18:05:28Z", "hours": 1.9644, "text": "hellooooo. i added an intro video today. (idk why i didnt think to add one until now, i only remembered when i went through all the amazing projects uploaded to this mission). Besides the 2 hrs logged, i spent designing the leftover logos (i didnt find the emojis to fit the style). The coding mostly involved me trying to get the widgets to cooperate. The dragging was glitchy then there would some random small error that made everything else stop working. basically today wasnt really coding heavy but fixing a lot of things and improving the feel. (o゜▽゜)o"}, {"post_id": 69733, "ts": "2026-09-17T17:45:14Z", "hours": 4.1083, "text": "i worked on adding widgets today. was really difficult cuz i had no experience with that level. I wanted to reuse functions from the weather app for the weather widget. I tried but i couldnt :(. I wrote a whole new function for the widget itself. for now, i added some basic widgets such as calendar, weather and clock (they arent draggable yet tho, also im not feeling the clock design, prolly will change it later). Will definitely add more creative ones along the way :)"}, {"post_id": 69265, "ts": "2026-09-16T18:16:14Z", "hours": 2.4936, "text": "i added an interactive sparkly cursor today. Also added features within 2 apps : user can add their own events to the calendar, a clear all feature in the doodle app. i was also on the hunt for excerpts to add to the library app."}, {"post_id": 68756, "ts": "2026-09-15T17:56:28Z", "hours": 5.0167, "text": "was putting out fires all over the place today. Some windows kept opening INSIDE other windows! turns out it was because of a single missing closing div tag🙇♀️it took me soooo long, Besides all that i fixed up the library app and added a new map app. I improved some of the other apps as well."}, {"post_id": 68194, "ts": "2026-09-14T18:02:39Z", "hours": 3.7514, "text": "Got more work done today than the past few days. I added two apps! a doodle app and a a library app (just lotr excerpts for now). The pdf viewer seriously did not want to open. It really took some time to get that working. also the window resizing isnt really that great there are a lot of problems. More tomorrow!"}, {"post_id": 67563, "ts": "2026-09-13T18:17:36Z", "hours": 1.0639, "text": "I added a calendar app today! only worked on the html and js. need to finish the css as well to match the overall theme. its also still kinda buggy."}, {"post_id": 66750, "ts": "2026-09-12T17:16:10Z", "hours": 1.4025, "text": "today i worked on fixing up the weather app and modifying most of the error handling code. I also debugged a lot of the window opening and closing issues."}, {"post_id": 66114, "ts": "2026-09-11T18:36:02Z", "hours": 1.3075, "text": "mainly worked on improving the css and ui today. also spent an hour or two on design a few elements in canva."}, {"post_id": 65500, "ts": "2026-09-10T18:03:18Z", "hours": 2.0506, "text": "Add little glowy effects and little animations to the windows and the app icons. I also added light mode and dark mode to the os. Also, it may say I spent 2 hours coding but besides that I have spent another two working on the design aspect in canva (i wanted to add easter eggs like i did in my personal site mission). I still feel the UI just isnt…it. ig itll take a bit more trial and error to get it there. :))"}, {"post_id": 64961, "ts": "2026-09-09T18:15:25Z", "hours": 4.0447, "text": "Worked on improving the weather app today (i learned how to connect one to a site firstt). Then i worked on adding a settings app that can allow the user to choose wallpapers and light/dark mode. it looks pretty okay now but i definitely need to improve the ui BY FAR. tomorrow!"}, {"post_id": 64368, "ts": "2026-09-08T17:52:46Z", "hours": 1.2239, "text": "Added hover effects to the app icons. Started working on making the palantir a weather forecast app. I went through the article about it on geeksforgeeks first (because i was kinda clueless) and i learnt that it’s not super difficult. I started work on it and it’s actually going good. more tomorrow!"}, {"post_id": 64161, "ts": "2026-09-08T11:41:20Z", "hours": 1.2461, "text": "Now the os has 3 simple apps: Notes, Timer and Gallery. Current time is displayed on the bottom right. The windows are draggable and resizable."}, {"post_id": 63730, "ts": "2026-09-07T17:49:29Z", "hours": 1.5861, "text": "More work done. The windows are now draggable and can be opened and closed. I added a simple note taker (with add, delete, clear and view functions). I started working on a timer app today. (but there’s some error (it better not be a missing bracket/letter in a variable cuz those are so hard to find 🙏)). More work tomorroww."}, {"post_id": 63065, "ts": "2026-09-06T17:34:50Z", "hours": 0.3992, "text": "today i worked getting the windows to open. I could not work for a long time today. I was simply able to add windows and a bit of text. Tomorrow I will work on including the dragging and the design aspect."}, {"post_id": 62366, "ts": "2026-09-05T18:09:55Z", "hours": 0.4464, "text": "baby steps started work on lotr-os (the name needs work). I finished the personal site mission and now i have more experience with HTML and CSS (ESPECIALLY CSS). I hope it turns out good!"}]...
|
Title: Wanderlust OS by @Shreya_Nair | Stardance
Title: Wanderlust OS by @Shreya_Nair | Stardance
Devlogs:
baby steps started work on lotr-os (the name needs work). I finished the personal site mission and now i have more experience with HTML and CSS (ESPECIALLY CSS). I hope it turns out good!
today i worked getting the windows to open. I could not work for a long time today. I was simply able to add windows and a bit of text. Tomorrow I will work on including the dragging and the design aspect.
More work done. The windows are now draggable and can be opened and closed. I added a simple note taker (with add, delete, clear and view functions). I started working on a timer app today. (but there’s some error (it better not be a missing bracket/letter in a variable cuz those are so hard to find 🙏)). More work tomorroww.
Now the os has 3 simple apps: Notes, Timer and Gallery. Current time is displayed on the bottom right. The windows are draggable and resizable.
Added hover effects to the app icons. Started working on making the palantir a weather forecast app. I went through the article about it on geeksforgeeks first (because i was kinda clueless) and i learnt that it’s not super difficult. I started work on it and it’s actually going good. more tomorrow!
Worked on improving the weather app today (i learned how to connect one to a site firstt). Then i worked on adding a settings app that can allow the user to choose wallpapers and light/dark mode. it looks pretty okay now but i definitely need to improve the ui BY FAR. tomorrow!
Add little glowy effects and little animations to the windows and the app icons. I also added light mode and dark mode to the os. Also, it may say I spent 2 hours coding but besides that I have spent another two working on the design aspect in canva (i wanted to add easter eggs like i did in my personal site mission). I still feel the UI just isnt…it. ig itll take a bit more trial and error to get it there. :))
mainly worked on improving the css and ui today. also spent an hour or two on design a few elements in canva.
today i worked on fixing up the weather app and modifying most of the error handling code. I also debugged a lot of the window opening and closing issues.
I added a calendar app today! only worked on the html and js. need to finish the css as well to match the overall theme. its also still kinda buggy.
Got more work done today than the past few days. I added two apps! a doodle app and a a library app (just lotr excerpts for now). The pdf viewer seriously did not want to open. It really took some time to get that working. also the window resizing isnt really that great there are a lot of problems. More tomorrow!
was putting out fires all over the place today. Some windows kept opening INSIDE other windows! turns out it was because of a single missing closing div tag🙇♀️it took me soooo long, Besides all that i fixed up the library app and added a new map app. I improved some of the other apps as well.
i added an interactive sparkly cursor today. Also added features within 2 apps : user can add their own events to the calendar, a clear all feature in the doodle app. i was also on the hunt for excerpts to add to the library app.
i worked on adding widgets today. was really difficult cuz i had no experience with that level. I wanted to reuse functions from the weather app for the weather widget. I tried but i couldnt :(. I wrote a whole new function for the widget itself. for now, i added some basic widgets such as calendar, weather and clock (they arent draggable yet tho, also im not feeling the clock design, prolly will change it later). Will definitely add more creative ones along the way :)
hellooooo. i added an intro video today. (idk why i didnt think to add one until now, i only remembered when i went through all the amazing projects uploaded to this mission). Besides the 2 hrs logged, i spent designing the leftover logos (i didnt find the emojis to fit the style). The coding mostly involved me trying to get the widgets to cooperate. The dragging was glitchy then there would some random small error that made everything else stop working. basically today wasnt really coding heavy but fixing a lot of things and improving the feel. (o゜▽゜)o
hiya. i was fixing the sizing and locations of a few widgets. I spent most time trying to place the location pins on the right places in the map. i was able to do it for a couple of locations but not all. (it TAKES a long time). i also uploaded the images for the icons. I still havent thought of a good idea for the doodle app icon but itll hit me soooon. 🫨🫨
phew, added plenty of easter eggs today. some of them fly across the screen and some are hidden and takes a little exploring to find them. I want to make my os as interactive and not boring as possible so im gonna work more on that from tmrw. oKiE
flyButterfly(){ Today i added i worked on the js for the easter eggs and and added a few more interactive features. the OS looks more alive now!!!! i love itttttt. They’re still kinda glitchy and i will be trying to figure out the problemmm.. toodles!} 🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋🦋
I’m getting closer to shipping. I added two more fun buttons near the top: one is a memory window that tracks all the apps u opened and all the easter eggs u foundd , (i connected all the apps, buttons and easter eggs to this window; it counts each first time u click on it) the other is kinda like another easter egg. I fixed up a lot of the layering i didnt want the easter eggs/animations to get in the way of the user when theyre using any apps so i fixed up a lot of that as well. I cleaned up a lot of other code as well. I also learnt that I kept typing ‘colour’ instead of ‘color’ in a lot of places 😅😅 so i hit find & replace for those. I then spent some time improving the intro window and intro video I made it more appealing. Im happy with the work now actually. Ive come along way from the personal site mission. (o゜▽゜)o☆
Last devlog before I ship! I added yet another easter egg (i couldnt help myself 😅) They change depending on what mode you’re in (light/dark). Besides that, I fixed a couple of errors that i was saving for the end. I wanted the OS to be as smooth as possible (enjoyable as well but that comes second). Biggest change of all: I changed the name from Middle-earth OS to Wanderlust OS because I felt it fit my project better. I’m ready to ship!
Ships:
Middle-earth OS is a browser based operating system inspired by the world of the Lord of the Rings. I built it with HTML, CSS and JS (I became pretty confident with these 3 after completing the personal site mission) Ship #1 focused on fulfilling the basic requirements. It has draggable and resizable windows, a taskbar, time display at the bottom. Also has 3 simple apps: Notes, Timer and Gallery. So far, it’s super basic. I’m developing this in multiple ships adding smth new each time. You can already see I have two other apps in the working(Map and Palantir). I will definitely make it more polished visually and technically. (Ship #2 will have more lotr themed apps and more unique features (ive already thought of a few amazing ones)). The goal is to turn this simple OS into a full immersive one.
Wanderlust OS is my fantasy world themed WebOS project inspired by the Lord of the Rings universe (people who haven’t heard of the lord of the rings can use it too!). I wanted to make something that felt like a little world of its own while being very easy to use. I started with a basic webOS for Ship #1 where I built the main foundation. It had draggable and resizable windows, a taskbar and very few apps. From there for Ship #2 I completely transformed it adding many interactive features, music and plenty of easter eggs and fun apps. The Apps include Notes, Gallery, Timer, Map of Middle-earth, Palantir (weather app but as a crystal ball!), Calendar, Doodle, Library (with book excerpts related to lotr) and Settings. Main Features Light mode and Dark mode- Both are very different and the music and many elements completely changes between light and dark. Imo the dark mode is the most fun part of the project. The Fun parts- There are many things flying across the screen once you open the OS. Also there many clickable things I’ve added to make it fun and interactive to those who visit (like flowers, butterflies and some themed things). Clicking the arkenstone (the glowy rock) at the top opens the journey window and tracks all the apps and easter eggs u opened (wanted to add smth to let the user know whether they’ve found all the features). What was challenging? I started learning HTML and CSS through the personal site mission and I feel like I’ve improved a lot. In the beginning I found it hard to get a hang of it (the functionality and the design part, for eg light/ dark mode) and I believe Ive come a long way! Yes I encountered lot of problems in between but it was a learning experience. What am I proud of? Im very proud of all the interactive features I thought of and built on my own (especially dark mode). They arent necessary for the OS to function but they made a huge difference and I enjoyed building them tooo. For more details, please read the readme. I believe I’ve covered everything there is to cover but I’ll take feedback to improve the project and make it as user friendly as possible. Make sure to click around the desktop and see what you find! And to everyone who read till here…thank you! ^ o^/...
|
1793098038.6445358
|
1793184438.6445358
|
|
60818
|
TUI Pitch Detector by @EclipseShadow | Stardance
|
EclipseShadow
|
1
|
54.0
|
449
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T05:00:14Z", "hours": 54.0, "multiplier": 10.89, "payout": 449, "blessing": "neutral", "text": "Well, it’s, kind of, sort of, maybe, complete now! I have a lot of things I want to add, but I don’t know if the motivation will keep up for that long lol. I started this project as just a way to learn Rust by doing, and it turned into a project that I am really happy with! Something reviewers should note is that the Two-Way Mismatch algorithm is completely broken and unusable, which I did try to fix but I wasn’t able to. I added it more to show off the right column of the UI updating to show new parameters. If you can make it actually stable and usable via changing the parameters (which I don’t think is the issue, but maybe?), please open a GitHub Issue and I’ll look into it. Something challenging was working with some of the tooling around Rust, especially the compilation because that is not something I was used to. I am proud of how it ended up, with a very clean UI if I do say so myself, and with (most of) it working exactly as I want. In the future, I would like fix the issues with the TWM algorithm, add a GUI (using Tauri), and mostly just incorporate this knowledge into future bigger and better projects!", "repo": "https://github.com/EclipseShadow55/RustLocalPitch", "demo": "https://github.com/EclipseShadow55/RustLocalPitch/releases/tag/v0.1.0-alpha"}]...
|
[{"post_id": 75459, "ts": "202 [{"post_id": 75459, "ts": "2026-09-30T04:51:25Z", "hours": 6.0264, "text": "Switched ‘R’ key to reset currently selected parameter, Added ‘P’ key to reset all parameters, Switch hide cursor key from Space to Backspace Added Tooltip Descriptions for every selectable item Completed documentation for this release. Compiled release versions using cross and cargo-make."}, {"post_id": 74761, "ts": "2026-09-28T05:17:47Z", "hours": 8.7286, "text": "Added navigating and selecting items and shifting selected parameters Fixed bug in CyclicParam that caused subtractions past bounds, breaking unsigned types if the lower bound was zero Added Tooltips with info about selected item (descriptions to come) Note: Two-way mismatch, appears to be highly unstable and generally incorrect (one semitone above actual), tried debugging but no success."}, {"post_id": 73851, "ts": "2026-09-26T05:24:12Z", "hours": 2.6619, "text": "Created Smart Parameters and UI for Two-Way Mismatch. Added a volume meter, shows green when audio is past volume filter."}, {"post_id": 72437, "ts": "2026-09-22T23:00:11Z", "hours": 8.4528, "text": "Added detection parameters to the UI (changes with detection mode), and implemented Two-Way Mismatch detection algorithm (parameters not implemented yet). Also finally remembered to commit to the git repo (oops)."}, {"post_id": 66955, "ts": "2026-09-12T22:56:21Z", "hours": 5.4067, "text": "Added base parameters (min frequency, max frequency, noise filter, detection mode) to the TUI, also increased size of the main pitch display."}, {"post_id": 65634, "ts": "2026-09-10T21:53:46Z", "hours": 22.8811, "text": "Backend Processing Loop - read & process inbox (process audio chunks & respond with frequency frames, process & confirm parameter updates, respond to metadata requests, and shutdown) Backend Thread Starter Method CLI Main Loop - read & process inbox (process new frequency frames, process parameter update confirmations, process shutdown confirmations), update TUI with new note, read & process keypresses (temporary hotkeys for testing) (I wasn’t planning on submitting this to Stardance, so I’ve done a lot of work on it. Future devlogs will be smaller)"}]...
|
Title: TUI Pitch Detector by @EclipseShadow | Star Title: TUI Pitch Detector by @EclipseShadow | Stardance
Devlogs:
Backend Processing Loop - read & process inbox (process audio chunks & respond with frequency frames, process & confirm parameter updates, respond to metadata requests, and shutdown) Backend Thread Starter Method CLI Main Loop - read & process inbox (process new frequency frames, process parameter update confirmations, process shutdown confirmations), update TUI with new note, read & process keypresses (temporary hotkeys for testing) (I wasn’t planning on submitting this to Stardance, so I’ve done a lot of work on it. Future devlogs will be smaller)
Added base parameters (min frequency, max frequency, noise filter, detection mode) to the TUI, also increased size of the main pitch display.
Added detection parameters to the UI (changes with detection mode), and implemented Two-Way Mismatch detection algorithm (parameters not implemented yet). Also finally remembered to commit to the git repo (oops).
Created Smart Parameters and UI for Two-Way Mismatch. Added a volume meter, shows green when audio is past volume filter.
Added navigating and selecting items and shifting selected parameters Fixed bug in CyclicParam that caused subtractions past bounds, breaking unsigned types if the lower bound was zero Added Tooltips with info about selected item (descriptions to come) Note: Two-way mismatch, appears to be highly unstable and generally incorrect (one semitone above actual), tried debugging but no success.
Switched ‘R’ key to reset currently selected parameter, Added ‘P’ key to reset all parameters, Switch hide cursor key from Space to Backspace Added Tooltip Descriptions for every selectable item Completed documentation for this release. Compiled release versions using cross and cargo-make.
Ships:
Well, it’s, kind of, sort of, maybe, complete now! I have a lot of things I want to add, but I don’t know if the motivation will keep up for that long lol. I started this project as just a way to learn Rust by doing, and it turned into a project that I am really happy with! Something reviewers should note is that the Two-Way Mismatch algorithm is completely broken and unusable, which I did try to fix but I wasn’t able to. I added it more to show off the right column of the UI updating to show new parameters. If you can make it actually stable and usable via changing the parameters (which I don’t think is the issue, but maybe?), please open a GitHub Issue and I’ll look into it. Something challenging was working with some of the tooling around Rust, especially the compilation because that is not something I was used to. I am proud of how it ended up, with a very clean UI if I do say so myself, and with (most of) it working exactly as I want. In the future, I would like fix the issues with the TWM algorithm, add a GUI (using Tauri), and mostly just incorporate this knowledge into future bigger and better projects!...
|
1793055246.1688838
|
1793141646.1688838
|