|
336
|
bedrockR by @xFN10x | Stardance
|
xFN10x
|
1
|
67.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T14:06:05Z", "hours": 67.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I am shipping bedrockR a3.0PRE, a pre-release to the next major alpha version a3.0. bedrockR has been my main project for about a year now, starting it in Summer Of Making last year. This is the first bedrockR pre-release, you will most likely find bugs. Please report them here Please also read https://github.com/xFN10x/bedrockR/blob/master/a3PRE-known-issues.md to make sure you aren’t reporting already known issues.", "repo": "https://github.com/xFN10x/bedrockR", "demo": "https://github.com/xFN10x/bedrockR/releases/tag/a3.0PRE"}]...
|
[{"post_id": 63553, "ts": "202 [{"post_id": 63553, "ts": "2026-09-07T13:58:20Z", "hours": 7.1344, "text": "devlog 8 It’s time… Yes, I’m finally shipping a3.0PRE. I thought i would have more time to release the whole version at once, but a new YSWS is starting today, and i haven’t released a bedrockR version in quite a while. Resource Building (again) I did fix the resources, so now they do build properly, but there are some weird bugs that i have no idea where to even start with… this is why i made a known issues file on the github, because im hoping i can narrow down what might be causing this. What to expect from this release This release is about 50% of the work that will be in a3.0, the release is lacking quite a few important things that the final release will have. Mainly workspace upgrading, new UI features, and more network features. You almost certainly WILL find bugs, I NEED these reported , I don’t want an a2.0.2 situation again, where the whole program was found to be broken AFTER I shipped. . Anyways, this might very well be the last of me on Stardance , thank you for following my code optimization journey, and I hope you enjoy bedrockR!"}, {"post_id": 60784, "ts": "2026-09-03T11:41:43Z", "hours": 3.7117, "text": "devlog 7 I wasn’t planning on making this… but seeing as im going to highschool for the first time in 30 minutes , uhhh… i think i should make this. Resource Building I finally started implementing resource building. Ive been doing all of this with plugins in mind, so its very flexible. Well, this devlog is quite short, but… oh it doesn’t work… (well ill fix it when i have time) New item & block selectors I redid the Item selector, to make it easier to use, and program with, and I also removed the old block selector, seeing as it was literally the same class, but with some slightly different filtering… This release I’ve also decided that i should probably release this version in 2 releases, a3.0PRE , and a3.0 , because i haven’t released any versions in over 4 months."}, {"post_id": 58512, "ts": "2026-08-30T22:58:50Z", "hours": 5.2397, "text": "devlog 6 this time, i didn’t take 10 hours to do something! Yes, this devlog is only ~5 hours, not 10 lime usual, however, i did actually do something. More Resource work Now, you can actually use resources. You can select them in elements, and do things to them called “Resource tasks.” You execute them by right clicking them in the workspace view. You can also FINALLY select them for blocks and such. (hopefully the video works) General UI fixes Ive also fixed some other UI things, mainly being the icons for UI looking kinda crunchy… its very obvious with the social icons. The issue was with werid java scaling stuff… but its fixed now. I also changed the icon that the program uses from 1600x1600 to 1024x1024, because of some scaling artifacts. Also, I implemented some old, custom window icons, that i never figured out how to use."}, {"post_id": 54598, "ts": "2026-08-25T16:59:29Z", "hours": 10.1442, "text": "devlog 5 i kinda underestimated how long i was coding for yesterday I did more cleaning, and some more ui stuff. One of those was the social icons. I finally finished adding back all of the RElementValues , so now i can focus on other things. One of those other things was fixing some block texture related things, like fixing a random bug i introduced, aaand also making the block downloading 10x faster…. Block Downloading It was always annoying when trying to test bedrockR on other platforms, and i would have to sit through the block downloading… so i added a way to cancel it… but now i completely negated that problem; i multi-threaded it. Yea it actually seems like its 10x faster now, which is nice. RMapValue s rework Just like with RElementValue s, the class for RMapValue was huge… so now im doing the same thing with it; seperating it into different classes. So far, i dont have many reimplemented, but thats because i was doing something else; Resource UI Yes, im finally adding the new resource UI. I’ve started with remaking the resource tab, it looks pretty good so far, but i still need to do some work. Now im gonna continue resource stuff Changelog add resource gui in RWorkspace, and icons ( c7747e9 ) Bump gradle-wrapper from 9.7.0 to 9.7.1 ( 48bbd25 ) Bump com.google.guava:guava from 33.6.0-jre to 33.7.1-jre ( 6dd20bc ) make resources appear i think ( 4ad3140 ) fix layout ( 202dae9 ) move abstract resource classes to a new package, rename some resource functions, and add new resource category function ( c351bcc ) alright, i need to lock in, so now i actually need new resource ui ( 11154bb ) fix stuff with RMapElementValues and RElementValues + random code clean ( a9d82e7 ) fix top image, and make downloading 10x faster ( d03cc6a ) rename item components, and start readding map values ( 72c30f1 )"}, {"post_id": 44934, "ts": "2026-08-11T00:52:38Z", "hours": 9.5525, "text": "devlog 4 pssst, hey i have a slack channel if you want more dev things im not rewriting everything i said again, stardance utils deleted this whole thing, instead ill give you 1 sentence bullet points: i redid the recipe screen wow it was so bad redid launch page mmm smooth animation also did a bunch of random ass things that i cant explain cause they were mostly like 1 line of code being altered… also, stardance utils doesn’t edit this textbox correctly, so below should be the changelog v Changelog make this appear on the right screen ( 6d8b140 ) make the recipe creation screen better ( 0660edd ) make this smooth ( 52e32fb ) clean ( 8e86c27 ) fix the positioning ( 2c88991 ) Bump gradle-wrapper from 9.6.1 to 9.7.0 ( 928260d ) clean, make help button a class ( 2fc07dc ) make windows open on the current screen the mouse is on ( 23ee12f ) add more greetings, and make it a record ( 6bbee27 ) fix where windows open ( f33af46 )"}, {"post_id": 42146, "ts": "2026-08-06T19:10:23Z", "hours": 9.1933, "text": "devlog 3, this is why you write clean code early ok so the dreaded day has finally come… The largest class in this program, RElementValue is finally being cleaned up. It is the thing you see when changing your settings, or when editing ANY element… it automatically changes depending on the type of the variable its targeting… but the code i wrote for it was SO BAD! 🥀 3 giant if statements, checking through each possible implemented type, making the class over 1300+ lines long. However, I finally decided to redo the whole thing to continue my “code cleaning quest” So now different types get their own classes, e. g, strings get; REStringValue booleans get; REBoolValue (not actually implemented yet), etc. And as usual, this has NO effect on the user experience, which is… great to be putting so much effort into… but it has to be done before it gets to out of hand. (I promise im gonna start doing fun stuff soon 😅) This is why you write clean code from the start."}, {"post_id": 40173, "ts": "2026-08-03T16:04:12Z", "hours": 8.5211, "text": "devlog 2, again i kinda forgot to mention this… but im completely redoing the resource system…. oh wait i already did yea i thought i said this last devlog, but cleaned more code, and redid most of the program again. Resources instead of saving to one json file with the files, now save in a structured directory system, that you can see in the screenshot. (its actually a full workspace, but you get the idea.) Resources also are now their own classes, which makes it soooo much easier to add them… they are quite similar to how i programmed elements. Right now, you can’t convert older workspaces to these new resource system one, but thatll be worked on later. Time to do some ui! (also i did more code cleaning, and i renamed a ton of stuff)"}, {"post_id": 37960, "ts": "2026-07-31T00:48:37Z", "hours": 5.9425, "text": "devlog 1 Alright, I’m actually resuming normal development. I’M NOT MAKING THAT INSTALLER. I expect to be doing a bunch of code clean, now that I have even MORE experience with java. For release a2.2, I’m planning structures , but thats gonna take a bunch of work internally… because i’ll have to redo a bunch of stuff to make this program easier to work on. I also MIGHT continue on the android version. slack channel for more updates"}, {"post_id": 23586, "ts": "2026-07-06T17:02:00Z", "hours": 2.3186, "text": "Progress is going faster than before now that im using Rider now, I have made an API for getting the versions, instead of using the latest.json file in the github, and now im using it in the installer, and next hotfix i’ll use it for bedrockR updating. Oh and bedrockR 1.3.1 is finally out now… i guess i forgot to upload the release assets when i published it…"}, {"post_id": 22285, "ts": "2026-07-04T17:50:38Z", "hours": 0.6433, "text": "Im back to working on this, stopped using visual studio because it was horrible, now im using Jetbrains Rider. Ive implemented some methods to get releases from the github, so now im gonna implement them."}, {"post_id": 7015, "ts": "2026-06-11T19:27:00Z", "hours": 4.3383, "text": "it took a long time, but i finally figured out how to style the ui, and i recreated the bedrockR style. (the versions page will be fixed soon)"}, {"post_id": 107, "ts": "2026-05-31T19:30:56Z", "hours": 0.3497, "text": "I’ve been working on creating a bedrockR installer in C#, this will be cross-platform, and it will be released with each version, handling installing, and i also might add a way to run it without installing"}]...
|
Title: bedrockR by @xFN10x | Stardance
Devlogs:
I Title: bedrockR by @xFN10x | Stardance
Devlogs:
I’ve been working on creating a bedrockR installer in C#, this will be cross-platform, and it will be released with each version, handling installing, and i also might add a way to run it without installing
it took a long time, but i finally figured out how to style the ui, and i recreated the bedrockR style. (the versions page will be fixed soon)
Im back to working on this, stopped using visual studio because it was horrible, now im using Jetbrains Rider. Ive implemented some methods to get releases from the github, so now im gonna implement them.
Progress is going faster than before now that im using Rider now, I have made an API for getting the versions, instead of using the latest.json file in the github, and now im using it in the installer, and next hotfix i’ll use it for bedrockR updating. Oh and bedrockR 1.3.1 is finally out now… i guess i forgot to upload the release assets when i published it…
devlog 1 Alright, I’m actually resuming normal development. I’M NOT MAKING THAT INSTALLER. I expect to be doing a bunch of code clean, now that I have even MORE experience with java. For release a2.2, I’m planning structures , but thats gonna take a bunch of work internally… because i’ll have to redo a bunch of stuff to make this program easier to work on. I also MIGHT continue on the android version. slack channel for more updates
devlog 2, again i kinda forgot to mention this… but im completely redoing the resource system…. oh wait i already did yea i thought i said this last devlog, but cleaned more code, and redid most of the program again. Resources instead of saving to one json file with the files, now save in a structured directory system, that you can see in the screenshot. (its actually a full workspace, but you get the idea.) Resources also are now their own classes, which makes it soooo much easier to add them… they are quite similar to how i programmed elements. Right now, you can’t convert older workspaces to these new resource system one, but thatll be worked on later. Time to do some ui! (also i did more code cleaning, and i renamed a ton of stuff)
devlog 3, this is why you write clean code early ok so the dreaded day has finally come… The largest class in this program, RElementValue is finally being cleaned up. It is the thing you see when changing your settings, or when editing ANY element… it automatically changes depending on the type of the variable its targeting… but the code i wrote for it was SO BAD! 🥀 3 giant if statements, checking through each possible implemented type, making the class over 1300+ lines long. However, I finally decided to redo the whole thing to continue my “code cleaning quest” So now different types get their own classes, e. g, strings get; REStringValue booleans get; REBoolValue (not actually implemented yet), etc. And as usual, this has NO effect on the user experience, which is… great to be putting so much effort into… but it has to be done before it gets to out of hand. (I promise im gonna start doing fun stuff soon 😅) This is why you write clean code from the start.
devlog 4 pssst, hey i have a slack channel if you want more dev things im not rewriting everything i said again, stardance utils deleted this whole thing, instead ill give you 1 sentence bullet points: i redid the recipe screen wow it was so bad redid launch page mmm smooth animation also did a bunch of random ass things that i cant explain cause they were mostly like 1 line of code being altered… also, stardance utils doesn’t edit this textbox correctly, so below should be the changelog v Changelog make this appear on the right screen ( 6d8b140 ) make the recipe creation screen better ( 0660edd ) make this smooth ( 52e32fb ) clean ( 8e86c27 ) fix the positioning ( 2c88991 ) Bump gradle-wrapper from 9.6.1 to 9.7.0 ( 928260d ) clean, make help button a class ( 2fc07dc ) make windows open on the current screen the mouse is on ( 23ee12f ) add more greetings, and make it a record ( 6bbee27 ) fix where windows open ( f33af46 )
devlog 5 i kinda underestimated how long i was coding for yesterday I did more cleaning, and some more ui stuff. One of those was the social icons. I finally finished adding back all of the RElementValues , so now i can focus on other things. One of those other things was fixing some block texture related things, like fixing a random bug i introduced, aaand also making the block downloading 10x faster…. Block Downloading It was always annoying when trying to test bedrockR on other platforms, and i would have to sit through the block downloading… so i added a way to cancel it… but now i completely negated that problem; i multi-threaded it. Yea it actually seems like its 10x faster now, which is nice. RMapValue s rework Just like with RElementValue s, the class for RMapValue was huge… so now im doing the same thing with it; seperating it into different classes. So far, i dont have many reimplemented, but thats because i was doing something else; Resource UI Yes, im finally adding the new resource UI. I’ve started with remaking the resource tab, it looks pretty good so far, but i still need to do some work. Now im gonna continue resource stuff Changelog add resource gui in RWorkspace, and icons ( c7747e9 ) Bump gradle-wrapper from 9.7.0 to 9.7.1 ( 48bbd25 ) Bump com.google.guava:guava from 33.6.0-jre to 33.7.1-jre ( 6dd20bc ) make resources appear i think ( 4ad3140 ) fix layout ( 202dae9 ) move abstract resource classes to a new package, rename some resource functions, and add new resource category function ( c351bcc ) alright, i need to lock in, so now i actually need new resource ui ( 11154bb ) fix stuff with RMapElementValues and RElementValues + random code clean ( a9d82e7 ) fix top image, and make downloading 10x faster ( d03cc6a ) rename item components, and start readding map values ( 72c30f1 )
devlog 6 this time, i didn’t take 10 hours to do something! Yes, this devlog is only ~5 hours, not 10 lime usual, however, i did actually do something. More Resource work Now, you can actually use resources. You can select them in elements, and do things to them called “Resource tasks.” You execute them by right clicking them in the workspace view. You can also FINALLY select them for blocks and such. (hopefully the video works) General UI fixes Ive also fixed some other UI things, mainly being the icons for UI looking kinda crunchy… its very obvious with the social icons. The issue was with werid java scaling stuff… but its fixed now. I also changed the icon that the program uses from 1600x1600 to 1024x1024, because of some scaling artifacts. Also, I implemented some old, custom window icons, that i never figured out how to use.
devlog 7 I wasn’t planning on making this… but seeing as im going to highschool for the first time in 30 minutes , uhhh… i think i should make this. Resource Building I finally started implementing resource building. Ive been doing all of this with plugins in mind, so its very flexible. Well, this devlog is quite short, but… oh it doesn’t work… (well ill fix it when i have time) New item & block selectors I redid the Item selector, to make it easier to use, and program with, and I also removed the old block selector, seeing as it was literally the same class, but with some slightly different filtering… This release I’ve also decided that i should probably release this version in 2 releases, a3.0PRE , and a3.0 , because i haven’t released any versions in over 4 months.
devlog 8 It’s time… Yes, I’m finally shipping a3.0PRE. I thought i would have more time to release the whole version at once, but a new YSWS is starting today, and i haven’t released a bedrockR version in quite a while. Resource Building (again) I did fix the resources, so now they do build properly, but there are some weird bugs that i have no idea where to even start with… this is why i made a known issues file on the github, because im hoping i can narrow down what might be causing this. What to expect from this release This release is about 50% of the work that will be in a3.0, the release is lacking quite a few important things that the final release will have. Mainly workspace upgrading, new UI features, and more network features. You almost certainly WILL find bugs, I NEED these reported , I don’t want an a2.0.2 situation again, where the whole program was found to be broken AFTER I shipped. . Anyways, this might very well be the last of me on Stardance , thank you for following my code optimization journey, and I hope you enjoy bedrockR!
Ships:
I am shipping bedrockR a3.0PRE, a pre-release to the next major alpha version a3.0. bedrockR has been my main project for about a year now, starting it in Summer Of Making last year. This is the first bedrockR pre-release, you will most likely find bugs. Please report them here Please also read https://github.com/xFN10x/bedrockR/blob/master/a3PRE-known-issues.md to make sure you aren’t reporting already known issues....
|
1793004645.19799
|
1793091045.19799
|
|
2734
|
Robotics Game Center by @Stellar | Stardance
|
Stellar
|
1
|
67.0
|
359
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-13T04:36:34Z", "hours": 67.0, "multiplier": 5.38, "payout": 359, "blessing": "neutral", "text": "This is a robotics game website built specifically for the FIRST Robotics Competition (FRC) community. It has three games: FRCdle (wordle), FRC trivia, and FRC clicker. FRCdle lets you choose the region and difficulty of the team you want to guess. FRC trivia is a trivia game that lets you filter questions based on a core category, time period, difficulty, and question type. Trivia will be getting more and more questions over time. FRC clicker is like any other clicker game out there (the most famous being Cookie Clicker): buy upgrades that scale exponentially in price in return for linear gains. This project took me a lot longer than I expected it to, so I really hope you enjoy this project!", "repo": "https://github.com/Ansh2021/Flux_Robotics", "demo": "https://fluxrobotics.vercel.app"}]...
|
[{"post_id": 25943, "ts": "202 [{"post_id": 25943, "ts": "2026-07-10T13:38:25Z", "hours": 4.9681, "text": "I’m Promise I’m Done Now Devlog #12 I know I said I was done with this project in the last devlog, but I lied (I’m sorry). Why I Wasn’t Actually Finished The short answer is that I didn’t properly check my website (rookie mistake). The long answer is much more long-winded (obviously). After I fixed the issue of my static assets not showing up, I forgot to check whether FRCdle and FRC Trivia were working. Spoiler alert, they weren’t. Every time I tried fetching data from my backend, the request would always bounce back with a 404 server not found error because my backend wasn’t actually running. I eventually found that Vercel Services was a thing and tried using that to have both my Next.js frontend and Express backend run on the same project. Another spoiler alert, it didn’t work. I tried basically everything to get Vercel Services to work, but to no avail. Like before, my backend was never started by Vercel which caused requests to bounce back with a 404 error. Sometimes, I’d even have my frontend code not show up at all because Vercel would occasionally show a 404 no code error. After all this trial and error, I eventually decided to ditch Vercel Services in favor of hosting my backend on Render, a dedicated backend hosting service (my frontend is still on Vercel). Getting Render to work was so much easier than getting Vercel Services to work. It took me around half an hour to get up and running compared to probably over five hours to try and get Vercel Services running. The only potential issue with Render is that after 15 minutes of inactivity, the server “spins down” (becomes inactive) and takes around one minute to reactivate. Last Steps Get this project finally shipped! I still need to add more trivia questions (I haven’t added any since I found out that my backend fetches didn’t work). Feel free to check it out at fluxrobotics.vercel.app !"}, {"post_id": 24631, "ts": "2026-07-08T11:01:14Z", "hours": 9.4203, "text": "Done and Dusted Devlog #11 I’m finally done with this project (technically speaking). I hosted this project on Vercel which wasn’t as smooth as it should have been. The Hosting Process I ran into so many errors while hosting. WAY TOO MANY. Connecting my GitHub repository to Vercel was straightforward but everything else wasn’t at all. I first ran into build errors when pushing code to GitHub which would then get deployed to my Vercel project. If I remember correctly, the fix was to make sure Vercel tracked the correct root folder (my frontend folder in this case because that’s what it serves to the client side/frontend). After that, my website couldn’t access my Express backend. The fix to that was to have different URL fetch paths depending on whether I was running my code in my development environment or on Vercel. I believe I also had to change where my backend controller was mounted in Express (I had to add “/api” to the front of the path). My last issue was my static assets not loading while in production (they loaded just fine in development). The solution was found in my vercel.json file. I originally had a global catch all path that Vercel used to catch all frontend requests. This global path, however, caught requests that asked for my static assets, thereby not letting them appear on the frontend. Removing the global path and only having my backend redirect path solved this issue. That’s it! I will ship this project as soon as I get more questions into FRC Trivia!"}, {"post_id": 21341, "ts": "2026-07-03T07:05:44Z", "hours": 7.87, "text": "FRCdle Again Devlog #10 THE STATBOTICS API IS BACK UP AGAIN (we’re so back). This means I can finally polish up FRCdle again. Big Improvement I finally got to implement Supabase into FRCdle just like I said I would do for a while now. I’d say this makes FRCdle more fault tolerant since Supabase acts as a backup for whenever either the Blue Alliance or Statbotics API is down (or both). Essentially what I’ve done is have the user fetch data from the two APIs whenever they want area and/or team data. If one or both of these requests fail, the request(s) will fall back to the Supabase backup where a version of the data is stored. This data updates every six hours only when a user actually requests for it. This has proven to be very beneficial as large area requests such as the request for all FRC team data or regional FRC team data tend to bounce back with API error codes. What about FRC Clicker? There’s not much to say about this for this devlog. I added a few more upgrades and items, but that’s really it. Next Steps Finish up FRC Clicker Get the last items done Get their corresponding one-time upgrades done"}, {"post_id": 17394, "ts": "2026-06-28T04:46:15Z", "hours": 10.1503, "text": "I’ve Been Busy Devlog #9 It’s been way too long since my last devlog, but I’ve gotten a pretty decent amount of progress on my FRC clicker game! Progress I’ve modeled my game off of popular idle clicker games, with Cookie Clicker being my main inspiration. My game, just like Cookie Clicker, allows you to buy items such as motors and cameras (just like cursors and grandmas in Cookie Clicker) in return for more game pieces (the default is currently fuel and I plan on letting the user change which game piece from previous years they want). The prices for these items, like all clicker games, increases exponentially (around 1.2 to 1.3 times so far) while only promising linear gains. Cookie Clicker also has one-time upgrades that give permanent boosts to either your items or overall production. I have this too (though not many of them right now)! Annoying Little Thing Tooltips. They provide little bits of additional information as a sort of clarifier for what is presented before you. Creating them seemed deceptively easy. Make the child tooltip absolutely positioned in relation to your relatively positioned parent container and you’re all set, right? Wrong. The way my side bar/container is set up has the tooltip nested so far within divs that even if I were to apply the relative and absolute structure, the tooltip would be cut off by one of the ancestor divs. Literally all I had to do to fix this was not make the tooltip’s parent container relative (the tooltip is still absolute). I don’t fully know why this works, but I’m not complaining. Next Steps Get the next upgrades into FRC clicker. Also revisit FRCdle to get Supabase implemented for it (really only will happen once the Statbotics API is back up again)."}, {"post_id": 13808, "ts": "2026-06-22T17:02:35Z", "hours": 4.2469, "text": "Finished FRC Trivia Devlog #8 It has been a while since my last devlog and I haven’t gotten too much done hours wise on this project (I’ve been busy with life). I did just finish FRC Trivia though! The Game FRC Trivia is exactly what it sounds like: the user is prompted with an FRC themed trivia question that they must attempt to answer correctly. Before the questions start rolling in, the user is prompted to select items from four different categories that will affect the questions they receive: the core category (general FIRST knowledge, events, awards, team), era/time period (historical, current, upcoming), difficulty (easy, medium, hard), and answer type (MCQ, FRQ, true or false). After selecting their preferred question categories, the correct questions will be fetched from Supabase and shown on the user’s screen. I haven’t added many questions yet (I have a grand total of 53) and most of them are Hall of Fame questions that I barely know anything about. Next Steps I really want to make sure FRCdle is working, but with the Statbotics API down, there’s not much I can really do with that. I could add modes to FRC Trivia (like lightning round) but that is a low priority. I will probably shift my attention to another FRC game."}, {"post_id": 11603, "ts": "2026-06-18T21:50:23Z", "hours": 6.3392, "text": "Rough Implementation of Supabase Devlog #7 I decided to implement Supabase due to how frequently the Statbotics API has been down recently. It also doubles as a place to store hundreds of trivia questions (I currently only have 40). Since Supabase is an SQL database, data within it is stored in tables, making it much more structured compared to No-SQL databases such as Firestore. Issue (and Solution) It took me much longer than it should have to get question filtering properly implemented for FRC trivia. Each question has a core category, era (time period), difficulty (easy, medium, or hard), and answer type (multiple choice, true or false, free response). Using the Supabase typescript .in() operator (used with the WHERE function in an SQL Editor), I can filter questions by their properties using .in() as a sort of shorthand for the logical OR operator. The issue with this is that .in() only accepts a string parameter (which is easy enough) and a parameter with the type (string | readonly | null)[] (which is the issue here). Since I’m getting my second parameter from req.query, my Express backend will automatically group duplicate queries into a string array. However, any queries that are not duplicated will be saved as a string instead of a string array (even if I try forcing it to be a string array by using as string[] ). This causes .in() to break since the second parameter has to be a string array. The fix here, which took me way too long to figure out, was to create a new variable for each query requirement and assign it a value depending on if the original requirement is an array or not. If the original requirement was an array, then the new variable will just be the exact same as the original requirement (since we need a string array anyways). On the other hand, if the original requirement wasn’t a string array already, we can just wrap the original requirement in brackets. To make sure the types of this new variable and the second parameter for .in() sufficiently overlap, we get the new variable as (string | null)[] . For example, const eras = (Array.isArray(era) ? era : [era]) as (string | null)[] . This ensures that eras will be a string array (or potentially null) and lets us use it within .in() . And now I can finally fetch questions from Supabase! Next Steps Get questions to show up on the frontend (that’s really it)."}, {"post_id": 9567, "ts": "2026-06-15T22:52:17Z", "hours": 2.8628, "text": "Done With FRCdle (technically) Devlog #6 I’m finally finished with FRCdle (it took me way too long). Statbotics broke again so I’ve only been able to test with hardcoded data. I will go back and retest FRCdle once Statbotics is back up. Issues I really only faced one problem and that was my use effect refusing to fire again when I clicked on a button in the parent element. This use effect was supposed to reset FRCdle to its starting state and I fixed it by adding another use effect (fighting fire with fire here). Accomplishments The obvious one is that I finished FRCdle! The background colors for each cell in the table update based on how close the guess was to the randomly selected team. The text in each cell also indicates whether the guess was too high or too low where applicable. Next Steps I will be working on the robotics trivia portion of the app now. I’ll eventually come back and retest FRCdle when the Statbotics API is fixed (I hope it happens soon). edit : I just realized that if I wanted to circumvent the issue of Statbotics (or maybe even the Blue Alliance) API down, I could have new, changed data be pushed to a database, that way if either API goes down, the user will still be able to play albeit with potentially outdated data. My only issue with this is how annoying it was to host one of my past projects that used Firestore/Firebase (it took me around two weeks of constant debugging to get my backend properly hosted). This might be too big of an improvement to ignore though, so I might add a database. Should I stick with Firebase/Firestore or should I switch to another database like MongoDB or Supabase?"}, {"post_id": 9027, "ts": "2026-06-15T01:55:56Z", "hours": 6.4381, "text": "Mostly Done With FRCdle Devlog #5 I am nearly done with FRCdle (finally). While Statbotics was down (it’s finally back up!), I essentially had to create “pseudodata” in order to properly test adding teams to the table. Issues I had a lot of trouble with async function timings. The async function I had fetching the data for a random team tried running at the same time as the async function that fetched the data for teams in an area. This caused an error in the former function since it was trying to fetch a team before it even knew what area to fetch it from. The fix was really simple: I added another useEffect that ran whenever the area data was fully pushed to its useState or whenever the difficulty changed. Accomplishments The difficulty calculation works. It takes the EPA rank and area (points) rank for each team in an area, scales them in reverse order (in an area with 75 teams, 1st place gets 75 points all the way down to 75th place which gets 1 point), and averages the two new point values with a higher score making a team easier to guess. For example, if the user selects California in easy difficulty, the randomly selected team might be 4414 or 254 since their scores are much higher than most of the teams in their district. Next Steps I can finally get the actual guessing portion of FRCdle done (I know I’ve been saying this for several devlogs, but I will actually do it now)."}, {"post_id": 7519, "ts": "2026-06-12T15:39:29Z", "hours": 3.6486, "text": "Major Roadblock Devlog #4 Development was going pretty smoothly with my request for every single FRC team being implemented. The Roadblock As I was about to start getting the guessing part of FRCdle actually implemented, I got hit with a 500 from Statbotics. I tried again and again and again but I just couldn’t get the API data no matter how hard I tried. I tried clearing my cache and restarting my development environment to no avail. I eventually went to the REST API documentation on Statbotics and tried fetching data directly from there, but I was hit with an error where Statbotics asked me for an API key. I don’t have an API key. I asked a few other people about this issue and they were facing it as well. So now, I think that Statbotics itself is down which means I’ll have to stop backend development for who knows how long. Next Steps There isn’t much I can do. I can work more on the frontend but as long as Statbotics is down, I won’t be getting much progress."}, {"post_id": 6599, "ts": "2026-06-11T02:28:16Z", "hours": 6.015, "text": "FRC Wordle Clone Almost Complete Devlog #3 I am (finally) almost done with the data fetching portion of “FRCdle.” I’ve been fetching data from both the Blue Alliance API and Statbotics API. Annoying Issues (and Odd Solution) I had to figure out how to fetch data for teams in the regional system from the Statbotics API. This API, unlike the Blue Alliance API, doesn’t have a designated method for fetching teams in this system (as compared to the district system which it does let you directly fetch data for). To circumvent this, I used the same endpoint the API uses to send district data. However, I kept the district parameter empty, thereby (mostly) forcing the API to return regional teams. Since this particular API request can only return 1000 teams at once, I had to fetch several times, increasing the offset by 1000 each time until the length of the returned data was less than 1000. This may not be the best development practice, but it is one of, if not the only way to get regional data from Statbotics (luckily it is much easier to get regional data from the Blue Alliance API). Next Steps I have to finish the API request for fetching all FRC teams. Next, I have to finish my difficulty calculations by taking in a team’s EPA rank within the user-chosen area and their area rank (points rank), scaling them from 1-10 (the higher the rank, the higher the number from 1-10), and then taking the average of the two new values. Lastly, I have to implement the wordle part of this game (guessing teams along with color indicators for how close a player is to the correct team)."}, {"post_id": 4649, "ts": "2026-06-08T01:44:12Z", "hours": 3.8564, "text": "Beginnings of a Wordle Clone Devlog #2 I started making lots of progress on the wordle page (specifically FRC wordle). It took me way longer than I’d admit to (even though I can’t hide how much time I’ve logged on this one devlog). Big Accomplishment I finally got my backend up and running! It took me way too long mostly in part due to nodemon and express acting up. I spent way too long trying to figure out why my fetch statement on the frontend wasn’t actually fetching anything from the backend (it was basically a one line fix too). Next Steps I need to add a user input that lets the user dictate where their game of wordle goes. Right now, the only way to change the data on the table is to change the hardcoded team number (users can’t do that). Then I need to add the colors (green, yellow, and grey) for guesses and actually have new rows add onto the table (styling the table is also a priority)."}, {"post_id": 4313, "ts": "2026-06-07T15:57:01Z", "hours": 1.2669, "text": "Landing Page Devlog #1 I’m still kind of new to all of this so please bear with me! (How does one format a devlog? Is it like a READme?) This project (as the project title somewhat suggests) houses several robotics (specifically FIRST Robotics) themed games. I guess you can think of it as a neal.fun knockoff for robotics (but maybe not as fun). I did start this project before Stardance, but I didn’t get too much done with it before. The majority of the time I have spent thus far (after the start of Stardance) was spent familiarizing myself with Next JS and Tailwind as I have really only used React JS and Native along with straight CSS files before. I tried going for the effect that large companies (mainly Google from what I’ve seen) have done with their buttons and other parts of their UI with a gradient effect with their border. I think it’s coming along pretty nicely but Tailwind has a lot of constraints that make replicating it nicely very annoying (either that or I’m just not good at Tailwind). I’ve also created four buttons so far with the same border gradient effect with each button leading the user to a different game page (none of them are set up yet and each one might take a bit). You do have to scroll down to see the buttons so they aren’t included in the screenshot of the landing page. (Please name suggestions please. Flux is just an arbitrary name I chose.)"}]...
|
Title: Robotics Game Center by @Stellar | Stardanc Title: Robotics Game Center by @Stellar | Stardance
Devlogs:
Landing Page Devlog #1 I’m still kind of new to all of this so please bear with me! (How does one format a devlog? Is it like a READme?) This project (as the project title somewhat suggests) houses several robotics (specifically FIRST Robotics) themed games. I guess you can think of it as a neal.fun knockoff for robotics (but maybe not as fun). I did start this project before Stardance, but I didn’t get too much done with it before. The majority of the time I have spent thus far (after the start of Stardance) was spent familiarizing myself with Next JS and Tailwind as I have really only used React JS and Native along with straight CSS files before. I tried going for the effect that large companies (mainly Google from what I’ve seen) have done with their buttons and other parts of their UI with a gradient effect with their border. I think it’s coming along pretty nicely but Tailwind has a lot of constraints that make replicating it nicely very annoying (either that or I’m just not good at Tailwind). I’ve also created four buttons so far with the same border gradient effect with each button leading the user to a different game page (none of them are set up yet and each one might take a bit). You do have to scroll down to see the buttons so they aren’t included in the screenshot of the landing page. (Please name suggestions please. Flux is just an arbitrary name I chose.)
Beginnings of a Wordle Clone Devlog #2 I started making lots of progress on the wordle page (specifically FRC wordle). It took me way longer than I’d admit to (even though I can’t hide how much time I’ve logged on this one devlog). Big Accomplishment I finally got my backend up and running! It took me way too long mostly in part due to nodemon and express acting up. I spent way too long trying to figure out why my fetch statement on the frontend wasn’t actually fetching anything from the backend (it was basically a one line fix too). Next Steps I need to add a user input that lets the user dictate where their game of wordle goes. Right now, the only way to change the data on the table is to change the hardcoded team number (users can’t do that). Then I need to add the colors (green, yellow, and grey) for guesses and actually have new rows add onto the table (styling the table is also a priority).
FRC Wordle Clone Almost Complete Devlog #3 I am (finally) almost done with the data fetching portion of “FRCdle.” I’ve been fetching data from both the Blue Alliance API and Statbotics API. Annoying Issues (and Odd Solution) I had to figure out how to fetch data for teams in the regional system from the Statbotics API. This API, unlike the Blue Alliance API, doesn’t have a designated method for fetching teams in this system (as compared to the district system which it does let you directly fetch data for). To circumvent this, I used the same endpoint the API uses to send district data. However, I kept the district parameter empty, thereby (mostly) forcing the API to return regional teams. Since this particular API request can only return 1000 teams at once, I had to fetch several times, increasing the offset by 1000 each time until the length of the returned data was less than 1000. This may not be the best development practice, but it is one of, if not the only way to get regional data from Statbotics (luckily it is much easier to get regional data from the Blue Alliance API). Next Steps I have to finish the API request for fetching all FRC teams. Next, I have to finish my difficulty calculations by taking in a team’s EPA rank within the user-chosen area and their area rank (points rank), scaling them from 1-10 (the higher the rank, the higher the number from 1-10), and then taking the average of the two new values. Lastly, I have to implement the wordle part of this game (guessing teams along with color indicators for how close a player is to the correct team).
Major Roadblock Devlog #4 Development was going pretty smoothly with my request for every single FRC team being implemented. The Roadblock As I was about to start getting the guessing part of FRCdle actually implemented, I got hit with a 500 from Statbotics. I tried again and again and again but I just couldn’t get the API data no matter how hard I tried. I tried clearing my cache and restarting my development environment to no avail. I eventually went to the REST API documentation on Statbotics and tried fetching data directly from there, but I was hit with an error where Statbotics asked me for an API key. I don’t have an API key. I asked a few other people about this issue and they were facing it as well. So now, I think that Statbotics itself is down which means I’ll have to stop backend development for who knows how long. Next Steps There isn’t much I can do. I can work more on the frontend but as long as Statbotics is down, I won’t be getting much progress.
Mostly Done With FRCdle Devlog #5 I am nearly done with FRCdle (finally). While Statbotics was down (it’s finally back up!), I essentially had to create “pseudodata” in order to properly test adding teams to the table. Issues I had a lot of trouble with async function timings. The async function I had fetching the data for a random team tried running at the same time as the async function that fetched the data for teams in an area. This caused an error in the former function since it was trying to fetch a team before it even knew what area to fetch it from. The fix was really simple: I added another useEffect that ran whenever the area data was fully pushed to its useState or whenever the difficulty changed. Accomplishments The difficulty calculation works. It takes the EPA rank and area (points) rank for each team in an area, scales them in reverse order (in an area with 75 teams, 1st place gets 75 points all the way down to 75th place which gets 1 point), and averages the two new point values with a higher score making a team easier to guess. For example, if the user selects California in easy difficulty, the randomly selected team might be 4414 or 254 since their scores are much higher than most of the teams in their district. Next Steps I can finally get the actual guessing portion of FRCdle done (I know I’ve been saying this for several devlogs, but I will actually do it now).
Done With FRCdle (technically) Devlog #6 I’m finally finished with FRCdle (it took me way too long). Statbotics broke again so I’ve only been able to test with hardcoded data. I will go back and retest FRCdle once Statbotics is back up. Issues I really only faced one problem and that was my use effect refusing to fire again when I clicked on a button in the parent element. This use effect was supposed to reset FRCdle to its starting state and I fixed it by adding another use effect (fighting fire with fire here). Accomplishments The obvious one is that I finished FRCdle! The background colors for each cell in the table update based on how close the guess was to the randomly selected team. The text in each cell also indicates whether the guess was too high or too low where applicable. Next Steps I will be working on the robotics trivia portion of the app now. I’ll eventually come back and retest FRCdle when the Statbotics API is fixed (I hope it happens soon). edit : I just realized that if I wanted to circumvent the issue of Statbotics (or maybe even the Blue Alliance) API down, I could have new, changed data be pushed to a database, that way if either API goes down, the user will still be able to play albeit with potentially outdated data. My only issue with this is how annoying it was to host one of my past projects that used Firestore/Firebase (it took me around two weeks of constant debugging to get my backend properly hosted). This might be too big of an improvement to ignore though, so I might add a database. Should I stick with Firebase/Firestore or should I switch to another database like MongoDB or Supabase?
Rough Implementation of Supabase Devlog #7 I decided to implement Supabase due to how frequently the Statbotics API has been down recently. It also doubles as a place to store hundreds of trivia questions (I currently only have 40). Since Supabase is an SQL database, data within it is stored in tables, making it much more structured compared to No-SQL databases such as Firestore. Issue (and Solution) It took me much longer than it should have to get question filtering properly implemented for FRC trivia. Each question has a core category, era (time period), difficulty (easy, medium, or hard), and answer type (multiple choice, true or false, free response). Using the Supabase typescript .in() operator (used with the WHERE function in an SQL Editor), I can filter questions by their properties using .in() as a sort of shorthand for the logical OR operator. The issue with this is that .in() only accepts a string parameter (which is easy enough) and a parameter with the type (string | readonly | null)[] (which is the issue here). Since I’m getting my second parameter from req.query, my Express backend will automatically group duplicate queries into a string array. However, any queries that are not duplicated will be saved as a string instead of a string array (even if I try forcing it to be a string array by using as string[] ). This causes .in() to break since the second parameter has to be a string array. The fix here, which took me way too long to figure out, was to create a new variable for each query requirement and assign it a value depending on if the original requirement is an array or not. If the original requirement was an array, then the new variable will just be the exact same as the original requirement (since we need a string array anyways). On the other hand, if the original requirement wasn’t a string array already, we can just wrap the original requirement in brackets. To make sure the types of this new variable and the second parameter for .in() sufficiently overlap, we get the new variable as (string | null)[] . For example, const eras = (Array.isArray(era) ? era : [era]) as (string | null)[] . This ensures that eras will be a string array (or potentially null) and lets us use it within .in() . And now I can finally fetch questions from Supabase! Next Steps Get questions to show up on the frontend (that’s really it).
Finished FRC Trivia Devlog #8 It has been a while since my last devlog and I haven’t gotten too much done hours wise on this project (I’ve been busy with life). I did just finish FRC Trivia though! The Game FRC Trivia is exactly what it sounds like: the user is prompted with an FRC themed trivia question that they must attempt to answer correctly. Before the questions start rolling in, the user is prompted to select items from four different categories that will affect the questions they receive: the core category (general FIRST knowledge, events, awards, team), era/time period (historical, current, upcoming), difficulty (easy, medium, hard), and answer type (MCQ, FRQ, true or false). After selecting their preferred question categories, the correct questions will be fetched from Supabase and shown on the user’s screen. I haven’t added many questions yet (I have a grand total of 53) and most of them are Hall of Fame questions that I barely know anything about. Next Steps I really want to make sure FRCdle is working, but with the Statbotics API down, there’s not much I can really do with that. I could add modes to FRC Trivia (like lightning round) but that is a low priority. I will probably shift my attention to another FRC game.
I’ve Been Busy Devlog #9 It’s been way too long since my last devlog, but I’ve gotten a pretty decent amount of progress on my FRC clicker game! Progress I’ve modeled my game off of popular idle clicker games, with Cookie Clicker being my main inspiration. My game, just like Cookie Clicker, allows you to buy items such as motors and cameras (just like cursors and grandmas in Cookie Clicker) in return for more game pieces (the default is currently fuel and I plan on letting the user change which game piece from previous years they want). The prices for these items, like all clicker games, increases exponentially (around 1.2 to 1.3 times so far) while only promising linear gains. Cookie Clicker also has one-time upgrades that give permanent boosts to either your items or overall production. I have this too (though not many of them right now)! Annoying Little Thing Tooltips. They provide little bits of additional information as a sort of clarifier for what is presented before you. Creating them seemed deceptively easy. Make the child tooltip absolutely positioned in relation to your relatively positioned parent container and you’re all set, right? Wrong. The way my side bar/container is set up has the tooltip nested so far within divs that even if I were to apply the relative and absolute structure, the tooltip would be cut off by one of the ancestor divs. Literally all I had to do to fix this was not make the tooltip’s parent container relative (the tooltip is still absolute). I don’t fully know why this works, but I’m not complaining. Next Steps Get the next upgrades into FRC clicker. Also revisit FRCdle to get Supabase implemented for it (really only will happen once the Statbotics API is back up again).
FRCdle Again Devlog #10 THE STATBOTICS API IS BACK UP AGAIN (we’re so back). This means I can finally polish up FRCdle again. Big Improvement I finally got to implement Supabase into FRCdle just like I said I would do for a while now. I’d say this makes FRCdle more fault tolerant since Supabase acts as a backup for whenever either the Blue Alliance or Statbotics API is down (or both). Essentially what I’ve done is have the user fetch data from the two APIs whenever they want area and/or team data. If one or both of these requests fail, the request(s) will fall back to the Supabase backup where a version of the data is stored. This data updates every six hours only when a user actually requests for it. This has proven to be very beneficial as large area requests such as the request for all FRC team data or regional FRC team data tend to bounce back with API error codes. What about FRC Clicker? There’s not much to say about this for this devlog. I added a few more upgrades and items, but that’s really it. Next Steps Finish up FRC Clicker Get the last items done Get their corresponding one-time upgrades done
Done and Dusted Devlog #11 I’m finally done with this project (technically speaking). I hosted this project on Vercel which wasn’t as smooth as it should have been. The Hosting Process I ran into so many errors while hosting. WAY TOO MANY. Connecting my GitHub repository to Vercel was straightforward but everything else wasn’t at all. I first ran into build errors when pushing code to GitHub which would then get deployed to my Vercel project. If I remember correctly, the fix was to make sure Vercel tracked the correct root folder (my frontend folder in this case because that’s what it serves to the client side/frontend). After that, my website couldn’t access my Express backend. The fix to that was to have different URL fetch paths depending on whether I was running my code in my development environment or on Vercel. I believe I also had to change where my backend controller was mounted in Express (I had to add “/api” to the front of the path). My last issue was my static assets not loading while in production (they loaded just fine in development). The solution was found in my vercel.json file. I originally had a global catch all path that Vercel used to catch all frontend requests. This global path, however, caught requests that asked for my static assets, thereby not letting them appear on the frontend. Removing the global path and only having my backend redirect path solved this issue. That’s it! I will ship this project as soon as I get more questions into FRC Trivia!
I’m Promise I’m Done Now Devlog #12 I know I said I was done with this project in the last devlog, but I lied (I’m sorry). Why I Wasn’t Actually Finished The short answer is that I didn’t properly check my website (rookie mistake). The long answer is much more long-winded (obviously). After I fixed the issue of my static assets not showing up, I forgot to check whether FRCdle and FRC Trivia were working. Spoiler alert, they weren’t. Every time I tried fetching data from my backend, the request would always bounce back with a 404 server not found error because my backend wasn’t actually running. I eventually found that Vercel Services was a thing and tried using that to have both my Next.js frontend and Express backend run on the same project. Another spoiler alert, it didn’t work. I tried basically everything to get Vercel Services to work, but to no avail. Like before, my backend was never started by Vercel which caused requests to bounce back with a 404 error. Sometimes, I’d even have my frontend code not show up at all because Vercel would occasionally show a 404 no code error. After all this trial and error, I eventually decided to ditch Vercel Services in favor of hosting my backend on Render, a dedicated backend hosting service (my frontend is still on Vercel). Getting Render to work was so much easier than getting Vercel Services to work. It took me around half an hour to get up and running compared to probably over five hours to try and get Vercel Services running. The only potential issue with Render is that after 15 minutes of inactivity, the server “spins down” (becomes inactive) and takes around one minute to reactivate. Last Steps Get this project finally shipped! I still need to add more trivia questions (I haven’t added any since I found out that my backend fetches didn’t work). Feel free to check it out at fluxrobotics.vercel.app !
Ships:
This is a robotics game website built specifically for the FIRST Robotics Competition (FRC) community. It has three games: FRCdle (wordle), FRC trivia, and FRC clicker. FRCdle lets you choose the region and difficulty of the team you want to guess. FRC trivia is a trivia game that lets you filter questions based on a core category, time period, difficulty, and question type. Trivia will be getting more and more questions over time. FRC clicker is like any other clicker game out there (the most famous being Cookie Clicker): buy upgrades that scale exponentially in price in return for linear gains. This project took me a lot longer than I expected it to, so I really hope you enjoy this project!...
|
1792993693.0771954
|
1793080093.0771954
|
|
34039
|
World Engine by @NITHIN | Stardance
|
NITHIN
|
1
|
67.0
|
1092
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T16:42:55Z", "hours": 67.0, "multiplier": 16.4, "payout": 1092, "blessing": "neutral", "text": "World Engine is an immersive, high-fidelity 3D command center that completely transforms how we interact with global planetary telemetry. Built on a cutting-edge web architecture, it acts as a digital twin of Earth, featuring a breathtaking interactive holographic globe suspended within a sleek, deep-space obsidian interface. From tracking hyper-velocity orbital debris and live seismic fault lines to monitoring global aviation corridors and renewable energy grids, World Engine consolidates the planet's most critical data streams into a single, visually stunning cockpit. Beyond its gorgeous visualization layer, World Engine is powered by a groundbreaking AI Mission Commander that acts as your autonomous copilot. Instead of passively analyzing charts, you can deploy the AI Operator to proactively investigate emerging global events such as routing congestion in the Suez Canal or tracking atmospheric carbon anomalies and generate real-time, actionable risk assessments. It isn't just a dashboard; it's a living, breathing mission control deck designed to put the pulse of the entire planet right at your fingertips.", "repo": "https://github.com/Nithinfgs/World-Engine", "demo": "https://magenta-starship-a51964.netlify.app/"}]...
|
[{"post_id": 29576, "ts": "202 [{"post_id": 29576, "ts": "2026-07-16T16:40:26Z", "hours": 1.0, "text": "Added the readme project is fully done and ready to be shipped"}, {"post_id": 29527, "ts": "2026-07-16T14:49:35Z", "hours": 4.0, "text": "I am fully done with all the code have made the final push to github have added a netify link for the demo the only task left to complete is the readme file which i will soon complete"}, {"post_id": 29263, "ts": "2026-07-16T02:12:19Z", "hours": 7.0, "text": "I am fully done with the package.json file and have made the push to github if you want check it out and give me feedback."}, {"post_id": 29058, "ts": "2026-07-15T18:27:35Z", "hours": 8.0, "text": "Updated the project’s dependency lockfile by adding the latest Oxc Lint (v1.73.0) Linux ARM native bindings, including support for both arm-musleabihf and arm64-gnu architectures. The new packages are configured as optional, platform-specific dependencies with Node.js compatibility set to ^20.19.0 or >=22.12.0, ensuring only the appropriate binaries are installed on supported systems. This update improves cross-platform compatibility, keeps dependencies current, and helps maintain fast native linting performance on Linux ARM environments."}, {"post_id": 28658, "ts": "2026-07-15T01:29:42Z", "hours": 7.0, "text": "Working on the project today. I’m currently setting up and reviewing the project’s Node.js dependencies, checking the package-lock.json, and making sure the correct platform-specific packages are configured properly. The goal is to ensure everything installs correctly and the development environment is stable before moving on to the next stage. Another 15 or so hours and I will be done and will be pushing to github"}, {"post_id": 28452, "ts": "2026-07-14T18:18:07Z", "hours": 7.0, "text": "I am currently working on the project and have been focusing on setting up and configuring the development environment. A significant amount of progress has been made in establishing the project’s foundation, including configuring the TypeScript, React, and Vite development stack, as well as integrating the required libraries for 3D rendering and physics. This work provides a stable base for implementing the main functionality. Over the next phase of development, I will be concentrating on building the application’s core features, integrating the remaining components, and testing the system to ensure everything works as expected. Based on my current progress, I estimate that the project will require approximately 15–20 more hours of development to reach completion, provided I can dedicate that amount of focused time to the project."}, {"post_id": 28053, "ts": "2026-07-14T02:19:21Z", "hours": 8.0, "text": "Finished the index.html file and pushed the latest changes to GitHub. If you want to check out the progress, feel free to take a look at the repository.Next up: I’ll be working on the package.json file later today."}, {"post_id": 27769, "ts": "2026-07-13T16:46:25Z", "hours": 6.0, "text": "Continued development of the World Engine frontend interface. Implemented and refined the React-based sidebar responsible for managing world layers. The sidebar dynamically renders available layers from a configuration array, tracks active layer states, and allows users to toggle individual layers through interactive buttons. Worked on component structure, conditional styling using Tailwind CSS, event handling, and overall UI organization. Progress also included improving code readability and modularity in preparation for expanding additional world-generation features."}, {"post_id": 27507, "ts": "2026-07-13T04:07:59Z", "hours": 8.0, "text": "Half way through my index.html deciding on logos for each section will make the push to github later today"}, {"post_id": 27244, "ts": "2026-07-12T17:09:36Z", "hours": 3.0, "text": "Have just started on the index.html will create a github repo and add files to it tomorrow"}, {"post_id": 27148, "ts": "2026-07-12T13:20:53Z", "hours": 2.0, "text": "I have started working on World Engine. I began by setting up the project’s file structure and started building the index.html layout that will serve as the foundation for the entire application. Right now I’m focusing on creating a clean and scalable structure before implementing the core features. Once the initial layout and project structure are complete, I’ll be pushing everything to GitHub.World Engine is a real-time planetary intelligence platform that aims to create a living digital twin of Earth. The project brings together multiple real-world systems into a single interactive experience, allowing users to explore the planet through an immersive 3D globe while viewing live data from areas such as aviation, satellites, oceans, weather, geology, energy, internet infrastructure, cities, and global supply chains. It will also include AI-powered analysis that can combine different datasets to explain global events, detect patterns, and help users better understand how the world’s interconnected systems work together. My goal is to build a mission-control-style platform that transforms complex real-world data into an interactive and visually engaging experience."}]...
|
Title: World Engine by @NITHIN | Stardance
Devlog Title: World Engine by @NITHIN | Stardance
Devlogs:
I have started working on World Engine. I began by setting up the project’s file structure and started building the index.html layout that will serve as the foundation for the entire application. Right now I’m focusing on creating a clean and scalable structure before implementing the core features. Once the initial layout and project structure are complete, I’ll be pushing everything to GitHub.World Engine is a real-time planetary intelligence platform that aims to create a living digital twin of Earth. The project brings together multiple real-world systems into a single interactive experience, allowing users to explore the planet through an immersive 3D globe while viewing live data from areas such as aviation, satellites, oceans, weather, geology, energy, internet infrastructure, cities, and global supply chains. It will also include AI-powered analysis that can combine different datasets to explain global events, detect patterns, and help users better understand how the world’s interconnected systems work together. My goal is to build a mission-control-style platform that transforms complex real-world data into an interactive and visually engaging experience.
Have just started on the index.html will create a github repo and add files to it tomorrow
Half way through my index.html deciding on logos for each section will make the push to github later today
Continued development of the World Engine frontend interface. Implemented and refined the React-based sidebar responsible for managing world layers. The sidebar dynamically renders available layers from a configuration array, tracks active layer states, and allows users to toggle individual layers through interactive buttons. Worked on component structure, conditional styling using Tailwind CSS, event handling, and overall UI organization. Progress also included improving code readability and modularity in preparation for expanding additional world-generation features.
Finished the index.html file and pushed the latest changes to GitHub. If you want to check out the progress, feel free to take a look at the repository.Next up: I’ll be working on the package.json file later today.
I am currently working on the project and have been focusing on setting up and configuring the development environment. A significant amount of progress has been made in establishing the project’s foundation, including configuring the TypeScript, React, and Vite development stack, as well as integrating the required libraries for 3D rendering and physics. This work provides a stable base for implementing the main functionality. Over the next phase of development, I will be concentrating on building the application’s core features, integrating the remaining components, and testing the system to ensure everything works as expected. Based on my current progress, I estimate that the project will require approximately 15–20 more hours of development to reach completion, provided I can dedicate that amount of focused time to the project.
Working on the project today. I’m currently setting up and reviewing the project’s Node.js dependencies, checking the package-lock.json, and making sure the correct platform-specific packages are configured properly. The goal is to ensure everything installs correctly and the development environment is stable before moving on to the next stage. Another 15 or so hours and I will be done and will be pushing to github
Updated the project’s dependency lockfile by adding the latest Oxc Lint (v1.73.0) Linux ARM native bindings, including support for both arm-musleabihf and arm64-gnu architectures. The new packages are configured as optional, platform-specific dependencies with Node.js compatibility set to ^20.19.0 or >=22.12.0, ensuring only the appropriate binaries are installed on supported systems. This update improves cross-platform compatibility, keeps dependencies current, and helps maintain fast native linting performance on Linux ARM environments.
I am fully done with the package.json file and have made the push to github if you want check it out and give me feedback.
I am fully done with all the code have made the final push to github have added a netify link for the demo the only task left to complete is the readme file which i will soon complete
Added the readme project is fully done and ready to be shipped
Ships:
World Engine is an immersive, high-fidelity 3D command center that completely transforms how we interact with global planetary telemetry. Built on a cutting-edge web architecture, it acts as a digital twin of Earth, featuring a breathtaking interactive holographic globe suspended within a sleek, deep-space obsidian interface. From tracking hyper-velocity orbital debris and live seismic fault lines to monitoring global aviation corridors and renewable energy grids, World Engine consolidates the planet's most critical data streams into a single, visually stunning cockpit. Beyond its gorgeous visualization layer, World Engine is powered by a groundbreaking AI Mission Commander that acts as your autonomous copilot. Instead of passively analyzing charts, you can deploy the AI Operator to proactively investigate emerging global events such as routing congestion in the Suez Canal or tracking atmospheric carbon anomalies and generate real-time, actionable risk assessments. It isn't just a dashboard; it's a living, breathing mission control deck designed to put the pulse of the entire planet right at your fingertips....
|
1792882108.3512828
|
1793746108.3512828
|
|
36029
|
My Portfolio Website! by @iamcyrusdaniel | Stardan My Portfolio Website! by @iamcyrusdaniel | Stardance...
|
iamcyrusdaniel
|
1
|
67.0
|
403
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T14:52:44Z", "hours": 67.0, "multiplier": 6.12, "payout": 403, "blessing": "neutral", "text": "I made a portfolio website with absolutely no templates and vanilla JS, I made it because I really wanted to make a website where it’s as authentic as possible. It was honestly challenging when I ran into issues like when my bento box layout disappeared offscreen, but it felt great when I fixed it myself. I’m really proud of how this project came out, and I really enjoyed implementing all the features. There isn’t really any instructions in using my website, just explore and have fun! 🎉", "repo": "https://github.com/iamcyrusdaniel/my-website", "demo": "https://cyrus-personal-portfolio.netlify.app/"}]...
|
[{"post_id": 41318, "ts": "202 [{"post_id": 41318, "ts": "2026-08-05T13:44:24Z", "hours": 1.6453, "text": "Website Setup Complete! After tweaking some stuff and also adding responsiveness to the achievements, I can now host the website! This took surprisingly long since I had to figure out how to use certain files to make sure everything ended up on the hosted website, but in the end everything worked out :D"}, {"post_id": 41027, "ts": "2026-08-04T22:57:43Z", "hours": 0.4761, "text": "Finished I’ve finished my README and I’m finally done! Now if I make any changes it’s related to hosting"}, {"post_id": 40969, "ts": "2026-08-04T20:59:18Z", "hours": 10.5972, "text": "Devlog 8 | Finalization Welcome to my eighth devlog! This update, I’ve mostly focused on polishing things and making each page feel different (but not too different) from one another. I think I’m basically done at this point! 🎉 ✨ Visuals 🔍 Many Small Changes I’ve done a very large number of margin changes and padding changes so that everything looks nice and polished 🃏 Improved Responsiveness Some things kind of broke when shrunk still, and all of those situations (to my knowledge) are fixed! 🌗 Consistent Theme Styling Adjusted shadows and transitions so everything looks consistent in both light and dark mode 🔨 Polishing 💻 Improved Terminal Experience Made the terminal feel less boring by adding more interactability and polishing it further 🍱 Bento Box Layout Made a new bento box layout to replace the previous layout, making the page look nicer, and it’s responsive too! It collapses into a column on mobile. 🐞 Fixes 🧹 Even More CSS Cleanup At this point my CSS is completely cleaned up and the main change is that I’ve put 1 line of space between every single selector ➡️ Fixed Bento Box Disappearing Bento box stuff was disappearing when transitioning between mobile and desktop so I had to fix that by repainting the page 🥇 Fixed Achievements Mispositioning Achievements were centering themselves, in their boxes, which made them not line up, fixed it by removing the self-centering 🤔 What’s Left? 📚 README I actually have not touched the README since my first devlog, so I need to finish that up now 🔧 Host The Website This is my first time hosting a website, and it’s actually the only thing left other than the README Thanks for checking out my final major update! It doesn’t look like much, but some of these bugs such as the bento box bug ended up taking almost an hour. I now just need to test it, and put it up on Github Pages or something. For now, be ready for anything :P"}, {"post_id": 39152, "ts": "2026-08-01T21:29:48Z", "hours": 9.9492, "text": "Devlog 7 | Interaction Improvement Welcome to my seventh devlog! This update, I have made the website feel more interactive by adding achievements, and I’ve also added more personal details on the website ✨ Visuals 🃏 Improved Responsiveness As usual I’ve made some more tweaks and fixes to how the page’s responsiveness works, the timeline no longer clips through everything when resized vertically 👥 Shadow Consistency Previously I had a different shadow for light mode and dark mode, now they share the same type of shadow 🥇 Achievement Styling Using both CSS and JavaScript, uncompleted achievements are greyed out, while completed achievements are nice and opaque. Hovering shows a little description of the achievement as well 💯 Final Transition Changes Now everything has smooth transitions and I’m unlikely to change how it works now! 🔨 Features 🥇 Achievements Achievements are my newest addition to the site, each contain an image, and a short description, and now all I have to do is add more! 👨💻 Stylish Terminal Now there’s a stylish terminal where you can get a cool achievement :O 📁 More Statistics Usage By using pre-existing statistics I can make more achievements 🐞 Fixes 🧹 CSS Cleanup Had some repeated values that were cluttering the CSS that I’ve now removed ➡️ Fixed Timeline Made timeline not clip stuff when in vertical mode Thanks for checking out this update! This was a little more relaxed of an update. And as usual, there’s still more to improve, so be ready for the next devlog! 🚀"}, {"post_id": 37327, "ts": "2026-07-29T23:20:19Z", "hours": 9.1775, "text": "Devlog 6 | Design Overhaul Welcome to my sixth devlog! I’ve focused on improving the overall structure of the homepage and made navigation on the website feel more natural. ✨ Visuals 🃏 Cards Now the main text is contained within cards at the top of each page 🎨 Background Blobs Recolor While I liked the multi-colored background blobs, it didn’t have any main color so I’ve shifted to a green-blue-purple palette 📃 Menu Redesign The old menu was kind of janky and old looking, I now have a more personalized, modern menu 🏠 Homepage Upgrade Before, my homepage was simply just a small introduction, now I’ve made it more intuitive and understandable 📱 Responsive Adjustments Made more adjustments to page resizing to ensure stability on different size screens ⚖️ Two-Sided Navbar The navbar is now split between two halves, I prefer it like this since it adds a little bit more of my own personal flair :D 🔨 Features 📁 Better Page Organization Each page now has a distinct purpose and doesn’t contain duplicate content from other pages 🗺️ Navigation Improvements Added large navigation buttons on the homepage to encourage visitors to explore different sections of the site 🐞 Fixes 🧹 General Cleanup Had some weird structuring in the HTML that I fixed and made the CSS more concise 🔘 Fixed Button Alignment Originally the button alignment broke when shrunk in certain ways, now it doesn’t break anymore 📌 File Organization My CSS was overly modularized and specific, so I reorganized and reduced the CSS so that there’s roughly half as many files Thanks for checking out this update! This was the biggest design overhaul I’ve done so far, and I’m really happy with how the website is coming together. As always, there’s still more to improve, so stay tuned for the next devlog! 🚀"}, {"post_id": 35795, "ts": "2026-07-27T13:39:50Z", "hours": 9.0725, "text": "Devlog 5 | Almost done! (I hope) Welcome to my fifth devlog! I’ve now fixed many of the major bugs that were present in my code, modularized the CSS, and I’ve also started to make the site more pretty :D 🛠️ Features Who doesn’t like more features? 📊 Stats Now you can finally know how many times you toggled dark mode, or how much time you’ve spent on my website! 🕸️ CSS restructuring Now my files are nice and clean, all of them have been separated into modules and work flawlessly (for now) with each other! ✨ Visuals Here are the new visual updates! 💥 Fixed unstyled content flash Though it isn’t exactly a loading screen, it hides the flash of unstyled content! 🌊 Added a more subtle transition to visuals Now most things transition with a 0.25 second delay, it feels really smooth! 🎨 Added the colorful blob background to all pages I realized that it felt a little awkward with the extras page being the only page with a good looking background 🤔 What’s Left? Approaching the finish line! 🎉 Make the page look more entertaining Time for me to overhaul the entire styling of my project :D 👤 Add my own personal stuff! I still haven’t put my own details on the pages (there’s still placeholders) I really hope you enjoy my project :D"}, {"post_id": 33732, "ts": "2026-07-23T21:29:47Z", "hours": 10.1744, "text": "Devlog 4 | Mobile Support Welcome to my fourth devlog on my portfolio! This update has been focused on mobile support, and I’ve also made several changes to how the site adapts to different screen sizes 🛠️ Features All the cool new features! 📖 Timeline Text At first I wanted to make it so that when you click on the timeline, it would show each section, but I opted to show the section the user is currently hovering over. It makes the site feel more interactive! 🕸️ Restructured File System Before, I had literally just one JavaScript file and the same code copy pasted across every page, now I’ve modularized it into multiple files (still many bugs to fix though) ✨ Visuals Here are the new visual updates excluding mobile resizing 🌓 Dark Mode Transition Gradual color transitions make switching between dark mode and light mode easier on the eyes 🔽 Simplistic Footer I also added a footer that says Made by Cyrus • 2026 , it makes the site feel more professional 📱 Mobile Resizing Now my app is compatible with mobile! 😋 Hamburger Menu When the screen width is low, the menu collapses into a hamburger (the 3-line icon), and when clicked on, it shows a dropdown menu of the links 🟡 Timeline Text I implemented a mobile-friendly update to my timeline that transforms the page into a vertical layout when the page is shrunk What I’ve Learned 🔎 Media queries for adjustments based on screen size 🧱 Modularizing code so that maintenance and readability are improved 🍔 Awesome hamburger menu 💪 Using CSS flex for more complex use cases than centering 🤔 What’s Left? Surprisingly I’m almost done… 🐛 Fix all the bugs After modularizing the code, a lot of new bugs have been introduced that I need to fix 🎉 Make the page look more entertaining I’ve mostly worked on JavaScript animations and mobile support, I now need to make the styling itself look better Add my own personal stuff! I still haven’t put my own details on the pages (there’s still placeholders) Thanks for reading my devlog! The first image is the hamburger menu, and the second image shows the new modularized file system."}, {"post_id": 32401, "ts": "2026-07-21T15:41:26Z", "hours": 3.0122, "text": "Animations Update! I have added more animations as it makes the website more entertaining! All the changes are in the demo for those of you who want to see it in action :D ⌨️ Typing Animation I added a script to make the title look as though it is being typed out! 📏 Navigation Bar Size Limit Now the navbar doesn’t take up the entire screen width in the scenario the screen is big as it made it a little difficult to use 🌌 Background Text Visibility Fix I had an issue with the background on the extras page blocking visibility, I’ve fixed this by adding a translucent background on the page and I’m quite proud of it! ⭐ Button/Link Glow Awesome glow effect on links and buttons Timeline Transition Timeline dots appear smoothly after one another Spinning Dark Mode Button By using JavaScript and CSS animations I was able to create a cool spin effect when clicking the dark mode button Thanks for reading my devlog, feedback is appreciated!"}, {"post_id": 31885, "ts": "2026-07-20T17:10:23Z", "hours": 4.9722, "text": "Devlog 2 | Dark Mode Hey everyone! This is my second devlog, and this time I’ve added my biggest feature, dark mode. It saves your preference of light/dark mode using localStorage so you don’t have to keep switching back to your preference every time you go to a different section. I’ve also added a lava lamp-like background to the new page “Extras”. If you haven’t read my first devlog, I’ve made a portfolio website with HTML, CSS, and JavaScript! It’s a website to showcase my skills and background. Other than that I’ve fixed the navbar not being flush with the corners of the page. Overall I’m content with my progress! Please give me any suggestions I’d greatly appreciate it ❤️"}, {"post_id": 31351, "ts": "2026-07-19T17:51:24Z", "hours": 7.5419, "text": "My Own Portfolio Welcome to my first devlog! This project is a personal portfolio website that I’m currently building to introduce myself and showcase my development skills. So far, I’ve implemented an animated timeline, JavaScript particle effects, page transitions, and other interactive features. I’ve had a lot of fun building it, and I really hope you enjoy checking out this project! Features 🏠 Multi-page website with navigation ✨ Page loading transition 🎲 Random welcome messages with repetition prevention using session storage 🎉 Click particle effects created with JavaScript 📅 Interactive timeline with hover animations 🎨 Custom styling using CSS animations and transitions Built with HTML CSS JavaScript Vite What I Learned Structuring a multi-page website Using sessionStorage Creating animations using requestAnimationFrame Making loading screens to hide flashes of unstyled content What’s Left? Remove placeholder text from pages Improve animations and transitions Make the site more interactive Make the portfolio more personal to me Hope you like it :D"}]...
|
Title: My Portfolio Website! by @iamcyrusdaniel | Title: My Portfolio Website! by @iamcyrusdaniel | Stardance
Devlogs:
My Own Portfolio Welcome to my first devlog! This project is a personal portfolio website that I’m currently building to introduce myself and showcase my development skills. So far, I’ve implemented an animated timeline, JavaScript particle effects, page transitions, and other interactive features. I’ve had a lot of fun building it, and I really hope you enjoy checking out this project! Features 🏠 Multi-page website with navigation ✨ Page loading transition 🎲 Random welcome messages with repetition prevention using session storage 🎉 Click particle effects created with JavaScript 📅 Interactive timeline with hover animations 🎨 Custom styling using CSS animations and transitions Built with HTML CSS JavaScript Vite What I Learned Structuring a multi-page website Using sessionStorage Creating animations using requestAnimationFrame Making loading screens to hide flashes of unstyled content What’s Left? Remove placeholder text from pages Improve animations and transitions Make the site more interactive Make the portfolio more personal to me Hope you like it :D
Devlog 2 | Dark Mode Hey everyone! This is my second devlog, and this time I’ve added my biggest feature, dark mode. It saves your preference of light/dark mode using localStorage so you don’t have to keep switching back to your preference every time you go to a different section. I’ve also added a lava lamp-like background to the new page “Extras”. If you haven’t read my first devlog, I’ve made a portfolio website with HTML, CSS, and JavaScript! It’s a website to showcase my skills and background. Other than that I’ve fixed the navbar not being flush with the corners of the page. Overall I’m content with my progress! Please give me any suggestions I’d greatly appreciate it ❤️
Animations Update! I have added more animations as it makes the website more entertaining! All the changes are in the demo for those of you who want to see it in action :D ⌨️ Typing Animation I added a script to make the title look as though it is being typed out! 📏 Navigation Bar Size Limit Now the navbar doesn’t take up the entire screen width in the scenario the screen is big as it made it a little difficult to use 🌌 Background Text Visibility Fix I had an issue with the background on the extras page blocking visibility, I’ve fixed this by adding a translucent background on the page and I’m quite proud of it! ⭐ Button/Link Glow Awesome glow effect on links and buttons Timeline Transition Timeline dots appear smoothly after one another Spinning Dark Mode Button By using JavaScript and CSS animations I was able to create a cool spin effect when clicking the dark mode button Thanks for reading my devlog, feedback is appreciated!
Devlog 4 | Mobile Support Welcome to my fourth devlog on my portfolio! This update has been focused on mobile support, and I’ve also made several changes to how the site adapts to different screen sizes 🛠️ Features All the cool new features! 📖 Timeline Text At first I wanted to make it so that when you click on the timeline, it would show each section, but I opted to show the section the user is currently hovering over. It makes the site feel more interactive! 🕸️ Restructured File System Before, I had literally just one JavaScript file and the same code copy pasted across every page, now I’ve modularized it into multiple files (still many bugs to fix though) ✨ Visuals Here are the new visual updates excluding mobile resizing 🌓 Dark Mode Transition Gradual color transitions make switching between dark mode and light mode easier on the eyes 🔽 Simplistic Footer I also added a footer that says Made by Cyrus • 2026 , it makes the site feel more professional 📱 Mobile Resizing Now my app is compatible with mobile! 😋 Hamburger Menu When the screen width is low, the menu collapses into a hamburger (the 3-line icon), and when clicked on, it shows a dropdown menu of the links 🟡 Timeline Text I implemented a mobile-friendly update to my timeline that transforms the page into a vertical layout when the page is shrunk What I’ve Learned 🔎 Media queries for adjustments based on screen size 🧱 Modularizing code so that maintenance and readability are improved 🍔 Awesome hamburger menu 💪 Using CSS flex for more complex use cases than centering 🤔 What’s Left? Surprisingly I’m almost done… 🐛 Fix all the bugs After modularizing the code, a lot of new bugs have been introduced that I need to fix 🎉 Make the page look more entertaining I’ve mostly worked on JavaScript animations and mobile support, I now need to make the styling itself look better Add my own personal stuff! I still haven’t put my own details on the pages (there’s still placeholders) Thanks for reading my devlog! The first image is the hamburger menu, and the second image shows the new modularized file system.
Devlog 5 | Almost done! (I hope) Welcome to my fifth devlog! I’ve now fixed many of the major bugs that were present in my code, modularized the CSS, and I’ve also started to make the site more pretty :D 🛠️ Features Who doesn’t like more features? 📊 Stats Now you can finally know how many times you toggled dark mode, or how much time you’ve spent on my website! 🕸️ CSS restructuring Now my files are nice and clean, all of them have been separated into modules and work flawlessly (for now) with each other! ✨ Visuals Here are the new visual updates! 💥 Fixed unstyled content flash Though it isn’t exactly a loading screen, it hides the flash of unstyled content! 🌊 Added a more subtle transition to visuals Now most things transition with a 0.25 second delay, it feels really smooth! 🎨 Added the colorful blob background to all pages I realized that it felt a little awkward with the extras page being the only page with a good looking background 🤔 What’s Left? Approaching the finish line! 🎉 Make the page look more entertaining Time for me to overhaul the entire styling of my project :D 👤 Add my own personal stuff! I still haven’t put my own details on the pages (there’s still placeholders) I really hope you enjoy my project :D
Devlog 6 | Design Overhaul Welcome to my sixth devlog! I’ve focused on improving the overall structure of the homepage and made navigation on the website feel more natural. ✨ Visuals 🃏 Cards Now the main text is contained within cards at the top of each page 🎨 Background Blobs Recolor While I liked the multi-colored background blobs, it didn’t have any main color so I’ve shifted to a green-blue-purple palette 📃 Menu Redesign The old menu was kind of janky and old looking, I now have a more personalized, modern menu 🏠 Homepage Upgrade Before, my homepage was simply just a small introduction, now I’ve made it more intuitive and understandable 📱 Responsive Adjustments Made more adjustments to page resizing to ensure stability on different size screens ⚖️ Two-Sided Navbar The navbar is now split between two halves, I prefer it like this since it adds a little bit more of my own personal flair :D 🔨 Features 📁 Better Page Organization Each page now has a distinct purpose and doesn’t contain duplicate content from other pages 🗺️ Navigation Improvements Added large navigation buttons on the homepage to encourage visitors to explore different sections of the site 🐞 Fixes 🧹 General Cleanup Had some weird structuring in the HTML that I fixed and made the CSS more concise 🔘 Fixed Button Alignment Originally the button alignment broke when shrunk in certain ways, now it doesn’t break anymore 📌 File Organization My CSS was overly modularized and specific, so I reorganized and reduced the CSS so that there’s roughly half as many files Thanks for checking out this update! This was the biggest design overhaul I’ve done so far, and I’m really happy with how the website is coming together. As always, there’s still more to improve, so stay tuned for the next devlog! 🚀
Devlog 7 | Interaction Improvement Welcome to my seventh devlog! This update, I have made the website feel more interactive by adding achievements, and I’ve also added more personal details on the website ✨ Visuals 🃏 Improved Responsiveness As usual I’ve made some more tweaks and fixes to how the page’s responsiveness works, the timeline no longer clips through everything when resized vertically 👥 Shadow Consistency Previously I had a different shadow for light mode and dark mode, now they share the same type of shadow 🥇 Achievement Styling Using both CSS and JavaScript, uncompleted achievements are greyed out, while completed achievements are nice and opaque. Hovering shows a little description of the achievement as well 💯 Final Transition Changes Now everything has smooth transitions and I’m unlikely to change how it works now! 🔨 Features 🥇 Achievements Achievements are my newest addition to the site, each contain an image, and a short description, and now all I have to do is add more! 👨💻 Stylish Terminal Now there’s a stylish terminal where you can get a cool achievement :O 📁 More Statistics Usage By using pre-existing statistics I can make more achievements 🐞 Fixes 🧹 CSS Cleanup Had some repeated values that were cluttering the CSS that I’ve now removed ➡️ Fixed Timeline Made timeline not clip stuff when in vertical mode Thanks for checking out this update! This was a little more relaxed of an update. And as usual, there’s still more to improve, so be ready for the next devlog! 🚀
Devlog 8 | Finalization Welcome to my eighth devlog! This update, I’ve mostly focused on polishing things and making each page feel different (but not too different) from one another. I think I’m basically done at this point! 🎉 ✨ Visuals 🔍 Many Small Changes I’ve done a very large number of margin changes and padding changes so that everything looks nice and polished 🃏 Improved Responsiveness Some things kind of broke when shrunk still, and all of those situations (to my knowledge) are fixed! 🌗 Consistent Theme Styling Adjusted shadows and transitions so everything looks consistent in both light and dark mode 🔨 Polishing 💻 Improved Terminal Experience Made the terminal feel less boring by adding more interactability and polishing it further 🍱 Bento Box Layout Made a new bento box layout to replace the previous layout, making the page look nicer, and it’s responsive too! It collapses into a column on mobile. 🐞 Fixes 🧹 Even More CSS Cleanup At this point my CSS is completely cleaned up and the main change is that I’ve put 1 line of space between every single selector ➡️ Fixed Bento Box Disappearing Bento box stuff was disappearing when transitioning between mobile and desktop so I had to fix that by repainting the page 🥇 Fixed Achievements Mispositioning Achievements were centering themselves, in their boxes, which made them not line up, fixed it by removing the self-centering 🤔 What’s Left? 📚 README I actually have not touched the README since my first devlog, so I need to finish that up now 🔧 Host The Website This is my first time hosting a website, and it’s actually the only thing left other than the README Thanks for checking out my final major update! It doesn’t look like much, but some of these bugs such as the bento box bug ended up taking almost an hour. I now just need to test it, and put it up on Github Pages or something. For now, be ready for anything :P
Finished I’ve finished my README and I’m finally done! Now if I make any changes it’s related to hosting
Website Setup Complete! After tweaking some stuff and also adding responsiveness to the achievements, I can now host the website! This took surprisingly long since I had to figure out how to use certain files to make sure everything ended up on the hosted website, but in the end everything worked out :D
Ships:
I made a portfolio website with absolutely no templates and vanilla JS, I made it because I really wanted to make a website where it’s as authentic as possible. It was honestly challenging when I ran into issues like when my bento box layout disappeared offscreen, but it felt great when I fixed it myself. I’m really proud of how this project came out, and I really enjoyed implementing all the features. There isn’t really any instructions in using my website, just explore and have fun! 🎉...
|
1793054963.635549
|
1793141363.635549
|
|
40933
|
OmoriOS by @aeroghurt | Stardance
|
aeroghurt
|
1
|
67.0
|
648
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-23T12:15:17Z", "hours": 67.0, "multiplier": 10.88, "payout": 648, "blessing": "neutral", "text": "link: https://aeroghurt.github.io/omori-os/ alternatively, clone the repo to your device and open index.html I made an Omori-themed webOS :D You can walk around, interact with things, rpg-style, dialogue and all that, just like in the real game (though I only made white space since I didn’t want to go through the pain of reading all those lines of code again). (It also isn’t the most accurate sorry) It’s my first time ever making anything with html canvas, and it was one heck of a ride. Writing game loops, animation code and all of that was really challenging since I was used to having it as a feature in game engines. HOW TO INTERACT: WASD to move Z to interact Arrow keys to select options Z again to confirm said options FEATURES: sketchbook! draw to your heart’s desire mewo pet simulator. who doesn’t love mewo journal :D write whatever secrets inside. saves automatically. may or may not have a jumpscare somewhere inside…", "repo": "https://github.com/aeroghurt/omori-os", "demo": "https://aeroghurt.github.io/omori-os/"}]...
|
[{"post_id": 50252, "ts": "202 [{"post_id": 50252, "ts": "2026-08-19T12:24:29Z", "hours": 17.5164, "text": "OmoriOS devlog #7 It’s been a LIFETIME, it feels like, since I’ve posted another one of these. And I have my slow ahh wifi to blame for this >:/ (partial lie #1) . 17 hours!?!? what happened !?!?!?!?!?? I kept telling myself, “I’ll just finish this up and ship this… I don’t feel like writing anything…” And, well, here we are (Don’t worry I’m shipping this someplace else) what happened in that timeframe? I’ve made a BUNCH of changes, including but not limited to: The journal is functional now! It uses localStorage to save your created journals. And apparently, I fixed the overflow issue by changing the max-height to use the cqw unit instead of percentage, which, by the way, is a lifesaver!!! . i HATE myself i spent an hour trying to fix this bug where I couldn’t interact with something more than once, and then I realised I’d misspelled the variable… (eff you Javascript) there was another bug where I couldn’t select anything (except buttons) on an element which was draggable. Until I was introduced to the humble, amazing, perfect, gorgeous, divine, sublime stopPropagation() method!!! I also combined all my .js files into one single file to save me from more headaches in the future (highkey should have done this before) I was planning to make the sketchbook something like WigglyPaint, tried it, then gave up cuz I GENUINELY do not know how to make something of that vein. deleting entries in the journal actually created MORE entries for some reason what the hell also probably 10,000 more minor bug fixes idfr anymore sorry the self-destruct button doesn’t do anything cool :/ bye bye im gonna self-destruct now too that self-introduction sucks yeah ik mb"}, {"post_id": 46215, "ts": "2026-08-13T09:20:44Z", "hours": 9.5517, "text": "OmoriOS devlog #6 Now, for the (arguably) most important part of all – MEWO!! who is mewo??? The lil cat in the corner. Yes I finally added the animation for her that was due, like, 4 dev logs ago. Idk if that’s her breathing or her just dancing while snoozing, but it could be both. and?? Now we, yes WE , can use the tissues to wipe our sorrows away. I’m not sure what kind of app I want to tissues to be, if you guys have any ideas then feel free to comment down below (i sound like a ytuber ) and????? I added a mini taking-care-of-Mewo-simulator. Or something like that. I got the idea from those Tamagotchi thingumabobs (even though I’ve never owned one), and decided it would be cute to put one into my webOS as well. Right now it’s a little rough, and definitely not fun to play at all. I might add a shop to buy food, but who knows… the text is blocking the lower half of the screen… SSHHHHHHH. I’ll keep it that way. (not because I’m too lazy to fix it) Just imagine it isn’t :D that does NOT look like salmon i know, sue me unrelated but PARROT POSTED!!! AND THE VIDEO IS 2 HRS LONG YAYYYYYY HOLY SHIZ SPOKE POSTED TOO AHHHH parrot try-not-to-create-another-building-a-civilisation-video challenge (IMPOSSIBLE) GO!!!"}, {"post_id": 44628, "ts": "2026-08-10T15:03:01Z", "hours": 10.1158, "text": "OmoriOS devlog #5 Wow i might have lied. It certainly hasn’t only been a day or two. I know this isn’t going to seem like a lot changed since my previous dev log, but heck, I’ve fixed a LOT of bugs. And I decided it was better to fix them now instead of letting the problem marinate. why the heck do you have so many problems??? While writing the code, I ignored a lot of naming conventions, which uh, might have caused me a bit of trouble. (lie #7 or smth I forgot that much alr) Also, since I had so many html elements, making the ones I needed visible and invisible at different times was a pain in the butt. what bugs? fatal: -interacting with the laptop twice would not show anything -exiting the laptop was impossible (since z is for exiting and interacting at the same time save me it took so long to fix it ) -conditionals would not reset after exiting (THERE WERE CONFLICTING STATEMENTS IN THE CODE I HATE LIFE) minor inconveniences: -two instances of the same would appear for seemingly no reason (turns out it was cuz i didn’t delete them after they became redundant) -some elements were still on the screen after I had EXPLICITLY told them to stay away (THERE WERE MORE CONFLICTING STATEMENTS IN THE CODE!!!) what now?????? I WILL add more interactive objects soon, I promise. I swear. I vow. And I WILL add games. I promise. I swear. I vow. Can you guys handle jumpscares? got a question for you all HOW THE HECK DO YOU GUYS CODE SO FAST. LIKE WDYM YOU CAN PUMP OUT THAT MANY FEATURES IN A FEW HOURS. I WAS JUST DEBUGGING AND CLEANING UP CODE FOR 9 HOURS. AM I JUST INCOMPETENT??? yeah i gotta fix the clock ik but now you can interact with it infinitely :DD without any problems :DDDDD"}, {"post_id": 42527, "ts": "2026-08-07T10:10:46Z", "hours": 8.8656, "text": "OmoriOS devlog #4 I hate to break it to you all, but I may have to switch to only WASD for movement… Because debugging states is HELL on earth and to spare my sanity, I decided arrow keys will be for selection ONLY instead of using it for movement as well. Does anyone actually care which is which? Ehhhh… probably not. But it’s farther from the original game now. what else is new¿?¿? Now the typing animation works!! YAYYAYAY ok but i legit spent 4 hours trying to make it work cuz the same instance of words kept popping up even though i told it NOT to (that was my fault i didn’t know what i was doing my code is a mess D:) Ah yeah, the clock works too, it doesn’t just say 0:00 AM. and??? On to the sketchbook next, and then mewo, and then the box of tissues to wipe our, yes OUR, sorrows away, and then the lightbulb of eternal darkness. Will design the sketchbook layout mayyybe 2 days from now. (And no, the door will NOT work. We are stuck here forever now.) (ignore how there’s a random floating hand, i don’t know how to get rid of it :/)"}, {"post_id": 41767, "ts": "2026-08-06T05:12:29Z", "hours": 8.9561, "text": "OmoriOS devlog #3 what’s taking you so long?????? Well, you see, I kind of spent, like, 3 whole hours trying to get collision to work. (It did not work and all my effort was for nothing.) cut to the chase already oookay, okay, after the disastrous trying-to-get-collision-to-work incident, I spent my 6 hours making a very pretty one-on-one replica of Omori’s laptop (lie #7 it does NOT look that pretty nor similar) . I also made them draggable cuz the mission requires it. I think. Also the arrow hands move back-and-forth :DDD what’s next?????????? (asked no one, ever) I’m trying to get the typewriter effect to work, as well as making the options interactable with the Z key. But if I get too frustrated I might just change it to a button click idk ask my future self. I’m trying to get it as close to the OG game as possible but I’m not that locked in. (lie #8 or smth i lost track)"}, {"post_id": 40150, "ts": "2026-08-03T15:35:11Z", "hours": 8.6781, "text": "OmoriOS devlog #2 It’s been a while! And I’ve been meaning to write this dev log for DAYS but I didn’t get around to writing it cuz I had to go on a trip, so all my time accumulated :/ Sooo what’s new? Turns out, I just had to clear the canvas every frame to fix the bug. I added all the sprites in the original White Space cuz I forgot to add them before (whoops 0.o) and I tried to animate them as close as possible to the original using Aseprite but I don’t think it’s THAT close since I was just measuring with my eyes. I also added WASD for movement along with up down left right arrows, because for some reason the original game uses arrow keys and that threw me off and I didn’t like it. I also tried adding a character camera to follow Omori around but I decided I didn’t like it (totally not because i couldnt find what was wrong w the code :p) What next????????? I want to add more app icons as sprites even though they’re not in the game because I think that’s the most intuitive way to go about an OS like this. It IS my project after all :D Also change some of the functionality, like the notebook could be a lil doodling app It looks a little off… Shhhhh mewo is right where it needs to be :) No seriously though, mewo did not have enough space so i had to nudge it a lil further up"}, {"post_id": 37525, "ts": "2026-07-30T10:29:12Z", "hours": 3.4906, "text": "OmoriOS devlog #1 You see, there’s been a recurring theme in my projects, and that is, surprise surprise– recreating my favourite stuff but in my own style. WHAT IS THIS ABOUT?????????? Basically I’m creating a web OS in the style of Omori. Everyone knows it. You know it. But I thought it would be a pretty cool to challenge myself. I’m pretty tired of all of my projects either being web or game dev, but you know what I haven’t tried? HTML canvas. Yes I am never getting out of the web dev hellhole WHAT DID YOU DO??? As of now, I’ve only added the sprites and some character movement. It was pretty odd realizing how features I’ve never spared a second glance at in Godot would turn out to be the very code I’m writing right now. what even is that ss I’m following this really cool 2 hour tutorial but midway I found this insane bug that would just let me paint the whole canvas black wherever Omori walked, much like those painting games. so what do you want to do with this?????? I plan to make white space the landing page, or welcome screen– whatever you call it. There will be various icons from Omori that will act as application icons, where you will be able to walk to and press Z to interact with (just like in the game!) It’s my own twist to this mission. why do you talk like that???? But that’s all for now, have a decent day. Excuse my innate ability to yap."}]...
|
Title: OmoriOS by @aeroghurt | Stardance
Devlogs: Title: OmoriOS by @aeroghurt | Stardance
Devlogs:
OmoriOS devlog #1 You see, there’s been a recurring theme in my projects, and that is, surprise surprise– recreating my favourite stuff but in my own style. WHAT IS THIS ABOUT?????????? Basically I’m creating a web OS in the style of Omori. Everyone knows it. You know it. But I thought it would be a pretty cool to challenge myself. I’m pretty tired of all of my projects either being web or game dev, but you know what I haven’t tried? HTML canvas. Yes I am never getting out of the web dev hellhole WHAT DID YOU DO??? As of now, I’ve only added the sprites and some character movement. It was pretty odd realizing how features I’ve never spared a second glance at in Godot would turn out to be the very code I’m writing right now. what even is that ss I’m following this really cool 2 hour tutorial but midway I found this insane bug that would just let me paint the whole canvas black wherever Omori walked, much like those painting games. so what do you want to do with this?????? I plan to make white space the landing page, or welcome screen– whatever you call it. There will be various icons from Omori that will act as application icons, where you will be able to walk to and press Z to interact with (just like in the game!) It’s my own twist to this mission. why do you talk like that???? But that’s all for now, have a decent day. Excuse my innate ability to yap.
OmoriOS devlog #2 It’s been a while! And I’ve been meaning to write this dev log for DAYS but I didn’t get around to writing it cuz I had to go on a trip, so all my time accumulated :/ Sooo what’s new? Turns out, I just had to clear the canvas every frame to fix the bug. I added all the sprites in the original White Space cuz I forgot to add them before (whoops 0.o) and I tried to animate them as close as possible to the original using Aseprite but I don’t think it’s THAT close since I was just measuring with my eyes. I also added WASD for movement along with up down left right arrows, because for some reason the original game uses arrow keys and that threw me off and I didn’t like it. I also tried adding a character camera to follow Omori around but I decided I didn’t like it (totally not because i couldnt find what was wrong w the code :p) What next????????? I want to add more app icons as sprites even though they’re not in the game because I think that’s the most intuitive way to go about an OS like this. It IS my project after all :D Also change some of the functionality, like the notebook could be a lil doodling app It looks a little off… Shhhhh mewo is right where it needs to be :) No seriously though, mewo did not have enough space so i had to nudge it a lil further up
OmoriOS devlog #3 what’s taking you so long?????? Well, you see, I kind of spent, like, 3 whole hours trying to get collision to work. (It did not work and all my effort was for nothing.) cut to the chase already oookay, okay, after the disastrous trying-to-get-collision-to-work incident, I spent my 6 hours making a very pretty one-on-one replica of Omori’s laptop (lie #7 it does NOT look that pretty nor similar) . I also made them draggable cuz the mission requires it. I think. Also the arrow hands move back-and-forth :DDD what’s next?????????? (asked no one, ever) I’m trying to get the typewriter effect to work, as well as making the options interactable with the Z key. But if I get too frustrated I might just change it to a button click idk ask my future self. I’m trying to get it as close to the OG game as possible but I’m not that locked in. (lie #8 or smth i lost track)
OmoriOS devlog #4 I hate to break it to you all, but I may have to switch to only WASD for movement… Because debugging states is HELL on earth and to spare my sanity, I decided arrow keys will be for selection ONLY instead of using it for movement as well. Does anyone actually care which is which? Ehhhh… probably not. But it’s farther from the original game now. what else is new¿?¿? Now the typing animation works!! YAYYAYAY ok but i legit spent 4 hours trying to make it work cuz the same instance of words kept popping up even though i told it NOT to (that was my fault i didn’t know what i was doing my code is a mess D:) Ah yeah, the clock works too, it doesn’t just say 0:00 AM. and??? On to the sketchbook next, and then mewo, and then the box of tissues to wipe our, yes OUR, sorrows away, and then the lightbulb of eternal darkness. Will design the sketchbook layout mayyybe 2 days from now. (And no, the door will NOT work. We are stuck here forever now.) (ignore how there’s a random floating hand, i don’t know how to get rid of it :/)
OmoriOS devlog #5 Wow i might have lied. It certainly hasn’t only been a day or two. I know this isn’t going to seem like a lot changed since my previous dev log, but heck, I’ve fixed a LOT of bugs. And I decided it was better to fix them now instead of letting the problem marinate. why the heck do you have so many problems??? While writing the code, I ignored a lot of naming conventions, which uh, might have caused me a bit of trouble. (lie #7 or smth I forgot that much alr) Also, since I had so many html elements, making the ones I needed visible and invisible at different times was a pain in the butt. what bugs? fatal: -interacting with the laptop twice would not show anything -exiting the laptop was impossible (since z is for exiting and interacting at the same time save me it took so long to fix it ) -conditionals would not reset after exiting (THERE WERE CONFLICTING STATEMENTS IN THE CODE I HATE LIFE) minor inconveniences: -two instances of the same would appear for seemingly no reason (turns out it was cuz i didn’t delete them after they became redundant) -some elements were still on the screen after I had EXPLICITLY told them to stay away (THERE WERE MORE CONFLICTING STATEMENTS IN THE CODE!!!) what now?????? I WILL add more interactive objects soon, I promise. I swear. I vow. And I WILL add games. I promise. I swear. I vow. Can you guys handle jumpscares? got a question for you all HOW THE HECK DO YOU GUYS CODE SO FAST. LIKE WDYM YOU CAN PUMP OUT THAT MANY FEATURES IN A FEW HOURS. I WAS JUST DEBUGGING AND CLEANING UP CODE FOR 9 HOURS. AM I JUST INCOMPETENT??? yeah i gotta fix the clock ik but now you can interact with it infinitely :DD without any problems :DDDDD
OmoriOS devlog #6 Now, for the (arguably) most important part of all – MEWO!! who is mewo??? The lil cat in the corner. Yes I finally added the animation for her that was due, like, 4 dev logs ago. Idk if that’s her breathing or her just dancing while snoozing, but it could be both. and?? Now we, yes WE , can use the tissues to wipe our sorrows away. I’m not sure what kind of app I want to tissues to be, if you guys have any ideas then feel free to comment down below (i sound like a ytuber ) and????? I added a mini taking-care-of-Mewo-simulator. Or something like that. I got the idea from those Tamagotchi thingumabobs (even though I’ve never owned one), and decided it would be cute to put one into my webOS as well. Right now it’s a little rough, and definitely not fun to play at all. I might add a shop to buy food, but who knows… the text is blocking the lower half of the screen… SSHHHHHHH. I’ll keep it that way. (not because I’m too lazy to fix it) Just imagine it isn’t :D that does NOT look like salmon i know, sue me unrelated but PARROT POSTED!!! AND THE VIDEO IS 2 HRS LONG YAYYYYYY HOLY SHIZ SPOKE POSTED TOO AHHHH parrot try-not-to-create-another-building-a-civilisation-video challenge (IMPOSSIBLE) GO!!!
OmoriOS devlog #7 It’s been a LIFETIME, it feels like, since I’ve posted another one of these. And I have my slow ahh wifi to blame for this >:/ (partial lie #1) . 17 hours!?!? what happened !?!?!?!?!?? I kept telling myself, “I’ll just finish this up and ship this… I don’t feel like writing anything…” And, well, here we are (Don’t worry I’m shipping this someplace else) what happened in that timeframe? I’ve made a BUNCH of changes, including but not limited to: The journal is functional now! It uses localStorage to save your created journals. And apparently, I fixed the overflow issue by changing the max-height to use the cqw unit instead of percentage, which, by the way, is a lifesaver!!! . i HATE myself i spent an hour trying to fix this bug where I couldn’t interact with something more than once, and then I realised I’d misspelled the variable… (eff you Javascript) there was another bug where I couldn’t select anything (except buttons) on an element which was draggable. Until I was introduced to the humble, amazing, perfect, gorgeous, divine, sublime stopPropagation() method!!! I also combined all my .js files into one single file to save me from more headaches in the future (highkey should have done this before) I was planning to make the sketchbook something like WigglyPaint, tried it, then gave up cuz I GENUINELY do not know how to make something of that vein. deleting entries in the journal actually created MORE entries for some reason what the hell also probably 10,000 more minor bug fixes idfr anymore sorry the self-destruct button doesn’t do anything cool :/ bye bye im gonna self-destruct now too that self-introduction sucks yeah ik mb
Ships:
link: https://aeroghurt.github.io/omori-os/ alternatively, clone the repo to your device and open index.html I made an Omori-themed webOS :D You can walk around, interact with things, rpg-style, dialogue and all that, just like in the real game (though I only made white space since I didn’t want to go through the pain of reading all those lines of code again). (It also isn’t the most accurate sorry) It’s my first time ever making anything with html canvas, and it was one heck of a ride. Writing game loops, animation code and all of that was really challenging since I was used to having it as a feature in game engines. HOW TO INTERACT: WASD to move Z to interact Arrow keys to select options Z again to confirm said options FEATURES: sketchbook! draw to your heart’s desire mewo pet simulator. who doesn’t love mewo journal :D write whatever secrets inside. saves automatically. may or may not have a jumpscare somewhere inside…...
|
1793051456.3550222
|
1793137856.3550222
|
|
2563
|
1600.now by @cookie | Stardance
|
cookie
|
0
|
66.99
|
0
|
[]
|
[{"post_id": 6086, "ts": "2026 [{"post_id": 6086, "ts": "2026-06-10T07:25:19Z", "hours": 13.1714, "text": "it’s been a while since i’ve posted a devlog, well anyways, let me update you all on what’s been going on. one of the more interesting things to talk about, i made a tutorial feature, and i spent excessive hours making all of the animations and page transitions as smooth as possible also, i actually setup (fixed) the report question pipeline in firebase, as my lack of any data entry made me a tad bit suspicious anyways, the majority of the time was optimizing the speed and performance of the website. one of my main goals was to make free sat prep accessible to everyone, and animations that can crash chromebooks don’t exactly achieve that goal anyways, like always, comment any features you want to see / bugs you want to see fixed / criticism / praise (much appreciated)"}, {"post_id": 3926, "ts": "2026-06-07T01:24:42Z", "hours": 4.8478, "text": "the daily question i always ask myself… work on something useful … or spend wayyyy too long on some random feature anyways today i did the latter: i built a cool animation for the homescreen that animates a variety of different graphs, with a natural drawing animation and background glow the hardest part (took me 2-3 hours just to build) was making a feature where the lines dim when behind text / buttons on the ui, as i didn’t want the brightly-colored graphs obscuring visibility"}, {"post_id": 3343, "ts": "2026-06-06T07:09:56Z", "hours": 9.5875, "text": "i’ve been cooking up some new features all day… literally all day… anyways now that school is out, i have so much more time to spend, so i added these features: practice set creator- ai scans the bank and detect and flags certain similar questions for practice improved vocab- actually made the vocab sections track and record progress, while recording the states of each individual term (this took a LOT of time to figure out the logic for) (ignore the bad video quality)"}, {"post_id": 2621, "ts": "2026-06-05T07:47:05Z", "hours": 0.8422, "text": "FINALLY got the filter animation to actually work. still buggy in a few places (the time spent slider has some issues) but overall looks pretty cool :)"}, {"post_id": 2602, "ts": "2026-06-05T06:48:33Z", "hours": 1.0253, "text": "working on an interactive home screen feature where there’s a little filters section, and the user can control it ANDDD there’s an existing cursor that moves around and demos. currently facing issues with the demo cursor just leaving though…"}, {"post_id": 2580, "ts": "2026-06-05T05:09:05Z", "hours": 3.2692, "text": "just spent a solid 3 hours of my life trying to design a vertical carousel for the home screen and eventually ended up with so many bugs that i just chose to use a static image 💔💔💔💔"}, {"post_id": 2523, "ts": "2026-06-05T01:52:56Z", "hours": 1.6564, "text": "been working on improving the search feature so finding old questions is actually less painful. one issue i ran into is that a lot of questions use KaTeX for the math, so even if something looks like normal text on the page, it’s not always stored in a way that’s easy to search. stuff like fractions, exponents, equations, etc. can be weird because the plain text version and the rendered math version don’t always match up."}, {"post_id": 2481, "ts": "2026-06-05T00:07:46Z", "hours": 5.3778, "text": "been working on replacing the old homescreen iframes with fully built-in windows across the home page. iframes worked fine at first, but they started to feel slow, especially when actually interacting with them and the other animations i was having a lot of issues w/ all of the homescreen animations and loading 3 iframes at once the image attached is actually a full recreation of the bank just w/o all the other questions and some features just for the home page"}, {"post_id": 1978, "ts": "2026-06-04T07:29:24Z", "hours": 3.5672, "text": "working hard or hardly working? couldn’t tell ya but im improving the stats page :)"}, {"post_id": 1816, "ts": "2026-06-04T01:17:32Z", "hours": 12.4331, "text": "designing a practice test results viewer in bluebook style :) as a person who despises UI design, recreating an interface effectively 1/1 is much more annoying than i expected"}, {"post_id": 831, "ts": "2026-06-02T14:57:51Z", "hours": 11.2103, "text": "been working on adding physical practice tests to the website, mainly by importing the old paper SAT practice tests so they’re easier to use inside 1600.now. the idea is to make paper practice feel less disconnected from everything else. instead of downloading a pdf, taking the test, and then having your work live somewhere separate, these tests can start becoming part of the same system as the rest of your studying. it’s a pretty big import job, but once it’s in, you’ll be able to use older official-style practice in a cleaner way and keep more of your progress in one place."}]...
|
Title: 1600.now by @cookie | Stardance
Devlogs:
b Title: 1600.now by @cookie | Stardance
Devlogs:
been working on adding physical practice tests to the website, mainly by importing the old paper SAT practice tests so they’re easier to use inside 1600.now. the idea is to make paper practice feel less disconnected from everything else. instead of downloading a pdf, taking the test, and then having your work live somewhere separate, these tests can start becoming part of the same system as the rest of your studying. it’s a pretty big import job, but once it’s in, you’ll be able to use older official-style practice in a cleaner way and keep more of your progress in one place.
designing a practice test results viewer in bluebook style :) as a person who despises UI design, recreating an interface effectively 1/1 is much more annoying than i expected
working hard or hardly working? couldn’t tell ya but im improving the stats page :)
been working on replacing the old homescreen iframes with fully built-in windows across the home page. iframes worked fine at first, but they started to feel slow, especially when actually interacting with them and the other animations i was having a lot of issues w/ all of the homescreen animations and loading 3 iframes at once the image attached is actually a full recreation of the bank just w/o all the other questions and some features just for the home page
been working on improving the search feature so finding old questions is actually less painful. one issue i ran into is that a lot of questions use KaTeX for the math, so even if something looks like normal text on the page, it’s not always stored in a way that’s easy to search. stuff like fractions, exponents, equations, etc. can be weird because the plain text version and the rendered math version don’t always match up.
just spent a solid 3 hours of my life trying to design a vertical carousel for the home screen and eventually ended up with so many bugs that i just chose to use a static image 💔💔💔💔
working on an interactive home screen feature where there’s a little filters section, and the user can control it ANDDD there’s an existing cursor that moves around and demos. currently facing issues with the demo cursor just leaving though…
FINALLY got the filter animation to actually work. still buggy in a few places (the time spent slider has some issues) but overall looks pretty cool :)
i’ve been cooking up some new features all day… literally all day… anyways now that school is out, i have so much more time to spend, so i added these features: practice set creator- ai scans the bank and detect and flags certain similar questions for practice improved vocab- actually made the vocab sections track and record progress, while recording the states of each individual term (this took a LOT of time to figure out the logic for) (ignore the bad video quality)
the daily question i always ask myself… work on something useful … or spend wayyyy too long on some random feature anyways today i did the latter: i built a cool animation for the homescreen that animates a variety of different graphs, with a natural drawing animation and background glow the hardest part (took me 2-3 hours just to build) was making a feature where the lines dim when behind text / buttons on the ui, as i didn’t want the brightly-colored graphs obscuring visibility
it’s been a while since i’ve posted a devlog, well anyways, let me update you all on what’s been going on. one of the more interesting things to talk about, i made a tutorial feature, and i spent excessive hours making all of the animations and page transitions as smooth as possible also, i actually setup (fixed) the report question pipeline in firebase, as my lack of any data entry made me a tad bit suspicious anyways, the majority of the time was optimizing the speed and performance of the website. one of my main goals was to make free sat prep accessible to everyone, and animations that can crash chromebooks don’t exactly achieve that goal anyways, like always, comment any features you want to see / bugs you want to see fixed / criticism / praise (much appreciated)...
|
1792533103.8219547
|
1793137903.8219547
|
|
13560
|
Biggy OS by @LoginlikeLogan | Stardance
|
LoginlikeLogan
|
3
|
66.97
|
330
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T02:50:14Z", "hours": 20.0, "multiplier": 8.97, "payout": 180, "blessing": "neutral", "text": "So guys, Ive updated the os with mutiple new apps like the weather, music, calculator, paint, browser, and minecraft apps! Test it out!", "repo": "https://github.com/Logdegret/Biggy-Cheese-OS/", "demo": "https://logdegret.github.io/Biggy-Cheese-OS"}, {"ship_num": 2, "ts": "2026-08-23T13:58:23Z", "hours": 14.0, "multiplier": 10.42, "payout": 150, "blessing": "neutral", "text": "I finally finished my webos and I am happy with what ive made! There was lots that i struggled with. Hopefully this can earn a super star!", "repo": "https://github.com/Logdegret/Biggy-Cheese-OS/", "demo": "https://logdegret.github.io/Biggy-Cheese-OS"}, {"ship_num": 3, "ts": "2026-07-30T07:28:58Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a webos based on the biggy cheese meme. I found the video player extra hard. Hopefully it meets the requirements?", "repo": "https://github.com/Logdegret/Biggy-Cheese-OS/", "demo": "https://logdegret.github.io/Biggy-Cheese-OS"}]...
|
[{"post_id": 65124, "ts": "202 [{"post_id": 65124, "ts": "2026-09-10T01:25:38Z", "hours": 4.1136, "text": "Working Up to the Big Leagues… So ive made a new window called finder and It’s pretty basic so far. It was about 330 lines of js.. I will probably replace the standby/placeholder emojis with svgs so it doesn’t look out of theme!"}, {"post_id": 64469, "ts": "2026-09-08T21:47:57Z", "hours": 0.6869, "text": "A sad devlog… so I couldn’t fix it and I had to use a bit of AI to fully debug. it turns out, the calculator app was hijacking keystrokes and I had a single broken line of code in app.js. But now it works!"}, {"post_id": 64436, "ts": "2026-09-08T20:12:51Z", "hours": 14.1656, "text": "I have been working super hard and trying to fix bugs and heavily avoiding ai. But for some reason the website is breaking apart and no longer loading."}, {"post_id": 62618, "ts": "2026-09-06T02:46:53Z", "hours": 1.0931, "text": "Final Additions! Ive added a modified file of eaglercraft into the biggy os and it is now called Biggy OS"}, {"post_id": 61193, "ts": "2026-09-04T00:26:40Z", "hours": 8.1094, "text": "Ive added 3 new apps!! A working browser, calculator, and paint app!!! windows were not working properly so I had to make some ajustments and fix it. Took me some time.. haha"}, {"post_id": 59859, "ts": "2026-09-01T20:41:46Z", "hours": 9.2781, "text": "Tutorial has been added! Guys Guess what? Ive made a tutorial on how to get started on the os and i have made backgrounds gif possible. The tutorial kinda gave me a bit of trouble with bugs so i took lots of time debugging. Im also working on something big…."}, {"post_id": 59012, "ts": "2026-08-31T16:23:19Z", "hours": 1.5581, "text": "Guys I am BACK!! So far ive been tweaking a few things like the location bug, it was supposed to popup when you clicked download for the weather app. But I guess i didn’t catch that.. Anyways Here are some new backgrounds, they’re 4k!!"}, {"post_id": 53063, "ts": "2026-08-23T13:55:30Z", "hours": 1.5417, "text": "MY LAST DEVLOG!!! Hey guys, its been a great run! ive added a music app and a few customizable widgets but which can only be found by something you need to explore. Thank you guys so much for support!"}, {"post_id": 52333, "ts": "2026-08-22T13:19:21Z", "hours": 0.5256, "text": "Ive added a new app that you can download! i am currently thinking of stopping this project although it has been a blast making this project."}, {"post_id": 51796, "ts": "2026-08-21T17:09:52Z", "hours": 2.1492, "text": "LOT OF NEW BIG THINGS Ive added two new windows, notes and the store. nothing can be donwloaded yet but i am currently working on that. Ive added resizing!! follow allong and this shall be a super star project!"}, {"post_id": 50661, "ts": "2026-08-19T22:48:17Z", "hours": 0.3942, "text": "A fun cinematic opening!!! I’ve ai coded me a simple opening while i added the sound for it. I hate to say but i was a little lazy on this one since i don’t really know much on animation in websites."}, {"post_id": 50640, "ts": "2026-08-19T22:01:17Z", "hours": 2.5006, "text": "A super Annoying Terminal This Terminal is super annoying, spacing, css and divs are driving me crazy! Everytime i clicked on this terminal it used to break the screen… Not anymore! Finally the spacing and terminal is close to perfect. I will now be focusing on a cinematic loading screen."}, {"post_id": 48209, "ts": "2026-08-16T14:40:19Z", "hours": 2.4889, "text": "LOTS OF STUFF ive added a to do list with a check box so you can remind yourself what to do. Ive also added a terminal! its a work in progress but im getting there! i really want this to be a super star project so im putting in all my effort!"}, {"post_id": 46924, "ts": "2026-08-14T14:16:12Z", "hours": 0.3458, "text": "Ive tuned up the meme window to filter them and frame them"}, {"post_id": 45943, "ts": "2026-08-12T19:11:29Z", "hours": 2.4656, "text": "I added a lot so far, i added a meme tab and a to do tab. meme tab is done but not the todo."}, {"post_id": 41329, "ts": "2026-08-05T14:04:58Z", "hours": 0.4178, "text": "Ive finnaly fixed this stupid window that did not want to cooperate. I actaully suffered through this. Well, hope that some of you will like it. Also heres the progress so far: Im going to be changing meme generator to daily meme. I will be coding in python for it. Also If anyone wants to work with me to make a biggy cheeze type game, please feel free to reach out to me"}, {"post_id": 39719, "ts": "2026-08-02T21:11:11Z", "hours": 0.635, "text": "I drew a new icon for a daily meme. How do yall like it? also my game window is soooooo broken. it stretches so weird… I need someone to design a game for me since idk how to make game. Anyone?"}, {"post_id": 38749, "ts": "2026-08-01T09:37:58Z", "hours": 0.9711, "text": "added fullscreen and a game that is animal themed. NOT MY GAME"}, {"post_id": 37450, "ts": "2026-07-30T06:23:48Z", "hours": 1.0489, "text": "Made A new window / app for an about me! This is probably the final devlog until the first ship. Thank you guys so much for the support and hopefully i can get to the next OS mission.."}, {"post_id": 36272, "ts": "2026-07-28T08:23:05Z", "hours": 0.8856, "text": "I added another modular window that can change backgrounds"}, {"post_id": 34540, "ts": "2026-07-25T10:38:04Z", "hours": 0.8489, "text": "added apps!"}, {"post_id": 34517, "ts": "2026-07-25T09:34:34Z", "hours": 0.3906, "text": "I added a custom cheese cursor that I drew!"}, {"post_id": 34502, "ts": "2026-07-25T08:38:58Z", "hours": 2.3539, "text": "I scrapped the ugly background and added a physical clock with a rotating joke/statement. Also added a fun loading screen"}, {"post_id": 33948, "ts": "2026-07-24T09:02:04Z", "hours": 2.0789, "text": "Many Things Have Been Added! Ive added a rotating joke/statement that changes everytime you reload, a clock(that will be improved), and a clock widget/window that I want to be a permenant widget. Wish me luck! here are some pictures and the progress so far!"}, {"post_id": 31251, "ts": "2026-07-19T14:44:53Z", "hours": 3.2208, "text": "I have added a draggable window for the biggy cheeze moment with a custom player"}, {"post_id": 30562, "ts": "2026-07-18T07:29:12Z", "hours": 1.0281, "text": "We have went back to biggy cheeze Sorry for changing it! I am going to restart from scratch"}, {"post_id": 8723, "ts": "2026-06-14T14:20:53Z", "hours": 0.7217, "text": "I change my theme Lets Go Knicks"}, {"post_id": 7172, "ts": "2026-06-11T23:47:16Z", "hours": 1.2631, "text": "added stardance link, fixed image, and more text. Im struggling with this… lol"}, {"post_id": 5276, "ts": "2026-06-09T00:07:01Z", "hours": 0.5161, "text": "Started my own webos via guide(idk why image doesn’t work) help?? it works on index.html locally…"}]...
|
Title: Biggy OS by @LoginlikeLogan | Stardance
De Title: Biggy OS by @LoginlikeLogan | Stardance
Devlogs:
Started my own webos via guide(idk why image doesn’t work) help?? it works on index.html locally…
added stardance link, fixed image, and more text. Im struggling with this… lol
I change my theme Lets Go Knicks
We have went back to biggy cheeze Sorry for changing it! I am going to restart from scratch
I have added a draggable window for the biggy cheeze moment with a custom player
Many Things Have Been Added! Ive added a rotating joke/statement that changes everytime you reload, a clock(that will be improved), and a clock widget/window that I want to be a permenant widget. Wish me luck! here are some pictures and the progress so far!
I scrapped the ugly background and added a physical clock with a rotating joke/statement. Also added a fun loading screen
I added a custom cheese cursor that I drew!
added apps!
I added another modular window that can change backgrounds
Made A new window / app for an about me! This is probably the final devlog until the first ship. Thank you guys so much for the support and hopefully i can get to the next OS mission..
added fullscreen and a game that is animal themed. NOT MY GAME
I drew a new icon for a daily meme. How do yall like it? also my game window is soooooo broken. it stretches so weird… I need someone to design a game for me since idk how to make game. Anyone?
Ive finnaly fixed this stupid window that did not want to cooperate. I actaully suffered through this. Well, hope that some of you will like it. Also heres the progress so far: Im going to be changing meme generator to daily meme. I will be coding in python for it. Also If anyone wants to work with me to make a biggy cheeze type game, please feel free to reach out to me
I added a lot so far, i added a meme tab and a to do tab. meme tab is done but not the todo.
Ive tuned up the meme window to filter them and frame them
LOTS OF STUFF ive added a to do list with a check box so you can remind yourself what to do. Ive also added a terminal! its a work in progress but im getting there! i really want this to be a super star project so im putting in all my effort!
A super Annoying Terminal This Terminal is super annoying, spacing, css and divs are driving me crazy! Everytime i clicked on this terminal it used to break the screen… Not anymore! Finally the spacing and terminal is close to perfect. I will now be focusing on a cinematic loading screen.
A fun cinematic opening!!! I’ve ai coded me a simple opening while i added the sound for it. I hate to say but i was a little lazy on this one since i don’t really know much on animation in websites.
LOT OF NEW BIG THINGS Ive added two new windows, notes and the store. nothing can be donwloaded yet but i am currently working on that. Ive added resizing!! follow allong and this shall be a super star project!
Ive added a new app that you can download! i am currently thinking of stopping this project although it has been a blast making this project.
MY LAST DEVLOG!!! Hey guys, its been a great run! ive added a music app and a few customizable widgets but which can only be found by something you need to explore. Thank you guys so much for support!
Guys I am BACK!! So far ive been tweaking a few things like the location bug, it was supposed to popup when you clicked download for the weather app. But I guess i didn’t catch that.. Anyways Here are some new backgrounds, they’re 4k!!
Tutorial has been added! Guys Guess what? Ive made a tutorial on how to get started on the os and i have made backgrounds gif possible. The tutorial kinda gave me a bit of trouble with bugs so i took lots of time debugging. Im also working on something big….
Ive added 3 new apps!! A working browser, calculator, and paint app!!! windows were not working properly so I had to make some ajustments and fix it. Took me some time.. haha
Final Additions! Ive added a modified file of eaglercraft into the biggy os and it is now called Biggy OS
I have been working super hard and trying to fix bugs and heavily avoiding ai. But for some reason the website is breaking apart and no longer loading.
A sad devlog… so I couldn’t fix it and I had to use a bit of AI to fully debug. it turns out, the calculator app was hijacking keystrokes and I had a single broken line of code in app.js. But now it works!
Working Up to the Big Leagues… So ive made a new window called finder and It’s pretty basic so far. It was about 330 lines of js.. I will probably replace the standby/placeholder emojis with svgs so it doesn’t look out of theme!
Ships:
I made a webos based on the biggy cheese meme. I found the video player extra hard. Hopefully it meets the requirements?
I finally finished my webos and I am happy with what ive made! There was lots that i struggled with. Hopefully this can earn a super star!
So guys, Ive updated the os with mutiple new apps like the weather, music, calculator, paint, browser, and minecraft apps! Test it out!...
|
1792878595.6829658
|
1793742595.6829658
|
|
49907
|
Sphere by @Mintia11 | Stardance
|
Mintia11
|
0
|
66.71
|
0
|
[]
|
[{"post_id": 68738, "ts": "202 [{"post_id": 68738, "ts": "2026-09-15T17:32:14Z", "hours": 9.2867, "text": "#devlog 10 Hii everyone, I finally got a working matroska demuxer going in my c rewrite!"}, {"post_id": 57473, "ts": "2026-08-29T17:00:30Z", "hours": 8.8133, "text": "#devlog 9 The rewrite in c is going well, I built my allocator and also tiny logging helpers and now I created a vulkan device with all the extensions I think i will need, and I also integrated SDL3 to build my window"}, {"post_id": 55664, "ts": "2026-08-27T17:01:44Z", "hours": 8.135, "text": "#devlog 8 Hii everyone,, I’m currently in the process of rewriting my codebase in C because Rust was giving me some headaches, so here’s a screenshot showcasing my slab allocator :)"}, {"post_id": 54995, "ts": "2026-08-26T12:55:06Z", "hours": 9.9436, "text": "#devlog 8 Got whatever is this from the h264 decoder, i don’t really think it’s right lol :*("}, {"post_id": 53751, "ts": "2026-08-24T12:53:52Z", "hours": 4.1311, "text": "#devlog 7 Finally got mono and stereo AAC decoding working, the only thing i’m missing now is h264 decoding, which I started doing but gave up half way because i hadn’t got audio/video sync working. So after this detour I can finally try to decode some frames!"}, {"post_id": 53122, "ts": "2026-08-23T15:31:47Z", "hours": 4.8753, "text": "#devlog 6 I have decided that decoding audio streams will be easier for the time being and it will help me to setup good synchronization primitives, so I have started to parse a simple mono AAC stream"}, {"post_id": 52397, "ts": "2026-08-22T14:50:49Z", "hours": 3.3042, "text": "#devlog 5 Got some menu’s going and I have started to create an h264 decoder using vulkan, in the video you can see the info lines the decoder generates for the track info window"}, {"post_id": 51214, "ts": "2026-08-20T18:58:08Z", "hours": 0.7944, "text": "#devlog 4 I finally finished my egui renderer, i just needed to iron out alpha blending and buffer/image creation"}, {"post_id": 51106, "ts": "2026-08-20T16:30:37Z", "hours": 6.3614, "text": "#devlog 3 Finally i got egui to render something using my custom renderer! I’m so happy lol :)"}, {"post_id": 50440, "ts": "2026-08-19T16:33:07Z", "hours": 1.8897, "text": "#devlog 2 Little update, i got a simple renderer running using my custom vulkan abstraction layer"}, {"post_id": 50259, "ts": "2026-08-19T12:45:18Z", "hours": 9.1783, "text": "#devlog 1 Got a simple mkv demuxer working, and i created a simple window with winit, in which i would like to put an egui based ui, with my custom vulkan renderer so that i can have the users view track info and a player bar and things like that"}]...
|
Title: Sphere by @Mintia11 | Stardance
Devlogs:
# Title: Sphere by @Mintia11 | Stardance
Devlogs:
#devlog 1 Got a simple mkv demuxer working, and i created a simple window with winit, in which i would like to put an egui based ui, with my custom vulkan renderer so that i can have the users view track info and a player bar and things like that
#devlog 2 Little update, i got a simple renderer running using my custom vulkan abstraction layer
#devlog 3 Finally i got egui to render something using my custom renderer! I’m so happy lol :)
#devlog 4 I finally finished my egui renderer, i just needed to iron out alpha blending and buffer/image creation
#devlog 5 Got some menu’s going and I have started to create an h264 decoder using vulkan, in the video you can see the info lines the decoder generates for the track info window
#devlog 6 I have decided that decoding audio streams will be easier for the time being and it will help me to setup good synchronization primitives, so I have started to parse a simple mono AAC stream
#devlog 7 Finally got mono and stereo AAC decoding working, the only thing i’m missing now is h264 decoding, which I started doing but gave up half way because i hadn’t got audio/video sync working. So after this detour I can finally try to decode some frames!
#devlog 8 Got whatever is this from the h264 decoder, i don’t really think it’s right lol :*(
#devlog 8 Hii everyone,, I’m currently in the process of rewriting my codebase in C because Rust was giving me some headaches, so here’s a screenshot showcasing my slab allocator :)
#devlog 9 The rewrite in c is going well, I built my allocator and also tiny logging helpers and now I created a vulkan device with all the extensions I think i will need, and I also integrated SDL3 to build my window
#devlog 10 Hii everyone, I finally got a working matroska demuxer going in my c rewrite!...
|
1792612042.828022
|
1793216842.828022
|
|
43941
|
MY GOAT WEBSITE by @shouryasharan27 | Stardance
|
shouryasharan27
|
1
|
66.56
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T17:54:46Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "my own portfolio website", "repo": "https://github.com/shouryasharan7-netizen/shourya-portfolio", "demo": "https://www.shouryasharan.xyz"}]...
|
[{"post_id": 82011, "ts": "202 [{"post_id": 82011, "ts": "2026-10-23T13:19:36Z", "hours": 14.2069, "text": "I completely changed the whole thing now. Every word is now authentic and me and I finally can say its me afterall. And yeah tbh I took a lot of time debugging issues"}, {"post_id": 74428, "ts": "2026-09-27T11:16:59Z", "hours": 16.81, "text": "i completely revamped the website"}, {"post_id": 69133, "ts": "2026-09-16T13:24:23Z", "hours": 25.5425, "text": "hi changed over the overall design"}, {"post_id": 41849, "ts": "2026-08-06T10:04:07Z", "hours": 9.7272, "text": "I made a website showcasing everything I have done like achievements, work experience etc"}]...
|
Title: MY GOAT WEBSITE by @shouryasharan27 | Stard Title: MY GOAT WEBSITE by @shouryasharan27 | Stardance
Devlogs:
I made a website showcasing everything I have done like achievements, work experience etc
hi changed over the overall design
i completely revamped the website
I completely changed the whole thing now. Every word is now authentic and me and I finally can say its me afterall. And yeah tbh I took a lot of time debugging issues
Ships:
my own portfolio website...
|
1792997389.502539
|
1793083789.502539
|
|
34506
|
Grex by @Benkralex | Stardance
|
Benkralex
|
1
|
66.28
|
799
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T15:49:29Z", "hours": 49.0, "multiplier": 16.43, "payout": 799, "blessing": "neutral", "text": "I’m very proud, that I got to a point, where I can ship the project in just about 2 months. Thats when I started the new codebase. I learned a LOT developing the plattform with Next.js (old) and also learned, that I need better types, seperate server and client, … I just don’t like the structure, but now with Kotlin and Ktor on the server and JS on the client I am very satisfied. If you try the project keep in mind, that many features were in the old project and the most time I spent, was creating the base on the new version. This ship ships the foundation on which I will build many more (hopefully cool and usefull) features. Also try the web-client on mobile. I coded responsive for displayes of (hopefully) any size. I’m sorry, that I have no demo-instance, but it is to insecure for me to host a public instance for everyone. Maybe in the next ship I will have a solution for that. Hope you like the project!", "repo": "https://codeberg.org/Benkralex/Grex", "demo": "https://grex.benkralex.hackclub.app/register"}]...
|
[{"post_id": 78070, "ts": "202 [{"post_id": 78070, "ts": "2026-10-09T13:44:49Z", "hours": 6.3953, "text": "I clean up the code and made many fixes! I also added new features: You can upload profile pictures and the admins can allow bypassing the invite code for the instance."}, {"post_id": 74075, "ts": "2026-09-26T17:01:48Z", "hours": 3.3961, "text": "Added search to quotes and account settings"}, {"post_id": 72837, "ts": "2026-09-23T20:46:14Z", "hours": 6.0969, "text": "Add Settings Page with the option to choose a theme. I also changed some Database Stuff and added a user page."}, {"post_id": 70252, "ts": "2026-09-18T20:11:00Z", "hours": 1.3911, "text": "Add table for admins so they can see all registered users."}, {"post_id": 65981, "ts": "2026-09-11T14:14:21Z", "hours": 0.3258, "text": "Small fixes: Icons on login/register page Title support for my own client router Fix popups on mobile"}, {"post_id": 65964, "ts": "2026-09-11T13:43:52Z", "hours": 1.3897, "text": "I’ve added a /qpi/quotes/delete endpoint, where the poster or admins can delete a quote and also the button for it is in the UI. If you click it a confirmation popup opens. Also the register and login forms now show, whats wrong. I noticed the bad UX, as I registered a new user and the submit button just didn’t work. In the dev tools I could see the problem, but no normal user is looking into the devtools, so now every normal creature can now see it as well. These are the last finishing touches before shiping!"}, {"post_id": 65616, "ts": "2026-09-10T21:11:00Z", "hours": 2.7175, "text": "I’ve done some little things: I added a random quote endpoint to the server and the 404 - Not Found now displays one. I also started writing the API docs."}, {"post_id": 65050, "ts": "2026-09-09T21:45:57Z", "hours": 0.8633, "text": "I got hacked!! Oh no!! How bad!! ;-D Script injections should now be GONE. (Hacker is sad now ) The edit quote funtion now has an API endpoint and a UI. You can edit a quote with the edit symbol on the quote detail page, which is only displayed, if you are the creator of the post or the admin."}, {"post_id": 63915, "ts": "2026-09-07T23:08:03Z", "hours": 6.0872, "text": "I fixed the layout on mobile devices: The navbar, the admin page, … I edited the API endpoints for quotes: Now there are 2 Endpoints for quotes: get and list I also added the code for quote editing, but the API endpoint is not implemented yet In the client I added a detail page for quotes, where you can see the users, who liked the quote and in the future the comments would also be displayed here A new get user endpoint exists, so the quote posters and the likes can display the real username and not only the user-id I fixed the logout, that was not working, because the client side navigation couldn’t load the /logout because it loads pages from /pages/… so /pages/logout was a 404. Now the logout is in the pages directory, so it works with client side navigation The most time for this devlog was invested on the layout of users who liked a post. I just wanted the users to be displayed in collumns and rows. They should be exactly underneath each other, so the like-icon aligns perfectly. Also the names shouldn’t break, because then one row is larger then the others. It was such a pain getting that “simple” thing to work. I asked multiple AIs, after I had no idea anymore and all gave me trash. The Claude used JS and not only CSS and it finally worked!! It was such a pain but in the end I am very happy with the result."}, {"post_id": 61822, "ts": "2026-09-04T22:26:17Z", "hours": 2.5244, "text": "LIKES!!!!!! Finally!!!! Again only the db held me back. I hate databases! But it has a fun little animation if you click it and it is pretty spam proof (hope so)."}, {"post_id": 60390, "ts": "2026-09-02T18:08:36Z", "hours": 1.5778, "text": "Create quotes now works!!! It was a bit of pain modifing the db. I just wanted plain timestamps in milliseconds but Exposed and SQLite don’t want that, so I setteled on just using long type."}, {"post_id": 59559, "ts": "2026-09-01T13:30:27Z", "hours": 1.2533, "text": "The Server now autmoaticly migrates the DB 🎉🎉🎉🎉🎉🎉 It was not that easy, because Exposed (DB lib for Kotlin) doesn’t automaticly apply migrations. I can generate migration scripts with it but the execution and check if it was already executed I have to do on my own. But I learned a lot in the process."}, {"post_id": 59231, "ts": "2026-08-31T22:04:35Z", "hours": 1.3075, "text": "Now Woodpecker builds the server and client docker-image and releases it on codeberg.org docker registry! Yay!"}, {"post_id": 58878, "ts": "2026-08-31T13:33:37Z", "hours": 2.1544, "text": "I’ve added a form for admins to create invites so you don’t have to interact with the DB or the API manually ;-) Also the first user, that registers doesn’t need an invitation Code and automaticly is an admin. I also started creating the form to create quotes, but it has no functionality at the moment. My next steps that are planed at the moment: Add create quote form functionality Put everything in docker (Add QoL like display all invites & users for admins, display active sessions, …) First RELEASE/SHIP"}, {"post_id": 54823, "ts": "2026-08-25T23:47:38Z", "hours": 0.9147, "text": "New design for the quotes. Now it’s not a boring list but cards that look a lot better."}, {"post_id": 54795, "ts": "2026-08-25T22:23:16Z", "hours": 1.6778, "text": "I’ve added two new themes. Also the theme is now loaded via js, so at a later point the js could read the cookies and load a theme dynamicly."}, {"post_id": 54680, "ts": "2026-08-25T18:51:09Z", "hours": 0.9175, "text": "I’ve now added a logout api endpoint and an option to logout via web client. The difficult part is, that I can’t access the GREX_SESSION cookie via JS, so I have to set another cookie, to know, if the user is logged in. But now it works fine. I hope, that I’m not finding as many bugs if I’m testing the login/logout/register functions."}, {"post_id": 54143, "ts": "2026-08-24T23:40:24Z", "hours": 3.9428, "text": "Not much to say for this devlog, I only created the register form and designed it and the login form."}, {"post_id": 49485, "ts": "2026-08-18T11:02:36Z", "hours": 1.0444, "text": "I improved the navbar and designed an icon as a placeholder for the moment: At a later point the icon should be changable by admins and I think, I will also improve the default icon."}, {"post_id": 48096, "ts": "2026-08-16T11:55:29Z", "hours": 0.9681, "text": "The navigation now works…. But I’m not really happy about it. But for now I started styling a bit (also that I’m not getting flashbanged). How I implemented the client nav at the moment The server now returns the same index.html file for every page and js loads the page-content. This lags sometimes and is not very performant… Style and Themes I’ve started styling. All the colors and also some other properties are specified in a theme-css file, so later you could have your own theme as a css file with only vars or if you want to style even more, you can add custom styles for specifc components, thats the plan for theming."}, {"post_id": 47735, "ts": "2026-08-15T21:02:13Z", "hours": 1.1553, "text": "Started building the real client (at least a concept). I’m currently trying to figure client-side navigation out. I think I have to watch some tutorials…"}, {"post_id": 43988, "ts": "2026-08-09T14:02:55Z", "hours": 1.0517, "text": "I fixed, that if you are already logged in, it still showed the login-form. Also I added a createQuote function (not in the UI yet) and tried fixing the cookie, that don’t want to be saved because of security. I have not comittet the code, because it is at the moment just for me testing, until it can do the most part of the API and is a bit better designed."}, {"post_id": 39681, "ts": "2026-08-02T20:19:03Z", "hours": 1.3894, "text": "I started with a very simple UI (without CSS) to test if the API would work. At the moment you can only login and get all quotes."}, {"post_id": 39604, "ts": "2026-08-02T18:08:59Z", "hours": 1.5794, "text": "I cleaned up even more: Common RequestResult Interface RequestErrors combined into one enum Split the routing config into diffrent files I also added an api endpoint for getting quotes"}, {"post_id": 38407, "ts": "2026-07-31T19:14:05Z", "hours": 1.0397, "text": "I cleaned up the code and added an api endpoint for getting invites"}, {"post_id": 36505, "ts": "2026-07-28T17:40:25Z", "hours": 0.7836, "text": "server: The API now includes the creation of quotes"}, {"post_id": 36404, "ts": "2026-07-28T14:31:13Z", "hours": 1.1194, "text": "server: Now you also can create an account (only with invite) and admins can create invites."}, {"post_id": 35986, "ts": "2026-07-27T19:43:36Z", "hours": 2.0539, "text": "I’ve added DB tables and started with auth. Login works and register is on it’s way!"}, {"post_id": 35846, "ts": "2026-07-27T15:24:34Z", "hours": 1.1892, "text": "I started with a new codebase, because I was not happy with Next.js. Now I want to separate the server from the client for a cleaner architecture. I initalized the new repo I started the base for the server (Kotlin + sqlite)"}, {"post_id": 30137, "ts": "2026-07-17T14:04:35Z", "hours": 0.6931, "text": "IT WORKS!!!! And yea, I’rich, but in the negatives ;-). I just forgot to set a hidden value for the form."}, {"post_id": 29700, "ts": "2026-07-16T19:48:42Z", "hours": 0.8956, "text": "Now you can create transactions! Or can you? It doesn’t work :-( But I can’t find the mistake, I’ll hopefully do tomorrow"}, {"post_id": 28987, "ts": "2026-07-15T16:50:40Z", "hours": 1.5144, "text": "I’ve added the create quote form and the backend used for it. Also if you edit your account, it now uses the new backend."}, {"post_id": 28509, "ts": "2026-07-14T20:10:56Z", "hours": 0.7781, "text": "I finally did the woodpecker build 🎉🎉 I also updated the installer and the README for installation. Now you can test it easiely at home 😉"}, {"post_id": 28476, "ts": "2026-07-14T18:53:02Z", "hours": 2.4917, "text": "I’ve started implementing the backend from ground new, with a cleaner structure, because it was to unclean for me to do work in it. It is not finished, but everything should work at the moment with a mix of old- and new-backend."}, {"post_id": 27841, "ts": "2026-07-13T18:42:24Z", "hours": 0.8558, "text": "I’ve added quotes to the plattform. You can’t create them at the moment, but they are read from the db."}, {"post_id": 27766, "ts": "2026-07-13T16:40:58Z", "hours": 0.3986, "text": "I’ve tried adding woodpecker/forgejo actions for automatic docker builds. I haven’t got it working, but I applied to Codebergs Woodpecker."}]...
|
Title: Grex by @Benkralex | Stardance
Devlogs:
I’ Title: Grex by @Benkralex | Stardance
Devlogs:
I’ve tried adding woodpecker/forgejo actions for automatic docker builds. I haven’t got it working, but I applied to Codebergs Woodpecker.
I’ve added quotes to the plattform. You can’t create them at the moment, but they are read from the db.
I’ve started implementing the backend from ground new, with a cleaner structure, because it was to unclean for me to do work in it. It is not finished, but everything should work at the moment with a mix of old- and new-backend.
I finally did the woodpecker build 🎉🎉 I also updated the installer and the README for installation. Now you can test it easiely at home 😉
I’ve added the create quote form and the backend used for it. Also if you edit your account, it now uses the new backend.
Now you can create transactions! Or can you? It doesn’t work :-( But I can’t find the mistake, I’ll hopefully do tomorrow
IT WORKS!!!! And yea, I’rich, but in the negatives ;-). I just forgot to set a hidden value for the form.
I started with a new codebase, because I was not happy with Next.js. Now I want to separate the server from the client for a cleaner architecture. I initalized the new repo I started the base for the server (Kotlin + sqlite)
I’ve added DB tables and started with auth. Login works and register is on it’s way!
server: Now you also can create an account (only with invite) and admins can create invites.
server: The API now includes the creation of quotes
I cleaned up the code and added an api endpoint for getting invites
I cleaned up even more: Common RequestResult Interface RequestErrors combined into one enum Split the routing config into diffrent files I also added an api endpoint for getting quotes
I started with a very simple UI (without CSS) to test if the API would work. At the moment you can only login and get all quotes.
I fixed, that if you are already logged in, it still showed the login-form. Also I added a createQuote function (not in the UI yet) and tried fixing the cookie, that don’t want to be saved because of security. I have not comittet the code, because it is at the moment just for me testing, until it can do the most part of the API and is a bit better designed.
Started building the real client (at least a concept). I’m currently trying to figure client-side navigation out. I think I have to watch some tutorials…
The navigation now works…. But I’m not really happy about it. But for now I started styling a bit (also that I’m not getting flashbanged). How I implemented the client nav at the moment The server now returns the same index.html file for every page and js loads the page-content. This lags sometimes and is not very performant… Style and Themes I’ve started styling. All the colors and also some other properties are specified in a theme-css file, so later you could have your own theme as a css file with only vars or if you want to style even more, you can add custom styles for specifc components, thats the plan for theming.
I improved the navbar and designed an icon as a placeholder for the moment: At a later point the icon should be changable by admins and I think, I will also improve the default icon.
Not much to say for this devlog, I only created the register form and designed it and the login form.
I’ve now added a logout api endpoint and an option to logout via web client. The difficult part is, that I can’t access the GREX_SESSION cookie via JS, so I have to set another cookie, to know, if the user is logged in. But now it works fine. I hope, that I’m not finding as many bugs if I’m testing the login/logout/register functions.
I’ve added two new themes. Also the theme is now loaded via js, so at a later point the js could read the cookies and load a theme dynamicly.
New design for the quotes. Now it’s not a boring list but cards that look a lot better.
I’ve added a form for admins to create invites so you don’t have to interact with the DB or the API manually ;-) Also the first user, that registers doesn’t need an invitation Code and automaticly is an admin. I also started creating the form to create quotes, but it has no functionality at the moment. My next steps that are planed at the moment: Add create quote form functionality Put everything in docker (Add QoL like display all invites & users for admins, display active sessions, …) First RELEASE/SHIP
Now Woodpecker builds the server and client docker-image and releases it on codeberg.org docker registry! Yay!
The Server now autmoaticly migrates the DB 🎉🎉🎉🎉🎉🎉 It was not that easy, because Exposed (DB lib for Kotlin) doesn’t automaticly apply migrations. I can generate migration scripts with it but the execution and check if it was already executed I have to do on my own. But I learned a lot in the process.
Create quotes now works!!! It was a bit of pain modifing the db. I just wanted plain timestamps in milliseconds but Exposed and SQLite don’t want that, so I setteled on just using long type.
LIKES!!!!!! Finally!!!! Again only the db held me back. I hate databases! But it has a fun little animation if you click it and it is pretty spam proof (hope so).
I fixed the layout on mobile devices: The navbar, the admin page, … I edited the API endpoints for quotes: Now there are 2 Endpoints for quotes: get and list I also added the code for quote editing, but the API endpoint is not implemented yet In the client I added a detail page for quotes, where you can see the users, who liked the quote and in the future the comments would also be displayed here A new get user endpoint exists, so the quote posters and the likes can display the real username and not only the user-id I fixed the logout, that was not working, because the client side navigation couldn’t load the /logout because it loads pages from /pages/… so /pages/logout was a 404. Now the logout is in the pages directory, so it works with client side navigation The most time for this devlog was invested on the layout of users who liked a post. I just wanted the users to be displayed in collumns and rows. They should be exactly underneath each other, so the like-icon aligns perfectly. Also the names shouldn’t break, because then one row is larger then the others. It was such a pain getting that “simple” thing to work. I asked multiple AIs, after I had no idea anymore and all gave me trash. The Claude used JS and not only CSS and it finally worked!! It was such a pain but in the end I am very happy with the result.
I got hacked!! Oh no!! How bad!! ;-D Script injections should now be GONE. (Hacker is sad now ) The edit quote funtion now has an API endpoint and a UI. You can edit a quote with the edit symbol on the quote detail page, which is only displayed, if you are the creator of the post or the admin.
I’ve done some little things: I added a random quote endpoint to the server and the 404 - Not Found now displays one. I also started writing the API docs.
I’ve added a /qpi/quotes/delete endpoint, where the poster or admins can delete a quote and also the button for it is in the UI. If you click it a confirmation popup opens. Also the register and login forms now show, whats wrong. I noticed the bad UX, as I registered a new user and the submit button just didn’t work. In the dev tools I could see the problem, but no normal user is looking into the devtools, so now every normal creature can now see it as well. These are the last finishing touches before shiping!
Small fixes: Icons on login/register page Title support for my own client router Fix popups on mobile
Add table for admins so they can see all registered users.
Add Settings Page with the option to choose a theme. I also changed some Database Stuff and added a user page.
Added search to quotes and account settings
I clean up the code and made many fixes! I also added new features: You can upload profile pictures and the admins can allow bypassing the invite code for the instance.
Ships:
I’m very proud, that I got to a point, where I can ship the project in just about 2 months. Thats when I started the new codebase. I learned a LOT developing the plattform with Next.js (old) and also learned, that I need better types, seperate server and client, … I just don’t like the structure, but now with Kotlin and Ktor on the server and JS on the client I am very satisfied. If you try the project keep in mind, that many features were in the old project and the most time I spent, was creating the base on the new version. This ship ships the foundation on which I will build many more (hopefully cool and usefull) features. Also try the web-client on mobile. I coded responsive for displayes of (hopefully) any size. I’m sorry, that I have no demo-instance, but it is to insecure for me to host a public instance for everyone. Maybe in the next ship I will have a solution for that. Hope you like the project!...
|
1793004712.8044462
|
1793091112.8044462
|
|
14309
|
Keyboard by @q | Stardance
|
q
|
0
|
66.16
|
0
|
[]
|
[{"post_id": 68911, "ts": "202 [{"post_id": 68911, "ts": "2026-09-16T01:04:28Z", "hours": 31.3731, "text": "Ok I was busy with life and getting back motivation and doing some other stuff and I really did not want to post devlogs, but I guess I’m back, even if I’m wasting 20 hours by not committing earlier. I was initially making and iterating on my keyboard keys/base just fine (see the 1st image with a ton of my test prints for the best key shape), but the reason why I lost motivation was because Onshape, my initial 3d modeling program, proved to be too laggy to work with with my trash wifi (waiting 20s for each change to propagate gets old real fast). I then went on a whole arc trying to learn the code-based CAD tool build123d (2nd pictures below is of me attempting to make a spring; I did a lot more than just that with the ~20hr I spent learning it), which I can ultimately say was sort of a mistake. learning code-based CAD was definitely valuable, but I just ended up hating Python even more after this. I went through a few iterations from my previous models from Onshape, but even when I did manage to remake my designs with it, it just felt horrible using the API, and I just quit this project out of frustration for a while. Now though, I am taking AP Music Theory in school, so I figured why not come back to it, since I still do want to make my own keyboard. I then found out that FreeCAD has made the UX actually bearable to use (it is infamously horrible to use compared to other solutions that I cannot afford, or that’s what I thought until I realized that 1.1 got released a couple months earlier and that I only had 1.0 installed when I tested it, so I didn’t have to go through the torture of learning build123d at all, but oh well). There’s only a couple weeks left of this as of I am writing this, so I’ll have to crunch this alongside my college applications that I’m doing, but hopefully it should be fine. Anyways, now that I’m back, I have cleaned up the Rust codebase just to familiarize myself with it again, and I have started working on making the keys again in FreeCAD (the black key holes are now accurate to a real keyboard, as they each are actually slightly offset from the white key edges if you look closely enough, and even such irregular offsets were made somewhat trivial by FreeCAD’s automation tools). FreeCAD can still sometimes be a pain to use (it took me 20 minutes just to arrange the keys!), but I am ultimately glad that I am back, and hopefully I finish everything in time."}, {"post_id": 24358, "ts": "2026-07-07T21:24:22Z", "hours": 22.5422, "text": "On the microcontroller side of things, I have started implementing a WiFi Access Point on an esp32. This is going to serve as the gateway to the configuration of the device, which I am trying to make it so that it is as simple as being a captive portal (a page that immediately pops up once you connect to the network). Making the esp32 do that required a ton of moving parts: the esp32 is serving as the access point, the DHCP server, the DNS server, and the HTTP server all at once. I was completely new to anything networking, so it took me a while to research what any of those were and how to implement them (albeit mainly by importing libraries but still). I did try to implement the DNS parsing by myself, but it turns out that every bitwise parsing abstraction I could find (packed_struct or deku) depended on a foundational package (bitvec) that could not compile on the esp32, and I wasted the whole day scouring the github issues of all the projects for solutions which all ended up not working. Espressif themselves literally even have a patch of the library of their own ( https://github.com/EspressoSystems/bitvec-patch ), but no matter what I did, nothing ended up working, and I was too exhausted to go implement the server manually by myself at that point. Anyways, I still need to tweak the DNS response for the captive portal to work, but everything else is working"}, {"post_id": 12844, "ts": "2026-06-21T01:03:58Z", "hours": 9.5281, "text": "Finished modelling the initial base models. It took quite a while to align and correct everything, but the base plate finally fits a whole octave of keys correctly. There were a lot of things I had to consider, like how the keycaps are to be connected to a controller (I opted for the easy option of leaving it up to the user to manually solder) and how other octaves should be connected (I initially added dovetails for extending the keyboard, but I removed them for some reason that I honestly can’t remember; i should probably go back and add them back). Also, I forgot to add this to my previous devlog, but the reason why I opted for DS6 sizing is so that a whole octave is safely printable on my Bambu A1 mini (the base plate is ~160mm wide compared to the A1 having an 180mm build plate). Note that there are supposed to be mechanical keyboard switches separating the keys from the base, but I’ve accounted for them so that they should fit."}, {"post_id": 7192, "ts": "2026-06-12T00:23:21Z", "hours": 2.7194, "text": "I modeled mechanical switch keycaps in Onshape. I have no prior knowledge on pianos, so I had to research their size quite a bit, but I managed to piece together how I wanted it to have similar sizing as the DS6 standard. I am still unsure about how long and high the keys should be, but the dimensions right now look correct enough. I am still quite new to Onshape, so I had to remake the keys more than what I would like to admit, and so I am praying I don’t get flagged for inflating hours for only producing what is more or less a glorified rectangle"}]...
|
Title: Keyboard by @q | Stardance
Devlogs:
I mode Title: Keyboard by @q | Stardance
Devlogs:
I modeled mechanical switch keycaps in Onshape. I have no prior knowledge on pianos, so I had to research their size quite a bit, but I managed to piece together how I wanted it to have similar sizing as the DS6 standard. I am still unsure about how long and high the keys should be, but the dimensions right now look correct enough. I am still quite new to Onshape, so I had to remake the keys more than what I would like to admit, and so I am praying I don’t get flagged for inflating hours for only producing what is more or less a glorified rectangle
Finished modelling the initial base models. It took quite a while to align and correct everything, but the base plate finally fits a whole octave of keys correctly. There were a lot of things I had to consider, like how the keycaps are to be connected to a controller (I opted for the easy option of leaving it up to the user to manually solder) and how other octaves should be connected (I initially added dovetails for extending the keyboard, but I removed them for some reason that I honestly can’t remember; i should probably go back and add them back). Also, I forgot to add this to my previous devlog, but the reason why I opted for DS6 sizing is so that a whole octave is safely printable on my Bambu A1 mini (the base plate is ~160mm wide compared to the A1 having an 180mm build plate). Note that there are supposed to be mechanical keyboard switches separating the keys from the base, but I’ve accounted for them so that they should fit.
On the microcontroller side of things, I have started implementing a WiFi Access Point on an esp32. This is going to serve as the gateway to the configuration of the device, which I am trying to make it so that it is as simple as being a captive portal (a page that immediately pops up once you connect to the network). Making the esp32 do that required a ton of moving parts: the esp32 is serving as the access point, the DHCP server, the DNS server, and the HTTP server all at once. I was completely new to anything networking, so it took me a while to research what any of those were and how to implement them (albeit mainly by importing libraries but still). I did try to implement the DNS parsing by myself, but it turns out that every bitwise parsing abstraction I could find (packed_struct or deku) depended on a foundational package (bitvec) that could not compile on the esp32, and I wasted the whole day scouring the github issues of all the projects for solutions which all ended up not working. Espressif themselves literally even have a patch of the library of their own ( https://github.com/EspressoSystems/bitvec-patch ), but no matter what I did, nothing ended up working, and I was too exhausted to go implement the server manually by myself at that point. Anyways, I still need to tweak the DNS response for the captive portal to work, but everything else is working
Ok I was busy with life and getting back motivation and doing some other stuff and I really did not want to post devlogs, but I guess I’m back, even if I’m wasting 20 hours by not committing earlier. I was initially making and iterating on my keyboard keys/base just fine (see the 1st image with a ton of my test prints for the best key shape), but the reason why I lost motivation was because Onshape, my initial 3d modeling program, proved to be too laggy to work with with my trash wifi (waiting 20s for each change to propagate gets old real fast). I then went on a whole arc trying to learn the code-based CAD tool build123d (2nd pictures below is of me attempting to make a spring; I did a lot more than just that with the ~20hr I spent learning it), which I can ultimately say was sort of a mistake. learning code-based CAD was definitely valuable, but I just ended up hating Python even more after this. I went through a few iterations from my previous models from Onshape, but even when I did manage to remake my designs with it, it just felt horrible using the API, and I just quit this project out of frustration for a while. Now though, I am taking AP Music Theory in school, so I figured why not come back to it, since I still do want to make my own keyboard. I then found out that FreeCAD has made the UX actually bearable to use (it is infamously horrible to use compared to other solutions that I cannot afford, or that’s what I thought until I realized that 1.1 got released a couple months earlier and that I only had 1.0 installed when I tested it, so I didn’t have to go through the torture of learning build123d at all, but oh well). There’s only a couple weeks left of this as of I am writing this, so I’ll have to crunch this alongside my college applications that I’m doing, but hopefully it should be fine. Anyways, now that I’m back, I have cleaned up the Rust codebase just to familiarize myself with it again, and I have started working on making the keys again in FreeCAD (the black key holes are now accurate to a real keyboard, as they each are actually slightly offset from the white key edges if you look closely enough, and even such irregular offsets were made somewhat trivial by FreeCAD’s automation tools). FreeCAD can still sometimes be a pain to use (it took me 20 minutes just to arrange the keys!), but I am ultimately glad that I am back, and hopefully I finish everything in time....
|
1792583347.0872881
|
1793188147.0872881
|
|
15271
|
Voltchess by @jithesh_sarvin | Stardance
|
|
1
|
66.09
|
723
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T14:41:02Z", "hours": 62.0, "multiplier": 12.02, "payout": 723, "blessing": "neutral", "text": "if you don’t play chess user (jitheshsarvin) as the username in chess.com to tryout the analysis feature. I made a free chess game review tool like chess.com but better. I added new features with stockfish analysis, move classification and even additional metrics such as the position domination. For new user there is a tutorial. I added a backend for people to save their reports. (note the sign in does not work for regular users). Other features that i added of seo optimization and puzzles and play features to top it off.", "repo": "https://github.com/Lunarcolony/VoltChess", "demo": "https://www.voltchess.me"}]...
|
[{"post_id": 13941, "ts": "202 [{"post_id": 13941, "ts": "2026-06-22T21:40:10Z", "hours": 2.025, "text": "added debugging features"}, {"post_id": 12740, "ts": "2026-06-20T20:35:08Z", "hours": 2.0619, "text": "Created a whole couch hub which runs in a raspberry pi, which allows a coach to add multiple students and analyze and create game reports for the moth"}, {"post_id": 9969, "ts": "2026-06-16T14:35:51Z", "hours": 11.3247, "text": "trained a machine learning algorithm that could predict the future moves in threads. I had to do a lot of troubleshooting to fix the training process and i trained the couch model for about 5 hours"}, {"post_id": 9022, "ts": "2026-06-15T01:39:23Z", "hours": 10.7403, "text": "Created a backend for the website so that the users could sign in. I am changing focus to academy’s to get users. They could log in add their student and it generates reports automatically for each student. Also i have fixed a little bit of the ui to make is more clear and usable for others. I am using vercel to host the from end but i am using a raspberry pi to run the backend locally and run a Cloudflare tunnel to connect these two."}, {"post_id": 8677, "ts": "2026-06-14T12:37:04Z", "hours": 9.1492, "text": "I added a puzzle page which uses stock fish and a custom trained ml algorithm to find mate in two puzzles in complex position. It also takes in real games a input to improve its puzzles every time( try in out in voltchess.me"}, {"post_id": 8100, "ts": "2026-06-13T14:57:32Z", "hours": 9.0711, "text": "implemented a stockfish tab that runs in the browser of the user to reduce the servers stress"}, {"post_id": 7858, "ts": "2026-06-13T03:13:39Z", "hours": 1.0306, "text": "Added blogs and other text to increase seo optimization. I also integrated this new color theme which i asked ai to do it. In my opinion the color theme is mid and it took it only 10 seconds to do it which saved me a lot of work."}, {"post_id": 7693, "ts": "2026-06-12T21:01:55Z", "hours": 1.7822, "text": "Devlog-5 I focused more on marking my getting getting feedback from the users and improving some small bugs and ui and by this process I was able to receive 140 unique users in 2 days and more than 50 new users in the past 12 hours( check out the website - https://www.voltchess.me )"}, {"post_id": 7449, "ts": "2026-06-12T12:41:54Z", "hours": 9.2467, "text": "Dev log-4 added the ability to load a chess game using chess.com api and lichess ai. And integrated stockfish in the browser to analyze the games. Create a simple algorithm to predict accuracy based on their mistakes( which are calculated by sudden movements in eval) try it out at https://www.voltchess.me"}, {"post_id": 6803, "ts": "2026-06-11T12:27:05Z", "hours": 7.3647, "text": "Devlog-3 I deployed this website to Vercel and did some marketing to see how many people would be willing to use my website. As per thier views , it is lower than what i expected and they never returned. Based on these comments, I improved my ui and added new features such as game review but it is still buggy so i did not publish that."}, {"post_id": 6622, "ts": "2026-06-11T03:27:17Z", "hours": 1.6131, "text": "Devlog-2 I have worked to create a new side panel which is ridged for pc and is like a dropdown menu for phones. I also have routed 4 different pages analysis tab has the one with the chess board. I have designed my own logo to go on top to finish it off. I made black and gold color theme to make it feel premium"}, {"post_id": 6494, "ts": "2026-06-10T22:17:53Z", "hours": 0.9517, "text": "Devlog 1 Today i was able to explore different options to create a chessboard using typescript. A really important step to take is what tools and programs i chose to use. I chose vite because of its clean ui and deployments"}]...
|
Title: Voltchess by @jithesh_sarvin | Stardance
D Title: Voltchess by @jithesh_sarvin | Stardance
Devlogs:
Devlog 1 Today i was able to explore different options to create a chessboard using typescript. A really important step to take is what tools and programs i chose to use. I chose vite because of its clean ui and deployments
Devlog-2 I have worked to create a new side panel which is ridged for pc and is like a dropdown menu for phones. I also have routed 4 different pages analysis tab has the one with the chess board. I have designed my own logo to go on top to finish it off. I made black and gold color theme to make it feel premium
Devlog-3 I deployed this website to Vercel and did some marketing to see how many people would be willing to use my website. As per thier views , it is lower than what i expected and they never returned. Based on these comments, I improved my ui and added new features such as game review but it is still buggy so i did not publish that.
Dev log-4 added the ability to load a chess game using chess.com api and lichess ai. And integrated stockfish in the browser to analyze the games. Create a simple algorithm to predict accuracy based on their mistakes( which are calculated by sudden movements in eval) try it out at https://www.voltchess.me
Devlog-5 I focused more on marking my getting getting feedback from the users and improving some small bugs and ui and by this process I was able to receive 140 unique users in 2 days and more than 50 new users in the past 12 hours( check out the website - https://www.voltchess.me )
Added blogs and other text to increase seo optimization. I also integrated this new color theme which i asked ai to do it. In my opinion the color theme is mid and it took it only 10 seconds to do it which saved me a lot of work.
implemented a stockfish tab that runs in the browser of the user to reduce the servers stress
I added a puzzle page which uses stock fish and a custom trained ml algorithm to find mate in two puzzles in complex position. It also takes in real games a input to improve its puzzles every time( try in out in voltchess.me
Created a backend for the website so that the users could sign in. I am changing focus to academy’s to get users. They could log in add their student and it generates reports automatically for each student. Also i have fixed a little bit of the ui to make is more clear and usable for others. I am using vercel to host the from end but i am using a raspberry pi to run the backend locally and run a Cloudflare tunnel to connect these two.
trained a machine learning algorithm that could predict the future moves in threads. I had to do a lot of troubleshooting to fix the training process and i trained the couch model for about 5 hours
Created a whole couch hub which runs in a raspberry pi, which allows a coach to add multiple students and analyze and create game reports for the moth
added debugging features
Ships:
if you don’t play chess user (jitheshsarvin) as the username in chess.com to tryout the analysis feature. I made a free chess game review tool like chess.com but better. I added new features with stockfish analysis, move classification and even additional metrics such as the position domination. For new user there is a tutorial. I added a backend for people to save their reports. (note the sign in does not work for regular users). Other features that i added of seo optimization and puzzles and play features to top it off....
|
1792993897.6583104
|
1793080297.6583104
|
|
647
|
Space Travel by @Vishy | Stardance
|
Vishy
|
1
|
66.0
|
1260
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T22:55:07Z", "hours": 66.0, "multiplier": 19.04, "payout": 1260, "blessing": "neutral", "text": "Hello everyone, this is my first ship for Stardance, and let me introduce you to Space Travel. Space travel is an 2D game I have spent this whole month on creating. I have used tile maps, parallax 2D nodes, pixel art, and many features to create this game. Even though it is a work in progress and a test run for me I would like to congratulate my self on spending over 60 hours for a project. This is the longest I have ever spent on the project, and this is as complex as it gets. Some cool things I think would wow you guys are Parallax 2D nodes, theses give the background life, the make it look like the clouds are moving. Ray Casts, to create avalanches. In this game I have made many types of aliens for the user to battle. I am so proud of my self for finding the time to make this wonder full game. I have had people test it so I could polish it up for the first test run. I know it could be better, but I am planning on adding an Alien Universe. Users will have laser items, pick the planets to travel to, choose their character and much more. I am very motivated to continue this project and push it to it’s absolute max. This game features multiples levels, Level 1 (Earth) your goal is to escape the alien invasion you woke up to. Level 2 (Mars) you travel to an burning hot planet to find out more aliens live their, including goo types. Finally Level 3 (Neptune) you visit this icy place and find icicles, ice balls, avalanches, and ice bunnies waiting for you. This game took a lot of thought and time to create, as it is not as simple as it looks. The code was very complex as I had to calculate speed, and shooting distance (for the goo ball and ice balls). I am so glad I can share this hard worked project with you guys. I hope you enjoy it!", "repo": "https://github.com/fishygaminglife-del/Space-Travel", "demo": "https://fishyyyyyyy-life.itch.io/space-travel"}]...
|
[{"post_id": 15968, "ts": "202 [{"post_id": 15968, "ts": "2026-06-25T22:42:07Z", "hours": 2.2925, "text": "Finishing Up Hello everyone, I have been fixing bugs today and adding items I forgot. Examples are audio, bugs, end scene, making harder levels easier (I was the only one able to beat it) and make text clearer. Bugs Today, I fixed mainly bugs because I am going to ship right after this devlog (my work has payed off). First I am going to talk about the skipping text bug. When I do the dialogue at any part of the level/game, and then press esccape button, (pausing game/pausemenu) and then I press home inside the pause menu, the whole game crashes, and I just figured out why. When ever im doing text I call $MC.wait_for_skip() this is a function, and in the function it has await get_tree().process_frame the bug with this, is that when ever the text is running and wait_for_skip() is called it is waiting and calculating every single frame, so when the user presses home, the player is gone, and that process_frame was never finished, so the game bugs out and ends. Well to counter this, I didn’t really do anything. I am really busy right now, and am trying to make the game good for the first ship, as much as I want to work on this bug I have to set it aside. In short terms, I got rid of the home button. If the player wants to go home they have to close the game and open it (reload page). Bug Two For the second bug, it really confused me. When I restarted the game, and went through level one (keep in mind I only picked up one coin) and then went to the second level, it said I had 30 coins. I saw my error, and it was that I was manually setting it to 30 coins when the game starts, so I then set that value to 0, so user starts with no coins. I thought all was solved, but it now showed five hundred and forty seven coins. I looked closely in the save_game function. I saw that I had set global.coins (the coins for the whole game collected) to what ever was in the label. And it might seem okay, but the label had manually been set to five hundred and forty seven coins. I just delteded that line of code because whenever the player picks up coins, it automatically goes into the global variable, so there was no point in having that line (since it only bugged out the game). Audio I forgot about the audio/sound effects/ background music until the end of the game (today, since I am going to ship). Because of this I had to rush through it, and I am going to warn you, some of the audio in the game might sound… wonky. Anyways I recorded me making the audio, like an alien shooting, icicles falling, avalanches moving. I just realized while writing this devlog, in the game I misspelled avalanche, and I have already exported it and uploaded the game 😭. Difficulty I had some people test out my game, and they had alot of good feedback that I implemented today. I still have not done some of it, but that is for next time. First they said level 1 was harder than level 3. I tested it out but didn’t find any problem, I realize that I play this game everyday to test so it must be easy. I made the boss fight for level 1 easier so the user can get through. To do this, I made the goo rise slower, and added more stepping points on the ground. Then I was told level three’s avalanche was too slow. I had to manually change the speed, but this was easy since I had incorporated a ray cast into the avalanche."}, {"post_id": 15628, "ts": "2026-06-25T12:49:57Z", "hours": 4.1514, "text": "Adding Touches Hello everyone, it has been some time since I have devolved, and I want to talk about what I have been doing, some goals I have, and some deadlines. For the past few days I have not been shipping because I have been working on level 3. From the screenshot you might be able to see the avalanche and the map for the avalanche. So I fixed a bug with the icicle, so even if it touched the ground and then you touched it. You would lose a life. For the collision shape of the icicle whenever it touched the ground I did set_deffered(\"disabled\", true) so this would disabled it, and I would reenable it whenever it starts falling again. Also there was a bug where the aliens could shoot through walls, to solve that I just decreased the time pass value (time pass checks how long it has been running before it can do body checks) and kept time pass the same value for on enemy touched. Finally the avalanche, during the process of this I learned some pretty cool things. So the avalanche. This would be hard to animate, but apparently Godot has something for this. It is called a ray cast, and is brings the items with it down until a collision body. So what I did, is just like my alien script, I made it move right with speed * delta . And the ray cast handled itself, because it was down hill. I am still learning how to properly use a ray cast but for down hill situations I think I now know. When I was putting the animation for the space ship enter and leave. I wanted to reuse previous animations I have made. So I went to level 2 and realized I hadn’t finished it. But level 1 had it. This is where things get interesting, I brought out my calculator, duplicated the values into level 2 and 3, and subtracted the first keyframe from where I wanted the player to start. This allowed me to subtract 1454 from the X value and 104 from the Y value. So I did that for each of the key frames for both level 2 and 3 (keep in mind I wanted them in different places) and I had my animation finished. I tried adding a pause menu for when the player dies or pauses (esc) but I guess it didn’t turn out well it looks grainy and unprofessional, but I really need to ship, because I wont be available for the next few days and I can’t work on it. Future Items Before Ship Before I ship I want to add a few things that have been suggested. First of when testing it was realized that when the shield breaks, there was no pop up or anything indicating that it had broken. So I will have to now go and fix that. Second, I need to add sound. I always add sound at the end of the game, and I completely forgot to. Overall I think that this first ship will tell me a lot on what I have to work on for this game, I think I could do some better improvements if I wait some time then ship. But I think it will do great, and people will see the hard work I put into this game. Thankyou everyone!"}, {"post_id": 13452, "ts": "2026-06-22T01:06:27Z", "hours": 6.0436, "text": "Level 3 Major Changes Hello everyone, today was by far the most productive day I have ever had in all of star dance, and possibly previous Hackclub events I have done. I almost finished level 3 in one day! This was a massive accomplishment for me as for the other levels took at least 3 days to do. An overview of what I did today were, map, icicles, ice skates, new alien, asset placing, inside space ship scene, space ship traveling planet’s scene. New Features Ice Shooter Alien , First I want to talk about the ice shooter I made today. So for every new level, I always add a new alien, and while I was still working on level 2 I was contemplating what new features I should add to the game for level 3, and since I thought I should do an ice planet because I was on mars (fire) and earth (neutral), I thought I might want something cold then I thought of this planet Neptune (I don’t have planet names yet)! So today I made the Ice Shooter Alien , This alien shoots snow which slows the user down for 3 seconds. While the cool down is not slow, there is only a 1 in 10 chance the player looses health to the snow (a rock could be in it). Icicles , it was recommended to me to add icicles to the game since it is an icy biome and there should be some structural relation to the biome and features. So I just used an area 2d as the base structure, and just detected if it touches the player or something else (like the enemy or structure). To make this icicle fall, I couldn’t give it a character body then there would be gravity, and it would keep moving even if I stopped it, there is a way to work but I figured out an clever way. I subtracted the distance between itself and the player using position.x and subtracted to see if the player was in range, and if it was I was changing the position with speed and delta coming down. And I just reset it to the original position because in the ready script I assigned it the starting position. Ice Skates , Ice skates were actually pretty easy, I duplicated the players idle and movement assets, and redrew them to have skates on the bottom, and once the player buys skates from the shop I make has_skate = true then in the physics process whether the player is idle or moving, it changes the sprite sheet to the one with ice skates, and when I disable it, it goes back to the original sprite sheet with no skates. Overall I think I did so much today, I around an hour drawing the art for the spaceship this morning (both the scenes of changing worlds and inside spaceship) because I had to add a new section and duplicate move, and modulate the planets to look like a new space travel. I think tomorrow I should finish or get close to finishing level 3 because I have to create the boss fight. Thankyou, bye guys!"}, {"post_id": 12834, "ts": "2026-06-21T00:31:05Z", "hours": 5.2153, "text": "Level 2 & 3 Updates Hello everyone, I have alot to talk about, especially since I recently just finished level 2 and am starting on level 3. I still need Planet Names waiting for suggestions but so far I am just using analogies in my game like earth (this is going to be the real planet) mars and Neptune. This helps players understand and relate to the geography and climate of the planet. For example in the screen shot you see it is an icy artic place like the planet Neptune. Let’s get started and talk about today! Level 2 Bugs, I was not so lucky, this paragraph is about bugs and fixes, well I am not happy to say that my animations from my text animation player all deleted, and since I didn’t commit to GitHub for the day, when I restored it, all the changes I made went away… I had to remake everything that I changed, and I still have some bugs, but I forgot some items, so it is hard. But I mainly just fixed placement. When I came back home to Godot, some items were gone, some part of the tile map disappeared I had to put the tiles in the right spot, and the code was all messed up. I currently still have no idea what happened, but I fixed it all and I have not had bugs since. Today I got a suggestion to make a cutscene of the level 2 alien boss burning. As you guys know yesterday I changed the goo/lava color to white so I can manually modulate it in the editor because I am reusing assets (this makes it so easy for me 👍). Well now I made a cutscene of the alien boss burning, I would have had to redraw everything, but instead I duplicated the animated sprite (the alien boss in the cutscene) and modulated to low transparency and red, so it looks like the alien boss has a lava shadow. Level 3, Alright I know you guys saw the screen shot, so you saw the icy biome. I am now going to explain my ideas that I plan to add to level 3. First, Ice Shooters , hear me out. I recently added goo shooters to the game, and since this is artic biome ice shooters to slow the player down, and gradually decrease health if they don’t find heat could be an awesome idea! Second actual ice . There are going to be like ice pits/platforms when the player walks on, it is all slippery. And I also might add moving platforms, but these probably will be saved for level 4 but I am still deciding. Space Ship Scene As you guys know, after each level I make a cutscene/scene of the player in their alien spaceship. I think for this one (right after level 2) the player will explore more of the spaceship, and learn something about the aliens. I am still deciding but currently that is my ideas. If you guys have any suggestions feel free to recommend them. Thanks, bye guys !"}, {"post_id": 12264, "ts": "2026-06-20T00:59:37Z", "hours": 5.025, "text": "Level 2 Hello everyone, sit back and get ready for a long devlog, because today I have alot to talk about. Okay, so guys now we have finished level 2, it is fully completed, I just need to add one line of code (changing the scene to the right scene the next one) and then I am done and probably wont touch it. Since I have not devloged in a few days (I did little time and was busy) I will talk about alot of items which is basically what I did for the past few days. Shield Alright I really want to talk about the shield first. So if you guys watch the video you can see how the shield works. Obviously it doesn’t have the code, but I will talk about how I integrated it with the shop and how that works. So I have 2 items in my global script, shield enabled, and shield dead. If I go to the boss fight of my game (where the shield is not allowed and users dont get it) I say Global.shield_enabled = false . This allows me to set if the user can use the shield or not through out the game. And if you guys made games previously or used Godot, you know about func_process() this allows me to simultaneously run items. You might be wondering, how does this simultaneously running fuction affect the shield for the player, and why would I do this. Remember earlier when I used the Global shield enable to turn it on and off, well the process checks it and if it is false, then it makes the shield not visible and not work. I mainly was relying on this for the past few days, because I was working on the shield. I also used process to modulate and change the size of the shield bar shield durability based on how many hits the shield has taken and how many hits it can take, I divide it to get a percentage. I also added the feature that if the player dies, they lose the shield, for the player to get the shield back, they have to buy it again for 15 coins. I plan to add an animation at the beginning of the level showing the shield coming onto the player. The Shop If you guys saw in the video, you saw the shop is accessible from anywhere in the game. This was easy all I had to do was add a button with the shop icon, and make the shop items visible. But I also have to account for mobs aliens shooting the player while they are in the shop. Luckily godot has an in built function called get_tree().paused if I set this to true every item will become paused. But luckily I can set the shop node’s process mode to always so it works even when the game is paused. This solved my problem of the aliens shooting and moving while the player is in shop. Boss Fight If you guys didn’t know, for the past few days I have been working on the boss fight, I have not got enough time to finish it but today I finally finished it today! So in level one, there is a scene with the boss fight for goo rising, and now that is level 2 and the player is on mars I wanted lava. But I didn’t want to redraw it so I just modulated the goo (I now realize that was a bad idea). Because the goo was not originally white, the modulating color started green, so what ever I chose was darker and not the right color. So because of that I had to spend my time fixing the goo and changing it to white and grey. This way for my level 1 goo rise, I just modulate it to the goo green I want and for level 2 I modulate it for the lava. Also for the boss fight, I added it so the shield disappears when the player has to fight, and made the animations more clear. Anyways guys I think this game will turn out great, I am always looking for suggestions especially for level 3 , bye guys!"}, {"post_id": 11042, "ts": "2026-06-18T02:18:53Z", "hours": 2.3531, "text": "Level 2 Boss Fight Hello everyone, I am coming close to an end of my level 2 of Space Travel. So currently I have made the boss and am working on the animation and how the boss fight is, so first I am going to explain the logic, then I will talk about timelines and how I have acomplished, and third I will start the alien UNIVERSE So what I have done today was finish up the shop (I barley did anything to it) and I also worked on the alien. The first part of today I spent a good amount of time creating the alien boss, and it doesn’t even look good 😭, so I became demotivated for today and only did 2 and a half hours. But the day is not over yet, so much left to explain. To continue, I created the animations for this boss, such as the text, and the anime animations, but I am still not done and have not fully tested it so there are bugs, but I will try to fix it. So I think I am good on time, so far I have been trying to finish up 4 levels then ship. For level 1 was follow and static aliens (walk in place). Level 2 was goo spit shooting aliens. I have no idea what to do for level 3 and 4, I really appreciate any suggestions on new items/things to add🙏. Also to clarify my solar system ending (part 1 of game) the user will go back to earth for level 4 and dodge the hardest of items and talk to the alien knight, there would be some type of dialogue like “ I never wanted to do this…” And that will be the end of level 4, and that is part 1 which I would ship my project for the first time, looking at the time line, I probably will get 60 hours when I ship, I hope I do good. But I really appreciate any suggestions, but to conclude, I am working on level 2 boss right now, debugging and making the animations more smoother. For level 3 and 4 I will talk all suggestions . Thank you everyone, bye!"}, {"post_id": 10409, "ts": "2026-06-17T03:09:38Z", "hours": 4.5614, "text": "Level 2 Touches Hello everyone, I have done a lot to my game for Level 2 im almost done. I’ve basically been stacking a bunch of systems together and fixing a lot of the smaller problems I ran into over the last few devlogs (especially with goo, shields, and collisions), and it’s finally starting to feel like an actual full level instead of just a test area. Shop System Fully Finished First of all, I have finished the shop and now it is fully functional and actually works the way I wanted it to.You can now walk up to it and use it properly, and I added a lot of UI polish so it doesn’t feel dead or static. I added a hover function so when the mouse is over an item, it actually reacts (like spinning or doing a small animation), which makes it feel way more alive instead of just a menu.I also added different text responses depending on what happens: if you don’t have enough coins it tells you if you already own the item it tells you and when you buy something it gives proper feedback. This also ties into the coin system I’ve been using in the HUD, which now updates properly every frame so the shop always shows the correct value. Goo + Shield System Improvements (big fixes from earlier devlogs) I also fixed a lot of issues with the goo system that I was struggling with in earlier updates. Before, the goo had problems like hitting the player instantly when spawning shield reflection being inconsistent and weird collision timing issues. So I added a small delay (around 0.2 seconds using time checks) so the goo doesn’t detect itself or instantly trigger collisions when it spawns. I also improved the shield logic so now when the shield is active, the goo can actually be reflected back properly instead of just always damaging the player. I also added a durability feature, it is not visible yet but i am currently working on it. Now the hits count and soon it will be a visible feature. On top of that, I cleaned up how goo behaves when it hits enemies. Instead of doing messy collision disabling and weird states, I simplified it so enemies can just be removed cleanly with queue free, which makes everything way more stable and less buggy. Boss Fight Setup (Level 2 main objective) I’ve also started the boss fight for Level 2. Right now, there is an obby section where the boss is attacking with goo balls that can pass through parts of the environment, which makes dodging them actually important instead of just standing still and tanking hits. The player’s goal in the boss fight is to dodge the goo while making their way through the obstacle area and then press a special button (which has a cool animation). When the button is activated, it triggers lava flow across the map (since the level is on Mars), which is going to be the main mechanic used to defeat the boss. So instead of just fighting directly, it becomes more of a movement + timing fight where you have to avoid attacks and activate the environment against the boss. Overall Progress Overall, Level 2 is finally starting to feel like a real level instead of just a prototype. I’ve fixed a lot of the earlier problems with the goo collision timing shield reflection enemy interactions and UI consistency. And now I’m moving into more “game design” work instead of just fixing bugs, which is a good sign. Next steps are finishing the lava system for the boss fight polishing the obby section adding boss behavior and attack patterns and improving visuals and feedback so everything feels better."}, {"post_id": 9014, "ts": "2026-06-15T01:07:13Z", "hours": 3.6569, "text": "Level 2 Hello everyone, I did major updates and changes to Level 2 and this was the longest I have worked in Stardance in a single day so far! I worked for about 5 and a half hours today and made some really solid progress. Level 2 Setup + Map Design So I officially started Level 2. I created the base map and started building out the layout. I also added aliens around the map to start filling the world and make it feel more alive and challenging.Right now the level is still in early stages, but the structure is there. I still need to add fire/lava sections, more environmental hazards, and set up the boss fight with the goo enemies. I also want to add extra mechanics in Level 2 so it feels like a big step up from Level 1 instead of just a copy. Goo Enemy + Shield System Improvements I also fixed a lot of issues with the goo shooting system and improved how the shield works. Before, the goo had problems with detecting collisions too early, so I added a small delay using get_tree().create_timer() logic so it doesn’t instantly detect its own body when it spawns. I also adjusted the collision timing using a small time check (around 0.2 seconds) so it only starts interacting properly after it has actually left the enemy. The shield system now works with the goo reflection mechanic. When the player shield is active, the goo can sometimes be reflected back instead of dealing damage. I also improved how it visually flips and stays centered so it doesn’t look weird when the player changes direction or moves. Combat + Collision Fixes I also spent time cleaning up how the goo interacts with enemies and the player. Now when the goo hits the player without shield, it properly plays the splat animation, stops movement, and deals damage using the degrade() system. I also made sure it doesn’t instantly re-trigger collisions by adding timing protection so it feels more consistent. For enemies, I started experimenting with making them react when hit by reflected goo. The idea is that when they get hit, their collision gets disabled so they can fall down instead of just standing there, which will make combat feel more dynamic once gravity is properly set up on them. Overall Progress Overall, Level 2 is starting to take shape. The map exists, enemies are placed, and the core systems (goo shooting, shield reflection, and collision handling) are way more stable now. Next steps are: finishing the lava/fire areas improving enemy fall + death behavior adding the boss fight mechanics for goo polishing shield visuals so it feels smoother and making Level 2 feel more intense than Level 1"}, {"post_id": 8791, "ts": "2026-06-14T16:28:33Z", "hours": 4.76, "text": "Level 1 Complete Hello everyone, I just completed level 1, adding the finishing details fixing bugs, and adding a very cool parallax background. Major Bugs, I didn’t have major bugs but I had many bugs, for instance I had a scene change after the player enters the spaceship, this was for them to escape earth, but for some reason the scene change never worked, and it kept saying null, even when I printed this function. To fix this bug I made a variable and before the function was called I set it, so ** var tree = get_tree() ** this allowed me to call the functions without it becoming null, I still have no idea why the function was null but I guess I will have to figure that out. Another bug was my alien. So for my level one I have moving aliens, following aliens, and I was going to have moles, but I think I will add them in level 2 to keep it simple. But the problem was my following aliens, whenever they land on the player they never made the player lose a life or disappear. I looked at the collision bodies, and the one that gives the alien it’s shape was larger than the area 2d’s body, so therefore it would have never made contact with the player and would have not done anything to the player. To fix this, I adjusted the body size of both collision bodies. Parallax Background, a parallax background is basically different parts of the background moving at different speeds when the player moves. I made 7-8 layers of background, trees, clouds, bg colors, floor. To use them I used the parallax 2d in godot and set the scroll speed to different values for each, the farther away the bg element the lower the value, then you get the result as clouds moving at different paces of other elements as shown in the video. But this was not all that easy, I had a bug where the parallax elements went down so much when I started the game, I am pretty sure I am starting the player in the air, and when he falls so does the elements, so I have to place him down, also it is automatically adjusting my scroll offset. Summary/Level 2 That is about it for level 1, I also fixed the coins in the corner, and added more story. For level 2, I am going to start with making a parallax background, and make the actual game. Thank you, bye!"}, {"post_id": 7253, "ts": "2026-06-12T03:06:01Z", "hours": 3.1069, "text": "Shooting, Level 2 Hello everyone, I recently finished level 1 and started building level 2, there are many new things that I am proud to announce. Level 2 Intro Animation I added an introduction to level 2, so after we leave earth, we end up in the alien spaceship, where the player vows to come back to earth and save his home planet because he couldnt do anything on the planet. Then he is in the spaceship and looks around, then he goes to the other planet. Alien Space Shooter So this is the new character the ALien Space Shooter, idk what to call him yet, the acronym for Alien Space Shooter is pretty bad… Anways it gets the difference from the player and the alien, and it shoots the ball that way, but if the alien is on the other side the difference is negative so the code figures out the position and where to shoot, currently I am working on the splat feature on if it touches the shield or the player or a wall/item it splats and stops moving. Shield + MC Adding’s I am adding a shield to the main character, so here is the plan, when the alien shoots out the goo, if the player is presssing the button to use the shield, (I am probably thinking control button) then they are blocking, the shield will have a durability, and they can use the shield for as long as they dont use all the durability. But here is the good thing, if they block the goo then there is a 1 in 5 chance it reflects the goo and it hits the alien and makes it vanish. This is a realy useful feature as the only other way to destroy an alien currently is the walk into and lose a heart. Summary + Updates I plan to make this more polished, as the splat for the alien’s goo shooting, and the shield for the character. I also need to make these all clear, and make the animations much more better and professional, bye guys!"}, {"post_id": 6633, "ts": "2026-06-11T03:51:17Z", "hours": 3.1117, "text": "Level 2 Hello everyone, I am starting Level 2. For the past few days Lapse has not been loading on any of my browsers, and I had no idea why. Then today I tried Chrome and it finally worked, so now I can actually post updates again. Anyways, today I was mostly fixing bugs and finishing up Level 1. I had a weird bug with an Area2D where it kept triggering when it shouldn’t have been. I spent a while checking collision bodies, Area2Ds, animations, and positions. In the end I just rewrote the code and renamed some things, because I think Godot was getting confused about which body was which. After that it started working normally. I also finished the boss section. The Alien Knight now has an introduction cutscene, camera changes, animations, and the goo obstacle that chases the player. There were a lot of small bugs involving AnimationPlayers, Area2Ds, collision shapes, and things resetting to the wrong position. Some of them took way longer than they should have, but eventually I got everything working. I also added some more details to the ending of Level 1. The character now says, “Where am I, what happened to my home Earth?” before leaving on the spaceship. It is only a small detail, but I think it makes the game feel more connected and gives a better transition into the next part of the story. The boss fight is also much better than it was before. Originally all you had to do was sprint and hold the key down. Now there are obstacles, platforming, timing, and hazards that make it feel more like an actual challenge. I think it is way more engaging than just running in a straight line. I also spent some time working on hearts, checkpoints, and restarting parts of the level. I am still deciding exactly how I want that system to work, but I think it is heading in the right direction. Now that Level 1 is basically finished, I am starting work on Level 2. Right now my plan is to have a scene inside the spaceship before the next level begins. I want it to explain more about the aliens, what happened to Earth, and what is actually going on. I think having some story between levels will make the game a lot more interesting instead of just jumping straight into another map. Overall, after spending so much time fixing bugs, collision issues, Area2Ds, animations, and cutscenes, it feels good to finally move on and start making new content. I am excited to start building Level 2 and expanding the story of Space Travel."}, {"post_id": 6023, "ts": "2026-06-10T03:07:19Z", "hours": 2.4161, "text": "Anime Intro Hello everyone, after what I did today I feel so motivated. Let me explain it to you guys. If you see the video, you will see a very professional introduction to our character, Alien Knight, along with his message. Someone recommended that I do this type of thing, so I spent about an hour creating it, and I think it looks really nice. It makes the boss feel much more important, and gives him a proper introduction instead of just appearing out of nowhere. I also worked on the boss cutscene itself. I learned how to switch between cameras during cutscenes, make animations play multiple times, and get everything to happen in the correct order. There were a few bugs where animations would instantly skip or stop after running once, but after a lot of testing I got it working. Besides that, I was fine tuning the map, getting rid of what we don’t need, making it shorter, and making the game make more sense because I don’t want the first level to be overwhelming. At one point I even misplaced about half of the TileMap and had to move it back where it belonged. It was annoying, but the level flows much better now. I also spent a lot of time fixing collision bugs. Some Area2Ds were detecting StaticBody2Ds instead of the player, which caused things like random restarts and enemies triggering when they shouldn’t. After adding proper player group checks and fixing collision layers and masks, everything is working much more consistently. Another bug I tracked down was with animations moving my character to the wrong place. For some reason the player kept spawning where an old animation had moved them. After a lot of confusion, I found out it was caused by a RESET track inside the AnimationPlayer. Once I removed it, the player spawned where they were supposed to again. Overall, I feel like today’s work made the game much more polished. The boss introduction feels better, the map is cleaner, the cutscenes work properly, and a lot of annoying bugs are gone. There is still a lot to do, but seeing everything come together is really motivating."}, {"post_id": 5340, "ts": "2026-06-09T02:28:23Z", "hours": 1.9058, "text": "Boss Fight Hello everyone, as usual I am just fixing bugs and making my game better. “I have some ideas, a couple of suggestions, to fight instead of fleeing west.” Just a quote, but it perfectly matches my game right now. So currently I had sprint, and it was required to hold it down to beat the boss. All you had to do before was run, but now you have to do an obby, in a certain amount of time, while dodging the boss. If you complete all of that, you get to the spaceship. This is much better and more engaging than just holding sprint and running. I also added heart pickups. If you don’t already have 4 hearts, you can pick one up and restore your health. While adding this, I fixed a bunch of bugs with collision layers, Area2Ds, and enemy detection. Some enemies weren’t detecting the player correctly, and at one point they were even falling through the map because I forgot to give them the right collision setup. After a lot of debugging, everything is working properly now. I also improved some of the enemies. The aliens now stop following the player if they get too far away, and I worked on patrol enemies that move left and right. There were some issues where they would get stuck on walls and spam flip back and forth, but that is fixed now. Another thing I spent a lot of time on was cutscenes and dialogue. I added text that the player can skip with Tab, boss dialogue, and a boss intro cutscene. I also learned a lot about AnimationPlayers, AnimatedSprites, camera movement, and even how reset tracks can accidentally move your character to places you didn’t expect. For the boss fight itself, I am still thinking about lives. Right now, if you die, you restart the level. One idea I have is giving the player two lives. If you lose the first life, you restart the level, but if you lose the second life, you restart the entire game. I might stick to restarting levels, but I haven’t decided yet. Right now my main goal is just making the game more fun and polished. Every time I add a new feature, I end up finding three more bugs to fix, but that’s just part of making games. Overall, the boss fight is much more engaging than before, and I think the game is improving a lot with every update."}, {"post_id": 4697, "ts": "2026-06-08T03:50:09Z", "hours": 3.3156, "text": "Finishing Level 1 Hello everyone, im coming close to an end of level 1, today was a big day, and I should be able to finish it tomorow by fixing a few bugs and adding a few things to make it a functional starting tutorial scene. I have got almost to the ending part of level 1, I have made the boss fight/scene (it is not a cutscene, that will be for other levels), but its not finished, because there are many glitches for the user to stay alive but not reach the end, resulting in bad votes so I need to fix that. I finished the map probably just need to add a few things here and there but most of it is fine. I fixed the aliens and for each one, I can stick with the default settings (speed, how far they move both left and right) or I can put custom variables, using @export var, which puts an variable on the node. This was good, as before I had a problem of an alien walking through the wall, but now that is fixed. SO basically I just need to add armor, a laser item, for the user to use to shoot, but right now I am just doing the basic things for the game and sticking with my little tutorial for level 1!"}, {"post_id": 3957, "ts": "2026-06-07T02:51:12Z", "hours": 3.6392, "text": "Character Fixes and Level Progressiveness Whats up Yall, today was a good day, and it helped me develop my project even further, making me so happy and confident. In the picture, you can see there are 8 hearts, coins, aliens moving (well its an image) and coins on the top of the screen, so let me break it down. Aliens I was building the map, and then when testing I realized that the aliens would walk through the walls, so I was learning and testing some code, but then the alien glitched, I tried to fix it but I couldnt, so I went back to my old code and just made the room for it to move larger, because I was trying to get the little steps done, then I would fix the main problems! Coins + Aliens I drew the coin animation today and it was fairly simple, but for both the coins and aliens, I added area 2d body so I could detect when they touch the player, and singled the player out by in_body_(player) then I made them disapear, then either add a coin globaly or lose a life globaly, then I disabled the area 2d with monitoring. Area 2d.monitoring = false, so this made that they could not be used or detect anything until I turn it back on, so no extra coins or more loss of lives. General I drew more items for the map, and will use the atlas for all worlds, will just change colors and add few more items. I was also working with text skip, so now, the text does not go to the next dialouge until user presses tab (skip). But anyways those are all the changes I made, thanks bye guys!"}, {"post_id": 2520, "ts": "2026-06-05T01:47:57Z", "hours": 2.4633, "text": "Alien Fix + Character Bugs + Level 1 Hello everyone, today I did alot I was productive as usual, and I have alot of time to work on this game. First I fixed my player added hearts and made sure all the animations for text are 4.2 seconds because if the user wants to skip they can press tab. Also I fixed some alien bugs so now it works perfectly, when I was testing THE ALIEN GOT STUCK ON MY HEAD. This would have bugged the game and the user would not be able to play, but now they go through the player, but until I make it so they disappear upon touching the player and the player loses a heart that is what I have. Now I created the starting scene with all the instructions on how to move and all of that. It was pretty easy, and I just named the narrator the voice because it is better than just putting ??? or “THE NARRATOR” so anyways, I think by taking this slow one step at a time I can accomplish what I want, and make it better quality than I would think!"}, {"post_id": 1880, "ts": "2026-06-04T03:00:54Z", "hours": 2.2722, "text": "Character Fix Hello everyone! I was working on the character, and all the animations such as movement and the text, because that is part of the character. So the animations all went smooth, and I coded it easily. But the hard part was the text, I had text animations and text skips where you press tab to skip the text. I dont know how to do it where you press tab once it goes to the end of the text, then the second time and it skips and goes to next dialouge, so I just did it so when user presses tab it goes to next dialouge. This was hard and I had to look at my previous games to see how I did it (because it has been over a month since I was making games) and in the previous games I had to put a function in each scene, but in my game, I just put it in the character script, so that where ever the character is the text is. I was thinking my game looks so bad, and it is not professional, but I got reassurance from others that this is one of the best games I have ever made, and it is high quality. That makes me happy and gives me the motivation to continue, but there is one problem, I dont know how to continue. I have created the alien and the character, BUT I DONT KNOW WHAT TO DO NEXT!!! So I am still brainstorming but I think maybe I should add floating islands and an alien king for each world, that the user has to defeat, otherwise they go back to the start of the level and the scene resets. But anyways that is what I am doing, if you guys have any suggestions for my game, I am open to take it. Thank you!"}, {"post_id": 1239, "ts": "2026-06-03T02:55:08Z", "hours": 3.7708, "text": "Finish Cutscene Hello everyone, I had a cutscene at the beginning of the game I was talking about, I recently finished it. So there were problems and good things First I had to draw the alien ship and animate it coming closer to earth and crashing (fire and burnt earth), this took some time but is now complete Problem, I had a problem of everytime it ended on a different frame of the animation so then the ship was in the wrong spot and it looked like it missed land, to solve this problem I called the frame right before I stoped the animation so that it ends on the frame I need. After these I just needed to fix the code for the loading and restarting, this is going to be my first time making a game like this where it saves data, and it is going to be the longest I spend making a game. So right now it saves I think on the cookies, and if you press restart I manually call the level and all the gear to 0 instead of just reseting the cookies. But the way I am saving it, is by after every level or something the user gains, then I add it to the save script. I started making the character, and since this is a platformer game and not a top down movement game it is hard to draw the character let alone the animation, you can see in the screenshot provided below how I drew the character. This took around an hour and I had to view my previous games to see how I wrote the code because I do it differently since I have idle animations and alot of movement. I also had to drawn the floors and make floating ones. This lays down the base of my game, and once I finish the first level I should be familiar. I am now thinking it should incorporate obstacles, instead of just enemies, and also kind of like a scavenger hunt for them to find items. Anyways that is my project, see you next time guys!"}, {"post_id": 586, "ts": "2026-06-02T02:34:27Z", "hours": 2.1167, "text": "Hello everyone! I love making games and have planned out a well thoughtfull game plan that should take 3 months. So basically the outline of my game is Battle monsters through the space realm. Find your way back home. Gain multiple materials for better space gear and ships. This game is both an obby/adventure/action game Users start on earth, a destroyed deserted planet habited with aliens. Users have to fight and find their way out to reach the new planet with their civilization Users unlock different planets after beating one Users must fight through all the planets to reach the end and find their way Aliens/Monsters randomly drop items which can be used to craft gear and after they have enough users find their first space ship and upgrade it with their spare materials Users can choose to switch to a different spaceship and upgrade that or stick to their current spaceship. I took 2 hours to draw the scene you can see in the screen shot because it is important and serves two purposes, one it is the home scene (it is also animated) and two once you start, it will have an alien ship blow up onto it. Now you guys get the gist of the game, but I hope this turns out great and since there is a little over 3 months to finish this, I think I will do great and you guys will enjoy it! See you next time!"}]...
|
Title: Space Travel by @Vishy | Stardance
Devlogs Title: Space Travel by @Vishy | Stardance
Devlogs:
Hello everyone! I love making games and have planned out a well thoughtfull game plan that should take 3 months. So basically the outline of my game is Battle monsters through the space realm. Find your way back home. Gain multiple materials for better space gear and ships. This game is both an obby/adventure/action game Users start on earth, a destroyed deserted planet habited with aliens. Users have to fight and find their way out to reach the new planet with their civilization Users unlock different planets after beating one Users must fight through all the planets to reach the end and find their way Aliens/Monsters randomly drop items which can be used to craft gear and after they have enough users find their first space ship and upgrade it with their spare materials Users can choose to switch to a different spaceship and upgrade that or stick to their current spaceship. I took 2 hours to draw the scene you can see in the screen shot because it is important and serves two purposes, one it is the home scene (it is also animated) and two once you start, it will have an alien ship blow up onto it. Now you guys get the gist of the game, but I hope this turns out great and since there is a little over 3 months to finish this, I think I will do great and you guys will enjoy it! See you next time!
Finish Cutscene Hello everyone, I had a cutscene at the beginning of the game I was talking about, I recently finished it. So there were problems and good things First I had to draw the alien ship and animate it coming closer to earth and crashing (fire and burnt earth), this took some time but is now complete Problem, I had a problem of everytime it ended on a different frame of the animation so then the ship was in the wrong spot and it looked like it missed land, to solve this problem I called the frame right before I stoped the animation so that it ends on the frame I need. After these I just needed to fix the code for the loading and restarting, this is going to be my first time making a game like this where it saves data, and it is going to be the longest I spend making a game. So right now it saves I think on the cookies, and if you press restart I manually call the level and all the gear to 0 instead of just reseting the cookies. But the way I am saving it, is by after every level or something the user gains, then I add it to the save script. I started making the character, and since this is a platformer game and not a top down movement game it is hard to draw the character let alone the animation, you can see in the screenshot provided below how I drew the character. This took around an hour and I had to view my previous games to see how I wrote the code because I do it differently since I have idle animations and alot of movement. I also had to drawn the floors and make floating ones. This lays down the base of my game, and once I finish the first level I should be familiar. I am now thinking it should incorporate obstacles, instead of just enemies, and also kind of like a scavenger hunt for them to find items. Anyways that is my project, see you next time guys!
Character Fix Hello everyone! I was working on the character, and all the animations such as movement and the text, because that is part of the character. So the animations all went smooth, and I coded it easily. But the hard part was the text, I had text animations and text skips where you press tab to skip the text. I dont know how to do it where you press tab once it goes to the end of the text, then the second time and it skips and goes to next dialouge, so I just did it so when user presses tab it goes to next dialouge. This was hard and I had to look at my previous games to see how I did it (because it has been over a month since I was making games) and in the previous games I had to put a function in each scene, but in my game, I just put it in the character script, so that where ever the character is the text is. I was thinking my game looks so bad, and it is not professional, but I got reassurance from others that this is one of the best games I have ever made, and it is high quality. That makes me happy and gives me the motivation to continue, but there is one problem, I dont know how to continue. I have created the alien and the character, BUT I DONT KNOW WHAT TO DO NEXT!!! So I am still brainstorming but I think maybe I should add floating islands and an alien king for each world, that the user has to defeat, otherwise they go back to the start of the level and the scene resets. But anyways that is what I am doing, if you guys have any suggestions for my game, I am open to take it. Thank you!
Alien Fix + Character Bugs + Level 1 Hello everyone, today I did alot I was productive as usual, and I have alot of time to work on this game. First I fixed my player added hearts and made sure all the animations for text are 4.2 seconds because if the user wants to skip they can press tab. Also I fixed some alien bugs so now it works perfectly, when I was testing THE ALIEN GOT STUCK ON MY HEAD. This would have bugged the game and the user would not be able to play, but now they go through the player, but until I make it so they disappear upon touching the player and the player loses a heart that is what I have. Now I created the starting scene with all the instructions on how to move and all of that. It was pretty easy, and I just named the narrator the voice because it is better than just putting ??? or “THE NARRATOR” so anyways, I think by taking this slow one step at a time I can accomplish what I want, and make it better quality than I would think!
Character Fixes and Level Progressiveness Whats up Yall, today was a good day, and it helped me develop my project even further, making me so happy and confident. In the picture, you can see there are 8 hearts, coins, aliens moving (well its an image) and coins on the top of the screen, so let me break it down. Aliens I was building the map, and then when testing I realized that the aliens would walk through the walls, so I was learning and testing some code, but then the alien glitched, I tried to fix it but I couldnt, so I went back to my old code and just made the room for it to move larger, because I was trying to get the little steps done, then I would fix the main problems! Coins + Aliens I drew the coin animation today and it was fairly simple, but for both the coins and aliens, I added area 2d body so I could detect when they touch the player, and singled the player out by in_body_(player) then I made them disapear, then either add a coin globaly or lose a life globaly, then I disabled the area 2d with monitoring. Area 2d.monitoring = false, so this made that they could not be used or detect anything until I turn it back on, so no extra coins or more loss of lives. General I drew more items for the map, and will use the atlas for all worlds, will just change colors and add few more items. I was also working with text skip, so now, the text does not go to the next dialouge until user presses tab (skip). But anyways those are all the changes I made, thanks bye guys!
Finishing Level 1 Hello everyone, im coming close to an end of level 1, today was a big day, and I should be able to finish it tomorow by fixing a few bugs and adding a few things to make it a functional starting tutorial scene. I have got almost to the ending part of level 1, I have made the boss fight/scene (it is not a cutscene, that will be for other levels), but its not finished, because there are many glitches for the user to stay alive but not reach the end, resulting in bad votes so I need to fix that. I finished the map probably just need to add a few things here and there but most of it is fine. I fixed the aliens and for each one, I can stick with the default settings (speed, how far they move both left and right) or I can put custom variables, using @export var, which puts an variable on the node. This was good, as before I had a problem of an alien walking through the wall, but now that is fixed. SO basically I just need to add armor, a laser item, for the user to use to shoot, but right now I am just doing the basic things for the game and sticking with my little tutorial for level 1!
Boss Fight Hello everyone, as usual I am just fixing bugs and making my game better. “I have some ideas, a couple of suggestions, to fight instead of fleeing west.” Just a quote, but it perfectly matches my game right now. So currently I had sprint, and it was required to hold it down to beat the boss. All you had to do before was run, but now you have to do an obby, in a certain amount of time, while dodging the boss. If you complete all of that, you get to the spaceship. This is much better and more engaging than just holding sprint and running. I also added heart pickups. If you don’t already have 4 hearts, you can pick one up and restore your health. While adding this, I fixed a bunch of bugs with collision layers, Area2Ds, and enemy detection. Some enemies weren’t detecting the player correctly, and at one point they were even falling through the map because I forgot to give them the right collision setup. After a lot of debugging, everything is working properly now. I also improved some of the enemies. The aliens now stop following the player if they get too far away, and I worked on patrol enemies that move left and right. There were some issues where they would get stuck on walls and spam flip back and forth, but that is fixed now. Another thing I spent a lot of time on was cutscenes and dialogue. I added text that the player can skip with Tab, boss dialogue, and a boss intro cutscene. I also learned a lot about AnimationPlayers, AnimatedSprites, camera movement, and even how reset tracks can accidentally move your character to places you didn’t expect. For the boss fight itself, I am still thinking about lives. Right now, if you die, you restart the level. One idea I have is giving the player two lives. If you lose the first life, you restart the level, but if you lose the second life, you restart the entire game. I might stick to restarting levels, but I haven’t decided yet. Right now my main goal is just making the game more fun and polished. Every time I add a new feature, I end up finding three more bugs to fix, but that’s just part of making games. Overall, the boss fight is much more engaging than before, and I think the game is improving a lot with every update.
Anime Intro Hello everyone, after what I did today I feel so motivated. Let me explain it to you guys. If you see the video, you will see a very professional introduction to our character, Alien Knight, along with his message. Someone recommended that I do this type of thing, so I spent about an hour creating it, and I think it looks really nice. It makes the boss feel much more important, and gives him a proper introduction instead of just appearing out of nowhere. I also worked on the boss cutscene itself. I learned how to switch between cameras during cutscenes, make animations play multiple times, and get everything to happen in the correct order. There were a few bugs where animations would instantly skip or stop after running once, but after a lot of testing I got it working. Besides that, I was fine tuning the map, getting rid of what we don’t need, making it shorter, and making the game make more sense because I don’t want the first level to be overwhelming. At one point I even misplaced about half of the TileMap and had to move it back where it belonged. It was annoying, but the level flows much better now. I also spent a lot of time fixing collision bugs. Some Area2Ds were detecting StaticBody2Ds instead of the player, which caused things like random restarts and enemies triggering when they shouldn’t. After adding proper player group checks and fixing collision layers and masks, everything is working much more consistently. Another bug I tracked down was with animations moving my character to the wrong place. For some reason the player kept spawning where an old animation had moved them. After a lot of confusion, I found out it was caused by a RESET track inside the AnimationPlayer. Once I removed it, the player spawned where they were supposed to again. Overall, I feel like today’s work made the game much more polished. The boss introduction feels better, the map is cleaner, the cutscenes work properly, and a lot of annoying bugs are gone. There is still a lot to do, but seeing everything come together is really motivating.
Level 2 Hello everyone, I am starting Level 2. For the past few days Lapse has not been loading on any of my browsers, and I had no idea why. Then today I tried Chrome and it finally worked, so now I can actually post updates again. Anyways, today I was mostly fixing bugs and finishing up Level 1. I had a weird bug with an Area2D where it kept triggering when it shouldn’t have been. I spent a while checking collision bodies, Area2Ds, animations, and positions. In the end I just rewrote the code and renamed some things, because I think Godot was getting confused about which body was which. After that it started working normally. I also finished the boss section. The Alien Knight now has an introduction cutscene, camera changes, animations, and the goo obstacle that chases the player. There were a lot of small bugs involving AnimationPlayers, Area2Ds, collision shapes, and things resetting to the wrong position. Some of them took way longer than they should have, but eventually I got everything working. I also added some more details to the ending of Level 1. The character now says, “Where am I, what happened to my home Earth?” before leaving on the spaceship. It is only a small detail, but I think it makes the game feel more connected and gives a better transition into the next part of the story. The boss fight is also much better than it was before. Originally all you had to do was sprint and hold the key down. Now there are obstacles, platforming, timing, and hazards that make it feel more like an actual challenge. I think it is way more engaging than just running in a straight line. I also spent some time working on hearts, checkpoints, and restarting parts of the level. I am still deciding exactly how I want that system to work, but I think it is heading in the right direction. Now that Level 1 is basically finished, I am starting work on Level 2. Right now my plan is to have a scene inside the spaceship before the next level begins. I want it to explain more about the aliens, what happened to Earth, and what is actually going on. I think having some story between levels will make the game a lot more interesting instead of just jumping straight into another map. Overall, after spending so much time fixing bugs, collision issues, Area2Ds, animations, and cutscenes, it feels good to finally move on and start making new content. I am excited to start building Level 2 and expanding the story of Space Travel.
Shooting, Level 2 Hello everyone, I recently finished level 1 and started building level 2, there are many new things that I am proud to announce. Level 2 Intro Animation I added an introduction to level 2, so after we leave earth, we end up in the alien spaceship, where the player vows to come back to earth and save his home planet because he couldnt do anything on the planet. Then he is in the spaceship and looks around, then he goes to the other planet. Alien Space Shooter So this is the new character the ALien Space Shooter, idk what to call him yet, the acronym for Alien Space Shooter is pretty bad… Anways it gets the difference from the player and the alien, and it shoots the ball that way, but if the alien is on the other side the difference is negative so the code figures out the position and where to shoot, currently I am working on the splat feature on if it touches the shield or the player or a wall/item it splats and stops moving. Shield + MC Adding’s I am adding a shield to the main character, so here is the plan, when the alien shoots out the goo, if the player is presssing the button to use the shield, (I am probably thinking control button) then they are blocking, the shield will have a durability, and they can use the shield for as long as they dont use all the durability. But here is the good thing, if they block the goo then there is a 1 in 5 chance it reflects the goo and it hits the alien and makes it vanish. This is a realy useful feature as the only other way to destroy an alien currently is the walk into and lose a heart. Summary + Updates I plan to make this more polished, as the splat for the alien’s goo shooting, and the shield for the character. I also need to make these all clear, and make the animations much more better and professional, bye guys!
Level 1 Complete Hello everyone, I just completed level 1, adding the finishing details fixing bugs, and adding a very cool parallax background. Major Bugs, I didn’t have major bugs but I had many bugs, for instance I had a scene change after the player enters the spaceship, this was for them to escape earth, but for some reason the scene change never worked, and it kept saying null, even when I printed this function. To fix this bug I made a variable and before the function was called I set it, so ** var tree = get_tree() ** this allowed me to call the functions without it becoming null, I still have no idea why the function was null but I guess I will have to figure that out. Another bug was my alien. So for my level one I have moving aliens, following aliens, and I was going to have moles, but I think I will add them in level 2 to keep it simple. But the problem was my following aliens, whenever they land on the player they never made the player lose a life or disappear. I looked at the collision bodies, and the one that gives the alien it’s shape was larger than the area 2d’s body, so therefore it would have never made contact with the player and would have not done anything to the player. To fix this, I adjusted the body size of both collision bodies. Parallax Background, a parallax background is basically different parts of the background moving at different speeds when the player moves. I made 7-8 layers of background, trees, clouds, bg colors, floor. To use them I used the parallax 2d in godot and set the scroll speed to different values for each, the farther away the bg element the lower the value, then you get the result as clouds moving at different paces of other elements as shown in the video. But this was not all that easy, I had a bug where the parallax elements went down so much when I started the game, I am pretty sure I am starting the player in the air, and when he falls so does the elements, so I have to place him down, also it is automatically adjusting my scroll offset. Summary/Level 2 That is about it for level 1, I also fixed the coins in the corner, and added more story. For level 2, I am going to start with making a parallax background, and make the actual game. Thank you, bye!
Level 2 Hello everyone, I did major updates and changes to Level 2 and this was the longest I have worked in Stardance in a single day so far! I worked for about 5 and a half hours today and made some really solid progress. Level 2 Setup + Map Design So I officially started Level 2. I created the base map and started building out the layout. I also added aliens around the map to start filling the world and make it feel more alive and challenging.Right now the level is still in early stages, but the structure is there. I still need to add fire/lava sections, more environmental hazards, and set up the boss fight with the goo enemies. I also want to add extra mechanics in Level 2 so it feels like a big step up from Level 1 instead of just a copy. Goo Enemy + Shield System Improvements I also fixed a lot of issues with the goo shooting system and improved how the shield works. Before, the goo had problems with detecting collisions too early, so I added a small delay using get_tree().create_timer() logic so it doesn’t instantly detect its own body when it spawns. I also adjusted the collision timing using a small time check (around 0.2 seconds) so it only starts interacting properly after it has actually left the enemy. The shield system now works with the goo reflection mechanic. When the player shield is active, the goo can sometimes be reflected back instead of dealing damage. I also improved how it visually flips and stays centered so it doesn’t look weird when the player changes direction or moves. Combat + Collision Fixes I also spent time cleaning up how the goo interacts with enemies and the player. Now when the goo hits the player without shield, it properly plays the splat animation, stops movement, and deals damage using the degrade() system. I also made sure it doesn’t instantly re-trigger collisions by adding timing protection so it feels more consistent. For enemies, I started experimenting with making them react when hit by reflected goo. The idea is that when they get hit, their collision gets disabled so they can fall down instead of just standing there, which will make combat feel more dynamic once gravity is properly set up on them. Overall Progress Overall, Level 2 is starting to take shape. The map exists, enemies are placed, and the core systems (goo shooting, shield reflection, and collision handling) are way more stable now. Next steps are: finishing the lava/fire areas improving enemy fall + death behavior adding the boss fight mechanics for goo polishing shield visuals so it feels smoother and making Level 2 feel more intense than Level 1
Level 2 Touches Hello everyone, I have done a lot to my game for Level 2 im almost done. I’ve basically been stacking a bunch of systems together and fixing a lot of the smaller problems I ran into over the last few devlogs (especially with goo, shields, and collisions), and it’s finally starting to feel like an actual full level instead of just a test area. Shop System Fully Finished First of all, I have finished the shop and now it is fully functional and actually works the way I wanted it to.You can now walk up to it and use it properly, and I added a lot of UI polish so it doesn’t feel dead or static. I added a hover function so when the mouse is over an item, it actually reacts (like spinning or doing a small animation), which makes it feel way more alive instead of just a menu.I also added different text responses depending on what happens: if you don’t have enough coins it tells you if you already own the item it tells you and when you buy something it gives proper feedback. This also ties into the coin system I’ve been using in the HUD, which now updates properly every frame so the shop always shows the correct value. Goo + Shield System Improvements (big fixes from earlier devlogs) I also fixed a lot of issues with the goo system that I was struggling with in earlier updates. Before, the goo had problems like hitting the player instantly when spawning shield reflection being inconsistent and weird collision timing issues. So I added a small delay (around 0.2 seconds using time checks) so the goo doesn’t detect itself or instantly trigger collisions when it spawns. I also improved the shield logic so now when the shield is active, the goo can actually be reflected back properly instead of just always damaging the player. I also added a durability feature, it is not visible yet but i am currently working on it. Now the hits count and soon it will be a visible feature. On top of that, I cleaned up how goo behaves when it hits enemies. Instead of doing messy collision disabling and weird states, I simplified it so enemies can just be removed cleanly with queue free, which makes everything way more stable and less buggy. Boss Fight Setup (Level 2 main objective) I’ve also started the boss fight for Level 2. Right now, there is an obby section where the boss is attacking with goo balls that can pass through parts of the environment, which makes dodging them actually important instead of just standing still and tanking hits. The player’s goal in the boss fight is to dodge the goo while making their way through the obstacle area and then press a special button (which has a cool animation). When the button is activated, it triggers lava flow across the map (since the level is on Mars), which is going to be the main mechanic used to defeat the boss. So instead of just fighting directly, it becomes more of a movement + timing fight where you have to avoid attacks and activate the environment against the boss. Overall Progress Overall, Level 2 is finally starting to feel like a real level instead of just a prototype. I’ve fixed a lot of the earlier problems with the goo collision timing shield reflection enemy interactions and UI consistency. And now I’m moving into more “game design” work instead of just fixing bugs, which is a good sign. Next steps are finishing the lava system for the boss fight polishing the obby section adding boss behavior and attack patterns and improving visuals and feedback so everything feels better.
Level 2 Boss Fight Hello everyone, I am coming close to an end of my level 2 of Space Travel. So currently I have made the boss and am working on the animation and how the boss fight is, so first I am going to explain the logic, then I will talk about timelines and how I have acomplished, and third I will start the alien UNIVERSE So what I have done today was finish up the shop (I barley did anything to it) and I also worked on the alien. The first part of today I spent a good amount of time creating the alien boss, and it doesn’t even look good 😭, so I became demotivated for today and only did 2 and a half hours. But the day is not over yet, so much left to explain. To continue, I created the animations for this boss, such as the text, and the anime animations, but I am still not done and have not fully tested it so there are bugs, but I will try to fix it. So I think I am good on time, so far I have been trying to finish up 4 levels then ship. For level 1 was follow and static aliens (walk in place). Level 2 was goo spit shooting aliens. I have no idea what to do for level 3 and 4, I really appreciate any suggestions on new items/things to add🙏. Also to clarify my solar system ending (part 1 of game) the user will go back to earth for level 4 and dodge the hardest of items and talk to the alien knight, there would be some type of dialogue like “ I never wanted to do this…” And that will be the end of level 4, and that is part 1 which I would ship my project for the first time, looking at the time line, I probably will get 60 hours when I ship, I hope I do good. But I really appreciate any suggestions, but to conclude, I am working on level 2 boss right now, debugging and making the animations more smoother. For level 3 and 4 I will talk all suggestions . Thank you everyone, bye!
Level 2 Hello everyone, sit back and get ready for a long devlog, because today I have alot to talk about. Okay, so guys now we have finished level 2, it is fully completed, I just need to add one line of code (changing the scene to the right scene the next one) and then I am done and probably wont touch it. Since I have not devloged in a few days (I did little time and was busy) I will talk about alot of items which is basically what I did for the past few days. Shield Alright I really want to talk about the shield first. So if you guys watch the video you can see how the shield works. Obviously it doesn’t have the code, but I will talk about how I integrated it with the shop and how that works. So I have 2 items in my global script, shield enabled, and shield dead. If I go to the boss fight of my game (where the shield is not allowed and users dont get it) I say Global.shield_enabled = false . This allows me to set if the user can use the shield or not through out the game. And if you guys made games previously or used Godot, you know about func_process() this allows me to simultaneously run items. You might be wondering, how does this simultaneously running fuction affect the shield for the player, and why would I do this. Remember earlier when I used the Global shield enable to turn it on and off, well the process checks it and if it is false, then it makes the shield not visible and not work. I mainly was relying on this for the past few days, because I was working on the shield. I also used process to modulate and change the size of the shield bar shield durability based on how many hits the shield has taken and how many hits it can take, I divide it to get a percentage. I also added the feature that if the player dies, they lose the shield, for the player to get the shield back, they have to buy it again for 15 coins. I plan to add an animation at the beginning of the level showing the shield coming onto the player. The Shop If you guys saw in the video, you saw the shop is accessible from anywhere in the game. This was easy all I had to do was add a button with the shop icon, and make the shop items visible. But I also have to account for mobs aliens shooting the player while they are in the shop. Luckily godot has an in built function called get_tree().paused if I set this to true every item will become paused. But luckily I can set the shop node’s process mode to always so it works even when the game is paused. This solved my problem of the aliens shooting and moving while the player is in shop. Boss Fight If you guys didn’t know, for the past few days I have been working on the boss fight, I have not got enough time to finish it but today I finally finished it today! So in level one, there is a scene with the boss fight for goo rising, and now that is level 2 and the player is on mars I wanted lava. But I didn’t want to redraw it so I just modulated the goo (I now realize that was a bad idea). Because the goo was not originally white, the modulating color started green, so what ever I chose was darker and not the right color. So because of that I had to spend my time fixing the goo and changing it to white and grey. This way for my level 1 goo rise, I just modulate it to the goo green I want and for level 2 I modulate it for the lava. Also for the boss fight, I added it so the shield disappears when the player has to fight, and made the animations more clear. Anyways guys I think this game will turn out great, I am always looking for suggestions especially for level 3 , bye guys!
Level 2 & 3 Updates Hello everyone, I have alot to talk about, especially since I recently just finished level 2 and am starting on level 3. I still need Planet Names waiting for suggestions but so far I am just using analogies in my game like earth (this is going to be the real planet) mars and Neptune. This helps players understand and relate to the geography and climate of the planet. For example in the screen shot you see it is an icy artic place like the planet Neptune. Let’s get started and talk about today! Level 2 Bugs, I was not so lucky, this paragraph is about bugs and fixes, well I am not happy to say that my animations from my text animation player all deleted, and since I didn’t commit to GitHub for the day, when I restored it, all the changes I made went away… I had to remake everything that I changed, and I still have some bugs, but I forgot some items, so it is hard. But I mainly just fixed placement. When I came back home to Godot, some items were gone, some part of the tile map disappeared I had to put the tiles in the right spot, and the code was all messed up. I currently still have no idea what happened, but I fixed it all and I have not had bugs since. Today I got a suggestion to make a cutscene of the level 2 alien boss burning. As you guys know yesterday I changed the goo/lava color to white so I can manually modulate it in the editor because I am reusing assets (this makes it so easy for me 👍). Well now I made a cutscene of the alien boss burning, I would have had to redraw everything, but instead I duplicated the animated sprite (the alien boss in the cutscene) and modulated to low transparency and red, so it looks like the alien boss has a lava shadow. Level 3, Alright I know you guys saw the screen shot, so you saw the icy biome. I am now going to explain my ideas that I plan to add to level 3. First, Ice Shooters , hear me out. I recently added goo shooters to the game, and since this is artic biome ice shooters to slow the player down, and gradually decrease health if they don’t find heat could be an awesome idea! Second actual ice . There are going to be like ice pits/platforms when the player walks on, it is all slippery. And I also might add moving platforms, but these probably will be saved for level 4 but I am still deciding. Space Ship Scene As you guys know, after each level I make a cutscene/scene of the player in their alien spaceship. I think for this one (right after level 2) the player will explore more of the spaceship, and learn something about the aliens. I am still deciding but currently that is my ideas. If you guys have any suggestions feel free to recommend them. Thanks, bye guys !
Level 3 Major Changes Hello everyone, today was by far the most productive day I have ever had in all of star dance, and possibly previous Hackclub events I have done. I almost finished level 3 in one day! This was a massive accomplishment for me as for the other levels took at least 3 days to do. An overview of what I did today were, map, icicles, ice skates, new alien, asset placing, inside space ship scene, space ship traveling planet’s scene. New Features Ice Shooter Alien , First I want to talk about the ice shooter I made today. So for every new level, I always add a new alien, and while I was still working on level 2 I was contemplating what new features I should add to the game for level 3, and since I thought I should do an ice planet because I was on mars (fire) and earth (neutral), I thought I might want something cold then I thought of this planet Neptune (I don’t have planet names yet)! So today I made the Ice Shooter Alien , This alien shoots snow which slows the user down for 3 seconds. While the cool down is not slow, there is only a 1 in 10 chance the player looses health to the snow (a rock could be in it). Icicles , it was recommended to me to add icicles to the game since it is an icy biome and there should be some structural relation to the biome and features. So I just used an area 2d as the base structure, and just detected if it touches the player or something else (like the enemy or structure). To make this icicle fall, I couldn’t give it a character body then there would be gravity, and it would keep moving even if I stopped it, there is a way to work but I figured out an clever way. I subtracted the distance between itself and the player using position.x and subtracted to see if the player was in range, and if it was I was changing the position with speed and delta coming down. And I just reset it to the original position because in the ready script I assigned it the starting position. Ice Skates , Ice skates were actually pretty easy, I duplicated the players idle and movement assets, and redrew them to have skates on the bottom, and once the player buys skates from the shop I make has_skate = true then in the physics process whether the player is idle or moving, it changes the sprite sheet to the one with ice skates, and when I disable it, it goes back to the original sprite sheet with no skates. Overall I think I did so much today, I around an hour drawing the art for the spaceship this morning (both the scenes of changing worlds and inside spaceship) because I had to add a new section and duplicate move, and modulate the planets to look like a new space travel. I think tomorrow I should finish or get close to finishing level 3 because I have to create the boss fight. Thankyou, bye guys!
Adding Touches Hello everyone, it has been some time since I have devolved, and I want to talk about what I have been doing, some goals I have, and some deadlines. For the past few days I have not been shipping because I have been working on level 3. From the screenshot you might be able to see the avalanche and the map for the avalanche. So I fixed a bug with the icicle, so even if it touched the ground and then you touched it. You would lose a life. For the collision shape of the icicle whenever it touched the ground I did set_deffered("disabled", true) so this would disabled it, and I would reenable it whenever it starts falling again. Also there was a bug where the aliens could shoot through walls, to solve that I just decreased the time pass value (time pass checks how long it has been running before it can do body checks) and kept time pass the same value for on enemy touched. Finally the avalanche, during the process of this I learned some pretty cool things. So the avalanche. This would be hard to animate, but apparently Godot has something for this. It is called a ray cast, and is brings the items with it down until a collision body. So what I did, is just like my alien script, I made it move right with speed * delta . And the ray cast handled itself, because it was down hill. I am still learning how to properly use a ray cast but for down hill situations I think I now know. When I was putting the animation for the space ship enter and leave. I wanted to reuse previous animations I have made. So I went to level 2 and realized I hadn’t finished it. But level 1 had it. This is where things get interesting, I brought out my calculator, duplicated the values into level 2 and 3, and subtracted the first keyframe from where I wanted the player to start. This allowed me to subtract 1454 from the X value and 104 from the Y value. So I did that for each of the key frames for both level 2 and 3 (keep in mind I wanted them in different places) and I had my animation finished. I tried adding a pause menu for when the player dies or pauses (esc) but I guess it didn’t turn out well it looks grainy and unprofessional, but I really need to ship, because I wont be available for the next few days and I can’t work on it. Future Items Before Ship Before I ship I want to add a few things that have been suggested. First of when testing it was realized that when the shield breaks, there was no pop up or anything indicating that it had broken. So I will have to now go and fix that. Second, I need to add sound. I always add sound at the end of the game, and I completely forgot to. Overall I think that this first ship will tell me a lot on what I have to work on for this game, I think I could do some better improvements if I wait some time then ship. But I think it will do great, and people will see the hard work I put into this game. Thankyou everyone!
Finishing Up Hello everyone, I have been fixing bugs today and adding items I forgot. Examples are audio, bugs, end scene, making harder levels easier (I was the only one able to beat it) and make text clearer. Bugs Today, I fixed mainly bugs because I am going to ship right after this devlog (my work has payed off). First I am going to talk about the skipping text bug. When I do the dialogue at any part of the level/game, and then press esccape button, (pausing game/pausemenu) and then I press home inside the pause menu, the whole game crashes, and I just figured out why. When ever im doing text I call $MC.wait_for_skip() this is a function, and in the function it has await get_tree().process_frame the bug with this, is that when ever the text is running and wait_for_skip() is called it is waiting and calculating every single frame, so when the user presses home, the player is gone, and that process_frame was never finished, so the game bugs out and ends. Well to counter this, I didn’t really do anything. I am really busy right now, and am trying to make the game good for the first ship, as much as I want to work on this bug I have to set it aside. In short terms, I got rid of the home button. If the player wants to go home they have to close the game and open it (reload page). Bug Two For the second bug, it really confused me. When I restarted the game, and went through level one (keep in mind I only picked up one coin) and then went to the second level, it said I had 30 coins. I saw my error, and it was that I was manually setting it to 30 coins when the game starts, so I then set that value to 0, so user starts with no coins. I thought all was solved, but it now showed five hundred and forty seven coins. I looked closely in the save_game function. I saw that I had set global.coins (the coins for the whole game collected) to what ever was in the label. And it might seem okay, but the label had manually been set to five hundred and forty seven coins. I just delteded that line of code because whenever the player picks up coins, it automatically goes into the global variable, so there was no point in having that line (since it only bugged out the game). Audio I forgot about the audio/sound effects/ background music until the end of the game (today, since I am going to ship). Because of this I had to rush through it, and I am going to warn you, some of the audio in the game might sound… wonky. Anyways I recorded me making the audio, like an alien shooting, icicles falling, avalanches moving. I just realized while writing this devlog, in the game I misspelled avalanche, and I have already exported it and uploaded the game 😭. Difficulty I had some people test out my game, and they had alot of good feedback that I implemented today. I still have not done some of it, but that is for next time. First they said level 1 was harder than level 3. I tested it out but didn’t find any problem, I realize that I play this game everyday to test so it must be easy. I made the boss fight for level 1 easier so the user can get through. To do this, I made the goo rise slower, and added more stepping points on the ground. Then I was told level three’s avalanche was too slow. I had to manually change the speed, but this was easy since I had incorporated a ray cast into the avalanche.
Ships:
Hello everyone, this is my first ship for Stardance, and let me introduce you to Space Travel. Space travel is an 2D game I have spent this whole month on creating. I have used tile maps, parallax 2D nodes, pixel art, and many features to create this game. Even though it is a work in progress and a test run for me I would like to congratulate my self on spending over 60 hours for a project. This is the longest I have ever spent on the project, and this is as complex as it gets. Some cool things I think would wow you guys are Parallax 2D nodes, theses give the background life, the make it look like the clouds are moving. Ray Casts, to create avalanches. In this game I have made many types of aliens for the user to battle. I am so proud of my self for finding the time to make this wonder full game. I have had people test it so I could polish it up for the first test run. I know it could be better, but I am planning on adding an Alien Universe. Users will have laser items, pick the planets to travel to, choose their character and much more. I am very motivated to continue this project and push it to it’s absolute max. This game features multiples levels, Level 1 (Earth) your goal is to escape the alien invasion you woke up to. Level 2 (Mars) you travel to an burning hot planet to find out more aliens live their, including goo types. Finally Level 3 (Neptune) you visit this icy place and find icicles, ice balls, avalanches, and ice bunnies waiting for you. This game took a lot of thought and time to create, as it is not as simple as it looks. The code was very complex as I had to calculate speed, and shooting distance (for the goo ball and ice balls). I am so glad I can share this hard worked project with you guys. I hope you enjoy it!...
|
1792997329.9302886
|
1793083729.9302886
|
|
25918
|
AnaDash by @matheusm | Stardance
|
matheusm
|
0
|
66.0
|
0
|
[]
|
[{"post_id": 40376, "ts": "202 [{"post_id": 40376, "ts": "2026-08-03T20:48:39Z", "hours": 2.0, "text": "Devlog 31 - As the title says, i’ve run into A LOT of cad issues, but i’ll list em: How do I insert heatset insert? How do I reference my pcb design in my sketch? How do I install the input board, angling the keys didn’t look good so i’m placing them on top + i get to make it lighter This is huge, 256mm x 63mm x 80??mm, not confirmed yet, i’m worried. This is it, i’m so worried and confused and ahhhhhhhh 5 minutes later, I have tought of a solution, previous designs stacked the meters side by side, but i’ll do two blocks of 10mm of each, and make the size smaller Also, the encoder knob is finished and hopefully more 3d printer friendly"}, {"post_id": 39026, "ts": "2026-08-01T18:09:52Z", "hours": 2.0, "text": "Devlog 30 - Encoder knob is done and I fixed the meters As the name says, I have finished both the encoder knob and the meters, meters only took me half an hour, I had already gone thru all steps before and I didn’t even need to do some, I had to get new a CAD Model and put the decal there, so that’s done. Btw I’m actually really really proud of these meters! Looking at them just gives me satisfaction, idk why, so rewarding Then I started to make the encoder knob, i’m not sure if this is printable, and I maybe should consider getting an straight knurling instead, in fact, i’m actually gonna do that right now! Yeah, incredible idea. Anyways, knurling this took me an hour and half, because I had to figure out a bunch of new stuff. i’m not actually so proud of this, i don’t know, it just looks evil and violent. Next step is redoing this."}, {"post_id": 38535, "ts": "2026-07-31T23:58:27Z", "hours": 4.0, "text": "Devlog 29 - Onshape madness So, apparently my pc is not strong enough to run fusion 360, so I went to onshape, so I first begun by designing an encoder knob, and 50 minutes later, voilá, I had one, and was quite happy… But then I realized it needs to be in the same parts studio as my input board, so I deleted it with the intention of starting it over again. But, for some reason I do not know, I decided that I would put work on making the meters instead, and uhhh, it went well! Up until i spent 3hrs to realize the model I used was bogus, hooray, and I was so close too :((((. Anyways, i’m starting fresh, and i hope i get it all done by tomorrow"}, {"post_id": 37843, "ts": "2026-07-30T20:11:20Z", "hours": 1.0, "text": "Devlog 28 - EVERYTHING BUT THE CAD IS WORKING AHHHHHHHHHHHHHHHHHHH As the title says, the whole project is nearly done, the pcb is done, the software is done, however, for some reason, FUSION 360 JUST DOENST WORK, WHY? I’ve spent the whole day trying to install this thing and it simply cannot function! WHY? WHY MUST IT WORK LIKE THIS? anyways, i hope it works now, but i’m in a standoff right now"}, {"post_id": 36766, "ts": "2026-07-29T01:07:26Z", "hours": 2.0, "text": "Devlog 27 - Productions files, and LED header I’ve added an LED header and decided to implement it, however, halfway thru, I got distracted, so I made all the production files, and they work well. Then, after an hour of coding, I have realized that adding LED support would be complicated and difficult, so i’m calling it off, and, instead, I’m just leaving the LED header there, empty, for the future."}, {"post_id": 36448, "ts": "2026-07-28T16:03:20Z", "hours": 1.0, "text": "Devlog 26 - SOFTWARE IS DONE LETS GOOOOOOOOOO I have finished software side of things, the final thing needed being a music player, I skipped the progress bar due to it being an hassle to implement, and I don’t have much time. But, overall, it’s finished, it should work. The biggest problem during this step was well, figuring out how do i make the icon for the player status, but the solution was implementing a custom struct as much as an hassle that was, anyways, everything works now, let’s GOOOOOOOOOOOOOOOOO! The next step I plan is adding an optional led strip header"}, {"post_id": 36076, "ts": "2026-07-27T22:39:53Z", "hours": 2.0, "text": "Devlog 25 - The driver is finished :D I stopped working on the firmware for the UI so I could work in an intermission for the driver, I begun by first making a PKGBUILD, but, after seeing tests being performed, I got sucked in a rabbit hole, spending over an hour writing benchmarks only to find out the library I’m using to perform benchmarks didn’t support binaries, but that didn’t stop me from writing a simple test that prints the system info to the terminal. I also rewrote the function that gets cpu temp to use an more universal approach using lm-sensors. After that 1h30m rendezvous I started making the PKGBUILD, like many other things in the project, it was a whole new world, however, after over an hour of work, it works and it compiles! It was very very rewarding. Finally, to wrap it all up, I cleaned up most warnings, there’s just one that throws an error when I try to fix it LOL."}, {"post_id": 35961, "ts": "2026-07-27T19:05:42Z", "hours": 5.0, "text": "Devlog 24 - Implementing the UI for my project I begun writing the code for the display, only to realize my decision to not care about what pins I used would backfire, so, I had to rewire the schematic AND pcb, but it’s all okay now. Also, learning this was tough, whole new world, spent over an hour just figuring out how to pass the embassy spi to the ST7735 driver. After that, I begun by making the status bar, aka Anyways, after that, things went okay, I did have an hiccup when getting icons to show on the screen, because the library I initially used was garbage, or so I tought, atleast that’s what I tought at the time, but after switching to a different library, I managed to get the notification icon. Then, implementing the notification UI was a breeze, I had a hiccup because I had to learn linearlayout, but besides, that, it went okay. Then, I implemented the music player and default screens, while the default screen went okay, the music player, which is where I am now, is a bit hard because I need to figure out how do I show progress, I initially tought of a bar, but i’m thinking of just using a string, tho that would be sad. During that, I don’t know how, but something told me that the previous library for icon (which was superior due to it having more icons) was working and that I was wrong, sure enough, the issue was me not implementing the feature for the icon I wanted to implement I am now stopping this devlog because it got too big, but that’s where i am now."}, {"post_id": 34310, "ts": "2026-07-24T22:00:53Z", "hours": 2.0, "text": "Let me first begin by saying, that this line: meters .fast_write(dash.cpu_load, dash.cpu_temp, dash.mem_used, dash.swap_used) .await .unwrap(); hardware.ldac.set_high(); Kinda took me an hour to make, and 2 hours in ADHD sidetracking. So, to get to this line, I had to remake the driver, not only because I was using computationally expensive floats, but because an u64 for an value between 0-4096 was wasteful of bytes. While on it, I sidetracked and decided to redo the way the driver interfaced with the USB device, because it felt quite unprofessional to just bake in the serial port. So, I wrote this fancy function that gets the serial port via the VID and PID, and it looks something like this: let keyboard_port = match utils::get_serial_with_vid_pid(DEVICE_VID, DEVICE_PID) { Ok(port_info) => port_info, Err(e) => { panic!(\"Error getting serial port! {}\", e.description); } }; let mut keyboard_cdc = match tokio_serial::new(keyboard_port.port_name, 115200).open_native_async() { Ok(port) => port, Err(e) => panic!(\"Error opening serial port! {}\", e), }; As you can see, it’s now way more professional! After that bit of sidetracking, I finally redid the types, and when I realized I would need an arduino style map functions, and that I was bored without internet, I rawdogged an library using the rustup documentation, not tracking the hours tho. You can get it via the crate “map-arduino”, and it works with all data types, I’m proud of myself! Finally, after all that work, I had to do the MCP4728, and that line in the start took a loong time, mainly because theer were 500 different I2C types and I didnt understand anything, but, at last, it works ;D"}, {"post_id": 33724, "ts": "2026-07-23T21:08:59Z", "hours": 4.0, "text": "Devlog 22 - New UART Port, better drivers I took a break from programming and decided to go back to PCB design, I replaced the screen pinout, and, more importantly, added an debug UART pin so you can get logging, while on it, I realized I would have to move a bunch of connectors! So i spent over an hour painfully rerouting, only to realize it broke more, I also had to rethink the pull up resistors because those had nowhere to go, anyways, thankfully everything’s working now, so i’m happy. After that break, I decided that I would start the handler for incoming host messages, but, for some reason, which I dont know, I started doing the README??? anyways, the readme is very pretty and has instructions on how to compile now, so that’s great ^^. Then, for some reason I decided to do the driver again?? I improved it, and it now gets the serial port using VID and PID, wayy better, it was just painful figuring out for the first time how to use results! And on a more unrelated note: If you noticed, yes, I’m purposefully delaying the CAD part because it’s been hell whenever I tried it, fusion 360 simply won’t run and I’m not sure if onshape is good for polishing, also I’m so scared of the deadline cuz I’m not sure if JLCPCB can get the parts here in time, the BOM is also scaring me, seems so complicated."}, {"post_id": 32703, "ts": "2026-07-22T01:09:29Z", "hours": 2.0, "text": "Devlog 21 - CDC Is done :D So is the encoder! As the title says, I finished both of them and I’m very excited to move on to the next step which is driving the MCP4728 :D ! The rotary was tough because there’s 700 hundred libraries, but I picked the one someone in youtube had used, as that’s an good proof. The CDC was tough understanding the new concepts, but i’m proud it turned out ok!"}, {"post_id": 31973, "ts": "2026-07-20T20:01:57Z", "hours": 7.0, "text": "Devlog 19: 5 hours in I started developing the firmware, BUT IT’S SO HARD AND CONFUSING, while I had a bit of an whiplash when I started developing the driver, it was nothing compared to what I’m currently experiencing with the no_std embassy firmware. I don’t really understand what I’m doing, I’m having to learn new concepts such as lifetimes and other stuff and it’s so confusing and messy, it’s making me crazy. To make matters worse, I was about to delete part of the firmware to start over but somehow the problem went away??????????? What??????????????? It doens’t make sense, nothing should be working here, but somehow, it does, and that does not make sense Nevermind the error is back, it just wans’t included in the commits, I have no idea, i’m tired. Devlog 20: 2 hours logged I have figured out that partial move issue! :D All I had to do was just stop trying exporting the peripherals object, so that’s solved :D I have finished the part that sends the macro keys to the computer, and i’m really proud of how it turned out! I’m also proud of the solution I used to save up memory, which is an bool array made out of one u8 int! I save up 7 bytes, which is small, but you gotta remember our memory is constrained! I also implemented the encoder switch, and I’ve been making more use of consts! The next step will be implementing the CDC!"}, {"post_id": 30864, "ts": "2026-07-18T20:18:57Z", "hours": 1.0, "text": "Devlog 18 - The driver is done I did spent an hour attempting to understand how heapless strings worked, and how serialize and deserialization worked, but, I’m happy to say that I have an working driver. Sure, it’s not ready by any means, it needs an package, and other stuff, but it’s good enough for me!"}, {"post_id": 30784, "ts": "2026-07-18T17:42:37Z", "hours": 2.0, "text": "Devlog 17 - The driver is nearly done The rust driver is nearly done :D It gets the system information, it gets notification, gets mpris player information, and gets the time. It wanst easy, I spent a lot of time learning tokio, I also had to learn some concepts about parallelization, but i’m really happy with how it turned out :D I have been struggling with an creative block for some reason, idk, it just feels daunting to finish this."}, {"post_id": 29193, "ts": "2026-07-15T22:36:39Z", "hours": 2.0, "text": "I have made the labels for the meters, at the cost of my sanity :( For context, the measurements and arch thing I am borrowing from Lex Bailey at Computing the Details, however, the rest I made from scratch. For the first 20 minutes, things went smoothly, and i added the label of what the meter measures, along with 50% and the unit it’s measuring. But things did take a turn when adding the other 2 values. See how it’s at an angle (because this is a needle meter), it was hell to align it with the text, I spent an hour of my life frustrating about how do I even do this, in the end, the solution I decided upon was just accepting defeat and making it roughly accurate, but it’s quite an bummer"}, {"post_id": 28483, "ts": "2026-07-14T19:05:16Z", "hours": 2.0, "text": "I have labeled the connectors on both PCBs! Why? Because I realized my README got confusing with the pinouts, and I realized it would be an struggle to connect everything based on a single markdown file. Another thing I did was divide my rust code. Why? Well, I realized it was going to get big, and to prevent 1000 line monster files I spun off the part of the code that gets sensor data into another file Another thing: Right now, I have no idea about what should be the next step of the projecrt, and it’s driving me nuts! I’ve also been struggling about what the BOM should look like."}, {"post_id": 27867, "ts": "2026-07-13T19:28:07Z", "hours": 3.0, "text": "I have switched from the adafruit prebuilt DAC module to the raw MCP4728 chip, this way, I cut the cost of the DAC in about half. Since it was my first time doing a raw chip, it was pretty tough, and quite complicated to understand, took 2 hours of my life. But it works, it’s a mess tho, but hey, I’m glad it works! It feels a bit wrong too, idk why, I might have to do a clean up."}, {"post_id": 26306, "ts": "2026-07-11T00:56:53Z", "hours": 1.0, "text": "Devlog 12 - Switched displays I have switched displays, why? Well, I realized that having some constant UI on an OLED display will quickly lead to burn in, so that’s a major change. I’m glad I haven’t actually started designing the UI, so I didn’t lose a bunch of time designing for a monochrome display."}, {"post_id": 26249, "ts": "2026-07-10T22:25:39Z", "hours": 4.0, "text": "Devlog 12 - drivers? I rewrote the whole entire thing, and we finally have achieved drivers :D, reading the cpu load average, memory and swap were pretty easy, as I had already done it before, the only issue was reading the temperature, I did have to learn quite a bit, but it works, I also have added the time too! Now, it’s not ready in any way, shape, or form, for now it just prints the data to console, but i’m overall really happy with the results! Next devlog I’m making firmware and finally moving on to the monster that’s named 3d modeling, I did try it today, only for onshape to not be really good and fusion just refuses to run. Do note that this is just the beta firmware, I’ll hold on the fancy features for now, and will only be adding them when I get to build it."}, {"post_id": 25579, "ts": "2026-07-09T22:25:12Z", "hours": 3.0, "text": "Devlog 11 - Driver Madness Today, I woke up feeling like doing the drivers, so that’s what I at least tried to do… However, I am struggling to find a library handling both cpu temperature and memory and it drove me insane!I am probably going to have to accept defeat, and instead opt for getting memory and swap from sysinfo rust crate, and temperature from the hwmon or thermalzone files in Linux…"}, {"post_id": 24886, "ts": "2026-07-08T18:51:05Z", "hours": 1.0, "text": "Today, I finished making the PCBs! You may wonder “didn’t you do that in the last devlog?”, and yes, I did. The difference is I fixed many of the mistakes today, such as using solid connections which would make soldering impossible, or ground continuity mistakes. Anyways, I’m now pleased to say that they are actually finished. Next devlog we maybe get a case?"}, {"post_id": 22957, "ts": "2026-07-05T17:06:35Z", "hours": 3.0, "text": "Devlog 9 - The PCBs are ready :D I have finished both PCBs :D It was pretty smooth actually, I haven’t got it sanity checked yet, but, I’m actually surprised due to how smooth that went. The biggest issue was getting the 3d models just right, and also figuring out where to place stuff. Also, making sure both connectors were matched was sorta an issue. Also, I have begun writing the README, but, I’m struggling a bit with it."}, {"post_id": 21627, "ts": "2026-07-03T17:44:38Z", "hours": 1.0, "text": "Devlog 8 - The mainboard PCB is done, hooray :D Making the PCB was actually rather smooth. Now, I DID encounter some issues. But it was mainly with the 3D model of the DAC I had downloaded, but the fix for that was just making one myself with the Adafruit PCB Design files. I’m very very happy and proud of this work :D"}, {"post_id": 21080, "ts": "2026-07-02T21:10:15Z", "hours": 2.0, "text": "Basically, I went to check the ERC and I had 46 errors. Half of them were simply a lack of an not connected symbol However, the other half was just something else. What happened, was that the connectors were all specified as bidirectional pins, so, when I grounded one of the pins, KiCad freaked out like i just put 120V on an I2C line So, I decided I should try making my own symbols manually Horrible mistake Kicad sent my symbols library to outer space as soon as I created it, and I spent 20 minutes trying to find where did it go. Not only that, but I didnt even need to actually make a new symbol! I was using one connector symbol library, and all I had to do was switch to the other! I hope I can start making the PCB now And if you’re curious, the ammeter is our gauge, the thing we are gonna drive. Also, a few minor changes: I fixed the footprint for the DAC cuz once again it was wrong Removed the status LEDs because it would end up becoming an eyesore"}, {"post_id": 20897, "ts": "2026-07-02T16:55:42Z", "hours": 2.0, "text": "Devlog 6 - PCB Pain Basically, i HAD begun designing PCBs, keyword HAD. Now, it took 90 minutes of my life for me to realize something: For context, you need to understand that this dashboard will be sitting at angle, for the sake of ergonomics. So, during the design, I realized something, which was that mounting an pico at an angle would make it hard for the USB cable later. I also ran into the issue that the PCB would be too big to fit in JLCPCB promotion of 5$. So, after thinking, I decided the best course of action would be to split the design into two PCBs, now, I haven’t started the PCB part, but I did start the schematic part. I also took this oppurtunity to make the schematics pretty."}, {"post_id": 19620, "ts": "2026-06-30T23:57:46Z", "hours": 1.0, "text": "Devlog 5 Remember that cad from yesterday? Well, basically, I made an useless box. Why? Because I dont have a PCB to put there, and the measurements were wrong, so I’ll have to redo the design. I’ll explain it better the day I do the 3d design Second, I have re-added the rotary encoder switch, I also had to change the switches’s pins because I realized routing the switches wire to the other side would be awkward. (You see, it would be 4 switches on one side and 4 on the other) Another improvement to the schematic today was the addition of test points and status LEDs for debugging."}, {"post_id": 18675, "ts": "2026-06-29T21:18:39Z", "hours": 1.0, "text": "Devlog 4 Today, I realized going to the esp32 was a pretty dumb decision, because it doenst come with USB support natively (which I need for the macro keys), so I went back a few commits to the pico I then meddled a bit with onshape, but got tired quickly and decided to spend the day drawing up the UI, only to realize lopaka doesnt do it well So I went back to onshape and made this case, which will hold 4 analog resource monitors, an OLED screen and 8 macro keys"}, {"post_id": 17949, "ts": "2026-06-28T22:11:44Z", "hours": 1.0, "text": "Devlog 3 Today consisted in wiring up the stuff in the schematic, after a sanity check, it was realized that an ESP32 would be better cut for this So I replaced the pico with the cheaper ESP32. Also, I added a rotary encoder to go with the 8 macro keys, and a buzzer, for notification sounds"}, {"post_id": 17255, "ts": "2026-06-27T23:37:08Z", "hours": 1.0, "text": "Devlog 2 I have figured out how to do the footprint Basically, I figured out I was looking for exact precision, when not even the machines are that precise So what did I do then? Well, I still used Kicad’s finest grid of 0.001mm, and i got the thru hole aligned with a precision of 0.0005mm, or 5 microns, which is 0.25x the size of an human hair. Other stuff I begun to wire the DAC and the meters, which is quite simple. You may notice this curious arrangement of 2 330ohm resistors in series, it’s because they dont make 660ohm resistors"}, {"post_id": 16624, "ts": "2026-06-27T01:20:55Z", "hours": 1.0, "text": "My first devlog :D Today, i have started the development of AnaDash, this project aims to be a cool dashboard for your PC, featuring 4 analogue resource monitors, a few macro keys, and an OLED screen for showing whatever your heart desires! Today, I begun the project, then realized that i can’t find the DAC breakout board online, so what i did? I decided to make my own footprint This was an horrible mistake What I didn’t realize, is that for some reason, the PCB adafruit provides is not aligned, this is def an issue in my part during some part of the conversion process. Even on the finest grid, it’s still off, just why?"}]...
|
Title: AnaDash by @matheusm | Stardance
Devlogs:
Title: AnaDash by @matheusm | Stardance
Devlogs:
My first devlog :D Today, i have started the development of AnaDash, this project aims to be a cool dashboard for your PC, featuring 4 analogue resource monitors, a few macro keys, and an OLED screen for showing whatever your heart desires! Today, I begun the project, then realized that i can’t find the DAC breakout board online, so what i did? I decided to make my own footprint This was an horrible mistake What I didn’t realize, is that for some reason, the PCB adafruit provides is not aligned, this is def an issue in my part during some part of the conversion process. Even on the finest grid, it’s still off, just why?
Devlog 2 I have figured out how to do the footprint Basically, I figured out I was looking for exact precision, when not even the machines are that precise So what did I do then? Well, I still used Kicad’s finest grid of 0.001mm, and i got the thru hole aligned with a precision of 0.0005mm, or 5 microns, which is 0.25x the size of an human hair. Other stuff I begun to wire the DAC and the meters, which is quite simple. You may notice this curious arrangement of 2 330ohm resistors in series, it’s because they dont make 660ohm resistors
Devlog 3 Today consisted in wiring up the stuff in the schematic, after a sanity check, it was realized that an ESP32 would be better cut for this So I replaced the pico with the cheaper ESP32. Also, I added a rotary encoder to go with the 8 macro keys, and a buzzer, for notification sounds
Devlog 4 Today, I realized going to the esp32 was a pretty dumb decision, because it doenst come with USB support natively (which I need for the macro keys), so I went back a few commits to the pico I then meddled a bit with onshape, but got tired quickly and decided to spend the day drawing up the UI, only to realize lopaka doesnt do it well So I went back to onshape and made this case, which will hold 4 analog resource monitors, an OLED screen and 8 macro keys
Devlog 5 Remember that cad from yesterday? Well, basically, I made an useless box. Why? Because I dont have a PCB to put there, and the measurements were wrong, so I’ll have to redo the design. I’ll explain it better the day I do the 3d design Second, I have re-added the rotary encoder switch, I also had to change the switches’s pins because I realized routing the switches wire to the other side would be awkward. (You see, it would be 4 switches on one side and 4 on the other) Another improvement to the schematic today was the addition of test points and status LEDs for debugging.
Devlog 6 - PCB Pain Basically, i HAD begun designing PCBs, keyword HAD. Now, it took 90 minutes of my life for me to realize something: For context, you need to understand that this dashboard will be sitting at angle, for the sake of ergonomics. So, during the design, I realized something, which was that mounting an pico at an angle would make it hard for the USB cable later. I also ran into the issue that the PCB would be too big to fit in JLCPCB promotion of 5$. So, after thinking, I decided the best course of action would be to split the design into two PCBs, now, I haven’t started the PCB part, but I did start the schematic part. I also took this oppurtunity to make the schematics pretty.
Basically, I went to check the ERC and I had 46 errors. Half of them were simply a lack of an not connected symbol However, the other half was just something else. What happened, was that the connectors were all specified as bidirectional pins, so, when I grounded one of the pins, KiCad freaked out like i just put 120V on an I2C line So, I decided I should try making my own symbols manually Horrible mistake Kicad sent my symbols library to outer space as soon as I created it, and I spent 20 minutes trying to find where did it go. Not only that, but I didnt even need to actually make a new symbol! I was using one connector symbol library, and all I had to do was switch to the other! I hope I can start making the PCB now And if you’re curious, the ammeter is our gauge, the thing we are gonna drive. Also, a few minor changes: I fixed the footprint for the DAC cuz once again it was wrong Removed the status LEDs because it would end up becoming an eyesore
Devlog 8 - The mainboard PCB is done, hooray :D Making the PCB was actually rather smooth. Now, I DID encounter some issues. But it was mainly with the 3D model of the DAC I had downloaded, but the fix for that was just making one myself with the Adafruit PCB Design files. I’m very very happy and proud of this work :D
Devlog 9 - The PCBs are ready :D I have finished both PCBs :D It was pretty smooth actually, I haven’t got it sanity checked yet, but, I’m actually surprised due to how smooth that went. The biggest issue was getting the 3d models just right, and also figuring out where to place stuff. Also, making sure both connectors were matched was sorta an issue. Also, I have begun writing the README, but, I’m struggling a bit with it.
Today, I finished making the PCBs! You may wonder “didn’t you do that in the last devlog?”, and yes, I did. The difference is I fixed many of the mistakes today, such as using solid connections which would make soldering impossible, or ground continuity mistakes. Anyways, I’m now pleased to say that they are actually finished. Next devlog we maybe get a case?
Devlog 11 - Driver Madness Today, I woke up feeling like doing the drivers, so that’s what I at least tried to do… However, I am struggling to find a library handling both cpu temperature and memory and it drove me insane!I am probably going to have to accept defeat, and instead opt for getting memory and swap from sysinfo rust crate, and temperature from the hwmon or thermalzone files in Linux…
Devlog 12 - drivers? I rewrote the whole entire thing, and we finally have achieved drivers :D, reading the cpu load average, memory and swap were pretty easy, as I had already done it before, the only issue was reading the temperature, I did have to learn quite a bit, but it works, I also have added the time too! Now, it’s not ready in any way, shape, or form, for now it just prints the data to console, but i’m overall really happy with the results! Next devlog I’m making firmware and finally moving on to the monster that’s named 3d modeling, I did try it today, only for onshape to not be really good and fusion just refuses to run. Do note that this is just the beta firmware, I’ll hold on the fancy features for now, and will only be adding them when I get to build it.
Devlog 12 - Switched displays I have switched displays, why? Well, I realized that having some constant UI on an OLED display will quickly lead to burn in, so that’s a major change. I’m glad I haven’t actually started designing the UI, so I didn’t lose a bunch of time designing for a monochrome display.
I have switched from the adafruit prebuilt DAC module to the raw MCP4728 chip, this way, I cut the cost of the DAC in about half. Since it was my first time doing a raw chip, it was pretty tough, and quite complicated to understand, took 2 hours of my life. But it works, it’s a mess tho, but hey, I’m glad it works! It feels a bit wrong too, idk why, I might have to do a clean up.
I have labeled the connectors on both PCBs! Why? Because I realized my README got confusing with the pinouts, and I realized it would be an struggle to connect everything based on a single markdown file. Another thing I did was divide my rust code. Why? Well, I realized it was going to get big, and to prevent 1000 line monster files I spun off the part of the code that gets sensor data into another file Another thing: Right now, I have no idea about what should be the next step of the projecrt, and it’s driving me nuts! I’ve also been struggling about what the BOM should look like.
I have made the labels for the meters, at the cost of my sanity :( For context, the measurements and arch thing I am borrowing from Lex Bailey at Computing the Details, however, the rest I made from scratch. For the first 20 minutes, things went smoothly, and i added the label of what the meter measures, along with 50% and the unit it’s measuring. But things did take a turn when adding the other 2 values. See how it’s at an angle (because this is a needle meter), it was hell to align it with the text, I spent an hour of my life frustrating about how do I even do this, in the end, the solution I decided upon was just accepting defeat and making it roughly accurate, but it’s quite an bummer
Devlog 17 - The driver is nearly done The rust driver is nearly done :D It gets the system information, it gets notification, gets mpris player information, and gets the time. It wanst easy, I spent a lot of time learning tokio, I also had to learn some concepts about parallelization, but i’m really happy with how it turned out :D I have been struggling with an creative block for some reason, idk, it just feels daunting to finish this.
Devlog 18 - The driver is done I did spent an hour attempting to understand how heapless strings worked, and how serialize and deserialization worked, but, I’m happy to say that I have an working driver. Sure, it’s not ready by any means, it needs an package, and other stuff, but it’s good enough for me!
Devlog 19: 5 hours in I started developing the firmware, BUT IT’S SO HARD AND CONFUSING, while I had a bit of an whiplash when I started developing the driver, it was nothing compared to what I’m currently experiencing with the no_std embassy firmware. I don’t really understand what I’m doing, I’m having to learn new concepts such as lifetimes and other stuff and it’s so confusing and messy, it’s making me crazy. To make matters worse, I was about to delete part of the firmware to start over but somehow the problem went away??????????? What??????????????? It doens’t make sense, nothing should be working here, but somehow, it does, and that does not make sense Nevermind the error is back, it just wans’t included in the commits, I have no idea, i’m tired. Devlog 20: 2 hours logged I have figured out that partial move issue! :D All I had to do was just stop trying exporting the peripherals object, so that’s solved :D I have finished the part that sends the macro keys to the computer, and i’m really proud of how it turned out! I’m also proud of the solution I used to save up memory, which is an bool array made out of one u8 int! I save up 7 bytes, which is small, but you gotta remember our memory is constrained! I also implemented the encoder switch, and I’ve been making more use of consts! The next step will be implementing the CDC!
Devlog 21 - CDC Is done :D So is the encoder! As the title says, I finished both of them and I’m very excited to move on to the next step which is driving the MCP4728 :D ! The rotary was tough because there’s 700 hundred libraries, but I picked the one someone in youtube had used, as that’s an good proof. The CDC was tough understanding the new concepts, but i’m proud it turned out ok!
Devlog 22 - New UART Port, better drivers I took a break from programming and decided to go back to PCB design, I replaced the screen pinout, and, more importantly, added an debug UART pin so you can get logging, while on it, I realized I would have to move a bunch of connectors! So i spent over an hour painfully rerouting, only to realize it broke more, I also had to rethink the pull up resistors because those had nowhere to go, anyways, thankfully everything’s working now, so i’m happy. After that break, I decided that I would start the handler for incoming host messages, but, for some reason, which I dont know, I started doing the README??? anyways, the readme is very pretty and has instructions on how to compile now, so that’s great ^^. Then, for some reason I decided to do the driver again?? I improved it, and it now gets the serial port using VID and PID, wayy better, it was just painful figuring out for the first time how to use results! And on a more unrelated note: If you noticed, yes, I’m purposefully delaying the CAD part because it’s been hell whenever I tried it, fusion 360 simply won’t run and I’m not sure if onshape is good for polishing, also I’m so scared of the deadline cuz I’m not sure if JLCPCB can get the parts here in time, the BOM is also scaring me, seems so complicated.
Let me first begin by saying, that this line: meters .fast_write(dash.cpu_load, dash.cpu_temp, dash.mem_used, dash.swap_used) .await .unwrap(); hardware.ldac.set_high(); Kinda took me an hour to make, and 2 hours in ADHD sidetracking. So, to get to this line, I had to remake the driver, not only because I was using computationally expensive floats, but because an u64 for an value between 0-4096 was wasteful of bytes. While on it, I sidetracked and decided to redo the way the driver interfaced with the USB device, because it felt quite unprofessional to just bake in the serial port. So, I wrote this fancy function that gets the serial port via the VID and PID, and it looks something like this: let keyboard_port = match utils::get_serial_with_vid_pid(DEVICE_VID, DEVICE_PID) { Ok(port_info) => port_info, Err(e) => { panic!("Error getting serial port! {}", e.description); } }; let mut keyboard_cdc = match tokio_serial::new(keyboard_port.port_name, 115200).open_native_async() { Ok(port) => port, Err(e) => panic!("Error opening serial port! {}", e), }; As you can see, it’s now way more professional! After that bit of sidetracking, I finally redid the types, and when I realized I would need an arduino style map functions, and that I was bored without internet, I rawdogged an library using the rustup documentation, not tracking the hours tho. You can get it via the crate “map-arduino”, and it works with all data types, I’m proud of myself! Finally, after all that work, I had to do the MCP4728, and that line in the start took a loong time, mainly because theer were 500 different I2C types and I didnt understand anything, but, at last, it works ;D
Devlog 24 - Implementing the UI for my project I begun writing the code for the display, only to realize my decision to not care about what pins I used would backfire, so, I had to rewire the schematic AND pcb, but it’s all okay now. Also, learning this was tough, whole new world, spent over an hour just figuring out how to pass the embassy spi to the ST7735 driver. After that, I begun by making the status bar, aka Anyways, after that, things went okay, I did have an hiccup when getting icons to show on the screen, because the library I initially used was garbage, or so I tought, atleast that’s what I tought at the time, but after switching to a different library, I managed to get the notification icon. Then, implementing the notification UI was a breeze, I had a hiccup because I had to learn linearlayout, but besides, that, it went okay. Then, I implemented the music player and default screens, while the default screen went okay, the music player, which is where I am now, is a bit hard because I need to figure out how do I show progress, I initially tought of a bar, but i’m thinking of just using a string, tho that would be sad. During that, I don’t know how, but something told me that the previous library for icon (which was superior due to it having more icons) was working and that I was wrong, sure enough, the issue was me not implementing the feature for the icon I wanted to implement I am now stopping this devlog because it got too big, but that’s where i am now.
Devlog 25 - The driver is finished :D I stopped working on the firmware for the UI so I could work in an intermission for the driver, I begun by first making a PKGBUILD, but, after seeing tests being performed, I got sucked in a rabbit hole, spending over an hour writing benchmarks only to find out the library I’m using to perform benchmarks didn’t support binaries, but that didn’t stop me from writing a simple test that prints the system info to the terminal. I also rewrote the function that gets cpu temp to use an more universal approach using lm-sensors. After that 1h30m rendezvous I started making the PKGBUILD, like many other things in the project, it was a whole new world, however, after over an hour of work, it works and it compiles! It was very very rewarding. Finally, to wrap it all up, I cleaned up most warnings, there’s just one that throws an error when I try to fix it LOL.
Devlog 26 - SOFTWARE IS DONE LETS GOOOOOOOOOO I have finished software side of things, the final thing needed being a music player, I skipped the progress bar due to it being an hassle to implement, and I don’t have much time. But, overall, it’s finished, it should work. The biggest problem during this step was well, figuring out how do i make the icon for the player status, but the solution was implementing a custom struct as much as an hassle that was, anyways, everything works now, let’s GOOOOOOOOOOOOOOOOO! The next step I plan is adding an optional led strip header
Devlog 27 - Productions files, and LED header I’ve added an LED header and decided to implement it, however, halfway thru, I got distracted, so I made all the production files, and they work well. Then, after an hour of coding, I have realized that adding LED support would be complicated and difficult, so i’m calling it off, and, instead, I’m just leaving the LED header there, empty, for the future.
Devlog 28 - EVERYTHING BUT THE CAD IS WORKING AHHHHHHHHHHHHHHHHHHH As the title says, the whole project is nearly done, the pcb is done, the software is done, however, for some reason, FUSION 360 JUST DOENST WORK, WHY? I’ve spent the whole day trying to install this thing and it simply cannot function! WHY? WHY MUST IT WORK LIKE THIS? anyways, i hope it works now, but i’m in a standoff right now
Devlog 29 - Onshape madness So, apparently my pc is not strong enough to run fusion 360, so I went to onshape, so I first begun by designing an encoder knob, and 50 minutes later, voilá, I had one, and was quite happy… But then I realized it needs to be in the same parts studio as my input board, so I deleted it with the intention of starting it over again. But, for some reason I do not know, I decided that I would put work on making the meters instead, and uhhh, it went well! Up until i spent 3hrs to realize the model I used was bogus, hooray, and I was so close too :((((. Anyways, i’m starting fresh, and i hope i get it all done by tomorrow
Devlog 30 - Encoder knob is done and I fixed the meters As the name says, I have finished both the encoder knob and the meters, meters only took me half an hour, I had already gone thru all steps before and I didn’t even need to do some, I had to get new a CAD Model and put the decal there, so that’s done. Btw I’m actually really really proud of these meters! Looking at them just gives me satisfaction, idk why, so rewarding Then I started to make the encoder knob, i’m not sure if this is printable, and I maybe should consider getting an straight knurling instead, in fact, i’m actually gonna do that right now! Yeah, incredible idea. Anyways, knurling this took me an hour and half, because I had to figure out a bunch of new stuff. i’m not actually so proud of this, i don’t know, it just looks evil and violent. Next step is redoing this.
Devlog 31 - As the title says, i’ve run into A LOT of cad issues, but i’ll list em: How do I insert heatset insert? How do I reference my pcb design in my sketch? How do I install the input board, angling the keys didn’t look good so i’m placing them on top + i get to make it lighter This is huge, 256mm x 63mm x 80??mm, not confirmed yet, i’m worried. This is it, i’m so worried and confused and ahhhhhhhh 5 minutes later, I have tought of a solution, previous designs stacked the meters side by side, but i’ll do two blocks of 10mm of each, and make the size smaller Also, the encoder knob is finished and hopefully more 3d printer friendly...
|
1792889324.7872016
|
1793753324.7872016
|
|
28233
|
Rainbow Dash OS by @matthewwong12 | Stardance
|
matthewwong12
|
1
|
65.99
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T14:55:26Z", "hours": 40.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "hey guys this is my first project so i made Rainbow Dash OS , this is a web browser design and code entirely by me. it’s My Little Pony theme too in case you don’t know features: there’s a welcome page, a notes app, draggable window , a clock and date widget , a custom cursor effect and a rolling text effect. some of these features should be very self explainatory, but i will explain the functions for the notes app. so for the notes app you can add a new note by pressing the add note button or another pointed out by pinkie pie. you can edit the note content by pressing the pencil button and delete a note by pressing the cross button. challenges: some of the challenges i face is inexperience with using js code , couldn’t find time to code and finding the resource to customize my page.firstly, time when i started the stardance challenge i was still in school, so i don’t have much time to code compared to other people that are having summer break. secondly, coding i overcome that problem by doing a lot of research myself and asking for help at #code , i have to clarify i did use ai , i use it to fix Js code problem that i couldn’t solve myself and i couldn’t find a solution online. most of the js code function i did put into this Os is found online and through other cool website. lastly, finding the resources, so i actually want to add mlp gif to my website but most of the good animatons are swg file which is no longer supported by new web browser , so that really limits what i can put into my website. something i’m proud of : well firstly im so happy to see that there are people that like my project it really gives me dopamine boost every time someone praise my project. another thing is how much i learn , by doing this project i learn how to code , how to use GIMP and so much more solving problems. what should you know to test this project ? you should know the javascript type=module because of the rainbow cursor effect , so some Js code function might need some modifications to function. for example , my rolling text effect is slightly different than the source code from mf2fm.com last but not least , a big thank you to those that helped and contribute to my project thank you @pi for solving the open/close windows functions. thank you @tsunami014 for solving the rainbow cursor canvas problem.", "repo": "https://github.com/Mattiplex/Rainbow-dash-OS", "demo": "https://mattiplex.github.io/Rainbow-dash-OS/"}]...
|
[{"post_id": 73231, "ts": "202 [{"post_id": 73231, "ts": "2026-09-24T17:04:59Z", "hours": 1.8611, "text": "devblog 8 ni howdy guys , it’s fix oh my gosh oh my gosh oh my gosh it’s fixed !!!!, the previous issue is now resolve and chattable is now live , we finally have global chat now ! now go spread some love edit: ah i found out stardance got extended i was so going work my ass off this weekend , but now i can chill, while #keeb will need immediate work"}, {"post_id": 72088, "ts": "2026-09-22T04:30:50Z", "hours": 2.21, "text": "devblog 7 hey guys , so in today devblog , i found out that implementing chattable cause a lot of issue to my other app function for example the note app function have become clunky and the vinyl player play-pause button is gone . so progress might stall as i tackle this major issue"}, {"post_id": 70743, "ts": "2026-09-19T18:05:22Z", "hours": 0.7736, "text": "devBlog 6 hey guys in this devblog i work on my global chat. i use chattable which is a free tool that make you host something like a global chat for freeeeeeeeeeee and it is also very easy to setup. i just finished setting up and i was messing around with the style."}, {"post_id": 69721, "ts": "2026-09-17T17:24:58Z", "hours": 1.2028, "text": "Devblog 5 hey guys it’s finish , the music app is finished . the disc now have a function that changes the image based on the track you’re on"}, {"post_id": 69012, "ts": "2026-09-16T06:49:37Z", "hours": 2.8222, "text": "hey ya guys Devblog 4 guys , guys i tweak the graphics now a bit and it’s now 20% cooler. i also added some classic song that every mlp fan would know.other than that this app just need to fix the disc image and some ponification ,then bada bim bada boom finish."}, {"post_id": 68412, "ts": "2026-09-15T02:22:21Z", "hours": 6.3947, "text": "howdy guys Devblog 3 so in this devblog i change out the complete music player system after i realised how hard is it to add the next/prev button function. but it all works now. you might have noticed i added a music visualizer and yeah it’s so cool . since this app is suppose to look like a DJ controller it will be kind of empty not to include a way to visualize your music. i still have lots to do and so little time left."}, {"post_id": 62801, "ts": "2026-09-06T10:09:29Z", "hours": 2.0822, "text": "devblogggggggg 2 hello guys after coming back from a trip to thailand, i started work again. currently im working on the music app and i added a the music player and the vinyl that’s suppose to have a the album on it. im also planning to add more songs and a next/perv button too."}, {"post_id": 58731, "ts": "2026-08-31T08:52:05Z", "hours": 8.6414, "text": "New DevBlog 1 hey guys it’s been a while , let me show you what i been working on lately. so i added a few new apps. there is vinyl player AppleChat games(planning) so as you can see there is a custom art i made for the apps that are still in progress. i made those in GIMP btw , it’s so fun ponifying my browser. also i’m using lapse now , so it log my actual time working on this project like research , coding and photoshoping ."}, {"post_id": 56555, "ts": "2026-08-28T11:09:36Z", "hours": 6.6694, "text": "last Devblog bfr shipping hey guys it’s finally happening i,m going to ship this bad boy. Anyway, i finish applying the looks i want to for my rolling text effect and create a custom BCG art to put my github link to. i also updated my Read me page. now without further ado im going to ship this project now"}, {"post_id": 53901, "ts": "2026-08-24T16:33:30Z", "hours": 9.3375, "text": "devblog6 hello everyone, firstly i would like to thank @tsunami014 for helping me figure out my cursor effect problems . Alright , now you can see in the video that i now have a new cursor effect and i also add a rolling text effect at my topbar. i also work on some graphics for the notes app, i added the graphics for the blank state, customize the Add note / edit note page and added some basic graphics for the div that will display your notes. i think i can do better on the design i’m still thinking of what characters to add into the graphics. oya , the blank state png is made using GIMP , i plan to create custom backgrounds for each apps or maybe just clutter the whole screen with ponies :p ."}, {"post_id": 47090, "ts": "2026-08-14T18:40:58Z", "hours": 3.8642, "text": "Devblog5 hello again , in this dev session i solved all of the problems i have from my previous devblog. Oh before i forget , shout out to @pi for helping me to point out my problems and generally being a cool guy :D . as you can see in my video, functionally the notes app is done although visually it’s not. so next session going to be a beautifying session. we are getting more closer to ship people !!! random fact : i try monster energy today and boy does it kick , it’s the only reason im up this late ."}, {"post_id": 44641, "ts": "2026-08-10T15:22:15Z", "hours": 3.5181, "text": "devblog 4 hey guys , i like to share with u all some progress i made , so as you can see the note app is still under development and there is a few issue i am tackling right now. idk how but when i was working on the function for my window to move up to the topBar and the function to protect the topBar (check the guide) PS those didn’t work too 😭. i somehow broke my notes app close function, can anybody lend me a helping hand ?"}, {"post_id": 40790, "ts": "2026-08-04T15:29:29Z", "hours": 4.0239, "text": "Devblog 3 i added my first app, a notes app which will be based on twilight sparkle . I also added a rainbow text effect which is so cool. progress been going smoothly and so far no major problems yet …"}, {"post_id": 38306, "ts": "2026-07-31T16:57:57Z", "hours": 9.5969, "text": "devlog 2 , hey guys it’s been a while. this few weeks i have been pretty busy with school assignment , that’s why i didn’t have much time to code , when i did have time i mainly spend it to clean up my code so it didn’t look like a freaking essay.Only recently have i added new features and i did a lot of troubleshooting … i mean a lot , but im glad this works now even thou it’s a bit bland but expect more features to come as im starting to get a hang of this coding stuff."}, {"post_id": 26117, "ts": "2026-07-10T18:29:26Z", "hours": 2.9667, "text": "devblog#1 I added a cute background and create a top bar. Plus i got a fully functioning clock system and date too. I also added a gif and a picture on the top bar. (oops, i forgot the link https://mattiplex.github.io/Rainbow-dash-OS/ )"}, {"post_id": 22887, "ts": "2026-07-05T14:57:56Z", "hours": 0.3136, "text": "i publish my first WebOS go check it out"}]...
|
Title: Rainbow Dash OS by @matthewwong12 | Stardan Title: Rainbow Dash OS by @matthewwong12 | Stardance
Devlogs:
i publish my first WebOS go check it out
devblog#1 I added a cute background and create a top bar. Plus i got a fully functioning clock system and date too. I also added a gif and a picture on the top bar. (oops, i forgot the link https://mattiplex.github.io/Rainbow-dash-OS/ )
devlog 2 , hey guys it’s been a while. this few weeks i have been pretty busy with school assignment , that’s why i didn’t have much time to code , when i did have time i mainly spend it to clean up my code so it didn’t look like a freaking essay.Only recently have i added new features and i did a lot of troubleshooting … i mean a lot , but im glad this works now even thou it’s a bit bland but expect more features to come as im starting to get a hang of this coding stuff.
Devblog 3 i added my first app, a notes app which will be based on twilight sparkle . I also added a rainbow text effect which is so cool. progress been going smoothly and so far no major problems yet …
devblog 4 hey guys , i like to share with u all some progress i made , so as you can see the note app is still under development and there is a few issue i am tackling right now. idk how but when i was working on the function for my window to move up to the topBar and the function to protect the topBar (check the guide) PS those didn’t work too 😭. i somehow broke my notes app close function, can anybody lend me a helping hand ?
Devblog5 hello again , in this dev session i solved all of the problems i have from my previous devblog. Oh before i forget , shout out to @pi for helping me to point out my problems and generally being a cool guy :D . as you can see in my video, functionally the notes app is done although visually it’s not. so next session going to be a beautifying session. we are getting more closer to ship people !!! random fact : i try monster energy today and boy does it kick , it’s the only reason im up this late .
devblog6 hello everyone, firstly i would like to thank @tsunami014 for helping me figure out my cursor effect problems . Alright , now you can see in the video that i now have a new cursor effect and i also add a rolling text effect at my topbar. i also work on some graphics for the notes app, i added the graphics for the blank state, customize the Add note / edit note page and added some basic graphics for the div that will display your notes. i think i can do better on the design i’m still thinking of what characters to add into the graphics. oya , the blank state png is made using GIMP , i plan to create custom backgrounds for each apps or maybe just clutter the whole screen with ponies :p .
last Devblog bfr shipping hey guys it’s finally happening i,m going to ship this bad boy. Anyway, i finish applying the looks i want to for my rolling text effect and create a custom BCG art to put my github link to. i also updated my Read me page. now without further ado im going to ship this project now
New DevBlog 1 hey guys it’s been a while , let me show you what i been working on lately. so i added a few new apps. there is vinyl player AppleChat games(planning) so as you can see there is a custom art i made for the apps that are still in progress. i made those in GIMP btw , it’s so fun ponifying my browser. also i’m using lapse now , so it log my actual time working on this project like research , coding and photoshoping .
devblogggggggg 2 hello guys after coming back from a trip to thailand, i started work again. currently im working on the music app and i added a the music player and the vinyl that’s suppose to have a the album on it. im also planning to add more songs and a next/perv button too.
howdy guys Devblog 3 so in this devblog i change out the complete music player system after i realised how hard is it to add the next/prev button function. but it all works now. you might have noticed i added a music visualizer and yeah it’s so cool . since this app is suppose to look like a DJ controller it will be kind of empty not to include a way to visualize your music. i still have lots to do and so little time left.
hey ya guys Devblog 4 guys , guys i tweak the graphics now a bit and it’s now 20% cooler. i also added some classic song that every mlp fan would know.other than that this app just need to fix the disc image and some ponification ,then bada bim bada boom finish.
Devblog 5 hey guys it’s finish , the music app is finished . the disc now have a function that changes the image based on the track you’re on
devBlog 6 hey guys in this devblog i work on my global chat. i use chattable which is a free tool that make you host something like a global chat for freeeeeeeeeeee and it is also very easy to setup. i just finished setting up and i was messing around with the style.
devblog 7 hey guys , so in today devblog , i found out that implementing chattable cause a lot of issue to my other app function for example the note app function have become clunky and the vinyl player play-pause button is gone . so progress might stall as i tackle this major issue
devblog 8 ni howdy guys , it’s fix oh my gosh oh my gosh oh my gosh it’s fixed !!!!, the previous issue is now resolve and chattable is now live , we finally have global chat now ! now go spread some love edit: ah i found out stardance got extended i was so going work my ass off this weekend , but now i can chill, while #keeb will need immediate work
Ships:
hey guys this is my first project so i made Rainbow Dash OS , this is a web browser design and code entirely by me. it’s My Little Pony theme too in case you don’t know features: there’s a welcome page, a notes app, draggable window , a clock and date widget , a custom cursor effect and a rolling text effect. some of these features should be very self explainatory, but i will explain the functions for the notes app. so for the notes app you can add a new note by pressing the add note button or another pointed out by pinkie pie. you can edit the note content by pressing the pencil button and delete a note by pressing the cross button. challenges: some of the challenges i face is inexperience with using js code , couldn’t find time to code and finding the resource to customize my page.firstly, time when i started the stardance challenge i was still in school, so i don’t have much time to code compared to other people that are having summer break. secondly, coding i overcome that problem by doing a lot of research myself and asking for help at #code , i have to clarify i did use ai , i use it to fix Js code problem that i couldn’t solve myself and i couldn’t find a solution online. most of the js code function i did put into this Os is found online and through other cool website. lastly, finding the resources, so i actually want to add mlp gif to my website but most of the good animatons are swg file which is no longer supported by new web browser , so that really limits what i can put into my website. something i’m proud of : well firstly im so happy to see that there are people that like my project it really gives me dopamine boost every time someone praise my project. another thing is how much i learn , by doing this project i learn how to code , how to use GIMP and so much more solving problems. what should you know to test this project ? you should know the javascript type=module because of the rainbow cursor effect , so some Js code function might need some modifications to function. for example , my rolling text effect is slightly different than the source code from mf2fm.com last but not least , a big thank you to those that helped and contribute to my project thank you @pi for solving the open/close windows functions. thank you @tsunami014 for solving the rainbow cursor canvas problem....
|
1792993917.9255588
|
1793080317.9255588
|
|
47151
|
Beta-type Stirling Engine by @lilfox | Stardance
|
lilfox
|
0
|
65.99
|
0
|
[]
|
[{"post_id": 69434, "ts": "202 [{"post_id": 69434, "ts": "2026-09-17T01:36:50Z", "hours": 11.6278, "text": "After attempting to print more air-tight pistons, I realized a flaw: I had changed the piston multitudes of times, and then printed all the different versions once over a series of trials! Oops. So that means I don’t know which dimensions are air tight? … Yes. That meant experimenting more! I definitely had a better idea of what dimensions worked, but, er, that took a while. After successfully printing a air-tight piston, I now had to face an even bigger issue. See, the beta stirling engine actually has overlapping pistons, meaning one rod goes through another. This is pretty easy to design; just make a whole for the piston rod to slide through. But the big question is how I’d make this airtight. The solution was a tiny o-ring at the opening of the aforementioned hole. This took quite a while to perfect. I needed the o-ring to compress a bit, while not being too hard for the rod to pass through. The solutions: Make the end of the rod rounded; sharp edges don’t transition smoothly. Glue the o-ring so that its hole is slightly smaller than the rod diameter. I also printed out the base with some adjustments: The cylinder is separated from the base so that it can be printed more precisely. The base is cut down to use less filament. The screw holes are smaller to actually be compatible with my screws. (I’ve done it again! I’ve went over the 10 hour limit TT-TT)"}, {"post_id": 62262, "ts": "2026-09-05T15:27:47Z", "hours": 11.1594, "text": "10 hours. 10 hours to make a piston that seals air in a cylinder. (And 1 more hour that won’t count because technically at 10 hours I still hadn’t sealed the air yet TT_TT) I realized that rubber bands would not seal effectively, so I just got some cheap o-rings from amazon instead. But gosh, sealing was way harder than I thought it’d be! The Process At first I just created a simple groove in Onshape and experimented with my existing cylinder. But there wasn’t enough space for the o-ring to compress. What followed was a lot of testing, trying out thicker and thinner o-rings, experimenting with the cylinder size for the power piston to slide smoothly, etc. I fell down this deep rabbit hole of using a bigger cylinder bore and a thicker o-ring, printing and reprinting with different dimensions to find what worked. To figure out if a piston seals correctly, the piston should “float” back up once you push it down, as without your compressing force the air can expand once again. But none of these tests worked. I couldn’t figure it out, haha. I even tried Parker’s handbook of o-rings, but couldn’t figure out how it worked (my own skill issue :’) ). But when I examined pistons that worked, I realized (after a while) that the problem was that the piston was too small! For the cylinder, anyway, so much so that when I pushed the piston down, it didn’t go in a straight line. It had the ability to tilt, letting air escape. So I made the cylinder smaller, but with enough tolerance to let the piston slide, and used lubricant!! I’m happy that after how many tries, the piston finally seals the air. However, there’s much to improve on. The tolerance between the piston and the cylinder may be too small. There is friction between the two that interferes with performance. The groove is a bit too deep. Also the piston can seal air now, there is still quite a bit of air lost. Hopefully these will be easy fixes. I’m glad I’ve learned from my many trials and errors."}, {"post_id": 51646, "ts": "2026-08-21T13:06:58Z", "hours": 7.8844, "text": "Woah, I got a lot of stuff done! Here’s a layout of what I finished: Designing the real layout of the Stirling engine (linkages that don’t overlap) Cylinder and base Gear holder Holes for screws Completed power piston Completed displacer piston Flywheel However, after printing the first few parts, I realized a few issues at first: The linkages were too thick for the screws The displacer piston couldn’t be threaded through the hole of the power piston (that was my mistake) So, I made the linkages thinner and adapted them to be more screw-friendly, and sliced the displacer piston into multiple pieces so that it would be possible to build and use. On the second iteration, I printed out the base and an official gear holder to attach. There I found more issues: The power piston had too tight of a fit. It couldn’t smoothly slide into the cylinder. The flywheel wasn’t heavy enough. The goal is to have the gears spin for an extended period of time once the flywheel is spun, but the gears only rotate about twice. The connection between the gear holder and the base had bigger screw holes for smaller screws, so I have to make that connection thinner. For the future, I think I should add a cavity in the power piston for something like a rubber band. Since I have no o-rings, that’s my cheap alternative for sealing, haha."}, {"post_id": 50248, "ts": "2026-08-19T12:16:26Z", "hours": 7.9692, "text": "Ok, I’ve been working on the Rhombic Stirling engine for a while now! I tried to use math to figure out the lengths of the linkages for the optimal dimensions, and a phase offset of 90 degrees. I even tried to use MotionGen. Unfortunately, the math was faulty––the website I found it on even calculated the wrong answers for the practice questions. And MotionGen wasn’t working. The minutes of Google searching wasn’t getting me anywhere in troubleshooting, and I just gave up. So I resorted to good ol’ guessing and checking XD. Like I stated earlier, I will be using Schmidt analysis to determine if the engine will really run though, so no worries! I’ll still use math… After a few iterations I was able to reach one I was happy with. It not only ran smoothly in Onshape’s assembly, but also allowed the displacer to be about 90 degrees ahead of the power piston, as is optimal. However, figuring this out was not as easy as for the crankshafts. For the Rhombic Stirling, to determine the phase angle, one must: Mark the gear in some way. Turn the gear until the power piston is at the topmost of its stroke. Take note of the position of the mark on the gear. Turn the gear until the displacer piston is at the topmost of its stroke. Again, take note of the position of the mark on the gear. Measure the angle between the position of the first mark and second mark. Fortunately for me, my 4th-5th iteration produced a 90 degree phase angle, which is lucky for a guess and checker :). The first two photos are missing a linkage for clarity. The third features the full linkage."}, {"post_id": 49528, "ts": "2026-08-18T12:22:14Z", "hours": 3.2303, "text": "I finished the design of the Stirling engine and printed it out! But I’m far from done. I’ve added: A cylinder A stand Deeper holes to make it easier to screw into the design Printing this took about 4+ hours, and putting it together who knows how long. However, there were major flaws that I was able to pinpoint: The cranks don’t always move uniformly. Although they are screwed together, as 3d prints, they don’t actually have threads, so the screws are able to rotate independently from the other cranks. It’s hard to spin the shafts, and the cranks, at the same time, because of the issue above and friction. And…the most obvious…it doesn’t work. I think it’s because of the aforementioned flaws, and because I was designing the beta engine based on mechanical linkages alone, not size or pressure, etc. So now, I’ve decided to redesign the beta Stirling engine as a Rhombic Stirling engine, and go deep into the math using formulas from stuff like Schmidt analysis."}, {"post_id": 48118, "ts": "2026-08-16T12:30:32Z", "hours": 6.1372, "text": "Yes…I made another mistake that I had to fix -_- If you look at the photo in the previous devlog, you’ll notice that the connection between the displacer piston and the crankshaft actually overlap the power piston’s shaft—it moves in front of the connection between the power piston and its crankshaft! This was very hard to model in Onshape. So I had to improve the linkage so that the power-crankshaft connection moved in the front instead. After a bit of tweaking (and painful double-checking), the linkage seemed alright. So, I modeled the system in Onshape and it seemed to run well. Now I have finalized the linkages, making sure that they don’t overlap and run properly, and everything finally seems to check out! I’ve learned that prototyping, design, and checking my work is very important when it comes to engineering. I should learn to be less careless and spot these mistakes before investing too much time into them! Although this was frustrating, I’m very happy that I learned that lesson :)"}, {"post_id": 47445, "ts": "2026-08-15T11:37:13Z", "hours": 5.2183, "text": "Ok, so I solved an issue while making a mistake. Silly me! I created another linkage in MotionGen that fulfilled all the requirements from the previous devlog: The pistons don’t overlap The areas connecting the linkages don’t overlap Unfortunately, in focusing on this, I forgot a crucial requirement: that the displacer crankshaft should be 90 degrees ahead of the power crankshaft. I had done it the opposite way. Instead, I set it up so that the power piston’s crankshaft was actually 90 degrees ahead. By that time I had already modeled a prototype in Onshape and started CADing the final. But oh well, I should fix my mistakes anytime. So! I have redesigned the linkage in MotionGen and it should fulfull all the requirements and have no mistakes (my peanut brain is bound to make one more though :’) ). I hope to create a working prototype in Onshape to finally build and test it."}, {"post_id": 47057, "ts": "2026-08-14T17:46:24Z", "hours": 4.6194, "text": "I experimented on the linkages for the beta engine and found a way for the displacer and power pistons to not overlap. I did this by: simulating different linkage lengths in MotionGen using a rotating crank and a slotted link. Unfortunately, while one problem was solved, another problem appeared: the linkages were overlapping now! If you look closely, the areas connecting the pistons to the linkages overlap. Obviously this is a big issue that I will have to solve. So, now I have two goals: To have the power and displacer pistons not overlap To have the linkages not overlap, either. (How many times have I said “overlap” in this devlog?) I plan to do this by examining the positions of the pistons when they are at their most extremes (when the displacer is at the left-most and when the power piston is at the right-most). Hopefully this gets solved by today!"}, {"post_id": 46301, "ts": "2026-08-13T13:07:38Z", "hours": 1.985, "text": "Now was the time to delve really deep. Now that I had the layout figured out, I needed to make the mechanism actually function. If you’re interested, the theory is in the photos down below! In case you can’t read my horrendous handwriting: The hot air moves to the center of the Stirling engine. Because the hot air moves to the colder area, it becomes colder and compresses. The compression moves the power piston. The cold air is then shuttled by the displacer to the hot end. The cold air becomes hotter and expands, moving the pistons and flywheel. The flywheel’s angular momentum continues to move the pistons, returning the cycle to its first stage. Throughout steps 2-3, the flywheel keeps the momentum and continues to move the pistons. Unfortunately, I haven’t pictured the flywheel in relation to the engine, but you can imagine that the flywheel is at the axle of the crankshaft. So, from what I knew, the cranks of the pistons needed to be, optimally, 90 degrees offset, with the displacer piston 90 degrees ahead so that it could shuttle the air first. Then, using the diagrams I drew below, I configured one of the phases into Onshape to hopefully create a working mechanism. The design is still in the works, but I think I at least have a nice working structure! :)"}, {"post_id": 46066, "ts": "2026-08-13T00:42:08Z", "hours": 3.5078, "text": "OK, I’ve decided to stick to the crankshafts for now! I figured that I at least need to know the basics of designing SEs before diving into the more unique variations. This is less of a design, but more of a lay-out (albeit incorrectly :P). It has: The displacer piston (blue), which moves the working fluid through the engine The power piston (white), which transmits the output rotational force The linkages (aka crankshafts) for each piston (with their corresponding colors) The difficult part was laying out every part in such a way that they didn’t overlap or cut into each other (at least the linkages). I was focusing more on the structure rather than the function, so the pistons are positioned incorrectly and will overlap each other when put into Onshape’s assembly! I’m aiming to create a mechanism that actually functions correctly."}, {"post_id": 45900, "ts": "2026-08-12T17:29:05Z", "hours": 2.6481, "text": "Stirling engine redesign First of all, what is a Stirling engine? A Stirling engine (SE) is an external combustion engine powered by heat. What did that jumble of words mean? Basically, unlike conventional engines, SEs don’t require fuels inside the cylinder to react. Instead, they use fuel or fluids outside of the cylinder, the aforementioned hot air. Interestingly, SEs can also be powered by cold air, so technically SEs are actually engines powered by temperature differences, not simply heat. Okay, but what’s a beta Stirling engine? Stirling engines have so many types! The alpha, beta, and gamma are the main ones. What these random names describe are the different configurations of a SE. The beta engine is a specific structure. The dilemma I was working on the SE in Onshape until I reached a pit stop. I was using mechanical cranks, but they cut through the axle! I checked some simulations and found that there had to be literally no axle in between––meaning that the axle would have to be cut. So I’m wondering if I should switch gears to a Rhombic drive mechanism. I’ll delve more into that next devlog. Seeya there! :) (I know the video assembly looks wonky because it’s not put together properly, but you can see the issue pretty clearly)"}]...
|
Title: Beta-type Stirling Engine by @lilfox | Star Title: Beta-type Stirling Engine by @lilfox | Stardance
Devlogs:
Stirling engine redesign First of all, what is a Stirling engine? A Stirling engine (SE) is an external combustion engine powered by heat. What did that jumble of words mean? Basically, unlike conventional engines, SEs don’t require fuels inside the cylinder to react. Instead, they use fuel or fluids outside of the cylinder, the aforementioned hot air. Interestingly, SEs can also be powered by cold air, so technically SEs are actually engines powered by temperature differences, not simply heat. Okay, but what’s a beta Stirling engine? Stirling engines have so many types! The alpha, beta, and gamma are the main ones. What these random names describe are the different configurations of a SE. The beta engine is a specific structure. The dilemma I was working on the SE in Onshape until I reached a pit stop. I was using mechanical cranks, but they cut through the axle! I checked some simulations and found that there had to be literally no axle in between––meaning that the axle would have to be cut. So I’m wondering if I should switch gears to a Rhombic drive mechanism. I’ll delve more into that next devlog. Seeya there! :) (I know the video assembly looks wonky because it’s not put together properly, but you can see the issue pretty clearly)
OK, I’ve decided to stick to the crankshafts for now! I figured that I at least need to know the basics of designing SEs before diving into the more unique variations. This is less of a design, but more of a lay-out (albeit incorrectly :P). It has: The displacer piston (blue), which moves the working fluid through the engine The power piston (white), which transmits the output rotational force The linkages (aka crankshafts) for each piston (with their corresponding colors) The difficult part was laying out every part in such a way that they didn’t overlap or cut into each other (at least the linkages). I was focusing more on the structure rather than the function, so the pistons are positioned incorrectly and will overlap each other when put into Onshape’s assembly! I’m aiming to create a mechanism that actually functions correctly.
Now was the time to delve really deep. Now that I had the layout figured out, I needed to make the mechanism actually function. If you’re interested, the theory is in the photos down below! In case you can’t read my horrendous handwriting: The hot air moves to the center of the Stirling engine. Because the hot air moves to the colder area, it becomes colder and compresses. The compression moves the power piston. The cold air is then shuttled by the displacer to the hot end. The cold air becomes hotter and expands, moving the pistons and flywheel. The flywheel’s angular momentum continues to move the pistons, returning the cycle to its first stage. Throughout steps 2-3, the flywheel keeps the momentum and continues to move the pistons. Unfortunately, I haven’t pictured the flywheel in relation to the engine, but you can imagine that the flywheel is at the axle of the crankshaft. So, from what I knew, the cranks of the pistons needed to be, optimally, 90 degrees offset, with the displacer piston 90 degrees ahead so that it could shuttle the air first. Then, using the diagrams I drew below, I configured one of the phases into Onshape to hopefully create a working mechanism. The design is still in the works, but I think I at least have a nice working structure! :)
I experimented on the linkages for the beta engine and found a way for the displacer and power pistons to not overlap. I did this by: simulating different linkage lengths in MotionGen using a rotating crank and a slotted link. Unfortunately, while one problem was solved, another problem appeared: the linkages were overlapping now! If you look closely, the areas connecting the pistons to the linkages overlap. Obviously this is a big issue that I will have to solve. So, now I have two goals: To have the power and displacer pistons not overlap To have the linkages not overlap, either. (How many times have I said “overlap” in this devlog?) I plan to do this by examining the positions of the pistons when they are at their most extremes (when the displacer is at the left-most and when the power piston is at the right-most). Hopefully this gets solved by today!
Ok, so I solved an issue while making a mistake. Silly me! I created another linkage in MotionGen that fulfilled all the requirements from the previous devlog: The pistons don’t overlap The areas connecting the linkages don’t overlap Unfortunately, in focusing on this, I forgot a crucial requirement: that the displacer crankshaft should be 90 degrees ahead of the power crankshaft. I had done it the opposite way. Instead, I set it up so that the power piston’s crankshaft was actually 90 degrees ahead. By that time I had already modeled a prototype in Onshape and started CADing the final. But oh well, I should fix my mistakes anytime. So! I have redesigned the linkage in MotionGen and it should fulfull all the requirements and have no mistakes (my peanut brain is bound to make one more though :’) ). I hope to create a working prototype in Onshape to finally build and test it.
Yes…I made another mistake that I had to fix -_- If you look at the photo in the previous devlog, you’ll notice that the connection between the displacer piston and the crankshaft actually overlap the power piston’s shaft—it moves in front of the connection between the power piston and its crankshaft! This was very hard to model in Onshape. So I had to improve the linkage so that the power-crankshaft connection moved in the front instead. After a bit of tweaking (and painful double-checking), the linkage seemed alright. So, I modeled the system in Onshape and it seemed to run well. Now I have finalized the linkages, making sure that they don’t overlap and run properly, and everything finally seems to check out! I’ve learned that prototyping, design, and checking my work is very important when it comes to engineering. I should learn to be less careless and spot these mistakes before investing too much time into them! Although this was frustrating, I’m very happy that I learned that lesson :)
I finished the design of the Stirling engine and printed it out! But I’m far from done. I’ve added: A cylinder A stand Deeper holes to make it easier to screw into the design Printing this took about 4+ hours, and putting it together who knows how long. However, there were major flaws that I was able to pinpoint: The cranks don’t always move uniformly. Although they are screwed together, as 3d prints, they don’t actually have threads, so the screws are able to rotate independently from the other cranks. It’s hard to spin the shafts, and the cranks, at the same time, because of the issue above and friction. And…the most obvious…it doesn’t work. I think it’s because of the aforementioned flaws, and because I was designing the beta engine based on mechanical linkages alone, not size or pressure, etc. So now, I’ve decided to redesign the beta Stirling engine as a Rhombic Stirling engine, and go deep into the math using formulas from stuff like Schmidt analysis.
Ok, I’ve been working on the Rhombic Stirling engine for a while now! I tried to use math to figure out the lengths of the linkages for the optimal dimensions, and a phase offset of 90 degrees. I even tried to use MotionGen. Unfortunately, the math was faulty––the website I found it on even calculated the wrong answers for the practice questions. And MotionGen wasn’t working. The minutes of Google searching wasn’t getting me anywhere in troubleshooting, and I just gave up. So I resorted to good ol’ guessing and checking XD. Like I stated earlier, I will be using Schmidt analysis to determine if the engine will really run though, so no worries! I’ll still use math… After a few iterations I was able to reach one I was happy with. It not only ran smoothly in Onshape’s assembly, but also allowed the displacer to be about 90 degrees ahead of the power piston, as is optimal. However, figuring this out was not as easy as for the crankshafts. For the Rhombic Stirling, to determine the phase angle, one must: Mark the gear in some way. Turn the gear until the power piston is at the topmost of its stroke. Take note of the position of the mark on the gear. Turn the gear until the displacer piston is at the topmost of its stroke. Again, take note of the position of the mark on the gear. Measure the angle between the position of the first mark and second mark. Fortunately for me, my 4th-5th iteration produced a 90 degree phase angle, which is lucky for a guess and checker :). The first two photos are missing a linkage for clarity. The third features the full linkage.
Woah, I got a lot of stuff done! Here’s a layout of what I finished: Designing the real layout of the Stirling engine (linkages that don’t overlap) Cylinder and base Gear holder Holes for screws Completed power piston Completed displacer piston Flywheel However, after printing the first few parts, I realized a few issues at first: The linkages were too thick for the screws The displacer piston couldn’t be threaded through the hole of the power piston (that was my mistake) So, I made the linkages thinner and adapted them to be more screw-friendly, and sliced the displacer piston into multiple pieces so that it would be possible to build and use. On the second iteration, I printed out the base and an official gear holder to attach. There I found more issues: The power piston had too tight of a fit. It couldn’t smoothly slide into the cylinder. The flywheel wasn’t heavy enough. The goal is to have the gears spin for an extended period of time once the flywheel is spun, but the gears only rotate about twice. The connection between the gear holder and the base had bigger screw holes for smaller screws, so I have to make that connection thinner. For the future, I think I should add a cavity in the power piston for something like a rubber band. Since I have no o-rings, that’s my cheap alternative for sealing, haha.
10 hours. 10 hours to make a piston that seals air in a cylinder. (And 1 more hour that won’t count because technically at 10 hours I still hadn’t sealed the air yet TT_TT) I realized that rubber bands would not seal effectively, so I just got some cheap o-rings from amazon instead. But gosh, sealing was way harder than I thought it’d be! The Process At first I just created a simple groove in Onshape and experimented with my existing cylinder. But there wasn’t enough space for the o-ring to compress. What followed was a lot of testing, trying out thicker and thinner o-rings, experimenting with the cylinder size for the power piston to slide smoothly, etc. I fell down this deep rabbit hole of using a bigger cylinder bore and a thicker o-ring, printing and reprinting with different dimensions to find what worked. To figure out if a piston seals correctly, the piston should “float” back up once you push it down, as without your compressing force the air can expand once again. But none of these tests worked. I couldn’t figure it out, haha. I even tried Parker’s handbook of o-rings, but couldn’t figure out how it worked (my own skill issue :’) ). But when I examined pistons that worked, I realized (after a while) that the problem was that the piston was too small! For the cylinder, anyway, so much so that when I pushed the piston down, it didn’t go in a straight line. It had the ability to tilt, letting air escape. So I made the cylinder smaller, but with enough tolerance to let the piston slide, and used lubricant!! I’m happy that after how many tries, the piston finally seals the air. However, there’s much to improve on. The tolerance between the piston and the cylinder may be too small. There is friction between the two that interferes with performance. The groove is a bit too deep. Also the piston can seal air now, there is still quite a bit of air lost. Hopefully these will be easy fixes. I’m glad I’ve learned from my many trials and errors.
After attempting to print more air-tight pistons, I realized a flaw: I had changed the piston multitudes of times, and then printed all the different versions once over a series of trials! Oops. So that means I don’t know which dimensions are air tight? … Yes. That meant experimenting more! I definitely had a better idea of what dimensions worked, but, er, that took a while. After successfully printing a air-tight piston, I now had to face an even bigger issue. See, the beta stirling engine actually has overlapping pistons, meaning one rod goes through another. This is pretty easy to design; just make a whole for the piston rod to slide through. But the big question is how I’d make this airtight. The solution was a tiny o-ring at the opening of the aforementioned hole. This took quite a while to perfect. I needed the o-ring to compress a bit, while not being too hard for the rod to pass through. The solutions: Make the end of the rod rounded; sharp edges don’t transition smoothly. Glue the o-ring so that its hole is slightly smaller than the rod diameter. I also printed out the base with some adjustments: The cylinder is separated from the base so that it can be printed more precisely. The base is cut down to use less filament. The screw holes are smaller to actually be compatible with my screws. (I’ve done it again! I’ve went over the 10 hour limit TT-TT)...
|
1792504349.1971056
|
1793109149.1971056
|
|
7454
|
Dashboard by @TX9394 | Stardance
|
TX9394
|
0
|
65.94
|
0
|
[]
|
[{"post_id": 77365, "ts": "202 [{"post_id": 77365, "ts": "2026-10-06T17:52:02Z", "hours": 10.7172, "text": "Devlog 38 I used the whole time to get the python dashboard on the website. Streamlit helped a lot and now I finally have a version which works (sometimes). There are still some errors with API keys and the settings being transferred correctly on the website."}, {"post_id": 39355, "ts": "2026-08-02T08:47:49Z", "hours": 0.6644, "text": "Devlog 37 I didn’t do much, I just added some functions which got lost by my project reset. Somehow, the buttons on the website didn’t work also, so I fixed that."}, {"post_id": 38727, "ts": "2026-08-01T08:48:33Z", "hours": 10.3597, "text": "Devlog 36 That’s a problem right now, because I did exactly nothing. I added the function, that your google account that you added, is saved in the json file. But because of some stupid reason, the website didn’t find the json file anymore as soon as the google account was connected. I tried every humanly possible ways to fix that, I didn’t have any success. Then I asked Claude Code, who also didn’t know what to do, it didn’t work. I now deleted all of the changes and brought it back to the last commit on github were everything still works. Next step is to find a solution, so the google account gets saved in the json file, so the dashboard can show your calender entries and stuff. I know it’s not a good idea to log this time right now, but I didn’t find a way to “delete” time, and I also just don’t want to start this project over again."}, {"post_id": 29668, "ts": "2026-07-16T18:51:32Z", "hours": 1.6069, "text": "Devlog 35 1. Dashboard design The curved edges didn’t want to work propably, so I made them not curved again Fixed some color issues, because at some specific color like dark red the contrast was trash 2. Widgets The weather widget works again now, that was just a small fx I am currently having a lot of trouble with the calender widget, because I always wondered why the appointments aren’t shown probably on the dashboard. Now I found out why: Because I am saving the google account exactly nowhere, wo the python dashboard doesn’t have access to the account information. I don’t know yet, how I want to save an entire google account in a json file, but I am sure I’ll find I way to do it (hopefully)"}, {"post_id": 29077, "ts": "2026-07-15T18:48:19Z", "hours": 0.8064, "text": "Devlog 34 1. Google Google still wasn’t able to verify my app, so it’s still just avaible to specific test users The calender/notification date is also not shown properly yet, there is some problem with the json file, I still wasn’t able to fix this 2. Python dashboard The corners of the dashboard widgets are somehow not as curved as I want them to be, and the resolution is also trash some how"}, {"post_id": 28471, "ts": "2026-07-14T18:37:42Z", "hours": 3.8711, "text": "Devlog 33 1. Google On the Python dashboard, neither your google calender nor your notifications are shown proberly. I still have to fix this I tried verifying my app with google, so it’s public and anyone can use it and I don’t have to declare you as test user for you to be able to use the website and show your notifications and stuff 2. Dashboard Design The edges of the python dashboard are curved now The dashboard also works now with really dark of really light color and the contrast isn’t shit anymore"}, {"post_id": 25460, "ts": "2026-07-09T18:58:48Z", "hours": 1.3867, "text": "Devlog 32 Dashboard Design If you choose a custom color now, not just the text and the lines have that color, but the whole website. It was pretty complicated to be sure, that the contrast is neither at really light nor at really dark color ass."}, {"post_id": 24893, "ts": "2026-07-08T18:57:39Z", "hours": 2.0447, "text": "#Devlog 31 1. Getting the website ready There was again a problem with the google services, I submitted my website now for verification. Because of some reason you weren’t able to scroll in the settings section, I fixed that 2. Python dashboard I started with the dashboard, I pretty much redesigned it, it looks different to the old version. The google services like calender or gmail don’t work yet and the color isn’t as I want it yet. But it’s a good start. I again had lots of help by AI here, because as I already wrote, my python knowledge is pretty ass."}, {"post_id": 23650, "ts": "2026-07-06T18:55:45Z", "hours": 1.1494, "text": "#Devlog 30 1. Google Now you finally can add your google account to the website That just works if you are on localhost, on server, it doesn’t work yet, don’t really now why The problem was, that I didn’t give google any authorized javascript origins, which leads to the problem, that the origin is authorized 2. API Safety Because of the new json file with my google api key and everything, the json files were accesible for anyone in internet, I did also fix that"}, {"post_id": 22978, "ts": "2026-07-05T17:43:21Z", "hours": 1.3053, "text": "Devlog 29 1. Google I now created a completly new project at google claude, because somehow the website always said, the client was deleted. It still says that I don’t now what to do. I’ll just wait now, maybe it doesn’t load properly With the new google project, I added the new secret and the new google id to the .env I don’t have an .env file for the google secret and id anymore, I now use the json file by google 2. Fixing design issues Somehow, one checkbox was always the wrong size. That’s because the text was too big. I now made the text smaller, so the checkbox has it’s proper size now Now, if you select the checkbox for preset theme, you can’t choose a custom color any more. You also can’t select a preset theme, if the checkbox for custom color is checked"}, {"post_id": 20991, "ts": "2026-07-02T18:49:36Z", "hours": 0.2781, "text": "I think the website is actually ready for the python script now."}, {"post_id": 20024, "ts": "2026-07-01T14:59:46Z", "hours": 0.4256, "text": "I tried to fix the issue with the about div, so it doesn’t move. Wasn’t successful again."}, {"post_id": 19270, "ts": "2026-06-30T15:12:26Z", "hours": 1.1172, "text": "I spent the whole fucking time trying to tell this stupid piece of shit to not fucking move. It did ignore me of course all the time. Whatever, I don’t want this anymore."}, {"post_id": 19108, "ts": "2026-06-30T10:44:59Z", "hours": 0.7, "text": "Just fixed some pretty stupid design bugs"}, {"post_id": 18389, "ts": "2026-06-29T15:02:42Z", "hours": 1.505, "text": "I added a new menu design, so the menu hovers open now."}, {"post_id": 17767, "ts": "2026-06-28T18:15:35Z", "hours": 0.3, "text": "I now added the functinality for the start dashboard button"}, {"post_id": 17032, "ts": "2026-06-27T17:19:42Z", "hours": 2.6183, "text": "I now started with the actual python dashboard, i am not happy with the design yet and half of the functions don’t work right now, but i think it’s a pretty nice start"}, {"post_id": 16430, "ts": "2026-06-26T18:48:31Z", "hours": 1.7358, "text": "Now, you can’t just get the .env file anymore. I also added the function, that if one person connects her google account, not everyone can see his appointments and everything."}, {"post_id": 15219, "ts": "2026-06-24T18:43:27Z", "hours": 1.1431, "text": "I fixed some bugs in the design If you open the windows for the notifications or something like that, the background, so the website gets blurry I added a favicon/logo"}, {"post_id": 14998, "ts": "2026-06-24T11:35:24Z", "hours": 0.34, "text": "I started with the notification widget, but you only have your emails yet."}, {"post_id": 14944, "ts": "2026-06-24T08:44:40Z", "hours": 0.9147, "text": "now you can also change your settings by pressing the change buttons, not only when ticking the checkboxes."}, {"post_id": 14558, "ts": "2026-06-23T18:40:11Z", "hours": 0.5456, "text": "I started adding the possibility to add stocks or crypto currencies"}, {"post_id": 14350, "ts": "2026-06-23T13:32:05Z", "hours": 0.4947, "text": "Now it finally shows everything from your google calender also in the dashboard. I had a lots of help by ai here."}, {"post_id": 13705, "ts": "2026-06-22T14:02:11Z", "hours": 0.8136, "text": "I now started adding the possibilty to add your google calender to the dashboard. thats a lot more difficult than I thought at first. I deleted half of my code now, that’s why I don’thave any screenshots right now."}, {"post_id": 13160, "ts": "2026-06-21T15:11:21Z", "hours": 1.0911, "text": "I now styled the hover and click animation for the new button styles. I also added the about me content and styled it."}, {"post_id": 11917, "ts": "2026-06-19T13:04:59Z", "hours": 0.2939, "text": "I redesigned the website, it has a different font and a different color now."}, {"post_id": 10808, "ts": "2026-06-17T18:45:09Z", "hours": 1.9222, "text": "Added a new font, but I have to look for another one, don’t really like that one yet Now if you select the countdown to date widget, there opens a window, in which you can select the date. There were some problems with the IP location, so I tried to fix them, didn’t have that much success."}, {"post_id": 10128, "ts": "2026-06-16T18:47:46Z", "hours": 1.8225, "text": "I completly redesigned the notifications, because the they are declarated as “success” so the browser styles them as “success” but i don’t want this, because this doesn’t match the design of the website. Every section like settings or home has its own html file now for more structure and less chaos Fixed some JS and CSS bugs"}, {"post_id": 9252, "ts": "2026-06-15T15:13:19Z", "hours": 1.4561, "text": "Now you can’t save your settings without filling out everything"}, {"post_id": 7613, "ts": "2026-06-12T18:42:55Z", "hours": 1.7892, "text": "Finally the settings saving works properly now. I also started writing my readme"}, {"post_id": 6986, "ts": "2026-06-11T18:43:54Z", "hours": 2.2928, "text": "I started doing some backend, so if you change the settings, they also get saved in a json file. I also added one new tab to the settings, were you can choose if you want your dashboard to have an preset theme or you can even choose your own color."}, {"post_id": 6366, "ts": "2026-06-10T18:38:50Z", "hours": 3.6539, "text": "I started adding the first settings and styling them."}, {"post_id": 5806, "ts": "2026-06-09T18:51:07Z", "hours": 0.7542, "text": "I now started with CSS, the buttons were a good start."}, {"post_id": 5607, "ts": "2026-06-09T13:56:14Z", "hours": 1.3825, "text": "I had massive problems with Git, because of the venv. Now I deleted it, everything works perfectly now. Also added css."}, {"post_id": 4901, "ts": "2026-06-08T14:02:58Z", "hours": 0.7464, "text": "Mainly fixed bugs, also added some css"}, {"post_id": 4804, "ts": "2026-06-08T09:33:43Z", "hours": 0.3194, "text": "Had some time in school, so I started adding css and javascript. Struggeled a lot with JavaScript, don‘t know much about it."}, {"post_id": 4412, "ts": "2026-06-07T18:48:49Z", "hours": 0.6278, "text": "As planned, I am coding the website by myself, so it’s a lot slow, but the structure is ready, just need some css."}, {"post_id": 2662, "ts": "2026-06-05T10:26:19Z", "hours": 0.9458, "text": "Started with the python dashboard, there will get some more information here, but its a nice start. I did that with a lot of help of AI, because I am not good yet at python, but I was able to do the debugging. I am trying do to the website by myself."}]...
|
Title: Dashboard by @TX9394 | Stardance
Devlogs:
Title: Dashboard by @TX9394 | Stardance
Devlogs:
Started with the python dashboard, there will get some more information here, but its a nice start. I did that with a lot of help of AI, because I am not good yet at python, but I was able to do the debugging. I am trying do to the website by myself.
As planned, I am coding the website by myself, so it’s a lot slow, but the structure is ready, just need some css.
Had some time in school, so I started adding css and javascript. Struggeled a lot with JavaScript, don‘t know much about it.
Mainly fixed bugs, also added some css
I had massive problems with Git, because of the venv. Now I deleted it, everything works perfectly now. Also added css.
I now started with CSS, the buttons were a good start.
I started adding the first settings and styling them.
I started doing some backend, so if you change the settings, they also get saved in a json file. I also added one new tab to the settings, were you can choose if you want your dashboard to have an preset theme or you can even choose your own color.
Finally the settings saving works properly now. I also started writing my readme
Now you can’t save your settings without filling out everything
I completly redesigned the notifications, because the they are declarated as “success” so the browser styles them as “success” but i don’t want this, because this doesn’t match the design of the website. Every section like settings or home has its own html file now for more structure and less chaos Fixed some JS and CSS bugs
Added a new font, but I have to look for another one, don’t really like that one yet Now if you select the countdown to date widget, there opens a window, in which you can select the date. There were some problems with the IP location, so I tried to fix them, didn’t have that much success.
I redesigned the website, it has a different font and a different color now.
I now styled the hover and click animation for the new button styles. I also added the about me content and styled it.
I now started adding the possibilty to add your google calender to the dashboard. thats a lot more difficult than I thought at first. I deleted half of my code now, that’s why I don’thave any screenshots right now.
Now it finally shows everything from your google calender also in the dashboard. I had a lots of help by ai here.
I started adding the possibility to add stocks or crypto currencies
now you can also change your settings by pressing the change buttons, not only when ticking the checkboxes.
I started with the notification widget, but you only have your emails yet.
I fixed some bugs in the design If you open the windows for the notifications or something like that, the background, so the website gets blurry I added a favicon/logo
Now, you can’t just get the .env file anymore. I also added the function, that if one person connects her google account, not everyone can see his appointments and everything.
I now started with the actual python dashboard, i am not happy with the design yet and half of the functions don’t work right now, but i think it’s a pretty nice start
I now added the functinality for the start dashboard button
I added a new menu design, so the menu hovers open now.
Just fixed some pretty stupid design bugs
I spent the whole fucking time trying to tell this stupid piece of shit to not fucking move. It did ignore me of course all the time. Whatever, I don’t want this anymore.
I tried to fix the issue with the about div, so it doesn’t move. Wasn’t successful again.
I think the website is actually ready for the python script now.
Devlog 29 1. Google I now created a completly new project at google claude, because somehow the website always said, the client was deleted. It still says that I don’t now what to do. I’ll just wait now, maybe it doesn’t load properly With the new google project, I added the new secret and the new google id to the .env I don’t have an .env file for the google secret and id anymore, I now use the json file by google 2. Fixing design issues Somehow, one checkbox was always the wrong size. That’s because the text was too big. I now made the text smaller, so the checkbox has it’s proper size now Now, if you select the checkbox for preset theme, you can’t choose a custom color any more. You also can’t select a preset theme, if the checkbox for custom color is checked
#Devlog 30 1. Google Now you finally can add your google account to the website That just works if you are on localhost, on server, it doesn’t work yet, don’t really now why The problem was, that I didn’t give google any authorized javascript origins, which leads to the problem, that the origin is authorized 2. API Safety Because of the new json file with my google api key and everything, the json files were accesible for anyone in internet, I did also fix that
#Devlog 31 1. Getting the website ready There was again a problem with the google services, I submitted my website now for verification. Because of some reason you weren’t able to scroll in the settings section, I fixed that 2. Python dashboard I started with the dashboard, I pretty much redesigned it, it looks different to the old version. The google services like calender or gmail don’t work yet and the color isn’t as I want it yet. But it’s a good start. I again had lots of help by AI here, because as I already wrote, my python knowledge is pretty ass.
Devlog 32 Dashboard Design If you choose a custom color now, not just the text and the lines have that color, but the whole website. It was pretty complicated to be sure, that the contrast is neither at really light nor at really dark color ass.
Devlog 33 1. Google On the Python dashboard, neither your google calender nor your notifications are shown proberly. I still have to fix this I tried verifying my app with google, so it’s public and anyone can use it and I don’t have to declare you as test user for you to be able to use the website and show your notifications and stuff 2. Dashboard Design The edges of the python dashboard are curved now The dashboard also works now with really dark of really light color and the contrast isn’t shit anymore
Devlog 34 1. Google Google still wasn’t able to verify my app, so it’s still just avaible to specific test users The calender/notification date is also not shown properly yet, there is some problem with the json file, I still wasn’t able to fix this 2. Python dashboard The corners of the dashboard widgets are somehow not as curved as I want them to be, and the resolution is also trash some how
Devlog 35 1. Dashboard design The curved edges didn’t want to work propably, so I made them not curved again Fixed some color issues, because at some specific color like dark red the contrast was trash 2. Widgets The weather widget works again now, that was just a small fx I am currently having a lot of trouble with the calender widget, because I always wondered why the appointments aren’t shown probably on the dashboard. Now I found out why: Because I am saving the google account exactly nowhere, wo the python dashboard doesn’t have access to the account information. I don’t know yet, how I want to save an entire google account in a json file, but I am sure I’ll find I way to do it (hopefully)
Devlog 36 That’s a problem right now, because I did exactly nothing. I added the function, that your google account that you added, is saved in the json file. But because of some stupid reason, the website didn’t find the json file anymore as soon as the google account was connected. I tried every humanly possible ways to fix that, I didn’t have any success. Then I asked Claude Code, who also didn’t know what to do, it didn’t work. I now deleted all of the changes and brought it back to the last commit on github were everything still works. Next step is to find a solution, so the google account gets saved in the json file, so the dashboard can show your calender entries and stuff. I know it’s not a good idea to log this time right now, but I didn’t find a way to “delete” time, and I also just don’t want to start this project over again.
Devlog 37 I didn’t do much, I just added some functions which got lost by my project reset. Somehow, the buttons on the website didn’t work also, so I fixed that.
Devlog 38 I used the whole time to get the python dashboard on the website. Streamlit helped a lot and now I finally have a version which works (sometimes). There are still some errors with API keys and the settings being transferred correctly on the website....
|
1792684441.2655637
|
1793289241.2655637
|
|
8245
|
BetterQR by @Dragon | Stardance
|
Dragon
|
1
|
65.93
|
1000
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T15:07:34Z", "hours": 64.0, "multiplier": 15.59, "payout": 1000, "blessing": "neutral", "text": "(check the bottom of the ship msg before voting pls) BetterQR v2.0.0 Release Hey Everyone! I am super excited to announce BetterQR v2.0.0 . This release brings a ton of cool new stuff and makes BetterQR even better for your projects. What’s New & Awesome: Micro QR Codes! 🎉 Now you can generate tiny, super-efficient Micro QR codes (M1-M4) for when space is tight. Perfect for small labels or embedded projects. PDF & EPS Output: Need high-quality QR codes for print? You can now export your QR codes as professional PDF and EPS files! Structured Append: Got a huge message? Split it across up to 16 linked QR codes that can be scanned one after another to get the full data. Super powerful for big data! Faster Than Ever: We’ve made PNG generation about 40% faster ! Your QR codes will render quicker, leaving you more time for hacking. Rock-Solid Reliability: We’ve fixed some tricky bugs that could cause QR codes to break, especially for really big ones. Plus, our testing is way better now, so everything is super stable. Better International Support: New Kanji mode and UTF-8 declarations for global projects. Why this matters for your projects: BetterQR v2.0.0 means you can create more advanced, more reliable, and more visually stunning QR codes for whatever you’re building. Whether it’s a game, a website, or a physical project, BetterQR has your back. Get the Update! It’s easy to upgrade: pip install betterqr --upgrade Information for the voters The Logo isn’t AI generated. This was made fully in Canva. No, This is not a vibecoded project. There are some big devlogs that are around ~9h, I wasn’t able to devlog them as where I live there were serveral power outages, making me not able to use the internet and not to devlog them. This has been tested by more than 100 people now. Was only tested on Windows unfortunately. The “zero qr dependencies” mean there are no dependencies that generate the QR code. The generation logic is fully made by me. Pillow is used for PNG outputs and other small export options. The landing page is half-ai.", "repo": "https://github.com/DevX-Dragon/betterqr", "demo": "https://github.com/DevX-Dragon/betterqr/releases/tag/v2.0.0"}]...
|
[{"post_id": 30235, "ts": "202 [{"post_id": 30235, "ts": "2026-07-17T17:32:38Z", "hours": 1.9294, "text": "Fixing Changes Got a review saying the readme is too Ai. So I just wrote a readme from scratch. Cut down the Ai stuff and followed the guide and made this. Also changed the project banner to the terminal preview command cause the reviewer said so."}, {"post_id": 29531, "ts": "2026-07-16T14:56:39Z", "hours": 2.3836, "text": "Final Devlog of v2.0.0 (hopefully) This is the final devlog that I’ll be posting for v2.0.0 of betterqr. Hopefully you guys will give me some more ideas and features for a future version. What I did. Repository Cleanup Did a clean full push to the /src and have no uncommited changes. Pushed the webiste thats going be hosted on Github Pages. Ran some tests. Merged the feat/v2.0.0 into main branch. PyPi Configs Changes some paths in links to adjust with the branch merge. Modified some automations. Docs Cooked up a release log. Did some changes to the README.md and DOCUMENTATION.md Whats Next? This what I have been working for around 50 hours. Lets See what happens. Im plannning to maintain this as much as I can."}, {"post_id": 28300, "ts": "2026-07-14T13:49:36Z", "hours": 5.1056, "text": "Grinding I forgot to devlog so this will be a big one lol. Im currently doing exams so I dont really have alot of time to think through new stuff. I mostly did some bug fixes , optimisation and working on the landing page. Bug Fixes Fixed some bugs related to the PDF output where sometime QR codes overlap and make an error. Fixed some bugs related to the command line. The frame generation does not work. Im actively working on it but Im not able to fix it yet. Optimisation Have been cutting down extra generation time with unnecssary checks. Have imporved alot in the generation time. This took the longest. Docs Edited the documentation.md with the new data. Edited the readme.md with new stuff. Working on a landing page for BetterQR. I also researched a little bit and asked for peoples opinion on this. Selected around 20 people to test this and give their honest review. Most feedbacks were great. Some requested for features and some found bugs."}, {"post_id": 27127, "ts": "2026-07-12T12:17:36Z", "hours": 3.2736, "text": "Session 5 More Benchmarking I have benchmarked more and repeatedly to get the accurate data. I used automated and manual tests. I found some people online who were down to help me benchmark it. For now the data isnt fully presentable. Will include in the next devlog or in the readme itself. New Brand I have decided on updating our logo. I designed a logo on Canva. I’ll probably use it as the official logo. I went for the purplish theme cause why not. The logo has a futuristic vibe to it ig. Better Landing Pages. Im currently working on a landing page for betterQR. The old one is fine but I didnt update it accordingly. So Im going to make a entirely new one. I have been looking for some inspo as well. Bug Fixing Did some little bug fixes and code cleanup"}, {"post_id": 26102, "ts": "2026-07-10T18:06:05Z", "hours": 2.0942, "text": "The tables does not work on the stardance devlogs, idk why look at the attached image for the formatted table Benchmarking This session focuses on benchmarking BetterQR with other popular libraries like segno and qrcode . How it Compares This is a rough comparison between BetterQR , qrcode , and segno . Feature BetterQR qrcode segno Micro QR ✅ M1–M4 ❌ ✅ Kanji Mode ✅ ❌ ✅ Structured Append ✅ ❌ ✅ Logo Embedding ✅ Built-in ❌ (Manual PIL) ❌ (Manual) Module Shapes ✅ 8 Shapes ⚠️ Limited ❌ Gradients ✅ ❌ ❌ Animated GIF ✅ 10 Effects ❌ ❌ Frames & Labels ✅ Built-in ❌ ❌ Structured Data Helpers (WiFi, vCard, …) ✅ ❌ ⚠️ Via plugin BetterQR ’s primary aim is not to aggressively beat other libraries, but to provide a highly capable, reliable, and user-friendly alternative packed with creative options out of the box. Performance Metrics Payload Performance Benchmarks (2.0.0-rc) All times are in milliseconds (ms). Lower is better. | Payload Category | Size / Type | BetterQR | Segno | Standard qrcode | BetterQR Status | | :— | :— | :—: | :—: | :—: | :— | | URL | Tiny / Short | 6.88 | 7.19 | 5.90 | 🟢 Beats Segno / Competitive | | Medium | Standard | 22.44 | 21.89 | 20.03 | 🟡 Ties Segno (~2.5% diff) | | Large | V40 / Dense | 106.63 | 98.94 | 98.96 | 🔴 Behind by ~8% | | Very Large | Max Capacity | 209.00 | 197.00 | 204.00 | 🟡 Highly Competitive (~6% diff) | | SVG (Large) | Vector | 86.63 | ~0.56 | — | 🟡 Meaningful fix (was 104.66) | | SVG (Very Large) | Vector | 174.19 | ~1.50 | — | 🟡 Meaningful fix (was 211.84) | Known Limitations / Project Honesty To build clear engineering trust, here are the current structural limitations of BetterQR compared to older ecosystem veterans: Dependency Overhead: Depends heavily on Pillow for its extensive visual layouts and shapes, unlike segno , which is zero-dependency. Large Matrix Vectorization: Pure PNG generation lags behind by ~6-8% on maximum matrix dimensions (like V40) due to mask scoring loops running entirely in pure Python. Vector Vectorization Limits: While our SVG generation times dropped significantly in the latest release, pure string-building layout engines like segno still massively outperform us on massive vector layouts. Format Boundaries: The legacy EPS writer does not support logo embedding. Spec Edge Cases: Kanji mode and Structured Append are fully validated for standard QR codes, but are not yet implemented for Micro QR variants. rMQR (Rectangular Micro QR) is currently unsupported."}, {"post_id": 25388, "ts": "2026-07-09T17:29:11Z", "hours": 2.5597, "text": "SES-3 This session focuses on bug fixing , CI/CD improvement and some research about new features. New Features Research I realized for the past 2 weeks I have not implemented new features, and only fixed bugs and did improvements. I researched a little and looked into other QR libraries and looked for the stuff that the other libraries lack. I decided on some new features like Kanji Mode, there are few but I wont mention them here. (research time isnt logged cause I forgot but it was like an hour) Bug Fixing Did some bug fixing with the logo embedding QR code again. Its the only QR code type that fails the most. This time I guarantee it wont fail again. CI/CD Improvements Finally I realized for my test workflows I use pyzbar which is a qr code decoding library. But it does not support microqr decoding. So I had to switch to another libray called zxingcpp which does support what pyzbar has with microqr decoding support as well. I took some help from some people online regarding the tests and they help me make some test scripts. I broke down the main test script into smaller parts so Its easier for me and the readers. Conclusion Thats it for this session. Its like 95% completed for shipping and logged 50 hours as well. Just some final new features (mentioned above) and some documentation work and It v2 will be released. Thank you for reading the entire thing. I hope you’ll like it and find BetterQR useful. New features / suggestions / complaints are accepted in the replies via a DM on slack. I need some honest feedback."}, {"post_id": 24825, "ts": "2026-07-08T17:11:15Z", "hours": 1.1514, "text": "Bug Patching (SES-2.1) This will be my last patch of the day. Bug Styled Micro QR codes render wrong: Both the PNG and SVG renderers assume the standard 3-finder layout when deciding what counts as a “finder square” (for shape/color overrides). Micro QR only has one finder (top-left), so modules near the top-right and bottom-left corners get incorrectly forced into squares / finder-color under custom styling. This isnt fully fixed, Im having some hard time figuring out whats the main core issue. It is somewhat fixed."}, {"post_id": 24778, "ts": "2026-07-08T15:58:08Z", "hours": 4.5525, "text": "Bug Patching (SES-1) Ran more tests and got feedback from ~15 people. Made them test the commands and try to find bugs. There were many bugs people were available to find. This is session focuses on fixing some of them Bugs that were fixed Micro QR silently corrupts data near capacity limits: In encoder.py , the capacity check treats every Micro QR data codeword as a full 8 bits — but for M1 and M3 symbols, the last data codeword is only a 4-bit nibble per spec. The checker accepts data that’s 4 bits too big, and the extra bits get silently truncated at render time. .logo() crashes every time: core.py builds a logo_info dict with a key \"padding\" , but matrix.py leads logo_info[\"padding_px\"] , instant KeyError the moment anyone calls .logo(...). Terminal --terminal-style compact output has padding bugs asymmetric left/right padding and a stray extra row, so piping it anywhere that cares about exact dimensions breaks. There are some more bugs that will be fixed in the next session."}, {"post_id": 23583, "ts": "2026-07-06T16:56:25Z", "hours": 9.6575, "text": "Mega Lock-In The 9 hours was logged in span of the last week. Didn`t get to devlog due to internet outage here in Sri Lanka. Bugs Fixed in core.py _hex_to_rgb 3-char hex crash :#000, #FFF, #F00 etc. caused invalid literal for int() with base 16: '' . Added expansion of 3-char to 6-char before parsing .logo() crash: 'QR' object has no attribute '_version_size'``logo() tried to compute size_px = int(self._version_size * ratio) but _version_size doesn’t exist on the QR object at call time (the matrix hasn’t been built yet). Fixed to compute size_px lazily inside _get_logo_info() from module_count × box_size × ratio. logo(border=True) crash: invalid literal for int() with base 16: 'Tr' The _logo_border attribute stores a bool, but was passed directly as border_color to embed_image() which called _hex_to_rgb(True) → _hex_to_rgb(\"True\") → crash. Fixed to pass \"#000000\" if self._logo_border else None. image_ops.py + animation.py — _hex_to_rgb None guard Added if not c: return (0, 0, 0) guard so passing None as a color never crashes. The _color() validator didn’t strip surrounding shell-added quotes from color strings like “#FF0000”, causing # to be split off the hex digits. Fixed to strip \" and ' before processing. Changes Corrected Micro QR capacity table (all 8 version/ECC combos with accurate numeric/alpha/byte limits) Fixed logo() parameter docs (border is bool, not int)- Fixed double ```bash` in installation section Corrected SMS encoding protocol note (sms: not smsto:) Docs Added a more detailed info about MicroQR codes to README.md and DOCUMENTATION.md - Made a landing site with help of Claude."}, {"post_id": 17661, "ts": "2026-06-28T15:25:06Z", "hours": 5.1989, "text": "Locking in Bug hunting has started. I have been looking for any bugs in the hidden corners and have found many of them. Like the embedded logo QR codes throw an error , microQR m4 type just crashes everything,etc. I also have used the library in actual code to test as well. Landing Page Used my front-end skills to to the best and locked in and designed a good looking website for BetterQR. Looks fine for now. Will do some changes later. Made it a single page website cause easier load for Github Pages. (v2 is not out, expect it earlier this week)"}, {"post_id": 16341, "ts": "2026-06-26T16:14:36Z", "hours": 1.6294, "text": "Prepping for shipping I initially planned to release this today, but realized something. The embedded logo thing and microqr is now failing on me. and Im lazy to fix this now so I’ll be fixingit tomorrow. Making a website So I thought why not make a website. So Im have been working on a small landing website with vanilla html and probably host it on GitHub Pages as well."}, {"post_id": 15743, "ts": "2026-06-25T16:49:22Z", "hours": 2.0969, "text": "Prepping to ship Doing stuff related to publishing the new version. Im noy going to be going in details cause Im at school"}, {"post_id": 13715, "ts": "2026-06-22T14:13:14Z", "hours": 2.4611, "text": "Fixing failed tests I have ran multiple CI/CD tests and have noted that most animations and data type qr codes fail. I think its mostly from wrong placements. CLI Redirect : Redirect data -> output when a helper flag is active. SMS Protocol : Use sms: not smsto: . _write_format_info function bugs The _write_format_info function as two major bugs. Top-Right : uses bit_idx=i in write_bit (which applies 14-i ) but should write ( fmt >> i ) & 1 (vbit). The bit indices are swapped. Bottom Left : Only writes 7 rows (missing row size-8 ) ad uses wrong bit indices. These are only like 1/4 of the bugs. These were the easiest to document so listed them here."}, {"post_id": 13175, "ts": "2026-06-21T15:42:56Z", "hours": 1.8564, "text": "Testing and Fixing After running the new CI/CD Tests most pass but some fail. I traced back the issues and fixed half of them. Some issues I found 1, Micro QR auto-version: _min_version doesn’t enforce mode compatibility (M1=numeric only, M2=no byte, etc.) and uses wrong mode-indicator bit count in the needed formula. 2. WiFi/Geo/SMS/Phone/Email/VCard: The helper objects need to be passed as str() to QR() — the test is likely calling them directly. The __str__ methods need to produce correct strings, and some may have format issues. 3. Animations: GIF decode — need to verify each frame. 4. small_border: border=1 means only 4px quiet zone which may confuse decoders. (i have been fixing them but not produce a result yet)"}, {"post_id": 12592, "ts": "2026-06-20T15:49:34Z", "hours": 1.1111, "text": "CI/CD Writing the test scripts from scratch cause the last CI/CD pipelines are kind of glitched. Used claude a little this time to structure it. More Debugging Trying to fix some bugs, scrolling through stack overlay rn (yes stack overflow and not ai, IM NOT A BOOMER trust)"}, {"post_id": 12544, "ts": "2026-06-20T14:27:13Z", "hours": 1.3228, "text": "Fixing time I have identified all of the bugs (hopefully) and marked everything that has to be fixed. Fixed Stuff Current bit-stream builder in build_matrix writes all bits including the full 8-bit last data CW, then starts ECC. For M1/M3, the correct order is: 10 data CW (80 bits) + 4-bit partial + 6 ECC CW (48 bits). The current code writes all 17 CW as bits sequentially which gives the WRONG bit order.So I fixed the bit placement in build_matrix for M1/M3 fixed encode_data to use zero padding for Micro QR and handle the M1/M3 last-4-bit rule. Need to be fixed I need to fix _apply_mask to use Micro QR mask conditions (indices 1,4,6,7 of standard) for micro QR, and add a separate _MICRO_MASK_CONDITIONS list. Need to fix the _min_version capacity checker, which has the same wrong cc_bits values"}, {"post_id": 11994, "ts": "2026-06-19T15:54:15Z", "hours": 2.2208, "text": "Debugging 2 Finding errors in tables.py As my last devlog I identified that there is some errors in matrix and table files. I started looking through the table data and found some errors. bs.append(mode, 4) — always writes a 4-bit mode indicator. But for Micro QR, mode indicators are 1–4 bits depending on the version, not always 4 bits The _data_placement_order function skips col 6 (standard QR timing column). For Micro QR, col 0 is the timing column that should be skipped. But since col 0 and row 0 are already marked as reserved via timing pattern placement, the i f not reserved[row][c] check already handles it. The col == 6 skip is only needed because in standard QR col 6 is a function column that isn’t individually reserved — but since we now properly reserve col 0 for Micro QR, it’s already handled. The issue is the function always skips col 6, which in Micro QR is a valid data column. The Micro QR format info table has duplicate dict keys, so versions M1-M3 silently get clobbered by M4’s values. I’m still going through the code to find the errors first, Then I’ll start to fix them one-by-one cause I’m tired of fixing one and get another 2 bugs out of nowhere."}, {"post_id": 11318, "ts": "2026-06-18T14:58:53Z", "hours": 0.8781, "text": "Debugging After introducing CI/CD Integrations and Test Scripts I have noticed all the generated QR codes fail or unreadable. Im currently tracking the issue behind this. And the main assumption is to something with the src/matrix.py or src/tables.py cause thats the main logic behind the validity. So im curretly digging through the code to find the bugs. I have fixed some of them but when i fix one bug two bug appears. 😭"}, {"post_id": 10678, "ts": "2026-06-17T15:17:02Z", "hours": 2.5147, "text": "Alot of progress today CI/CD Intergration. Implemented few tests that gets triggered during a push / pull request that tests if the generated QR codes are valid and working as intented. Results are sent to a private discord server via a webhook. ISO Complying Working on making the generated QR Codes fully compliant with the ISO Standards. (attached is a fail qr code LOL)"}, {"post_id": 9264, "ts": "2026-06-15T15:38:08Z", "hours": 1.4681, "text": "Made some main changes and reorganization. Made a separate file for all the helper classes Secure algorithm for sensitive data. Researched some more stuff"}, {"post_id": 9211, "ts": "2026-06-15T13:52:01Z", "hours": 2.0236, "text": "Working for the V2.0.0 I have successfully released the first version of it. So I have been working on adding some more features for the next version. MicroQR Support This is one of the most requested feature here. It is little tricky to make it work. But most logic for this has been programmed. SVG Optimization Drastically reduced SVG file size by merging modules into a single element. Security Added HMAC-SHA256 signing and bitwise XOR obfuscation to protect sensitive QR data. Safety Automatically detects low contrast between foreground and background. Includes auto_fix_contrast to force scannable colors."}, {"post_id": 7488, "ts": "2026-06-12T14:29:27Z", "hours": 2.3697, "text": "First Beta Release I did my first beta release to PyPI and tested out. It worked pretty well. Got some suggestions from Reddit as well. Writing Documentation , readme.md and improving the repo structure Wrote the entire documentation , reamd.md , changelog and contribution.md to improve the repo. First public release Release the first official version with some improvements. Currently working on adding microQR codes and security warnings for Crypto qr codes"}, {"post_id": 5720, "ts": "2026-06-09T16:52:32Z", "hours": 1.3011, "text": "First version release on pypi, run pip install betterqr to install. Gotta work on the readme and website now"}, {"post_id": 4947, "ts": "2026-06-08T16:03:47Z", "hours": 3.3081, "text": "Completed the base qr engine finally after hours of coding and debugging. Now it can generate basic qr codes with texts and links."}, {"post_id": 3592, "ts": "2026-06-06T16:20:00Z", "hours": 1.4939, "text": "Currently worked on the QR code engine that generates the QR code. Also did some CLI work to make it work. Created some GH workflows as well"}, {"post_id": 2795, "ts": "2026-06-05T16:42:30Z", "hours": 0.3283, "text": "Currently writing the core for the package. I have added the basic starter classes like the Wifi QR and contact QR"}]...
|
Title: BetterQR by @Dragon | Stardance
Devlogs:
C Title: BetterQR by @Dragon | Stardance
Devlogs:
Currently writing the core for the package. I have added the basic starter classes like the Wifi QR and contact QR
Currently worked on the QR code engine that generates the QR code. Also did some CLI work to make it work. Created some GH workflows as well
Completed the base qr engine finally after hours of coding and debugging. Now it can generate basic qr codes with texts and links.
First version release on pypi, run pip install betterqr to install. Gotta work on the readme and website now
First Beta Release I did my first beta release to PyPI and tested out. It worked pretty well. Got some suggestions from Reddit as well. Writing Documentation , readme.md and improving the repo structure Wrote the entire documentation , reamd.md , changelog and contribution.md to improve the repo. First public release Release the first official version with some improvements. Currently working on adding microQR codes and security warnings for Crypto qr codes
Working for the V2.0.0 I have successfully released the first version of it. So I have been working on adding some more features for the next version. MicroQR Support This is one of the most requested feature here. It is little tricky to make it work. But most logic for this has been programmed. SVG Optimization Drastically reduced SVG file size by merging modules into a single element. Security Added HMAC-SHA256 signing and bitwise XOR obfuscation to protect sensitive QR data. Safety Automatically detects low contrast between foreground and background. Includes auto_fix_contrast to force scannable colors.
Made some main changes and reorganization. Made a separate file for all the helper classes Secure algorithm for sensitive data. Researched some more stuff
Alot of progress today CI/CD Intergration. Implemented few tests that gets triggered during a push / pull request that tests if the generated QR codes are valid and working as intented. Results are sent to a private discord server via a webhook. ISO Complying Working on making the generated QR Codes fully compliant with the ISO Standards. (attached is a fail qr code LOL)
Debugging After introducing CI/CD Integrations and Test Scripts I have noticed all the generated QR codes fail or unreadable. Im currently tracking the issue behind this. And the main assumption is to something with the src/matrix.py or src/tables.py cause thats the main logic behind the validity. So im curretly digging through the code to find the bugs. I have fixed some of them but when i fix one bug two bug appears. 😭
Debugging 2 Finding errors in tables.py As my last devlog I identified that there is some errors in matrix and table files. I started looking through the table data and found some errors. bs.append(mode, 4) — always writes a 4-bit mode indicator. But for Micro QR, mode indicators are 1–4 bits depending on the version, not always 4 bits The _data_placement_order function skips col 6 (standard QR timing column). For Micro QR, col 0 is the timing column that should be skipped. But since col 0 and row 0 are already marked as reserved via timing pattern placement, the i f not reserved[row][c] check already handles it. The col == 6 skip is only needed because in standard QR col 6 is a function column that isn’t individually reserved — but since we now properly reserve col 0 for Micro QR, it’s already handled. The issue is the function always skips col 6, which in Micro QR is a valid data column. The Micro QR format info table has duplicate dict keys, so versions M1-M3 silently get clobbered by M4’s values. I’m still going through the code to find the errors first, Then I’ll start to fix them one-by-one cause I’m tired of fixing one and get another 2 bugs out of nowhere.
Fixing time I have identified all of the bugs (hopefully) and marked everything that has to be fixed. Fixed Stuff Current bit-stream builder in build_matrix writes all bits including the full 8-bit last data CW, then starts ECC. For M1/M3, the correct order is: 10 data CW (80 bits) + 4-bit partial + 6 ECC CW (48 bits). The current code writes all 17 CW as bits sequentially which gives the WRONG bit order.So I fixed the bit placement in build_matrix for M1/M3 fixed encode_data to use zero padding for Micro QR and handle the M1/M3 last-4-bit rule. Need to be fixed I need to fix _apply_mask to use Micro QR mask conditions (indices 1,4,6,7 of standard) for micro QR, and add a separate _MICRO_MASK_CONDITIONS list. Need to fix the _min_version capacity checker, which has the same wrong cc_bits values
CI/CD Writing the test scripts from scratch cause the last CI/CD pipelines are kind of glitched. Used claude a little this time to structure it. More Debugging Trying to fix some bugs, scrolling through stack overlay rn (yes stack overflow and not ai, IM NOT A BOOMER trust)
Testing and Fixing After running the new CI/CD Tests most pass but some fail. I traced back the issues and fixed half of them. Some issues I found 1, Micro QR auto-version: _min_version doesn’t enforce mode compatibility (M1=numeric only, M2=no byte, etc.) and uses wrong mode-indicator bit count in the needed formula. 2. WiFi/Geo/SMS/Phone/Email/VCard: The helper objects need to be passed as str() to QR() — the test is likely calling them directly. The __str__ methods need to produce correct strings, and some may have format issues. 3. Animations: GIF decode — need to verify each frame. 4. small_border: border=1 means only 4px quiet zone which may confuse decoders. (i have been fixing them but not produce a result yet)
Fixing failed tests I have ran multiple CI/CD tests and have noted that most animations and data type qr codes fail. I think its mostly from wrong placements. CLI Redirect : Redirect data -> output when a helper flag is active. SMS Protocol : Use sms: not smsto: . _write_format_info function bugs The _write_format_info function as two major bugs. Top-Right : uses bit_idx=i in write_bit (which applies 14-i ) but should write ( fmt >> i ) & 1 (vbit). The bit indices are swapped. Bottom Left : Only writes 7 rows (missing row size-8 ) ad uses wrong bit indices. These are only like 1/4 of the bugs. These were the easiest to document so listed them here.
Prepping to ship Doing stuff related to publishing the new version. Im noy going to be going in details cause Im at school
Prepping for shipping I initially planned to release this today, but realized something. The embedded logo thing and microqr is now failing on me. and Im lazy to fix this now so I’ll be fixingit tomorrow. Making a website So I thought why not make a website. So Im have been working on a small landing website with vanilla html and probably host it on GitHub Pages as well.
Locking in Bug hunting has started. I have been looking for any bugs in the hidden corners and have found many of them. Like the embedded logo QR codes throw an error , microQR m4 type just crashes everything,etc. I also have used the library in actual code to test as well. Landing Page Used my front-end skills to to the best and locked in and designed a good looking website for BetterQR. Looks fine for now. Will do some changes later. Made it a single page website cause easier load for Github Pages. (v2 is not out, expect it earlier this week)
Mega Lock-In The 9 hours was logged in span of the last week. Didn`t get to devlog due to internet outage here in Sri Lanka. Bugs Fixed in core.py _hex_to_rgb 3-char hex crash :#000, #FFF, #F00 etc. caused invalid literal for int() with base 16: '' . Added expansion of 3-char to 6-char before parsing .logo() crash: 'QR' object has no attribute '_version_size'``logo() tried to compute size_px = int(self._version_size * ratio) but _version_size doesn’t exist on the QR object at call time (the matrix hasn’t been built yet). Fixed to compute size_px lazily inside _get_logo_info() from module_count × box_size × ratio. logo(border=True) crash: invalid literal for int() with base 16: 'Tr' The _logo_border attribute stores a bool, but was passed directly as border_color to embed_image() which called _hex_to_rgb(True) → _hex_to_rgb("True") → crash. Fixed to pass "#000000" if self._logo_border else None. image_ops.py + animation.py — _hex_to_rgb None guard Added if not c: return (0, 0, 0) guard so passing None as a color never crashes. The _color() validator didn’t strip surrounding shell-added quotes from color strings like “#FF0000”, causing # to be split off the hex digits. Fixed to strip " and ' before processing. Changes Corrected Micro QR capacity table (all 8 version/ECC combos with accurate numeric/alpha/byte limits) Fixed logo() parameter docs (border is bool, not int)- Fixed double ```bash` in installation section Corrected SMS encoding protocol note (sms: not smsto:) Docs Added a more detailed info about MicroQR codes to README.md and DOCUMENTATION.md - Made a landing site with help of Claude.
Bug Patching (SES-1) Ran more tests and got feedback from ~15 people. Made them test the commands and try to find bugs. There were many bugs people were available to find. This is session focuses on fixing some of them Bugs that were fixed Micro QR silently corrupts data near capacity limits: In encoder.py , the capacity check treats every Micro QR data codeword as a full 8 bits — but for M1 and M3 symbols, the last data codeword is only a 4-bit nibble per spec. The checker accepts data that’s 4 bits too big, and the extra bits get silently truncated at render time. .logo() crashes every time: core.py builds a logo_info dict with a key "padding" , but matrix.py leads logo_info["padding_px"] , instant KeyError the moment anyone calls .logo(...). Terminal --terminal-style compact output has padding bugs asymmetric left/right padding and a stray extra row, so piping it anywhere that cares about exact dimensions breaks. There are some more bugs that will be fixed in the next session.
Bug Patching (SES-2.1) This will be my last patch of the day. Bug Styled Micro QR codes render wrong: Both the PNG and SVG renderers assume the standard 3-finder layout when deciding what counts as a “finder square” (for shape/color overrides). Micro QR only has one finder (top-left), so modules near the top-right and bottom-left corners get incorrectly forced into squares / finder-color under custom styling. This isnt fully fixed, Im having some hard time figuring out whats the main core issue. It is somewhat fixed.
SES-3 This session focuses on bug fixing , CI/CD improvement and some research about new features. New Features Research I realized for the past 2 weeks I have not implemented new features, and only fixed bugs and did improvements. I researched a little and looked into other QR libraries and looked for the stuff that the other libraries lack. I decided on some new features like Kanji Mode, there are few but I wont mention them here. (research time isnt logged cause I forgot but it was like an hour) Bug Fixing Did some bug fixing with the logo embedding QR code again. Its the only QR code type that fails the most. This time I guarantee it wont fail again. CI/CD Improvements Finally I realized for my test workflows I use pyzbar which is a qr code decoding library. But it does not support microqr decoding. So I had to switch to another libray called zxingcpp which does support what pyzbar has with microqr decoding support as well. I took some help from some people online regarding the tests and they help me make some test scripts. I broke down the main test script into smaller parts so Its easier for me and the readers. Conclusion Thats it for this session. Its like 95% completed for shipping and logged 50 hours as well. Just some final new features (mentioned above) and some documentation work and It v2 will be released. Thank you for reading the entire thing. I hope you’ll like it and find BetterQR useful. New features / suggestions / complaints are accepted in the replies via a DM on slack. I need some honest feedback.
The tables does not work on the stardance devlogs, idk why look at the attached image for the formatted table Benchmarking This session focuses on benchmarking BetterQR with other popular libraries like segno and qrcode . How it Compares This is a rough comparison between BetterQR , qrcode , and segno . Feature BetterQR qrcode segno Micro QR ✅ M1–M4 ❌ ✅ Kanji Mode ✅ ❌ ✅ Structured Append ✅ ❌ ✅ Logo Embedding ✅ Built-in ❌ (Manual PIL) ❌ (Manual) Module Shapes ✅ 8 Shapes ⚠️ Limited ❌ Gradients ✅ ❌ ❌ Animated GIF ✅ 10 Effects ❌ ❌ Frames & Labels ✅ Built-in ❌ ❌ Structured Data Helpers (WiFi, vCard, …) ✅ ❌ ⚠️ Via plugin BetterQR ’s primary aim is not to aggressively beat other libraries, but to provide a highly capable, reliable, and user-friendly alternative packed with creative options out of the box. Performance Metrics Payload Performance Benchmarks (2.0.0-rc) All times are in milliseconds (ms). Lower is better. | Payload Category | Size / Type | BetterQR | Segno | Standard qrcode | BetterQR Status | | :— | :— | :—: | :—: | :—: | :— | | URL | Tiny / Short | 6.88 | 7.19 | 5.90 | 🟢 Beats Segno / Competitive | | Medium | Standard | 22.44 | 21.89 | 20.03 | 🟡 Ties Segno (~2.5% diff) | | Large | V40 / Dense | 106.63 | 98.94 | 98.96 | 🔴 Behind by ~8% | | Very Large | Max Capacity | 209.00 | 197.00 | 204.00 | 🟡 Highly Competitive (~6% diff) | | SVG (Large) | Vector | 86.63 | ~0.56 | — | 🟡 Meaningful fix (was 104.66) | | SVG (Very Large) | Vector | 174.19 | ~1.50 | — | 🟡 Meaningful fix (was 211.84) | Known Limitations / Project Honesty To build clear engineering trust, here are the current structural limitations of BetterQR compared to older ecosystem veterans: Dependency Overhead: Depends heavily on Pillow for its extensive visual layouts and shapes, unlike segno , which is zero-dependency. Large Matrix Vectorization: Pure PNG generation lags behind by ~6-8% on maximum matrix dimensions (like V40) due to mask scoring loops running entirely in pure Python. Vector Vectorization Limits: While our SVG generation times dropped significantly in the latest release, pure string-building layout engines like segno still massively outperform us on massive vector layouts. Format Boundaries: The legacy EPS writer does not support logo embedding. Spec Edge Cases: Kanji mode and Structured Append are fully validated for standard QR codes, but are not yet implemented for Micro QR variants. rMQR (Rectangular Micro QR) is currently unsupported.
Session 5 More Benchmarking I have benchmarked more and repeatedly to get the accurate data. I used automated and manual tests. I found some people online who were down to help me benchmark it. For now the data isnt fully presentable. Will include in the next devlog or in the readme itself. New Brand I have decided on updating our logo. I designed a logo on Canva. I’ll probably use it as the official logo. I went for the purplish theme cause why not. The logo has a futuristic vibe to it ig. Better Landing Pages. Im currently working on a landing page for betterQR. The old one is fine but I didnt update it accordingly. So Im going to make a entirely new one. I have been looking for some inspo as well. Bug Fixing Did some little bug fixes and code cleanup
Grinding I forgot to devlog so this will be a big one lol. Im currently doing exams so I dont really have alot of time to think through new stuff. I mostly did some bug fixes , optimisation and working on the landing page. Bug Fixes Fixed some bugs related to the PDF output where sometime QR codes overlap and make an error. Fixed some bugs related to the command line. The frame generation does not work. Im actively working on it but Im not able to fix it yet. Optimisation Have been cutting down extra generation time with unnecssary checks. Have imporved alot in the generation time. This took the longest. Docs Edited the documentation.md with the new data. Edited the readme.md with new stuff. Working on a landing page for BetterQR. I also researched a little bit and asked for peoples opinion on this. Selected around 20 people to test this and give their honest review. Most feedbacks were great. Some requested for features and some found bugs.
Final Devlog of v2.0.0 (hopefully) This is the final devlog that I’ll be posting for v2.0.0 of betterqr. Hopefully you guys will give me some more ideas and features for a future version. What I did. Repository Cleanup Did a clean full push to the /src and have no uncommited changes. Pushed the webiste thats going be hosted on Github Pages. Ran some tests. Merged the feat/v2.0.0 into main branch. PyPi Configs Changes some paths in links to adjust with the branch merge. Modified some automations. Docs Cooked up a release log. Did some changes to the README.md and DOCUMENTATION.md Whats Next? This what I have been working for around 50 hours. Lets See what happens. Im plannning to maintain this as much as I can.
Fixing Changes Got a review saying the readme is too Ai. So I just wrote a readme from scratch. Cut down the Ai stuff and followed the guide and made this. Also changed the project banner to the terminal preview command cause the reviewer said so.
Ships:
(check the bottom of the ship msg before voting pls) BetterQR v2.0.0 Release Hey Everyone! I am super excited to announce BetterQR v2.0.0 . This release brings a ton of cool new stuff and makes BetterQR even better for your projects. What’s New & Awesome: Micro QR Codes! 🎉 Now you can generate tiny, super-efficient Micro QR codes (M1-M4) for when space is tight. Perfect for small labels or embedded projects. PDF & EPS Output: Need high-quality QR codes for print? You can now export your QR codes as professional PDF and EPS files! Structured Append: Got a huge message? Split it across up to 16 linked QR codes that can be scanned one after another to get the full data. Super powerful for big data! Faster Than Ever: We’ve made PNG generation about 40% faster ! Your QR codes will render quicker, leaving you more time for hacking. Rock-Solid Reliability: We’ve fixed some tricky bugs that could cause QR codes to break, especially for really big ones. Plus, our testing is way better now, so everything is super stable. Better International Support: New Kanji mode and UTF-8 declarations for global projects. Why this matters for your projects: BetterQR v2.0.0 means you can create more advanced, more reliable, and more visually stunning QR codes for whatever you’re building. Whether it’s a game, a website, or a physical project, BetterQR has your back. Get the Update! It’s easy to upgrade: pip install betterqr --upgrade Information for the voters The Logo isn’t AI generated. This was made fully in Canva. No, This is not a vibecoded project. There are some big devlogs that are around ~9h, I wasn’t able to devlog them as where I live there were serveral power outages, making me not able to use the internet and not to devlog them. This has been tested by more than 100 people now. Was only tested on Windows unfortunately. The “zero qr dependencies” mean there are no dependencies that generate the QR code. The generation logic is fully made by me. Pillow is used for PNG outputs and other small export options. The landing page is half-ai....
|
1792882136.3204722
|
1793746136.3204722
|
|
30695
|
DraftONE by @saharshn | Stardance
|
saharshn
|
0
|
65.66
|
0
|
[]
|
[{"post_id": 80263, "ts": "202 [{"post_id": 80263, "ts": "2026-10-17T00:19:00Z", "hours": 3.9808, "text": "Devlog 15: ALMOST THERE WOOOO made final assembly! made a cool render! Started BOM! so my goal is to get this out by the 20th or 21st, and this is becoming slowly more in reach! cant wait to cross this final stretch!"}, {"post_id": 64495, "ts": "2026-09-08T22:40:40Z", "hours": 17.5486, "text": "Devlog #14: Introducing VKTR so as you can see i did forget to devlog its alr tho i got some INSANE changes watch out Introducing VKTR: it is probably one of the coolest toolheads I have made. Packaging and form factor inspired by the A4T, and front plate styling inspired by the Stealthburner. Utilizes a Wristwatch v3 BMG extruder, and a Bambu Labs P1s Hotend for cost purposes. has two 4010 Blower fans for part cooling, 2510 Intake fan, and 3007 Exhaust fan. The name is inspired by the vectoring i had to use for my ducting but somehow i accidentally put a K instead of a C but didnt notice??? still sounds cool asf tho The entire gantry is reworked to make this voron-compatible and to make this workable with voron toolheads. this allows me to not only use the toolheads I make, but rather the ones anyone in the voron community makes to work on this new V2 Frame with V2 Bed! 220 220 195 total volume, and now its considerable more stable and cleaner looking (with extra space for rgb!!!) as of right now, the entire motion system should be done!!! time for enclosure and elec spacing, and we can actually build this!!!"}, {"post_id": 46114, "ts": "2026-08-13T03:28:20Z", "hours": 4.7422, "text": "Devlog #13: Restructuring I realized I’ve gone about this a completely wrong way. I’ve been overcomplicating this gantry wayy too much, and ended up making this so much more complicated and a LOT weaker than it could be. As a result, I am re-doing the whole CoreXY Motion system!!! So what I have accomplished: all new gantry based off of lie-flat Y rails and Voron-based CoreXY rigging (belt plate sandwich between toolhead and carriage) moved toolhead to be facing forward instead of backward, frees up alot of space but makes hot-swapping toolheads alot harder so I might have to temporarily drop it. made these cool asl idler blocks that look so aura dropped rail profile by ~29.3mm vertically made a lot stronger due to aluminum plate sandwich zero cantilever design"}, {"post_id": 45159, "ts": "2026-08-11T13:58:09Z", "hours": 8.2933, "text": "Devlog #12: Frame(work) -so main thing is that ive been out of town for some time so im lwk just doing work whenever possible, so this is what im doing: motion-wise, the frame is almost done!!! its crazy how close i’m getting to being finished!!! midway through re-doing Z axis from linear rods to rails, mainly just due to ease of use. finished coreXY idler box! essentially this is just what holds 4 idlers and a single tensioned Nema17 motor for coreXY motion had to drop build size to 235 235 180mm due to issues with linear rails im buying i forgot if this was mentioned before but Z leadscrews!!! ok ill prob write more once i get back but yeah thats maily what ive done"}, {"post_id": 41106, "ts": "2026-08-05T02:56:44Z", "hours": 4.5347, "text": "Devlog #11: ANOTHER new toolhead??? overall a very productive devlog!!! so what I worked on: Introducing the DoubleDecker Toolhead, a larger, all-in-one toolhead with a direct drive extruder and bi-directional cooling done via double part cooling fans. Despite the many added features, it weiths around 240 grams, which is significantly less than the Voron Stealthburner (a reference for this toolhead). Alongside that, it uses an entirely surface-modeled duct, based off of multiple Computational Fluid Dynamics simulations. modified the sailfin even more to better suit my needs (better mounting solution, smaller packaging) and now fits very well into my packaging ik i said it alr but: the duct!!! it took me like 1-2 hours of surface modelling to get the geometries just right, but its definitely paid off (looks tuff asl, works well) ok so thats p much it for my devlog, heres my bucket list: more gantry work frame (swap 3dp for extrusion??? more corexy rigging work ok byeee"}, {"post_id": 40534, "ts": "2026-08-04T04:07:19Z", "hours": 4.3267, "text": "Devlog # 10: Packaging Headache so what i actually achieved: modified sailfin extruder with side mount for bowden setup i tried to make a direct drive toolhead (again smh) but this time actually compact and an all-rounder. The main limitation for me was the fact that the sailfin mounting holes just aren’t meant for a toolhead this small. one cool thing about this toolhead is that despite the extra direct drive extruder, its still very light, sitting at around 180 grams total. heavier than my previous sub-90 toolheads but this should be better consistency-wise and work very well with filaments like TPU and TPA. more gantry and frame work!!! in the next devlog, i’m gonna be reworking the mounting of the sailfin toolhead to fit into this better, but I’d say that this actually was a pretty locked in session."}, {"post_id": 38600, "ts": "2026-08-01T02:35:00Z", "hours": 3.1839, "text": "Devlog #9: Triple it and give it to the next person WOW. This is genuinely one of the best checkpoints im at. i did not expect to be able to get here lol so what i did: TWO new hotends!!! bolt-on hotend and carriage: essentially a carriage that ditches the heavy servo and toolchanger for a more secure screw-on changer. This means you’ll be able to push feeds and speeds higher on this, and is especially useful if you’re doing single material prints. Lightspeed hotend (get it? its light and its fast lol): if your chasing true performance this genuinely might be your best bet. it ditches the large eddy probe for a sub-90 gram carriage, meaning you’ll be able to push this to the limit. Also, the Center of Gravity is a lot closer to the gantry meaning more control. Updated gantry: so I fixed the main issue with the gantry, being pulleys in the center. If theyre in the center, it ends up being very weird belt geometry wise due to how CoreXY is rigged, and as a result, had to make the gentry idlers side-agonistic, meaning the belt path will stay perfectly parallel to the gantry. updated clamp plates: these clamp plates ACTUALLY WORK!!! ikr ts so cool"}, {"post_id": 38019, "ts": "2026-07-31T05:00:32Z", "hours": 4.3781, "text": "Devlog #8: A Big Mis-step stuff i worked on that actually works: the coreXY idler rigging for the gantry is done! looks nice basic frame packaging work done, planning out space for extruders, docking station, electronics, and coreXY hardware. so i realized wayyyy too late that for coreXY rigging i need to have the belt run parallel to the x axis 😭 i thought i could get away with angled belts but sadly i do have to redo the carriage clamps for belting also I thought up of a newer and better system to add more modularity: the actual modular system is a set of 4 corner holes you can add any tool system you want after that, meaning if your chasing performance you can do a single fixed hotend, of if you need the extra ability multicolor adds you can install the toolchanging and docking system. as a result this means im going to have to install the probe on my toolhead but it isnt too big of a deal. so yeah thats pretty much it for today!!!"}, {"post_id": 37269, "ts": "2026-07-29T20:59:06Z", "hours": 3.1169, "text": "Devlog #7: Unpowered Gantry and a smaller toolhead so so far, all I’ve done is shorten the toolhead, and made a gantry structure wise. One main thing I need to do later is actually add corexy hardware but trust we’re getting there. Alongside the gantry work, i shortened the toolhead by approx ~20mm and brought it significantly closer to the carriage to reduce the amount of forces on it as a result of it being so far. for both of these i do need to work on adding the coreXY rigging, but thats something i can work on later so im not too worried about it."}, {"post_id": 36577, "ts": "2026-07-28T19:46:25Z", "hours": 2.2803, "text": "Devlog #6: what is a toolhead so basically although this is somewhat of a smaller devlog time-wise, i got my whole toolhead plus swapping mechanism done!!! so how it works: there is a SWYFT Micro servo in the actual carriage with a servo arm that latches onto the toolhead 3 low profile socket head cap screws act as pins to prevent any angular movements (one in each corner for 3/4 corners) some cool nerd tech specs: toolhead projected to be approx ~ 90 g, lighter than most vorons uses BIQU Eddy Probe for quick Z-probing overall carriage weight projected to be under 140g so yeah cant wait to do more!!! see yall next one"}, {"post_id": 36196, "ts": "2026-07-28T03:59:32Z", "hours": 2.5631, "text": "Devlog #5: An actually Productive Devlog??? So i re-did the whole extruder assemble and it looks so nice now!!! probably the smallest its gonna be has a blower fan for cooling the print layer (just like many modern bambus/vorons) WITH DUCTING!!! not pictured: mounting hardware in the back onto aura carriage Bowden Pneumatic Push-to-connect M6 Fittings so basically i re-did this to be as small and lightweight as possible, and as a result i got it to look SUPER cool, and looks so nice and almost like an actually good printer!!! On the latch/toolchange mechanism: this has gone past multiple modifications over the past hour. Initially, I thought it would be best to have a whole hub that uses clips to latch onto the carriage, but i ended up settling with just using a single servo arm to hold the latching and adding stability screws so it should (keyword: should) be precise enough to not add any slop. ok first nice productive devlog in some time, time to get some rest!!!"}, {"post_id": 35900, "ts": "2026-07-27T17:01:56Z", "hours": 1.7203, "text": "DEVLOG #4: Am I going the wrong way??? So I spent some time today working on a toolhead, but realized I might be doing this wrong. This is originally for a stock hotend setup that is larger so that it ends up being the same size as a larger direct drive hotend for more sensitive filaments such as TPU. But i realized, i might just be thinking about this the wrong way… Instead of making a direct drive extruder thats larger and heavier, what if I just use a bowden extruder (like all my other extruders on this printer) thats a lot more sensitive and conservative performance wise for TPU instead of a direct drive extruder. Alongside this, I cant just use a standard extruder because it would end up causing the TPU to bind, meaning I’m going to have to design a custom spring loaded extruder. I might also use the same extruders for my other extruders due to how much better a spring loaded extruder is compared to a fixed extruder, despite the added complexity."}, {"post_id": 35574, "ts": "2026-07-27T03:24:43Z", "hours": 1.1281, "text": "after a break, I decided it’d be better for me to just let go of the double hotend idea. the main thing is that it just overcomplicates the idea wayyyy too much and ends up just being worse: the main ideology behind the double hotend tool was so that I can print supports with a larger .8mm nozzle, speeding up print times due to higher flow and taller layer heights. what I didnt realize was that if I did do this, it would be extremely messy with dual nozzles as theres a high chance the secondary nozzle would just hit the newly printed layers on a large enough part. Also, I wouldnt be able to take the taller layers to my advantage due to the fact that theres a .4mm nozzle that physically cant do those tall layer heights and it ends up becoming too messy, pretty much just handicapping the performance of the .8mm nozzle The new idea: just have a seperate high flow toolhead with a .8mm nozzle thats just as light as a single toolhead, which can take advantage of the higher print speed and the taller layer heights To replace the double hotend tool, I came up with the idea for another toolhead: so basically my current toolheads use a bowden tube extruder, which essentially is having the actual extruder part of the toolhead somewhere on the printer frame, and it feeds filament from there into the hotend. It saves alot of weight, but ends up being worse for some filaments (like TPU) which bind very easily and cause issues with a bowden setup (which is why tpu doesnt work well on the AMS!). The idea is having a heavier toolhead which has the main purpose of using a Direct Drive extrusion setup, using a Nema17 Stepper sitting on the actual toolhead, and unlike the bowden setup that “pushes” filament and causes binding, this “pulls” in filament and reduces binding risk. the extra weight means I wont be able to print as fast, but means that it’d be compatible with filaments sensitive to binding up such as TPU. ik this is a yap session, sorry to the reviewers that have to read this in advance!!! I have also attached my base level airflow diagram for the single nozzle setup because you guys deserve more data :) The extra space for the outtake fan also acts as a ledge to mount the Nema17 Stepper motor for the direct drive toolhead (im trying to keep everything the same size to help uniformity when i make the toolchanger.) (also disclaimer the ai response was edited i wish google gemini could be this blunt)"}, {"post_id": 35451, "ts": "2026-07-26T21:26:57Z", "hours": 3.0669, "text": "after some onshape work, I have a normal looking printbed! its inspired by the triple lead screw beds found on many coreXY printers, and based on an equilateral triangle for better triangulation for printbed leveling."}, {"post_id": 33068, "ts": "2026-07-22T17:17:32Z", "hours": 0.8003, "text": "the idea of a modular 3d printer: so I was bored and thought, “what if i could make a 3d printer that has dual hotends for faster printing and better supports, but then also a toolchanger so i can swap it to a lighter single hotend, or even potentially a router endmill? so my main goal from this devlog was to capture the planning I’ve done with choosing materials for the gantry, movement, and the extrusion system. only the electronigc to go and I can get CAD started!"}]...
|
Title: DraftONE by @saharshn | Stardance
Devlogs: Title: DraftONE by @saharshn | Stardance
Devlogs:
the idea of a modular 3d printer: so I was bored and thought, “what if i could make a 3d printer that has dual hotends for faster printing and better supports, but then also a toolchanger so i can swap it to a lighter single hotend, or even potentially a router endmill? so my main goal from this devlog was to capture the planning I’ve done with choosing materials for the gantry, movement, and the extrusion system. only the electronigc to go and I can get CAD started!
after some onshape work, I have a normal looking printbed! its inspired by the triple lead screw beds found on many coreXY printers, and based on an equilateral triangle for better triangulation for printbed leveling.
after a break, I decided it’d be better for me to just let go of the double hotend idea. the main thing is that it just overcomplicates the idea wayyyy too much and ends up just being worse: the main ideology behind the double hotend tool was so that I can print supports with a larger .8mm nozzle, speeding up print times due to higher flow and taller layer heights. what I didnt realize was that if I did do this, it would be extremely messy with dual nozzles as theres a high chance the secondary nozzle would just hit the newly printed layers on a large enough part. Also, I wouldnt be able to take the taller layers to my advantage due to the fact that theres a .4mm nozzle that physically cant do those tall layer heights and it ends up becoming too messy, pretty much just handicapping the performance of the .8mm nozzle The new idea: just have a seperate high flow toolhead with a .8mm nozzle thats just as light as a single toolhead, which can take advantage of the higher print speed and the taller layer heights To replace the double hotend tool, I came up with the idea for another toolhead: so basically my current toolheads use a bowden tube extruder, which essentially is having the actual extruder part of the toolhead somewhere on the printer frame, and it feeds filament from there into the hotend. It saves alot of weight, but ends up being worse for some filaments (like TPU) which bind very easily and cause issues with a bowden setup (which is why tpu doesnt work well on the AMS!). The idea is having a heavier toolhead which has the main purpose of using a Direct Drive extrusion setup, using a Nema17 Stepper sitting on the actual toolhead, and unlike the bowden setup that “pushes” filament and causes binding, this “pulls” in filament and reduces binding risk. the extra weight means I wont be able to print as fast, but means that it’d be compatible with filaments sensitive to binding up such as TPU. ik this is a yap session, sorry to the reviewers that have to read this in advance!!! I have also attached my base level airflow diagram for the single nozzle setup because you guys deserve more data :) The extra space for the outtake fan also acts as a ledge to mount the Nema17 Stepper motor for the direct drive toolhead (im trying to keep everything the same size to help uniformity when i make the toolchanger.) (also disclaimer the ai response was edited i wish google gemini could be this blunt)
DEVLOG #4: Am I going the wrong way??? So I spent some time today working on a toolhead, but realized I might be doing this wrong. This is originally for a stock hotend setup that is larger so that it ends up being the same size as a larger direct drive hotend for more sensitive filaments such as TPU. But i realized, i might just be thinking about this the wrong way… Instead of making a direct drive extruder thats larger and heavier, what if I just use a bowden extruder (like all my other extruders on this printer) thats a lot more sensitive and conservative performance wise for TPU instead of a direct drive extruder. Alongside this, I cant just use a standard extruder because it would end up causing the TPU to bind, meaning I’m going to have to design a custom spring loaded extruder. I might also use the same extruders for my other extruders due to how much better a spring loaded extruder is compared to a fixed extruder, despite the added complexity.
Devlog #5: An actually Productive Devlog??? So i re-did the whole extruder assemble and it looks so nice now!!! probably the smallest its gonna be has a blower fan for cooling the print layer (just like many modern bambus/vorons) WITH DUCTING!!! not pictured: mounting hardware in the back onto aura carriage Bowden Pneumatic Push-to-connect M6 Fittings so basically i re-did this to be as small and lightweight as possible, and as a result i got it to look SUPER cool, and looks so nice and almost like an actually good printer!!! On the latch/toolchange mechanism: this has gone past multiple modifications over the past hour. Initially, I thought it would be best to have a whole hub that uses clips to latch onto the carriage, but i ended up settling with just using a single servo arm to hold the latching and adding stability screws so it should (keyword: should) be precise enough to not add any slop. ok first nice productive devlog in some time, time to get some rest!!!
Devlog #6: what is a toolhead so basically although this is somewhat of a smaller devlog time-wise, i got my whole toolhead plus swapping mechanism done!!! so how it works: there is a SWYFT Micro servo in the actual carriage with a servo arm that latches onto the toolhead 3 low profile socket head cap screws act as pins to prevent any angular movements (one in each corner for 3/4 corners) some cool nerd tech specs: toolhead projected to be approx ~ 90 g, lighter than most vorons uses BIQU Eddy Probe for quick Z-probing overall carriage weight projected to be under 140g so yeah cant wait to do more!!! see yall next one
Devlog #7: Unpowered Gantry and a smaller toolhead so so far, all I’ve done is shorten the toolhead, and made a gantry structure wise. One main thing I need to do later is actually add corexy hardware but trust we’re getting there. Alongside the gantry work, i shortened the toolhead by approx ~20mm and brought it significantly closer to the carriage to reduce the amount of forces on it as a result of it being so far. for both of these i do need to work on adding the coreXY rigging, but thats something i can work on later so im not too worried about it.
Devlog #8: A Big Mis-step stuff i worked on that actually works: the coreXY idler rigging for the gantry is done! looks nice basic frame packaging work done, planning out space for extruders, docking station, electronics, and coreXY hardware. so i realized wayyyy too late that for coreXY rigging i need to have the belt run parallel to the x axis 😭 i thought i could get away with angled belts but sadly i do have to redo the carriage clamps for belting also I thought up of a newer and better system to add more modularity: the actual modular system is a set of 4 corner holes you can add any tool system you want after that, meaning if your chasing performance you can do a single fixed hotend, of if you need the extra ability multicolor adds you can install the toolchanging and docking system. as a result this means im going to have to install the probe on my toolhead but it isnt too big of a deal. so yeah thats pretty much it for today!!!
Devlog #9: Triple it and give it to the next person WOW. This is genuinely one of the best checkpoints im at. i did not expect to be able to get here lol so what i did: TWO new hotends!!! bolt-on hotend and carriage: essentially a carriage that ditches the heavy servo and toolchanger for a more secure screw-on changer. This means you’ll be able to push feeds and speeds higher on this, and is especially useful if you’re doing single material prints. Lightspeed hotend (get it? its light and its fast lol): if your chasing true performance this genuinely might be your best bet. it ditches the large eddy probe for a sub-90 gram carriage, meaning you’ll be able to push this to the limit. Also, the Center of Gravity is a lot closer to the gantry meaning more control. Updated gantry: so I fixed the main issue with the gantry, being pulleys in the center. If theyre in the center, it ends up being very weird belt geometry wise due to how CoreXY is rigged, and as a result, had to make the gentry idlers side-agonistic, meaning the belt path will stay perfectly parallel to the gantry. updated clamp plates: these clamp plates ACTUALLY WORK!!! ikr ts so cool
Devlog # 10: Packaging Headache so what i actually achieved: modified sailfin extruder with side mount for bowden setup i tried to make a direct drive toolhead (again smh) but this time actually compact and an all-rounder. The main limitation for me was the fact that the sailfin mounting holes just aren’t meant for a toolhead this small. one cool thing about this toolhead is that despite the extra direct drive extruder, its still very light, sitting at around 180 grams total. heavier than my previous sub-90 toolheads but this should be better consistency-wise and work very well with filaments like TPU and TPA. more gantry and frame work!!! in the next devlog, i’m gonna be reworking the mounting of the sailfin toolhead to fit into this better, but I’d say that this actually was a pretty locked in session.
Devlog #11: ANOTHER new toolhead??? overall a very productive devlog!!! so what I worked on: Introducing the DoubleDecker Toolhead, a larger, all-in-one toolhead with a direct drive extruder and bi-directional cooling done via double part cooling fans. Despite the many added features, it weiths around 240 grams, which is significantly less than the Voron Stealthburner (a reference for this toolhead). Alongside that, it uses an entirely surface-modeled duct, based off of multiple Computational Fluid Dynamics simulations. modified the sailfin even more to better suit my needs (better mounting solution, smaller packaging) and now fits very well into my packaging ik i said it alr but: the duct!!! it took me like 1-2 hours of surface modelling to get the geometries just right, but its definitely paid off (looks tuff asl, works well) ok so thats p much it for my devlog, heres my bucket list: more gantry work frame (swap 3dp for extrusion??? more corexy rigging work ok byeee
Devlog #12: Frame(work) -so main thing is that ive been out of town for some time so im lwk just doing work whenever possible, so this is what im doing: motion-wise, the frame is almost done!!! its crazy how close i’m getting to being finished!!! midway through re-doing Z axis from linear rods to rails, mainly just due to ease of use. finished coreXY idler box! essentially this is just what holds 4 idlers and a single tensioned Nema17 motor for coreXY motion had to drop build size to 235 235 180mm due to issues with linear rails im buying i forgot if this was mentioned before but Z leadscrews!!! ok ill prob write more once i get back but yeah thats maily what ive done
Devlog #13: Restructuring I realized I’ve gone about this a completely wrong way. I’ve been overcomplicating this gantry wayy too much, and ended up making this so much more complicated and a LOT weaker than it could be. As a result, I am re-doing the whole CoreXY Motion system!!! So what I have accomplished: all new gantry based off of lie-flat Y rails and Voron-based CoreXY rigging (belt plate sandwich between toolhead and carriage) moved toolhead to be facing forward instead of backward, frees up alot of space but makes hot-swapping toolheads alot harder so I might have to temporarily drop it. made these cool asl idler blocks that look so aura dropped rail profile by ~29.3mm vertically made a lot stronger due to aluminum plate sandwich zero cantilever design
Devlog #14: Introducing VKTR so as you can see i did forget to devlog its alr tho i got some INSANE changes watch out Introducing VKTR: it is probably one of the coolest toolheads I have made. Packaging and form factor inspired by the A4T, and front plate styling inspired by the Stealthburner. Utilizes a Wristwatch v3 BMG extruder, and a Bambu Labs P1s Hotend for cost purposes. has two 4010 Blower fans for part cooling, 2510 Intake fan, and 3007 Exhaust fan. The name is inspired by the vectoring i had to use for my ducting but somehow i accidentally put a K instead of a C but didnt notice??? still sounds cool asf tho The entire gantry is reworked to make this voron-compatible and to make this workable with voron toolheads. this allows me to not only use the toolheads I make, but rather the ones anyone in the voron community makes to work on this new V2 Frame with V2 Bed! 220 220 195 total volume, and now its considerable more stable and cleaner looking (with extra space for rgb!!!) as of right now, the entire motion system should be done!!! time for enclosure and elec spacing, and we can actually build this!!!
Devlog 15: ALMOST THERE WOOOO made final assembly! made a cool render! Started BOM! so my goal is to get this out by the 20th or 21st, and this is becoming slowly more in reach! cant wait to cross this final stretch!...
|
1792694962.9368715
|
1793299762.9368715
|
|
51129
|
Silverflame - TVC propulsively landing rocket by @ Silverflame - TVC propulsively landing rocket by @staspomortsev | Stardance...
|
staspomortsev
|
0
|
65.47
|
0
|
[]
|
[{"post_id": 78259, "ts": "202 [{"post_id": 78259, "ts": "2026-10-10T05:56:56Z", "hours": 3.9631, "text": "I have finished on the rocket and I submitted for funding I don’t really know how to make logos so I just threw up something together, and I guess it’s fine. I also made the BOM (Bill Of materials) you can also check out my project on https://github.com/CloudStas/Propulsively-Landing-Model-Rocket"}, {"post_id": 76250, "ts": "2026-10-02T21:28:25Z", "hours": 2.7197, "text": "I finally finished my PCB costs about $30 on JLCPCB: this pcb has an ESP32 for control and powers from a 2s lipo battery 2200mah and powers 4x KST x08 v6 servos for XY control and throttle control and a usb port for debugging and 2x Igniters for 2x Estes F15 motors and 1x for releasing landing legs, almost done with the rocket."}, {"post_id": 74984, "ts": "2026-09-28T19:32:11Z", "hours": 6.7669, "text": "I am basically finished with the Landing legs for my TVC rocket and I just have to finish my PCB since the deadline got expanded to oct 31st so I have enough time. I might make a reaction wheel since I have enough time. I might also make a reaction wheel for stabilizing rocket’s roll. I am excited for launch."}, {"post_id": 70018, "ts": "2026-09-18T09:01:41Z", "hours": 4.7772, "text": "I thought of finishing the PCB but realized that it would take a few weeks for it to be made so instead i decided to daisy chain everything and I also designed an Avionics Bay that holds 2 computers(1x Raspberry Pi 3 Model A+ that is connected to a camera, and 1x ESP32-S3) and the ESP can send signals to ignite rocket engines or deploy landing legs. I also made a spreadsheet for all the parts and here is how the Avionics Bay and the BOM(Bill Of Materials) looks like: Also here is the BOM Link: https://docs.google.com/spreadsheets/d/1w17DnCs4J0WBasmAesTz5ANlNJR9XYsVwglhH3W97UI/edit?pli=1&gid=0#gid=0 Total Cost for the Electronics is The materials without 3d printing which is the final step is $482.35, I am going to later try to optimize the cost but for now I need to finish designing the rocket and then I will."}, {"post_id": 69129, "ts": "2026-09-16T13:13:59Z", "hours": 10.6092, "text": "I finally finished the TVC mount with throttle arms. And it supports 2 rocket motors and it can gimbal in all directions 5 degrees, I am basically done with the one of the hart parts. Up next I am going to redesign the flight computer PCB."}, {"post_id": 65323, "ts": "2026-09-10T12:17:26Z", "hours": 7.7383, "text": "I am redesigning the TVC mount with a better one so it can move better on it’s X/Y axis and also to be smaller. I still need to do the throttle arms and before that also need to figure out how to make it smaller to fit in something like a 74mm OD(Outer Diameter) tube or similar."}, {"post_id": 64071, "ts": "2026-09-08T06:45:20Z", "hours": 7.9139, "text": "I was designing my PCB but I decided to not make my own pcb and instead just use a Pi zero 2w and a teensy 4.1 with seperate igniters and servo/motor power connections. So now I am going to be designing an avionics bay in onshape to hold the computers and all the electronics. Edit: I am going to finish the pcb I am just going to finish the rocket design first."}, {"post_id": 58492, "ts": "2026-08-30T22:13:21Z", "hours": 11.015, "text": "Right now I am almost finished with the flight computer I spent most of the time fixing issues. And once I am finished I will post the BOM and add it to my github repo. Here are some features of the flight computer: The main CPU will be the ESP32-S3 and it will power 4x DC motors, 2x of them for YAW and PITCH and 2x more will be for the throttle arms, and lastly a dc motor for a reaction wheel to stabilize the rocket’s roll."}, {"post_id": 54628, "ts": "2026-08-25T17:31:07Z", "hours": 9.9667, "text": "There are a lot of parts for a Propulsively Landing Model Rocket, and I finished 1 one them which is Designing the TVC Mount. TVC or Thrust Vector Control is for gimbaling the rocket motor so the rocket can go upward straight. The Mount can also hold 2 motors one for ascent and another one for landing. Once the Landing motor burns out it literally just gets jettisoned and it falls out as the landing motor inside the tube ignites and the throttle arms are originally open but the throttle arms can be commanded by the flight computer to throttle down when needed. When the rocket gets closer to the ground it can throttle down more so it can become slower and slower until the legs touchdown on the ground. Right now I am currently designing the flight computer which is my first PCB and then I will make a mount for the rocket to hold the computer and the battery. After the Flight Computer is done I will work on the Reaction Wheel to Stabilize the rocket’s roll, and the airframe of the rocket which is simple, it’s just cardboard. And the final hardware design step is to design the landing legs which will be most likely to be made out of carbon fiber with a toy dampener. The way the legs work is kind of simple, they just have a nichrome wire on top of the legs, when the electrical current gets sent thru the wire it burns up and the legs can get out and click in so they are ready for impact. My Mount btw uses plastic + ceramic throttle arms and 4x Genuine MG90s servo’s. That said, Here is my TVC Mount: You can also check out the project on Github: https://github.com/CloudStas/Propulsively-Landing-Model-Rocket"}]...
|
Title: Silverflame - TVC propulsively landing rock Title: Silverflame - TVC propulsively landing rocket by @staspomortsev | Stardance
Devlogs:
There are a lot of parts for a Propulsively Landing Model Rocket, and I finished 1 one them which is Designing the TVC Mount. TVC or Thrust Vector Control is for gimbaling the rocket motor so the rocket can go upward straight. The Mount can also hold 2 motors one for ascent and another one for landing. Once the Landing motor burns out it literally just gets jettisoned and it falls out as the landing motor inside the tube ignites and the throttle arms are originally open but the throttle arms can be commanded by the flight computer to throttle down when needed. When the rocket gets closer to the ground it can throttle down more so it can become slower and slower until the legs touchdown on the ground. Right now I am currently designing the flight computer which is my first PCB and then I will make a mount for the rocket to hold the computer and the battery. After the Flight Computer is done I will work on the Reaction Wheel to Stabilize the rocket’s roll, and the airframe of the rocket which is simple, it’s just cardboard. And the final hardware design step is to design the landing legs which will be most likely to be made out of carbon fiber with a toy dampener. The way the legs work is kind of simple, they just have a nichrome wire on top of the legs, when the electrical current gets sent thru the wire it burns up and the legs can get out and click in so they are ready for impact. My Mount btw uses plastic + ceramic throttle arms and 4x Genuine MG90s servo’s. That said, Here is my TVC Mount: You can also check out the project on Github: https://github.com/CloudStas/Propulsively-Landing-Model-Rocket
Right now I am almost finished with the flight computer I spent most of the time fixing issues. And once I am finished I will post the BOM and add it to my github repo. Here are some features of the flight computer: The main CPU will be the ESP32-S3 and it will power 4x DC motors, 2x of them for YAW and PITCH and 2x more will be for the throttle arms, and lastly a dc motor for a reaction wheel to stabilize the rocket’s roll.
I was designing my PCB but I decided to not make my own pcb and instead just use a Pi zero 2w and a teensy 4.1 with seperate igniters and servo/motor power connections. So now I am going to be designing an avionics bay in onshape to hold the computers and all the electronics. Edit: I am going to finish the pcb I am just going to finish the rocket design first.
I am redesigning the TVC mount with a better one so it can move better on it’s X/Y axis and also to be smaller. I still need to do the throttle arms and before that also need to figure out how to make it smaller to fit in something like a 74mm OD(Outer Diameter) tube or similar.
I finally finished the TVC mount with throttle arms. And it supports 2 rocket motors and it can gimbal in all directions 5 degrees, I am basically done with the one of the hart parts. Up next I am going to redesign the flight computer PCB.
I thought of finishing the PCB but realized that it would take a few weeks for it to be made so instead i decided to daisy chain everything and I also designed an Avionics Bay that holds 2 computers(1x Raspberry Pi 3 Model A+ that is connected to a camera, and 1x ESP32-S3) and the ESP can send signals to ignite rocket engines or deploy landing legs. I also made a spreadsheet for all the parts and here is how the Avionics Bay and the BOM(Bill Of Materials) looks like: Also here is the BOM Link: https://docs.google.com/spreadsheets/d/1w17DnCs4J0WBasmAesTz5ANlNJR9XYsVwglhH3W97UI/edit?pli=1&gid=0#gid=0 Total Cost for the Electronics is The materials without 3d printing which is the final step is $482.35, I am going to later try to optimize the cost but for now I need to finish designing the rocket and then I will.
I am basically finished with the Landing legs for my TVC rocket and I just have to finish my PCB since the deadline got expanded to oct 31st so I have enough time. I might make a reaction wheel since I have enough time. I might also make a reaction wheel for stabilizing rocket’s roll. I am excited for launch.
I finally finished my PCB costs about $30 on JLCPCB: this pcb has an ESP32 for control and powers from a 2s lipo battery 2200mah and powers 4x KST x08 v6 servos for XY control and throttle control and a usb port for debugging and 2x Igniters for 2x Estes F15 motors and 1x for releasing landing legs, almost done with the rocket.
I have finished on the rocket and I submitted for funding I don’t really know how to make logos so I just threw up something together, and I guess it’s fine. I also made the BOM (Bill Of materials) you can also check out my project on https://github.com/CloudStas/Propulsively-Landing-Model-Rocket...
|
1792658927.8223095
|
1793263727.8223095
|
|
41119
|
J-mp3 by @Jian | Stardance
|
Jian
|
0
|
65.16
|
0
|
[]
|
[{"post_id": 70611, "ts": "202 [{"post_id": 70611, "ts": "2026-09-19T13:33:03Z", "hours": 3.1744, "text": "Day: idk anymore took a month break from this project, got busy irl. the 3 hours logged is me adding finishing touches, and getting a start on doing the firmware. But i decided i should ship before writing the firmware"}, {"post_id": 51143, "ts": "2026-08-20T17:15:33Z", "hours": 1.0333, "text": "Day 18: Power button I might not actually need a plunger? maybe just letting the power button stick onto the switch would work made the switch blue for better visibility"}, {"post_id": 50486, "ts": "2026-08-19T17:27:34Z", "hours": 0.7833, "text": "Day 17: clueless so im messing around in cad spent the day looking for resources or tutorials on how to make the actuator for the power button to no avail. is it really that niche?? so i just found the closest thing and used it as a reference. made a super dodgy concept of it but theres still many things i need to fix for it, like how am i even supposed to constrain it to one axis only??"}, {"post_id": 49786, "ts": "2026-08-18T18:32:28Z", "hours": 8.2333, "text": "Day 16: Added screw holes, port holes and stuff++ Spent a whole 8 hours on freecad adding screw mounts, adding the holes for usbc receptacle, 3.5mm jack, microsd card, and added an indent for the battery. Just missing the power button stuff. After that it should be the screen, and then fixing the length of the rotary encoder, as of now its wayy too long 💔"}, {"post_id": 49090, "ts": "2026-08-17T18:21:18Z", "hours": 1.7, "text": "Day 16: switching out the connector for the display switched the fpc connector to this one, and added a boost converter for the display"}, {"post_id": 48435, "ts": "2026-08-16T19:40:16Z", "hours": 4.7931, "text": "Day 15: reworking the pcb moving the battery and stuff circuits to the bottom, to make space for the battery should only have to change the fpc connector for the screen then the pcb should be almost done?"}, {"post_id": 47663, "ts": "2026-08-15T18:26:13Z", "hours": 0.65, "text": "Day 14: hitting a wall 💔 kinda reaching a stagnant point, mostly just spending time considering about the layout and placements of each component to fit everything within the small size. This is so not fun 💔 how do they fit all the components in such tight spaces. No solutions for now, thinking of the best compromise, either decrease battery size or increase the overall size and keep the capacity. Also the sockets and receptacles and stuff are so far away from the surface of the case, need to bring them out, maybe adding tabs."}, {"post_id": 46459, "ts": "2026-08-13T17:58:21Z", "hours": 4.1833, "text": "Day 13: New design for jmp3, and fixed battery circuit errors redid the design, ditching popout screen and replaced it with a round screen, like the ones used in smartwatches, then using only 1 rotary encoder for the controls. maybe ill add volume buttons separately for ease of use. but for now itll be just one rotary encoder. fixed a few errors from my battery circuit sketched in paint, itll look better than this lol"}, {"post_id": 45938, "ts": "2026-08-12T18:57:09Z", "hours": 1.9167, "text": "Day 12: So the pop out screen is kinda unachievable in freecad ive noticed that the pcb needs its own space, and so does the battery, then if i were to add the pop out screen it would need its own space too. its near impossible to cram all of that in “pocket size” and im just some normal guy so im not going to attempt it for now i unfortunately have to switch designs, so far im looking into adding either a round display, and adding a matte glass or smoked acrylic on top i also thought of doing like a flip out screen but it wouldnt really fit my design im open to any suggestions design wise"}, {"post_id": 45224, "ts": "2026-08-11T15:44:16Z", "hours": 3.1336, "text": "Day 11: adding latching pin to the latching mechanism just some cad think i might have to resize everything 💔, sizes of the components arent what i expected, have to rearrange the components to have them fit into the size i want starting to doubt if pocket size is really achieveable 🥀 the pop out screen will need some space, but the pcb is in the way"}, {"post_id": 44736, "ts": "2026-08-10T17:58:53Z", "hours": 4.9003, "text": "Day 10: Really really crude push-push mechanism for my screen with my very limited cad skills, i recreated the push push mechanism from sd card sockets (not final but it should be pretty much done i havent added the latching pin yet, still figuring that one out"}, {"post_id": 44032, "ts": "2026-08-09T15:18:34Z", "hours": 2.8333, "text": "Day 9: Swiiiiitchhedd to a better MCU Switching to esp32 s31 wroom 3, for better BT but this chip is too new theres barely any resources for this thing, im wiring it based on some sketchy datasheet i can barely understand sketched out somewhat the railing for the screen with my very very limited CAD skills, uhh next should be the spring and allat mechanism stuff barely got any sleep so not much work done today"}, {"post_id": 43415, "ts": "2026-08-08T17:18:40Z", "hours": 1.1833, "text": "Day 8: Rethinking components.. and researching push-push mechanisms someone reminded me of esp32 wroom 32 chips BT, and i worry BT4.2 may be lacking so im considering switching to esp32 s31 wroom 3 (might be overkill? idk) i also found out abt BT audio modules, err i think those arent necessary for this project so im gonna skip that actually spent the day basically studying sd card sockets push-push mechanisms, my pop out screen will probably be using this mechanism, just with a few tweaks to make it work, but mostly i think i got it down, just need to figure out how to CAD it with my limited skills.."}, {"post_id": 42797, "ts": "2026-08-07T18:11:31Z", "hours": 7.0158, "text": "Day 7: Somewhat done with the pcb should be pretty much it for the pcb, 4 layers, added an AMP cuz i forgot abt that, uh i couldnt find a right angle rotary encoder footprint so that there like that and changed volume buttons to a rotary encoder i really tried to keep the size within 60x90mm but the keepout zone is just so big i ended up resulting to 60x91mm, i really want the volume control knob on the right Anyways for the actual design itself, i want the screen to be a pop out one, as in it stays inside, then when you want the screen, press it, and it pops out."}, {"post_id": 42068, "ts": "2026-08-06T16:59:10Z", "hours": 5.2411, "text": "Day 6: FInished up schematics, ready to start on pcb added so that the circuit can choose to be powered by usbc or battery, also added power button started planning out pcb, looking grim so far lol, how am i supposed to fit allat in such a small space?? maybe i shouldnt have used this mcu"}, {"post_id": 41461, "ts": "2026-08-05T17:59:02Z", "hours": 0.35, "text": "Day5: Rough sketch of J-mp3 Just a rough model of what the music player will look like, the indent on the bottom are for the buttons, i havent modelled them yet"}, {"post_id": 41438, "ts": "2026-08-05T17:30:03Z", "hours": 4.1661, "text": "Day 5: More more moremore work on the schematics properly connected the OLED (SPI), changed the AMS1117 to the RT9080-33, added battery voltage sensing, and wired up the switches"}, {"post_id": 40860, "ts": "2026-08-04T17:30:57Z", "hours": 4.3669, "text": "Day 4: Updated the schematics Still in the planning phase so i changed many things, havent really settled on how i should do the buttons yet, still looking into it. Decided to ditch the OLED module too, i’ll just use the OLED itself, connect it to the pcb with a socket. Arranged the schematics for easier viewing, adding an LDO for the battery to drop the voltage to 3.3V. Added the SRRT audio jack. Also made a rough sketch in freecad of how i want the design of it to be"}, {"post_id": 40243, "ts": "2026-08-03T17:21:42Z", "hours": 5.4975, "text": "Day 3: Planning out schematics for my music player For now I’ve added the components that I need in the music player, ie. audio DAC, SD socket, OLED display, and charging module. I haven’t decided which types of buttons i want to use yet, so I didn’t add them yet. I decided not to use any breakout boards for the modules to make everything slimmer and compact, also to challenge myself P.s. this is my second ever project, first one being keeb, of which i just completed. This one has proved to be a heck lot harder and I’m loving it(?)"}]...
|
Title: J-mp3 by @Jian | Stardance
Devlogs:
Day 3: Title: J-mp3 by @Jian | Stardance
Devlogs:
Day 3: Planning out schematics for my music player For now I’ve added the components that I need in the music player, ie. audio DAC, SD socket, OLED display, and charging module. I haven’t decided which types of buttons i want to use yet, so I didn’t add them yet. I decided not to use any breakout boards for the modules to make everything slimmer and compact, also to challenge myself P.s. this is my second ever project, first one being keeb, of which i just completed. This one has proved to be a heck lot harder and I’m loving it(?)
Day 4: Updated the schematics Still in the planning phase so i changed many things, havent really settled on how i should do the buttons yet, still looking into it. Decided to ditch the OLED module too, i’ll just use the OLED itself, connect it to the pcb with a socket. Arranged the schematics for easier viewing, adding an LDO for the battery to drop the voltage to 3.3V. Added the SRRT audio jack. Also made a rough sketch in freecad of how i want the design of it to be
Day 5: More more moremore work on the schematics properly connected the OLED (SPI), changed the AMS1117 to the RT9080-33, added battery voltage sensing, and wired up the switches
Day5: Rough sketch of J-mp3 Just a rough model of what the music player will look like, the indent on the bottom are for the buttons, i havent modelled them yet
Day 6: FInished up schematics, ready to start on pcb added so that the circuit can choose to be powered by usbc or battery, also added power button started planning out pcb, looking grim so far lol, how am i supposed to fit allat in such a small space?? maybe i shouldnt have used this mcu
Day 7: Somewhat done with the pcb should be pretty much it for the pcb, 4 layers, added an AMP cuz i forgot abt that, uh i couldnt find a right angle rotary encoder footprint so that there like that and changed volume buttons to a rotary encoder i really tried to keep the size within 60x90mm but the keepout zone is just so big i ended up resulting to 60x91mm, i really want the volume control knob on the right Anyways for the actual design itself, i want the screen to be a pop out one, as in it stays inside, then when you want the screen, press it, and it pops out.
Day 8: Rethinking components.. and researching push-push mechanisms someone reminded me of esp32 wroom 32 chips BT, and i worry BT4.2 may be lacking so im considering switching to esp32 s31 wroom 3 (might be overkill? idk) i also found out abt BT audio modules, err i think those arent necessary for this project so im gonna skip that actually spent the day basically studying sd card sockets push-push mechanisms, my pop out screen will probably be using this mechanism, just with a few tweaks to make it work, but mostly i think i got it down, just need to figure out how to CAD it with my limited skills..
Day 9: Swiiiiitchhedd to a better MCU Switching to esp32 s31 wroom 3, for better BT but this chip is too new theres barely any resources for this thing, im wiring it based on some sketchy datasheet i can barely understand sketched out somewhat the railing for the screen with my very very limited CAD skills, uhh next should be the spring and allat mechanism stuff barely got any sleep so not much work done today
Day 10: Really really crude push-push mechanism for my screen with my very limited cad skills, i recreated the push push mechanism from sd card sockets (not final but it should be pretty much done i havent added the latching pin yet, still figuring that one out
Day 11: adding latching pin to the latching mechanism just some cad think i might have to resize everything 💔, sizes of the components arent what i expected, have to rearrange the components to have them fit into the size i want starting to doubt if pocket size is really achieveable 🥀 the pop out screen will need some space, but the pcb is in the way
Day 12: So the pop out screen is kinda unachievable in freecad ive noticed that the pcb needs its own space, and so does the battery, then if i were to add the pop out screen it would need its own space too. its near impossible to cram all of that in “pocket size” and im just some normal guy so im not going to attempt it for now i unfortunately have to switch designs, so far im looking into adding either a round display, and adding a matte glass or smoked acrylic on top i also thought of doing like a flip out screen but it wouldnt really fit my design im open to any suggestions design wise
Day 13: New design for jmp3, and fixed battery circuit errors redid the design, ditching popout screen and replaced it with a round screen, like the ones used in smartwatches, then using only 1 rotary encoder for the controls. maybe ill add volume buttons separately for ease of use. but for now itll be just one rotary encoder. fixed a few errors from my battery circuit sketched in paint, itll look better than this lol
Day 14: hitting a wall 💔 kinda reaching a stagnant point, mostly just spending time considering about the layout and placements of each component to fit everything within the small size. This is so not fun 💔 how do they fit all the components in such tight spaces. No solutions for now, thinking of the best compromise, either decrease battery size or increase the overall size and keep the capacity. Also the sockets and receptacles and stuff are so far away from the surface of the case, need to bring them out, maybe adding tabs.
Day 15: reworking the pcb moving the battery and stuff circuits to the bottom, to make space for the battery should only have to change the fpc connector for the screen then the pcb should be almost done?
Day 16: switching out the connector for the display switched the fpc connector to this one, and added a boost converter for the display
Day 16: Added screw holes, port holes and stuff++ Spent a whole 8 hours on freecad adding screw mounts, adding the holes for usbc receptacle, 3.5mm jack, microsd card, and added an indent for the battery. Just missing the power button stuff. After that it should be the screen, and then fixing the length of the rotary encoder, as of now its wayy too long 💔
Day 17: clueless so im messing around in cad spent the day looking for resources or tutorials on how to make the actuator for the power button to no avail. is it really that niche?? so i just found the closest thing and used it as a reference. made a super dodgy concept of it but theres still many things i need to fix for it, like how am i even supposed to constrain it to one axis only??
Day 18: Power button I might not actually need a plunger? maybe just letting the power button stick onto the switch would work made the switch blue for better visibility
Day: idk anymore took a month break from this project, got busy irl. the 3 hours logged is me adding finishing touches, and getting a start on doing the firmware. But i decided i should ship before writing the firmware...
|
1792792145.0629041
|
1793396945.0629041
|
|
44683
|
RawStudio by @ball | Stardance
|
ball
|
0
|
65.13
|
0
|
[]
|
[{"post_id": 61857, "ts": "202 [{"post_id": 61857, "ts": "2026-09-04T23:53:20Z", "hours": 8.9989, "text": "Devlog 08 hi guys :D. I’ve added a solid amount of features since the last devlog. Last ver was just a basic canvas with some adjustment sliders, but now I have the UI looking like a proper editing app. Updates: Histogram: I added the RGB histogram that used to be present in the Pyqt version. Overall just helps keep track of the tones throughout the image. Fimlstrip: Added a filmstrip at the bottom, which displays active images so you can easily browse thru all the pics you’ve imported. Exif metadata: I added a overlay tag on the top left that displays ISO, aperutre, shutter speed, and focal length. The screenmshot that I provided just has synthetic info, I imported a png. Status: Bottom bar tracks canvas dimensions. UI and refactoring: I reorganized the structure a little, added standard icons, the components fit into clean rows and containers. Backend wiring: Wired up most backend features into the UI, including image selection/importing, histogram data, light adjustment bars, color adjustment bars, & the save button. Whats next? Finish wiring up the rest of the UI features to the backend, which include the cropping, zoom, and new feats I will be adding. Will most likely be adding an auto-select tool that uses edge recognition to select specific objects, the kinda tool that other apps like GIMP and Photoshop use. Shipping will occur within the next 2 devlogs (hopefully)"}, {"post_id": 59411, "ts": "2026-09-01T07:10:17Z", "hours": 10.6278, "text": "Devlog 07 hello guys :D. Ive found a MUCH better looking UI library than pyqt and my prev builder for Cortex, which was Streamlit. We all know Streamlit is ugly. Like damn. Anyway, I’ve started on building a Flet UI now. Flet has been a very good alternative for the UI. Comes with a bunch of prebuilt flutter components, and everything can be integrated with Python (sadly im alr at any other language). Its all cross platform too, so I could make it either a web app or desktop app, but I will most likely be making it a web app (easier for voters to use, not everyone has python installed.) Heres everything I added: New updates: UI Revamp: As I said before, I switched out the entire PyQT interface to Flet. Alot cleaner and dark themed, + everything fits in a single file. Extracted prev componenets: I built a slider row func to help speed up the slider creation process, handle the min and max bounds, and display live number readouts without having to duplicate the same sections of code. New layout: I setup the main app layout with a bunch of the Flutter widgets. Parameter organization: I grouped together the image adjustment parameters into ExpansionTile panels for Light (like Exposure, Contrast, Highlights, etc.) and Color (Temp, Tint, Saturation). Header and toolbar: I refactored the top navbar with some Open and Save buttons, + a minimal left hand bar with basic tools like crop and zoom. Whats next? Wiring backend: None of the backend is currently connected to the UI, its just pure nonfunctional UI code, so will be doing that before the next devlog. Implementing remaining features: I have yet to add the left out features like the histogram, tone curves, and I will also be adding Color wheels (hopefully) Shipping will most likely occur within the next 2-3 devlogs"}, {"post_id": 57702, "ts": "2026-08-29T22:59:30Z", "hours": 9.6128, "text": "Devlog 06 hey guys. I spent this devlog time upgrading control feel and shadow adjustment, plus some more UI work. New updates: Shadow Recovery: I added a custom tone adjustment system that targets the dark areas of an image without completely blowing up the whole photo. Instead of turning up the whole brightness of the imnage, it isolates dark pixels and lifts them with a curve, so the colors stay natural. Preserving details: Added a hfq filter to pass over the shadow mask, so the texture and sharpness stay intact. This helps the dark areas not look so flat or washed out when they are lifted. Color noise reduction: Higher shadow lifts can bring out some ugly noise, so I added an automatic desaturation to the extremely dark areas to keep the colors clean when the shadow details are recovered. Sidebar: I redesigned the sliders in ui.py . The shadow control has its own section with number readouts. Whats next? Binding main up: I will be finishing updating main.py handlers and the events listeners, stuff like keyboard shortcuts and adjustments via the scroll wheel, to connect the new shadow slider. Highlights: Ill be adding highlight recovery to lower details from the overexposed areas. Really dont have alot of new UI modules I added in the screenshot, but next devlog will most likely be a REALLY big UI revamp. Or probably after the next devlog."}, {"post_id": 52783, "ts": "2026-08-23T03:52:23Z", "hours": 8.6822, "text": "Devlog 05 hello guys I’ve finished up some major UI changes and modularization, along with performance changes. Updates: Modularized some features: refactored some ui code out of main.py into ui.py to organize components better. Vignette masking - I’m currently working on a vignette (edge darkening) effect with cv2s gaussian kernel feature. Took a little bit of research to start building this, but I have a matrix with intensity values, which are applied to all the BGR channels. Aspect ratio cropping: I built a slicer for the standard ratios ( 1:1, 4:3, 16:9 ) Control sidebar: I replaced the simple buttons and sliders on the bottom with a right hand sidebar layout. Theres now dedicated cateogries/control sections, parameter sliders, aspect ratio (I acc havent added this yet), & file actions. Whats next? Wiring up the UI: Ill be finishing the main.py and UI module updates to handle the vignettes and new sidebar controls. Tone adjustments: Adding Highlight and Shadow mask sliders."}, {"post_id": 49973, "ts": "2026-08-19T00:00:00Z", "hours": 8.5344, "text": "Devlog 04 hey gus. some pretty large changes were added. I’ve been working on updates to improve visual feedback on edits and just UI responsiveness. Updates: RGB Histogram: I built a live frequency visualizer for each channel with OpenCV. It displays the distribution curves of red, green, and blue channels all at the same time, which helps alot once we add shadows, highlights, and this also just helps with balancing the tone. Before and after comparison: I added a Compare button. Holding the button instantly displays the original image, and letting go reverts to the current edited image. Preview and histogram optimization: Ive fixed UI lag during slider updates by making a seperate preview pipeline, so now the canvas processes the slider adjustments on a downscaled preview image (max 1280 px) and uses array sampliong with strides to calculate the histogram. This helped with frame rate ALOT, it kept the editing smooth and the full high res image comes out during export anyway. Whats next? Sidebar tab UI: The sliders are all cluttered in the bottom center right now, different categories on the right in a sidebar would make the app alot more organized. Modularizing: Im going to be refactoring a bunch of the UI and processing handlers out of main.py into different modules to clean up the codeboase. All these next edits are just for organization and cleanliness, I dont think I’ll be adding any new adjustment features before the next devlog."}, {"post_id": 48474, "ts": "2026-08-16T20:41:59Z", "hours": 7.8525, "text": "Devlog 03 hello. I’ve finished up some major updates, 2 for image adjustments and one for refactoring New updates: Non linear exposure control: I added an exposure slider using gamma correction and cv2.lut. The precalculated lookup table makes sure the slider responds smoothly without any lag. Color tmep slider: I integrated a color temperature control slider to change the white balance of an image. The warm values boost the red channel and reduce blue, and cool values boost blue and reduce red. Refactor: main.py just started getting really crammed, so I moved all the image processing code into a function in processor.py . Now, main.py only manages the UI components and the processor wiring. I’ve also spent a bunch of time experimenting with different filters to add, I’m hoping to add these before the next devlog, not too sure though. Whats next? RGB histogram: will make a pixel intensity graph with matplotlib and pyqt to display highlights and shadows. Before/After toggle: maybe a shortcut to toggle a before and after view just like lightroom has Slider categories: organize the sliders into seperate categories based on their use case Filters: different image filters like grayscale, sepia, etc."}, {"post_id": 46119, "ts": "2026-08-13T03:59:39Z", "hours": 5.9761, "text": "Devlog 2 hey guys. I have added ALOT of features since the last devlog. New features: Saturation and RGB controls: I’ve added a saturation slider by converting the image to HSV and then scaling the saturation. Theres also individual red, green, and blue sliders so you can change up the balance. Blur and sharpening: Added a Gaussian blur slider and built a sharpening filter with an unsharp mask. It basically just blends a blurred copy of the image into the original image to make everything pop. Transformations: I added a 90 degree rotate button along with horizontal and vertical flips, so you can quickly fix incorrect photo orientations. Also added a reset button to clear all changes to the original image. Exports: Theres now a working save file dialog with opencv’s file writer, so you can export the modified images as png, jpg, or bmp. Finally starting to become an actual app :D. I also added a banner/logo to the project, you can view it in my project page. Designed in Figma. Whats next? main.py is very cluttered with all the logic and processing in a single file. I know I said that I would do the modularization in the previous devlog, but I will acc be modularizing between this and the next devlog."}, {"post_id": 44930, "ts": "2026-08-11T00:26:49Z", "hours": 4.8433, "text": "Devlog 01 hey guys, first devlog for RawStudio. RawStudio is a desktop photo editor that I’m building in Python. What have I done so far? base canvas is running file picking and canvas image loading controls for brightness, contrast, and grayscale I ran into an issue today where OpenCV imported images in bgr instead of rgb, which made the loaded photos look only blue. Easy fix, I just switched the channels before sending them to the pixmap. What’s next? I will be separating main.py into different modules to keep the codebase more organized"}]...
|
Title: RawStudio by @ball | Stardance
Devlogs:
De Title: RawStudio by @ball | Stardance
Devlogs:
Devlog 01 hey guys, first devlog for RawStudio. RawStudio is a desktop photo editor that I’m building in Python. What have I done so far? base canvas is running file picking and canvas image loading controls for brightness, contrast, and grayscale I ran into an issue today where OpenCV imported images in bgr instead of rgb, which made the loaded photos look only blue. Easy fix, I just switched the channels before sending them to the pixmap. What’s next? I will be separating main.py into different modules to keep the codebase more organized
Devlog 2 hey guys. I have added ALOT of features since the last devlog. New features: Saturation and RGB controls: I’ve added a saturation slider by converting the image to HSV and then scaling the saturation. Theres also individual red, green, and blue sliders so you can change up the balance. Blur and sharpening: Added a Gaussian blur slider and built a sharpening filter with an unsharp mask. It basically just blends a blurred copy of the image into the original image to make everything pop. Transformations: I added a 90 degree rotate button along with horizontal and vertical flips, so you can quickly fix incorrect photo orientations. Also added a reset button to clear all changes to the original image. Exports: Theres now a working save file dialog with opencv’s file writer, so you can export the modified images as png, jpg, or bmp. Finally starting to become an actual app :D. I also added a banner/logo to the project, you can view it in my project page. Designed in Figma. Whats next? main.py is very cluttered with all the logic and processing in a single file. I know I said that I would do the modularization in the previous devlog, but I will acc be modularizing between this and the next devlog.
Devlog 03 hello. I’ve finished up some major updates, 2 for image adjustments and one for refactoring New updates: Non linear exposure control: I added an exposure slider using gamma correction and cv2.lut. The precalculated lookup table makes sure the slider responds smoothly without any lag. Color tmep slider: I integrated a color temperature control slider to change the white balance of an image. The warm values boost the red channel and reduce blue, and cool values boost blue and reduce red. Refactor: main.py just started getting really crammed, so I moved all the image processing code into a function in processor.py . Now, main.py only manages the UI components and the processor wiring. I’ve also spent a bunch of time experimenting with different filters to add, I’m hoping to add these before the next devlog, not too sure though. Whats next? RGB histogram: will make a pixel intensity graph with matplotlib and pyqt to display highlights and shadows. Before/After toggle: maybe a shortcut to toggle a before and after view just like lightroom has Slider categories: organize the sliders into seperate categories based on their use case Filters: different image filters like grayscale, sepia, etc.
Devlog 04 hey gus. some pretty large changes were added. I’ve been working on updates to improve visual feedback on edits and just UI responsiveness. Updates: RGB Histogram: I built a live frequency visualizer for each channel with OpenCV. It displays the distribution curves of red, green, and blue channels all at the same time, which helps alot once we add shadows, highlights, and this also just helps with balancing the tone. Before and after comparison: I added a Compare button. Holding the button instantly displays the original image, and letting go reverts to the current edited image. Preview and histogram optimization: Ive fixed UI lag during slider updates by making a seperate preview pipeline, so now the canvas processes the slider adjustments on a downscaled preview image (max 1280 px) and uses array sampliong with strides to calculate the histogram. This helped with frame rate ALOT, it kept the editing smooth and the full high res image comes out during export anyway. Whats next? Sidebar tab UI: The sliders are all cluttered in the bottom center right now, different categories on the right in a sidebar would make the app alot more organized. Modularizing: Im going to be refactoring a bunch of the UI and processing handlers out of main.py into different modules to clean up the codeboase. All these next edits are just for organization and cleanliness, I dont think I’ll be adding any new adjustment features before the next devlog.
Devlog 05 hello guys I’ve finished up some major UI changes and modularization, along with performance changes. Updates: Modularized some features: refactored some ui code out of main.py into ui.py to organize components better. Vignette masking - I’m currently working on a vignette (edge darkening) effect with cv2s gaussian kernel feature. Took a little bit of research to start building this, but I have a matrix with intensity values, which are applied to all the BGR channels. Aspect ratio cropping: I built a slicer for the standard ratios ( 1:1, 4:3, 16:9 ) Control sidebar: I replaced the simple buttons and sliders on the bottom with a right hand sidebar layout. Theres now dedicated cateogries/control sections, parameter sliders, aspect ratio (I acc havent added this yet), & file actions. Whats next? Wiring up the UI: Ill be finishing the main.py and UI module updates to handle the vignettes and new sidebar controls. Tone adjustments: Adding Highlight and Shadow mask sliders.
Devlog 06 hey guys. I spent this devlog time upgrading control feel and shadow adjustment, plus some more UI work. New updates: Shadow Recovery: I added a custom tone adjustment system that targets the dark areas of an image without completely blowing up the whole photo. Instead of turning up the whole brightness of the imnage, it isolates dark pixels and lifts them with a curve, so the colors stay natural. Preserving details: Added a hfq filter to pass over the shadow mask, so the texture and sharpness stay intact. This helps the dark areas not look so flat or washed out when they are lifted. Color noise reduction: Higher shadow lifts can bring out some ugly noise, so I added an automatic desaturation to the extremely dark areas to keep the colors clean when the shadow details are recovered. Sidebar: I redesigned the sliders in ui.py . The shadow control has its own section with number readouts. Whats next? Binding main up: I will be finishing updating main.py handlers and the events listeners, stuff like keyboard shortcuts and adjustments via the scroll wheel, to connect the new shadow slider. Highlights: Ill be adding highlight recovery to lower details from the overexposed areas. Really dont have alot of new UI modules I added in the screenshot, but next devlog will most likely be a REALLY big UI revamp. Or probably after the next devlog.
Devlog 07 hello guys :D. Ive found a MUCH better looking UI library than pyqt and my prev builder for Cortex, which was Streamlit. We all know Streamlit is ugly. Like damn. Anyway, I’ve started on building a Flet UI now. Flet has been a very good alternative for the UI. Comes with a bunch of prebuilt flutter components, and everything can be integrated with Python (sadly im alr at any other language). Its all cross platform too, so I could make it either a web app or desktop app, but I will most likely be making it a web app (easier for voters to use, not everyone has python installed.) Heres everything I added: New updates: UI Revamp: As I said before, I switched out the entire PyQT interface to Flet. Alot cleaner and dark themed, + everything fits in a single file. Extracted prev componenets: I built a slider row func to help speed up the slider creation process, handle the min and max bounds, and display live number readouts without having to duplicate the same sections of code. New layout: I setup the main app layout with a bunch of the Flutter widgets. Parameter organization: I grouped together the image adjustment parameters into ExpansionTile panels for Light (like Exposure, Contrast, Highlights, etc.) and Color (Temp, Tint, Saturation). Header and toolbar: I refactored the top navbar with some Open and Save buttons, + a minimal left hand bar with basic tools like crop and zoom. Whats next? Wiring backend: None of the backend is currently connected to the UI, its just pure nonfunctional UI code, so will be doing that before the next devlog. Implementing remaining features: I have yet to add the left out features like the histogram, tone curves, and I will also be adding Color wheels (hopefully) Shipping will most likely occur within the next 2-3 devlogs
Devlog 08 hi guys :D. I’ve added a solid amount of features since the last devlog. Last ver was just a basic canvas with some adjustment sliders, but now I have the UI looking like a proper editing app. Updates: Histogram: I added the RGB histogram that used to be present in the Pyqt version. Overall just helps keep track of the tones throughout the image. Fimlstrip: Added a filmstrip at the bottom, which displays active images so you can easily browse thru all the pics you’ve imported. Exif metadata: I added a overlay tag on the top left that displays ISO, aperutre, shutter speed, and focal length. The screenmshot that I provided just has synthetic info, I imported a png. Status: Bottom bar tracks canvas dimensions. UI and refactoring: I reorganized the structure a little, added standard icons, the components fit into clean rows and containers. Backend wiring: Wired up most backend features into the UI, including image selection/importing, histogram data, light adjustment bars, color adjustment bars, & the save button. Whats next? Finish wiring up the rest of the UI features to the backend, which include the cropping, zoom, and new feats I will be adding. Will most likely be adding an auto-select tool that uses edge recognition to select specific objects, the kinda tool that other apps like GIMP and Photoshop use. Shipping will occur within the next 2 devlogs (hopefully)...
|
1792914647.2502756
|
1793778647.2502756
|
|
8128
|
Realm Panel by @Stijn | Stardance
|
Stijn
|
3
|
65.0
|
565
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T01:12:05Z", "hours": 4.0, "multiplier": 17.09, "payout": 68, "blessing": "neutral", "text": "Just a beautiful panel", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}, {"ship_num": 2, "ts": "2026-07-07T16:03:10Z", "hours": 48.0, "multiplier": 15.55, "payout": 318, "blessing": "neutral", "text": "Realm is a modern, ground-up reimagining of the Pterodactyl Panel, rebuilt from scratch with a focus on performance, maintainability, automation, and developer experience. Instead of patching an existing codebase, Realm introduces a cleaner architecture designed for the future of game server hosting. During Stardance, Realm evolved from a prototype into a much more complete server management platform. What was built Complete server panel redesign Reworked dashboards, tables, modals, and workflows for a more consistent UI. Converted old card-based interfaces into faster, cleaner table-based views. Added improved server information displays, resource indicators, and public IP lookup. Advanced file management Replaced the old tree-based explorer with a modern row-based file browser. Added faster navigation, bulk actions, improved context menus, breadcrumbs, and cleaner dialogs. Removed outdated components and simplified the architecture. Plugin management Added a built-in plugin manager so users can install and manage server plugins directly from the panel instead of manually uploading files. Automation & infrastructure Added Cloudflare integration for automatic subdomain provisioning. Improved server lifecycle management and reliability. Added support for deduplicated and encrypted backups using rustic, reducing storage usage while improving backup capabilities. AI integration Built a flexible AI provider system supporting providers such as OpenAI, Anthropic, Google Gemini, DeepSeek, OpenRouter, and custom OpenAI-compatible APIs. Added AI-powered console log summaries. Permissions & collaboration Added reusable permission templates for teams. Users can create custom roles and quickly apply them when managing server access. Engineering improvements A major focus was not only adding features, but improving the foundation: Large backend refactors for better maintainability. Shared service architecture for integrations. Improved validation and configuration handling. Fixed hidden infrastructure issues affecting settings persistence and backups. Removed thousands of lines of outdated code while simplifying the codebase. Results In roughly 42 hours of development during Stardance, Realm grew into a significantly more complete game server management platform: Modernized user experience Faster file operations Automated server provisioning Better backups AI-assisted management Team collaboration features Cleaner, more scalable architecture Realm’s goal is simple: make managing game servers feel less like operating infrastructure and more like using a modern developer platform.", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}, {"ship_num": 3, "ts": "2026-06-05T20:16:58Z", "hours": 13.0, "multiplier": 15.92, "payout": 179, "blessing": "neutral", "text": "Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.", "repo": "https://github.com/realmctl/panel", "demo": "https://demo.realmctl.com/"}]...
|
[{"post_id": 32091, "ts": "202 [{"post_id": 32091, "ts": "2026-07-21T00:39:37Z", "hours": 4.0272, "text": "Spent today mostly cleaning up how the panel actually looks instead of adding new stuff. Started because the Activity Log page just looked off next to Settings, turned out it was using its own hardcoded hex colors instead of the actual design tokens, so I went through and fixed that. Then I noticed the whole Account section (API keys, SSH keys, permission templates, all of it) had the exact same problem, every page had basically copy pasted the same fake card styling by hand instead of using the real component. Fixed all five pages while I was at it. Also turned Permission Templates into its own little “Environment” section with a sidebar, mostly so I have somewhere to dump future account wide settings later without having to rebuild the page again. Got told the permission checkboxes looked bad (fair, they did, gray boxes that didn’t match anything) so rewrote those too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while. ✻ Brewed for 6s · 3 shells still running ❯ can u now implement a demo mode on a new branch…. just that the instance resets every hour. so the node and the panel reset every 1 hour. accounts get reset back. players get admin but they cant ruin everything because panel gets resetted each hour too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while."}, {"post_id": 24174, "ts": "2026-07-07T16:00:55Z", "hours": 2.4944, "text": "Today’s pass on Realm’s server panel was all file manager: ripped out the old tree-sidebar explorer and replaced it with a flat table-row browser, matching the same table-ification sweep the rest of the panel got this week (allocations, databases, backups). The old file manager was built around FileManagerTreeSidebar (643 lines), a persistent expandable tree on the side, drag-and-drop context (ExplorerDragContext, 261 lines), a separate context-menu component (FileTreeContextMenu, 401 lines), and its own icon/media/upload util files. All of that’s gone now. In its place: FileObjectRow — one row per file/folder in a 12-col grid: checkbox + icon + name, size, relative modified time, and a dropdown menu on the right. Right-click still works, it just dispatches a custom event to open the row’s own dropdown instead of mounting a separate tree context-menu component. FileDropdownMenu — replaces FileTreeContextMenu. Same actions (rename, copy, archive/extract, download, chmod, delete) but scoped per-row instead of per-tree-node. FileManagerBreadcrumbs — simple path breadcrumb bar, replacing the always-visible tree for navigation. SelectFileCheckbox — per-row selection, feeding the existing MassActionsBar for bulk delete/move. FileManagerContainer — rewritten around the new row list (585 lines touched, net smaller). Also folded PullFileButton into NewDirectoryButton (renamed file, kept git history via rename-detection) and moved NewDirectoryButton + SftpDetailsButton off the old Dialog/asDialog HOC pattern onto the shared Modal component — same one now used by all the wizard modals across the panel, so file manager dialogs finally look consistent with everything else instead of being the last holdout on the old dialog system. Net effect: 38 files touched, ~1,150 lines added, ~4,250 removed. Deleted six now-dead util files outright (archivePathUtils, fileExplorerDrag, fileMediaUtils, fileTreeIcons, fileUploadUtils, useFileEditingPresence) along with their routes in routes.ts. No behavior loss — same actions available, just row-based instead of tree-based, and finally matching the modal/table conventions the rest of the panel converged on this week."}, {"post_id": 22483, "ts": "2026-07-04T23:27:18Z", "hours": 5.8878, "text": "Today was a full pass on Realm’s server panel: three feature threads (dashboard, AI, DNS) and a long UI-consistency sweep, capped off by one infra bug that had been silently breaking every dynamic setting in the panel. Started with the dashboard: replaced the old card-style ServerRow list with a proper ServerTable — sortable by name and game type, with circular progress indicators for resource usage instead of flat bars. Added a public IP lookup service and a ServerInfoCard for the console page showing location, IP, and domain info at a glance. Then built an AI provider helper: admin picks one provider (Claude, OpenAI, DeepSeek, Gemini, OpenRouter, or a custom OpenAI-compatible endpoint), drops in an API key, done. No multi-provider list to manage — one row in the DB, one config screen under Settings → Advanced. Wrote three concrete provider adapters behind a shared interface (AnthropicProvider talks the native /v1/messages API, GoogleProvider handles Gemini’s role mapping, OpenAiCompatibleProvider covers everything that speaks the OpenAI wire format) so future features can just call AiService::complete() without caring which backend is configured. Also wired up Cloudflare zone management for subdomains, and gave the Console a log-upload + AI-summarize action. What I built: ServerTable (sortable dashboard) + circular resource indicators, IP lookup + ServerInfoCard Single-provider AI helper: model, factory, three adapters, admin UI, wired into Console’s summarize feature Cloudflare integration for subdomain zone/record management A full step-wizard treatment (sidebar steps, numbered circles, review step) rolled out to every creation modal that used to be a plain form: Change Version, Invite Subuser, Allocation Firewall, Create Subdomain, Create Database, Create Backup Converted Allocations, Databases, and Backups from card grids to proper tables (header row, divide-y rows, right-click context menu on allocations instead of a button pile), with the “create new” action moved to plain text + hyperlink below each table instead of a header-bar button Restyled the base Modal component itself — dropped the floating X close icon, added consistent border/radius, gave it an optional title/footer API so simple confirm dialogs get the same content-pane-plus-footer-bar layout as the wizards Footer now shows the git commit hash + panel version with a fork icon instead of a static copyright line The interesting part was two bugs that had nothing to do with what I was actively building. First: Settings → Advanced looked like it saved, but nothing actually persisted — not the AI config, not the allocation port range. Chased it through three layers: my own save logic, then a native HTML required attribute silently blocking the shared form submit, and finally the real one — SettingsServiceProvider, the class responsible for merging DB-stored settings back into Laravel’s config() on every request, was never registered in config/app.php. Every dynamic setting in the entire panel — mail, OAuth, allocations, all of it — had silently never worked, completely unrelated to anything I’d touched that day. Second: tried to delete a backup in the dev environment and got a 500. Wings was shelling out to a rustic binary that straight-up didn’t exist in the container — the Dockerfile never installed it, so every backup on this dev box had been failing since day one without anyone noticing (because dev servers don’t usually need backups). Added the install step to build/wings/Dockerfile, rebuilt the image, and the failed backup’s leftover DB row still needed a manual delete since its rustic repo was never initialized in the first place. Neither of those two bugs was flashy, but both had been quietly breaking things for a while — the kind of thing you only find when you actually click through the feature end-to-end instead of trusting that tsc passing means it works."}, {"post_id": 21640, "ts": "2026-07-03T18:09:16Z", "hours": 1.1011, "text": "Today I added deduplicated, encrypted backups to Realm, my game server panel. Previously every backup was a full .tar.gz archive — so backing up a 125MB server ten times ate over a gigabyte of disk, even though almost nothing changed between backups. Painful if you want frequent backups. Now backups can run through rustic, a Rust backup tool that deduplicates and encrypts data. Ten backups of that same server now cost a fraction of the disk, because identical blocks are stored once and shared across every snapshot. You can turn it on per node, or set it as the panel-wide default — one dropdown in the node settings. What I built: A new rustic backup adapter in Wings (the Go daemon), covering the full lifecycle: init the repository, back up on delete. Since rustic hasno Go bindings I shell out to the binary, with a per-repository lock so concurrent backups on a shared node repgo through env vars, neverthe process args, and the repo is daemon-owned so game containers never see the path or password. A backup_adapter column on nodes (plus migration) and the panel-side logic to pick the adapter, with a per-nodes a global backupdestination. A “Backup adapter” dropdowd hiding the Download buttonfor rustic backups since they live in a shared repo instead of as one downloadable file. A production Docker image that bundles the rustic binary, plus docs: a full setup guide and a config reference The interesting part was tesd TypeScript was happy, but I spun up the whole dev stack and ran it against a real rustic binary and a real game server anyway — and immediatiler couldn’t see. My deletecommand was missing a flag and crashed every time, my snapshot filter was silently returning nothing (which broxpected the wrong outputshape, and the Dockerfile pinned a rustic version that didn’t exist. Two of those would have shipped a featureothing. After fixing them, Iwatched the full create → restore → delete flow run clean through the real panel-to-daemon path: a snapestored from it, and deleting it cleared the snapshot and reclaimed the space. Not a flashy feature, but it means you can now keep way more backups for way less disk — and it was a good remindere near “it works.”"}, {"post_id": 21432, "ts": "2026-07-03T11:43:08Z", "hours": 18.1886, "text": "Today I added permission templates to Realm, my game server panel. Previously, when you wanted to give someone limited access to your server, you had to manually check off permissions one by one from a list of 60+ options every single time — annoying if you’re managing several servers with a team. Now you can save a named template (like “Moderator” or “Console Operator”) with a specific set of permissions once, and apply it with a single click whenever you invite or edit a subuser. It shows up right alongside the built-in presets in the invite/edit UI. What I built: A new subuser_permission_templates table, scoped per-account so each user manages their own templates A small Laravel API (create/list/update/delete) that validates permissions against the real whitelist so templates can never smuggle in a permission you’re not allowed to grant A new “Permission Templates” page under Account settings — pick a name, check the permissions you want, save Wired the templates into the existing subuser invite/edit forms so they appear as one-click buttons next to “View only”, “Operator”, “Manager”, etc. Tested it end-to-end in the browser: created a “Console Operator” template with console+start permissions, confirmed it landed in the database correctly, then applied it while inviting a user and watched it auto-select the right 2 permissions instantly. Small feature, but it’s the kind of thing that saves real time once you’re managing more than one or two servers with a team."}, {"post_id": 5577, "ts": "2026-06-09T12:51:30Z", "hours": 20.0064, "text": "Spent the last few days deep in the parts of Realm that people actually touch every day, and honestly it’s the stuff I’m most proud of so far. The file manager got a real overhaul. The old flow felt clunky. too many round trips, slow loads on big directories, and editing a config meant fighting the UI more than the file. I rebuilt how the panel talks to the daemon for file operations so listing, uploading, and editing all feel instant now. Dragging files around, renaming, moving things between folders. it just works the way you’d expect it to, without the lag that used to make me wince. The plugin manager is the other big one. Instead of telling people to SSH in and drop jars into a folder by hand, you can now browse, install, and manage plugins straight from the panel. It pulls the right versions, handles the install, and keeps track of what’s actually running on the server. Watching a plugin install from a button click the first time it worked end to end was a genuinely good moment. There’s also been a lot of quieter work under the hood. subdomain provisioning is wired in now so spinning up a server gives you something reachable without manual DNS fiddling, and I cleaned up a pile of reliability issues in the server management layer that were causing weird edge-case failures. More to come. Still a lot I want to ship."}, {"post_id": 2909, "ts": "2026-06-05T20:16:05Z", "hours": 1.4078, "text": "Devlog — 2026-06-05 — VersionChangerController Fix An issue was identified in VersionChangerController where the install process attempted to reuse the getDownloadUrl() route method by creating a standard Laravel Request object and passing it directly to the method. The getDownloadUrl() method is designed as a route action and expects a GetDownloadUrlRequest instance. Because a regular Illuminate\\Http\\Request was passed instead, Laravel could not satisfy the method’s type requirements, resulting in a TypeError during execution. To resolve this, the download URL resolution logic was separated from the request handling layer. A new protected helper method, resolveDownloadUrl(?string $type, ?string $version): array, was introduced to contain the shared business logic. The getDownloadUrl() endpoint now reads the validated request parameters and delegates the actual resolution work to the helper method, preserving route validation behavior. The install() method was updated to call resolveDownloadUrl() directly, eliminating the need to construct or fake request objects internally. As part of the cleanup, the unused Illuminate\\Http\\Request import was removed. Modified file: panel/app/Http/Controllers/Api/Client/Servers/VersionChangerController.php For future development, any controller methods that require the same resolution logic should call the helper directly rather than attempting to reuse route actions with manually constructed Request instances."}, {"post_id": 2813, "ts": "2026-06-05T17:14:08Z", "hours": 12.0089, "text": "Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features."}]...
|
Title: Realm Panel by @Stijn | Stardance
Devlogs: Title: Realm Panel by @Stijn | Stardance
Devlogs:
Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.
Devlog — 2026-06-05 — VersionChangerController Fix An issue was identified in VersionChangerController where the install process attempted to reuse the getDownloadUrl() route method by creating a standard Laravel Request object and passing it directly to the method. The getDownloadUrl() method is designed as a route action and expects a GetDownloadUrlRequest instance. Because a regular Illuminate\Http\Request was passed instead, Laravel could not satisfy the method’s type requirements, resulting in a TypeError during execution. To resolve this, the download URL resolution logic was separated from the request handling layer. A new protected helper method, resolveDownloadUrl(?string $type, ?string $version): array, was introduced to contain the shared business logic. The getDownloadUrl() endpoint now reads the validated request parameters and delegates the actual resolution work to the helper method, preserving route validation behavior. The install() method was updated to call resolveDownloadUrl() directly, eliminating the need to construct or fake request objects internally. As part of the cleanup, the unused Illuminate\Http\Request import was removed. Modified file: panel/app/Http/Controllers/Api/Client/Servers/VersionChangerController.php For future development, any controller methods that require the same resolution logic should call the helper directly rather than attempting to reuse route actions with manually constructed Request instances.
Spent the last few days deep in the parts of Realm that people actually touch every day, and honestly it’s the stuff I’m most proud of so far. The file manager got a real overhaul. The old flow felt clunky. too many round trips, slow loads on big directories, and editing a config meant fighting the UI more than the file. I rebuilt how the panel talks to the daemon for file operations so listing, uploading, and editing all feel instant now. Dragging files around, renaming, moving things between folders. it just works the way you’d expect it to, without the lag that used to make me wince. The plugin manager is the other big one. Instead of telling people to SSH in and drop jars into a folder by hand, you can now browse, install, and manage plugins straight from the panel. It pulls the right versions, handles the install, and keeps track of what’s actually running on the server. Watching a plugin install from a button click the first time it worked end to end was a genuinely good moment. There’s also been a lot of quieter work under the hood. subdomain provisioning is wired in now so spinning up a server gives you something reachable without manual DNS fiddling, and I cleaned up a pile of reliability issues in the server management layer that were causing weird edge-case failures. More to come. Still a lot I want to ship.
Today I added permission templates to Realm, my game server panel. Previously, when you wanted to give someone limited access to your server, you had to manually check off permissions one by one from a list of 60+ options every single time — annoying if you’re managing several servers with a team. Now you can save a named template (like “Moderator” or “Console Operator”) with a specific set of permissions once, and apply it with a single click whenever you invite or edit a subuser. It shows up right alongside the built-in presets in the invite/edit UI. What I built: A new subuser_permission_templates table, scoped per-account so each user manages their own templates A small Laravel API (create/list/update/delete) that validates permissions against the real whitelist so templates can never smuggle in a permission you’re not allowed to grant A new “Permission Templates” page under Account settings — pick a name, check the permissions you want, save Wired the templates into the existing subuser invite/edit forms so they appear as one-click buttons next to “View only”, “Operator”, “Manager”, etc. Tested it end-to-end in the browser: created a “Console Operator” template with console+start permissions, confirmed it landed in the database correctly, then applied it while inviting a user and watched it auto-select the right 2 permissions instantly. Small feature, but it’s the kind of thing that saves real time once you’re managing more than one or two servers with a team.
Today I added deduplicated, encrypted backups to Realm, my game server panel. Previously every backup was a full .tar.gz archive — so backing up a 125MB server ten times ate over a gigabyte of disk, even though almost nothing changed between backups. Painful if you want frequent backups. Now backups can run through rustic, a Rust backup tool that deduplicates and encrypts data. Ten backups of that same server now cost a fraction of the disk, because identical blocks are stored once and shared across every snapshot. You can turn it on per node, or set it as the panel-wide default — one dropdown in the node settings. What I built: A new rustic backup adapter in Wings (the Go daemon), covering the full lifecycle: init the repository, back up on delete. Since rustic hasno Go bindings I shell out to the binary, with a per-repository lock so concurrent backups on a shared node repgo through env vars, neverthe process args, and the repo is daemon-owned so game containers never see the path or password. A backup_adapter column on nodes (plus migration) and the panel-side logic to pick the adapter, with a per-nodes a global backupdestination. A “Backup adapter” dropdowd hiding the Download buttonfor rustic backups since they live in a shared repo instead of as one downloadable file. A production Docker image that bundles the rustic binary, plus docs: a full setup guide and a config reference The interesting part was tesd TypeScript was happy, but I spun up the whole dev stack and ran it against a real rustic binary and a real game server anyway — and immediatiler couldn’t see. My deletecommand was missing a flag and crashed every time, my snapshot filter was silently returning nothing (which broxpected the wrong outputshape, and the Dockerfile pinned a rustic version that didn’t exist. Two of those would have shipped a featureothing. After fixing them, Iwatched the full create → restore → delete flow run clean through the real panel-to-daemon path: a snapestored from it, and deleting it cleared the snapshot and reclaimed the space. Not a flashy feature, but it means you can now keep way more backups for way less disk — and it was a good remindere near “it works.”
Today was a full pass on Realm’s server panel: three feature threads (dashboard, AI, DNS) and a long UI-consistency sweep, capped off by one infra bug that had been silently breaking every dynamic setting in the panel. Started with the dashboard: replaced the old card-style ServerRow list with a proper ServerTable — sortable by name and game type, with circular progress indicators for resource usage instead of flat bars. Added a public IP lookup service and a ServerInfoCard for the console page showing location, IP, and domain info at a glance. Then built an AI provider helper: admin picks one provider (Claude, OpenAI, DeepSeek, Gemini, OpenRouter, or a custom OpenAI-compatible endpoint), drops in an API key, done. No multi-provider list to manage — one row in the DB, one config screen under Settings → Advanced. Wrote three concrete provider adapters behind a shared interface (AnthropicProvider talks the native /v1/messages API, GoogleProvider handles Gemini’s role mapping, OpenAiCompatibleProvider covers everything that speaks the OpenAI wire format) so future features can just call AiService::complete() without caring which backend is configured. Also wired up Cloudflare zone management for subdomains, and gave the Console a log-upload + AI-summarize action. What I built: ServerTable (sortable dashboard) + circular resource indicators, IP lookup + ServerInfoCard Single-provider AI helper: model, factory, three adapters, admin UI, wired into Console’s summarize feature Cloudflare integration for subdomain zone/record management A full step-wizard treatment (sidebar steps, numbered circles, review step) rolled out to every creation modal that used to be a plain form: Change Version, Invite Subuser, Allocation Firewall, Create Subdomain, Create Database, Create Backup Converted Allocations, Databases, and Backups from card grids to proper tables (header row, divide-y rows, right-click context menu on allocations instead of a button pile), with the “create new” action moved to plain text + hyperlink below each table instead of a header-bar button Restyled the base Modal component itself — dropped the floating X close icon, added consistent border/radius, gave it an optional title/footer API so simple confirm dialogs get the same content-pane-plus-footer-bar layout as the wizards Footer now shows the git commit hash + panel version with a fork icon instead of a static copyright line The interesting part was two bugs that had nothing to do with what I was actively building. First: Settings → Advanced looked like it saved, but nothing actually persisted — not the AI config, not the allocation port range. Chased it through three layers: my own save logic, then a native HTML required attribute silently blocking the shared form submit, and finally the real one — SettingsServiceProvider, the class responsible for merging DB-stored settings back into Laravel’s config() on every request, was never registered in config/app.php. Every dynamic setting in the entire panel — mail, OAuth, allocations, all of it — had silently never worked, completely unrelated to anything I’d touched that day. Second: tried to delete a backup in the dev environment and got a 500. Wings was shelling out to a rustic binary that straight-up didn’t exist in the container — the Dockerfile never installed it, so every backup on this dev box had been failing since day one without anyone noticing (because dev servers don’t usually need backups). Added the install step to build/wings/Dockerfile, rebuilt the image, and the failed backup’s leftover DB row still needed a manual delete since its rustic repo was never initialized in the first place. Neither of those two bugs was flashy, but both had been quietly breaking things for a while — the kind of thing you only find when you actually click through the feature end-to-end instead of trusting that tsc passing means it works.
Today’s pass on Realm’s server panel was all file manager: ripped out the old tree-sidebar explorer and replaced it with a flat table-row browser, matching the same table-ification sweep the rest of the panel got this week (allocations, databases, backups). The old file manager was built around FileManagerTreeSidebar (643 lines), a persistent expandable tree on the side, drag-and-drop context (ExplorerDragContext, 261 lines), a separate context-menu component (FileTreeContextMenu, 401 lines), and its own icon/media/upload util files. All of that’s gone now. In its place: FileObjectRow — one row per file/folder in a 12-col grid: checkbox + icon + name, size, relative modified time, and a dropdown menu on the right. Right-click still works, it just dispatches a custom event to open the row’s own dropdown instead of mounting a separate tree context-menu component. FileDropdownMenu — replaces FileTreeContextMenu. Same actions (rename, copy, archive/extract, download, chmod, delete) but scoped per-row instead of per-tree-node. FileManagerBreadcrumbs — simple path breadcrumb bar, replacing the always-visible tree for navigation. SelectFileCheckbox — per-row selection, feeding the existing MassActionsBar for bulk delete/move. FileManagerContainer — rewritten around the new row list (585 lines touched, net smaller). Also folded PullFileButton into NewDirectoryButton (renamed file, kept git history via rename-detection) and moved NewDirectoryButton + SftpDetailsButton off the old Dialog/asDialog HOC pattern onto the shared Modal component — same one now used by all the wizard modals across the panel, so file manager dialogs finally look consistent with everything else instead of being the last holdout on the old dialog system. Net effect: 38 files touched, ~1,150 lines added, ~4,250 removed. Deleted six now-dead util files outright (archivePathUtils, fileExplorerDrag, fileMediaUtils, fileTreeIcons, fileUploadUtils, useFileEditingPresence) along with their routes in routes.ts. No behavior loss — same actions available, just row-based instead of tree-based, and finally matching the modal/table conventions the rest of the panel converged on this week.
Spent today mostly cleaning up how the panel actually looks instead of adding new stuff. Started because the Activity Log page just looked off next to Settings, turned out it was using its own hardcoded hex colors instead of the actual design tokens, so I went through and fixed that. Then I noticed the whole Account section (API keys, SSH keys, permission templates, all of it) had the exact same problem, every page had basically copy pasted the same fake card styling by hand instead of using the real component. Fixed all five pages while I was at it. Also turned Permission Templates into its own little “Environment” section with a sidebar, mostly so I have somewhere to dump future account wide settings later without having to rebuild the page again. Got told the permission checkboxes looked bad (fair, they did, gray boxes that didn’t match anything) so rewrote those too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while. ✻ Brewed for 6s · 3 shells still running ❯ can u now implement a demo mode on a new branch…. just that the instance resets every hour. so the node and the panel reset every 1 hour. accounts get reset back. players get admin but they cant ruin everything because panel gets resetted each hour too, normal casing instead of uppercase everywhere, nicer list layout instead of a grid of boxes. That led me into the confirm dialogs since those had the same gray leftover style, so now every delete confirmation in the app actually matches the rest of the panel instead of being a random gray popup. Ended the day renaming the URLs, /server became /instance and /account became /user, just cleaner and more consistent with how the rest of the panel is named. Sounds simple but had to make sure old links and bookmarks still work and that the 2FA redirect didn’t break, that part was hardcoded into a Laravel route so easy to miss. Nothing groundbreaking today, just a lot of small stuff that was bugging me for a while.
Ships:
Realm is a modern, ground-up reimagining of the Pterodactyl game server management panel. Instead of forking and patching an existing codebase, I’m rebuilding the platform from scratch with a focus on performance, maintainability, and a better developer and user experience. The goal is to provide a cleaner architecture, improved usability, and a foundation that can support future hosting and automation features.
Realm is a modern, ground-up reimagining of the Pterodactyl Panel, rebuilt from scratch with a focus on performance, maintainability, automation, and developer experience. Instead of patching an existing codebase, Realm introduces a cleaner architecture designed for the future of game server hosting. During Stardance, Realm evolved from a prototype into a much more complete server management platform. What was built Complete server panel redesign Reworked dashboards, tables, modals, and workflows for a more consistent UI. Converted old card-based interfaces into faster, cleaner table-based views. Added improved server information displays, resource indicators, and public IP lookup. Advanced file management Replaced the old tree-based explorer with a modern row-based file browser. Added faster navigation, bulk actions, improved context menus, breadcrumbs, and cleaner dialogs. Removed outdated components and simplified the architecture. Plugin management Added a built-in plugin manager so users can install and manage server plugins directly from the panel instead of manually uploading files. Automation & infrastructure Added Cloudflare integration for automatic subdomain provisioning. Improved server lifecycle management and reliability. Added support for deduplicated and encrypted backups using rustic, reducing storage usage while improving backup capabilities. AI integration Built a flexible AI provider system supporting providers such as OpenAI, Anthropic, Google Gemini, DeepSeek, OpenRouter, and custom OpenAI-compatible APIs. Added AI-powered console log summaries. Permissions & collaboration Added reusable permission templates for teams. Users can create custom roles and quickly apply them when managing server access. Engineering improvements A major focus was not only adding features, but improving the foundation: Large backend refactors for better maintainability. Shared service architecture for integrations. Improved validation and configuration handling. Fixed hidden infrastructure issues affecting settings persistence and backups. Removed thousands of lines of outdated code while simplifying the codebase. Results In roughly 42 hours of development during Stardance, Realm grew into a significantly more complete game server management platform: Modernized user experience Faster file operations Automated server provisioning Better backups AI-assisted management Team collaboration features Cleaner, more scalable architecture Realm’s goal is simple: make managing game servers feel less like operating infrastructure and more like using a modern developer platform.
Just a beautiful panel...
|
1793105487.8209662
|
1793191887.8209662
|
|
8333
|
CoinCounter by @fast | Stardance
|
fast
|
1
|
65.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T18:28:50Z", "hours": 65.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Coin-Counter, an app that lets you upload a picture of your loose change or bills and counts them instantly. It supports USD, EUR, and PLN currencies. The hardest part of the entire project was easily the dataset, finding, cleaning, and combining images for all these different coins and banknotes was a massive headache. But after training the model on over 100k images for 30+ hours across multiple attempts, it actually works! The web app has a clean, responsive UI with interactive sliders to tweak detection sensitivity. You can run the entire project easily using Docker Compose, just make sure you have Git LFS installed on your system before cloning so the actual model file downloads correctly!", "repo": "https://github.com/Student-FastDev/Coin-Counter", "demo": "http://34.42.9.202:8080/"}]...
|
[{"post_id": 13256, "ts": "202 [{"post_id": 13256, "ts": "2026-06-21T18:22:02Z", "hours": 51.9564, "text": "Okay, it’s been a while… I’ve been struggling with this project for a long time. First, cleaning up a massive amount of data took ages. By the end, I had around 100k images in total! Then came the training… and honestly, ugh. Constant tweaks and trial-and-error almost drove me insane. The total training time is surely 100+ hours, considering all the restarts and reruns. But finally, I’ve got something like a working model, and that’s what I’m sharing now. I’ve also finished the frontend, and everything is finally available for you to try. It’s also open-source (though I couldn’t share the dataset due to uncertain sources and potential legal concerns). Any feedback is greatly appreciated!"}, {"post_id": 3393, "ts": "2026-06-06T09:18:34Z", "hours": 12.5683, "text": "So I’m building an app that counts money from a photo, but honestly, local training has been a total nightmare. Spent 12 hours straight just cleaning and stitching datasets together, only for training on my 3070 to go horribly because of VRAM limits forcing me to downscale everything. Looking at the test image, you can see it’s detecting something, but it completely misses the fine details and fails to classify them because it has zero concept of relative sizes. I’m pivoting to a Transformer-based model (RF-DETR) so it can actually look at the whole picture and compare coin sizes better. Renting a beefy GPU in the cloud to do the training.🙄"}]...
|
Title: CoinCounter by @fast | Stardance
Devlogs:
Title: CoinCounter by @fast | Stardance
Devlogs:
So I’m building an app that counts money from a photo, but honestly, local training has been a total nightmare. Spent 12 hours straight just cleaning and stitching datasets together, only for training on my 3070 to go horribly because of VRAM limits forcing me to downscale everything. Looking at the test image, you can see it’s detecting something, but it completely misses the fine details and fails to classify them because it has zero concept of relative sizes. I’m pivoting to a Transformer-based model (RF-DETR) so it can actually look at the whole picture and compare coin sizes better. Renting a beefy GPU in the cloud to do the training.🙄
Okay, it’s been a while… I’ve been struggling with this project for a long time. First, cleaning up a massive amount of data took ages. By the end, I had around 100k images in total! Then came the training… and honestly, ugh. Constant tweaks and trial-and-error almost drove me insane. The total training time is surely 100+ hours, considering all the restarts and reruns. But finally, I’ve got something like a working model, and that’s what I’m sharing now. I’ve also finished the frontend, and everything is finally available for you to try. It’s also open-source (though I couldn’t share the dataset due to uncertain sources and potential legal concerns). Any feedback is greatly appreciated!
Ships:
I built Coin-Counter, an app that lets you upload a picture of your loose change or bills and counts them instantly. It supports USD, EUR, and PLN currencies. The hardest part of the entire project was easily the dataset, finding, cleaning, and combining images for all these different coins and banknotes was a massive headache. But after training the model on over 100k images for 30+ hours across multiple attempts, it actually works! The web app has a clean, responsive UI with interactive sliders to tweak detection sensitivity. You can run the entire project easily using Docker Compose, just make sure you have Git LFS installed on your system before cloning so the actual model file downloads correctly!...
|
1792997537.879329
|
1793083937.879329
|
|
18050
|
Game Website by @wrogers1616 | Stardance
|
wrogers1616
|
1
|
65.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T02:15:13Z", "hours": 65.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website that contains the games I made over the summer. This version isn’t fully functional without using external sites as I had trouble with conflicting variables.", "repo": "https://github.com/wrogers1616-byte/button-games", "demo": "https://onecompiler.com/html/44pfq4e8p"}]...
|
[{"post_id": 47254, "ts": "202 [{"post_id": 47254, "ts": "2026-08-15T01:51:39Z", "hours": 64.9825, "text": "I created a website with multiple games on it"}]...
|
Title: Game Website by @wrogers1616 | Stardance
D Title: Game Website by @wrogers1616 | Stardance
Devlogs:
I created a website with multiple games on it
Ships:
I made a website that contains the games I made over the summer. This version isn’t fully functional without using external sites as I had trouble with conflicting variables....
|
1792990301.3591309
|
1793076701.3591309
|
|
20899
|
Personal Site by @ethan_soh | Stardance
|
ethan_soh
|
2
|
65.0
|
22
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T06:54:38Z", "hours": 29.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an about page. This about page now has more images of me and explains my interests. It’s mostly there to show a more personal version of me.", "repo": "https://github.com/quantamShade0337/quantamShade0337.github.io", "demo": "https://ethansoh.com/"}, {"ship_num": 2, "ts": "2026-06-17T14:49:44Z", "hours": 36.0, "multiplier": 2.23, "payout": 22, "blessing": "neutral", "text": "This is a personal site. It is like a portfolio.", "repo": "https://github.com/quantamShade0337/quantamShade0337.github.io", "demo": "https://ethansoh.com/"}]...
|
[{"post_id": 57121, "ts": "202 [{"post_id": 57121, "ts": "2026-08-29T06:53:08Z", "hours": 22.6492, "text": "I added a About page where it goes in more detail who I am and what I do while the main page hosts mainly my achievements or stats."}, {"post_id": 12446, "ts": "2026-06-20T09:39:58Z", "hours": 6.6394, "text": "I fixed the footer, changed some content and added a feature where it shows your github activity. Also I made the 404 for the site."}, {"post_id": 10652, "ts": "2026-06-17T14:46:05Z", "hours": 35.975, "text": "I have made a V1"}]...
|
Title: Personal Site by @ethan_soh | Stardance
De Title: Personal Site by @ethan_soh | Stardance
Devlogs:
I have made a V1
I fixed the footer, changed some content and added a feature where it shows your github activity. Also I made the 404 for the site.
I added a About page where it goes in more detail who I am and what I do while the main page hosts mainly my achievements or stats.
Ships:
This is a personal site. It is like a portfolio.
I made an about page. This about page now has more images of me and explains my interests. It’s mostly there to show a more personal version of me....
|
1793094690.9163172
|
1793181090.9163172
|
|
30670
|
ScorePredict by @mersecske | Stardance
|
mersecske
|
1
|
65.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T19:40:53Z", "hours": 65.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hey, I made a football score predicter web application, using my own AI-model. The most challenging part was, that I barely knew anything about python, so I learned a lot while I was doing this project. Some information for testing: predicting football matches are relly difficult, at this sport really much depends on luck my model hardly ever predicts below 1 goal or above 2 goals (this is statistically correct) in the most cases it says that the home team will win (this is statistically correct too) I hope, you like it!!", "repo": "https://github.com/Brtz17/ScorePredict", "demo": "https://scorepredict.appwrite.network/"}]...
|
[{"post_id": 48119, "ts": "202 [{"post_id": 48119, "ts": "2026-08-16T12:32:07Z", "hours": 0.5431, "text": "#DEVLOG 10# I published my project, you can find it here: https://scorepredict.appwrite.network/ Some information: predicting football matches are relly difficult, at this sport really much depends on luck my model hardly ever predicts below 1 goal or above 2 goals (this is statistically correct) in the most cases it says that the home team will win (this is statistically correct too)"}, {"post_id": 47652, "ts": "2026-08-15T18:09:05Z", "hours": 9.9911, "text": "#DEVLOG 9# I can’t belive, that after some backend-adjustments and frontend-upgrade, my ScorePredict site is now ready!! I only have to make it accessible through world-wide-web (haha) so I can finally ship this project too. What do you think of it? Do you have any suggestions? PS.: all of lagging in the video is because of my notebook’s weaknesses"}, {"post_id": 42526, "ts": "2026-08-07T10:09:49Z", "hours": 11.3422, "text": "#DEVLOG 8# I can’t belive that I’m ready with the backend!! It took a LOT of time, I redeployed everything about 50 times. But for now it is done. The next (and hopefully the last) step is finalizing the frontend. Stay tuned!!"}, {"post_id": 33034, "ts": "2026-07-22T16:20:40Z", "hours": 3.8581, "text": "#DEVLOG 7# Today I made the frontend sites with sample data. It’s not the most beautiful website I’ve ever seen, but this will be enough for now. I’ll continue working on it, when I’ll have got a working backend. What to do now? Getting future matches’ data, write some code that puts together all of the neccesary information, etc."}, {"post_id": 32669, "ts": "2026-07-21T23:42:24Z", "hours": 0.4628, "text": "#DEVLOG 6# Check this out! I quickly made a demo how the UI will look like! (I didn’t add text, because it is not so easy to use this website😅) Left side: It’s the home page, there will be the future matches shown. When clicking, it navigates to the match’s page, which is on the right side. Right side: Match site. There is the xG (expected goals) and the outcome’s likelihood (home/draw/away). What do you think? What would you do differently?"}, {"post_id": 32604, "ts": "2026-07-21T21:39:09Z", "hours": 8.7167, "text": "#DEVLOG 5# I worked on adding another aspect to my AI model. I tried to somehow quantify a team’s (before-match) motivation. I successfully added this to the model, but it just made it worse. I also recently found a bug, I used future data while calculating the strength of attacking and defending. At this point: I’ve tried almost everything to make my model more accurate I lost my motivation to work more on the backend SOOO, I’ll finally begin working on the frontend🥳🥳"}, {"post_id": 26798, "ts": "2026-07-11T20:00:55Z", "hours": 9.9808, "text": "#DEVLOG 4# Okay, guys, I’ve finally found the cause of the issue. It was not in the code, it was in my mind.🤦♂️If I wanted the model to predict a draw, it would lose by accuracy. To understand this I made some calculations: away: 7341 matches - 31,6% draw: 5522 matches - 23,8% home: 10368 matches - 44,6% SUM: 23231 matches In a nutshell: It NEVER worth it to predict a draw! Now that I “solved” this problem, I can focus on increasing accuracy: adding more aspects, finding bugs, etc."}, {"post_id": 25229, "ts": "2026-07-09T11:08:56Z", "hours": 8.4786, "text": "#DEVLOG 3# This is just a quick devlog from me. I have some issues. The main thing is what I have already written about: the model NEVER EVER predicts a draw. ( It is because of the mechanism of Poisson-model… ). I tried different methods to solve this problem, but none of them worked. There is 2 ways to solve this: Get a bigger dataset. But the API that I’m using provides only 100 calls/day which is a really small number. So I would need to pay, which I don’t really want. (In the very unexpected case you want to fund my project, DM me @be .the.nike) There is a model that corrigates the torsion of Poisson-model. BUT AI said to me that to achive this I will have to kind of write my own AI model training algorithm. And this sounds really scary to me Cheer for me! Some good news at the end: my model is a tiny little bit better in predicting the winner of a match than betting offices!"}, {"post_id": 24417, "ts": "2026-07-07T23:24:37Z", "hours": 10.0794, "text": "#DEVLOG 2# I haven’t posted devlog for a while. But I was working hard. I ran the secind evaluation of the Poisson regression model (the first model was so unreliable that it don’t desire to mention). Results: Outcome (H/D/A) accuracy: 54.1% ± 2.1% Goal-count prediction (Poisson deviance): 1.13 Feature importances look sensible: team_attack, opp_defense, is_home are the strongest signals Weakness: model almost never predicts draws I tried a “draw margin” trick, but it didn’t work Next options (ideas only, none started yet): Add Elo rating (instead of current attack/defense strength method) Dixon-Coles correction to address draw underestimation Incorporate missing key players as a feature (it costs too many API calls) Tune alpha hyperparameter This is my first project written in Python so I’m still learning pretty much. I’ll push my progress to Github as soon as I can produce accurate enough predictions. Be patient, I’m doing my best! Arrivederci, Auf Wiedersehen, Goodbye, A viszontlátásra!!"}, {"post_id": 22316, "ts": "2026-07-04T18:35:47Z", "hours": 1.8283, "text": "#DEVLOG 1# I started to work on a website that predicts the scores of a football match. I’ll make my own AI model to create it. To do so my first task is to get a database. There are a lot of APIs on the internet but just a few of them provides a service without any limitations. I’ve finally find one on Github . So I started to work on it and format the data. BUT after ~2 hours I realized, it wouldn’t work. The reason why it wouldn’t work: I wrote some criteria that this AI model should consider. And the Github repo did not fit to it. Sooo I’ll start over with a new provider. By the way, here are the aspects I was talking about:"}]...
|
Title: ScorePredict by @mersecske | Stardance
Dev Title: ScorePredict by @mersecske | Stardance
Devlogs:
#DEVLOG 1# I started to work on a website that predicts the scores of a football match. I’ll make my own AI model to create it. To do so my first task is to get a database. There are a lot of APIs on the internet but just a few of them provides a service without any limitations. I’ve finally find one on Github . So I started to work on it and format the data. BUT after ~2 hours I realized, it wouldn’t work. The reason why it wouldn’t work: I wrote some criteria that this AI model should consider. And the Github repo did not fit to it. Sooo I’ll start over with a new provider. By the way, here are the aspects I was talking about:
#DEVLOG 2# I haven’t posted devlog for a while. But I was working hard. I ran the secind evaluation of the Poisson regression model (the first model was so unreliable that it don’t desire to mention). Results: Outcome (H/D/A) accuracy: 54.1% ± 2.1% Goal-count prediction (Poisson deviance): 1.13 Feature importances look sensible: team_attack, opp_defense, is_home are the strongest signals Weakness: model almost never predicts draws I tried a “draw margin” trick, but it didn’t work Next options (ideas only, none started yet): Add Elo rating (instead of current attack/defense strength method) Dixon-Coles correction to address draw underestimation Incorporate missing key players as a feature (it costs too many API calls) Tune alpha hyperparameter This is my first project written in Python so I’m still learning pretty much. I’ll push my progress to Github as soon as I can produce accurate enough predictions. Be patient, I’m doing my best! Arrivederci, Auf Wiedersehen, Goodbye, A viszontlátásra!!
#DEVLOG 3# This is just a quick devlog from me. I have some issues. The main thing is what I have already written about: the model NEVER EVER predicts a draw. ( It is because of the mechanism of Poisson-model… ). I tried different methods to solve this problem, but none of them worked. There is 2 ways to solve this: Get a bigger dataset. But the API that I’m using provides only 100 calls/day which is a really small number. So I would need to pay, which I don’t really want. (In the very unexpected case you want to fund my project, DM me @be .the.nike) There is a model that corrigates the torsion of Poisson-model. BUT AI said to me that to achive this I will have to kind of write my own AI model training algorithm. And this sounds really scary to me Cheer for me! Some good news at the end: my model is a tiny little bit better in predicting the winner of a match than betting offices!
#DEVLOG 4# Okay, guys, I’ve finally found the cause of the issue. It was not in the code, it was in my mind.🤦♂️If I wanted the model to predict a draw, it would lose by accuracy. To understand this I made some calculations: away: 7341 matches - 31,6% draw: 5522 matches - 23,8% home: 10368 matches - 44,6% SUM: 23231 matches In a nutshell: It NEVER worth it to predict a draw! Now that I “solved” this problem, I can focus on increasing accuracy: adding more aspects, finding bugs, etc.
#DEVLOG 5# I worked on adding another aspect to my AI model. I tried to somehow quantify a team’s (before-match) motivation. I successfully added this to the model, but it just made it worse. I also recently found a bug, I used future data while calculating the strength of attacking and defending. At this point: I’ve tried almost everything to make my model more accurate I lost my motivation to work more on the backend SOOO, I’ll finally begin working on the frontend🥳🥳
#DEVLOG 6# Check this out! I quickly made a demo how the UI will look like! (I didn’t add text, because it is not so easy to use this website😅) Left side: It’s the home page, there will be the future matches shown. When clicking, it navigates to the match’s page, which is on the right side. Right side: Match site. There is the xG (expected goals) and the outcome’s likelihood (home/draw/away). What do you think? What would you do differently?
#DEVLOG 7# Today I made the frontend sites with sample data. It’s not the most beautiful website I’ve ever seen, but this will be enough for now. I’ll continue working on it, when I’ll have got a working backend. What to do now? Getting future matches’ data, write some code that puts together all of the neccesary information, etc.
#DEVLOG 8# I can’t belive that I’m ready with the backend!! It took a LOT of time, I redeployed everything about 50 times. But for now it is done. The next (and hopefully the last) step is finalizing the frontend. Stay tuned!!
#DEVLOG 9# I can’t belive, that after some backend-adjustments and frontend-upgrade, my ScorePredict site is now ready!! I only have to make it accessible through world-wide-web (haha) so I can finally ship this project too. What do you think of it? Do you have any suggestions? PS.: all of lagging in the video is because of my notebook’s weaknesses
#DEVLOG 10# I published my project, you can find it here: https://scorepredict.appwrite.network/ Some information: predicting football matches are relly difficult, at this sport really much depends on luck my model hardly ever predicts below 1 goal or above 2 goals (this is statistically correct) in the most cases it says that the home team will win (this is statistically correct too)
Ships:
Hey, I made a football score predicter web application, using my own AI-model. The most challenging part was, that I barely knew anything about python, so I learned a lot while I was doing this project. Some information for testing: predicting football matches are relly difficult, at this sport really much depends on luck my model hardly ever predicts below 1 goal or above 2 goals (this is statistically correct) in the most cases it says that the home team will win (this is statistically correct too) I hope, you like it!!...
|
1792878679.6634135
|
1793742679.6634135
|
|
33211
|
robot - intake and frame by @kaylawong | Stardance
|
kaylawong
|
1
|
65.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T06:59:07Z", "hours": 65.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Alongside a team of 2 other high schoolers, I helped to make a robot that can intake balls, shoot balls, and navigate across an obstacle course. It was originally intended to be autonomous, but we wanted to focus more on the mechanical systems that were on the robot. I was in charge of designing and assembling the intake subsystem. It was very challenging to fit within the design constraints that we were provided but it was very rewarding once I saw my CAD come to life! This was my first time having something I designed online turn into something physical, so I was very surprised that when all my parts got shipped that it all came together nicely. I did this under a summer program in collaboration with Stardance called Definity Education Summer Camp and it was fun going through trial and error to see what worked and didn’t work. The hardest part was definitely having to make everything from scratch and not buying pre-made FTC or VEX parts, like getting our sheet metal manufactured was a risk in itself! But it was totally worth it.", "repo": "https://github.com/kwong09/definity-robot-project", "demo": ""}]...
|
[{"post_id": 49407, "ts": "202 [{"post_id": 49407, "ts": "2026-08-18T06:55:42Z", "hours": 0.7392, "text": "i just updated our limit switch arm because it ended up snapping!! i thickened the arm and i also included a filleted part to prevent it from snapping so easily. that’s it for today!!"}, {"post_id": 45502, "ts": "2026-08-12T01:25:13Z", "hours": 1.4008, "text": "i finally have a good idea on how to slice for bambu printers!! i did a lot of 3d printing today, and i started by reprinting the side funnel walls . i also helped to make an attachment so that the limit switch would be pressed once the intake has pivoted past a certain point, to make sure it doesn’t touch the ground. it is definitely not the best solution but i was able to make it work with a bunch of tape and 3d print iterations !!"}, {"post_id": 45015, "ts": "2026-08-11T04:49:30Z", "hours": 1.3597, "text": "we finally got our intake and shooter to work! i mostly helped by tensioning the neoprene rubber strips and using rubber glue to secure it. earlier, i was trying to make a 3d print to make it easier to cut the rubber strip so that it can be cut at an angle, allowing me to overlap the rubber without making the conveyor too thick. however, that didn’t end up working because the rubber was difficult to cut, so we just decided to glue one on top of the other. one issue we ran into was that on the overlapped portion, it would jam into the pulley for the shooter. this was eventually fixed by cutting the part of the rubber conveyor that was too thick and would hit the pulley! with the extra scraps of rubber that i messed up on, i made a little dude with scissors"}, {"post_id": 42302, "ts": "2026-08-06T23:08:39Z", "hours": 2.22, "text": "i had to take apart and reassemble the intake because the pulleys were on the wrong side… since the pulley on the motor shaft doesn’t fit over the set screw on the shaft, the final belt had to be on the opposite side, so i had to take everything apart :’) my teammate attached the shooter system onto the intake after i was done, so our robot is finally coming together!!"}, {"post_id": 41685, "ts": "2026-08-06T01:53:41Z", "hours": 4.1467, "text": "i worked on assembling the intake, which was mostly the last part of the day today. we got our metal parts in the afternoon ish, so earlier in the day i was working on the guides to funnel the balls into the intake. i also continued refining the cad so now it looks like this!! the intake itself is working decently okay, i have to attach the motor tomorrow. one problem is that i have to wrap around the rubber onto the conveyor, otherwise there is no contact from the rollers on the conveyor to the tennis balls."}, {"post_id": 40444, "ts": "2026-08-03T23:22:04Z", "hours": 1.8822, "text": "on friday and today, i mounted the 3d prints to the shafts to start assembling the intake. i was struggling to attach a lot of these parts to the shafts because a layer of the prints kept on stopping the shaft from going all the way through. someone else had to hammer the parts onto the shafts in order for it to work :’) we’re still waiting on our metal part that will contain all of our intake parts, but we do have other components printed. our rollers were printed using TPU, and we also got our pulleys and shaft collars finished as well. we also have very very colorful filament now!!"}, {"post_id": 38275, "ts": "2026-07-31T16:14:36Z", "hours": 3.4442, "text": "yesterday i worked on making the shaft collars and pulleys to print out. our pulley prints were not very successful, but the shaft collars turned out great. i downloaded a free shaft collar file from this link and i changed the size of the screw hole, the width, and i adjusted it so there were two flat ends (so we could use a screw and nut). my team also cut the shafts so we can start making our intake"}, {"post_id": 37470, "ts": "2026-07-30T07:37:50Z", "hours": 4.8083, "text": "today i iterated more on the design of the intake. after printing the pulleys, we realized the belt was slipping and skipping teeth on the pulleys because we were using GT2 belts. we’re now pivoting to HTD-5M belts so we can hopefully not have any slipping happen on our intake. we also ordered more parts and added them to our purchase list!! when the sheet metal comes, we will be able to test the fit of bearings and other parts as well."}, {"post_id": 36860, "ts": "2026-07-29T05:58:16Z", "hours": 3.6517, "text": "here’s an update on what the robot has been doing! i haven’t been working much on the driving part, so my teammates did a majority of figuring out how to navigate the course and how to drive. our robot was able to make it over the hill (but it flipped over if you watch the video lol). i am still working on the intake, but i have gotten further by printing out some pulleys and some shaft to bearing attachments we might use on the robot. tomorrow we will hopefully order sheet metal to hold our intake system. also, one of our prints turned into a blob"}, {"post_id": 36248, "ts": "2026-07-28T06:55:01Z", "hours": 3.0003, "text": "some of our parts for the intake arrived, so i was able to design more parts of our intake around it. i adjusted the rollers and came up with two different iterations, depending on the width of the rubber we will use to wrap around the rollers. i also measured the diameter of the hex shafts that arrived, which let me test printing out GT2 gears. i edited the gear by finding a part on McMaster-Carr and cutting out the hex shape and chopping off the extruded portion."}, {"post_id": 34463, "ts": "2026-07-25T06:02:53Z", "hours": 2.2911, "text": "i worked on our shooter design, coming up with different ways to get the tennis balls into a bucket while fitting into our size constraints. especially with having a pivot on our intake, having the motors for the flywheels in the back would add too much weight, so i am still figuring out how to get that to work. i am testing out different orientations for the motors and flywheel, such as a dual horizontal flywheel shooter and a single flywheel shooter."}, {"post_id": 33908, "ts": "2026-07-24T06:27:49Z", "hours": 3.1067, "text": "today, i worked on editing our parts that will be machined for our intake. instead of making it three pieces, we realized we could just bend one large piece of metal. for the motor mount, i added a way to allow it to tension so that when we add belts, we can adjust accordingly. i also ordered all the parts we need for the intake system, including the shafts, motor, bearings, etc. lastly, we also started planning out how our shooter would work, which we chose to do two flywheels at the end of the conveyor."}, {"post_id": 33540, "ts": "2026-07-23T16:02:48Z", "hours": 2.7739, "text": "i mostly researched different parts to purchase and further refined how the intake would work. to run the conveyor, one motor would power the first roller, then the rest would be connected by pulleys and belts. i also added a motor mount to the side plate of the intake. for the chassis itself, i extended the base plate and L-brackets so that it would be 15x15 inches, which was one of the constraints."}, {"post_id": 33069, "ts": "2026-07-22T17:19:41Z", "hours": 4.6258, "text": "yesterday i worked on combining our intake system with a pivot. i realized that there was very little space between both motors, so i moved the pivot between where two motors are, where a shaft would be placed under the intake. however, in order to fit under the 8 inch limit, the pvc pipes would have to be smaller or the walls of the intake would have to be shorter. i also started putting other components into the CAD, including the bearings, pipes, and pulleys that might be on the robot. lastly, i tried to modify the bottom pan of the robot’s frame to allow for the intake to turn downwards at a more drastic angle."}, {"post_id": 32206, "ts": "2026-07-21T06:57:44Z", "hours": 3.6667, "text": "today, my teammates and i first worked on getting the 3d printed center parts of our wheels to fit. the pneumatic wheels were really difficult to work with, especially because the prints weren’t fitting on perfectly (it took us like 1-2 hours). while the others worked on driving with the new wheels and drafting the climbing mechanism, i worked on designing our intake and shooter. i made a 3d model and a geometry sketch to figure out how the pivot would work and how our motors would be mounted. i eventually landed on this design that i will edit more tomorrow."}, {"post_id": 30481, "ts": "2026-07-18T02:59:44Z", "hours": 3.7114, "text": "i continued to work on the intake system, which we plan to do a roller and conveyor system to hold/intake the tennis balls. i found several components online and compiled them into a spreadsheet to check the costs. i ran into some issues, especially with figuring out how to pivot the entire conveyor while being able to secure the two plates so they move together."}, {"post_id": 29892, "ts": "2026-07-17T01:52:54Z", "hours": 2.0811, "text": "earlier in the day, we switched out our ESCs so now our wheels can turn in both directions. we also tried flipping over the robot to see if that would allow for a greater chassis to wheel clearance. later, we brainstormed the next steps for our robot, especially the intake and shooter as well as the climb mechanism. i spent a lot of time creating geometry sketches for different ways we can shoot the tennis balls to fit within the size constraints. we ended up choosing to do a conveyor-like system and either magnets or a cascading system for climb."}, {"post_id": 29303, "ts": "2026-07-16T04:03:55Z", "hours": 2.7892, "text": "we assembled all of our aluminum parts using rivets and tested our drive program. our wheels started to fall off because the 3d prints started to get looser on the motors, but we were able to successfully drive. although we only used our unidirectional ESCs, we were able to drive around by only going forward. the bearing pivot had issues as well, especially because when it rammed into cinderblocks it would get bent… but we were able to print containers for our electrical components (batteries, raspberry pi, arducam etc.). i was able to test my vision program to slalom around the cones, and it wasn’t exactly perfect but it was able to respond to obstacles."}, {"post_id": 28762, "ts": "2026-07-15T07:16:14Z", "hours": 5.5689, "text": "after we 3d printed more wheels and glued rubber to the pla, we got to assemble our first iteration of our robot!! we used a cardboard box temporarily, but it was very flimsy so the motors/wheels weren’t very secure. right now, we are using unidirectional ESCs so we will hopefully get bidirectional ones so our robot can go backwards. i used ai to work on a vision program so that the robot would slalom around the red cones using the raspberry pi and arducam. also, our aluminum parts finally came in so tomorrow we will get to put together more parts"}, {"post_id": 26297, "ts": "2026-07-11T00:37:57Z", "hours": 2.5231, "text": "as a team we worked on figuring out the cad for our robot. i worked on making the l-brackets using onshape. we took inspiration from the hammerhead gobilda robot that had the front two wheels on an axle which would help us when navigating the obstacles on the course. i learned how to use new features on onshape, like the sheet metal model and the flange to make bends on the model."}, {"post_id": 25600, "ts": "2026-07-09T23:22:47Z", "hours": 5.0814, "text": "we started brainstorming ideas for how our autonomous robot would look like and function. since our first goal is to just have a robot that can drive, we sketched out a drivebase and chassis. we also researched different materials, like motors, that we may need for the project. earlier, i used ai to develop a vision system on my computer to detect tennis balls."}]...
|
Title: robot - intake and frame by @kaylawong | St Title: robot - intake and frame by @kaylawong | Stardance
Devlogs:
we started brainstorming ideas for how our autonomous robot would look like and function. since our first goal is to just have a robot that can drive, we sketched out a drivebase and chassis. we also researched different materials, like motors, that we may need for the project. earlier, i used ai to develop a vision system on my computer to detect tennis balls.
as a team we worked on figuring out the cad for our robot. i worked on making the l-brackets using onshape. we took inspiration from the hammerhead gobilda robot that had the front two wheels on an axle which would help us when navigating the obstacles on the course. i learned how to use new features on onshape, like the sheet metal model and the flange to make bends on the model.
after we 3d printed more wheels and glued rubber to the pla, we got to assemble our first iteration of our robot!! we used a cardboard box temporarily, but it was very flimsy so the motors/wheels weren’t very secure. right now, we are using unidirectional ESCs so we will hopefully get bidirectional ones so our robot can go backwards. i used ai to work on a vision program so that the robot would slalom around the red cones using the raspberry pi and arducam. also, our aluminum parts finally came in so tomorrow we will get to put together more parts
we assembled all of our aluminum parts using rivets and tested our drive program. our wheels started to fall off because the 3d prints started to get looser on the motors, but we were able to successfully drive. although we only used our unidirectional ESCs, we were able to drive around by only going forward. the bearing pivot had issues as well, especially because when it rammed into cinderblocks it would get bent… but we were able to print containers for our electrical components (batteries, raspberry pi, arducam etc.). i was able to test my vision program to slalom around the cones, and it wasn’t exactly perfect but it was able to respond to obstacles.
earlier in the day, we switched out our ESCs so now our wheels can turn in both directions. we also tried flipping over the robot to see if that would allow for a greater chassis to wheel clearance. later, we brainstormed the next steps for our robot, especially the intake and shooter as well as the climb mechanism. i spent a lot of time creating geometry sketches for different ways we can shoot the tennis balls to fit within the size constraints. we ended up choosing to do a conveyor-like system and either magnets or a cascading system for climb.
i continued to work on the intake system, which we plan to do a roller and conveyor system to hold/intake the tennis balls. i found several components online and compiled them into a spreadsheet to check the costs. i ran into some issues, especially with figuring out how to pivot the entire conveyor while being able to secure the two plates so they move together.
today, my teammates and i first worked on getting the 3d printed center parts of our wheels to fit. the pneumatic wheels were really difficult to work with, especially because the prints weren’t fitting on perfectly (it took us like 1-2 hours). while the others worked on driving with the new wheels and drafting the climbing mechanism, i worked on designing our intake and shooter. i made a 3d model and a geometry sketch to figure out how the pivot would work and how our motors would be mounted. i eventually landed on this design that i will edit more tomorrow.
yesterday i worked on combining our intake system with a pivot. i realized that there was very little space between both motors, so i moved the pivot between where two motors are, where a shaft would be placed under the intake. however, in order to fit under the 8 inch limit, the pvc pipes would have to be smaller or the walls of the intake would have to be shorter. i also started putting other components into the CAD, including the bearings, pipes, and pulleys that might be on the robot. lastly, i tried to modify the bottom pan of the robot’s frame to allow for the intake to turn downwards at a more drastic angle.
i mostly researched different parts to purchase and further refined how the intake would work. to run the conveyor, one motor would power the first roller, then the rest would be connected by pulleys and belts. i also added a motor mount to the side plate of the intake. for the chassis itself, i extended the base plate and L-brackets so that it would be 15x15 inches, which was one of the constraints.
today, i worked on editing our parts that will be machined for our intake. instead of making it three pieces, we realized we could just bend one large piece of metal. for the motor mount, i added a way to allow it to tension so that when we add belts, we can adjust accordingly. i also ordered all the parts we need for the intake system, including the shafts, motor, bearings, etc. lastly, we also started planning out how our shooter would work, which we chose to do two flywheels at the end of the conveyor.
i worked on our shooter design, coming up with different ways to get the tennis balls into a bucket while fitting into our size constraints. especially with having a pivot on our intake, having the motors for the flywheels in the back would add too much weight, so i am still figuring out how to get that to work. i am testing out different orientations for the motors and flywheel, such as a dual horizontal flywheel shooter and a single flywheel shooter.
some of our parts for the intake arrived, so i was able to design more parts of our intake around it. i adjusted the rollers and came up with two different iterations, depending on the width of the rubber we will use to wrap around the rollers. i also measured the diameter of the hex shafts that arrived, which let me test printing out GT2 gears. i edited the gear by finding a part on McMaster-Carr and cutting out the hex shape and chopping off the extruded portion.
here’s an update on what the robot has been doing! i haven’t been working much on the driving part, so my teammates did a majority of figuring out how to navigate the course and how to drive. our robot was able to make it over the hill (but it flipped over if you watch the video lol). i am still working on the intake, but i have gotten further by printing out some pulleys and some shaft to bearing attachments we might use on the robot. tomorrow we will hopefully order sheet metal to hold our intake system. also, one of our prints turned into a blob
today i iterated more on the design of the intake. after printing the pulleys, we realized the belt was slipping and skipping teeth on the pulleys because we were using GT2 belts. we’re now pivoting to HTD-5M belts so we can hopefully not have any slipping happen on our intake. we also ordered more parts and added them to our purchase list!! when the sheet metal comes, we will be able to test the fit of bearings and other parts as well.
yesterday i worked on making the shaft collars and pulleys to print out. our pulley prints were not very successful, but the shaft collars turned out great. i downloaded a free shaft collar file from this link and i changed the size of the screw hole, the width, and i adjusted it so there were two flat ends (so we could use a screw and nut). my team also cut the shafts so we can start making our intake
on friday and today, i mounted the 3d prints to the shafts to start assembling the intake. i was struggling to attach a lot of these parts to the shafts because a layer of the prints kept on stopping the shaft from going all the way through. someone else had to hammer the parts onto the shafts in order for it to work :’) we’re still waiting on our metal part that will contain all of our intake parts, but we do have other components printed. our rollers were printed using TPU, and we also got our pulleys and shaft collars finished as well. we also have very very colorful filament now!!
i worked on assembling the intake, which was mostly the last part of the day today. we got our metal parts in the afternoon ish, so earlier in the day i was working on the guides to funnel the balls into the intake. i also continued refining the cad so now it looks like this!! the intake itself is working decently okay, i have to attach the motor tomorrow. one problem is that i have to wrap around the rubber onto the conveyor, otherwise there is no contact from the rollers on the conveyor to the tennis balls.
i had to take apart and reassemble the intake because the pulleys were on the wrong side… since the pulley on the motor shaft doesn’t fit over the set screw on the shaft, the final belt had to be on the opposite side, so i had to take everything apart :’) my teammate attached the shooter system onto the intake after i was done, so our robot is finally coming together!!
we finally got our intake and shooter to work! i mostly helped by tensioning the neoprene rubber strips and using rubber glue to secure it. earlier, i was trying to make a 3d print to make it easier to cut the rubber strip so that it can be cut at an angle, allowing me to overlap the rubber without making the conveyor too thick. however, that didn’t end up working because the rubber was difficult to cut, so we just decided to glue one on top of the other. one issue we ran into was that on the overlapped portion, it would jam into the pulley for the shooter. this was eventually fixed by cutting the part of the rubber conveyor that was too thick and would hit the pulley! with the extra scraps of rubber that i messed up on, i made a little dude with scissors
i finally have a good idea on how to slice for bambu printers!! i did a lot of 3d printing today, and i started by reprinting the side funnel walls . i also helped to make an attachment so that the limit switch would be pressed once the intake has pivoted past a certain point, to make sure it doesn’t touch the ground. it is definitely not the best solution but i was able to make it work with a bunch of tape and 3d print iterations !!
i just updated our limit switch arm because it ended up snapping!! i thickened the arm and i also included a filleted part to prevent it from snapping so easily. that’s it for today!!
Ships:
Alongside a team of 2 other high schoolers, I helped to make a robot that can intake balls, shoot balls, and navigate across an obstacle course. It was originally intended to be autonomous, but we wanted to focus more on the mechanical systems that were on the robot. I was in charge of designing and assembling the intake subsystem. It was very challenging to fit within the design constraints that we were provided but it was very rewarding once I saw my CAD come to life! This was my first time having something I designed online turn into something physical, so I was very surprised that when all my parts got shipped that it all came together nicely. I did this under a summer program in collaboration with Stardance called Definity Education Summer Camp and it was fun going through trial and error to see what worked and didn’t work. The hardest part was definitely having to make everything from scratch and not buying pre-made FTC or VEX parts, like getting our sheet metal manufactured was a risk in itself! But it was totally worth it....
|
1793087806.522408
|
1793174206.522408
|
|
42717
|
Flujo by @jupeme6 | Stardance
|
jupeme6
|
2
|
65.0
|
864
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T01:07:38Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? A local-first expense tracker called Flujo with an editorial / ledger aesthetic. It tracks income and expenses, has a Sankey diagram drawn from scratch on canvas (no libraries), an OCR ticket scanner, a debt settlement system for flatmates, budgets with alerts, savings goals, statistics, and CSV/JSON backup. Six betas in total. Everything is in localStorage, no backend, no account, PWA installable for offline use. What was challenging? The Sankey diagram was the hardest. Built it with bezier curves on canvas, had to fix proportional sizing and ribbon flow. The OCR scanner had a bug where it would hang forever because I was calling a boolean instead of the Tesseract library. The i18n had a sneaky bug where early betas left some sections in Spanish even after switching to English. What are you proud of? The Sankey diagram with zero dependencies, the greedy algorithm that settles debts with the minimum number of transfers, and the statistics dashboard comparing month-over-month spending. The whole thing works offline. What should people know so they can test your project? Open the demo. Choose language on first launch. The resumen tab has charts, budgets, goals, stats, and backup. The apuntes tab is for expenses. The tickets tab scans receipts via OCR. The deudas tab tracks shared expenses and suggests minimum transfers to settle. Gear icon for dark mode and language. Live demo: https://notjuangamer10.github.io/flujo/ Source: https://github.com/notjuangamer10/flujo", "repo": "https://github.com/NOTJuangamer10/flujo", "demo": "https://notjuangamer10.github.io/flujo/"}, {"ship_num": 2, "ts": "2026-08-10T14:12:57Z", "hours": 54.0, "multiplier": 16.01, "payout": 864, "blessing": "neutral", "text": "What did you make? A personal expense tracker called Flujo, built with an editorial / ledger aesthetic. The app tracks income and expenses with categories, a 5-day forecast visualization, an OCR ticket scanner, and a full debt and shared expenses system for tracking who owes whom between flatmates or friends. Everything is local-first, stored in localStorage, no account, no server, no tracking. Built in four betas. Beta 1 was the basics: add expenses, browse by month, summary totals. Beta 2 added a Sankey diagram showing money flow from income to expense categories, a stacked bar chart for the last 6 months, and a donut chart for category breakdown, all drawn on canvas with vanilla JS (no charting library). Beta 3 added a tabbed interface (resumen, apuntes, tickets, deudas) and an OCR ticket scanner using Tesseract.js that extracts products and prices from receipt photos. Beta 4 added the debts system with four split methods (equal, by shares, exact, by percentage), a greedy algorithm to settle debts with minimum transfers, pattern detection for subscriptions and recurring expenses, plus a dark mode and ES/EN language toggle. What was challenging? The Sankey diagram was the hardest part. My first version drew two separate bezier curves joined at the ends, which looked angular and flat and kinda ugly ngl. Asked another AI for help and it spotted a missing lineTo, but the real fix was using a single bezierCurveTo per ribbon with control points at 42 percent of the horizontal distance (the same proportion D3 uses). Also had to make both sides share the same scale so ribbons flow horizontally instead of diagonal. The proportional sizing was another bug: I had a minimum height of 38px, so a 10 euro expense looked the same as a 400 euro income. Fixed by dropping the minimum to 3px. The OCR scanner had a silent bug where it would hang forever on “procesando imagen”. I was calling tesseractCargado.createWorker where tesseractCargado is a boolean, not the Tesseract library object. So I was doing true.createWorker which throws a TypeError that nobody caught. Fixed by calling Tesseract.createWorker and added a 90 second timeout. The internationalization had a sneaky bug too. The language toggle translated the main UI but left the forecast and debts sections in Spanish because that code was hardcoded from earlier betas. Had to re-translate every section separately. What are you proud of? The Sankey diagram, drawn entirely with vanilla canvas, no D3 or any charting library. About 200 lines of math and bezier curves, but the result looks professional. The debt settlement algorithm that minimizes transfers, so if three people owe each other small amounts it suggests the minimum set of payments instead of everyone paying everyone. The pattern detection that finds subscriptions and projects their annual cost, which is a sobering number to see. And the whole thing works offline with no backend, no account, no tracking. What should people know so they can test your project? Open the demo URL. The resumen tab shows the Sankey diagram, bar chart and donut chart. The apuntes tab lets you add expenses and browse them by month. The tickets tab lets you upload a receipt photo and the OCR extracts products and prices automatically. The deudas tab is where you add people and track shared expenses with four split methods, then see the minimum transfers needed to settle all debts. The gear icon in the header opens settings with a dark mode toggle and ES/EN language switch. Everything is stored locally in the browser, nothing is sent anywhere. Live demo: https://notjuangamer10.github.io/flujo/ Source: https://github.com/notjuangamer10/flujo", "repo": "https://github.com/NOTJuangamer10/flujo", "demo": "https://notjuangamer10.github.io/flujo/"}]...
|
[{"post_id": 64538, "ts": "202 [{"post_id": 64538, "ts": "2026-09-09T01:02:58Z", "hours": 3.3525, "text": "Flujo 6.2. Statistics, backup, and custom categories. Statistics dashboard. The resumen tab now shows six stat cards: total spent across all time, comparison vs last month (with up/down arrows and percentage), daily average for the current month, the most expensive day of the month, number of entries this month, and average per entry. The cards update automatically when you add or remove expenses. Backup. You can export all your data to CSV (for spreadsheets) or JSON (for a full backup that includes expenses, income, people, debts, budgets, and goals). You can also import a JSON file to restore everything. Useful for moving your data to another browser or just keeping a safe copy. Custom categories. You can now create your own expense categories with a custom name and a custom color using a color picker. The new categories appear automatically in the expense form and the ticket scanner. The charts and Sankey diagram will use your custom colors."}, {"post_id": 59025, "ts": "2026-08-31T16:40:42Z", "hours": 3.5872, "text": "Flujo 6.1. Budgets and savings goals. Budgets. Set a monthly limit per category. A progress bar shows how much you have spent vs the limit. The bar changes color: category color under 80 percent, ochre at 80 to 100 (almost there warning), red over 100 (over budget). The percentage and a short warning message appear next to each bar. Delete a budget with the x button on hover. Savings goals. Set a goal with a name, target amount and optional deadline. The app calculates your current savings (total income minus total expenses across all time) and shows a green progress bar toward the goal. When you hit 100 percent the goal name turns green with a checkmark. Useful for things like save 500 for summer trip. Both features appear in the resumen tab below the charts. They update automatically when you add or remove expenses. Everything is stored in localStorage, no server."}, {"post_id": 52733, "ts": "2026-08-23T01:54:52Z", "hours": 3.9356, "text": "Beta 5 of Flujo. Improvements based on reviewer feedback.PWA installable. A service worker now caches the core files so the app works offline on desktop and Android. The manifest is generated dynamically. CDN assets like Tesseract.js and Google Fonts are not cached to avoid bloat. The app itself, your expenses and charts all work offline.Language prompt on first launch. New users now see a modal asking them to choose Spanish or English before the app loads. This was the top complaint from reviewers on my other projects, who said the language toggle was hard to find.Onboarding overlay. First-time visitors get a welcome screen explaining the four tabs (resumen, apuntes, tickets, deudas) with a short description of each, plus tips like adding income sources first to see the Sankey diagram. Dismissible with a single click.Fixed incomplete translations. The canvas text “sin datos para mostrar” and “sin gastos” now respect the language setting. The footer and header subtitle also translate. Everything visible to the user is now either English or Spanish based on the preference."}, {"post_id": 44493, "ts": "2026-08-10T09:19:08Z", "hours": 8.0956, "text": "Beta 4 of Flujo is up. The biggest one yet, split into two parts because of the autoescritor’s 10 hour session limit. Beta 4a added the settings panel with dark mode and language toggle (ES/EN). The dark mode uses a warm dark brown palette instead of the usual cold gray, so it still feels editorial. The language toggle reloads the page to re-translate static text. Beta 4b added the debts and shared expenses system. You can add people (flatmates, friends) and track who owes whom. Shared expenses support four split methods: equal, by shares (e.g. 2:1:1 means one person pays double), exact amounts per person, and by percentage. The settle-up section uses a greedy algorithm to minimize the number of transfers needed to clear all debts, so if three people owe each other small amounts, it suggests the minimum set of transfers instead of everyone paying everyone. Also added pattern detection. The app analyzes your expenses and finds recurring ones, things you pay the same amount for multiple times. It separates them into likely subscriptions (same exact amount, repeated) and general recurring expenses (same description, similar amounts). Shows the projected annual cost for subscriptions, which is a sobering number to see. Next version will be the last: FastAPI backend for sync between phone and laptop, plus PWA installable."}, {"post_id": 43704, "ts": "2026-08-09T03:31:43Z", "hours": 7.7708, "text": "Beta 4a of Flujo is up. I’m starting to get tired of being all day coding. Started the debts and shared expenses feature, plus two settings that were requested on my other projects. First, a theme toggle. The app now supports a dark mode alongside the default cream paper look. The toggle is in a small settings panel in the header. The dark palette uses a warm dark brown instead of the usual cold gray, so it still feels like the editorial aesthetic.Second, multi-language support. The interface can switch between Spanish and English. Switching reloads the page so all the static text gets re-translated. The dynamic content (expenses, descriptions) stays in whatever language the user typed it in.Third, the structure for the debts tab is in place. A new “deudas” tab appears next to resumen, apuntes and tickets. The HTML is there (persons form, shared expense form with split method selector, movements list, settle-up section, patterns section) but the JavaScript logic comes in Beta 4b. The shared expense form supports four split methods: equal, by shares (e.g. 2:1:1 means one person pays double), exact amounts per person, and by percentage.Split this into two parts because of the autoescritor session limit. 4b comes next with all the logic for shared expenses, debt settlement and pattern detection."}, {"post_id": 43184, "ts": "2026-08-08T09:33:02Z", "hours": 6.4356, "text": "Beta 4a of Flujo is up. Started the debts and shared expenses feature, plus two settings that were requested on my other projects. First, a theme toggle. The app now supports a dark mode alongside the default cream paper look. The toggle is in a small settings panel in the header. The dark palette uses a warm dark brown instead of the usual cold gray, so it still feels like the editorial aesthetic. Second, multi-language support. The interface can switch between Spanish and English. Switching reloads the page so all the static text gets re-translated. The dynamic content (expenses, descriptions) stays in whatever language the user typed it in. Third, the structure for the debts tab is in place. A new “deudas” tab appears next to resumen, apuntes and tickets. The HTML is there (persons form, shared expense form with split method selector, movements list, settle-up section, patterns section) but the JavaScript logic comes in Beta 4b. The shared expense form supports four split methods: equal, by shares (e.g. 2:1:1), exact amounts per person, and by percentage. The settle-up section will use a greedy algorithm to minimize the number of transfers needed to clear all debts."}, {"post_id": 42943, "ts": "2026-08-07T22:39:17Z", "hours": 4.0389, "text": "Beta 3.1 is a bugfix release. Two issues. First, the OCR ticket scanner was completely broken. When you uploaded a photo it would say “procesando imagen” forever and never finish. Turned out I was calling tesseractCargado.createWorker where tesseractCargado is a boolean (true), not the Tesseract library object. So I was doing true.createWorker which is undefined.createWorker which throws a TypeError that nobody caught. Switched to Tesseract.createWorker and added a 90 second timeout plus proper try/catch so it can never hang again. Second, the Sankey text was blurry. Canvas draws with whatever font is available at draw time, and if Google Fonts was still loading on the first render it fell back to Arial which looked bad when scaled by devicePixelRatio. Fixed by waiting for document.fonts.ready before the first draw, rounding all Y coordinates to integers so they align with physical pixels, and redrawing on window resize so the DPR stays correct."}, {"post_id": 42609, "ts": "2026-08-07T12:57:34Z", "hours": 7.0344, "text": "Beta 3 is up Tabs and OCR Update!! Three changes. First, the Sankey is now proportional. Before, every node had a minimum height of 38px, so a 10 euro expense looked the same as a 400 euro income. Now the minimum is 3px and both sides use the global total as their scale, so node heights actually reflect the amounts. A 10 euro category is a tiny sliver next to a 400 euro income source. Second, added tabs. The app was getting long with everything in one column. Now there are three tabs: resumen (income sources and charts), apuntes (the expense form and list), and tickets (new). The tab bar uses the same editorial styling, lowercase text with an ochre underline on the active tab. Third, the big one: OCR ticket scanning. On the tickets tab you upload a photo of a supermarket receipt and Tesseract.js extracts the text, then a regex parser pulls out product names and prices. Each detected item shows up in a list with a checkbox, you pick a category, hit save, and all items become individual expenses. The parser looks for lines ending in a decimal number (the classic receipt format) and skips lines that look like totals, subtotals or payment info. Tesseract loads from CDN the first time you use it. It runs entirely in the browser, no server involved, which keeps the local-first promise. The recognition is decent for clean photos, struggles with crumpled receipts. The parser is basic but catches most supermarket formats. If it fails, there is a details panel showing the raw OCR text so you can see what went wrong."}, {"post_id": 41662, "ts": "2026-08-06T01:01:30Z", "hours": 4.3533, "text": "Beta 2.1 is a visual rework of the Sankey diagram. Charts Update!: The previous version worked but looked rough: the flow ribbons were angular, the nodes were plain rectangles, and the two sides used independent scales so the ribbons went diagonal instead of horizontal. I asked another AI for help with the algorithm and it suggested a cleaner approach. Each ribbon is now a single bezier curve with control points at 42 percent of the horizontal distance (the same proportion D3 uses in its Sankey layout), instead of two curves joined at the ends. The nodes are rounded rectangles with a soft shadow. Both sides share the same scale so the ribbons flow straight. Nodes are centered vertically instead of pinned to the top. I kept the editorial palette: dark green for income nodes, black ink for the center “total” node, cream with a colored accent stripe for each expense category. The ribbons use the category color at 30 percent opacity so overlaps create natural layering. Also fixed a timezone bug in the 6 month bar chart. I was using toISOString to build the month key, which converts to UTC and can return the wrong month near midnight. Switched to getFullYear and getMonth which stay in local time. The bars were technically drawing before but some months were mismatched, now they line up correctly. I still have to work that better, but it isnt thaaat bad"}, {"post_id": 41274, "ts": "2026-08-05T11:58:13Z", "hours": 8.9636, "text": "Beta 2 of Flujo is up. The big one: a Sankey diagram showing the flow of your money, income sources on the left, expense categories on the right, with smooth flowing ribbons in between. Drawn on canvas with vanilla JS, no D3 or any charting library. Just bezierCurveTo and a lot of math. Also added two more charts: a stacked bar chart showing the last 6 months (each bar broken down by category, with the monthly total on top), and a donut chart for the current month’s category breakdown with a legend. To make the Sankey meaningful I had to add an income system, a small form where you register your income sources (scholarship, parents, job, etc.). The balance section now shows five numbers: spent, count, average, income, and balance (green if positive, red if negative). The Sankey was the hardest part. My first version drew two separate bezier curves (top and bottom) and joined them at the ends, the ribbons looked flat and angular, like triangles. I asked Gemini for help and it spotted a missing lineTo at the destination node, which fixed the pinch. But the ribbons still looked off. Turned out the real problem was the algorithm: each ribbon needs to be ONE single bezierCurveTo with four control points (not two curves joined), and both sides need to share the same scale (not normalize independently). Once I fixed that, the ribbons flowed organically like a real Sankey. The bar chart had a sneaky bug too: it drew the grid lines but no bars. Took me a while, I was using canvas.clientWidth (DOM size) instead of canvas.width (drawing context size). The CSS makes the canvas visually smaller than its internal resolution, so the bars were being drawn outside the visible area. Classic canvas gotcha. Used a muted, desaturated palette for the 8 categories (ochre, dusty blue, sage green, etc.) instead of bright primary colors, keeps the editorial aesthetic intact. Next version will be the OCR ticket scanner, organized in tabs so the charts don’t compete with the expense list for space. And also redigning the sankey because i dont like how it looks."}, {"post_id": 40077, "ts": "2026-08-03T13:40:22Z", "hours": 7.2981, "text": "Started a new project called Flujo, a personal expense tracker. The idea was to make something that doesn’t look like every other finance app most of them use blue or green with cards and Material-style shadows. I went with an “editorial ledger” aesthetic: paper cream background, dark ink text, an ochre accent, and three typefaces working together Fraunces (a serif) for titles, Inter Tight for UI, and JetBrains Mono with tabular numerals for the amounts so they align like a real accounting book. Beta 1 is the basics: a form to add an expense (amount, category, description, date), a list of expenses for the current month with running numbers (001, 002…), and three totals on top spent, count, and average. There’s a month selector in the header. Everything lives in localStorage, no backend, no server, no tracking. The list is called “libro mayor” (general ledger) and each entry is an “apunte” (bookkeeping entry) small details that lean into the book metaphor. Next version will add the Sankey diagram and bar charts."}]...
|
Title: Flujo by @jupeme6 | Stardance
Devlogs:
Sta Title: Flujo by @jupeme6 | Stardance
Devlogs:
Started a new project called Flujo, a personal expense tracker. The idea was to make something that doesn’t look like every other finance app most of them use blue or green with cards and Material-style shadows. I went with an “editorial ledger” aesthetic: paper cream background, dark ink text, an ochre accent, and three typefaces working together Fraunces (a serif) for titles, Inter Tight for UI, and JetBrains Mono with tabular numerals for the amounts so they align like a real accounting book. Beta 1 is the basics: a form to add an expense (amount, category, description, date), a list of expenses for the current month with running numbers (001, 002…), and three totals on top spent, count, and average. There’s a month selector in the header. Everything lives in localStorage, no backend, no server, no tracking. The list is called “libro mayor” (general ledger) and each entry is an “apunte” (bookkeeping entry) small details that lean into the book metaphor. Next version will add the Sankey diagram and bar charts.
Beta 2 of Flujo is up. The big one: a Sankey diagram showing the flow of your money, income sources on the left, expense categories on the right, with smooth flowing ribbons in between. Drawn on canvas with vanilla JS, no D3 or any charting library. Just bezierCurveTo and a lot of math. Also added two more charts: a stacked bar chart showing the last 6 months (each bar broken down by category, with the monthly total on top), and a donut chart for the current month’s category breakdown with a legend. To make the Sankey meaningful I had to add an income system, a small form where you register your income sources (scholarship, parents, job, etc.). The balance section now shows five numbers: spent, count, average, income, and balance (green if positive, red if negative). The Sankey was the hardest part. My first version drew two separate bezier curves (top and bottom) and joined them at the ends, the ribbons looked flat and angular, like triangles. I asked Gemini for help and it spotted a missing lineTo at the destination node, which fixed the pinch. But the ribbons still looked off. Turned out the real problem was the algorithm: each ribbon needs to be ONE single bezierCurveTo with four control points (not two curves joined), and both sides need to share the same scale (not normalize independently). Once I fixed that, the ribbons flowed organically like a real Sankey. The bar chart had a sneaky bug too: it drew the grid lines but no bars. Took me a while, I was using canvas.clientWidth (DOM size) instead of canvas.width (drawing context size). The CSS makes the canvas visually smaller than its internal resolution, so the bars were being drawn outside the visible area. Classic canvas gotcha. Used a muted, desaturated palette for the 8 categories (ochre, dusty blue, sage green, etc.) instead of bright primary colors, keeps the editorial aesthetic intact. Next version will be the OCR ticket scanner, organized in tabs so the charts don’t compete with the expense list for space. And also redigning the sankey because i dont like how it looks.
Beta 2.1 is a visual rework of the Sankey diagram. Charts Update!: The previous version worked but looked rough: the flow ribbons were angular, the nodes were plain rectangles, and the two sides used independent scales so the ribbons went diagonal instead of horizontal. I asked another AI for help with the algorithm and it suggested a cleaner approach. Each ribbon is now a single bezier curve with control points at 42 percent of the horizontal distance (the same proportion D3 uses in its Sankey layout), instead of two curves joined at the ends. The nodes are rounded rectangles with a soft shadow. Both sides share the same scale so the ribbons flow straight. Nodes are centered vertically instead of pinned to the top. I kept the editorial palette: dark green for income nodes, black ink for the center “total” node, cream with a colored accent stripe for each expense category. The ribbons use the category color at 30 percent opacity so overlaps create natural layering. Also fixed a timezone bug in the 6 month bar chart. I was using toISOString to build the month key, which converts to UTC and can return the wrong month near midnight. Switched to getFullYear and getMonth which stay in local time. The bars were technically drawing before but some months were mismatched, now they line up correctly. I still have to work that better, but it isnt thaaat bad
Beta 3 is up Tabs and OCR Update!! Three changes. First, the Sankey is now proportional. Before, every node had a minimum height of 38px, so a 10 euro expense looked the same as a 400 euro income. Now the minimum is 3px and both sides use the global total as their scale, so node heights actually reflect the amounts. A 10 euro category is a tiny sliver next to a 400 euro income source. Second, added tabs. The app was getting long with everything in one column. Now there are three tabs: resumen (income sources and charts), apuntes (the expense form and list), and tickets (new). The tab bar uses the same editorial styling, lowercase text with an ochre underline on the active tab. Third, the big one: OCR ticket scanning. On the tickets tab you upload a photo of a supermarket receipt and Tesseract.js extracts the text, then a regex parser pulls out product names and prices. Each detected item shows up in a list with a checkbox, you pick a category, hit save, and all items become individual expenses. The parser looks for lines ending in a decimal number (the classic receipt format) and skips lines that look like totals, subtotals or payment info. Tesseract loads from CDN the first time you use it. It runs entirely in the browser, no server involved, which keeps the local-first promise. The recognition is decent for clean photos, struggles with crumpled receipts. The parser is basic but catches most supermarket formats. If it fails, there is a details panel showing the raw OCR text so you can see what went wrong.
Beta 3.1 is a bugfix release. Two issues. First, the OCR ticket scanner was completely broken. When you uploaded a photo it would say “procesando imagen” forever and never finish. Turned out I was calling tesseractCargado.createWorker where tesseractCargado is a boolean (true), not the Tesseract library object. So I was doing true.createWorker which is undefined.createWorker which throws a TypeError that nobody caught. Switched to Tesseract.createWorker and added a 90 second timeout plus proper try/catch so it can never hang again. Second, the Sankey text was blurry. Canvas draws with whatever font is available at draw time, and if Google Fonts was still loading on the first render it fell back to Arial which looked bad when scaled by devicePixelRatio. Fixed by waiting for document.fonts.ready before the first draw, rounding all Y coordinates to integers so they align with physical pixels, and redrawing on window resize so the DPR stays correct.
Beta 4a of Flujo is up. Started the debts and shared expenses feature, plus two settings that were requested on my other projects. First, a theme toggle. The app now supports a dark mode alongside the default cream paper look. The toggle is in a small settings panel in the header. The dark palette uses a warm dark brown instead of the usual cold gray, so it still feels like the editorial aesthetic. Second, multi-language support. The interface can switch between Spanish and English. Switching reloads the page so all the static text gets re-translated. The dynamic content (expenses, descriptions) stays in whatever language the user typed it in. Third, the structure for the debts tab is in place. A new “deudas” tab appears next to resumen, apuntes and tickets. The HTML is there (persons form, shared expense form with split method selector, movements list, settle-up section, patterns section) but the JavaScript logic comes in Beta 4b. The shared expense form supports four split methods: equal, by shares (e.g. 2:1:1), exact amounts per person, and by percentage. The settle-up section will use a greedy algorithm to minimize the number of transfers needed to clear all debts.
Beta 4a of Flujo is up. I’m starting to get tired of being all day coding. Started the debts and shared expenses feature, plus two settings that were requested on my other projects. First, a theme toggle. The app now supports a dark mode alongside the default cream paper look. The toggle is in a small settings panel in the header. The dark palette uses a warm dark brown instead of the usual cold gray, so it still feels like the editorial aesthetic.Second, multi-language support. The interface can switch between Spanish and English. Switching reloads the page so all the static text gets re-translated. The dynamic content (expenses, descriptions) stays in whatever language the user typed it in.Third, the structure for the debts tab is in place. A new “deudas” tab appears next to resumen, apuntes and tickets. The HTML is there (persons form, shared expense form with split method selector, movements list, settle-up section, patterns section) but the JavaScript logic comes in Beta 4b. The shared expense form supports four split methods: equal, by shares (e.g. 2:1:1 means one person pays double), exact amounts per person, and by percentage.Split this into two parts because of the autoescritor session limit. 4b comes next with all the logic for shared expenses, debt settlement and pattern detection.
Beta 4 of Flujo is up. The biggest one yet, split into two parts because of the autoescritor’s 10 hour session limit. Beta 4a added the settings panel with dark mode and language toggle (ES/EN). The dark mode uses a warm dark brown palette instead of the usual cold gray, so it still feels editorial. The language toggle reloads the page to re-translate static text. Beta 4b added the debts and shared expenses system. You can add people (flatmates, friends) and track who owes whom. Shared expenses support four split methods: equal, by shares (e.g. 2:1:1 means one person pays double), exact amounts per person, and by percentage. The settle-up section uses a greedy algorithm to minimize the number of transfers needed to clear all debts, so if three people owe each other small amounts, it suggests the minimum set of transfers instead of everyone paying everyone. Also added pattern detection. The app analyzes your expenses and finds recurring ones, things you pay the same amount for multiple times. It separates them into likely subscriptions (same exact amount, repeated) and general recurring expenses (same description, similar amounts). Shows the projected annual cost for subscriptions, which is a sobering number to see. Next version will be the last: FastAPI backend for sync between phone and laptop, plus PWA installable.
Beta 5 of Flujo. Improvements based on reviewer feedback.PWA installable. A service worker now caches the core files so the app works offline on desktop and Android. The manifest is generated dynamically. CDN assets like Tesseract.js and Google Fonts are not cached to avoid bloat. The app itself, your expenses and charts all work offline.Language prompt on first launch. New users now see a modal asking them to choose Spanish or English before the app loads. This was the top complaint from reviewers on my other projects, who said the language toggle was hard to find.Onboarding overlay. First-time visitors get a welcome screen explaining the four tabs (resumen, apuntes, tickets, deudas) with a short description of each, plus tips like adding income sources first to see the Sankey diagram. Dismissible with a single click.Fixed incomplete translations. The canvas text “sin datos para mostrar” and “sin gastos” now respect the language setting. The footer and header subtitle also translate. Everything visible to the user is now either English or Spanish based on the preference.
Flujo 6.1. Budgets and savings goals. Budgets. Set a monthly limit per category. A progress bar shows how much you have spent vs the limit. The bar changes color: category color under 80 percent, ochre at 80 to 100 (almost there warning), red over 100 (over budget). The percentage and a short warning message appear next to each bar. Delete a budget with the x button on hover. Savings goals. Set a goal with a name, target amount and optional deadline. The app calculates your current savings (total income minus total expenses across all time) and shows a green progress bar toward the goal. When you hit 100 percent the goal name turns green with a checkmark. Useful for things like save 500 for summer trip. Both features appear in the resumen tab below the charts. They update automatically when you add or remove expenses. Everything is stored in localStorage, no server.
Flujo 6.2. Statistics, backup, and custom categories. Statistics dashboard. The resumen tab now shows six stat cards: total spent across all time, comparison vs last month (with up/down arrows and percentage), daily average for the current month, the most expensive day of the month, number of entries this month, and average per entry. The cards update automatically when you add or remove expenses. Backup. You can export all your data to CSV (for spreadsheets) or JSON (for a full backup that includes expenses, income, people, debts, budgets, and goals). You can also import a JSON file to restore everything. Useful for moving your data to another browser or just keeping a safe copy. Custom categories. You can now create your own expense categories with a custom name and a custom color using a color picker. The new categories appear automatically in the expense form and the ticket scanner. The charts and Sankey diagram will use your custom colors.
Ships:
What did you make? A personal expense tracker called Flujo, built with an editorial / ledger aesthetic. The app tracks income and expenses with categories, a 5-day forecast visualization, an OCR ticket scanner, and a full debt and shared expenses system for tracking who owes whom between flatmates or friends. Everything is local-first, stored in localStorage, no account, no server, no tracking. Built in four betas. Beta 1 was the basics: add expenses, browse by month, summary totals. Beta 2 added a Sankey diagram showing money flow from income to expense categories, a stacked bar chart for the last 6 months, and a donut chart for category breakdown, all drawn on canvas with vanilla JS (no charting library). Beta 3 added a tabbed interface (resumen, apuntes, tickets, deudas) and an OCR ticket scanner using Tesseract.js that extracts products and prices from receipt photos. Beta 4 added the debts system with four split methods (equal, by shares, exact, by percentage), a greedy algorithm to settle debts with minimum transfers, pattern detection for subscriptions and recurring expenses, plus a dark mode and ES/EN language toggle. What was challenging? The Sankey diagram was the hardest part. My first version drew two separate bezier curves joined at the ends, which looked angular and flat and kinda ugly ngl. Asked another AI for help and it spotted a missing lineTo, but the real fix was using a single bezierCurveTo per ribbon with control points at 42 percent of the horizontal distance (the same proportion D3 uses). Also had to make both sides share the same scale so ribbons flow horizontally instead of diagonal. The proportional sizing was another bug: I had a minimum height of 38px, so a 10 euro expense looked the same as a 400 euro income. Fixed by dropping the minimum to 3px. The OCR scanner had a silent bug where it would hang forever on “procesando imagen”. I was calling tesseractCargado.createWorker where tesseractCargado is a boolean, not the Tesseract library object. So I was doing true.createWorker which throws a TypeError that nobody caught. Fixed by calling Tesseract.createWorker and added a 90 second timeout. The internationalization had a sneaky bug too. The language toggle translated the main UI but left the forecast and debts sections in Spanish because that code was hardcoded from earlier betas. Had to re-translate every section separately. What are you proud of? The Sankey diagram, drawn entirely with vanilla canvas, no D3 or any charting library. About 200 lines of math and bezier curves, but the result looks professional. The debt settlement algorithm that minimizes transfers, so if three people owe each other small amounts it suggests the minimum set of payments instead of everyone paying everyone. The pattern detection that finds subscriptions and projects their annual cost, which is a sobering number to see. And the whole thing works offline with no backend, no account, no tracking. What should people know so they can test your project? Open the demo URL. The resumen tab shows the Sankey diagram, bar chart and donut chart. The apuntes tab lets you add expenses and browse them by month. The tickets tab lets you upload a receipt photo and the OCR extracts products and prices automatically. The deudas tab is where you add people and track shared expenses with four split methods, then see the minimum transfers needed to settle all debts. The gear icon in the header opens settings with a dark mode toggle and ES/EN language switch. Everything is stored locally in the browser, nothing is sent anywhere. Live demo: https://notjuangamer10.github.io/flujo/ Source: https://github.com/notjuangamer10/flujo
What did you make? A local-first expense tracker called Flujo with an editorial / ledger aesthetic. It tracks income and expenses, has a Sankey diagram drawn from scratch on canvas (no libraries), an OCR ticket scanner, a debt settlement system for flatmates, budgets with alerts, savings goals, statistics, and CSV/JSON backup. Six betas in total. Everything is in localStorage, no backend, no account, PWA installable for offline use. What was challenging? The Sankey diagram was the hardest. Built it with bezier curves on canvas, had to fix proportional sizing and ribbon flow. The OCR scanner had a bug where it would hang forever because I was calling a boolean instead of the Tesseract library. The i18n had a sneaky bug where early betas left some sections in Spanish even after switching to English. What are you proud of? The Sankey diagram with zero dependencies, the greedy algorithm that settles debts with the minimum number of transfers, and the statistics dashboard comparing month-over-month spending. The whole thing works offline. What should people know so they can test your project? Open the demo. Choose language on first launch. The resumen tab has charts, budgets, goals, stats, and backup. The apuntes tab is for expenses. The tickets tab scans receipts via OCR. The deudas tab tracks shared expenses and suggests minimum transfers to settle. Gear icon for dark mode and language. Live demo: https://notjuangamer10.github.io/flujo/ Source: https://github.com/notjuangamer10/flujo...
|
1792878584.0517979
|
1793742584.0517979
|
|
29953
|
Hackatime by @mahad | Stardance
|
mahad
|
0
|
64.92
|
0
|
[]
|
[{"post_id": 44677, "ts": "202 [{"post_id": 44677, "ts": "2026-08-10T16:24:34Z", "hours": 64.9197, "text": "Test"}]...
|
Title: Hackatime by @mahad | Stardance
Devlogs:
T Title: Hackatime by @mahad | Stardance
Devlogs:
Test...
|
1792568851.4666686
|
1793173651.4666686
|
|
23786
|
chicagOS by @isadora_M | Stardance
|
isadora_M
|
2
|
64.87
|
478
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T03:31:35Z", "hours": 51.0, "multiplier": 9.34, "payout": 478, "blessing": "neutral", "text": "chicagOS has finally reached completion! I have spent over a month working on this project, and I am really proud of what I have accomplished. While I enjoyed working on all aspects of this project, I had the most fun playing around with CSS and creating fun animated features for the OS. I am no expert in JS or CSS, so there were many learning curves associated with this project. The biggest challenge I faced was converting my file system from localStorage to indexedDB I made this change due to the limitations of localStorage, but indexedDB uses a very different framework, so I ended up needing to completely redo the code for some of my apps. I am really excited about all the new things I learned in this process, and happy to create a fun project themed around my hometown of Chicago!", "repo": "https://github.com/IsaJM111/chicagOS", "demo": "https://isajm111.github.io/chicagOS/"}, {"ship_num": 2, "ts": "2026-07-06T01:01:19Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is the Chicago-themed web OS I made for the WebOS 1 mission. I learned a lot about JS, HTML, and CSS. I have some experience with JS and HTML, but it is my first time using non-inline CSS, which has been fun. I had a great time designing the website and creating all of the features and apps. Some challenges included dealing with importing images, which took a very long time, and making certain UI elements look good.", "repo": "https://github.com/IsaJM111/chicagOS", "demo": "https://isajm111.github.io/chicagOS/"}]...
|
[{"post_id": 80052, "ts": "202 [{"post_id": 80052, "ts": "2026-10-16T02:36:27Z", "hours": 1.7725, "text": "chicagOS Devlog #20 - I have added the option to hide the taskbar, and I have also created a setting to toggle the taskbar from being on the bottom to being on the top. There are now 4 different options for the wallpaper, which I think makes the webpage even more fun! I changed some small things with the CSS, but soon I hope to add more fun small features that will make this OS even more useful."}, {"post_id": 78464, "ts": "2026-10-10T21:02:05Z", "hours": 1.0956, "text": "ChicagOS Devlog #19 - I’m reviving this project! I kept thinking of new things I could add to this project, so I will be starting work on this again after 2 months! The only real thing I did today was add new options for wallpapers, including this fun nighttime scene. Soon the first order of business will be getting better app icons, as currently they are just emojis, and adding a taskbar minimize."}, {"post_id": 49340, "ts": "2026-08-18T03:24:34Z", "hours": 1.0381, "text": "chicagOS Devlog #18 - Final devlog before shipping! Not many visual changes, as I have spent a lot of time cleaning up the code, removing unused classes from CSS, deleting temporary console.log() , removing unnecessary comments, etc. I cleaned up some animations in CSS, but other than that, none of the code has really changed. I’ve really enjoyed working on this OS project, but I’m definitely excited to start something new."}, {"post_id": 47842, "ts": "2026-08-16T02:02:58Z", "hours": 6.7161, "text": "chicagOS Devlog #17 - Lots of changes! I’m wrapping up this project soon, so I am putting some final touches on the UI and making some backend changes. The file system now runs entirely using indexedDB instead of localStorage which means all file types can be saved now. The music app and gallery app have been connected to the file system. I also added a small calendar popup when you click on the time element. My biggest visual change was adding a startup screen. It was made almost entirely in CSS, and a single function in JS. I’m not sure if I’m going to add any more features before shipping, so if anyone has any suggestions lmk,"}, {"post_id": 44975, "ts": "2026-08-11T02:54:46Z", "hours": 1.4706, "text": "chicagOS Devlog #16 - I am still being indecisive about possibly adding a new app, so I decided to spruce up one of my simplest apps so far, Gallery. I mainly wanted to change how the photos were displayed, which wasn’t too difficult. The only real new feature I added was the ability to add custom photos, which was pretty easy because I used direct input from the computer. I also added the ability for grid view. At first I tried rebuilding the HTML for grid view, but I decided it would be easier to just have an invisible <div> that contained the grid layout. I don’t have any ideas for other apps to update, so if anyone has new app ideas, lmk cause I ran out days ago."}, {"post_id": 42816, "ts": "2026-08-07T18:48:02Z", "hours": 4.9344, "text": "chicagOS Devlog #15 - I have created the Music player app! You can upload any audio file from your computer and queue it in the playlist on the right. There is volume control, a time slider, play/pause, and skip/reverse. It will automatically load the name of the song, artist, and cover art if it is known. I originally planned on integrating this app with the existing file system, but it turns out audio files cannot be stored in localStorage so I had to scrap that idea. Currently, the playlist is just an array, which means it unfortunately does not save once the page is reloaded. But trust me, I’m going to update the file system so it can store all file types soon! I don’t really know what apps I’m going to add next, so I guess we will see where the wind takes me."}, {"post_id": 38597, "ts": "2026-08-01T02:30:53Z", "hours": 4.5422, "text": "chicagOS- Devlog 14 I’ve added a lot more functionality to the file system. Now you can add new folders, delete folders, and rename folders. You can also drag to reorder the folders in the sidebar. I also added a custom alert/notification center, so alerts such as “cannot delete system folders,” etc will be displayed, along with any other possible notification features I might add. Next, I plan on making a music app."}, {"post_id": 37322, "ts": "2026-07-29T22:57:39Z", "hours": 4.6961, "text": "chicagOS Devlog 13- I have created the file explorer app, and built the new file system. Now, instead of each app being connected directly to localStorage, they all use the same newFile() and getFile() functions from a central file system. Each app has a dedicated folder within the system. Next up, I hope to make a music player app, with the ability to add audio files."}, {"post_id": 35563, "ts": "2026-07-27T02:55:29Z", "hours": 4.02, "text": "chicagOS #Devlog 12- Terminal app is pretty much done! Obviously, I will add new commands as the OS gets more features, but I have some basic commands done! I also added a switch to toggle the quotes visibility in the settings app. Next, I plan on adding a file explorer which will connect all the apps into a single file system!"}, {"post_id": 33291, "ts": "2026-07-23T02:33:15Z", "hours": 4.455, "text": "chicagOS Devlog 11- The Header has been turned into a dock! I tried to reuse my existing code to open apps, but I couldn’t get it to work, so I had to end up redoing it twice. I also added some JS so that when you click on an open window it is put into focus. This is what the dynamic background is looking like so far, hopefully I can improve it more. Next I plan on adding some more apps, possibly including a terminal and a file explorer."}, {"post_id": 30993, "ts": "2026-07-19T00:40:37Z", "hours": 3.1639, "text": "chicagOS Devlog 10- Dynamic wallpaper is done! (kinda) I’ve been having issues trying to use images that have the background removed, so if anyone knows how that works, please lmk! I created a settings app to choose between the classic wallpaper (non-animated) and the dynamic wallpaper (many animated parts). The dynamic wallpaper will probably change once I can figure out the images I’m using. Next up, I am planning on turning the header into a dock! I will probably move the quotes to a widget."}, {"post_id": 28973, "ts": "2026-07-15T16:21:10Z", "hours": 3.5811, "text": "chicagOS Devlog 9- The Mind Map app is finally working! all of the nodes are draggable, and you can zoom in and out. Turns out the issue was that new nodes coordinates were being calculated from the root node instead of their parent node, so the line drawing function couldn’t find the new nodes. Also, I expanded the notes app! Before you could not save notes, but now you can! I added a side bar to display the saved notes, and also added the ability to remove saved notes. Next I plan to make some more UI improvements, maybe even a dynamic background?"}, {"post_id": 27808, "ts": "2026-07-13T18:07:26Z", "hours": 3.3197, "text": "chicagOS Devlog #8 - Browser app is completed! I used i-frame to display the browser window. The search bar takes web addresses, and if what is entered is not a valid web address, it automatically inputs it as a Google search prompt instead. I also added some bookmarked web pages, and forward and backward buttons that work by storing the web history. Next, I want to add more functionality to the notes app, including the ability to save and delete notes."}, {"post_id": 26810, "ts": "2026-07-11T20:20:04Z", "hours": 4.0203, "text": "chicagOS Devlog 7- The Paint app is mostly done! I added functionality to the save and load paintings button. I also updated the UI of the toolbar. I created the UI for the browser app, which currently doesn’t have any functionality. I plan to use an iframe to display webpages and also provide some bookmarked websites."}, {"post_id": 25020, "ts": "2026-07-08T23:01:48Z", "hours": 5.1878, "text": "chicagOS Devlog 6- A lot of progress has been made! I’ve been waiting for my ship to be approved for WebOS1, which it just was! Yay! But in the last 4 days, I have made a lot of changes, so prepare yourselves. #1 - The UI has had major improvements! I went down the W3Schools rabbit hole and added a bunch of things to make the UI look cleaner, including the first animated element of the UI! #2- Paint app! - I added the paint app, and it currently has pretty basic functionality. You can draw, change colors, change brush size, erase, and clear the canvas. I plan to add a save feature soon. (The button currently doesn’t do anything.) #3- I WILL FIGURE OUT THIS MIND MAP APP! I fixed a few things, but some things still aren’t working. Currently, lines don’t get drawn past the root node, and I think it has something to do with the ID hierarchy? We will see. #4- I added a feature of the desktop header that rotates through quotes about Chicago! It has the same animated background as the welcome window. That’s it for now; hopefully I can continue to improve the UI and the paint app!"}, {"post_id": 22565, "ts": "2026-07-05T02:36:53Z", "hours": 0.5222, "text": "chicagOS Devlog #5- Getting ready to complete the guide for WebOS 1! I cleaned up a few things with the UI, and I have decided that the Mind Map app will not be included in this first ship :( But trust, when I get smarter it will be coming back!"}, {"post_id": 16634, "ts": "2026-06-27T01:52:28Z", "hours": 3.0778, "text": "chicagOS devlog #4- Not that much progress recently! Turns out working with images is very frustrating. I created the gallery app, which had its surprising challenges. I figured that the JS logic for cycling between the photos and looping back to the first image would be easy, but I was severely mistaken. I spent at least an hours trying to stop the images from taking up the whole window, repeating, stretching, somehow being mirrored, just about every issue you can imagine. All of these had very simple fixes, but I couldn’t figure out what I should put in the CSS file, and which needed to be in-line (spoiler alert- pretty much none of it). But either way, the images act like normal images now! Yay! More functionality in the notes app is what I have planned next."}, {"post_id": 15389, "ts": "2026-06-25T00:52:48Z", "hours": 3.4053, "text": "chicagOS devlog #3 - Alright so I have changed a few things recently. #1 - I rethemed the whole OS, but later I might add a way to choose a theme in a setting app? idk I haven’t decided yet. // #2, I started working on the Mind Map App, but I quickly realized that its actually more complicated than I originally thought, and since I’m not that good at this I decided that I will come back to that app later. // #3 I made a calculator app, which is fully functioning and (as far as i’m aware) doesn’t have any bugs. // #4 I finished the notes app, but I might add more functionality later. // Thats it in terms of new features, my future plans include possibly some sort of settings app, finishing the Mind Map App, and I would like to add some sort of photo gallery app, which is what I plan to work on next."}, {"post_id": 14041, "ts": "2026-06-23T00:46:53Z", "hours": 2.2753, "text": "chicagOS log 2 - I have since added the actual window for the notes app, and basic functionality including adding notes and writing in them. I plan to add a save feature, and the ability to have multiple notes open at the same time. While working through the guide, it told me to make a “mind map” using paper for brainstorming. I thought about how I didn’t want to get up to grab a piece of paper, and I knew what my next app would be: a Mind Map app! now I will never have to get up again. I haven’t added any functionality to this app yet, but it should be relatively simple. (currently the app icons are placeholders from google, I promise they will be better eventually!)"}, {"post_id": 13747, "ts": "2026-06-22T15:12:35Z", "hours": 1.2672, "text": "The basics of the webOS are done! It is Chicago themed, and all the apps will be useful to someone who lives/is visiting Chicago. I actually sent more time on this project but I couldn’t figure out hackatime :( Regardless, I finished the background, top bar, and welcome screen that is draggable and able to be opened and closed. I plan to work on the first app soon, which will likely be a notes type app."}]...
|
Title: chicagOS by @isadora_M | Stardance
Devlogs Title: chicagOS by @isadora_M | Stardance
Devlogs:
The basics of the webOS are done! It is Chicago themed, and all the apps will be useful to someone who lives/is visiting Chicago. I actually sent more time on this project but I couldn’t figure out hackatime :( Regardless, I finished the background, top bar, and welcome screen that is draggable and able to be opened and closed. I plan to work on the first app soon, which will likely be a notes type app.
chicagOS log 2 - I have since added the actual window for the notes app, and basic functionality including adding notes and writing in them. I plan to add a save feature, and the ability to have multiple notes open at the same time. While working through the guide, it told me to make a “mind map” using paper for brainstorming. I thought about how I didn’t want to get up to grab a piece of paper, and I knew what my next app would be: a Mind Map app! now I will never have to get up again. I haven’t added any functionality to this app yet, but it should be relatively simple. (currently the app icons are placeholders from google, I promise they will be better eventually!)
chicagOS devlog #3 - Alright so I have changed a few things recently. #1 - I rethemed the whole OS, but later I might add a way to choose a theme in a setting app? idk I haven’t decided yet. // #2, I started working on the Mind Map App, but I quickly realized that its actually more complicated than I originally thought, and since I’m not that good at this I decided that I will come back to that app later. // #3 I made a calculator app, which is fully functioning and (as far as i’m aware) doesn’t have any bugs. // #4 I finished the notes app, but I might add more functionality later. // Thats it in terms of new features, my future plans include possibly some sort of settings app, finishing the Mind Map App, and I would like to add some sort of photo gallery app, which is what I plan to work on next.
chicagOS devlog #4- Not that much progress recently! Turns out working with images is very frustrating. I created the gallery app, which had its surprising challenges. I figured that the JS logic for cycling between the photos and looping back to the first image would be easy, but I was severely mistaken. I spent at least an hours trying to stop the images from taking up the whole window, repeating, stretching, somehow being mirrored, just about every issue you can imagine. All of these had very simple fixes, but I couldn’t figure out what I should put in the CSS file, and which needed to be in-line (spoiler alert- pretty much none of it). But either way, the images act like normal images now! Yay! More functionality in the notes app is what I have planned next.
chicagOS Devlog #5- Getting ready to complete the guide for WebOS 1! I cleaned up a few things with the UI, and I have decided that the Mind Map app will not be included in this first ship :( But trust, when I get smarter it will be coming back!
chicagOS Devlog 6- A lot of progress has been made! I’ve been waiting for my ship to be approved for WebOS1, which it just was! Yay! But in the last 4 days, I have made a lot of changes, so prepare yourselves. #1 - The UI has had major improvements! I went down the W3Schools rabbit hole and added a bunch of things to make the UI look cleaner, including the first animated element of the UI! #2- Paint app! - I added the paint app, and it currently has pretty basic functionality. You can draw, change colors, change brush size, erase, and clear the canvas. I plan to add a save feature soon. (The button currently doesn’t do anything.) #3- I WILL FIGURE OUT THIS MIND MAP APP! I fixed a few things, but some things still aren’t working. Currently, lines don’t get drawn past the root node, and I think it has something to do with the ID hierarchy? We will see. #4- I added a feature of the desktop header that rotates through quotes about Chicago! It has the same animated background as the welcome window. That’s it for now; hopefully I can continue to improve the UI and the paint app!
chicagOS Devlog 7- The Paint app is mostly done! I added functionality to the save and load paintings button. I also updated the UI of the toolbar. I created the UI for the browser app, which currently doesn’t have any functionality. I plan to use an iframe to display webpages and also provide some bookmarked websites.
chicagOS Devlog #8 - Browser app is completed! I used i-frame to display the browser window. The search bar takes web addresses, and if what is entered is not a valid web address, it automatically inputs it as a Google search prompt instead. I also added some bookmarked web pages, and forward and backward buttons that work by storing the web history. Next, I want to add more functionality to the notes app, including the ability to save and delete notes.
chicagOS Devlog 9- The Mind Map app is finally working! all of the nodes are draggable, and you can zoom in and out. Turns out the issue was that new nodes coordinates were being calculated from the root node instead of their parent node, so the line drawing function couldn’t find the new nodes. Also, I expanded the notes app! Before you could not save notes, but now you can! I added a side bar to display the saved notes, and also added the ability to remove saved notes. Next I plan to make some more UI improvements, maybe even a dynamic background?
chicagOS Devlog 10- Dynamic wallpaper is done! (kinda) I’ve been having issues trying to use images that have the background removed, so if anyone knows how that works, please lmk! I created a settings app to choose between the classic wallpaper (non-animated) and the dynamic wallpaper (many animated parts). The dynamic wallpaper will probably change once I can figure out the images I’m using. Next up, I am planning on turning the header into a dock! I will probably move the quotes to a widget.
chicagOS Devlog 11- The Header has been turned into a dock! I tried to reuse my existing code to open apps, but I couldn’t get it to work, so I had to end up redoing it twice. I also added some JS so that when you click on an open window it is put into focus. This is what the dynamic background is looking like so far, hopefully I can improve it more. Next I plan on adding some more apps, possibly including a terminal and a file explorer.
chicagOS #Devlog 12- Terminal app is pretty much done! Obviously, I will add new commands as the OS gets more features, but I have some basic commands done! I also added a switch to toggle the quotes visibility in the settings app. Next, I plan on adding a file explorer which will connect all the apps into a single file system!
chicagOS Devlog 13- I have created the file explorer app, and built the new file system. Now, instead of each app being connected directly to localStorage, they all use the same newFile() and getFile() functions from a central file system. Each app has a dedicated folder within the system. Next up, I hope to make a music player app, with the ability to add audio files.
chicagOS- Devlog 14 I’ve added a lot more functionality to the file system. Now you can add new folders, delete folders, and rename folders. You can also drag to reorder the folders in the sidebar. I also added a custom alert/notification center, so alerts such as “cannot delete system folders,” etc will be displayed, along with any other possible notification features I might add. Next, I plan on making a music app.
chicagOS Devlog #15 - I have created the Music player app! You can upload any audio file from your computer and queue it in the playlist on the right. There is volume control, a time slider, play/pause, and skip/reverse. It will automatically load the name of the song, artist, and cover art if it is known. I originally planned on integrating this app with the existing file system, but it turns out audio files cannot be stored in localStorage so I had to scrap that idea. Currently, the playlist is just an array, which means it unfortunately does not save once the page is reloaded. But trust me, I’m going to update the file system so it can store all file types soon! I don’t really know what apps I’m going to add next, so I guess we will see where the wind takes me.
chicagOS Devlog #16 - I am still being indecisive about possibly adding a new app, so I decided to spruce up one of my simplest apps so far, Gallery. I mainly wanted to change how the photos were displayed, which wasn’t too difficult. The only real new feature I added was the ability to add custom photos, which was pretty easy because I used direct input from the computer. I also added the ability for grid view. At first I tried rebuilding the HTML for grid view, but I decided it would be easier to just have an invisible <div> that contained the grid layout. I don’t have any ideas for other apps to update, so if anyone has new app ideas, lmk cause I ran out days ago.
chicagOS Devlog #17 - Lots of changes! I’m wrapping up this project soon, so I am putting some final touches on the UI and making some backend changes. The file system now runs entirely using indexedDB instead of localStorage which means all file types can be saved now. The music app and gallery app have been connected to the file system. I also added a small calendar popup when you click on the time element. My biggest visual change was adding a startup screen. It was made almost entirely in CSS, and a single function in JS. I’m not sure if I’m going to add any more features before shipping, so if anyone has any suggestions lmk,
chicagOS Devlog #18 - Final devlog before shipping! Not many visual changes, as I have spent a lot of time cleaning up the code, removing unused classes from CSS, deleting temporary console.log() , removing unnecessary comments, etc. I cleaned up some animations in CSS, but other than that, none of the code has really changed. I’ve really enjoyed working on this OS project, but I’m definitely excited to start something new.
ChicagOS Devlog #19 - I’m reviving this project! I kept thinking of new things I could add to this project, so I will be starting work on this again after 2 months! The only real thing I did today was add new options for wallpapers, including this fun nighttime scene. Soon the first order of business will be getting better app icons, as currently they are just emojis, and adding a taskbar minimize.
chicagOS Devlog #20 - I have added the option to hide the taskbar, and I have also created a setting to toggle the taskbar from being on the bottom to being on the top. There are now 4 different options for the wallpaper, which I think makes the webpage even more fun! I changed some small things with the CSS, but soon I hope to add more fun small features that will make this OS even more useful.
Ships:
This is the Chicago-themed web OS I made for the WebOS 1 mission. I learned a lot about JS, HTML, and CSS. I have some experience with JS and HTML, but it is my first time using non-inline CSS, which has been fun. I had a great time designing the website and creating all of the features and apps. Some challenges included dealing with importing images, which took a very long time, and making certain UI elements look good.
chicagOS has finally reached completion! I have spent over a month working on this project, and I am really proud of what I have accomplished. While I enjoyed working on all aspects of this project, I had the most fun playing around with CSS and creating fun animated features for the OS. I am no expert in JS or CSS, so there were many learning curves associated with this project. The biggest challenge I faced was converting my file system from localStorage to indexedDB I made this change due to the limitations of localStorage, but indexedDB uses a very different framework, so I ended up needing to completely redo the code for some of my apps. I am really excited about all the new things I learned in this process, and happy to create a fun project themed around my hometown of Chicago!...
|
1792997544.4451518
|
1793083944.4451518
|
|
32375
|
Music Syncer by @techs-sus | Stardance
|
techs-sus
|
1
|
64.46
|
833
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-02T23:54:31Z", "hours": 45.0, "multiplier": 18.46, "payout": 833, "blessing": "neutral", "text": "I made a Kotlin CLI program that synchronizes a YouTube Music playlist to a SQLite database locally. I made this because I want to be able to play my music freely even when YouTube Music or my network is down. The main challenge was finding a library that would let me get the data I needed (artist, thumbnail, audio tracks, etc.) from YouTube Music, and I even had to rewrite the entire program in Kotlin from Rust because the library I was using couldn’t download audio properly.", "repo": "https://github.com/techs-sus/music-syncer", "demo": "https://github.com/techs-sus/music-syncer/releases"}]...
|
[{"post_id": 78225, "ts": "202 [{"post_id": 78225, "ts": "2026-10-10T00:53:04Z", "hours": 1.1172, "text": "I fixed another Nix graalvm issue. Some mp4s wouldn’t be tagged properly, so I fixed that."}, {"post_id": 74678, "ts": "2026-09-27T23:46:37Z", "hours": 0.6, "text": "I fixed the binary in Nix, it works now, also updated the asciinema cast it was missing some reachability metadata and required LD_LIBRARY_PATH to be set to the jdk’s libraries."}, {"post_id": 74664, "ts": "2026-09-27T22:23:13Z", "hours": 0.7189, "text": "Tiny change, I switched from scrimage to ImageIO. It works much better and should be less error prone as scrimage would vendor in webp binaries, which is not cross platform."}, {"post_id": 74533, "ts": "2026-09-27T16:04:10Z", "hours": 2.7108, "text": "Squashed more bugs, updated NativeMetadataMain.kt so that reachability metadata includes image i/o. This makes the Graal native image actually work when having to convert from webp to png. This will be a non issue when I can find an image library that is written in pure Kotlin. The last shipwright to review my project tried syncing a mix, which is infinite. So I added an error for that and made sure no one will run into unexplainable errors again."}, {"post_id": 71298, "ts": "2026-09-20T16:18:29Z", "hours": 1.1267, "text": "I added GraalVM native image support. The actual implementation is boring but this makes the program’s cold starts faster and makes it feel more native. Not sure if this helps with battery life, but it might. This definitely helps with memory usage, the program only uses ~100mb syncing my 400 track playlist. I restricted the native image to Nix because the releases are supposed to always work on all platforms."}, {"post_id": 71243, "ts": "2026-09-20T14:51:47Z", "hours": 0.3306, "text": "I finally silenced those pesky slf4j and unsafe memory access warnings. Just added the slf4j-nop library and a JVM flag."}, {"post_id": 70926, "ts": "2026-09-20T01:43:13Z", "hours": 2.5042, "text": "I redid the cli structure to group all the playlist commands under one common playlist parent command. I also implemented a clean up command to help people save disk space because SSDs are expensive right now. For example: music-syncer-kotlin -p path init -> music-syncer-kotlin playlist -p path init This was a necessary step so I could implement the clean up command, which deletes audio and thumbnail files that are not used by any playlists in a container. A container is the folder holding all the databases. Here’s everything I did, stolen from my commit message: feature: add clean-container command - refactor: add hasTrackInDatabase to the Playlist class - refactor: move knownFinal{Audio,Thumbnail}Extension out of class and make it const - refactor: nest all playlist commands as one subcommand - refactor: make cli help text more helpful - refactor: always print something to the console to let the user know that everything went well - refactor: do not use PlaylistHolder, use currentContext.registerJvmCloseable to clean up playlist - fix: when thumbnail is newly created, retag should silently fail"}, {"post_id": 64580, "ts": "2026-09-09T02:50:12Z", "hours": 2.7675, "text": "I watched a Kotlin talk about Flows and I was inspired to rewrite my program using them. This made my program more efficient, idiomatic and also helped me fix the annoying progress bar refresh bug (multiple old bars shown). It also let me actually properly sort by position across all 4 status types (added, removed, moved, errored). I also made the downloading functions use one underlying common function to clean up the codebase. I also removed sqlx4k because it wasn’t actually parallel and was causing issues with init. Here, in the screenshot I am showing the new elegant code for the logging of track statuses. It used to be many individual async calls, but flows allow me to group them up and sort them."}, {"post_id": 64390, "ts": "2026-09-08T18:35:35Z", "hours": 0.81, "text": "I now detect invalid playlist ids and print out an error telling the user how to get a valid playlist id."}, {"post_id": 63814, "ts": "2026-09-07T19:41:24Z", "hours": 0.5508, "text": "I made position diffing aware of insertions and deletions, so that output is less bloated with useless move info such as 0->1, 1->2, etc. I also did some optimization by using database transactions wherever possible. I can’t do it in the main sync body because it is bounded to its own coroutine scope."}, {"post_id": 63724, "ts": "2026-09-07T17:36:43Z", "hours": 1.365, "text": "I added duration tracking to the database. The M3U generation now doesn’t hardcode 0 as the duration."}, {"post_id": 61576, "ts": "2026-09-04T15:35:33Z", "hours": 0.3597, "text": "I made it so that thumbnails should now be even higher quality, it does take more storage but the difference is quite noticeable on some music players. Also small hotfix, if you accidentally pass in another unrelated SQLite database it will now not run migrations on it before erroring."}, {"post_id": 61148, "ts": "2026-09-03T22:22:37Z", "hours": 0.6486, "text": "To help users migrate from the old Rust implementation, I made it so that a sync will re-tag the track if the track’s thumbnail does not exist on disk. The Kotlin implementation always gets higher resolution images, so this allows for much higher resolution track covers."}, {"post_id": 61131, "ts": "2026-09-03T21:37:19Z", "hours": 1.3225, "text": "In my attempt to make the streamExtractor lazily loaded, I caused a deadlock. I have fixed the deadlock and this fixed version is at v0.2.7. The fix was pretty simple, it was to not use CoroutineStart.Lazy because a lazy coroutine may never run, meaning the parent coroutineScope will hang forever. I also switched the backend driver to sqlx4k as it provides a connection pool but more importantly makes the suspend code flow cleaner. I wont switch to Exposed (the official SQL driver) because it doesn’t have the same parallel capabilities as sql4k."}, {"post_id": 60984, "ts": "2026-09-03T17:48:56Z", "hours": 1.7597, "text": "I forgot to add error handling from the original Rust project, so I did that. I also fixed the parallelism by using a Semaphore as limitedParallelism still wakes all the coroutines. Using a Semaphore only allows N permits to be handed out at once. This means that only N tasks would be running at once, given that each task takes one permit. I set N to 8 as that should not cause any throttling but still allow multiple tracks to be downloaded at once. I also implemented better lazy fetching than the old Rust implementation. Now only pieces that must be fetched are fetched, and if they don’t need to be fetched, a StreamExtractor is never fetched. This causes a huge speed up, allowing my ~400 track playlist to be incrementally synced in 8 seconds. Other notable quality of life features (taken from the git log): - refactor: make output use terminal.theme.* - refactor: make output more human readable by using title instead of youtube_playlist_id - fix: reorder items in subtasks so that the text doesn't move everything else"}, {"post_id": 60623, "ts": "2026-09-03T02:30:33Z", "hours": 0.7667, "text": "Shortly after I shipped, I found a better library for progress bars and displaying to the terminal in general. I also made sure that the exists locally log line would be printed out in order. I decided to use it, and I am really happy with the result!!!!"}, {"post_id": 60558, "ts": "2026-09-02T23:48:06Z", "hours": 1.2247, "text": "Preparing to ship the project, so here’s a list of everything I did: added back an edited readme added back the apache 2.0 license fixed the github actions auto release recorded an asciinema cast and put it in the readme made the cli say music-player-kotlin instead of cli …other small changes to make sure its ready for release"}, {"post_id": 60487, "ts": "2026-09-02T21:02:16Z", "hours": 0.7539, "text": "added a progress bar and actually actually fixed the deadlock this time"}, {"post_id": 60469, "ts": "2026-09-02T20:12:04Z", "hours": 0.4286, "text": "I fixed position tracking, so that moved tracks will output a line telling you they have moved. I attempted to fix a deadlock that was happening, and fixed some database queries targetting the wrong table."}, {"post_id": 60450, "ts": "2026-09-02T19:45:23Z", "hours": 1.5511, "text": "I cleaned up the code, bounded parallelism to 8 with limitedParallelism, and tried to optimize the detection of moved tracks"}, {"post_id": 60347, "ts": "2026-09-02T17:08:19Z", "hours": 4.1644, "text": "the rewrite is almost finished thumbnails are now way higher in resolution because we can now get youtube’s webp images. unfortunately jaudiotagger does not support webp images, so i force all images from youtube to turn into a lossless png kotlin is pretty cool, especially coroutines, its like lua’s coroutines but actually backed by a thread pool i need to limit the concurrency but otherwise this is great! very fast even on a debug build what’s left: currently unlimited concurrency, this will definitely crash the jvm on large playlists better terminal output with colors and a diff generator use a temporary table in sqlite to make diffing more memory efficient packaging and ci should be fine since “java runs anywhere”"}, {"post_id": 59975, "ts": "2026-09-02T01:52:56Z", "hours": 4.3806, "text": "i begun porting the project to kotlin while i love rust i also want this project to actually work rustypipe will always be a bit behind youtube’s protections so i decided to just rewrite the whole thing in kotlin so i can use newpipeextractor directly what’s left: tag audio with jaudiotagger use clikt to make a nice command line interface (maybe) add unit tests there is no actual screenshot because i didn’t actually implement the commands yet"}, {"post_id": 51282, "ts": "2026-08-20T20:29:43Z", "hours": 4.3222, "text": "i got rustypipe-botguard working with Nix i still can’t figure out why some videos don’t work sometimes but other videos work all the time i updated the test suite to reflect that"}, {"post_id": 50736, "ts": "2026-08-20T02:44:23Z", "hours": 1.0564, "text": "i finally did the ci pipeline for windows, linux, and macos i wrote a readme but i’ll need to add an asciinema cast to it to make it look better and allow me to ship the project"}, {"post_id": 50703, "ts": "2026-08-20T01:04:16Z", "hours": 1.5878, "text": "thumbnails were really low quality, this change allows for higher quality thumbnails. one example would be 60x60 -> 120x120 still low quality but a higher low quality. other notable changes: unification of all track identifiers into one refetch thumbnails if not existing & do not fetch thumbnail if its {id}.{png,jpeg,jpg} exist m3a -> m3u, it is more compatible with music players (this happened in 4c337f491dd949fdc3f1f5d51363b0342defaac1 on aug 15, i forgot to log it) next thing to do is packaging . this is my worst nightmare so the whole program will be statically linked"}, {"post_id": 50425, "ts": "2026-08-19T16:22:13Z", "hours": 0.5014, "text": "progress bars with tracing-indicatif might have to increase tick rate, it flickers a bunch on release mode"}, {"post_id": 47821, "ts": "2026-08-16T01:05:27Z", "hours": 0.4694, "text": "tracks that are only available as m4a’s can now be downloaded ffmpeg won’t be spawned to remux screenshot is forcefully required so heres the main fix"}, {"post_id": 47801, "ts": "2026-08-16T00:26:22Z", "hours": 3.2114, "text": "/tmp is now only hardcoded in the singular unit test errors are more friendly, m3a generation has been refitted to be m3u generation so that more music players are supported, fixed a bug where songs would be downloaded with audio/{id}..m4a which is an invalid path, and updated the user agent to be a firefox extended support release so i dont have to update it more downloads were broken by the rustypipe switch, so i fixed them by forcing the AndroidVr client. some tracks are weird and still don’t work, but most do"}, {"post_id": 45281, "ts": "2026-08-11T17:10:58Z", "hours": 0.3233, "text": "i fixed the nix build this should allow me to cross compile to windows (maybe with mingw, and after i don’t hardcode /tmp), mac, and linux"}, {"post_id": 45263, "ts": "2026-08-11T16:43:26Z", "hours": 1.645, "text": "i switched from kopuz-server to rustypipe it is much faster and more accurate which may allow me to bypass youtube music’s weird quirk of some tracks only being playable directly on youtube the playlist is now synced in 3.2 seconds, and not 5"}, {"post_id": 44961, "ts": "2026-08-11T02:10:07Z", "hours": 0.8017, "text": "i made tracks that cause errors to show up in the diff form"}, {"post_id": 44936, "ts": "2026-08-11T01:05:27Z", "hours": 1.8956, "text": "i added the base diffing feature i wanted i still need to make it filter out tracks that are unfetchable that are currently marked as “removed” and i need to rename the project to music-syncer"}, {"post_id": 43011, "ts": "2026-08-08T01:30:07Z", "hours": 0.4114, "text": "i added configurable concurrency it doesn’t seem to improve download or sync times but i think now it has to be stdio performance thats holding it back, logging is not free"}, {"post_id": 42935, "ts": "2026-08-07T22:27:17Z", "hours": 0.2881, "text": "i shrunk the number of crates being built from 700-800 to 500 by stripping my fork of kopuz-server of all bloat it depended on lots of crates and most importantly it doesn’t rely on rusqlite 0.31 and sqlx 0.8 the screenshot shows how much smaller the build is now"}, {"post_id": 42401, "ts": "2026-08-07T02:51:53Z", "hours": 0.7711, "text": "parallelism!!! i was able to download my whole playlist in ~30 seconds (with unbounded parallelism that lagged the rest of my laptop) next steps: maybe change parallelism from hardcoded 16 to num_cpus::get() or ask tokio how many threads we have use ratatui and display the status of each song being downloaded, since we’re using tracing we can use https://github.com/gin66/tui-logger use color_eyre https://ratatui.rs/recipes/apps/color-eyre/ maybe add login, some songs are age restricted (even if they have no lyrics) definitely add configurable parallelism; i think this software would rip through playlists if it had more sqlite connections and more threads not really any screenshots to show anymore……. but i can try and show how many tracks were downloaded successfully and how long it took the screenshot is bounded by 16 futures at a time, which is probably too small and the sqlite connection pool is capped at 5. 2 minutes is a lot. but on a good note incremental syncs only take ~5.7 seconds"}, {"post_id": 42363, "ts": "2026-08-07T01:25:53Z", "hours": 2.9161, "text": "i switched to sqlx and the code is much cleaner but now i have to hack around how sqlx builds offline with SQLX_OFFLINE=true cargo build but i only have to do it once then its cached using sqlx is much more developer friendly and it taught me that a connection pool can harm the application because temp tables are only kept per connection not per entire database since nothing really changed but the code became cleaner i will show another music player that can display the generated playlist"}, {"post_id": 42258, "ts": "2026-08-06T21:41:07Z", "hours": 2.185, "text": "audio metadata for this dev log you will see 2 hours for one command spawn and a small refactor. but what you have not seen was 2 hours fighting ffmpeg-next, ffmpeg-sys-next, bindgen, libclang all that to say i decided to not link against ffmpeg, and i am much happier with the result audio players get the title, artist, even cover art all from the track’s metadata unfortunately, youtube music does not attach metadata to the tracks we scrape, so we need to attach metadata attaching metadata to audio files is actually pretty simple thanks to the lofty crate unless the file is a webm. webm does not have any sort of audio metadata (?) so you will need to transcode webm into another audio format to put metadata into the file. i decided to just pick m4a because everything supports it. lastly i did a small refactor because main.rs was pushing 600 lines of code, and i plan to: separate the db functions from the Playlist struct make the code truly asynchronous, which involves moving to sqlx pipeline everything the end result is pretty metadata in Gapless (or any other modern music player)"}, {"post_id": 42119, "ts": "2026-08-06T18:10:03Z", "hours": 0.3578, "text": "I switched from directly printing to stderr to using tracing. The m3a playlist generation works quite well, as you can see in the screenshot."}, {"post_id": 42100, "ts": "2026-08-06T17:43:20Z", "hours": 5.0975, "text": "after a lot of thinking i decided to not make a music player and instead decided to instead make a really fast youtube music playlist syncer the upstream library i was gonna use anyway does not expose YoutubeMusicClient, so i forked it and added a patch so i can use that everything was working until i realized downloads were really slow and the fix was to add a Range header with a value of “bytes=0-” and now downloads are very fast. i suspect that this makes my code look like a real browser to youtube/google which lets me get the normal download speed. i used rusqlite (sqlite rust wrapper) and each playlist is its own database file. i might switch to sqlx because it has compile time sql checking and has a very good async sqlite wrapper everything should work except m3a playlist generation, there are no good m3a playlist libraries so i hand coded it myself and have not tested it yet; UPDATE: it works i tested it now i plan on adding thumbnail deduplication, songs from the same album can have the same thumbnail"}, {"post_id": 24905, "ts": "2026-07-08T19:23:54Z", "hours": 0.8556, "text": "i added support for loading custom tinted-theming themes such as from https://github.com/tinted-theming/schemes the screenshot is using ayu_dark: https://github.com/tinted-theming/schemes/blob/spec-0.11/base16/ayu-dark.yaml"}, {"post_id": 24854, "ts": "2026-07-08T18:14:47Z", "hours": 1.3539, "text": "i added the base code for base16 themes and the skeleton sidebar (no buttons or actual pages yet) i plan for the sidebar to do something with navigation so like a playlists button and because i want the music player to be minimal it will probably become floating and will probably become a small menu icon that when clicked will expose the Playlists button i will probably make some sort of abstract button wrapper since i still need to make the actual full screen player ui which will at least have 3 icons (pause/play, backwards, forwards) the slow resizing issue was fixed by using gpui’s git repository and not crates.io the next steps are to add custom theme support which means i will need to also locate a config folder; i plan on using https://codeberg.org/dirs/directories-rs ; colors will probably be in yaml so that you can copy and paste tinted-theming schemes from https://github.com/tinted-theming/schemes other config settings will likely be in toml oh also i will need to set up automatic binary releases for amd64 and arm64 on linux and macos with github actions, which should be easier because it already uses Nix"}, {"post_id": 24798, "ts": "2026-07-08T16:20:27Z", "hours": 1.6167, "text": "gpui at least with the crates.io version has very slow resizing so i might switch to iced i have some ideas for how data will be stored: sqlite for database engine via sqlx or pure rust library (depends on which one allows to decode into structs) migrations can be done as a map to sql string (version -> appropriate migration) each playlist can be its own database & can store its own downloaded songs because fetching from db is faster: https://sqlite.org/fasterthanfs.html settings (theme) can be done in toml i have also disabled bounds on the gpui window, so thats the screenshot"}, {"post_id": 24396, "ts": "2026-07-07T22:28:27Z", "hours": 0.9344, "text": "I set up the flake at first using rust-overlay but realized crane is probably better so I asked opencode to refactor it to use crane The default gpui example now runs"}]...
|
Title: Music Syncer by @techs-sus | Stardance
Dev Title: Music Syncer by @techs-sus | Stardance
Devlogs:
I set up the flake at first using rust-overlay but realized crane is probably better so I asked opencode to refactor it to use crane The default gpui example now runs
gpui at least with the crates.io version has very slow resizing so i might switch to iced i have some ideas for how data will be stored: sqlite for database engine via sqlx or pure rust library (depends on which one allows to decode into structs) migrations can be done as a map to sql string (version -> appropriate migration) each playlist can be its own database & can store its own downloaded songs because fetching from db is faster: https://sqlite.org/fasterthanfs.html settings (theme) can be done in toml i have also disabled bounds on the gpui window, so thats the screenshot
i added the base code for base16 themes and the skeleton sidebar (no buttons or actual pages yet) i plan for the sidebar to do something with navigation so like a playlists button and because i want the music player to be minimal it will probably become floating and will probably become a small menu icon that when clicked will expose the Playlists button i will probably make some sort of abstract button wrapper since i still need to make the actual full screen player ui which will at least have 3 icons (pause/play, backwards, forwards) the slow resizing issue was fixed by using gpui’s git repository and not crates.io the next steps are to add custom theme support which means i will need to also locate a config folder; i plan on using https://codeberg.org/dirs/directories-rs ; colors will probably be in yaml so that you can copy and paste tinted-theming schemes from https://github.com/tinted-theming/schemes other config settings will likely be in toml oh also i will need to set up automatic binary releases for amd64 and arm64 on linux and macos with github actions, which should be easier because it already uses Nix
i added support for loading custom tinted-theming themes such as from https://github.com/tinted-theming/schemes the screenshot is using ayu_dark: https://github.com/tinted-theming/schemes/blob/spec-0.11/base16/ayu-dark.yaml
after a lot of thinking i decided to not make a music player and instead decided to instead make a really fast youtube music playlist syncer the upstream library i was gonna use anyway does not expose YoutubeMusicClient, so i forked it and added a patch so i can use that everything was working until i realized downloads were really slow and the fix was to add a Range header with a value of “bytes=0-” and now downloads are very fast. i suspect that this makes my code look like a real browser to youtube/google which lets me get the normal download speed. i used rusqlite (sqlite rust wrapper) and each playlist is its own database file. i might switch to sqlx because it has compile time sql checking and has a very good async sqlite wrapper everything should work except m3a playlist generation, there are no good m3a playlist libraries so i hand coded it myself and have not tested it yet; UPDATE: it works i tested it now i plan on adding thumbnail deduplication, songs from the same album can have the same thumbnail
I switched from directly printing to stderr to using tracing. The m3a playlist generation works quite well, as you can see in the screenshot.
audio metadata for this dev log you will see 2 hours for one command spawn and a small refactor. but what you have not seen was 2 hours fighting ffmpeg-next, ffmpeg-sys-next, bindgen, libclang all that to say i decided to not link against ffmpeg, and i am much happier with the result audio players get the title, artist, even cover art all from the track’s metadata unfortunately, youtube music does not attach metadata to the tracks we scrape, so we need to attach metadata attaching metadata to audio files is actually pretty simple thanks to the lofty crate unless the file is a webm. webm does not have any sort of audio metadata (?) so you will need to transcode webm into another audio format to put metadata into the file. i decided to just pick m4a because everything supports it. lastly i did a small refactor because main.rs was pushing 600 lines of code, and i plan to: separate the db functions from the Playlist struct make the code truly asynchronous, which involves moving to sqlx pipeline everything the end result is pretty metadata in Gapless (or any other modern music player)
i switched to sqlx and the code is much cleaner but now i have to hack around how sqlx builds offline with SQLX_OFFLINE=true cargo build but i only have to do it once then its cached using sqlx is much more developer friendly and it taught me that a connection pool can harm the application because temp tables are only kept per connection not per entire database since nothing really changed but the code became cleaner i will show another music player that can display the generated playlist
parallelism!!! i was able to download my whole playlist in ~30 seconds (with unbounded parallelism that lagged the rest of my laptop) next steps: maybe change parallelism from hardcoded 16 to num_cpus::get() or ask tokio how many threads we have use ratatui and display the status of each song being downloaded, since we’re using tracing we can use https://github.com/gin66/tui-logger use color_eyre https://ratatui.rs/recipes/apps/color-eyre/ maybe add login, some songs are age restricted (even if they have no lyrics) definitely add configurable parallelism; i think this software would rip through playlists if it had more sqlite connections and more threads not really any screenshots to show anymore……. but i can try and show how many tracks were downloaded successfully and how long it took the screenshot is bounded by 16 futures at a time, which is probably too small and the sqlite connection pool is capped at 5. 2 minutes is a lot. but on a good note incremental syncs only take ~5.7 seconds
i shrunk the number of crates being built from 700-800 to 500 by stripping my fork of kopuz-server of all bloat it depended on lots of crates and most importantly it doesn’t rely on rusqlite 0.31 and sqlx 0.8 the screenshot shows how much smaller the build is now
i added configurable concurrency it doesn’t seem to improve download or sync times but i think now it has to be stdio performance thats holding it back, logging is not free
i added the base diffing feature i wanted i still need to make it filter out tracks that are unfetchable that are currently marked as “removed” and i need to rename the project to music-syncer
i made tracks that cause errors to show up in the diff form
i switched from kopuz-server to rustypipe it is much faster and more accurate which may allow me to bypass youtube music’s weird quirk of some tracks only being playable directly on youtube the playlist is now synced in 3.2 seconds, and not 5
i fixed the nix build this should allow me to cross compile to windows (maybe with mingw, and after i don’t hardcode /tmp), mac, and linux
/tmp is now only hardcoded in the singular unit test errors are more friendly, m3a generation has been refitted to be m3u generation so that more music players are supported, fixed a bug where songs would be downloaded with audio/{id}..m4a which is an invalid path, and updated the user agent to be a firefox extended support release so i dont have to update it more downloads were broken by the rustypipe switch, so i fixed them by forcing the AndroidVr client. some tracks are weird and still don’t work, but most do
tracks that are only available as m4a’s can now be downloaded ffmpeg won’t be spawned to remux screenshot is forcefully required so heres the main fix
progress bars with tracing-indicatif might have to increase tick rate, it flickers a bunch on release mode
thumbnails were really low quality, this change allows for higher quality thumbnails. one example would be 60x60 -> 120x120 still low quality but a higher low quality. other notable changes: unification of all track identifiers into one refetch thumbnails if not existing & do not fetch thumbnail if its {id}.{png,jpeg,jpg} exist m3a -> m3u, it is more compatible with music players (this happened in 4c337f491dd949fdc3f1f5d51363b0342defaac1 on aug 15, i forgot to log it) next thing to do is packaging . this is my worst nightmare so the whole program will be statically linked
i finally did the ci pipeline for windows, linux, and macos i wrote a readme but i’ll need to add an asciinema cast to it to make it look better and allow me to ship the project
i got rustypipe-botguard working with Nix i still can’t figure out why some videos don’t work sometimes but other videos work all the time i updated the test suite to reflect that
i begun porting the project to kotlin while i love rust i also want this project to actually work rustypipe will always be a bit behind youtube’s protections so i decided to just rewrite the whole thing in kotlin so i can use newpipeextractor directly what’s left: tag audio with jaudiotagger use clikt to make a nice command line interface (maybe) add unit tests there is no actual screenshot because i didn’t actually implement the commands yet
the rewrite is almost finished thumbnails are now way higher in resolution because we can now get youtube’s webp images. unfortunately jaudiotagger does not support webp images, so i force all images from youtube to turn into a lossless png kotlin is pretty cool, especially coroutines, its like lua’s coroutines but actually backed by a thread pool i need to limit the concurrency but otherwise this is great! very fast even on a debug build what’s left: currently unlimited concurrency, this will definitely crash the jvm on large playlists better terminal output with colors and a diff generator use a temporary table in sqlite to make diffing more memory efficient packaging and ci should be fine since “java runs anywhere”
I cleaned up the code, bounded parallelism to 8 with limitedParallelism, and tried to optimize the detection of moved tracks
I fixed position tracking, so that moved tracks will output a line telling you they have moved. I attempted to fix a deadlock that was happening, and fixed some database queries targetting the wrong table.
added a progress bar and actually actually fixed the deadlock this time
Preparing to ship the project, so here’s a list of everything I did: added back an edited readme added back the apache 2.0 license fixed the github actions auto release recorded an asciinema cast and put it in the readme made the cli say music-player-kotlin instead of cli …other small changes to make sure its ready for release
Shortly after I shipped, I found a better library for progress bars and displaying to the terminal in general. I also made sure that the exists locally log line would be printed out in order. I decided to use it, and I am really happy with the result!!!!
I forgot to add error handling from the original Rust project, so I did that. I also fixed the parallelism by using a Semaphore as limitedParallelism still wakes all the coroutines. Using a Semaphore only allows N permits to be handed out at once. This means that only N tasks would be running at once, given that each task takes one permit. I set N to 8 as that should not cause any throttling but still allow multiple tracks to be downloaded at once. I also implemented better lazy fetching than the old Rust implementation. Now only pieces that must be fetched are fetched, and if they don’t need to be fetched, a StreamExtractor is never fetched. This causes a huge speed up, allowing my ~400 track playlist to be incrementally synced in 8 seconds. Other notable quality of life features (taken from the git log): - refactor: make output use terminal.theme.* - refactor: make output more human readable by using title instead of youtube_playlist_id - fix: reorder items in subtasks so that the text doesn't move everything else
In my attempt to make the streamExtractor lazily loaded, I caused a deadlock. I have fixed the deadlock and this fixed version is at v0.2.7. The fix was pretty simple, it was to not use CoroutineStart.Lazy because a lazy coroutine may never run, meaning the parent coroutineScope will hang forever. I also switched the backend driver to sqlx4k as it provides a connection pool but more importantly makes the suspend code flow cleaner. I wont switch to Exposed (the official SQL driver) because it doesn’t have the same parallel capabilities as sql4k.
To help users migrate from the old Rust implementation, I made it so that a sync will re-tag the track if the track’s thumbnail does not exist on disk. The Kotlin implementation always gets higher resolution images, so this allows for much higher resolution track covers.
I made it so that thumbnails should now be even higher quality, it does take more storage but the difference is quite noticeable on some music players. Also small hotfix, if you accidentally pass in another unrelated SQLite database it will now not run migrations on it before erroring.
I added duration tracking to the database. The M3U generation now doesn’t hardcode 0 as the duration.
I made position diffing aware of insertions and deletions, so that output is less bloated with useless move info such as 0->1, 1->2, etc. I also did some optimization by using database transactions wherever possible. I can’t do it in the main sync body because it is bounded to its own coroutine scope.
I now detect invalid playlist ids and print out an error telling the user how to get a valid playlist id.
I watched a Kotlin talk about Flows and I was inspired to rewrite my program using them. This made my program more efficient, idiomatic and also helped me fix the annoying progress bar refresh bug (multiple old bars shown). It also let me actually properly sort by position across all 4 status types (added, removed, moved, errored). I also made the downloading functions use one underlying common function to clean up the codebase. I also removed sqlx4k because it wasn’t actually parallel and was causing issues with init. Here, in the screenshot I am showing the new elegant code for the logging of track statuses. It used to be many individual async calls, but flows allow me to group them up and sort them.
I redid the cli structure to group all the playlist commands under one common playlist parent command. I also implemented a clean up command to help people save disk space because SSDs are expensive right now. For example: music-syncer-kotlin -p path init -> music-syncer-kotlin playlist -p path init This was a necessary step so I could implement the clean up command, which deletes audio and thumbnail files that are not used by any playlists in a container. A container is the folder holding all the databases. Here’s everything I did, stolen from my commit message: feature: add clean-container command - refactor: add hasTrackInDatabase to the Playlist class - refactor: move knownFinal{Audio,Thumbnail}Extension out of class and make it const - refactor: nest all playlist commands as one subcommand - refactor: make cli help text more helpful - refactor: always print something to the console to let the user know that everything went well - refactor: do not use PlaylistHolder, use currentContext.registerJvmCloseable to clean up playlist - fix: when thumbnail is newly created, retag should silently fail
I finally silenced those pesky slf4j and unsafe memory access warnings. Just added the slf4j-nop library and a JVM flag.
I added GraalVM native image support. The actual implementation is boring but this makes the program’s cold starts faster and makes it feel more native. Not sure if this helps with battery life, but it might. This definitely helps with memory usage, the program only uses ~100mb syncing my 400 track playlist. I restricted the native image to Nix because the releases are supposed to always work on all platforms.
Squashed more bugs, updated NativeMetadataMain.kt so that reachability metadata includes image i/o. This makes the Graal native image actually work when having to convert from webp to png. This will be a non issue when I can find an image library that is written in pure Kotlin. The last shipwright to review my project tried syncing a mix, which is infinite. So I added an error for that and made sure no one will run into unexplainable errors again.
Tiny change, I switched from scrimage to ImageIO. It works much better and should be less error prone as scrimage would vendor in webp binaries, which is not cross platform.
I fixed the binary in Nix, it works now, also updated the asciinema cast it was missing some reachability metadata and required LD_LIBRARY_PATH to be set to the jdk’s libraries.
I fixed another Nix graalvm issue. Some mp4s wouldn’t be tagged properly, so I fixed that.
Ships:
I made a Kotlin CLI program that synchronizes a YouTube Music playlist to a SQLite database locally. I made this because I want to be able to play my music freely even when YouTube Music or my network is down. The main challenge was finding a library that would let me get the data I needed (artist, thumbnail, audio tracks, etc.) from YouTube Music, and I even had to rewrite the entire program in Kotlin from Rust because the library I was using couldn’t download audio properly....
|
1793098041.1806443
|
1793184441.1806443
|
|
30331
|
∇Calc by @EngThi | Stardance
|
EngThi
|
0
|
64.45
|
0
|
[]
|
[{"post_id": 79791, "ts": "202 [{"post_id": 79791, "ts": "2026-10-15T12:42:36Z", "hours": 0.5311, "text": "I just finished redoing the parts of the case the parts there and everything else in the project after this second round. This last one that was missing was from Part Studio 4 , which was the little slider drawer for camera privacy and protection on the back 🔒 , along with Part Studio 5 where I made the sliding lid/cover. Very, very simple. I also added some small slots there just to give it a nice tactile texture/grip — pretty small, with a 0.350 mm cut extrusion (removing material). That was kind of the piece I was still missing. It was simple and quick since I already had the basic idea from earlier attempts. Oh, and one thing I think I forgot to mention before: I imported .DXF files into the sketch to help guide the drawings, basically defining the extrusions for the parts. It turned out pretty good! To wrap up, I added what I had forgotten before: the mounting holes on the back cover bosses. Put 1.6mm holes there to hold the screws properly ⚙️ ."}, {"post_id": 79509, "ts": "2026-10-14T11:14:33Z", "hours": 1.2011, "text": "For now I’m working on the CAD ; I had finished the PCB. I put up a quick video of how it turned out I recorded it with Canva, which I’d used before for a school project, and it works. I even have the Spectacle app for Linux , but it records in 720p, which looks kind of bad, so recording it online through Canva ends up looking way better. Basically, it has the dimensions of part two , which I was rethinking and everything. And well, this was more or less the idea I had: there’s the front part for the buttons, and in this other version, it was supposed to have a passage for a circuit board to fit a small solar cell ☀️ . Depending on what I can find around the house and if there’s any leftover space in the casing (it’s pretty much ready), I might implement it even if it ends up mounted on the outside rather than inside the case, just for reuse and photovoltaic charging. Then I also put the back part together: the little hole for the camera 📷 , the slider for its protection, and on the side, the microSD card slot. The keymat for the buttons which I changed the layout of, so it’s not square anymore now has roughly the positions for all 49 keys and the holes where the support bosses will go. There’s also that little strip/rectangle, which is meant to be the protective cover fitting right into the other slot. Basically, that’s it! I’ll continue and tweak it later. It’s not too difficult, and I think it’ll be finished soon."}, {"post_id": 77958, "ts": "2026-10-08T23:51:34Z", "hours": 0.9608, "text": "It’s kind of funny that I messed with this again, but basically this is a version where I repositioned the buttons and pins because, well, I decided the keys aren’t going to stay as a plain square matrix. So I kind of organized and divided things there to get a better idea of how the pins will be placed roughly around the center. On the top part, there’s sort of that D-pad area (not an actual single pad, but the individual buttons for that navigation). That circular button style you see on game controllers, handhelds , and on some other calculators too. I also moved the FPC connector over to the corner so it’s way easier and cleaner to connect everything up . On top of that, I rounded the board edges in this version. Overall, that was pretty much it! Lapse: Lapse"}, {"post_id": 77073, "ts": "2026-10-05T15:33:01Z", "hours": 0.7336, "text": "Keypad PCB done! Top & Bottom preview Now that I’ve finished, I’ve completed the PCB both images, the top and the bottom . I left the spaces for the M2 screws and already rotated everything, it was pretty easy! Basically, I kind of left an array, a 7x7 matrix . The keys would be more or less standardized and the only difference would be in the pad — like, in the rubber, the material that you press to trigger that key. That kind of thing. It turned out pretty nice. It’s simple, it’s actually simple to do this part, this kind of thing… That’s how it turned out. I’m not sure if I’ll tweak it much to add things like a D-pad or other types of keys for navigation, functions, the numeric keypad itself , that kind of stuff."}, {"post_id": 77024, "ts": "2026-10-05T12:20:38Z", "hours": 1.9592, "text": "I’m back! Finalized the second PCB for the keys Well, yeah, I’m here again. I’m back, it’s been a while since I was away, right? I waited for things to settle down here so I could continue with the project. Yeah, and I finalized the idea of making a board on the second PCB there, where the buttons will be, you know, the clicks to use the calculator keys . And this here was kind of leftover code organization I was doing in the repository . I ended up not remembering everything from the project, but now I’m here again. So I’ll finish this up. It was pretty simple, I didn’t record it. But basically, I made a 7x7 matrix of switches , the buttons. Along with that, there’s the FPC connector to actually connect the board to the ribbon, to the rest of the MCP expander. I’m going to tidy it up a bit. The board also ended up being quite small 84x78 basically just to fit there, it would provide support and, you know, fit the switches at the distances that had already been predetermined in the case , right in the middle of the product’s housing. And then, along with that, the schematic is also simple, I just put an FPC connector , that’s all that’s really needed, and the buttons, the switches. Really simple. I think it’s interesting to mention (diodes & debounce): I was also going to use, you know, I was looking, people were saying, it’s good to use diodes , but just to kind of reduce debounce , fix certain issues, but it wouldn’t be that necessary, since the contacts closing would almost never happen like, I don’t know, three clicks at once, one next to the other. So that doesn’t really cause a problem where the ESP wouldn’t know exactly which key is being pressed and what it should do with the signal it’s receiving. And depending on how you study it and see how to handle it in the firmware , it actually wouldn’t even be that necessary to put these diodes on each of these buttons for that."}, {"post_id": 58915, "ts": "2026-08-31T14:11:46Z", "hours": 1.8789, "text": "almost ready to submit!!! Finished and I’m getting ready to submit the project for review! I took some new renders and also did the prices part for the project items. I have everything here now and it is looking nice. Like I said before, I left some points to see and change better on the case when I have everything in my hands, so I can prototype 🤖 it better. I don’t have much skill with soldering, so I really hope I can get the Top PCBA . This is all really cool and interesting that I was able to do, and I’m really happy about it. At the end I also organized things a little more and changed stuff to track what is needed in the repo , help anyone that wants to look at it or reproduce the project somehow. The System architecture section got really cool in the translation and organization, AI did that . I don’t really know how to make this type of diagram myself yet :/ I hope I didn’t forget anything and that the organization I made, and later asked to improve, documents the state well. Basically I: I finished organizing the repo, checking the prices, calculations , etc., taking screenshots , I kept iterating in the repo, editing, moving things , that kind of organization 🗂️"}, {"post_id": 58142, "ts": "2026-08-30T14:30:08Z", "hours": 0.6419, "text": "more docs things right these Well, I tidied up the README and organized the folders and file names better. The repo in general . The other image is because I think I didn’t show it properly here and I was reposting , checking items and analyzing anything left there on EasyEDA"}, {"post_id": 57737, "ts": "2026-08-30T00:16:59Z", "hours": 1.2197, "text": "its possible only four images… I fiddled a bit more with these items, files 📁 , repo organization , stuff like that . Also, I took screenshots of some views from the project’s mechanical render … I’m not really focusing on any one part, but I tinker a bit here and if I remember something I should have done or think could be better, I take care of it. Like parts of the firmware, code, repo organization, images, and the internal side of the apps: CAD and EDA . Basically, that’s it, to sum up . I forgot to put the others Lapse"}, {"post_id": 57543, "ts": "2026-08-29T18:35:03Z", "hours": 1.2081, "text": "I’m done here! The two files we worked on are finished. Now we have the initializer and use of the MCP23017 (I’ll just write MCP from now on in this log) . The addresses have been mapped and the registers too. You can see what happens along with the logic of keeping the line in the LOW state and the rest HIGH . In this part, it’s necessary to use masks and bitwise operations to see how it works. It stays in a loop analyzing what was pressed and, of course, if something strange happens outside the configuration, it throws an error saying UNKNOWN ."}, {"post_id": 56813, "ts": "2026-08-28T18:53:29Z", "hours": 1.4183, "text": "I made a lot more progress on the firmware !! As I said, the functions , declarations , and general use of the ESP-IDF are standardized , so it’s simple to build by consulting materials: docs, example codes, usage with some peripherals and components, AI , etc. In this case, the use of I2C and SPI communication is also well organized. The drivers for the components I use don’t give you headaches for this. Previously, we had already been working on the ‘macros’ part, or rather the project HAL , even without knowing what it was. In the second image, there’s the keymap, made as a 7x7 matrix for the calculator - what the keys do. That’s already connected to the names of each key . The scanning was done, a loop that identifies which keys were used, and the rendering of the items on the display . Taking the data buffers and transitioning the communication with the ESP about what was pressed and how it will relay that to the screen. I think it’s interesting to mention: Explaining how key reading works with the MCP: each key is assigned by the matrix indices - row x column. The columns are set up with internal pull-up resistors, so when inactive they measure 3.3V (level 1). The ESP pulls the row to 0V (level 0), and when a key is pressed, it knows it because it reads !=0 from the column and matches it with the row it’s accessing to get the unique identifier for that key. That way you know 100% for sure what was pressed. And this cycle keeps running every few milliseconds."}, {"post_id": 56250, "ts": "2026-08-27T22:35:57Z", "hours": 0.6989, "text": "I got started at the base and analyzed the HAL (Hardware Abstraction Layer) of the project. I was studying some things, basically the functions and how to use the framework . I noticed that the functions are pretty standardized, like how to use registers, handle addressing, and use macros , directives/variables . Basically, the headers I was going to use and docs and things like that I was checking out, now speaking exclusively about the Aliexpress display that was in Mandarin (some of the ones I saw while researching) and offline I was tinkering and looking at some things, asking AI to explain and check things to move forward . I got the variant I was going to use, and later on it got analyzed and the board_pins.h ended up fine. I also started messing with the keypad, just defining it and later on how to monitor and use the identifiers of each key ."}, {"post_id": 55265, "ts": "2026-08-26T23:21:10Z", "hours": 0.9006, "text": "I started looking more closely at the firmware part ! Actually, I’ve never worked with ESP-IDF, so I’m going to take another good look at it and refresh myself on things I might not be prepared enough for. I grabbed it to check out and study with the example code \"Blynk Led\" —the one in the picture is a different one. It’s to control the internal LED with the BOOT button. I’ve seen a bit, and RTOS seems really cool, here it’s FreeRTOS . But you need to pay attention and be aware, understand how things work. I feel like it’s going to be a long and tough road… but let’s go! The good thing is that we have AI to help us out and clarify points, test stuff , and so on."}, {"post_id": 54514, "ts": "2026-08-25T15:21:59Z", "hours": 0.6925, "text": "I finished working on a few more things in the Assembly . I was aligning the cut positions in the view (remove extrude) and it took a while because the Mates , Fastened Mates created kind of restrictions that didn’t allow certain parts to move. Also put the 3D for the display. Then at the end I made the first commit to the repo! Lapse"}, {"post_id": 54126, "ts": "2026-08-24T23:04:44Z", "hours": 1.725, "text": "I just tweaked the parts a little more and then went to the Assembly . The PCB step was 50MB and took a while to load, and then when I tried to insert it, it didn’t load everything right after choosing a square option with a symbol similar to the Part Studio one, but eventually it worked. I used some fastened mates to join the items, and since this isn’t constant and there are hollow parts where you want to center/place in a specific spot, the Mate Connector doesn’t apply, so I used something like the transform to select the piece. That’s how I kept going until I got here! In the middle of the work, I had to edit the Part Studio because some points differed from the positioning and mounted parts of the PCB , like the USB and microSD . That’s it—work, found mistakes, fix them, and move forward! Lapse"}, {"post_id": 53863, "ts": "2026-08-24T15:49:47Z", "hours": 0.6503, "text": "What happened with the keypad being wrong was that in the sketch I dimensioned it incorrectly (swapped height for width) , and that’s why some of the blocks went beyond the edges and weren’t symmetrical. I imagined that might be it and fixed it . I made a rectangle there thinking about maybe adding a simple lens protection for the camera. After that, a rough idea of the cover that is usually used to protect the front part. Besides that, just a simple fillet on the sides. I did that, but I admit I might change this idea and its overall shape . Once I have everything in hand, I’ll update it to have a proper enclosure . Lapse"}, {"post_id": 53704, "ts": "2026-08-24T11:43:25Z", "hours": 1.1836, "text": "I finished the rear shell for the case. I made some bosses for the PCB fitting. It’s noticeable that the top right one is misaligned. I mentioned before that it’s because the traces and components were occupying that space, and when I remodeled it to 84x85 , the hole slots didn’t go along—they got lost on the canvas . Later I remembered, organized, and figured out a way to put them like this. Only one ended up 'strange,' which is NOT a problem at all. I made the shell 1.8mm thick and also cut the slot for the camera. I left the keypad at 74x80 , making a 7x7 feature pattern . This still bugs me because it doesn’t look right and the logic seems to change… I just need more experience and general practice to be ready for different scenarios. Some parts went out of place, but it’s just a matter of testing measurements until it works and maybe checking some guide videos on how to use this feature correctly . Lapse"}, {"post_id": 53406, "ts": "2026-08-23T22:58:39Z", "hours": 1.8672, "text": "I had made a Variable Studio but I end up not using it and don’t remember much. I asked the AI for help since I’ve never really worked with this item and it seemed better for standardizing and putting something defined that is used constantly. But in the end, I remember the quota values and some calculations are simple. Here I did the rear and front parts of the case, I didn’t do the extrusion there but it’s more or less correct. I had been thinking, and as I said, I worked on an idea and previous version, so it was actually pretty easy for that."}, {"post_id": 53124, "ts": "2026-08-23T15:34:18Z", "hours": 1.4269, "text": "I finished placing the holes on the PCB. Actually, I had forgotten… I was focused on finishing and trying to deliver something more professional in the routing part that when I finished I was like \"finally did it? Can I export the production files now?\" and the happiness and rush of the moment made it happen . It wasn’t possible to perfectly align the holes and the thought I had because of the traces I needed to place on the PCB, so it stayed like this. Only the top-right one ended up ‘different’. Now it’s just finishing the PCB and fixing the firmware . I was already checking and testing a bit offline."}, {"post_id": 51854, "ts": "2026-08-21T18:37:09Z", "hours": 3.1492, "text": "I routed a lot more! I tried, tried to optimize so I wouldn’t have to run traces on Inner1 , but it really wasn’t going to work. Partly because of the layout and distances of some ICs to the decoupling capacitors , practices for better signal quality . I forgot ( ) and it was already almost done , so I came here to post up to this point Lapse: Lapse"}, {"post_id": 50471, "ts": "2026-08-19T17:13:34Z", "hours": 3.94, "text": "Well, what happened. I went to check the price of the PCB – in this case, when exporting the GERBER it showed a price and it was pretty expensive, $33! The other 3 boards I made were within the 100x100 size and, if I’m not mistaken, the most expensive one was listed at $7. Here I’m kind of making different versions and testing, experimenting with what happens with certain configurations (size, traces, layers, type of components, price,…). I was putting it off and taking my time because I wanted to use what I had from the other one, but then I decided to start routing from scratch."}, {"post_id": 48112, "ts": "2026-08-16T12:20:20Z", "hours": 1.2892, "text": "I’ve practically finished the new schematic for the raw camera version. I managed to tidy up and properly organize the layout for this new part. First, I looked over it to see what I could add and prepare in positioning the new components for routing. The camera I left is one that uses an FPC connector . I’ve already put this item in place, arranged it with LDOs , translators , and controllers . Basically, it’s about handling the signals, how they occur, to make them compatible with the module I took and the rest of what I had already prepared. It got a bit messy because I really need to see how to place each item, and I wanted to make use of a large part of the general layout from the other PCB version … lapse"}, {"post_id": 47488, "ts": "2026-08-15T12:52:48Z", "hours": 1.2344, "text": "I made some changes and was researching a raw version with the OV5640 . To make it a more controlled and integrated work, and thinking about reducing it and making the aesthetics of the project look more like what it really is, reducing the thickness, I changed and added a lot of other components and I’m starting to organize them to be on the Bottom Layer. I need more LDOs , capacitors , and resistors . Simple, right? The passives and ‘controllers’ for electricity, current, voltage, etc. I’m not really knowing much about the impedance part, so I use ChatGPT to guide me, teach things, and think about the structure of the project, the PCB… Lapse: Lapse"}, {"post_id": 46376, "ts": "2026-08-13T15:31:34Z", "hours": 0.7503, "text": "Well, things were already going pretty well. Basically, I messed around a bit with the routes since the camera pins would be placed behind the PCB, like on the bottom. Then I changed the header layer and rerouted it. Now I managed to remove the header from the 3D preview (since the header was used to make the holes and get an idea of the position of the Arducam pin rows). When I have it in hand, I’ll solder everything directly onto the board. I was messing around a bit with other things too, in the firmware, doing research, checking data, etc. I used ChatGPT for that and even Antigravity. Then I moved forward with some things, checked, asked about the case. The thing is, I’m busy (or I should be) and couldn’t really do sessions and things of the project that I was working on to save. And then I really ended up forgetting to make the Lapses… a lot of times it was gradual work, bit by bit, and sometimes I’d go a while without touching it because I depended on my parents to call me or something like that, a pause. As far as I remember, I used to be able to edit the Lapses before, but I think it’s better to do it directly. All of this wasn’t just 17 minutes! I realized that there was a WakaTime extension for EasyEDA and Onshape. At the time (~ about 5 months ago) I didn’t know about Lapse or anything like that and ended up using this. I ended up creating more than one project to test things out, run tests, and see other people’s implementations. And it turned out they came out with very similar names and all. I didn’t remember the name anymore and I think I synced a few incorrectly. I fragmented the time. BUT REALLY MOST OF IT WAS BECAUSE I DIDN’T RECORD, ETC. I think you can add like 3 more hours"}, {"post_id": 43610, "ts": "2026-08-08T23:42:13Z", "hours": 1.5008, "text": "Well, I tweaked the PCB design just a little more. Actually, very little—I was just seeing if there was a way to handle the USB traces since these two NETs were 170mm and had a lot of vias . The center already had the other components and trace routing, so I guess there wasn’t much to do. And honestly, I’m not experienced, so I don’t know how to make these things better . Along with that, there’s roughly an idea of how the project case will look and the items I had already been working on."}, {"post_id": 41474, "ts": "2026-08-05T18:14:06Z", "hours": 0.9006, "text": "Finally the errors disappeared… it turns out you had the custom DRC rules that I set. Then, like 2 or 3 NETs had thickness rules that couldn’t be followed because QFN components and the VSON package type have pads really close to each other (pitch) , so there was no way to route 0.8mm traces on components with, like, 0.4mm pitch . Obviously, you had to reduce it to make it work, but I didn’t know by how much and whether it might be wrong at some point, cause problems, or lower the PCB’s lifespan. 😶 I figured out how to change the rules and get things fixed and done. Man, I think I should review it again and really check some automatic NETs from the editor. After all these days without touching this, I noticed there were these NETs without descriptive names . I don’t remember if it’s because I didn’t assign a NET, or if it’s just that connection between those pins or something like that. But overall it’s going to be easy. I really hope SO MUCH! Lapse Lapse"}, {"post_id": 41406, "ts": "2026-08-05T16:27:53Z", "hours": 4.0842, "text": "I’m back… I won’t be able to be very active here due to classes and coursework. I spent a good few hours working on this, but when I checked, it only showed 23 minutes… Maybe I linked the hours to the project incorrectly. Actually, there’s a file with the same name plus “_copy” at the end, and I thought I was already working on the right one. Well, I actually finished the routing. It turned out there were some copper islands that weren’t connecting to the rest of the pour, so I had to route them too. But to me, some of the ones flagging routing errors (showing ratsnests) didn’t look isolated and should have been able to join the copper plane. Oh well. The center ended up looking messy; that’s where the components—and consequently the traces—are concentrated. I’ll probably have to find a way to optimize and work on that. Plus, there are 39 DRC errors now… I hope I can submit this project; I’ve already done two others, but the deadline unfortunately ran out while I was optimizing things, addressing review comments, and dealing with components and budget issues. Oh, the way development work and hardware projects are recorded has also changed; now there are timelapses available here on Lapse : Lapse Lapse Lapse Lapse"}, {"post_id": 34370, "ts": "2026-07-25T00:59:26Z", "hours": 0.8669, "text": "I kept routing. I made the port expander matrix (the one on the FPC in the center left), the header for the camera, and practically all the ESP pins I’m still thinking about tidying it up a bit to reduce the number of traces going into the antenna area. There have to be traces coming there, it’s already acceptable as it is, but I will optimize… That’s kind of it."}, {"post_id": 34268, "ts": "2026-07-24T20:33:45Z", "hours": 2.6953, "text": "I was researching, looking at some more DOCS and just tidying up the last bits to start routing. I used Perplexity for some research and to cross-check data and see the trace widths for the NETs. I put DRC rules, so it’s much easier to work, because when you activate routing on a NET it automatically sets that thickness and rules in the project. I routed these more critical parts, power, data, a bit of the display part and stuff like that. Even with plenty of space, it already got a bit messy. This is my third board, so I’m still not that experienced with it. But this is the way to go. Most likely I won’t have to go back and change components. I just need to finish routing , think about the case and its mechanics What annoys me the most is having to return/exchange a component or it not being what I expect. In the case of marketplace sales, stores like Aliexpress"}, {"post_id": 33125, "ts": "2026-07-22T19:01:55Z", "hours": 0.7283, "text": "What I changed At the top, there’s the 2x11 header for the ArduCAM module—you just need to plug it in. I also added a few more devices (actually kind of switched around their positions and values). I hadn’t shown it before, but I imported this 3D model and linked it to the display device . I did a general cleanup and a lot more research , tests , t hings like that . I’m doing kinda okay. I kept waiting for the sellers to respond to me. But I didn’t get much, I could only get one reply per day. I would send messages there, but it was like 11hrs over there, outside their working hours. A lot of time for nothing… Also, that display manual/datasheet didn’t come with the dimensions of the display assembly, like the total height and the screen size I needed. I found it on a website, and it said 6mm, so I left that to do the 3D design to import the STEP as a 3D model. Another seller said they didn’t have the manufacturer’s data I needed for the camera to check the dimensions and the bus. I wanted one that was 3.3V , and usually it’s the common 22 or 24 pins. But random ones from Aliexpress can easily change something in the pinout or order, which breaks everything. Here I’m kind of developing the project blindly . It has to be a really precise version, and that’s difficult… I think I’m going to go with the ArduCam module. It’s not small or as modular as others, but for my case it’s probably okay. (until now YES)"}, {"post_id": 31507, "ts": "2026-07-19T23:30:21Z", "hours": 1.6856, "text": "As I said, I was going to send a message to the sellers, but I procrastinated, and by the time I sent it, it was already the weekend there. The sellers are Chinese, so their time zone is 11 hours ahead. Actually, it’s already Monday there now, so I think there’s no need to resend the message since mine is already in the queue (I hope…). Anyway, I messed around a bit more, organized the schematics a little better, added a few things, and thought about, more or less, how the items could/should be distributed on the PCB, so I did that with the images. So, this whole size isn’t totally necessary. It will help when routing, but there really aren’t any problems with that. What I might do is remove the part where the display goes since it will be securely framed in the future case. They sent the link to the display manual"}, {"post_id": 30148, "ts": "2026-07-17T14:17:14Z", "hours": 0.7, "text": "organizing schematics Here are the schematic pages I’m organizing: 01_SYSTEM_MCU , 02_POWER_USB , 03_KEYPAD_IO , 04_DISPLAY_STORAGE , Actually, I’m still missing one more schematic image: 05_CAMERA_TBD . It seems only four images are allowed per devlog. That’s it—trying to follow a logical organization, with a left-to-right flow and the power sections included :|"}, {"post_id": 29867, "ts": "2026-07-17T00:59:00Z", "hours": 1.255, "text": "I added a few more components. The thing is, I’m preparing how I’m going to connect the keyboard/MCP of the keys to the circuit, and for that, I’m going to use an FPC for it and other LDO parts. Parts that deal with inductance/decoupling and protection of the circuit components. I had to research and really look into things, and I’m already checking to find a module/version of the OV5640 with DVP FPC . I had to keep changing and reviewing the practical use of the components and kind of the electrical **‘needs’ **of the setup."}, {"post_id": 29153, "ts": "2026-07-15T21:01:04Z", "hours": 1.1164, "text": "I switched the MCP MCP23017 to a QFN type. I realized that in the end, everything was most likely going to be pretty big. The final product thickness is around 15mm or more. So now I’m studying and researching to change the components, organization, and then properly design the mechanics in CAD/case so everything stays stable. I didn’t really know the display dimensions. Some are kind of generic, with chip data/technical specifications giving a certain thickness, but most don’t have thickness. Looks like I’ll have to message the Aliexpress seller to get the exact data… I feel way more lost than I should. It’s annoying because I had already thought a bit at the start and there wasn’t supposed to be so many reconstructions/pivots in the project."}, {"post_id": 28238, "ts": "2026-07-14T11:46:50Z", "hours": 1.6344, "text": "Well, what I kept working on was the case. I was thinking that the right way is to make three separate parts: the back part where a phone case fits (thinking in this case), the front part where there are holes for the display, keys/buttons, etc., and the sliding cover with the tracks. This one, when using a normal calculator, usually fits on the back of the body and when not, it fits on the front, storing and protecting the screen. In my ideas, I asked Gemini to generate these images to help me clarify my thoughts and development. It turned out good! Another thing is that I noticed the display PCB module isn’t centered relative to the screen at all. Because of this, due to the width of the PCB and the case ending up close to the display module, it can’t be centered since there’s little free area for horizontal movement and the board would already touch the case walls. I made this 3D model to see roughly how it would look, and it looked weird. Not too much, but… The thing is, I usually do some stylizations, drawings, stuff like that. It would be possible to put a solar panel there, yeah, but I’m not going to go back much to that part of the EDA and rethink the system, mechanics, and circuit logic."}, {"post_id": 27633, "ts": "2026-07-13T12:05:34Z", "hours": 2.5256, "text": "I was supposed to post yesterday but my uncles came over and I didn’t get back to it at night here I’ve pretty much done the part that holds the PCB . The shell , I recessed inside it, and in the other picture you can see I made an Assembly to see how it was coming along and to have an idea of where the screw holes for the PCB are, and later what I should do on the case. I haven’t done this yet, but you can see some Mate Connectors in the picture of the case alone (the light blue, slightly grayish part) . I tried to make the holes, but the sketch planes and flat planes were on the top face and I couldn't make the holes . I spent some time trying that. I don’t know, but probably if I make a sketch on the bottom of the case I can make the holes. That’s it, 3D for EasyEDA , I’ve already fixed it in Onshape and I’m doing well with the case part. 🫡🙂"}, {"post_id": 27287, "ts": "2026-07-12T18:46:51Z", "hours": 1.1164, "text": "I finished tweaking a few more things in the PCB schematic and getting it ready to export a STEP to use as a base in Onshape. Actually, I made the display way too big, standardized at 10 or 15mm, but it should be something like ~2.8mm . The thing is, when I was moving some items around, it ended up moving the Board Outline too, even though I didn’t select it… so I locked it to prevent that from happening, and I’ve already done the same in Onshape . Now I’ll start on the case and then come back to routing"}, {"post_id": 26282, "ts": "2026-07-11T00:03:35Z", "hours": 1.0503, "text": "As I said, I didn’t see the dimensions of the full PCB for the 2.8 inch version , and because of that, I was going to need to change the board (since I don’t want to increase the size of the final product). So I went after the dimensions of the 2.4 inch version and made the rectangle just to represent the space it would take up in the PCB schematic. A strange thing is that when I went to change the 3D model of the device , instead of changing it, it added another part to it. I had to overlap them so it wouldn’t look so weird there in EasyEDA. Here is the image of parameters"}, {"post_id": 26039, "ts": "2026-07-10T16:52:05Z", "hours": 1.2689, "text": "I was getting ready to start routing, but then I decided to take a quick look at the schematic again and check if the power supply and protection/best practices part of the circuit was all good. I consulted Perplexity and it suggested adding resistors and changing a capacitor on the EN pin of the ESP. I changed it from 100nF to 1uF and added a 10kΩ resistor along with it. I had already added resistors to the SDA and SCL pins and I don’t remember if I changed that.. I also looked up the data for the external components. The display and the battery. I wanted to make a 3D model to make it look better and to get an idea in the EasyEDA rendering. I searched for the display data on the site, on its manufacturer’s website but found nothing. So I googled it and the data came up on a site already known here and there it was fine, that must be it, I needed the thickness in this case ~15mm. Ah, and I hadn’t noticed that the footprint I made for the display was only for the screen, not the complete module. Then I realized it’s going to be bigger than one of the PCB dimensions I had in mind… It’s supposed to be like that, I hadn’t noticed but in the image I attached with the green arrow it shows that it’s 50x86mm"}, {"post_id": 24935, "ts": "2026-07-08T20:19:46Z", "hours": 1.1667, "text": "more for PCB"}, {"post_id": 24848, "ts": "2026-07-08T17:59:50Z", "hours": 1.25, "text": "Here I made some mistakes… I thought I had done the footprints, but after entering the 3D view/rendering of the PCB, I saw that there are only holes in the devices I made (these two in the attached images). I made some area that is seen as non-outline or something like that of the PCB. So I’ll have to fix that 😑 I also made an area on the board that will not have PCB material (FR-4) under the chip/module ESP antenna. This and the 15 mm keepout area around the antenna are to avoid interfering with Wi-Fi and Bluetooth connectivity ."}, {"post_id": 24636, "ts": "2026-07-08T11:08:13Z", "hours": 1.0189, "text": "I kept working on the PCB schematic . After tidying it up a bit, I decided to make a device and footprint for the battery I’m going to use. It’s kind of standardized with dimensions of 10x34x50 , A type with 2000mAh. That’s it, I made a rectangle of 84 by 165mm and put some holes 5mm away from the edges. I still need to figure out what type I’ll use, whether it’s countersunk or not. But either way, between 2.2 and 3mm ."}, {"post_id": 24419, "ts": "2026-07-07T23:26:18Z", "hours": 1.8364, "text": "I’m still working on the schematic… I was finishing organizing things and then messing around with the PCB design at the end . I’m going to call it PCB SCHEMATIC . Earlier I changed the display to a 2.8 inch one because I realized it was going to be too big, and the style I’m going for is kind of like this Casio ClassWiz Here in the attached images are the drawings of the device and footprint ."}, {"post_id": 23722, "ts": "2026-07-06T20:42:28Z", "hours": 1.9294, "text": "Here I tried to fix the NETs of the components and connections. I looked for the datasheets of the devices I’m using (it was easy since I just had to go back to LCSC with the Part Numbers , and on its page, the datasheet is already there ). I downloaded them, some in English, others in Asian languages (I think if I remember correctly there was only Mandarin and Korean). I uploaded them to NotebookLM, and it gave me an overview of how things worked and pin data, that kind of stuff . I saw that I had done some things wrong yesterday, so I had to fix the labels and that kind of stuff."}, {"post_id": 22336, "ts": "2026-07-04T19:13:23Z", "hours": 2.0931, "text": "I created another device—just to simulate the 3.5 LCD display I found on AliExpress. After doing some research and looking at other options, I decided against using Seeed’s S3 Sense. It comes with an OV2640 camera, but I’m going to use an external OV5640 module instead—a 5MP one I bought along with the other two . I did some research, checked out components and versions in the LCSC library , verified a few things with Perplexity, and added the items to the schematic. It’s still pretty messy, but I’ll clean it up, organize it, and get the NET’s sorted out later."}, {"post_id": 21583, "ts": "2026-07-03T16:47:05Z", "hours": 0.7672, "text": "Well, I started this project here… the idea I had was to make a node that is a ‘calculator’ from scratch. I’m not exactly sure if I’ll include multiple buttons or common functions in it, because the difference with this one is having access to the AI API, and I’m also thinking about adding Wolfram Alpha. It’s going to have a camera to take a picture of the equation, send it to the API, and it returns an image of the solution. It connects to Wi-Fi and sends the data to a server where it’s processed, formatted in LaTeX, and then returns the image. So I started by putting the components in the EasyEDA schematic and created a simple device that was supposed to be the Seeed Xiao ESP32 S3"}]...
|
Title: ∇Calc by @EngThi | Stardance
Devlogs:
Well Title: ∇Calc by @EngThi | Stardance
Devlogs:
Well, I started this project here… the idea I had was to make a node that is a ‘calculator’ from scratch. I’m not exactly sure if I’ll include multiple buttons or common functions in it, because the difference with this one is having access to the AI API, and I’m also thinking about adding Wolfram Alpha. It’s going to have a camera to take a picture of the equation, send it to the API, and it returns an image of the solution. It connects to Wi-Fi and sends the data to a server where it’s processed, formatted in LaTeX, and then returns the image. So I started by putting the components in the EasyEDA schematic and created a simple device that was supposed to be the Seeed Xiao ESP32 S3
I created another device—just to simulate the 3.5 LCD display I found on AliExpress. After doing some research and looking at other options, I decided against using Seeed’s S3 Sense. It comes with an OV2640 camera, but I’m going to use an external OV5640 module instead—a 5MP one I bought along with the other two . I did some research, checked out components and versions in the LCSC library , verified a few things with Perplexity, and added the items to the schematic. It’s still pretty messy, but I’ll clean it up, organize it, and get the NET’s sorted out later.
Here I tried to fix the NETs of the components and connections. I looked for the datasheets of the devices I’m using (it was easy since I just had to go back to LCSC with the Part Numbers , and on its page, the datasheet is already there ). I downloaded them, some in English, others in Asian languages (I think if I remember correctly there was only Mandarin and Korean). I uploaded them to NotebookLM, and it gave me an overview of how things worked and pin data, that kind of stuff . I saw that I had done some things wrong yesterday, so I had to fix the labels and that kind of stuff.
I’m still working on the schematic… I was finishing organizing things and then messing around with the PCB design at the end . I’m going to call it PCB SCHEMATIC . Earlier I changed the display to a 2.8 inch one because I realized it was going to be too big, and the style I’m going for is kind of like this Casio ClassWiz Here in the attached images are the drawings of the device and footprint .
I kept working on the PCB schematic . After tidying it up a bit, I decided to make a device and footprint for the battery I’m going to use. It’s kind of standardized with dimensions of 10x34x50 , A type with 2000mAh. That’s it, I made a rectangle of 84 by 165mm and put some holes 5mm away from the edges. I still need to figure out what type I’ll use, whether it’s countersunk or not. But either way, between 2.2 and 3mm .
Here I made some mistakes… I thought I had done the footprints, but after entering the 3D view/rendering of the PCB, I saw that there are only holes in the devices I made (these two in the attached images). I made some area that is seen as non-outline or something like that of the PCB. So I’ll have to fix that 😑 I also made an area on the board that will not have PCB material (FR-4) under the chip/module ESP antenna. This and the 15 mm keepout area around the antenna are to avoid interfering with Wi-Fi and Bluetooth connectivity .
more for PCB
I was getting ready to start routing, but then I decided to take a quick look at the schematic again and check if the power supply and protection/best practices part of the circuit was all good. I consulted Perplexity and it suggested adding resistors and changing a capacitor on the EN pin of the ESP. I changed it from 100nF to 1uF and added a 10kΩ resistor along with it. I had already added resistors to the SDA and SCL pins and I don’t remember if I changed that.. I also looked up the data for the external components. The display and the battery. I wanted to make a 3D model to make it look better and to get an idea in the EasyEDA rendering. I searched for the display data on the site, on its manufacturer’s website but found nothing. So I googled it and the data came up on a site already known here and there it was fine, that must be it, I needed the thickness in this case ~15mm. Ah, and I hadn’t noticed that the footprint I made for the display was only for the screen, not the complete module. Then I realized it’s going to be bigger than one of the PCB dimensions I had in mind… It’s supposed to be like that, I hadn’t noticed but in the image I attached with the green arrow it shows that it’s 50x86mm
As I said, I didn’t see the dimensions of the full PCB for the 2.8 inch version , and because of that, I was going to need to change the board (since I don’t want to increase the size of the final product). So I went after the dimensions of the 2.4 inch version and made the rectangle just to represent the space it would take up in the PCB schematic. A strange thing is that when I went to change the 3D model of the device , instead of changing it, it added another part to it. I had to overlap them so it wouldn’t look so weird there in EasyEDA. Here is the image of parameters
I finished tweaking a few more things in the PCB schematic and getting it ready to export a STEP to use as a base in Onshape. Actually, I made the display way too big, standardized at 10 or 15mm, but it should be something like ~2.8mm . The thing is, when I was moving some items around, it ended up moving the Board Outline too, even though I didn’t select it… so I locked it to prevent that from happening, and I’ve already done the same in Onshape . Now I’ll start on the case and then come back to routing
I was supposed to post yesterday but my uncles came over and I didn’t get back to it at night here I’ve pretty much done the part that holds the PCB . The shell , I recessed inside it, and in the other picture you can see I made an Assembly to see how it was coming along and to have an idea of where the screw holes for the PCB are, and later what I should do on the case. I haven’t done this yet, but you can see some Mate Connectors in the picture of the case alone (the light blue, slightly grayish part) . I tried to make the holes, but the sketch planes and flat planes were on the top face and I couldn't make the holes . I spent some time trying that. I don’t know, but probably if I make a sketch on the bottom of the case I can make the holes. That’s it, 3D for EasyEDA , I’ve already fixed it in Onshape and I’m doing well with the case part. 🫡🙂
Well, what I kept working on was the case. I was thinking that the right way is to make three separate parts: the back part where a phone case fits (thinking in this case), the front part where there are holes for the display, keys/buttons, etc., and the sliding cover with the tracks. This one, when using a normal calculator, usually fits on the back of the body and when not, it fits on the front, storing and protecting the screen. In my ideas, I asked Gemini to generate these images to help me clarify my thoughts and development. It turned out good! Another thing is that I noticed the display PCB module isn’t centered relative to the screen at all. Because of this, due to the width of the PCB and the case ending up close to the display module, it can’t be centered since there’s little free area for horizontal movement and the board would already touch the case walls. I made this 3D model to see roughly how it would look, and it looked weird. Not too much, but… The thing is, I usually do some stylizations, drawings, stuff like that. It would be possible to put a solar panel there, yeah, but I’m not going to go back much to that part of the EDA and rethink the system, mechanics, and circuit logic.
I switched the MCP MCP23017 to a QFN type. I realized that in the end, everything was most likely going to be pretty big. The final product thickness is around 15mm or more. So now I’m studying and researching to change the components, organization, and then properly design the mechanics in CAD/case so everything stays stable. I didn’t really know the display dimensions. Some are kind of generic, with chip data/technical specifications giving a certain thickness, but most don’t have thickness. Looks like I’ll have to message the Aliexpress seller to get the exact data… I feel way more lost than I should. It’s annoying because I had already thought a bit at the start and there wasn’t supposed to be so many reconstructions/pivots in the project.
I added a few more components. The thing is, I’m preparing how I’m going to connect the keyboard/MCP of the keys to the circuit, and for that, I’m going to use an FPC for it and other LDO parts. Parts that deal with inductance/decoupling and protection of the circuit components. I had to research and really look into things, and I’m already checking to find a module/version of the OV5640 with DVP FPC . I had to keep changing and reviewing the practical use of the components and kind of the electrical **‘needs’ **of the setup.
organizing schematics Here are the schematic pages I’m organizing: 01_SYSTEM_MCU , 02_POWER_USB , 03_KEYPAD_IO , 04_DISPLAY_STORAGE , Actually, I’m still missing one more schematic image: 05_CAMERA_TBD . It seems only four images are allowed per devlog. That’s it—trying to follow a logical organization, with a left-to-right flow and the power sections included :|
As I said, I was going to send a message to the sellers, but I procrastinated, and by the time I sent it, it was already the weekend there. The sellers are Chinese, so their time zone is 11 hours ahead. Actually, it’s already Monday there now, so I think there’s no need to resend the message since mine is already in the queue (I hope…). Anyway, I messed around a bit more, organized the schematics a little better, added a few things, and thought about, more or less, how the items could/should be distributed on the PCB, so I did that with the images. So, this whole size isn’t totally necessary. It will help when routing, but there really aren’t any problems with that. What I might do is remove the part where the display goes since it will be securely framed in the future case. They sent the link to the display manual
What I changed At the top, there’s the 2x11 header for the ArduCAM module—you just need to plug it in. I also added a few more devices (actually kind of switched around their positions and values). I hadn’t shown it before, but I imported this 3D model and linked it to the display device . I did a general cleanup and a lot more research , tests , t hings like that . I’m doing kinda okay. I kept waiting for the sellers to respond to me. But I didn’t get much, I could only get one reply per day. I would send messages there, but it was like 11hrs over there, outside their working hours. A lot of time for nothing… Also, that display manual/datasheet didn’t come with the dimensions of the display assembly, like the total height and the screen size I needed. I found it on a website, and it said 6mm, so I left that to do the 3D design to import the STEP as a 3D model. Another seller said they didn’t have the manufacturer’s data I needed for the camera to check the dimensions and the bus. I wanted one that was 3.3V , and usually it’s the common 22 or 24 pins. But random ones from Aliexpress can easily change something in the pinout or order, which breaks everything. Here I’m kind of developing the project blindly . It has to be a really precise version, and that’s difficult… I think I’m going to go with the ArduCam module. It’s not small or as modular as others, but for my case it’s probably okay. (until now YES)
I was researching, looking at some more DOCS and just tidying up the last bits to start routing. I used Perplexity for some research and to cross-check data and see the trace widths for the NETs. I put DRC rules, so it’s much easier to work, because when you activate routing on a NET it automatically sets that thickness and rules in the project. I routed these more critical parts, power, data, a bit of the display part and stuff like that. Even with plenty of space, it already got a bit messy. This is my third board, so I’m still not that experienced with it. But this is the way to go. Most likely I won’t have to go back and change components. I just need to finish routing , think about the case and its mechanics What annoys me the most is having to return/exchange a component or it not being what I expect. In the case of marketplace sales, stores like Aliexpress
I kept routing. I made the port expander matrix (the one on the FPC in the center left), the header for the camera, and practically all the ESP pins I’m still thinking about tidying it up a bit to reduce the number of traces going into the antenna area. There have to be traces coming there, it’s already acceptable as it is, but I will optimize… That’s kind of it.
I’m back… I won’t be able to be very active here due to classes and coursework. I spent a good few hours working on this, but when I checked, it only showed 23 minutes… Maybe I linked the hours to the project incorrectly. Actually, there’s a file with the same name plus “_copy” at the end, and I thought I was already working on the right one. Well, I actually finished the routing. It turned out there were some copper islands that weren’t connecting to the rest of the pour, so I had to route them too. But to me, some of the ones flagging routing errors (showing ratsnests) didn’t look isolated and should have been able to join the copper plane. Oh well. The center ended up looking messy; that’s where the components—and consequently the traces—are concentrated. I’ll probably have to find a way to optimize and work on that. Plus, there are 39 DRC errors now… I hope I can submit this project; I’ve already done two others, but the deadline unfortunately ran out while I was optimizing things, addressing review comments, and dealing with components and budget issues. Oh, the way development work and hardware projects are recorded has also changed; now there are timelapses available here on Lapse : Lapse Lapse Lapse Lapse
Finally the errors disappeared… it turns out you had the custom DRC rules that I set. Then, like 2 or 3 NETs had thickness rules that couldn’t be followed because QFN components and the VSON package type have pads really close to each other (pitch) , so there was no way to route 0.8mm traces on components with, like, 0.4mm pitch . Obviously, you had to reduce it to make it work, but I didn’t know by how much and whether it might be wrong at some point, cause problems, or lower the PCB’s lifespan. 😶 I figured out how to change the rules and get things fixed and done. Man, I think I should review it again and really check some automatic NETs from the editor. After all these days without touching this, I noticed there were these NETs without descriptive names . I don’t remember if it’s because I didn’t assign a NET, or if it’s just that connection between those pins or something like that. But overall it’s going to be easy. I really hope SO MUCH! Lapse Lapse
Well, I tweaked the PCB design just a little more. Actually, very little—I was just seeing if there was a way to handle the USB traces since these two NETs were 170mm and had a lot of vias . The center already had the other components and trace routing, so I guess there wasn’t much to do. And honestly, I’m not experienced, so I don’t know how to make these things better . Along with that, there’s roughly an idea of how the project case will look and the items I had already been working on.
Well, things were already going pretty well. Basically, I messed around a bit with the routes since the camera pins would be placed behind the PCB, like on the bottom. Then I changed the header layer and rerouted it. Now I managed to remove the header from the 3D preview (since the header was used to make the holes and get an idea of the position of the Arducam pin rows). When I have it in hand, I’ll solder everything directly onto the board. I was messing around a bit with other things too, in the firmware, doing research, checking data, etc. I used ChatGPT for that and even Antigravity. Then I moved forward with some things, checked, asked about the case. The thing is, I’m busy (or I should be) and couldn’t really do sessions and things of the project that I was working on to save. And then I really ended up forgetting to make the Lapses… a lot of times it was gradual work, bit by bit, and sometimes I’d go a while without touching it because I depended on my parents to call me or something like that, a pause. As far as I remember, I used to be able to edit the Lapses before, but I think it’s better to do it directly. All of this wasn’t just 17 minutes! I realized that there was a WakaTime extension for EasyEDA and Onshape. At the time (~ about 5 months ago) I didn’t know about Lapse or anything like that and ended up using this. I ended up creating more than one project to test things out, run tests, and see other people’s implementations. And it turned out they came out with very similar names and all. I didn’t remember the name anymore and I think I synced a few incorrectly. I fragmented the time. BUT REALLY MOST OF IT WAS BECAUSE I DIDN’T RECORD, ETC. I think you can add like 3 more hours
I made some changes and was researching a raw version with the OV5640 . To make it a more controlled and integrated work, and thinking about reducing it and making the aesthetics of the project look more like what it really is, reducing the thickness, I changed and added a lot of other components and I’m starting to organize them to be on the Bottom Layer. I need more LDOs , capacitors , and resistors . Simple, right? The passives and ‘controllers’ for electricity, current, voltage, etc. I’m not really knowing much about the impedance part, so I use ChatGPT to guide me, teach things, and think about the structure of the project, the PCB… Lapse: Lapse
I’ve practically finished the new schematic for the raw camera version. I managed to tidy up and properly organize the layout for this new part. First, I looked over it to see what I could add and prepare in positioning the new components for routing. The camera I left is one that uses an FPC connector . I’ve already put this item in place, arranged it with LDOs , translators , and controllers . Basically, it’s about handling the signals, how they occur, to make them compatible with the module I took and the rest of what I had already prepared. It got a bit messy because I really need to see how to place each item, and I wanted to make use of a large part of the general layout from the other PCB version … lapse
Well, what happened. I went to check the price of the PCB – in this case, when exporting the GERBER it showed a price and it was pretty expensive, $33! The other 3 boards I made were within the 100x100 size and, if I’m not mistaken, the most expensive one was listed at $7. Here I’m kind of making different versions and testing, experimenting with what happens with certain configurations (size, traces, layers, type of components, price,…). I was putting it off and taking my time because I wanted to use what I had from the other one, but then I decided to start routing from scratch.
I routed a lot more! I tried, tried to optimize so I wouldn’t have to run traces on Inner1 , but it really wasn’t going to work. Partly because of the layout and distances of some ICs to the decoupling capacitors , practices for better signal quality . I forgot ( ) and it was already almost done , so I came here to post up to this point Lapse: Lapse
I finished placing the holes on the PCB. Actually, I had forgotten… I was focused on finishing and trying to deliver something more professional in the routing part that when I finished I was like "finally did it? Can I export the production files now?" and the happiness and rush of the moment made it happen . It wasn’t possible to perfectly align the holes and the thought I had because of the traces I needed to place on the PCB, so it stayed like this. Only the top-right one ended up ‘different’. Now it’s just finishing the PCB and fixing the firmware . I was already checking and testing a bit offline.
I had made a Variable Studio but I end up not using it and don’t remember much. I asked the AI for help since I’ve never really worked with this item and it seemed better for standardizing and putting something defined that is used constantly. But in the end, I remember the quota values and some calculations are simple. Here I did the rear and front parts of the case, I didn’t do the extrusion there but it’s more or less correct. I had been thinking, and as I said, I worked on an idea and previous version, so it was actually pretty easy for that.
I finished the rear shell for the case. I made some bosses for the PCB fitting. It’s noticeable that the top right one is misaligned. I mentioned before that it’s because the traces and components were occupying that space, and when I remodeled it to 84x85 , the hole slots didn’t go along—they got lost on the canvas . Later I remembered, organized, and figured out a way to put them like this. Only one ended up 'strange,' which is NOT a problem at all. I made the shell 1.8mm thick and also cut the slot for the camera. I left the keypad at 74x80 , making a 7x7 feature pattern . This still bugs me because it doesn’t look right and the logic seems to change… I just need more experience and general practice to be ready for different scenarios. Some parts went out of place, but it’s just a matter of testing measurements until it works and maybe checking some guide videos on how to use this feature correctly . Lapse
What happened with the keypad being wrong was that in the sketch I dimensioned it incorrectly (swapped height for width) , and that’s why some of the blocks went beyond the edges and weren’t symmetrical. I imagined that might be it and fixed it . I made a rectangle there thinking about maybe adding a simple lens protection for the camera. After that, a rough idea of the cover that is usually used to protect the front part. Besides that, just a simple fillet on the sides. I did that, but I admit I might change this idea and its overall shape . Once I have everything in hand, I’ll update it to have a proper enclosure . Lapse
I just tweaked the parts a little more and then went to the Assembly . The PCB step was 50MB and took a while to load, and then when I tried to insert it, it didn’t load everything right after choosing a square option with a symbol similar to the Part Studio one, but eventually it worked. I used some fastened mates to join the items, and since this isn’t constant and there are hollow parts where you want to center/place in a specific spot, the Mate Connector doesn’t apply, so I used something like the transform to select the piece. That’s how I kept going until I got here! In the middle of the work, I had to edit the Part Studio because some points differed from the positioning and mounted parts of the PCB , like the USB and microSD . That’s it—work, found mistakes, fix them, and move forward! Lapse
I finished working on a few more things in the Assembly . I was aligning the cut positions in the view (remove extrude) and it took a while because the Mates , Fastened Mates created kind of restrictions that didn’t allow certain parts to move. Also put the 3D for the display. Then at the end I made the first commit to the repo! Lapse
I started looking more closely at the firmware part ! Actually, I’ve never worked with ESP-IDF, so I’m going to take another good look at it and refresh myself on things I might not be prepared enough for. I grabbed it to check out and study with the example code "Blynk Led" —the one in the picture is a different one. It’s to control the internal LED with the BOOT button. I’ve seen a bit, and RTOS seems really cool, here it’s FreeRTOS . But you need to pay attention and be aware, understand how things work. I feel like it’s going to be a long and tough road… but let’s go! The good thing is that we have AI to help us out and clarify points, test stuff , and so on.
I got started at the base and analyzed the HAL (Hardware Abstraction Layer) of the project. I was studying some things, basically the functions and how to use the framework . I noticed that the functions are pretty standardized, like how to use registers, handle addressing, and use macros , directives/variables . Basically, the headers I was going to use and docs and things like that I was checking out, now speaking exclusively about the Aliexpress display that was in Mandarin (some of the ones I saw while researching) and offline I was tinkering and looking at some things, asking AI to explain and check things to move forward . I got the variant I was going to use, and later on it got analyzed and the board_pins.h ended up fine. I also started messing with the keypad, just defining it and later on how to monitor and use the identifiers of each key .
I made a lot more progress on the firmware !! As I said, the functions , declarations , and general use of the ESP-IDF are standardized , so it’s simple to build by consulting materials: docs, example codes, usage with some peripherals and components, AI , etc. In this case, the use of I2C and SPI communication is also well organized. The drivers for the components I use don’t give you headaches for this. Previously, we had already been working on the ‘macros’ part, or rather the project HAL , even without knowing what it was. In the second image, there’s the keymap, made as a 7x7 matrix for the calculator - what the keys do. That’s already connected to the names of each key . The scanning was done, a loop that identifies which keys were used, and the rendering of the items on the display . Taking the data buffers and transitioning the communication with the ESP about what was pressed and how it will relay that to the screen. I think it’s interesting to mention: Explaining how key reading works with the MCP: each key is assigned by the matrix indices - row x column. The columns are set up with internal pull-up resistors, so when inactive they measure 3.3V (level 1). The ESP pulls the row to 0V (level 0), and when a key is pressed, it knows it because it reads !=0 from the column and matches it with the row it’s accessing to get the unique identifier for that key. That way you know 100% for sure what was pressed. And this cycle keeps running every few milliseconds.
I’m done here! The two files we worked on are finished. Now we have the initializer and use of the MCP23017 (I’ll just write MCP from now on in this log) . The addresses have been mapped and the registers too. You can see what happens along with the logic of keeping the line in the LOW state and the rest HIGH . In this part, it’s necessary to use masks and bitwise operations to see how it works. It stays in a loop analyzing what was pressed and, of course, if something strange happens outside the configuration, it throws an error saying UNKNOWN .
its possible only four images… I fiddled a bit more with these items, files 📁 , repo organization , stuff like that . Also, I took screenshots of some views from the project’s mechanical render … I’m not really focusing on any one part, but I tinker a bit here and if I remember something I should have done or think could be better, I take care of it. Like parts of the firmware, code, repo organization, images, and the internal side of the apps: CAD and EDA . Basically, that’s it, to sum up . I forgot to put the others Lapse
more docs things right these Well, I tidied up the README and organized the folders and file names better. The repo in general . The other image is because I think I didn’t show it properly here and I was reposting , checking items and analyzing anything left there on EasyEDA
almost ready to submit!!! Finished and I’m getting ready to submit the project for review! I took some new renders and also did the prices part for the project items. I have everything here now and it is looking nice. Like I said before, I left some points to see and change better on the case when I have everything in my hands, so I can prototype 🤖 it better. I don’t have much skill with soldering, so I really hope I can get the Top PCBA . This is all really cool and interesting that I was able to do, and I’m really happy about it. At the end I also organized things a little more and changed stuff to track what is needed in the repo , help anyone that wants to look at it or reproduce the project somehow. The System architecture section got really cool in the translation and organization, AI did that . I don’t really know how to make this type of diagram myself yet :/ I hope I didn’t forget anything and that the organization I made, and later asked to improve, documents the state well. Basically I: I finished organizing the repo, checking the prices, calculations , etc., taking screenshots , I kept iterating in the repo, editing, moving things , that kind of organization 🗂️
I’m back! Finalized the second PCB for the keys Well, yeah, I’m here again. I’m back, it’s been a while since I was away, right? I waited for things to settle down here so I could continue with the project. Yeah, and I finalized the idea of making a board on the second PCB there, where the buttons will be, you know, the clicks to use the calculator keys . And this here was kind of leftover code organization I was doing in the repository . I ended up not remembering everything from the project, but now I’m here again. So I’ll finish this up. It was pretty simple, I didn’t record it. But basically, I made a 7x7 matrix of switches , the buttons. Along with that, there’s the FPC connector to actually connect the board to the ribbon, to the rest of the MCP expander. I’m going to tidy it up a bit. The board also ended up being quite small 84x78 basically just to fit there, it would provide support and, you know, fit the switches at the distances that had already been predetermined in the case , right in the middle of the product’s housing. And then, along with that, the schematic is also simple, I just put an FPC connector , that’s all that’s really needed, and the buttons, the switches. Really simple. I think it’s interesting to mention (diodes & debounce): I was also going to use, you know, I was looking, people were saying, it’s good to use diodes , but just to kind of reduce debounce , fix certain issues, but it wouldn’t be that necessary, since the contacts closing would almost never happen like, I don’t know, three clicks at once, one next to the other. So that doesn’t really cause a problem where the ESP wouldn’t know exactly which key is being pressed and what it should do with the signal it’s receiving. And depending on how you study it and see how to handle it in the firmware , it actually wouldn’t even be that necessary to put these diodes on each of these buttons for that.
Keypad PCB done! Top & Bottom preview Now that I’ve finished, I’ve completed the PCB both images, the top and the bottom . I left the spaces for the M2 screws and already rotated everything, it was pretty easy! Basically, I kind of left an array, a 7x7 matrix . The keys would be more or less standardized and the only difference would be in the pad — like, in the rubber, the material that you press to trigger that key. That kind of thing. It turned out pretty nice. It’s simple, it’s actually simple to do this part, this kind of thing… That’s how it turned out. I’m not sure if I’ll tweak it much to add things like a D-pad or other types of keys for navigation, functions, the numeric keypad itself , that kind of stuff.
It’s kind of funny that I messed with this again, but basically this is a version where I repositioned the buttons and pins because, well, I decided the keys aren’t going to stay as a plain square matrix. So I kind of organized and divided things there to get a better idea of how the pins will be placed roughly around the center. On the top part, there’s sort of that D-pad area (not an actual single pad, but the individual buttons for that navigation). That circular button style you see on game controllers, handhelds , and on some other calculators too. I also moved the FPC connector over to the corner so it’s way easier and cleaner to connect everything up . On top of that, I rounded the board edges in this version. Overall, that was pretty much it! Lapse: Lapse
For now I’m working on the CAD ; I had finished the PCB. I put up a quick video of how it turned out I recorded it with Canva, which I’d used before for a school project, and it works. I even have the Spectacle app for Linux , but it records in 720p, which looks kind of bad, so recording it online through Canva ends up looking way better. Basically, it has the dimensions of part two , which I was rethinking and everything. And well, this was more or less the idea I had: there’s the front part for the buttons, and in this other version, it was supposed to have a passage for a circuit board to fit a small solar cell ☀️ . Depending on what I can find around the house and if there’s any leftover space in the casing (it’s pretty much ready), I might implement it even if it ends up mounted on the outside rather than inside the case, just for reuse and photovoltaic charging. Then I also put the back part together: the little hole for the camera 📷 , the slider for its protection, and on the side, the microSD card slot. The keymat for the buttons which I changed the layout of, so it’s not square anymore now has roughly the positions for all 49 keys and the holes where the support bosses will go. There’s also that little strip/rectangle, which is meant to be the protective cover fitting right into the other slot. Basically, that’s it! I’ll continue and tweak it later. It’s not too difficult, and I think it’ll be finished soon.
I just finished redoing the parts of the case the parts there and everything else in the project after this second round. This last one that was missing was from Part Studio 4 , which was the little slider drawer for camera privacy and protection on the back 🔒 , along with Part Studio 5 where I made the sliding lid/cover. Very, very simple. I also added some small slots there just to give it a nice tactile texture/grip — pretty small, with a 0.350 mm cut extrusion (removing material). That was kind of the piece I was still missing. It was simple and quick since I already had the basic idea from earlier attempts. Oh, and one thing I think I forgot to mention before: I imported .DXF files into the sketch to help guide the drawings, basically defining the extrusions for the parts. It turned out pretty good! To wrap up, I added what I had forgotten before: the mounting holes on the back cover bosses. Put 1.6mm holes there to hold the screws properly ⚙️ ....
|
1792806741.0958614
|
1793411541.0958614
|
|
6953
|
Taskerr by @Lukemon | Stardance
|
Lukemon
|
0
|
64.44
|
0
|
[]
|
[{"post_id": 59206, "ts": "202 [{"post_id": 59206, "ts": "2026-08-31T21:19:30Z", "hours": 10.5025, "text": "Fixing up code"}, {"post_id": 41622, "ts": "2026-08-05T22:49:49Z", "hours": 35.2319, "text": "I have made a profile page for users"}, {"post_id": 32293, "ts": "2026-07-21T11:27:06Z", "hours": 18.7017, "text": "Working on UI to show Jobs"}]...
|
Title: Taskerr by @Lukemon | Stardance
Devlogs:
W Title: Taskerr by @Lukemon | Stardance
Devlogs:
Working on UI to show Jobs
I have made a profile page for users
Fixing up code...
|
1792525686.1037893
|
1793130486.1037893
|
|
11289
|
fabrica by @acandoo | Stardance
|
acandoo
|
0
|
64.36
|
0
|
[]
|
[{"post_id": 16534, "ts": "202 [{"post_id": 16534, "ts": "2026-06-26T21:55:13Z", "hours": 2.6689, "text": "hello again! my main focus for this devlog has been on experimenting with loading/transition behavior for queries. before, the page would remove all of the card components and just show a “Results: loading…” screen and an unstyled <li> loading element, but i wanted to improve that and make it more animated and less “flashy”. the first part of the transition comes on the “leading edge”, when the user updates their query and information has not yet been fetched. if i let the previous cards and results stay up, the site will be perceived as laggy and not responsive. so, my instinct would be to place a “skeleton UI” but that in itself would be a DOM update/layout reflow, which i wanted to avoid for performance reasons. i tried blurring individual card elements, but i didn’t like how it looked. maybe i settle with a skeleton UI or come up with some other combination of CSS effects, i don’t know. either way, i didn’t want the effect to show up if the request hits the cache, so instead of using solid.js’s existing useTransition hook, i manually combined the underlying startTransition function with my own pending signal, which i only set to true if the query was not found in the cache. this does mean that on cache hits the code looks up the map two times (once on the initial check for the pending signal, another on the resource fetch), but i don’t think trying to optimize that away with a boolean or something would end up being faster than just letting v8 optimize the double Map lookup. for the second part–or, trailing edge–of the interaction, i had this idea of constructing a view transition so that cards that showed up previously would move nicely to their resulting spot. that unfortunately made things really laggy, especially since view-transition-name would be declared on both the cards themselves and many items within the card, as those would need to be labeled for the view transition to the product page. the visual effect was really nice though, so my plan to make it work is to finally introduce virtual scroll… yes i know i’m fixing more javascript with more javascript, but at least the site works without it! right?! additional minor thoughts: i’m starting to not like the star/basket buttons. i was looking online for product card inspiration, and most of the designs i found were a lot more minimal, many of them even omit the “Learn more” button for a cleaner visual aesthetic. for now i’ll probably change out the buttons to just the underlying icon outlines, but keep the bounding box. my qualm with removing “Learn more” is discoverability on mobile, since i couldn’t disclose product page functionality through a hover effect. maybe once the card reaches a certain height on the viewport then i’ll activate the hover progresive disclosure for mobile, but idk. maybe i should fetch in the background? with the transition effect, it would be nice for it to apply when you backspace, and at that point the site isn’t really doing any more network stuff aside from prefetching hovered cards, so i could fetch all of the sliced versions of the query (i.e. for “beam” it would fetch “b”, “be” and “bea” in the background). should i persist the results count on scroll? maybe integrated within the navigation bar, or in smaller text in a pill under, idk."}, {"post_id": 15325, "ts": "2026-06-24T21:56:53Z", "hours": 3.2861, "text": "hello! so far i’ve been working on responsive/adaptive design for the search page. i’m kinda putting off doing the individual pages in place of refining the search page. the logo is properly sized on safari. i don’t know what is it about safari and fit-content that just makes everything break horribly, but i had to choose manual widths for making the logo adaptive instead of relying on the image width. for some reason the logo tile gradually increases width despite me setting the width as static (gah css!). at some point in the future i should integrate the UI work with browserstack/tests. the hero page is now a proper <a> element instead of an <input> with focus intercepted. to keep compatibility with no javascript, it SSR’s as an <input> element before switching out to an <a> on component mount. this means that on mobile the keyboard won’t open and close when trying to search. unfortunately iOS safari doesn’t support autofocus… the nav bar is now the same width as the cards. the culprit was an empty div… i had adjusted for flexbox gap being janky by adding more padding, but now that i eliminated the element i could remove the padding composition and make everything the same width. this does mean that when scrolling down the curvature of the search bar/logo isn’t consistent with the title cards, but hey everything’s a compromise. bigger card buttons & button icons. they feel almost too big, but i know that click targets are important for accessibility. i also made the “Learn more” button a full pill instead of a rounded square. i guess the convention i’m intuitively going for is “rounder UI elements = more desired/friendly path”. i’m still upset that the icon library doesn’t work, it would be so nice. even more adaptive cards. i set up the breakpoints so that the image moves vertical first, then once there’s not enough space for the “Learn more” button the star and basket, the star and basket disappear since their functionality can be on the product page."}, {"post_id": 14180, "ts": "2026-06-23T05:26:35Z", "hours": 3.0925, "text": "yeah so i ended up working more… i finished up the transition to card view. i had a lot of trouble because i was putting the shrink/grow/basis tailwind classes in the <article> tag within the <li> which meant that all the flexbox stuff wasn’t applying properly. 😅 i figured out how to get that ellipses text wrapping. for some reason i couldn’t get overflow: hidden + whitespace: nowrap to work without completely breaking the flow of the page, but line-clamp did work! a bunch of miscellaneous work. added a no-JS warning to the /search page, changed the tracked event for the initial search page preload and filtered so it was only mouse hovers, stricter pre-commit hook, font preload, and color changes. i need to work on the product pages next, but also i have been caught by scope creep.. i’ve decided that in the future i want to add auth and user/organization work and an actual database since now i want the project to become an inventory system itself. it makes sense UI wise and i’ll get to play with databases finally. for first ship though i’ll probably just use localStorage. since the attached recording i’ve added placeholder buttons for adding to favorites and the shopping cart… the favorites button is easy enough, it’s just a toggle, maybe some cute css animations, though whether the auth solution i end up (probably betterauth) supports it is a whole other story… the shopping cart is a different level of hard JS-less though especially since there’s not enough UI space to add a quantity amount. my plan for the interaction was that hover inactive would give the “Add to shopping cart” dialog, click inactive -> active opens up a quantity dialog, setting the quantity to 0 resets the buttom, and hover active brings up the quantity dialog again."}, {"post_id": 13931, "ts": "2026-06-22T21:06:34Z", "hours": 4.9658, "text": "productive day of UI work today! i started off by taking care of some meta-work within the repo. i added a pre-commit hook for linting and formatting, added tailwind class sorting to my formatter config, pushed more vscode settings and extensions to the repository, updated pnpm, and also put a pre-install hook so that others that try setting up the repository without pnpm will get a warning (at least in theory). in the future i want to add a hook to enforce gitmoji but i’ll leave that for free time when i’m less motivated to code. i added a view transition for the logo going into search. i just put the logo within its own Solid component so that both the home page and search have the same view-transition-name . i also made it adaptable on the search screen so it collapses to its smaller form by just cropping the svg instead of making another network request. though if i wanted that as flexible as possible i’d probably modify the <picture> element to also media-query-match against device width. that way graceful degradation also works JS-less. product cards look a lot nicer! now unfortunately i have a bunch of duplicate js styles across a lot of components, so i’ll probably set down some base styles or classes. what i would love for CSS are tailwind utility classes where the groupings are build-time optimized. there are still a couple of things on my plate UI-wise: some of the UI cards aren’t occupying the full width. idk why since i set their width via w-full but idk i’m probably going to switch out the UI to more of a grid formation anyways. turn the cards into a grid formation. they’re way too long and taking up valuable space. figure out what to do with text. i tried getting only the first sentence, i tried overlay: hidden , i’m not sure but am currently leaning towards some sort of blur/fade effect. make the <Suspense> boundary narrower. my current desired functionality is for all the cards to “gray out” but with the original item list length, before the resource is fetched and the dom update happens. minimal DOM update on resource fetching. i need to swap out the signal-backed Resource for a store-backed one that reconciles, but i still have to figure out solid.js’s API shape. and also tanstack virtual but i need to do cards first. product pages."}, {"post_id": 13563, "ts": "2026-06-22T06:23:49Z", "hours": 8.1175, "text": "okay, take two on writing through this devlog since stardance just consumed my writing since it went over the word limit… i did a lot of work since my last devlog with the UI, from view transitions to SSR to SEO to wrestling with build tools and broken npm packges. i don’t have the energy to write through everything again but i do have this demo that shows off just how cool view transitions are, the speed of SSR (though i had to make it cold start, which again i can’t be bothered to write about why a second time), and graceful degradation for javascript-less environments. next up i’m working on some housekeeping stuff with sorting tailwind classes, then formatting the search page, wiring up view transitions between the search page and product pages, more DOM optimization with better solid.js state management, and maybe adding tanstack virtualizer (though it’s kinda overkill, but allows me to just set every image to eagerly load) and keeping support for no-JS. please stardance team could you fix entries getting sent into the void i wrote a really good devlog entry the first time around…"}, {"post_id": 12347, "ts": "2026-06-20T04:26:55Z", "hours": 2.6478, "text": "i don’t have much to share so far, been reading documentation & doing miscellaneous work, but right now i’m getting myself carried away with color palettes and fonts and branding design first. i designed a lil’ logo! i’ll update the banner for this project to include the logo and typography and whatnot, but i decided on fonts (dm sans for display, ibm plex sans/mono, i know hurr hurr very original). originally i was going to use space grotesk as the display/heading font but i didn’t want my website to look too much like axon robotics et al. and i didn’t want to use orbitron because i feel like the wordmark should be a distinct font/character. i emailed gobilda asking about CAD file scraping and their GraphQL endpoint that I discovered (which unfortunately needs credentials…), which gives me an excuse to not worry about the parsing issues with the scraper until they email me back or a week has passed. so in the meantime, i’ll work on web design. in terms of pure functionality though i did also add a static product page generator for each of the products, which was why i thought astro was a really great fit for this project since i’m focusing on moving more stuff to build-time and improving DX instead. i do want to set up an account system and auth and all that jazz because the next big feature would be automatic PRs from suggestions, that just adds/modifies a json file in a partdb overrides folder in the repo. that’ll also give me an excuse to validate my monorepo design by putting some of that logic in another package. finally, i know in my ai policy i’m using ai very minimally and i’ve disabled ai features in vscode… but could we let this one slide :) why those hex codes specifically iykyk"}, {"post_id": 11484, "ts": "2026-06-18T19:20:13Z", "hours": 4.1439, "text": "IT WORKS!!!!!!! okay so for some reason the type signature of the search library that i’m using, flexsearch, didn’t give the right type signatures for when i put in enrich: true on searching. i had to do some manual array processing, which probably slows down the results a bit but it’s still under 15 milliseconds max. it’s incredibly fast, it seems like the bundle would work for edge functions so it’d be similarly fast in real life, and i can’t wait to implement the service worker backend to make things even faster. from here i want to refine the querying so you can filter by manufacturer, categories, etc. and refine the database items. and also have a pretty UI :)"}, {"post_id": 10948, "ts": "2026-06-17T23:12:45Z", "hours": 0.9117, "text": "most of the parsing issues have been fixed! the final list is 1321 items, which is the same amount as previous scrapes, so i don’t think there are any issues there. a couple things still worry me a bit (but they’re not things that hinder progress elsewhere): the build command lingers after it says it’s finished building. i suspect it’s because some promise ends up never resolving, but i’ll have to look into that further the specifications field is messed up. i should also add a string sanitizer later on to the helpers file, but in the migration to cheerio something with the specification parsing logic got messed up. a cached build still takes two minutes. ideally i would like it to be more around the 30 second range, but i have to figure out if there are any bigger things worth caching. there’s just a type error i have to deal with when it comes to error handling, and everything should be good! i’ll move on to more site prototyping since i have a dummy database to test things against."}, {"post_id": 10911, "ts": "2026-06-17T21:42:48Z", "hours": 3.5503, "text": "update: i’ve moved all of the logic to use cheerio and worker threads! i tried running just build , and… of course, it didn’t work. a few of the issues were easy to diagnose: i forgot to create a directory on startup, or put .js instead of .ts as a dynamic import path, or potentially had multiple concurrent writes that could occur. but now, i’m encountering an issue where my requests don’t want to transfer, which i initially assumed was because the object had too many layers.. but trying structuredClone on a similar object works. for other work: i’ve finally removed JSDOM from dependencies, and also updated pnpm on the side. i enabled sorting imports, which helped clean up some of the mess that was accumulating. i added helper scripts for dealing with the cache. finally, i moved the rate limited fetch within the goBILDA adapter and passed as an argument to helper functions, which would allow for future adapters to have their own rate limits."}, {"post_id": 10747, "ts": "2026-06-17T17:13:36Z", "hours": 0.7389, "text": "I LOVE METAPROGRAMMING okay so for some background i worked on moving the getPages method of the goBILDA adapter to a worker thread method (which parses the goBILDA sitemap to get the main category pages), but i realized from the type error that occurred that the whole type inference debacle got messed up as there was no url parameter in the method input… so now i’ve unleashed a generic-type guard-inference inferno. typescript is a turing complete language combined with a turing complete type system… but at least there aren’t any generics explicitly declared within the code, nor any as keywords sprinkled through this section!"}, {"post_id": 10463, "ts": "2026-06-17T06:06:16Z", "hours": 4.1686, "text": "got busy this past week with a bunch of other duties, so slow progress. i set up a thread pool class with a promise API and type safety… which is kinda overkill but that’s a bit of the whole goal with this project :p but so far i offloaded initially parsing the web page for a <meta http-equiv=\"refresh\"> and determining the link. which is not a long task, so not a huge main thread blocker! but it would allow me to cement the code structure with the worker pool. the thing was, i really wanted to optimize this build, and the useCache hook i wrote only supported JSON stringifyable values, which means no array buffers. the fetch API allows you to get the response directly as an ArrayBuffer, which, once you mark as transferrable, means that a thread can work directly on the buffer without having to copy all of the data. and since memory contention is one of the two problems i’m trying to solve here… that’s incredibly useful. the thing was, i couldn’t just insert it directly into the JSON cache entry since it would be parsed by JSON.parse as a string, so i set up another content-addressed directory ( cache/blobs instead of cache/files , where most things go) and modified the types to ensure that it was still type safe. turns out… making that type work out in the function was a PAIN,, especially considering i had generics involved. i was able to work through it with an atrocious amount of as keywords sprinkled throughout, but it’s not very elegant. in terms of the site, i opened up figma and started working on some prototypes! i’ve been meaning to learn figma and figured this was the perfect opportunity to go through the process. i love how, for the most part, everything is really intuitive. but the “frame” and “group” and “component” concepts being separate things was really confusing to me. i’m really tired and about to lose my train of thought but for tomorrow i’ll work on porting the rest of the DOM processing over to the worker threads and to cheerio. i’ll also probably have to rethink how code is organized because now the “adapter” is split across two files. there’s definitely a way to make things more elegant, though."}, {"post_id": 8497, "ts": "2026-06-14T03:57:04Z", "hours": 1.4094, "text": "many OOMs and attempts to use chrome devtools later… i think tomorrow i’m going to switch out everything to use cheerio instead of JSDOM to reduce memory usage, then maybe add a thread pool while i’m at it. currently i’ve just bumped the “old memory” limit up to 16 WHOLE GIGABYTES…. gah javascript.. i’ll also have to debug a JSON parsing problem with a few of the pages. i have no idea what it might be aside from JSON.parse being finicky or JSON.stringify not properly escaping but i highly doubt that’s the reason."}, {"post_id": 8421, "ts": "2026-06-14T00:10:46Z", "hours": 1.8519, "text": "so i tried caching webpages and… um… whoops. there are so many footguns with concurrency… i had to modify a record to also store a promise chain so that writes didn’t happen concurrently… and i had run out of memory on a rebuild with cached elements which i assumed was because i was thrashing the filesystem by immediately closing file descriptors once things were read, so i set up an object to keep the file handles around but because of the async boundary they had gotten garbage collected… urgh"}, {"post_id": 8352, "ts": "2026-06-13T21:39:28Z", "hours": 8.8886, "text": "wow i haven’t logged in a while! the past few days were the last bits of school, so not a lot of work done per day. i’ve decided to change up how the partdb is built, since i discovered unplugin-macros which really helps streamline build-time logic and the final export of the package. combined with tsdown the whole build situation of the package is a lot cleaner. in addition, i added filesystem-level caching so that when this eventually gets built on github actions it will have a cache folder that it can use, and with proper expiration handled. i still have to fine tune what computations get cached, but soon hopefully cached builds won’t take the heat death of the universe to complete! since the caching is time stamped it also makes garbage collection of the cache trivial and runnable in a github action. that code isn’t written yet but isn’t too hard. for that reason i also bumped up the node version because i wanted to use Temporal to deal with timestamps and durations :) in terms of other minor things: a rudimentary site package was added, with a template astro site. i did research into different serverless platforms lint errors fixed more code comments/inline documentation made the just build recipe functional proper error message logging for product page parsing i’ll get out of my meta-work slump soon, soon!!"}, {"post_id": 5343, "ts": "2026-06-09T02:32:50Z", "hours": 1.1783, "text": "not much to update on, but i decided to clean up the commit history with gitmoji . shout out gleamlins for showing me gitmoji! i wanted to implement it for this project because i think it’s really neat and cute! there are probably still some stylistic discrepancies/wrong things within the commit history but for now my perfectionism is satisfied :)"}, {"post_id": 5030, "ts": "2026-06-08T18:03:31Z", "hours": 0.5753, "text": "VICTORY!!! from here it’s a matter of refining the scraper to make sure there are no duplicates / useless parts / specs are good. the final pieces of the puzzle were removing JSDOM caching to reduce memory usage (since i already check for duplicates reasonably well before the request is made), adding some more filtering for irrelevant products, manually garbage collecting with global.gc() (!!), and allowing for errors in product parsing. i could probably make it more robust by forcing all the categories to be evaluated before products."}, {"post_id": 4991, "ts": "2026-06-08T17:14:15Z", "hours": 1.7214, "text": "i crashed node 😭😭😭 the final pieces were adding lists of already-visited websites, and rate limiting myself so i don’t crash goBILDA. whoops…. i need to break up writes to the file in smaller pieces. i’ll probably write per product processed. and since things are bound to go wrong with a scraper there’s probably some exception to the rule with some random product that doesn’t make it in the scraper / isn’t processed correctly."}, {"post_id": 4591, "ts": "2026-06-07T22:55:54Z", "hours": 1.5803, "text": "alright, final bit of work for today. since the last log, i put some more logging messages and files to diagnose different issues. i caught one where sometimes goBILDA didn’t redirect through an HTTP code but rather through <meta http-equiv=\"refresh\"> which was annoying. and some category pages had a link to other category pages given the SAME SET OF ATTRIBUTES AS PRODUCTS, or took from an entirely different place in the DOM because the product list is CLIENT SIDE RENDERED. i’m sorry but i am NOT about to pull out puppeteer for a (presumably) 1,000+ SKU website. i also added a cache to fetched URLs so that i didn’t bombard goBILDA with duplicate requests as i worked. also on that note, i put in a custom user agent while i was at it so that they hopefully don’t block what i’m doing 😊 tomorrow i’ll also probably work on deduplicating DOM queries by keeping track of a list of scanned product pages and filtering out pages that are irrelevant for the catalog’s purposes."}, {"post_id": 4442, "ts": "2026-06-07T19:24:16Z", "hours": 1.1836, "text": "we are getting somewhere!!! now a couple of more rounds of bug fixing and i should have all the metadata for products for goBILDA! from there it’s manual overriding and filtering to remove bundles and anything of that sort."}, {"post_id": 4356, "ts": "2026-06-07T17:25:41Z", "hours": 7.6792, "text": "hey everyone! i’ve been thinking through this project in notes (and in my head) for a little while now, and just got started putting things down in code starting friday or so. i’m working on fabrica, an overengineered parts library/search engine for robotics teams. currently i’ve structured out how to code static database generation, decided on repository structure, and scaffolded tooling and helper functions for later use, and am now working on a data scraper for goBILDA parts. it’s not the fancy website stuff, but getting all of the data was something i wanted to get down first. this is a passion project, and am taking my time with everything so i’ve turned off AI features. i. introduction so over the 2025-26 season i’ve had to deal with the onshape for ftc plugin and left unsatisfied. its search performance was shoddy, it occasionally went out, the parts library was limited, and there was unintuitive duplication for parts like channel and shafting. as i explored the frc cad ecosystem, i came upon MkCAD, and now FRCDesignApp. i liked how it was open source, the search function worked a lot better, yet… i felt like it was inadequate of a solution. why not frcdesignapp? well, because i wanted to make one that generates the database at build-time, i wanted semantic type-as-you-search, and i had ambitions to—well, aside from having it under the ultro moniker—integrate it with a future inventory system. i also wanted it to be written in full stack typescript rather than a python backend, since it would allow for further front-end optimizations like SSR and asynchronous data streaming with type safety. design goals search should work with many different types of queries. starting with part numbers, a search for “1120-0014-0360” should return with that sku. “14 hole gobilda u channel” should return first a 14-hole regular u channel, then low side, then mini low side u channel, then 13 and 15 hole counterparts; “gobilda c channel” should return low side u channel, then mini low-side; “bearings for gobilda” should return bearings not only from gobilda, but also 14mm flanged bearings from mcmaster, etc etc. i want the search experience to far surpass other sites’ catalog websites so you’re incentivized to stay in one place and not have to go to mcmaster-carr or west coast products or gobilda for their search experience. search should be as fast as humanly possible. i’ll get into the architectural implications of that in a bit, but results should show up as you type, should still be fast on shoddy internet connections, and should render results quickly to the screen. in the case of URL-inputted queries, the page should partially render, with the background UI fully loaded and the search results asynchronously given; SSR should not be blocked by result fetching. search should be programmatic — you can access product information through a REST API, perhaps even GraphQL for getting a bulk list of relevant products. this allows the app to integrate into inventory systems (as mentioned before), external developments, and further incentivize contribution to the database. contributing new parts should be trivial — the repository should have clear instructions as to how to open a PR, cli utilities to fill out information, and a clear workflow overall even for those who don’t know how to code. accounts can select favorites , and their search results similarly adapt to put higher weight on semantically similar parts. SKUs and onshape parts should be parametric when possible, and first party when possible. for example, rev has official onshape models for most, if not all of their SKUs. but on that note, if you want things to be parametric and relational so that it’s clear that something like shafting has different variations in length, channel can come in different hole numbers, gears can come in different sizes, motors in different gear ratios and…"}]...
|
Title: fabrica by @acandoo | Stardance
Devlogs:
h Title: fabrica by @acandoo | Stardance
Devlogs:
hey everyone! i’ve been thinking through this project in notes (and in my head) for a little while now, and just got started putting things down in code starting friday or so. i’m working on fabrica, an overengineered parts library/search engine for robotics teams. currently i’ve structured out how to code static database generation, decided on repository structure, and scaffolded tooling and helper functions for later use, and am now working on a data scraper for goBILDA parts. it’s not the fancy website stuff, but getting all of the data was something i wanted to get down first. this is a passion project, and am taking my time with everything so i’ve turned off AI features. i. introduction so over the 2025-26 season i’ve had to deal with the onshape for ftc plugin and left unsatisfied. its search performance was shoddy, it occasionally went out, the parts library was limited, and there was unintuitive duplication for parts like channel and shafting. as i explored the frc cad ecosystem, i came upon MkCAD, and now FRCDesignApp. i liked how it was open source, the search function worked a lot better, yet… i felt like it was inadequate of a solution. why not frcdesignapp? well, because i wanted to make one that generates the database at build-time, i wanted semantic type-as-you-search, and i had ambitions to—well, aside from having it under the ultro moniker—integrate it with a future inventory system. i also wanted it to be written in full stack typescript rather than a python backend, since it would allow for further front-end optimizations like SSR and asynchronous data streaming with type safety. design goals search should work with many different types of queries. starting with part numbers, a search for “1120-0014-0360” should return with that sku. “14 hole gobilda u channel” should return first a 14-hole regular u channel, then low side, then mini low side u channel, then 13 and 15 hole counterparts; “gobilda c channel” should return low side u channel, then mini low-side; “bearings for gobilda” should return bearings not only from gobilda, but also 14mm flanged bearings from mcmaster, etc etc. i want the search experience to far surpass other sites’ catalog websites so you’re incentivized to stay in one place and not have to go to mcmaster-carr or west coast products or gobilda for their search experience. search should be as fast as humanly possible. i’ll get into the architectural implications of that in a bit, but results should show up as you type, should still be fast on shoddy internet connections, and should render results quickly to the screen. in the case of URL-inputted queries, the page should partially render, with the background UI fully loaded and the search results asynchronously given; SSR should not be blocked by result fetching. search should be programmatic — you can access product information through a REST API, perhaps even GraphQL for getting a bulk list of relevant products. this allows the app to integrate into inventory systems (as mentioned before), external developments, and further incentivize contribution to the database. contributing new parts should be trivial — the repository should have clear instructions as to how to open a PR, cli utilities to fill out information, and a clear workflow overall even for those who don’t know how to code. accounts can select favorites , and their search results similarly adapt to put higher weight on semantically similar parts. SKUs and onshape parts should be parametric when possible, and first party when possible. for example, rev has official onshape models for most, if not all of their SKUs. but on that note, if you want things to be parametric and relational so that it’s clear that something like shafting has different variations in length, channel can come in different hole numbers, gears can come in different sizes, motors in different gear ratios and…
we are getting somewhere!!! now a couple of more rounds of bug fixing and i should have all the metadata for products for goBILDA! from there it’s manual overriding and filtering to remove bundles and anything of that sort.
alright, final bit of work for today. since the last log, i put some more logging messages and files to diagnose different issues. i caught one where sometimes goBILDA didn’t redirect through an HTTP code but rather through <meta http-equiv="refresh"> which was annoying. and some category pages had a link to other category pages given the SAME SET OF ATTRIBUTES AS PRODUCTS, or took from an entirely different place in the DOM because the product list is CLIENT SIDE RENDERED. i’m sorry but i am NOT about to pull out puppeteer for a (presumably) 1,000+ SKU website. i also added a cache to fetched URLs so that i didn’t bombard goBILDA with duplicate requests as i worked. also on that note, i put in a custom user agent while i was at it so that they hopefully don’t block what i’m doing 😊 tomorrow i’ll also probably work on deduplicating DOM queries by keeping track of a list of scanned product pages and filtering out pages that are irrelevant for the catalog’s purposes.
i crashed node 😭😭😭 the final pieces were adding lists of already-visited websites, and rate limiting myself so i don’t crash goBILDA. whoops…. i need to break up writes to the file in smaller pieces. i’ll probably write per product processed. and since things are bound to go wrong with a scraper there’s probably some exception to the rule with some random product that doesn’t make it in the scraper / isn’t processed correctly.
VICTORY!!! from here it’s a matter of refining the scraper to make sure there are no duplicates / useless parts / specs are good. the final pieces of the puzzle were removing JSDOM caching to reduce memory usage (since i already check for duplicates reasonably well before the request is made), adding some more filtering for irrelevant products, manually garbage collecting with global.gc() (!!), and allowing for errors in product parsing. i could probably make it more robust by forcing all the categories to be evaluated before products.
not much to update on, but i decided to clean up the commit history with gitmoji . shout out gleamlins for showing me gitmoji! i wanted to implement it for this project because i think it’s really neat and cute! there are probably still some stylistic discrepancies/wrong things within the commit history but for now my perfectionism is satisfied :)
wow i haven’t logged in a while! the past few days were the last bits of school, so not a lot of work done per day. i’ve decided to change up how the partdb is built, since i discovered unplugin-macros which really helps streamline build-time logic and the final export of the package. combined with tsdown the whole build situation of the package is a lot cleaner. in addition, i added filesystem-level caching so that when this eventually gets built on github actions it will have a cache folder that it can use, and with proper expiration handled. i still have to fine tune what computations get cached, but soon hopefully cached builds won’t take the heat death of the universe to complete! since the caching is time stamped it also makes garbage collection of the cache trivial and runnable in a github action. that code isn’t written yet but isn’t too hard. for that reason i also bumped up the node version because i wanted to use Temporal to deal with timestamps and durations :) in terms of other minor things: a rudimentary site package was added, with a template astro site. i did research into different serverless platforms lint errors fixed more code comments/inline documentation made the just build recipe functional proper error message logging for product page parsing i’ll get out of my meta-work slump soon, soon!!
so i tried caching webpages and… um… whoops. there are so many footguns with concurrency… i had to modify a record to also store a promise chain so that writes didn’t happen concurrently… and i had run out of memory on a rebuild with cached elements which i assumed was because i was thrashing the filesystem by immediately closing file descriptors once things were read, so i set up an object to keep the file handles around but because of the async boundary they had gotten garbage collected… urgh
many OOMs and attempts to use chrome devtools later… i think tomorrow i’m going to switch out everything to use cheerio instead of JSDOM to reduce memory usage, then maybe add a thread pool while i’m at it. currently i’ve just bumped the “old memory” limit up to 16 WHOLE GIGABYTES…. gah javascript.. i’ll also have to debug a JSON parsing problem with a few of the pages. i have no idea what it might be aside from JSON.parse being finicky or JSON.stringify not properly escaping but i highly doubt that’s the reason.
got busy this past week with a bunch of other duties, so slow progress. i set up a thread pool class with a promise API and type safety… which is kinda overkill but that’s a bit of the whole goal with this project :p but so far i offloaded initially parsing the web page for a <meta http-equiv="refresh"> and determining the link. which is not a long task, so not a huge main thread blocker! but it would allow me to cement the code structure with the worker pool. the thing was, i really wanted to optimize this build, and the useCache hook i wrote only supported JSON stringifyable values, which means no array buffers. the fetch API allows you to get the response directly as an ArrayBuffer, which, once you mark as transferrable, means that a thread can work directly on the buffer without having to copy all of the data. and since memory contention is one of the two problems i’m trying to solve here… that’s incredibly useful. the thing was, i couldn’t just insert it directly into the JSON cache entry since it would be parsed by JSON.parse as a string, so i set up another content-addressed directory ( cache/blobs instead of cache/files , where most things go) and modified the types to ensure that it was still type safe. turns out… making that type work out in the function was a PAIN,, especially considering i had generics involved. i was able to work through it with an atrocious amount of as keywords sprinkled throughout, but it’s not very elegant. in terms of the site, i opened up figma and started working on some prototypes! i’ve been meaning to learn figma and figured this was the perfect opportunity to go through the process. i love how, for the most part, everything is really intuitive. but the “frame” and “group” and “component” concepts being separate things was really confusing to me. i’m really tired and about to lose my train of thought but for tomorrow i’ll work on porting the rest of the DOM processing over to the worker threads and to cheerio. i’ll also probably have to rethink how code is organized because now the “adapter” is split across two files. there’s definitely a way to make things more elegant, though.
I LOVE METAPROGRAMMING okay so for some background i worked on moving the getPages method of the goBILDA adapter to a worker thread method (which parses the goBILDA sitemap to get the main category pages), but i realized from the type error that occurred that the whole type inference debacle got messed up as there was no url parameter in the method input… so now i’ve unleashed a generic-type guard-inference inferno. typescript is a turing complete language combined with a turing complete type system… but at least there aren’t any generics explicitly declared within the code, nor any as keywords sprinkled through this section!
update: i’ve moved all of the logic to use cheerio and worker threads! i tried running just build , and… of course, it didn’t work. a few of the issues were easy to diagnose: i forgot to create a directory on startup, or put .js instead of .ts as a dynamic import path, or potentially had multiple concurrent writes that could occur. but now, i’m encountering an issue where my requests don’t want to transfer, which i initially assumed was because the object had too many layers.. but trying structuredClone on a similar object works. for other work: i’ve finally removed JSDOM from dependencies, and also updated pnpm on the side. i enabled sorting imports, which helped clean up some of the mess that was accumulating. i added helper scripts for dealing with the cache. finally, i moved the rate limited fetch within the goBILDA adapter and passed as an argument to helper functions, which would allow for future adapters to have their own rate limits.
most of the parsing issues have been fixed! the final list is 1321 items, which is the same amount as previous scrapes, so i don’t think there are any issues there. a couple things still worry me a bit (but they’re not things that hinder progress elsewhere): the build command lingers after it says it’s finished building. i suspect it’s because some promise ends up never resolving, but i’ll have to look into that further the specifications field is messed up. i should also add a string sanitizer later on to the helpers file, but in the migration to cheerio something with the specification parsing logic got messed up. a cached build still takes two minutes. ideally i would like it to be more around the 30 second range, but i have to figure out if there are any bigger things worth caching. there’s just a type error i have to deal with when it comes to error handling, and everything should be good! i’ll move on to more site prototyping since i have a dummy database to test things against.
IT WORKS!!!!!!! okay so for some reason the type signature of the search library that i’m using, flexsearch, didn’t give the right type signatures for when i put in enrich: true on searching. i had to do some manual array processing, which probably slows down the results a bit but it’s still under 15 milliseconds max. it’s incredibly fast, it seems like the bundle would work for edge functions so it’d be similarly fast in real life, and i can’t wait to implement the service worker backend to make things even faster. from here i want to refine the querying so you can filter by manufacturer, categories, etc. and refine the database items. and also have a pretty UI :)
i don’t have much to share so far, been reading documentation & doing miscellaneous work, but right now i’m getting myself carried away with color palettes and fonts and branding design first. i designed a lil’ logo! i’ll update the banner for this project to include the logo and typography and whatnot, but i decided on fonts (dm sans for display, ibm plex sans/mono, i know hurr hurr very original). originally i was going to use space grotesk as the display/heading font but i didn’t want my website to look too much like axon robotics et al. and i didn’t want to use orbitron because i feel like the wordmark should be a distinct font/character. i emailed gobilda asking about CAD file scraping and their GraphQL endpoint that I discovered (which unfortunately needs credentials…), which gives me an excuse to not worry about the parsing issues with the scraper until they email me back or a week has passed. so in the meantime, i’ll work on web design. in terms of pure functionality though i did also add a static product page generator for each of the products, which was why i thought astro was a really great fit for this project since i’m focusing on moving more stuff to build-time and improving DX instead. i do want to set up an account system and auth and all that jazz because the next big feature would be automatic PRs from suggestions, that just adds/modifies a json file in a partdb overrides folder in the repo. that’ll also give me an excuse to validate my monorepo design by putting some of that logic in another package. finally, i know in my ai policy i’m using ai very minimally and i’ve disabled ai features in vscode… but could we let this one slide :) why those hex codes specifically iykyk
okay, take two on writing through this devlog since stardance just consumed my writing since it went over the word limit… i did a lot of work since my last devlog with the UI, from view transitions to SSR to SEO to wrestling with build tools and broken npm packges. i don’t have the energy to write through everything again but i do have this demo that shows off just how cool view transitions are, the speed of SSR (though i had to make it cold start, which again i can’t be bothered to write about why a second time), and graceful degradation for javascript-less environments. next up i’m working on some housekeeping stuff with sorting tailwind classes, then formatting the search page, wiring up view transitions between the search page and product pages, more DOM optimization with better solid.js state management, and maybe adding tanstack virtualizer (though it’s kinda overkill, but allows me to just set every image to eagerly load) and keeping support for no-JS. please stardance team could you fix entries getting sent into the void i wrote a really good devlog entry the first time around…
productive day of UI work today! i started off by taking care of some meta-work within the repo. i added a pre-commit hook for linting and formatting, added tailwind class sorting to my formatter config, pushed more vscode settings and extensions to the repository, updated pnpm, and also put a pre-install hook so that others that try setting up the repository without pnpm will get a warning (at least in theory). in the future i want to add a hook to enforce gitmoji but i’ll leave that for free time when i’m less motivated to code. i added a view transition for the logo going into search. i just put the logo within its own Solid component so that both the home page and search have the same view-transition-name . i also made it adaptable on the search screen so it collapses to its smaller form by just cropping the svg instead of making another network request. though if i wanted that as flexible as possible i’d probably modify the <picture> element to also media-query-match against device width. that way graceful degradation also works JS-less. product cards look a lot nicer! now unfortunately i have a bunch of duplicate js styles across a lot of components, so i’ll probably set down some base styles or classes. what i would love for CSS are tailwind utility classes where the groupings are build-time optimized. there are still a couple of things on my plate UI-wise: some of the UI cards aren’t occupying the full width. idk why since i set their width via w-full but idk i’m probably going to switch out the UI to more of a grid formation anyways. turn the cards into a grid formation. they’re way too long and taking up valuable space. figure out what to do with text. i tried getting only the first sentence, i tried overlay: hidden , i’m not sure but am currently leaning towards some sort of blur/fade effect. make the <Suspense> boundary narrower. my current desired functionality is for all the cards to “gray out” but with the original item list length, before the resource is fetched and the dom update happens. minimal DOM update on resource fetching. i need to swap out the signal-backed Resource for a store-backed one that reconciles, but i still have to figure out solid.js’s API shape. and also tanstack virtual but i need to do cards first. product pages.
yeah so i ended up working more… i finished up the transition to card view. i had a lot of trouble because i was putting the shrink/grow/basis tailwind classes in the <article> tag within the <li> which meant that all the flexbox stuff wasn’t applying properly. 😅 i figured out how to get that ellipses text wrapping. for some reason i couldn’t get overflow: hidden + whitespace: nowrap to work without completely breaking the flow of the page, but line-clamp did work! a bunch of miscellaneous work. added a no-JS warning to the /search page, changed the tracked event for the initial search page preload and filtered so it was only mouse hovers, stricter pre-commit hook, font preload, and color changes. i need to work on the product pages next, but also i have been caught by scope creep.. i’ve decided that in the future i want to add auth and user/organization work and an actual database since now i want the project to become an inventory system itself. it makes sense UI wise and i’ll get to play with databases finally. for first ship though i’ll probably just use localStorage. since the attached recording i’ve added placeholder buttons for adding to favorites and the shopping cart… the favorites button is easy enough, it’s just a toggle, maybe some cute css animations, though whether the auth solution i end up (probably betterauth) supports it is a whole other story… the shopping cart is a different level of hard JS-less though especially since there’s not enough UI space to add a quantity amount. my plan for the interaction was that hover inactive would give the “Add to shopping cart” dialog, click inactive -> active opens up a quantity dialog, setting the quantity to 0 resets the buttom, and hover active brings up the quantity dialog again.
hello! so far i’ve been working on responsive/adaptive design for the search page. i’m kinda putting off doing the individual pages in place of refining the search page. the logo is properly sized on safari. i don’t know what is it about safari and fit-content that just makes everything break horribly, but i had to choose manual widths for making the logo adaptive instead of relying on the image width. for some reason the logo tile gradually increases width despite me setting the width as static (gah css!). at some point in the future i should integrate the UI work with browserstack/tests. the hero page is now a proper <a> element instead of an <input> with focus intercepted. to keep compatibility with no javascript, it SSR’s as an <input> element before switching out to an <a> on component mount. this means that on mobile the keyboard won’t open and close when trying to search. unfortunately iOS safari doesn’t support autofocus… the nav bar is now the same width as the cards. the culprit was an empty div… i had adjusted for flexbox gap being janky by adding more padding, but now that i eliminated the element i could remove the padding composition and make everything the same width. this does mean that when scrolling down the curvature of the search bar/logo isn’t consistent with the title cards, but hey everything’s a compromise. bigger card buttons & button icons. they feel almost too big, but i know that click targets are important for accessibility. i also made the “Learn more” button a full pill instead of a rounded square. i guess the convention i’m intuitively going for is “rounder UI elements = more desired/friendly path”. i’m still upset that the icon library doesn’t work, it would be so nice. even more adaptive cards. i set up the breakpoints so that the image moves vertical first, then once there’s not enough space for the “Learn more” button the star and basket, the star and basket disappear since their functionality can be on the product page.
hello again! my main focus for this devlog has been on experimenting with loading/transition behavior for queries. before, the page would remove all of the card components and just show a “Results: loading…” screen and an unstyled <li> loading element, but i wanted to improve that and make it more animated and less “flashy”. the first part of the transition comes on the “leading edge”, when the user updates their query and information has not yet been fetched. if i let the previous cards and results stay up, the site will be perceived as laggy and not responsive. so, my instinct would be to place a “skeleton UI” but that in itself would be a DOM update/layout reflow, which i wanted to avoid for performance reasons. i tried blurring individual card elements, but i didn’t like how it looked. maybe i settle with a skeleton UI or come up with some other combination of CSS effects, i don’t know. either way, i didn’t want the effect to show up if the request hits the cache, so instead of using solid.js’s existing useTransition hook, i manually combined the underlying startTransition function with my own pending signal, which i only set to true if the query was not found in the cache. this does mean that on cache hits the code looks up the map two times (once on the initial check for the pending signal, another on the resource fetch), but i don’t think trying to optimize that away with a boolean or something would end up being faster than just letting v8 optimize the double Map lookup. for the second part–or, trailing edge–of the interaction, i had this idea of constructing a view transition so that cards that showed up previously would move nicely to their resulting spot. that unfortunately made things really laggy, especially since view-transition-name would be declared on both the cards themselves and many items within the card, as those would need to be labeled for the view transition to the product page. the visual effect was really nice though, so my plan to make it work is to finally introduce virtual scroll… yes i know i’m fixing more javascript with more javascript, but at least the site works without it! right?! additional minor thoughts: i’m starting to not like the star/basket buttons. i was looking online for product card inspiration, and most of the designs i found were a lot more minimal, many of them even omit the “Learn more” button for a cleaner visual aesthetic. for now i’ll probably change out the buttons to just the underlying icon outlines, but keep the bounding box. my qualm with removing “Learn more” is discoverability on mobile, since i couldn’t disclose product page functionality through a hover effect. maybe once the card reaches a certain height on the viewport then i’ll activate the hover progresive disclosure for mobile, but idk. maybe i should fetch in the background? with the transition effect, it would be nice for it to apply when you backspace, and at that point the site isn’t really doing any more network stuff aside from prefetching hovered cards, so i could fetch all of the sliced versions of the query (i.e. for “beam” it would fetch “b”, “be” and “bea” in the background). should i persist the results count on scroll? maybe integrated within the navigation bar, or in smaller text in a pill under, idk....
|
1792598052.8106232
|
1793202852.8106232
|
|
31757
|
EcoSort by @Nik_k | Stardance
|
Nik_k
|
0
|
64.23
|
0
|
[]
|
[{"post_id": 53301, "ts": "202 [{"post_id": 53301, "ts": "2026-08-23T19:18:18Z", "hours": 3.985, "text": "I worked on the setup of my data collection method."}, {"post_id": 45794, "ts": "2026-08-12T14:45:01Z", "hours": 7.1525, "text": "Goal My goal is to make an automated waste classifying trash can. This would reduce contamination rates and keep our landfills safe. Progress I’m almost done with the main component that will move the item(the platform). Status Today I finished the pulleys on each side of the platform to allow the platform to open to drop the item. I also worked on making a setup for making my own custom dataset to train my CNN on. A CNN is an ai model that can be trained on images and predict what is in the image. To Do I need to add a camera mount above the platform so I can have a fixed camera height. I need to add a mount to connect the gt2 belt to the platform so it can fully open the platform."}, {"post_id": 42216, "ts": "2026-08-06T20:41:37Z", "hours": 14.3039, "text": "Goal: My goal is to make a autonomous waste classifying trash can. Status: I have finished about 70% of the CAD. Progress: I have finished the motor pulley completely for the side to side movement of the platform. I partially finished the opening system for the platform. To Do: I have to work on the platform mechanism to allow the item to drop through the platform. Suggestions: If you have any suggestions please write it in the comments."}, {"post_id": 34912, "ts": "2026-07-26T00:34:24Z", "hours": 2.35, "text": "Goal To finish the platform that will move the item to the classified bin. Progress I have finished the motor mount with the screws, NEMA 17 motor, and screws. I’m yet to have put the pulley idler on the other side of the exterior frame. To-do I need to add the pulley idler on the other side of the frame, so I can add a GT2 timing belt to move the platform side to side."}, {"post_id": 34260, "ts": "2026-07-24T20:16:15Z", "hours": 3.0544, "text": "I fixed minor problems with the platform like the heat inserts were placed to close to each other. I ended up also having to redo the curved guide rails to be able to go above the bin. This allowed from the platform to be centered over the right bin."}, {"post_id": 27878, "ts": "2026-07-13T19:40:17Z", "hours": 12.1417, "text": "I worked on adding dividers in between each trash can so that the platform links can go into the divider. This had some issues at first, but I think I got a good plan on what to do next."}, {"post_id": 26871, "ts": "2026-07-11T22:05:14Z", "hours": 9.1003, "text": "I worked on adding two carriages and allowing the platform to move over the correct bin easily. I also worked on the bearings for moving the platform from the frame."}, {"post_id": 25951, "ts": "2026-07-10T13:55:10Z", "hours": 0.5744, "text": "EcoSort Goal Making a trash can that sorts trash into the correct bins. So a banana peel would go in compost, paper goes in recycling bin, and snack wrapper goes in trash. Status My CAD model is about 75% done. You can see my cad files, images, and journal on my GitHub https://github.com/Onlycoder1/EcoSort/ . What I did today I added more to my JOURNAL.md to include photos and more detailed writing. Down below is some cad images for fun! This includes platform cads and the frame of EcoSort."}, {"post_id": 25577, "ts": "2026-07-09T22:18:49Z", "hours": 5.7336, "text": "I have got most of the platform that will hold the item done. I finished the guiderails that let the panel links move smoothly. Next I have to mount the platform on linear rails."}, {"post_id": 25114, "ts": "2026-07-09T03:32:15Z", "hours": 0.7836, "text": "I’ve added bearings to my platform this will allow the platform to move in these guide rails I will design later."}, {"post_id": 25009, "ts": "2026-07-08T22:30:42Z", "hours": 2.3667, "text": "Today I was working on the platform that holds the item. I was able to finish this assembly. Next I need a frame to use to hold the platform and allowing it to move and drop the item. Overall today I got a lot accomplished. If there is any updates you would suggest add it in the comments. Here are some of the photos down below."}, {"post_id": 24669, "ts": "2026-07-08T12:28:08Z", "hours": 1.4211, "text": "I have updated my README.md and JOURNAL.md you can check it out here. https://github.com/Onlycoder1/EcoSort/ ."}, {"post_id": 24464, "ts": "2026-07-08T01:17:32Z", "hours": 1.2594, "text": "I have started this design earlier and I think by now I have spent 20 hours on it already. I forgot to log it though 😭😭. Although today I have been working on the moving platform aspect of the design and I happy to say that I accomplished this task. The top view is the linear guide rails and the grey squares are the bins. Next I have to add a platform that can drop an item."}]...
|
Title: EcoSort by @Nik_k | Stardance
Devlogs:
I h Title: EcoSort by @Nik_k | Stardance
Devlogs:
I have started this design earlier and I think by now I have spent 20 hours on it already. I forgot to log it though 😭😭. Although today I have been working on the moving platform aspect of the design and I happy to say that I accomplished this task. The top view is the linear guide rails and the grey squares are the bins. Next I have to add a platform that can drop an item.
I have updated my README.md and JOURNAL.md you can check it out here. https://github.com/Onlycoder1/EcoSort/ .
Today I was working on the platform that holds the item. I was able to finish this assembly. Next I need a frame to use to hold the platform and allowing it to move and drop the item. Overall today I got a lot accomplished. If there is any updates you would suggest add it in the comments. Here are some of the photos down below.
I’ve added bearings to my platform this will allow the platform to move in these guide rails I will design later.
I have got most of the platform that will hold the item done. I finished the guiderails that let the panel links move smoothly. Next I have to mount the platform on linear rails.
EcoSort Goal Making a trash can that sorts trash into the correct bins. So a banana peel would go in compost, paper goes in recycling bin, and snack wrapper goes in trash. Status My CAD model is about 75% done. You can see my cad files, images, and journal on my GitHub https://github.com/Onlycoder1/EcoSort/ . What I did today I added more to my JOURNAL.md to include photos and more detailed writing. Down below is some cad images for fun! This includes platform cads and the frame of EcoSort.
I worked on adding two carriages and allowing the platform to move over the correct bin easily. I also worked on the bearings for moving the platform from the frame.
I worked on adding dividers in between each trash can so that the platform links can go into the divider. This had some issues at first, but I think I got a good plan on what to do next.
I fixed minor problems with the platform like the heat inserts were placed to close to each other. I ended up also having to redo the curved guide rails to be able to go above the bin. This allowed from the platform to be centered over the right bin.
Goal To finish the platform that will move the item to the classified bin. Progress I have finished the motor mount with the screws, NEMA 17 motor, and screws. I’m yet to have put the pulley idler on the other side of the exterior frame. To-do I need to add the pulley idler on the other side of the frame, so I can add a GT2 timing belt to move the platform side to side.
Goal: My goal is to make a autonomous waste classifying trash can. Status: I have finished about 70% of the CAD. Progress: I have finished the motor pulley completely for the side to side movement of the platform. I partially finished the opening system for the platform. To Do: I have to work on the platform mechanism to allow the item to drop through the platform. Suggestions: If you have any suggestions please write it in the comments.
Goal My goal is to make an automated waste classifying trash can. This would reduce contamination rates and keep our landfills safe. Progress I’m almost done with the main component that will move the item(the platform). Status Today I finished the pulleys on each side of the platform to allow the platform to open to drop the item. I also worked on making a setup for making my own custom dataset to train my CNN on. A CNN is an ai model that can be trained on images and predict what is in the image. To Do I need to add a camera mount above the platform so I can have a fixed camera height. I need to add a mount to connect the gt2 belt to the platform so it can fully open the platform.
I worked on the setup of my data collection method....
|
1792723907.0165818
|
1793328707.0165818
|
|
44090
|
Veynto by @lucasdsandoval30 | Stardance
|
lucasdsandoval30
|
0
|
64.21
|
0
|
[]
|
[{"post_id": 41138, "ts": "202 [{"post_id": 41138, "ts": "2026-08-05T04:49:44Z", "hours": 64.2131, "text": "Starting to figure out how to market this whole thing, First time! Also working on a new tool, all in one AI agent manager customized for myself!"}]...
|
Title: Veynto by @lucasdsandoval30 | Stardance
De Title: Veynto by @lucasdsandoval30 | Stardance
Devlogs:
Starting to figure out how to market this whole thing, First time! Also working on a new tool, all in one AI agent manager customized for myself!...
|
1792572630.784064
|
1793177430.784064
|
|
30845
|
Raptor08 - Bipedal Robot by @squiddy | Stardance
|
squiddy
|
0
|
64.14
|
0
|
[]
|
[{"post_id": 65702, "ts": "202 [{"post_id": 65702, "ts": "2026-09-11T01:08:39Z", "hours": 8.1667, "text": "OMG I’M SOO HAPPY IT FINALLY WALKS(in simulation) so basically a few days ago I started training with a faulty model but I locked in and spent a few hours fixing it and reuploading. I also tuned the reward gains and removed some rewards I felt were too complex. I took inspiration from the setup for the learning on the Unitree Go2 and their reward system and it seems to learn super fast, walking behavior exhibted by iteration 200-300, I’ll train the model overnight to see what it comes up with. I’m super happy how this turned out. full in depth devlog will be posted later when I have time."}, {"post_id": 63907, "ts": "2026-09-07T22:56:33Z", "hours": 7.7333, "text": "Reinforcement Learning is way harder than I thought… been reading tensor graphs for the past 10 hours and closely monitoring the training program and adjusting every single variable. There seems to be a constant issue of the model “cheating” the system by finding some way to minimize penalty while still getting some reward and it’s leading to very undesirable behavior such as crossing its legs. will do more research on this and try to improve the PPO algo"}, {"post_id": 63541, "ts": "2026-09-07T13:46:07Z", "hours": 10.5658, "text": "Finally… Parallel simulation without crazy bugs! Hi guys! This is my full devlog starting to do even more interesting software #9 Starting to get busier with school unfortunately but made a huge breakthrough recently Its fine though after senioritis hits I will lock tf in on this Change log: Previously there was an issue where the imported URDF would fall through the floor. This was caused by missing tags in the URDF file for each part. To fix it meant to add it into every part MANUALLY which sucks. Another issue with the URDF format was that the parallel linkage system for the knees was unsupported and required a TON of tweaks that I didn’t want to do. So upon further research I found that Genesis World also supported MJCF(MuJuCo’s format) and that it supported the parallel linkage with minor tweaking mainly involving renaming LOTS of joints and changing the config.json file for onshape-to-robot tool a lot. Edited config file and original CAD file to include where the imu is so the simulation would know as well as motor power, weight, and friction to ensure sim to real isn’t too hard to implement, this may require further tuning down the line. Created simple schematic for all electrically connected components. Imported to Genesis World and was able to position control each joint, one step closer to training it. Was able to get a parallel simulation running on amdgpu Had claude patch up my xml file since it had floating geometry for some reason and I ran out of onshape API tokens so I couldn’t convert anymore"}, {"post_id": 44646, "ts": "2026-08-10T15:32:33Z", "hours": 8.2842, "text": "Bill of Materials updated(for a single leg) may still contain some mistakes. Hi guys! This is my mini devlog starting to do more with the simulation Change log: Changed 3d model to be much more simplified to reduce computing power and get rid of texture issue from last time Uploaded and ran the physics ragdoll in the simulation and added collision tags to the URDF so everything would collide with the ground Use onshape-urdf tool to make more detailed changes to the joints, and add joint limits to the robot to maybe fix joint breakage. Issues log: For some reason the joints keep breaking in the simulation where it detaches from the original point after an impact into the ground for example"}, {"post_id": 34278, "ts": "2026-07-24T21:01:17Z", "hours": 10.3675, "text": "Hi guys! This is my full devlog starting to do interesting software also can someone tell me how to edit the devlog with bold letters and paragraph spacing? I can do it now but only after posting and editing. #7 Change log: Researched and settled on Genesis World as the tool I will use for the physics sim as as well as RL training. Would use Issac Lab but it has poor support for AMD GPUs at the moment, so I decided to use Genesis World instead, which is a relatively new tool that doesn’t have as much documentation as other choices such as Mujoco. I setup everything in windows using a WSL according to official documentation, but pytorch was giving me a hard time and there was so many work arounds i had to do to accommodate for ROCM(amd gpu architecture) as well as windows that I decided I would just download linux and dual boot it on my computer, cleared a lot of headaches. It technically worked on windows but it would only use the cpu and wasn’t able to utilize GPU for parallel computing, leading to slower training times. Set materials, joint limits etc to prepare for exporting as URDF using the tool Onshape to URDF Imported URDF into Genesis world to test out the physics Made a BOM will post soon Issues log: Yet to fix solder and fully finish soldering to a centralizedf power distribution Finding name? please suggest Need to fix URDF having no joints for some reason thanks for reading pookies"}, {"post_id": 30922, "ts": "2026-07-18T22:15:41Z", "hours": 8.5014, "text": "Hi guys! This is my full devlog #6 Change log: change from large branching power distribution to centralized power distribution due to the previous trunk and branch configuration being too prone to soldering breakage, Had to resolder joints multiple times was getting too annoying. 3D printed a xt60 power distribution central block. Wrapped electrical tape and ziptied wire joints to alleviate stress Made a crude wooden stand with scrap wood so its easier to work with the robot.Designed and 3d printed covers for the odrive motor controllers to protect the ports and solder joints Tested 36V li-ion battery scavenged from my broken hoverboard and it works but no noticeable difference from 6s(22.2V) lipo, will stick with 6s lipo for now Issue from last time where 4th motor wont work on CAN bus. Checked the CAN id’s for both axis(main and ghost) but all was correct. Must be a hardware issue related to the signal termination resistors. Fixed by removing two jumpers on the odrives that removed two 120ohm resistors from the parallel circuit, increasing resistance, so that the signal can successfully terminate. Issues log: Solder breaking off Noticeable backlash on joints, didn’t think it was that large at first but when mounted on a long joint it is noticeable, hopefully won’t impact performance that much Goals for next devlog:Inverse Kinematics test with leg in arduino IDE before figuring out motion reinforcement learning Wire everything for one leg cleanlyFind a name for the robot for more aura tell me if you have ideas"}, {"post_id": 26333, "ts": "2026-07-11T02:03:00Z", "hours": 4.4672, "text": "mini devlog #5 lots of issues today: 1st; ran into issues with transceiver. when the program ran in arduino ide the esp32 just wasn’t able to command the motors to do anything, turns out I set the wrong baud rate and wasted an hour of my life. there also seems to be an issue with signal termination whenever I plug in a fourth motor into the CAN chain the program stops working from the esp 32(anyone with experience with this please help). this is the biggest problem I will need to solve. 2nd; I suck at soldering so all the joints started to bend and break off, I will need to design a better case for the xdrive mini boards so the solder of the xt60 connector doesn’t take the brunt of the flexing force. will need to re-solder most of these joints in order to fix the cold solder joints from before. at some point some magic smoke started coming out from one of the boards, no clue what its from but it solved itself and everything worked after re-plugging power supply. Should probably investigate further but i didn’t see any obvious shorts and im too lazy. Thanks for reading <3"}, {"post_id": 25610, "ts": "2026-07-09T23:55:46Z", "hours": 1.4667, "text": "Mini devlog #4 tested can transceiver and IMU unit, took a lot of troubleshooting connecting them to esp32 and using them on arduinoIDE, will switch to VS code soon"}, {"post_id": 23774, "ts": "2026-07-06T22:12:21Z", "hours": 3.3667, "text": "Mini devlog #3: 1. finished up cad, widened frame to accomodate for free rotation of the hip joint and added ziptie mount(temperory while find a better solution and figure out the wiring) added esp32 mount, imu mount, CAN bus transiever mount in progress, and added the odrive models in the cad(not shown in screenshot oops). 2. finished setting up motor firmware and tuned all actuators, found and issue with one of them having too much friction internally so I need to open it up and fix it(perhaps I printed the old version of the axle with the new design?). I soldered all the motors to the controllers and all the power connectors as well and tested them individually while in the cycloidal gearboxes. big thanks to justlovescience for his video on how to set up the brushless controllers, had to tweak quite a few things and the UI wasn’t working for me but was helpful regardless. mostly fixing mechanical bugs today, next steps are finalizing v1 of the whole robot and v3 of the leg, and upload model to the physics simulation. BOM coming soon. Thanks for reading allat"}, {"post_id": 23549, "ts": "2026-07-06T16:04:51Z", "hours": 0.65, "text": "assembled both sides in CAD, debated on making a active ankle joint, but decided it would add too much weight and complexity since I would have to source a smaller motor. Keeps it simple to make all actuators the same. Working on electronics wiring and encasing soon"}, {"post_id": 23522, "ts": "2026-07-06T15:23:29Z", "hours": 0.5667, "text": "putting leg together in assembly"}]...
|
Title: Raptor08 - Bipedal Robot by @squiddy | Star Title: Raptor08 - Bipedal Robot by @squiddy | Stardance
Devlogs:
putting leg together in assembly
assembled both sides in CAD, debated on making a active ankle joint, but decided it would add too much weight and complexity since I would have to source a smaller motor. Keeps it simple to make all actuators the same. Working on electronics wiring and encasing soon
Mini devlog #3: 1. finished up cad, widened frame to accomodate for free rotation of the hip joint and added ziptie mount(temperory while find a better solution and figure out the wiring) added esp32 mount, imu mount, CAN bus transiever mount in progress, and added the odrive models in the cad(not shown in screenshot oops). 2. finished setting up motor firmware and tuned all actuators, found and issue with one of them having too much friction internally so I need to open it up and fix it(perhaps I printed the old version of the axle with the new design?). I soldered all the motors to the controllers and all the power connectors as well and tested them individually while in the cycloidal gearboxes. big thanks to justlovescience for his video on how to set up the brushless controllers, had to tweak quite a few things and the UI wasn’t working for me but was helpful regardless. mostly fixing mechanical bugs today, next steps are finalizing v1 of the whole robot and v3 of the leg, and upload model to the physics simulation. BOM coming soon. Thanks for reading allat
Mini devlog #4 tested can transceiver and IMU unit, took a lot of troubleshooting connecting them to esp32 and using them on arduinoIDE, will switch to VS code soon
mini devlog #5 lots of issues today: 1st; ran into issues with transceiver. when the program ran in arduino ide the esp32 just wasn’t able to command the motors to do anything, turns out I set the wrong baud rate and wasted an hour of my life. there also seems to be an issue with signal termination whenever I plug in a fourth motor into the CAN chain the program stops working from the esp 32(anyone with experience with this please help). this is the biggest problem I will need to solve. 2nd; I suck at soldering so all the joints started to bend and break off, I will need to design a better case for the xdrive mini boards so the solder of the xt60 connector doesn’t take the brunt of the flexing force. will need to re-solder most of these joints in order to fix the cold solder joints from before. at some point some magic smoke started coming out from one of the boards, no clue what its from but it solved itself and everything worked after re-plugging power supply. Should probably investigate further but i didn’t see any obvious shorts and im too lazy. Thanks for reading <3
Hi guys! This is my full devlog #6 Change log: change from large branching power distribution to centralized power distribution due to the previous trunk and branch configuration being too prone to soldering breakage, Had to resolder joints multiple times was getting too annoying. 3D printed a xt60 power distribution central block. Wrapped electrical tape and ziptied wire joints to alleviate stress Made a crude wooden stand with scrap wood so its easier to work with the robot.Designed and 3d printed covers for the odrive motor controllers to protect the ports and solder joints Tested 36V li-ion battery scavenged from my broken hoverboard and it works but no noticeable difference from 6s(22.2V) lipo, will stick with 6s lipo for now Issue from last time where 4th motor wont work on CAN bus. Checked the CAN id’s for both axis(main and ghost) but all was correct. Must be a hardware issue related to the signal termination resistors. Fixed by removing two jumpers on the odrives that removed two 120ohm resistors from the parallel circuit, increasing resistance, so that the signal can successfully terminate. Issues log: Solder breaking off Noticeable backlash on joints, didn’t think it was that large at first but when mounted on a long joint it is noticeable, hopefully won’t impact performance that much Goals for next devlog:Inverse Kinematics test with leg in arduino IDE before figuring out motion reinforcement learning Wire everything for one leg cleanlyFind a name for the robot for more aura tell me if you have ideas
Hi guys! This is my full devlog starting to do interesting software also can someone tell me how to edit the devlog with bold letters and paragraph spacing? I can do it now but only after posting and editing. #7 Change log: Researched and settled on Genesis World as the tool I will use for the physics sim as as well as RL training. Would use Issac Lab but it has poor support for AMD GPUs at the moment, so I decided to use Genesis World instead, which is a relatively new tool that doesn’t have as much documentation as other choices such as Mujoco. I setup everything in windows using a WSL according to official documentation, but pytorch was giving me a hard time and there was so many work arounds i had to do to accommodate for ROCM(amd gpu architecture) as well as windows that I decided I would just download linux and dual boot it on my computer, cleared a lot of headaches. It technically worked on windows but it would only use the cpu and wasn’t able to utilize GPU for parallel computing, leading to slower training times. Set materials, joint limits etc to prepare for exporting as URDF using the tool Onshape to URDF Imported URDF into Genesis world to test out the physics Made a BOM will post soon Issues log: Yet to fix solder and fully finish soldering to a centralizedf power distribution Finding name? please suggest Need to fix URDF having no joints for some reason thanks for reading pookies
Bill of Materials updated(for a single leg) may still contain some mistakes. Hi guys! This is my mini devlog starting to do more with the simulation Change log: Changed 3d model to be much more simplified to reduce computing power and get rid of texture issue from last time Uploaded and ran the physics ragdoll in the simulation and added collision tags to the URDF so everything would collide with the ground Use onshape-urdf tool to make more detailed changes to the joints, and add joint limits to the robot to maybe fix joint breakage. Issues log: For some reason the joints keep breaking in the simulation where it detaches from the original point after an impact into the ground for example
Finally… Parallel simulation without crazy bugs! Hi guys! This is my full devlog starting to do even more interesting software #9 Starting to get busier with school unfortunately but made a huge breakthrough recently Its fine though after senioritis hits I will lock tf in on this Change log: Previously there was an issue where the imported URDF would fall through the floor. This was caused by missing tags in the URDF file for each part. To fix it meant to add it into every part MANUALLY which sucks. Another issue with the URDF format was that the parallel linkage system for the knees was unsupported and required a TON of tweaks that I didn’t want to do. So upon further research I found that Genesis World also supported MJCF(MuJuCo’s format) and that it supported the parallel linkage with minor tweaking mainly involving renaming LOTS of joints and changing the config.json file for onshape-to-robot tool a lot. Edited config file and original CAD file to include where the imu is so the simulation would know as well as motor power, weight, and friction to ensure sim to real isn’t too hard to implement, this may require further tuning down the line. Created simple schematic for all electrically connected components. Imported to Genesis World and was able to position control each joint, one step closer to training it. Was able to get a parallel simulation running on amdgpu Had claude patch up my xml file since it had floating geometry for some reason and I ran out of onshape API tokens so I couldn’t convert anymore
Reinforcement Learning is way harder than I thought… been reading tensor graphs for the past 10 hours and closely monitoring the training program and adjusting every single variable. There seems to be a constant issue of the model “cheating” the system by finding some way to minimize penalty while still getting some reward and it’s leading to very undesirable behavior such as crossing its legs. will do more research on this and try to improve the PPO algo
OMG I’M SOO HAPPY IT FINALLY WALKS(in simulation) so basically a few days ago I started training with a faulty model but I locked in and spent a few hours fixing it and reuploading. I also tuned the reward gains and removed some rewards I felt were too complex. I took inspiration from the setup for the learning on the Unitree Go2 and their reward system and it seems to learn super fast, walking behavior exhibted by iteration 200-300, I’ll train the model overnight to see what it comes up with. I’m super happy how this turned out. full in depth devlog will be posted later when I have time....
|
1792748892.2946568
|
1793353692.2946568
|
|
22202
|
Desktop Weather Module by @sak | Stardance
|
sak
|
0
|
64.03
|
0
|
[]
|
[{"post_id": 41771, "ts": "202 [{"post_id": 41771, "ts": "2026-08-06T05:17:31Z", "hours": 3.2333, "text": "Desktop Weather Module | Devlog #8 Desktop weather (and room temperature) module that plugs into your computer! I am immensely, majorly, colossally, incomprehensibly content! 😁 The UI looks good and… THE ENCLOSURE IS PRINTED!!! What i worked on: UI (again) 3D printed enclosure – print – drilling holes – lots of filing The 3D print was fun but also sort of a pain to deal with. Since i had to get it printed at the library there were no iterations possible, this lead to holes not fitting because of tolerances and also the button plate (the piece connecting the buttons to the frame) was 1.5mm too thick and not able to be screwed down. i spent hours filing and drilling for it all to finally fit together. I also forgot the rail for the inside of the enclosure. One piece has it but the other doesnt.😭 The UI wasnt too hard, just copying the photpea layout and doing some math for alignment. I did have to fix the endianness and change RGB to BGR as thats how it was being converted to a c array. Welp, its been a nice time on stardance working on this project, but tomorrow’s the plane and im goin on vacation🥳 Hopefully I have the time to continue once i come back (mid september) but i’ll also have to catch up on a lot of school. Future Plans: Implement Forecast and create its UI (still havent done that) improve UI of inside temperature screen add keybinds to restart esp32 and start the access point to reconfigure the info Optimize code Fix PCB design (routing/layout) order PCB redesign and 3d print enclosure (with rails this time) – better tolerances and clearances – hole for usb-c port – better clicking mechanism to connect frames"}, {"post_id": 41202, "ts": "2026-08-05T08:49:12Z", "hours": 11.8939, "text": "Desktop Weather Module | Devlog #8 Desktop weather (and room temperature) module that plugs into your computer! PAIN 💀 i had 2 days to get this code decent, I’ve been grinding day and night and atp idek if its worth it (24 hours till i leave for vacation) Anyways, What i worked on: UI More UI and a lil more UI The UI has honestly been the most annoying tedious part of this project. In hindsight, i definitely shouldve used LVGL and I dont know why i tried to have the UI look aesthetic. Maybe i should just go back to the basic one. Im going to the library tmrw (or today ig) so hopefully the 3d print goes well. Anyways i should probably go sleep now, gn gang. Future Plans: 3d print enclosure finish ui and forecast code vacation full 8 hours sleep (i havent in long time)"}, {"post_id": 38626, "ts": "2026-08-01T03:42:51Z", "hours": 9.6786, "text": "Desktop Weather Module | Devlog #7 Desktop weather (and room temperature) module that plugs into your computer! Exhilarating delightful resplendent news!🥳 I GOT THE TFT DISPLAY! It said it was going to come in August (like the 5th), BUT it came on wednesday! What I worked on (finally have the display): Replaced old 1602 LCD on breadboard with the TFT Display Used photopea to layout the text so the Dynamic (updating) and Static text would look nice together Updated the code to make the display work and have the data displayed Made the PCB for the weather module (it needs a lot of work and I got lots of great feedback to implement) Its basically August 1st rn. I won’t be able to truly finish the project until September (after vacation), however; I do think I can get the enclosure 3d printed and have it working with the breadboard (we’ll just imagine it isn’t there). Future Plans: Continue to update code: – add weather forecast for the week – better display code to switch between pages and update dynamic screens (only updating if there’s a new value instead of a constant interval) – if i have time, adding different cities to switch between fix Fusion 360 enclosure (I kinda messed up a bit on the parametric modeling so I have to fix that) 3D print enclosure (hopefully next couple days) Assemble! (without the PCB) Update PCB design with feedback Order and test PCB (september)"}, {"post_id": 36069, "ts": "2026-07-27T22:25:33Z", "hours": 10.4531, "text": "Desktop Weather Module | Devlog #6 Desktop weather (and room temperature) module that plugs into your computer! Unfortunate news 😭 The TFT display that is needed for this project was supposed to arrive last Thursday. Checked Amazon, now it’s saying it’s coming in August. Usually this would be fine, but I’m going on vacation for the entirety of August, so I don’t think I would be able to work on/finish the project until I come back. Anyways, here’s what I’ve worked on: Updating the code to work with TFT display (on Wokwi) Started working on PCB (just an esp32 with pinouts that can connect to the DHT11, TFT Display, and Buttons) I’m using the TFT_eSPI Library to work with the display. If anyone knows of anything better which will make better graphics (maybe graphs based on weather data) lmk. I’m also displaying more weather data, so I converted the speeds and angles into more familiar units (eg 300 degrees N = West North West). Finally, I have it switch between scenes with only 1 button. I’m thinking of having the other Button for a forecast, but I cannot think of what to do with the 3rd button (maybe an on button?). Once again, suggestions would be appreciated. Future Plans: Finish writing (and fixing) code for the TFT display Finish PCB Design Order PCB 3D Print enclosure (with PCB supports) Hope that the screen comes before I have to leave💀"}, {"post_id": 32562, "ts": "2026-07-21T20:28:40Z", "hours": 7.6206, "text": "Desktop Weather Module | Devlog #2 Desktop weather (and room temperature) module that plugs into your computer! Enclosure! 📦 What I’ve done this update: Designed the enclosure in Fusion 360 Looked for ways to work on the code without having the TFT on hand I hit flow state working on this thing for the last couple of days. It was fun looking at different locking mechanisms that could be used to keep the components secure and also easily accessible. Ultimately, I decided on using screws to hold the buttons and TFT display down and then a rail with a protrusion on the end, which should hold the case together. Maybe in the future I could get rid of the buttons and make it entirely touchscreen (as the screen has a resistive touchscreen). All that’s left for the enclosure is making the PCB and adding mounting holes for it. Something that made the process a little difficult was figuring out clearances and the tolerance of 3d printers. I’ve yet to print out the enclosure, so I’m not entirely sure it’ll work, but the snap-clicking mechanism is based on this. The display should come around Thursday this week, so until then I’ll just be working on the code and trying to use Wokwi to simulate it. Feedback or ideas would be appreciated! Future Plans: Altering the code to support the TFT display Design and order PCB Add PCB support to enclosure model 3D print enclosure at the Library Components: ESP32 Devkit (DOIT v1 from ELEGOO) 2.8” SPI TFT LCD Display ILI9341 DHT11 Temperature and Humidity Sensor 2kΩ Resistor 2x 330Ω Resistors 2x Buttons9V Battery"}, {"post_id": 31101, "ts": "2026-07-19T07:10:02Z", "hours": 8.7169, "text": "Desktop Weather Module | Devlog #4 Desktop weather (and room temperature) module that plugs into your computer! PCB!👨💻 What I’ve done this update: FINALLY bought a display, a 2.8” TFT Module (coming soon) Sketched up some designs for the enclosure Made a very rough outline on what the module would look like (still very tentative) Spent many hours learning basic PCB design Made ESP32 PCB which will serve as the base for the weather module (This was my first go at it so don’t mind the actual PCB lol, the weather module’s will be better) Learning PCB design has been extremely interesting. There’s a lot of nuance in laying the components and traces. Honestly, I thought the hardest part would be the schematic, but that was by far the easiest (to make and to learn). However, the components and traces were really the most difficult part of design, as traces must have enough space to avoid crosstalk, and for that to happen, you should have an efficient layout of components. In addition, with the display, I’ve spent some time learning the different types of serial communication like UART, I2C, and SPI (which is what the TFT display uses). Overall, probably spent over 20 hours the last couple of days just learning. Future Plans: TFT module arrives and update code for the new display (I’m starting to work on it now) Update the wifi interface Better scrolling or alternative with buttons (maybe a rotary encoder if i can get one) Make prototype on breadboard then PCB Make enclosure and 3D print Still a lot to be done, but I feel like we’re getting closer! Components: ESP32 Devkit (DOIT v1 from ELEGOO) 2.8” SPI TFT LCD Display ILI9341 DHT11 Temperature and Humidity Sensor 2kΩ Resistor 2x 330Ω Resistors 2x Buttons 9V Battery"}, {"post_id": 23068, "ts": "2026-07-05T20:04:58Z", "hours": 2.7067, "text": "Desktop Weather Module | Devlog #3 Desktop weather station that plugs into your What I’ve done this update: Created an Access Point on startup so WiFi Data, API key, and City can be entered Added proper capitalization on displayed text Future Plans: get 0.96” oled screen Update display to accommodate new screen Create PCB Create & 3D print housing (probably from a local library) Components: ESP321602 LCD Display DHT11 Temperature and Humidity Sensor 2kΩ Resistor 2x 330Ω Resistors 2x Buttons 9V Battery"}, {"post_id": 18162, "ts": "2026-06-29T05:47:29Z", "hours": 6.5175, "text": "Desktop Weather Module | Devlog #2 Desktop weather station that plugs into your computer. bugs squashed 🐛🦶 What I’ve done so far: Added API weather display on the 1602 LCD screen Added a toggle button to switch between indoor temperature and humidity and the weather forecast outside Added custom icons to match weather conditions (i tried lol) Fixed major bugs with api calling and connecting to wifi consistently The bugs took the longest as there was a “Guru Meditation error” which i got around with some conditional checks and making sure that the pointers were initialized. Also, I want to use a 0.96” oled screen as it would probably be more visually appealing and can also display more weather. Lmk if you guys know of anything better. Future Plans: Finish display of weather data Create an Access Point on startup so Wifi Data, API key, and City can be entered Create PCB and get an oled screen Create & 3D print housing (probably from a local library) Components: ESP32 1602 LCD Display DHT11 Temperature and Humidity Sensor 2kΩ Resistor 2x 330Ω Resistors 2x Buttons 9V Battery"}, {"post_id": 14544, "ts": "2026-06-23T18:12:12Z", "hours": 3.2097, "text": "Desktop Weather Module | First Devlog (: I’m working on making a weather display I could put on my desk. This is my first project after learning a bit about ESP32s and Arduino IDE. I want the module to be able to display the indoor climate and the current weather data. What I’ve got so far: Code to display temperature/humidity indoors Code to print API data to the serial monitor Working circuit for LCD display and DHT11 sensor Ideally, I’d use an OLED display as it has colours and higher definition for more information, but I only have the LCD, so that’s what we’re working with. Also, I need to figure out how to power this, as I don’t want to have to use a battery pack. Plans: Use LCD to display weather data Decide on display & power method Create PCB Create housing (Fusion 360) Lmk if you guys have some advice or recommendations"}]...
|
Title: Desktop Weather Module by @sak | Stardance
Title: Desktop Weather Module by @sak | Stardance
Devlogs:
Desktop Weather Module | First Devlog (: I’m working on making a weather display I could put on my desk. This is my first project after learning a bit about ESP32s and Arduino IDE. I want the module to be able to display the indoor climate and the current weather data. What I’ve got so far: Code to display temperature/humidity indoors Code to print API data to the serial monitor Working circuit for LCD display and DHT11 sensor Ideally, I’d use an OLED display as it has colours and higher definition for more information, but I only have the LCD, so that’s what we’re working with. Also, I need to figure out how to power this, as I don’t want to have to use a battery pack. Plans: Use LCD to display weather data Decide on display & power method Create PCB Create housing (Fusion 360) Lmk if you guys have some advice or recommendations
Desktop Weather Module | Devlog #2 Desktop weather station that plugs into your computer. bugs squashed 🐛🦶 What I’ve done so far: Added API weather display on the 1602 LCD screen Added a toggle button to switch between indoor temperature and humidity and the weather forecast outside Added custom icons to match weather conditions (i tried lol) Fixed major bugs with api calling and connecting to wifi consistently The bugs took the longest as there was a “Guru Meditation error” which i got around with some conditional checks and making sure that the pointers were initialized. Also, I want to use a 0.96” oled screen as it would probably be more visually appealing and can also display more weather. Lmk if you guys know of anything better. Future Plans: Finish display of weather data Create an Access Point on startup so Wifi Data, API key, and City can be entered Create PCB and get an oled screen Create & 3D print housing (probably from a local library) Components: ESP32 1602 LCD Display DHT11 Temperature and Humidity Sensor 2kΩ Resistor 2x 330Ω Resistors 2x Buttons 9V Battery
Desktop Weather Module | Devlog #3 Desktop weather station that plugs into your What I’ve done this update: Created an Access Point on startup so WiFi Data, API key, and City can be entered Added proper capitalization on displayed text Future Plans: get 0.96” oled screen Update display to accommodate new screen Create PCB Create & 3D print housing (probably from a local library) Components: ESP321602 LCD Display DHT11 Temperature and Humidity Sensor 2kΩ Resistor 2x 330Ω Resistors 2x Buttons 9V Battery
Desktop Weather Module | Devlog #4 Desktop weather (and room temperature) module that plugs into your computer! PCB!👨💻 What I’ve done this update: FINALLY bought a display, a 2.8” TFT Module (coming soon) Sketched up some designs for the enclosure Made a very rough outline on what the module would look like (still very tentative) Spent many hours learning basic PCB design Made ESP32 PCB which will serve as the base for the weather module (This was my first go at it so don’t mind the actual PCB lol, the weather module’s will be better) Learning PCB design has been extremely interesting. There’s a lot of nuance in laying the components and traces. Honestly, I thought the hardest part would be the schematic, but that was by far the easiest (to make and to learn). However, the components and traces were really the most difficult part of design, as traces must have enough space to avoid crosstalk, and for that to happen, you should have an efficient layout of components. In addition, with the display, I’ve spent some time learning the different types of serial communication like UART, I2C, and SPI (which is what the TFT display uses). Overall, probably spent over 20 hours the last couple of days just learning. Future Plans: TFT module arrives and update code for the new display (I’m starting to work on it now) Update the wifi interface Better scrolling or alternative with buttons (maybe a rotary encoder if i can get one) Make prototype on breadboard then PCB Make enclosure and 3D print Still a lot to be done, but I feel like we’re getting closer! Components: ESP32 Devkit (DOIT v1 from ELEGOO) 2.8” SPI TFT LCD Display ILI9341 DHT11 Temperature and Humidity Sensor 2kΩ Resistor 2x 330Ω Resistors 2x Buttons 9V Battery
Desktop Weather Module | Devlog #2 Desktop weather (and room temperature) module that plugs into your computer! Enclosure! 📦 What I’ve done this update: Designed the enclosure in Fusion 360 Looked for ways to work on the code without having the TFT on hand I hit flow state working on this thing for the last couple of days. It was fun looking at different locking mechanisms that could be used to keep the components secure and also easily accessible. Ultimately, I decided on using screws to hold the buttons and TFT display down and then a rail with a protrusion on the end, which should hold the case together. Maybe in the future I could get rid of the buttons and make it entirely touchscreen (as the screen has a resistive touchscreen). All that’s left for the enclosure is making the PCB and adding mounting holes for it. Something that made the process a little difficult was figuring out clearances and the tolerance of 3d printers. I’ve yet to print out the enclosure, so I’m not entirely sure it’ll work, but the snap-clicking mechanism is based on this. The display should come around Thursday this week, so until then I’ll just be working on the code and trying to use Wokwi to simulate it. Feedback or ideas would be appreciated! Future Plans: Altering the code to support the TFT display Design and order PCB Add PCB support to enclosure model 3D print enclosure at the Library Components: ESP32 Devkit (DOIT v1 from ELEGOO) 2.8” SPI TFT LCD Display ILI9341 DHT11 Temperature and Humidity Sensor 2kΩ Resistor 2x 330Ω Resistors 2x Buttons9V Battery
Desktop Weather Module | Devlog #6 Desktop weather (and room temperature) module that plugs into your computer! Unfortunate news 😭 The TFT display that is needed for this project was supposed to arrive last Thursday. Checked Amazon, now it’s saying it’s coming in August. Usually this would be fine, but I’m going on vacation for the entirety of August, so I don’t think I would be able to work on/finish the project until I come back. Anyways, here’s what I’ve worked on: Updating the code to work with TFT display (on Wokwi) Started working on PCB (just an esp32 with pinouts that can connect to the DHT11, TFT Display, and Buttons) I’m using the TFT_eSPI Library to work with the display. If anyone knows of anything better which will make better graphics (maybe graphs based on weather data) lmk. I’m also displaying more weather data, so I converted the speeds and angles into more familiar units (eg 300 degrees N = West North West). Finally, I have it switch between scenes with only 1 button. I’m thinking of having the other Button for a forecast, but I cannot think of what to do with the 3rd button (maybe an on button?). Once again, suggestions would be appreciated. Future Plans: Finish writing (and fixing) code for the TFT display Finish PCB Design Order PCB 3D Print enclosure (with PCB supports) Hope that the screen comes before I have to leave💀
Desktop Weather Module | Devlog #7 Desktop weather (and room temperature) module that plugs into your computer! Exhilarating delightful resplendent news!🥳 I GOT THE TFT DISPLAY! It said it was going to come in August (like the 5th), BUT it came on wednesday! What I worked on (finally have the display): Replaced old 1602 LCD on breadboard with the TFT Display Used photopea to layout the text so the Dynamic (updating) and Static text would look nice together Updated the code to make the display work and have the data displayed Made the PCB for the weather module (it needs a lot of work and I got lots of great feedback to implement) Its basically August 1st rn. I won’t be able to truly finish the project until September (after vacation), however; I do think I can get the enclosure 3d printed and have it working with the breadboard (we’ll just imagine it isn’t there). Future Plans: Continue to update code: – add weather forecast for the week – better display code to switch between pages and update dynamic screens (only updating if there’s a new value instead of a constant interval) – if i have time, adding different cities to switch between fix Fusion 360 enclosure (I kinda messed up a bit on the parametric modeling so I have to fix that) 3D print enclosure (hopefully next couple days) Assemble! (without the PCB) Update PCB design with feedback Order and test PCB (september)
Desktop Weather Module | Devlog #8 Desktop weather (and room temperature) module that plugs into your computer! PAIN 💀 i had 2 days to get this code decent, I’ve been grinding day and night and atp idek if its worth it (24 hours till i leave for vacation) Anyways, What i worked on: UI More UI and a lil more UI The UI has honestly been the most annoying tedious part of this project. In hindsight, i definitely shouldve used LVGL and I dont know why i tried to have the UI look aesthetic. Maybe i should just go back to the basic one. Im going to the library tmrw (or today ig) so hopefully the 3d print goes well. Anyways i should probably go sleep now, gn gang. Future Plans: 3d print enclosure finish ui and forecast code vacation full 8 hours sleep (i havent in long time)
Desktop Weather Module | Devlog #8 Desktop weather (and room temperature) module that plugs into your computer! I am immensely, majorly, colossally, incomprehensibly content! 😁 The UI looks good and… THE ENCLOSURE IS PRINTED!!! What i worked on: UI (again) 3D printed enclosure – print – drilling holes – lots of filing The 3D print was fun but also sort of a pain to deal with. Since i had to get it printed at the library there were no iterations possible, this lead to holes not fitting because of tolerances and also the button plate (the piece connecting the buttons to the frame) was 1.5mm too thick and not able to be screwed down. i spent hours filing and drilling for it all to finally fit together. I also forgot the rail for the inside of the enclosure. One piece has it but the other doesnt.😭 The UI wasnt too hard, just copying the photpea layout and doing some math for alignment. I did have to fix the endianness and change RGB to BGR as thats how it was being converted to a c array. Welp, its been a nice time on stardance working on this project, but tomorrow’s the plane and im goin on vacation🥳 Hopefully I have the time to continue once i come back (mid september) but i’ll also have to catch up on a lot of school. Future Plans: Implement Forecast and create its UI (still havent done that) improve UI of inside temperature screen add keybinds to restart esp32 and start the access point to reconfigure the info Optimize code Fix PCB design (routing/layout) order PCB redesign and 3d print enclosure (with rails this time) – better tolerances and clearances – hole for usb-c port – better clicking mechanism to connect frames...
|
1792536660.3177474
|
1793141460.3177474
|
|
1236
|
Fuddi AI by @unonown97 | Stardance
|
unonown97
|
1
|
64.0
|
1003
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T16:30:40Z", "hours": 64.0, "multiplier": 16.63, "payout": 1003, "blessing": "neutral", "text": "A sleek, privacy-first multi-model chat interface that runs entirely in your browser. Connects to dozens of AI models through a lightweight local proxy your API keys never leave your machine. so while deploying i encountered multiple issues and but the web helped me thankfully and also the costing doesnt work at all as of now and is something i will be fixing in the future :). g’day", "repo": "https://github.com/Miroredrpo/ai-chat-app", "demo": "https://fuddigai.vercel.app/"}]...
|
[{"post_id": 8139, "ts": "2026 [{"post_id": 8139, "ts": "2026-06-13T16:10:05Z", "hours": 0.7906, "text": "tried deploying to vercel but it didnt work tweaked some things in the server.js but reading online i foundout that i will need to make another folder for it to function properly so am doing that rn :)"}, {"post_id": 8102, "ts": "2026-06-13T14:58:43Z", "hours": 5.0, "text": "added an option to export and import all the things into a JSON, also an option to clear all the conversations, and remove all the API keys as now it has option to add multiple API keys, all the things are pretty much done so i think i will just do some finishing changes and ship it for the first time"}, {"post_id": 7843, "ts": "2026-06-13T02:35:10Z", "hours": 3.5333, "text": "added the prompting tab where specific instructions can be written and also completed the interface tab where one can toggle things like auto title generation and stuff am goging to add support for multiple api keys next and also an export/import chats and settings feutesrs that exports everthing, so when the local storage is full one can export and save there chat and import thhem later on"}, {"post_id": 6831, "ts": "2026-06-11T13:40:44Z", "hours": 5.4056, "text": "added option to pin the chat, edit the title manually, duplicate the chat and delete it also added fast delete which when shift is held while deletion it doesnt ask for conformation and directly deletes the chat, also added all the paraments accepted as far as i am aware of, added a default system prompt and i will also be making another tab specifically for prompts, also added dynamic size of the chat where the font size can be changed from the setting menu it self"}, {"post_id": 6076, "ts": "2026-06-10T06:43:41Z", "hours": 0.6, "text": "So… i tried using AI to do some visual changes only for it to completely messup the layout and populate the root directory with random js and css files saying these are the new ones and have the same logic and makes the app better but it did not do any of that, i reverted it to how it was i dont know if that counts to AI useage but i will still be putting the incident in the details of the project"}, {"post_id": 5753, "ts": "2026-06-09T17:31:13Z", "hours": 0.9672, "text": "when an API is enterd made a test endpoint so it tests if the API is correct or not and tells it also initialized the js logic for the thinking mode max tokens, temperature, max tokens (entire chat), and a default system prompt, also am thinking about adding a dedicated tab in the settings panel for prompts and all"}, {"post_id": 5606, "ts": "2026-06-09T13:51:25Z", "hours": 8.4333, "text": "completed the toasts, added web search functionality, added chat deletion, also populated the empty state with some prompts, added an option to choose if one wants to generate the title automatically or not in a new settings tab “interface” where the size of fonts, theme, etc can me changed, am goging to add things like temperature , maxtokens, thinking budget and all next"}, {"post_id": 5329, "ts": "2026-06-09T02:01:33Z", "hours": 1.2681, "text": "added a shortcuts tab that tells the users about the keybinds, also made the initial frame for toasts, also added a last refreshed time on the models tab and reload again button that again fetches it from the HCAI API"}, {"post_id": 4902, "ts": "2026-06-08T14:08:23Z", "hours": 10.1728, "text": "added empty state also added thinking mode where it sends the api with an extra parameter and enables the thinking mode if the model has the ability to do it, i also added some keybinds such as when ctrl + Shift + T is pressed thinkning mode is enabled, Ctrl+N opens new chat etc it is also confiured for mac instead of ctrl in mac we can use cmd, in the settings tab i have also added a dropdown menu to select a separate title generation model"}, {"post_id": 4073, "ts": "2026-06-07T08:25:09Z", "hours": 8.1322, "text": "i made it so that the model can be changed and accessed from the chat it self and change it as per the user intent, i also added a details panel showing thw models capabilities and its pricing and its abilities like if it can web search or not or if it has thinking mode etc. also now in the settings panel you can select the default model to be used when a new chant is opened and it is stored in the local storage similar to how the chat is stored"}, {"post_id": 3276, "ts": "2026-06-06T04:04:02Z", "hours": 12.3142, "text": "I have added a model selector now which pulls the models from https://ai.hackclub.com/proxy/v1/models although it has not been properly configures i will be making it so that there will be an option for a title generation model in the settings as well i have also added a side bar where previos chats can be accessed, up next: i will be adding a details panel that will allow one to veiw the context cost and provider, modelname, etc of the selected model, i will also be adding the feature to attach images and all, i have also made it responsive in this past time frame not entirely but i have made it fairly useable i will also be making it more mobile friendly"}, {"post_id": 1933, "ts": "2026-06-04T05:33:12Z", "hours": 2.745, "text": "implemented dark mode made layout cleaner added option to set base url, also made it so that the API gets saved in the local storage for future reload"}, {"post_id": 1603, "ts": "2026-06-03T18:49:52Z", "hours": 2.9808, "text": "made the layout better with buttons outlins and made a floating settings panel to input the HCAI API key into so that AI models can be accessed later, next changes: shift layout, figureout server calls and add more functionality also add dark mode :)"}, {"post_id": 269, "ts": "2026-06-01T14:20:29Z", "hours": 1.355, "text": "i am making an custom interface where one can bring their HCAI API key and talk to various LLM’s"}]...
|
Title: Fuddi AI by @unonown97 | Stardance
Devlogs Title: Fuddi AI by @unonown97 | Stardance
Devlogs:
i am making an custom interface where one can bring their HCAI API key and talk to various LLM’s
made the layout better with buttons outlins and made a floating settings panel to input the HCAI API key into so that AI models can be accessed later, next changes: shift layout, figureout server calls and add more functionality also add dark mode :)
implemented dark mode made layout cleaner added option to set base url, also made it so that the API gets saved in the local storage for future reload
I have added a model selector now which pulls the models from https://ai.hackclub.com/proxy/v1/models although it has not been properly configures i will be making it so that there will be an option for a title generation model in the settings as well i have also added a side bar where previos chats can be accessed, up next: i will be adding a details panel that will allow one to veiw the context cost and provider, modelname, etc of the selected model, i will also be adding the feature to attach images and all, i have also made it responsive in this past time frame not entirely but i have made it fairly useable i will also be making it more mobile friendly
i made it so that the model can be changed and accessed from the chat it self and change it as per the user intent, i also added a details panel showing thw models capabilities and its pricing and its abilities like if it can web search or not or if it has thinking mode etc. also now in the settings panel you can select the default model to be used when a new chant is opened and it is stored in the local storage similar to how the chat is stored
added empty state also added thinking mode where it sends the api with an extra parameter and enables the thinking mode if the model has the ability to do it, i also added some keybinds such as when ctrl + Shift + T is pressed thinkning mode is enabled, Ctrl+N opens new chat etc it is also confiured for mac instead of ctrl in mac we can use cmd, in the settings tab i have also added a dropdown menu to select a separate title generation model
added a shortcuts tab that tells the users about the keybinds, also made the initial frame for toasts, also added a last refreshed time on the models tab and reload again button that again fetches it from the HCAI API
completed the toasts, added web search functionality, added chat deletion, also populated the empty state with some prompts, added an option to choose if one wants to generate the title automatically or not in a new settings tab “interface” where the size of fonts, theme, etc can me changed, am goging to add things like temperature , maxtokens, thinking budget and all next
when an API is enterd made a test endpoint so it tests if the API is correct or not and tells it also initialized the js logic for the thinking mode max tokens, temperature, max tokens (entire chat), and a default system prompt, also am thinking about adding a dedicated tab in the settings panel for prompts and all
So… i tried using AI to do some visual changes only for it to completely messup the layout and populate the root directory with random js and css files saying these are the new ones and have the same logic and makes the app better but it did not do any of that, i reverted it to how it was i dont know if that counts to AI useage but i will still be putting the incident in the details of the project
added option to pin the chat, edit the title manually, duplicate the chat and delete it also added fast delete which when shift is held while deletion it doesnt ask for conformation and directly deletes the chat, also added all the paraments accepted as far as i am aware of, added a default system prompt and i will also be making another tab specifically for prompts, also added dynamic size of the chat where the font size can be changed from the setting menu it self
added the prompting tab where specific instructions can be written and also completed the interface tab where one can toggle things like auto title generation and stuff am goging to add support for multiple api keys next and also an export/import chats and settings feutesrs that exports everthing, so when the local storage is full one can export and save there chat and import thhem later on
added an option to export and import all the things into a JSON, also an option to clear all the conversations, and remove all the API keys as now it has option to add multiple API keys, all the things are pretty much done so i think i will just do some finishing changes and ship it for the first time
tried deploying to vercel but it didnt work tweaked some things in the server.js but reading online i foundout that i will need to make another folder for it to function properly so am doing that rn :)
Ships:
A sleek, privacy-first multi-model chat interface that runs entirely in your browser. Connects to dozens of AI models through a lightweight local proxy your API keys never leave your machine. so while deploying i encountered multiple issues and but the web helped me thankfully and also the costing doesnt work at all as of now and is something i will be fixing in the future :). g’day...
|
1792878545.9104006
|
1793742545.9104006
|
|
14228
|
Neuroband by @SumukhAgastipurkar | Stardance
|
SumukhAgastipurkar
|
1
|
64.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T03:35:13Z", "hours": 64.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What I made: Neuroband—a custom health tracker designed to be worn on the neck. It combines a custom hardware PCB with a companion Flutter mobile application. What was challenging: Routing the compact PCB layout for a neck-worn device and establishing smooth Bluetooth communication with the app. What I’m proud of: Designing the complete hardware schematics and connecting real-time hardware data to the mobile app UI. How to test: Check out the project documentation and demo video to see the hardware routing and app in action.", "repo": "https://github.com/inventthefuture-bot/neurosense-private", "demo": ""}]...
|
[{"post_id": 56359, "ts": "202 [{"post_id": 56359, "ts": "2026-08-28T03:29:54Z", "hours": 6.2178, "text": "ROUTING"}, {"post_id": 54636, "ts": "2026-08-25T17:41:32Z", "hours": 9.4175, "text": "routing of the capacitors"}, {"post_id": 53101, "ts": "2026-08-23T15:16:26Z", "hours": 9.6672, "text": "routing this messy area"}, {"post_id": 52487, "ts": "2026-08-22T17:00:43Z", "hours": 6.0019, "text": "routing the pcb"}, {"post_id": 51683, "ts": "2026-08-21T14:22:59Z", "hours": 9.2567, "text": "finally assembling the capacitors"}, {"post_id": 48093, "ts": "2026-08-16T11:51:44Z", "hours": 5.2339, "text": "finished doing 1 file"}, {"post_id": 47619, "ts": "2026-08-15T16:57:51Z", "hours": 8.8186, "text": "finally did the last ic"}, {"post_id": 46438, "ts": "2026-08-13T17:26:42Z", "hours": 2.9669, "text": "working on other ic"}, {"post_id": 45895, "ts": "2026-08-12T17:15:47Z", "hours": 2.5122, "text": "Finished Wiring of this IC"}, {"post_id": 44081, "ts": "2026-08-09T16:34:23Z", "hours": 4.7594, "text": "Wiring the ECG chip and the ESP 32"}, {"post_id": 43378, "ts": "2026-08-08T16:05:36Z", "hours": 2.1675, "text": "PCB schematic"}, {"post_id": 43238, "ts": "2026-08-08T11:53:08Z", "hours": 1.6172, "text": "Began with PCB designing for my life supporting project"}]...
|
Title: Neuroband by @SumukhAgastipurkar | Stardanc Title: Neuroband by @SumukhAgastipurkar | Stardance
Devlogs:
Began with PCB designing for my life supporting project
PCB schematic
Wiring the ECG chip and the ESP 32
Finished Wiring of this IC
working on other ic
finally did the last ic
finished doing 1 file
finally assembling the capacitors
routing the pcb
routing this messy area
routing of the capacitors
ROUTING
Ships:
What I made: Neuroband—a custom health tracker designed to be worn on the neck. It combines a custom hardware PCB with a companion Flutter mobile application. What was challenging: Routing the compact PCB layout for a neck-worn device and establishing smooth Bluetooth communication with the app. What I’m proud of: Designing the complete hardware schematics and connecting real-time hardware data to the mobile app UI. How to test: Check out the project documentation and demo video to see the hardware routing and app in action....
|
1793094515.8607724
|
1793180915.8607724
|
|
15818
|
PSim - Particle Simulator by @etaiami09-cmd | Star PSim - Particle Simulator by @etaiami09-cmd | Stardance...
|
etaiami09-cmd
|
1
|
64.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T21:25:14Z", "hours": 64.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PSimUltimate Is Ready! I made a particle simulator desktop application in C++ with heavy extension support. Overview PSimUltimate models real physics, but also allows you to inject your own behavior. Using a simple development API that even someone with no C++ experience can understand, you can create, compile and load your own custom modules to the simulator and watch the behavior you’ve coded in action. PSim even ships with 2 of these modules built into the binary, and 3 more modules that you can load dynamically. PSimUltimate also comes with a very simple UI, one that anyone could be comfortable with within minutes. How it works PSimUltimate has documentation for creating your own modules, and compiling them is very simple with a few commands. You can then load the modules, and PSim knows how to run your module and follow its physics. PSimUltimate is written in modern C++, using Raylib and Dear ImGui to provide a clean UI and good support in multiple platforms. While it only ships a Windows binary, you can easily follow the instructions in README.md to compile in other platforms. How to try it You can download the PSimUltimate installation wizard in this page . For more instructions and information, including information on support for other platforms, check out README.md in the source code. Challenges I’ve faced This project took a lot of effort to complete. It is the largest single solo project I have worked on since I started programming, and it included a lot of technical software design and infrastructure that I had to familiarize myself with, like dynamic libraries and using and altering 3rd party libraries (I altered portable file dialogs and Dear ImGui to suit my needs). I also had to deal with moving to a new computer, and then when that computer broke down due to a faulty motherboard, I had to move back to my old computer. I also started a full-time internship at a tech company. All that, coupled with some massive life changes, made it much harder to work on this project. But I enjoyed making it nonetheless, and I’m proud to show off what I’ve created.", "repo": "https://github.com/etaiami09-cmd/PSimUltimate", "demo": "https://github.com/etaiami09-cmd/PSimUltimate/releases/tag/v1.0"}]...
|
[{"post_id": 65606, "ts": "202 [{"post_id": 65606, "ts": "2026-09-10T20:55:45Z", "hours": 7.9922, "text": "Devlog #13 - Time To Ship! PSimUltimate is finally ready to ship. I have put a lot of effort into this project, and I feel genuinely proud of my what I have achieved. While working on this project I have gotten a new computer, lost that computer due to a faulty motherboard, got an internship at a tech company, and started working there full time. Suffice to say, I haven’t had much time to work on PSim in the last month. But I did. I spent time polishing what I have already created and now I feel content with my product. What I’ve done since the last devlog PSimUltimate now has a logo, designed by me. I have also run PSim on WSL and fixed various issues that only appeared on Linux. There is now a way to use your mouse to set the next particle’s position There is now a menu for editing particle data - you can delete a particle and change its position, velocity, mass, etc. PSim is now ready for release. I’m happy and proud to present it and show what I’ve done, and I hope other people receive it well. Thank you all for your support!"}, {"post_id": 48457, "ts": "2026-08-16T20:12:07Z", "hours": 4.1594, "text": "Half Devlog - Short Update: Sorry for not posting for a while. My computer broke and I’m waiting for the repair. Hopefully I’ll be back next week! Thank you for your patience."}, {"post_id": 32968, "ts": "2026-07-22T13:52:27Z", "hours": 8.5469, "text": "Devlog #12 - Solid, Boring Progress I’ve spent the last few days making regular feature updates to PSim. Here are the highlights: 1. Unload Modules Until now, if a user loaded a module and didn’t want it anymore, he would have to reopen the app. Additionally, there was no way to unload the built-in modules. I added an options tooltip in the module order GUI that allows the user to unload a module and everything it has registered. 2. Confirm Action Menu If a user is about to do an action which might lead to loss of data (close the window, override a save file), we want to confirm they know about the potential consequences and accept it. For this, I created an interface for creating a blocking modal that forces the user to either confirm an action or cancel it. 3. Graphics Handlers Behavior Improved The default should obviously be for graphics callbacks to have what they draw to the screen be projected into the actual intended buffer - that is, not anywhere in the top menu bar or the left-hand control panel. This is also already where particles are drawn, so a particle at 0, 0 is drawn in the top-left corner where the top menu bar and control panel intersect. This math had to be applied to every single thing drawn by a graphics callback, and I decided to fix it by calling graphics callbacks while in a raylib 2D mode that offsets everything so that 0, 0 is where a particle at 0,0 is drawn. 4. DPI Scaling I switched to a new laptop this week, and went from a 14 Inch 1080p screen to a 14 Inch 1440p screen. Suddenly, the menu became much smaller, because the program was drawing by pixel instead of by the system’s default scaling (which, on my new laptop, is 200%). I fixed this by making Raylib scale everything by the user’s system DPI. 5. Module Internal Serialization If a module has any internal state that should be preserved when a save file is written, it can now register a callback that returns a std::string and a callback that accepts one, and those can be used to serialize and deserialize its internal state. 6. Extended Module API Documentation I’ve now written documentation for everything but the feature discussed in point 5. 7. New Particle Target I’ve added a cross target placed in the position where a new particle would be placed according to the Position buffer, to ease on visualizing the new particle. This cross is customizeable in the settings menu and you can change width, length and color."}, {"post_id": 27577, "ts": "2026-07-13T09:02:19Z", "hours": 5.8525, "text": "Devlog #11 - Adding A Settings Page, A Config System, And More Module API Yesterday I wrote about my commitment to making PSim an actual, usable desktop application that doesn’t feel limiting to the user. What I did yesterday was create an error notification system, so if something goes wrong the user can understand why and code has a standard philosophy to handle issues. Today, I put my focus on improving the user experience by adding a settings page to PSim. The Layout Personally, when I think of a settings page in a desktop application, I usually imagine a blocking pop-up (as in, a subwindow inside the application window that while opened, does not let you touch anything outside of it) with a few tabs for different categories of settings. ImGui actually has great support for this, with OpenPopup to create one. the smaller, left-side portion of the settings page is a tab-selection area, and the right-side portion is the tab which is selected. There are 4 tabs: General Simulation Modules - modules can register custom settings About - basically just the full text of the MIT License + a link to the project’s GitHub page The Config System Personally, when I change a setting on a desktop application, I generally expect that change to still be in effect when I close and reopen it. To do this, PSim needs to get to the target platform’s app data folder, create a folder for itself if one doesn’t already exist, and then save whatever information it needs there. Now, this is obviously annoying to have to re-write every time you want to save something as simple as what FPS the user wants, so I wrote a template system to save and access binary settings files on the fly. I now had a way to make it so arbitrary settings stay the same every time I open the app. Now, I need to make it so modules have the same privilege. I created 3 new functions in the module API, writeConfig , readConfig , and registerSwitch . Each of these does as the name implies, and it allows you to add on-off switches (support for more will come later) and read/write configs to disk. Conclusion It may have taken 6 hours of work, but I managed to create a fully-functional settings UI with module support to my first desktop application. This is an important piece of architechture and makes it much easier to add more features in the future and expand the app into something I can be very proud of. Thank you very much for reading! Please enjoy this proof-of-concept video of me changing settings and reopening the app."}, {"post_id": 27058, "ts": "2026-07-12T08:08:01Z", "hours": 3.7278, "text": "Devlog #10 - Don’t Hate The User One of the most important unwritten (though I’m sure it is written somewhere) rules of writing good software is responsible error handling. I’m writing a desktop application, and personally, when I’m using a desktop application, I don’t like it when it suddenly crashes with no useful error message. This is especially possible in a desktop application written in C++, where irresponsible coding practices can lead to segfaults and other crashes without so much as a Java-style “NullPointerException”. It would be incredibly frustrating for the user to lose progress and not even know why. Another potentially frustrutaing situation is when the program fails silently. It doesn’t quite crash, but when you ask a program to do something and it just doesn’t do it, that can be frustrating. When a program can’t satisfy an action the user wants it to make, it should make it as clear as possible that it’s aware of its failure, and attempt to clarify what went wrong. What I’ve Been Doing Until Now Up until now I have handled runtime errors by… well… not handling them. I wrote my application under the assumption that everything works smoothly, every module loaded by the user exports the correct signature, every file opened by the user is well-formed, and every file the user wants to write to has the necessary permissions. If any of this went wrong, the program entered undefined behavior. Most likely, it will crash. My Solution Whenever the user requests an action by the program, for example, trying to open a saved simulation state JSON, the program goes through the following steps: Make sure the file is actually opened Make sure the file is correctly-formed JSON syntax Make sure the actual data in the file aligns with PSimUltimate’s requirements and constraints Actually deserialize the file If any of these goes wrong, the deserialization process immidiately ends and an error notification is pushed to the bottom-right corner of the screen. If multiple things are wrong about the data in the file, only the first thing in the deserialization order is written. There can be up to 3 error notifications displayed at once, with any more notifications being queued for when those are closed by the user . This solves the issue of responsible, user-friendly error handling, and is an important piece of infrastructure for a usable desktop application."}, {"post_id": 25930, "ts": "2026-07-10T13:04:03Z", "hours": 1.7719, "text": "Devlog #9 - Expanding The Module Developer API Before I begin this devlog, I would like to apologize for being inactive over the past week. I have had quite a busy week, and I did not have much of an opportunity to work on PSimUltimate unfortunately. What I Have Been Working On I’ve been putting more attention to the module API, modules are the most important part of PSim, and their API should be more advanced than the very basic one that currently exists. I’ve split the API into 5 different sections: Physics Behavior - callbacks into force, velocity, and positions of particles User Input - adding new keyboard shortcuts, reading mouse positions, reading which keys are being pressed Graphical Behavior - being able to draw stuff on the screen GUI - adding buttons, settings pages, descriptions, and more for specific modules. Other Modules - modules should be able to register dependencies and force certain modules to be either lower or higher than them on the callback order. I have been hard at work (when I can) on designing and implementing these needs. So far I have made some progress, but there is still much to do and research, and I’m sorry it’s not so juicy for a week’s worth of progress. Either way, thank you for reading, attached is an example of custom buttons that can be registered by modules in the top bar, and please keep following the project for more updates."}, {"post_id": 19922, "ts": "2026-07-01T11:10:57Z", "hours": 3.965, "text": "Devlog #8 - I Need Your Help This devlog is not so focused on what I’ve been doing since the last one, but what I have been doing is pretty cool, so I’ll go over it: PSim uses Dear ImGui as the backend for its GUI. Up until now, the font size in the GUI has been way too small (13px) and the GUI sidebar could not be resized in any way. I had to make it so resizing is possible and the font is more readable, because I want the app to be properly useable. The first thing I did switch fonts from Dear ImGui’s default non-scalable font to Dear ImGui’s default scalable version, ProggyForever. This took a few minutes but the big challenge was getting resizing to do exactly what I wanted. Despite Dear ImGui usually having exactly the correct amount of features, there is no option to make resizing only possible from one side or disable the completely free bottom-right resize grip. I had to go directly into Dear ImGui’s source code and manually disable those things myself, which was a first for me. What I Need Help With Right now whenever I try to do anything I realize that I don’t actually have a good feel for what’s missing and what needs improvement. If anyone reading this could spare some time of their day to install my application and play around with it, maybe write a module. I have added proper documentation for modules to make the whole process much easier, so hopefully someone will be able to help me find issues and missing features. You can get the release on GitHub . Thank you for reading and thank you for helping out!"}, {"post_id": 17653, "ts": "2026-06-28T15:14:57Z", "hours": 1.375, "text": "Devlog #7 - Steady Progress Is Not Interesting Sorry for the low logged time, I’ve actually been working for several hours but I forgot to install wakatime after switching to CLion. What I’ve Been Working On One of the most important things when working with multiple modules that work on a callback-based system is the ability to reorder modules so some callbacks get called before others. Imagine this: You have a module foo which clamps all particles to the window border so they can never escape the boundaries of the window. You also have module bar which increments the X position of each particle by 3, each frame. Say foo gets registered after bar , particles will get clamped to the border AND THEN move 3 pixels, breaking the behavior both module authors likely intended. The Solution Create a GUI which allows the user to reorder modules by, so a module placed after another module gets called last. Implementation Challenges I had to learn how std::list works (a linked list was the obvious choice for this use case), and let me tell you, it is by far one of the worst STL containers I’ve had to work with, and anyone who writes C++ code knows that MEANS somethimg. Conclusion Again, not much to write about today, but steady progress just isn’t all that interesting. Thanks for reading!"}, {"post_id": 14586, "ts": "2026-06-23T19:08:32Z", "hours": 1.7331, "text": "Mini Devlog - How Writing Unit Tests Made Me Fight C++ For An Hour Whenever I spend some time fighting with C++ instead of actually being productive, I feel like I at least need to get a devlog out of it, so here goes. Background I’ve been writing unit tests for my particle simulator, and one thing I’ve noticed is that I have no code to protect global state when a single module is registered more than once, which leads to weird and unintended behavior. My solution is lazy: silent failure. If a module already exists when addModule(const std::string& name) is called through the module interface function registerModule(const std::string& name) (You can read about why these are separated in an earlier blog post, it’s very cool!), the function just doesn’t register it again. Simple enough, but I wanted to implement it in “correct” C++. The Implementation (Where Things Went Wrong) What I did was create a function in module.cpp with internal linkage called getModuleByName which returns a std::optional<Module&> . Well, apparently for the C++ standard that amounts to heresy, since up until C++26 the committee never managed to agree on how to handle std::optional s that contain references. Well, I thought, I am already compiling with -std=c++26 in my project, so this should work. But it didn’t. I needed an updated libc++ implementation, which I managed to get through MinGW. I spent 30 more minutes fighting with CMake as it insisted to link against MSVC’s headers, but eventually I did manage to get it to compile. A normal programmer would have just used std::optional<Module*> but I am definitely not normal. Was it worth it? probably not. Especially when it’s all for a function which only has internal linkage and is only used in one place. But I like to think that writing code I’m comfortable with will help maintain the codebase in the future."}, {"post_id": 14286, "ts": "2026-06-23T10:40:41Z", "hours": 2.7964, "text": "Devlog #6 - Adding Testing To My Particle Simulator I’ve been working on adding unit testing to my project. It was important for me to add unit tests for several reasons: I have never written unit tests in C++, so it’s a good learning experience I genuinely want this project to end up as a polished desktop application, and that’s not really possible without following best practices. Tests are important. Parts of my application are already extremely vulnerable to bugs It’s easier to catch bugs through unit tests than through actual use of the application Catch2 as the framework I chose Catch2 as my framework because it seemed easy to work with and not too verbose. Current sensitive parts of the application Position , Velocity , and Force are all independent wrappers around Vec2<float> . It is extremely important to me that these have proper arithmetic, but are not implicitly convertible, since that is almost definitely not intended behavior. This is why I wrote almost 200 lines of code’s worth of unit tests to make sure that the typing system is strong and acts the way I want it to. Catching bugs easily through unit testing While a user will most likely eventually stumble upon any bug worth fixing, I don’t really have any users yet! I would like to ship an app that isn’t obviously broken, and to do that, I need unit tests that stress the logic of my program to make sure it can survive users messing with it. Current progress on writing tests I’ve written fairly extensive tests to enforce the Vec2<float> variants type system, and to enforce particles working and ticking correctly and interacting with modules correctly. I still have many more tests to write, and I expect to spend the next couple of hours doing that. Thank you for reading!"}, {"post_id": 11527, "ts": "2026-06-18T20:30:02Z", "hours": 1.4006, "text": "Mini Devlog - Just Spent An Hour Fighting With The C++ Standard Library + Live Showcase! I just finished spending 8 hours on a massive refactor and new features, so I thought it would be nice to sit for a little while and play around with the program and fix some errors, and generally try to make the code a little safer. I’ve spent the past hour looking at various crashes i’ve had and tryint to pinpoint and debug them, and pretty much every single one of them came down to the fact that I keep forgetting that std::vector<T>::resize(n) does not have the same functionality as std::vector<T>::clear(); std::vector<T>::reserve(n) . This should be a very simple concept, and yet it’s apperently riddled my program with bugs. That’s all solved now, and you can try release 0.1.4 here with an example boxing module! Happy programming! Also, here’s a live demo of the program in action. The recording doesn’t capture the file dialog opening up, but you can tell it’s there before the particles spawn and when I load in the module."}, {"post_id": 11357, "ts": "2026-06-18T15:58:33Z", "hours": 8.3031, "text": "Devlog #5 - I spent 8 hours overengineering my desktop application to avoid spaghetti code A few days ago I wrote about how my small desktop app was already suffering from spaghetti code due to interaction between its modules. I had originally set out to create an application with just 3 modes: Gravity, Electrostatic movement, and chemical bonds. But this has a big problem: The scope is small, making development uninteresting and the actual application pointless to users. The Change In order to solve my spaghetti code problem, I came up with a solution: Instead of implementing 3 different modes, implement an interface that allows you to add as many modes as you want. The Process My first step was to decide what the public API should be for creating a new module. I settled for this: What the module author needs The module author may want to intercept a few different things: Change Force, Velocity and Position values every frame when they are being evaluated Add an attribute for a particle (like how a particle needs a charge in electrostatics) Add a universal physical constant (like Coulomb’s constant or the gravitational constant) Render something on top of the application What I need to do I built a module system to register all of the above, plus a psim_module_api.hpp header for the module author. It defines a C-ABI entry point that calls a C++ init function the author provides. I was almost done with the entire process when I discovered that Windows apparently doesn’t properly support the ability of DLLs to access functions in the main program by linking against them at compile time, and had to rewrite a large chunk from scratch. All the user has to do is include the header and define a void initializePSimModule() which is forward-declared by the header and called by the entry point after populating the function pointer table. Then we just use user-friendly functions to register anything the module might need. An example module is shown in the screenshots, along with its source code. This module creates constants for boundaries that particles cannot cross, effectively boxing them in a rectangle. I rewrote the Gravity and Electric modules in the module system. They are part of the core application, so I’m not loading them dynamically every time, but they use the same API as dynamic extensions. This makes it essentially impossible to create spaghetti code around the different modes, and now all I have to do to load a new module into the program is call loadModule(const std::string& path) . The final flow is something like this: The module entry point is a function that receives a function pointer table to all the C-ABI functions that the module uses under the hood. It populates the module’s function pointer table (the one I added because of Windows) and then calls the main initialization function implemented by the module author. To put things in perspective, here is what happens when you register a constant: You call registerConstant(...) with a std::string and a std::function => they’re destructured into C-friendly structs => the module finds _regConstant(const char* module, size_t moduleLen, ..., PSIM_Constant_Change_Callback) in the pointer table and calls it => the main program restructures the C parameters back into C++ types => the main program calls the real registration function. And this is precisely the hard part: The module author can believe that he’s dealing with the same exact std::span<Particle> that is passed to him by the main program, but in reality that span was destructured into a Particle* and a size_t and was then restructured, all before his callback was even called. This took me 8 hours, and out of everything I’ve done with PSimUltimate for now, this has definitely been the most valuable learning experience. I learned how to expose C++ APIs while maintaining a stable C ABI backend. Very cool!"}, {"post_id": 9226, "ts": "2026-06-15T14:32:40Z", "hours": 3.5978, "text": "Devlog - 04 - Fast JSON Serialization And Deserialization I need a way to save the simulation’s state. My options were few: Create a custom binary format (pretty easy, but not readable) Create a custom text format (hard but readable) Use an existing JSON library and format state into a JSON (very easy, very readable) Option 3 is naturally the best one, so that’s the one I went with. I used nlohmann/json as my JSON library, and for now I have just gone with the native approach of manually looping through the particles to build an object tree and walking the object tree to deserialize files. Now, I know that technically this part of the application doesn’t really require any form of optimization, since even with 1,000 particles and O3 compiler optimizations this native approach takes a small enough time that there isn’t even one frame of overhead. But I still didn’t want to leave performance on the table for no reason. I started with a 10000 particle serialization benchmark. It originally took 100ms to serialize and write to disk with O3 optimizations. After a few changes, mainly first formatting the json object to a std::string and then piping it to a std::ofstream to reduce OS overhead, I quickly reached about 40ms for building an object tree and writing to disk. I got similar results without really adding any optimizations to the deserialization process. Now, this is definitely fast enough for the kind of application that PSimUltimate is, but it still seems slow. People manage to write gigabytes of JSON per second, why is my process so slow? Well, turns out the main reason is the fact that nlohmann/json is, well, pretty slow to build an object tree with. Every single item in the tree is a heap-allocated object, which means both malloc and free overhead and cache-unfriendliness. You can see in the benchmark that serializeState and deserializeState both take a couple milliseconds despite not doing anything but set up the work for the other functions, and this is because of the time it takes to malloc and free the object trees. Theoretically, there are ways to write faster nlohmann/json code that doesn’t rely on as many heap allocations, but it’s not really worth it for me to do spend time looking into it and designing it right now, so this is good enough for me for now."}, {"post_id": 9148, "ts": "2026-06-15T10:03:31Z", "hours": 0.3217, "text": "(Advice Welcome) Devlog - 03 - How to design extensible architechture for my particle simulator desktop application I tried making a simple refactor - when I was first experimenting with the code, Whenever electrostatics were disabled the vector of charges for each particle was reset. This is obviously not great behavior for when you want to be able to quickly toggle modes on and off, so I tried making it so toggling electrostatics simply switches whether the simulation notices them or not, and not whether the data exists. This took 4 different attempts at compilation and playing around before I arrived at the expected behavior - and all I was doing was just deleting some code! It became clear that even though my application is still tiny (under 1k lines of code) and even though I have only 2 modes (gravity and electrostatics), I already have spaghetti code. Now I need to do one thing: design a safe and extensible architechture for adding new types of forces. The first thing that needs to happen is deciding how each mode interacts with the particles. This is the easiest part: Each mode is told to calculate the force for which it is responsible for every particle, and those forces get added to an array of forces, and then the sum force for each particle is used to determine its new position. This alone means there will never be any meaningful spaghetti code. Now comes the hard part: deciding how modes should be declared and added to the application. There are two approaches: Create an interface for modes which is known at compile time. This will lead to better performance due to optimizations, faster startup times, and more control for me over how the application works. Create an interface for modes which is registered dynamically at startup, this approach allows for 3rd-party extensions in the form of dll files that are dropped into some folder in the install directory. This leads to slower startup times, less optimizations due to the need of a stable ABI, and an overall increase in architechture size. I don’t know what I should choose, but I would love to have someone’s input on which would be better for my project."}, {"post_id": 7542, "ts": "2026-06-12T16:19:21Z", "hours": 3.0608, "text": "Devlog - 02 - Before Shabbos Since the last blogpost I have been working on cleaning up the existing codebase, improving some APIs and laying down the groundwork for electrostatic movement. I spent over an hour splitting the GUI rendering process into multiple independent files that are each much smaller than the monolithic “graphical.cpp” from before, which allowed for a cleaner structure which enabled me to think about the code more cleanly and refactor it further. I created a generic Holder struct which runs some function when constructed (and can receive arguments for that function when constructed) and calls another function when it goes out of scope. This is useful in ImGui because very often you have stuff like ImGui::BeginGroup() which must be followed with ImGui::EndGroup() which can easily be forgotten and also leads to unclean and spaghetti code. Instead, All that needs to be done now is a declaration of a GroupHolder variable, and then ImGui::EndGroup() is automatically called when that variable goes out of scope. I moved a bunch of constants from graphical.cpp to a PSimImpl namespace which allows them to be accessed from anywhere without polluting the global namespace. Additionally, I spent some time laying down the groundwork for electrostatic movement, which includes a Force type, which is a strongly typed wrapper around Vec2. I need these to be strongly typed so Force cannot be accidentally converted to Position or Velocity, but I also wanted to be able to explicitly (or implicitly) convert a Vec2 to one of its wrappers. This took a while to get right and eventually lead to the line of code in the screenshot. One more thing: I noticed that currently this website has no way to actually find the GitHub page for other people’s projects, so here’s the link to mine: https://etaiami09-cmd/PSimUltimate Enjoy!"}, {"post_id": 6808, "ts": "2026-06-11T12:46:37Z", "hours": 4.9311, "text": "Devlog - 01 This project is a remake of my first C++ project, which was an electrostatic particle simulator. This time, I’m looking to do a bit more - the simulator will have multiple modes which can be switched on or off, and instead of trying to reinvent the wheel by making a GUI with raw SFML, I’m using ImGui and binding it to raylib for the particles. So far, I’ve spent multiple hours (I started before linking the project) setting up the project with CMake, an install wizard, and external libraries. Additionally, so far I have implemented the ability to toggle gravity and the simulation, and there is a button to toggle electrostatics, even though electrostatics are not implemented yet. I also have a menu for spawning new particles, an about page, and a menu for editing constants (like gravity)."}]...
|
Title: PSim - Particle Simulator by @etaiami09-cmd Title: PSim - Particle Simulator by @etaiami09-cmd | Stardance
Devlogs:
Devlog - 01 This project is a remake of my first C++ project, which was an electrostatic particle simulator. This time, I’m looking to do a bit more - the simulator will have multiple modes which can be switched on or off, and instead of trying to reinvent the wheel by making a GUI with raw SFML, I’m using ImGui and binding it to raylib for the particles. So far, I’ve spent multiple hours (I started before linking the project) setting up the project with CMake, an install wizard, and external libraries. Additionally, so far I have implemented the ability to toggle gravity and the simulation, and there is a button to toggle electrostatics, even though electrostatics are not implemented yet. I also have a menu for spawning new particles, an about page, and a menu for editing constants (like gravity).
Devlog - 02 - Before Shabbos Since the last blogpost I have been working on cleaning up the existing codebase, improving some APIs and laying down the groundwork for electrostatic movement. I spent over an hour splitting the GUI rendering process into multiple independent files that are each much smaller than the monolithic “graphical.cpp” from before, which allowed for a cleaner structure which enabled me to think about the code more cleanly and refactor it further. I created a generic Holder struct which runs some function when constructed (and can receive arguments for that function when constructed) and calls another function when it goes out of scope. This is useful in ImGui because very often you have stuff like ImGui::BeginGroup() which must be followed with ImGui::EndGroup() which can easily be forgotten and also leads to unclean and spaghetti code. Instead, All that needs to be done now is a declaration of a GroupHolder variable, and then ImGui::EndGroup() is automatically called when that variable goes out of scope. I moved a bunch of constants from graphical.cpp to a PSimImpl namespace which allows them to be accessed from anywhere without polluting the global namespace. Additionally, I spent some time laying down the groundwork for electrostatic movement, which includes a Force type, which is a strongly typed wrapper around Vec2. I need these to be strongly typed so Force cannot be accidentally converted to Position or Velocity, but I also wanted to be able to explicitly (or implicitly) convert a Vec2 to one of its wrappers. This took a while to get right and eventually lead to the line of code in the screenshot. One more thing: I noticed that currently this website has no way to actually find the GitHub page for other people’s projects, so here’s the link to mine: https://etaiami09-cmd/PSimUltimate Enjoy!
(Advice Welcome) Devlog - 03 - How to design extensible architechture for my particle simulator desktop application I tried making a simple refactor - when I was first experimenting with the code, Whenever electrostatics were disabled the vector of charges for each particle was reset. This is obviously not great behavior for when you want to be able to quickly toggle modes on and off, so I tried making it so toggling electrostatics simply switches whether the simulation notices them or not, and not whether the data exists. This took 4 different attempts at compilation and playing around before I arrived at the expected behavior - and all I was doing was just deleting some code! It became clear that even though my application is still tiny (under 1k lines of code) and even though I have only 2 modes (gravity and electrostatics), I already have spaghetti code. Now I need to do one thing: design a safe and extensible architechture for adding new types of forces. The first thing that needs to happen is deciding how each mode interacts with the particles. This is the easiest part: Each mode is told to calculate the force for which it is responsible for every particle, and those forces get added to an array of forces, and then the sum force for each particle is used to determine its new position. This alone means there will never be any meaningful spaghetti code. Now comes the hard part: deciding how modes should be declared and added to the application. There are two approaches: Create an interface for modes which is known at compile time. This will lead to better performance due to optimizations, faster startup times, and more control for me over how the application works. Create an interface for modes which is registered dynamically at startup, this approach allows for 3rd-party extensions in the form of dll files that are dropped into some folder in the install directory. This leads to slower startup times, less optimizations due to the need of a stable ABI, and an overall increase in architechture size. I don’t know what I should choose, but I would love to have someone’s input on which would be better for my project.
Devlog - 04 - Fast JSON Serialization And Deserialization I need a way to save the simulation’s state. My options were few: Create a custom binary format (pretty easy, but not readable) Create a custom text format (hard but readable) Use an existing JSON library and format state into a JSON (very easy, very readable) Option 3 is naturally the best one, so that’s the one I went with. I used nlohmann/json as my JSON library, and for now I have just gone with the native approach of manually looping through the particles to build an object tree and walking the object tree to deserialize files. Now, I know that technically this part of the application doesn’t really require any form of optimization, since even with 1,000 particles and O3 compiler optimizations this native approach takes a small enough time that there isn’t even one frame of overhead. But I still didn’t want to leave performance on the table for no reason. I started with a 10000 particle serialization benchmark. It originally took 100ms to serialize and write to disk with O3 optimizations. After a few changes, mainly first formatting the json object to a std::string and then piping it to a std::ofstream to reduce OS overhead, I quickly reached about 40ms for building an object tree and writing to disk. I got similar results without really adding any optimizations to the deserialization process. Now, this is definitely fast enough for the kind of application that PSimUltimate is, but it still seems slow. People manage to write gigabytes of JSON per second, why is my process so slow? Well, turns out the main reason is the fact that nlohmann/json is, well, pretty slow to build an object tree with. Every single item in the tree is a heap-allocated object, which means both malloc and free overhead and cache-unfriendliness. You can see in the benchmark that serializeState and deserializeState both take a couple milliseconds despite not doing anything but set up the work for the other functions, and this is because of the time it takes to malloc and free the object trees. Theoretically, there are ways to write faster nlohmann/json code that doesn’t rely on as many heap allocations, but it’s not really worth it for me to do spend time looking into it and designing it right now, so this is good enough for me for now.
Devlog #5 - I spent 8 hours overengineering my desktop application to avoid spaghetti code A few days ago I wrote about how my small desktop app was already suffering from spaghetti code due to interaction between its modules. I had originally set out to create an application with just 3 modes: Gravity, Electrostatic movement, and chemical bonds. But this has a big problem: The scope is small, making development uninteresting and the actual application pointless to users. The Change In order to solve my spaghetti code problem, I came up with a solution: Instead of implementing 3 different modes, implement an interface that allows you to add as many modes as you want. The Process My first step was to decide what the public API should be for creating a new module. I settled for this: What the module author needs The module author may want to intercept a few different things: Change Force, Velocity and Position values every frame when they are being evaluated Add an attribute for a particle (like how a particle needs a charge in electrostatics) Add a universal physical constant (like Coulomb’s constant or the gravitational constant) Render something on top of the application What I need to do I built a module system to register all of the above, plus a psim_module_api.hpp header for the module author. It defines a C-ABI entry point that calls a C++ init function the author provides. I was almost done with the entire process when I discovered that Windows apparently doesn’t properly support the ability of DLLs to access functions in the main program by linking against them at compile time, and had to rewrite a large chunk from scratch. All the user has to do is include the header and define a void initializePSimModule() which is forward-declared by the header and called by the entry point after populating the function pointer table. Then we just use user-friendly functions to register anything the module might need. An example module is shown in the screenshots, along with its source code. This module creates constants for boundaries that particles cannot cross, effectively boxing them in a rectangle. I rewrote the Gravity and Electric modules in the module system. They are part of the core application, so I’m not loading them dynamically every time, but they use the same API as dynamic extensions. This makes it essentially impossible to create spaghetti code around the different modes, and now all I have to do to load a new module into the program is call loadModule(const std::string& path) . The final flow is something like this: The module entry point is a function that receives a function pointer table to all the C-ABI functions that the module uses under the hood. It populates the module’s function pointer table (the one I added because of Windows) and then calls the main initialization function implemented by the module author. To put things in perspective, here is what happens when you register a constant: You call registerConstant(...) with a std::string and a std::function => they’re destructured into C-friendly structs => the module finds _regConstant(const char* module, size_t moduleLen, ..., PSIM_Constant_Change_Callback) in the pointer table and calls it => the main program restructures the C parameters back into C++ types => the main program calls the real registration function. And this is precisely the hard part: The module author can believe that he’s dealing with the same exact std::span<Particle> that is passed to him by the main program, but in reality that span was destructured into a Particle* and a size_t and was then restructured, all before his callback was even called. This took me 8 hours, and out of everything I’ve done with PSimUltimate for now, this has definitely been the most valuable learning experience. I learned how to expose C++ APIs while maintaining a stable C ABI backend. Very cool!
Mini Devlog - Just Spent An Hour Fighting With The C++ Standard Library + Live Showcase! I just finished spending 8 hours on a massive refactor and new features, so I thought it would be nice to sit for a little while and play around with the program and fix some errors, and generally try to make the code a little safer. I’ve spent the past hour looking at various crashes i’ve had and tryint to pinpoint and debug them, and pretty much every single one of them came down to the fact that I keep forgetting that std::vector<T>::resize(n) does not have the same functionality as std::vector<T>::clear(); std::vector<T>::reserve(n) . This should be a very simple concept, and yet it’s apperently riddled my program with bugs. That’s all solved now, and you can try release 0.1.4 here with an example boxing module! Happy programming! Also, here’s a live demo of the program in action. The recording doesn’t capture the file dialog opening up, but you can tell it’s there before the particles spawn and when I load in the module.
Devlog #6 - Adding Testing To My Particle Simulator I’ve been working on adding unit testing to my project. It was important for me to add unit tests for several reasons: I have never written unit tests in C++, so it’s a good learning experience I genuinely want this project to end up as a polished desktop application, and that’s not really possible without following best practices. Tests are important. Parts of my application are already extremely vulnerable to bugs It’s easier to catch bugs through unit tests than through actual use of the application Catch2 as the framework I chose Catch2 as my framework because it seemed easy to work with and not too verbose. Current sensitive parts of the application Position , Velocity , and Force are all independent wrappers around Vec2<float> . It is extremely important to me that these have proper arithmetic, but are not implicitly convertible, since that is almost definitely not intended behavior. This is why I wrote almost 200 lines of code’s worth of unit tests to make sure that the typing system is strong and acts the way I want it to. Catching bugs easily through unit testing While a user will most likely eventually stumble upon any bug worth fixing, I don’t really have any users yet! I would like to ship an app that isn’t obviously broken, and to do that, I need unit tests that stress the logic of my program to make sure it can survive users messing with it. Current progress on writing tests I’ve written fairly extensive tests to enforce the Vec2<float> variants type system, and to enforce particles working and ticking correctly and interacting with modules correctly. I still have many more tests to write, and I expect to spend the next couple of hours doing that. Thank you for reading!
Mini Devlog - How Writing Unit Tests Made Me Fight C++ For An Hour Whenever I spend some time fighting with C++ instead of actually being productive, I feel like I at least need to get a devlog out of it, so here goes. Background I’ve been writing unit tests for my particle simulator, and one thing I’ve noticed is that I have no code to protect global state when a single module is registered more than once, which leads to weird and unintended behavior. My solution is lazy: silent failure. If a module already exists when addModule(const std::string& name) is called through the module interface function registerModule(const std::string& name) (You can read about why these are separated in an earlier blog post, it’s very cool!), the function just doesn’t register it again. Simple enough, but I wanted to implement it in “correct” C++. The Implementation (Where Things Went Wrong) What I did was create a function in module.cpp with internal linkage called getModuleByName which returns a std::optional<Module&> . Well, apparently for the C++ standard that amounts to heresy, since up until C++26 the committee never managed to agree on how to handle std::optional s that contain references. Well, I thought, I am already compiling with -std=c++26 in my project, so this should work. But it didn’t. I needed an updated libc++ implementation, which I managed to get through MinGW. I spent 30 more minutes fighting with CMake as it insisted to link against MSVC’s headers, but eventually I did manage to get it to compile. A normal programmer would have just used std::optional<Module*> but I am definitely not normal. Was it worth it? probably not. Especially when it’s all for a function which only has internal linkage and is only used in one place. But I like to think that writing code I’m comfortable with will help maintain the codebase in the future.
Devlog #7 - Steady Progress Is Not Interesting Sorry for the low logged time, I’ve actually been working for several hours but I forgot to install wakatime after switching to CLion. What I’ve Been Working On One of the most important things when working with multiple modules that work on a callback-based system is the ability to reorder modules so some callbacks get called before others. Imagine this: You have a module foo which clamps all particles to the window border so they can never escape the boundaries of the window. You also have module bar which increments the X position of each particle by 3, each frame. Say foo gets registered after bar , particles will get clamped to the border AND THEN move 3 pixels, breaking the behavior both module authors likely intended. The Solution Create a GUI which allows the user to reorder modules by, so a module placed after another module gets called last. Implementation Challenges I had to learn how std::list works (a linked list was the obvious choice for this use case), and let me tell you, it is by far one of the worst STL containers I’ve had to work with, and anyone who writes C++ code knows that MEANS somethimg. Conclusion Again, not much to write about today, but steady progress just isn’t all that interesting. Thanks for reading!
Devlog #8 - I Need Your Help This devlog is not so focused on what I’ve been doing since the last one, but what I have been doing is pretty cool, so I’ll go over it: PSim uses Dear ImGui as the backend for its GUI. Up until now, the font size in the GUI has been way too small (13px) and the GUI sidebar could not be resized in any way. I had to make it so resizing is possible and the font is more readable, because I want the app to be properly useable. The first thing I did switch fonts from Dear ImGui’s default non-scalable font to Dear ImGui’s default scalable version, ProggyForever. This took a few minutes but the big challenge was getting resizing to do exactly what I wanted. Despite Dear ImGui usually having exactly the correct amount of features, there is no option to make resizing only possible from one side or disable the completely free bottom-right resize grip. I had to go directly into Dear ImGui’s source code and manually disable those things myself, which was a first for me. What I Need Help With Right now whenever I try to do anything I realize that I don’t actually have a good feel for what’s missing and what needs improvement. If anyone reading this could spare some time of their day to install my application and play around with it, maybe write a module. I have added proper documentation for modules to make the whole process much easier, so hopefully someone will be able to help me find issues and missing features. You can get the release on GitHub . Thank you for reading and thank you for helping out!
Devlog #9 - Expanding The Module Developer API Before I begin this devlog, I would like to apologize for being inactive over the past week. I have had quite a busy week, and I did not have much of an opportunity to work on PSimUltimate unfortunately. What I Have Been Working On I’ve been putting more attention to the module API, modules are the most important part of PSim, and their API should be more advanced than the very basic one that currently exists. I’ve split the API into 5 different sections: Physics Behavior - callbacks into force, velocity, and positions of particles User Input - adding new keyboard shortcuts, reading mouse positions, reading which keys are being pressed Graphical Behavior - being able to draw stuff on the screen GUI - adding buttons, settings pages, descriptions, and more for specific modules. Other Modules - modules should be able to register dependencies and force certain modules to be either lower or higher than them on the callback order. I have been hard at work (when I can) on designing and implementing these needs. So far I have made some progress, but there is still much to do and research, and I’m sorry it’s not so juicy for a week’s worth of progress. Either way, thank you for reading, attached is an example of custom buttons that can be registered by modules in the top bar, and please keep following the project for more updates.
Devlog #10 - Don’t Hate The User One of the most important unwritten (though I’m sure it is written somewhere) rules of writing good software is responsible error handling. I’m writing a desktop application, and personally, when I’m using a desktop application, I don’t like it when it suddenly crashes with no useful error message. This is especially possible in a desktop application written in C++, where irresponsible coding practices can lead to segfaults and other crashes without so much as a Java-style “NullPointerException”. It would be incredibly frustrating for the user to lose progress and not even know why. Another potentially frustrutaing situation is when the program fails silently. It doesn’t quite crash, but when you ask a program to do something and it just doesn’t do it, that can be frustrating. When a program can’t satisfy an action the user wants it to make, it should make it as clear as possible that it’s aware of its failure, and attempt to clarify what went wrong. What I’ve Been Doing Until Now Up until now I have handled runtime errors by… well… not handling them. I wrote my application under the assumption that everything works smoothly, every module loaded by the user exports the correct signature, every file opened by the user is well-formed, and every file the user wants to write to has the necessary permissions. If any of this went wrong, the program entered undefined behavior. Most likely, it will crash. My Solution Whenever the user requests an action by the program, for example, trying to open a saved simulation state JSON, the program goes through the following steps: Make sure the file is actually opened Make sure the file is correctly-formed JSON syntax Make sure the actual data in the file aligns with PSimUltimate’s requirements and constraints Actually deserialize the file If any of these goes wrong, the deserialization process immidiately ends and an error notification is pushed to the bottom-right corner of the screen. If multiple things are wrong about the data in the file, only the first thing in the deserialization order is written. There can be up to 3 error notifications displayed at once, with any more notifications being queued for when those are closed by the user . This solves the issue of responsible, user-friendly error handling, and is an important piece of infrastructure for a usable desktop application.
Devlog #11 - Adding A Settings Page, A Config System, And More Module API Yesterday I wrote about my commitment to making PSim an actual, usable desktop application that doesn’t feel limiting to the user. What I did yesterday was create an error notification system, so if something goes wrong the user can understand why and code has a standard philosophy to handle issues. Today, I put my focus on improving the user experience by adding a settings page to PSim. The Layout Personally, when I think of a settings page in a desktop application, I usually imagine a blocking pop-up (as in, a subwindow inside the application window that while opened, does not let you touch anything outside of it) with a few tabs for different categories of settings. ImGui actually has great support for this, with OpenPopup to create one. the smaller, left-side portion of the settings page is a tab-selection area, and the right-side portion is the tab which is selected. There are 4 tabs: General Simulation Modules - modules can register custom settings About - basically just the full text of the MIT License + a link to the project’s GitHub page The Config System Personally, when I change a setting on a desktop application, I generally expect that change to still be in effect when I close and reopen it. To do this, PSim needs to get to the target platform’s app data folder, create a folder for itself if one doesn’t already exist, and then save whatever information it needs there. Now, this is obviously annoying to have to re-write every time you want to save something as simple as what FPS the user wants, so I wrote a template system to save and access binary settings files on the fly. I now had a way to make it so arbitrary settings stay the same every time I open the app. Now, I need to make it so modules have the same privilege. I created 3 new functions in the module API, writeConfig , readConfig , and registerSwitch . Each of these does as the name implies, and it allows you to add on-off switches (support for more will come later) and read/write configs to disk. Conclusion It may have taken 6 hours of work, but I managed to create a fully-functional settings UI with module support to my first desktop application. This is an important piece of architechture and makes it much easier to add more features in the future and expand the app into something I can be very proud of. Thank you very much for reading! Please enjoy this proof-of-concept video of me changing settings and reopening the app.
Devlog #12 - Solid, Boring Progress I’ve spent the last few days making regular feature updates to PSim. Here are the highlights: 1. Unload Modules Until now, if a user loaded a module and didn’t want it anymore, he would have to reopen the app. Additionally, there was no way to unload the built-in modules. I added an options tooltip in the module order GUI that allows the user to unload a module and everything it has registered. 2. Confirm Action Menu If a user is about to do an action which might lead to loss of data (close the window, override a save file), we want to confirm they know about the potential consequences and accept it. For this, I created an interface for creating a blocking modal that forces the user to either confirm an action or cancel it. 3. Graphics Handlers Behavior Improved The default should obviously be for graphics callbacks to have what they draw to the screen be projected into the actual intended buffer - that is, not anywhere in the top menu bar or the left-hand control panel. This is also already where particles are drawn, so a particle at 0, 0 is drawn in the top-left corner where the top menu bar and control panel intersect. This math had to be applied to every single thing drawn by a graphics callback, and I decided to fix it by calling graphics callbacks while in a raylib 2D mode that offsets everything so that 0, 0 is where a particle at 0,0 is drawn. 4. DPI Scaling I switched to a new laptop this week, and went from a 14 Inch 1080p screen to a 14 Inch 1440p screen. Suddenly, the menu became much smaller, because the program was drawing by pixel instead of by the system’s default scaling (which, on my new laptop, is 200%). I fixed this by making Raylib scale everything by the user’s system DPI. 5. Module Internal Serialization If a module has any internal state that should be preserved when a save file is written, it can now register a callback that returns a std::string and a callback that accepts one, and those can be used to serialize and deserialize its internal state. 6. Extended Module API Documentation I’ve now written documentation for everything but the feature discussed in point 5. 7. New Particle Target I’ve added a cross target placed in the position where a new particle would be placed according to the Position buffer, to ease on visualizing the new particle. This cross is customizeable in the settings menu and you can change width, length and color.
Half Devlog - Short Update: Sorry for not posting for a while. My computer broke and I’m waiting for the repair. Hopefully I’ll be back next week! Thank you for your patience.
Devlog #13 - Time To Ship! PSimUltimate is finally ready to ship. I have put a lot of effort into this project, and I feel genuinely proud of my what I have achieved. While working on this project I have gotten a new computer, lost that computer due to a faulty motherboard, got an internship at a tech company, and started working there full time. Suffice to say, I haven’t had much time to work on PSim in the last month. But I did. I spent time polishing what I have already created and now I feel content with my product. What I’ve done since the last devlog PSimUltimate now has a logo, designed by me. I have also run PSim on WSL and fixed various issues that only appeared on Linux. There is now a way to use your mouse to set the next particle’s position There is now a menu for editing particle data - you can delete a particle and change its position, velocity, mass, etc. PSim is now ready for release. I’m happy and proud to present it and show what I’ve done, and I hope other people receive it well. Thank you all for your support!
Ships:
PSimUltimate Is Ready! I made a particle simulator desktop application in C++ with heavy extension support. Overview PSimUltimate models real physics, but also allows you to inject your own behavior. Using a simple development API that even someone with no C++ experience can understand, you can create, compile and load your own custom modules to the simulator and watch the behavior you’ve coded in action. PSim even ships with 2 of these modules built into the binary, and 3 more modules that you can load dynamically. PSimUltimate also comes with a very simple UI, one that anyone could be comfortable with within minutes. How it works PSimUltimate has documentation for creating your own modules, and compiling them is very simple with a few commands. You can then load the modules, and PSim knows how to run your module and follow its physics. PSimUltimate is written in modern C++, using Raylib and Dear ImGui to provide a clean UI and good support in multiple platforms. While it only ships a Windows binary, you can easily follow the instructions in README.md to compile in other platforms. How to try it You can download the PSimUltimate installation wizard in this page . For more instructions and information, including information on support for other platforms, check out README.md in the source code. Challenges I’ve faced This project took a lot of effort to complete. It is the largest single solo project I have worked on since I started programming, and it included a lot of technical software design and infrastructure that I had to familiarize myself with, like dynamic libraries and using and altering 3rd party libraries (I altered portable file dialogs and Dear ImGui to suit my needs). I also had to deal with moving to a new computer, and then when that computer broke down due to a faulty motherboard, I had to move back to my old computer. I also started a full-time internship at a tech company. All that, coupled with some massive life changes, made it much harder to work on this project. But I enjoyed making it nonetheless, and I’m proud to show off what I’ve created....
|
1792997590.9107614
|
1793083990.9107614
|
|
41201
|
IsaacOS by @slecesama | Stardance
|
slecesama
|
2
|
64.0
|
1003
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-21T15:42:20Z", "hours": 58.0, "multiplier": 17.35, "payout": 1003, "blessing": "neutral", "text": "i made the webOS actually functional, with apps that have some utility or functionality (such as the compendium app, my beloved wiki app) and not just the same old stuff such as calculators and notes. tbh i maybe made so many apps that there are 3 columns and covers a part of the desktop, so for that reason i made folders! for the new apps that i made, some of them were actually out of my reach of skills of programming so i had to learn some stuff or use AI for the most complicated stuff, but other than that i would say this project has actually made me re-gain the will of coding that i lost. there are a lot of features that tbh i were to list them all it would take a lot but the thing i focused the most on this project were: making the compendium app an actual useful app that i use regularly when playing the game, and the customization of the os using the themes app. i rlly liked building those two and were the most fun and also challenging part of the whole project. so please try changing stuff in the themes app and make it cool ;) and also use the blue map on the topbar to change the layour of the desktop and tell me which one u like more! i hope u’ll have fun using it and for isaac players, tell me what u would like to change and try the compendium app", "repo": "https://github.com/pickledroided/webbandola", "demo": "https://pickledroided.github.io/webbandola/"}, {"ship_num": 2, "ts": "2026-08-03T13:50:28Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Welcome to IsaacOS! this is a very cool OS based on the binding of isaac (i am playing it so much rn) which has minimal but essential apps right now but will have many and many more in the future. i made it using only html, css and js and honestly i think it looks great! i rlly like the colors i used, even tho when i will probably re-ship it when it has more apps i will change them so it looks new/updated, but other than that i am very satisfied! it has only a note app, website that is very limited, simple calculator and a find me on socials app, but i have many more that i am currently developing but i thought that i’d like to ship it now so i can see the progress im making. hope u like it! >:3 play the saac, u won’t regret it (T⌓T)", "repo": "https://github.com/pickledroided/webbandola", "demo": "https://pickledroided.github.io/webbandola/"}]...
|
[{"post_id": 71787, "ts": "202 [{"post_id": 71787, "ts": "2026-09-21T15:31:58Z", "hours": 0.7106, "text": "**DEVLOG #12 made some fixes and changed readme + demo png. ready to ship"}, {"post_id": 70657, "ts": "2026-09-19T15:17:02Z", "hours": 5.6183, "text": "**DEVLOG #11 i think its ready to ship! i kinda lost my will to update it etc lately so i kinda rushed it at the end, but im still happy with how it turned out!"}, {"post_id": 67441, "ts": "2026-09-13T15:31:41Z", "hours": 9.5967, "text": "**DEVLOG #10 helloo since i have a dopamine addiction i made a doomscroll app where u can doomscroll (rn there are only like 10 videos, but ill add more) between these videos that i chose about isaac, made a demo app thats just an iframe of the binding of isaac flash version demo gotten from crazy games and a terminal with various commands. also made some new options in the settings app and added it to the topbar, made the hour and date clickable so that they open lil widgets of a clock and a calendar"}, {"post_id": 61224, "ts": "2026-09-04T01:44:43Z", "hours": 9.9403, "text": "**DEVLOG #09 HELLOO i made a select layout on the topbar (blue map) where u can change the dekstop layout and just have a dock with all the apps instead of the normal desktop app icons. also made a tetris (the code is really messed up and doesnt work properly rn, will try to debug) and also made a spotlight to search apps with ctrl + space. also made a lot of tweaks etc but i made them days ago and dont remember them anymore :| this devlog is gonna be shorter because im getting tired of ts so i will try to rush the last things i wanna do and just ship it. it already has a lot of things it doesnt need more tbh"}, {"post_id": 55496, "ts": "2026-08-27T11:49:37Z", "hours": 10.0392, "text": "**DEVLOG #08 i made widgets! they are draggable, customizable with the themes app and all of em work perfectly! the isaac exclusives are the mom’s voicelines and item of the day widget (where u can reroll once per day using D6). i’ve spent most of the time optimizing and fixing bugs, but the thing that stole most of my time was the themes (i got bored of the black and red colors with that background) so i started making some presets with both backgrounds and icon colors. most of them aren’t still finished but yeah i’ll be getting into it shortly. also made some tweaks in the settings, gallery and compendium app aaand i think that’s all. rn im trying to make a domino/infinity effect using the browser where i can open the webOS multiple times inside the webOS but it starts showing white screen after 2 times so idk how to fix."}, {"post_id": 49571, "ts": "2026-08-18T13:35:52Z", "hours": 9.3731, "text": "**DEVLOG #07 helloooo! i made a lot of progress since last time, i made an intro (for some reason i cant upload the video here in the devlog :( but i will ship soon and u’ll be able to see it there) of isaac descending into the floor, idk what to add there but i will try to make it prettier! then i made the settings app and a music player that plays my favorite isaac OSTs (i have no idea if they are copyrighted, i hope not) i also made a paint app (peep the tools, all the icons are isaac items as always) and that’s about it i think, made the topbar prettier and idk i feel tired rn so goodbye"}, {"post_id": 46313, "ts": "2026-08-13T13:38:47Z", "hours": 9.0636, "text": "**DEVLOG #06 ok so it’s been a long journey updating this compendium app, there are a lot of things i wanted to add and it’s still not complete rn, but it’s 99% finished! i added various sections inside the app where u can see all of the unlocks and they are based on what characters u are playing or bosses u are about to kill. other than that i also added a gallery app where i just put a lot of images of isaac and friends, and a themes app where u can change the main colors of the whole OS."}, {"post_id": 43201, "ts": "2026-08-08T10:26:08Z", "hours": 3.4817, "text": "**DEVLOG #05 hello! i put a lot of my time in here for making the app that i think will be the most useful one here (or at least for us isaac players), which is the Compendium app! What is Compendium ? Compendium is this app i made that shows every item, trinket, challenge and character of The Binding of Isaac. it works like a little wiki (not so little since there are more than 720 items and trinkets) and shows every item sorting them by the ID ingame, shows their quality and if they have to be unlocked ingame, it shows you how to unlock them. You can also sort it based on what DLCs u have, default is having all of them (steam sale saved a lot of players). same thing even for trinkets but they don’t have quality in game so the only sorting is DLCs and then the last section of the app is the Unlocks where u can choose and see either how to unlock characters, how to unlock challenges and what reward they give u or all the items that have to be unlocked. What i will add in the future (today or tomorrow probably) the app is 90% done and i wanna add a boss section with tips on how to fight them and a reccomended unlock icon on all of the unlocks that are fundamental for progressing in the game. How did i develop it ok so i thought scraping the web for data was easier, turns out it wasnt and i crashed out multiple times. there are SO MANY items, trinkets and things to get data from and getting all of them was not easy, i tried getting them myself but i gave up halfway through, had to use ai for all the scraping. the worst thing is that it was causing problems and forgetting things and i was always adding them later on, like first i got all the items and that’s it, then i remembered to sort the things, then that not all of them are unlocked, then how to unlock etc etc and thankfully i wasn’t the one that had to scrape all of that data."}, {"post_id": 40078, "ts": "2026-08-03T13:41:49Z", "hours": 1.5744, "text": "**DEVLOG #04 ok so i kinda got lost in my thoughts today so i didn’t do too much but i made it so u can move around icons on the os and added animations when u close/minimize windows, also u can now resize the windows as u like by pulling the window in the corner . i think it’s ready now to ship and i will re-ship with the next mission when i will add more things such as background settings, themes, paint app, actual games etc"}, {"post_id": 39632, "ts": "2026-08-02T19:11:06Z", "hours": 1.3294, "text": "**DEVLOG #03 i made a calculator app using old code from another project and made it match with the whole theme, made the notes app use localStorage so it saves the notes between sessions (there’s a default one tho) and made a lil dock for the open windows rn, also made a lil animations for when there are no windows open but i can’t record rn so u can’t see it, but i will add some micro animations later on to the dock. making this screenshot and being unable to get the browser window in the screen made me realize that i should make it so the windows size can be changed by pulling it on the corner"}, {"post_id": 38831, "ts": "2026-08-01T12:09:00Z", "hours": 2.0381, "text": "**DEVLOG #02 hi humans i changed a lot of the colors and added a background directly from isaac (unused Sheol floor). i added the notes app (which rn only shows a pre-written note, still cant add a new one) a find me app where u can find all of my socials and the browser. the browser was the hard part where i gave up half-way thru because i cant figure out how to search things online that dont block the browser using iframes, so it only shows wikipedia and the website on github pages cuz i wanted to create an infinity effect where u could open the webOS in the browser and do it a lot of times but i cant figure out the resolution etc so u can do it only once rn. also all of the icons are isaac items"}, {"post_id": 38305, "ts": "2026-07-31T16:57:45Z", "hours": 0.8522, "text": "**DEVLOG #01 helo i am making the binding of isaac os. rn it is just very basic since i am following the guide (rn nothing works, i made the windows draggable and closable but they don’t work) and i have 0 ideas on what apps to add, but i will try to make it work and add some cool features"}]...
|
Title: IsaacOS by @slecesama | Stardance
Devlogs: Title: IsaacOS by @slecesama | Stardance
Devlogs:
**DEVLOG #01 helo i am making the binding of isaac os. rn it is just very basic since i am following the guide (rn nothing works, i made the windows draggable and closable but they don’t work) and i have 0 ideas on what apps to add, but i will try to make it work and add some cool features
**DEVLOG #02 hi humans i changed a lot of the colors and added a background directly from isaac (unused Sheol floor). i added the notes app (which rn only shows a pre-written note, still cant add a new one) a find me app where u can find all of my socials and the browser. the browser was the hard part where i gave up half-way thru because i cant figure out how to search things online that dont block the browser using iframes, so it only shows wikipedia and the website on github pages cuz i wanted to create an infinity effect where u could open the webOS in the browser and do it a lot of times but i cant figure out the resolution etc so u can do it only once rn. also all of the icons are isaac items
**DEVLOG #03 i made a calculator app using old code from another project and made it match with the whole theme, made the notes app use localStorage so it saves the notes between sessions (there’s a default one tho) and made a lil dock for the open windows rn, also made a lil animations for when there are no windows open but i can’t record rn so u can’t see it, but i will add some micro animations later on to the dock. making this screenshot and being unable to get the browser window in the screen made me realize that i should make it so the windows size can be changed by pulling it on the corner
**DEVLOG #04 ok so i kinda got lost in my thoughts today so i didn’t do too much but i made it so u can move around icons on the os and added animations when u close/minimize windows, also u can now resize the windows as u like by pulling the window in the corner . i think it’s ready now to ship and i will re-ship with the next mission when i will add more things such as background settings, themes, paint app, actual games etc
**DEVLOG #05 hello! i put a lot of my time in here for making the app that i think will be the most useful one here (or at least for us isaac players), which is the Compendium app! What is Compendium ? Compendium is this app i made that shows every item, trinket, challenge and character of The Binding of Isaac. it works like a little wiki (not so little since there are more than 720 items and trinkets) and shows every item sorting them by the ID ingame, shows their quality and if they have to be unlocked ingame, it shows you how to unlock them. You can also sort it based on what DLCs u have, default is having all of them (steam sale saved a lot of players). same thing even for trinkets but they don’t have quality in game so the only sorting is DLCs and then the last section of the app is the Unlocks where u can choose and see either how to unlock characters, how to unlock challenges and what reward they give u or all the items that have to be unlocked. What i will add in the future (today or tomorrow probably) the app is 90% done and i wanna add a boss section with tips on how to fight them and a reccomended unlock icon on all of the unlocks that are fundamental for progressing in the game. How did i develop it ok so i thought scraping the web for data was easier, turns out it wasnt and i crashed out multiple times. there are SO MANY items, trinkets and things to get data from and getting all of them was not easy, i tried getting them myself but i gave up halfway through, had to use ai for all the scraping. the worst thing is that it was causing problems and forgetting things and i was always adding them later on, like first i got all the items and that’s it, then i remembered to sort the things, then that not all of them are unlocked, then how to unlock etc etc and thankfully i wasn’t the one that had to scrape all of that data.
**DEVLOG #06 ok so it’s been a long journey updating this compendium app, there are a lot of things i wanted to add and it’s still not complete rn, but it’s 99% finished! i added various sections inside the app where u can see all of the unlocks and they are based on what characters u are playing or bosses u are about to kill. other than that i also added a gallery app where i just put a lot of images of isaac and friends, and a themes app where u can change the main colors of the whole OS.
**DEVLOG #07 helloooo! i made a lot of progress since last time, i made an intro (for some reason i cant upload the video here in the devlog :( but i will ship soon and u’ll be able to see it there) of isaac descending into the floor, idk what to add there but i will try to make it prettier! then i made the settings app and a music player that plays my favorite isaac OSTs (i have no idea if they are copyrighted, i hope not) i also made a paint app (peep the tools, all the icons are isaac items as always) and that’s about it i think, made the topbar prettier and idk i feel tired rn so goodbye
**DEVLOG #08 i made widgets! they are draggable, customizable with the themes app and all of em work perfectly! the isaac exclusives are the mom’s voicelines and item of the day widget (where u can reroll once per day using D6). i’ve spent most of the time optimizing and fixing bugs, but the thing that stole most of my time was the themes (i got bored of the black and red colors with that background) so i started making some presets with both backgrounds and icon colors. most of them aren’t still finished but yeah i’ll be getting into it shortly. also made some tweaks in the settings, gallery and compendium app aaand i think that’s all. rn im trying to make a domino/infinity effect using the browser where i can open the webOS multiple times inside the webOS but it starts showing white screen after 2 times so idk how to fix.
**DEVLOG #09 HELLOO i made a select layout on the topbar (blue map) where u can change the dekstop layout and just have a dock with all the apps instead of the normal desktop app icons. also made a tetris (the code is really messed up and doesnt work properly rn, will try to debug) and also made a spotlight to search apps with ctrl + space. also made a lot of tweaks etc but i made them days ago and dont remember them anymore :| this devlog is gonna be shorter because im getting tired of ts so i will try to rush the last things i wanna do and just ship it. it already has a lot of things it doesnt need more tbh
**DEVLOG #10 helloo since i have a dopamine addiction i made a doomscroll app where u can doomscroll (rn there are only like 10 videos, but ill add more) between these videos that i chose about isaac, made a demo app thats just an iframe of the binding of isaac flash version demo gotten from crazy games and a terminal with various commands. also made some new options in the settings app and added it to the topbar, made the hour and date clickable so that they open lil widgets of a clock and a calendar
**DEVLOG #11 i think its ready to ship! i kinda lost my will to update it etc lately so i kinda rushed it at the end, but im still happy with how it turned out!
**DEVLOG #12 made some fixes and changed readme + demo png. ready to ship
Ships:
Welcome to IsaacOS! this is a very cool OS based on the binding of isaac (i am playing it so much rn) which has minimal but essential apps right now but will have many and many more in the future. i made it using only html, css and js and honestly i think it looks great! i rlly like the colors i used, even tho when i will probably re-ship it when it has more apps i will change them so it looks new/updated, but other than that i am very satisfied! it has only a note app, website that is very limited, simple calculator and a find me on socials app, but i have many more that i am currently developing but i thought that i’d like to ship it now so i can see the progress im making. hope u like it! >:3 play the saac, u won’t regret it (T⌓T)
i made the webOS actually functional, with apps that have some utility or functionality (such as the compendium app, my beloved wiki app) and not just the same old stuff such as calculators and notes. tbh i maybe made so many apps that there are 3 columns and covers a part of the desktop, so for that reason i made folders! for the new apps that i made, some of them were actually out of my reach of skills of programming so i had to learn some stuff or use AI for the most complicated stuff, but other than that i would say this project has actually made me re-gain the will of coding that i lost. there are a lot of features that tbh i were to list them all it would take a lot but the thing i focused the most on this project were: making the compendium app an actual useful app that i use regularly when playing the game, and the customization of the os using the themes app. i rlly liked building those two and were the most fun and also challenging part of the whole project. so please try changing stuff in the themes app and make it cool ;) and also use the blue map on the topbar to change the layour of the desktop and tell me which one u like more! i hope u’ll have fun using it and for isaac players, tell me what u would like to change and try the compendium app...
|
1792990623.6729932
|
1793077023.6729932
|
|
70465
|
The Blog Bench by @jaisondavidm_cs25 | Stardance
|
jaisondavidm_cs25
|
1
|
64.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T10:09:15Z", "hours": 64.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a site name The Blog Bench here user can post their blogs and read other blogs and tag some user which get notified. and report the blog if it is not good and view post based on tag categories and can get the trending blogs . you can i write a blog in a good rich text editor the challenging part is the deployement part because it is a fullstack project . i new to use docker docker compose so i learned it and deployed after struggling and connecting the client,server,database everything felt difficult i have admin sperate pages so for admin credentials use admin(username) Admin007@(password)", "repo": "https://github.com/jaisondavid-m/blog-site", "demo": "https://json.hackclub.app"}]...
|
[{"post_id": 80942, "ts": "202 [{"post_id": 80942, "ts": "2026-10-19T10:03:19Z", "hours": 64.3667, "text": "i do this project for maconda but they now say to move to other events so i shipping here i already posted all develogs and commit the history properly you can refer all my develogs using this link https://macondo.hackclub.com/projects/6875"}]...
|
Title: The Blog Bench by @jaisondavidm_cs25 | Star Title: The Blog Bench by @jaisondavidm_cs25 | Stardance
Devlogs:
i do this project for maconda but they now say to move to other events so i shipping here i already posted all develogs and commit the history properly you can refer all my develogs using this link https://macondo.hackclub.com/projects/6875
Ships:
i made a site name The Blog Bench here user can post their blogs and read other blogs and tag some user which get notified. and report the blog if it is not good and view post based on tag categories and can get the trending blogs . you can i write a blog in a good rich text editor the challenging part is the deployement part because it is a fullstack project . i new to use docker docker compose so i learned it and deployed after struggling and connecting the client,server,database everything felt difficult i have admin sperate pages so for admin credentials use admin(username) Admin007@(password)...
|
1792857041.7982945
|
1793721041.7982945
|
|
19230
|
20% Cooler KEYBOARD by @matthewwong12 | Stardance
|
matthewwong12
|
0
|
63.9
|
0
|
[]
|
[{"post_id": 81226, "ts": "202 [{"post_id": 81226, "ts": "2026-10-20T11:14:38Z", "hours": 1.9336, "text": "what’s up Everypony this is the last devblog im posting before i ship my project for funding. during this time period , i made some finishing touches to the Case , prep it for production and i am just writing and updating my repo constantly. anyway i think i done with this project for now gotta work on my website fr fr it’s also exam season now for me, so there might be less frequent update enjoy this assembly animation i made :)"}, {"post_id": 79099, "ts": "2026-10-12T17:35:09Z", "hours": 7.5019, "text": "howdy pony ! this is it im done with my case this is it we’re done with the designing phase , things i did: changed the 3d model of the pi pico with a usb c cut out the upper case heatset insert hole cut out space for the screw head sticking out at the plate cut out the usb-c charger hole rounded the case edges oooo idk if u notice but there’s a big hole on top of pico and that’s there on purpose so i can add a clear acrylic plate there. oh yeah and the text there also have space below to insert some light dispersing material. tomorrow is repo day people im going go over yer tutorial now once you finish your pcb and it all checks out , now it’s time to create an enclosure for it . first export the stp file from kicad(there’s an option for you to export the silkscreen). then go to your software and import your stp file into your cad software.when i did this process i did encounter an issue where the stp file fail to translate(FUSION) so big L but there’s a work around. first i go to onshape and import and translate the file there. then we export the file that is just translated by onshape into fusion and voila success there’s many type of different design and mounting style to choose from and of course the more fancy you want it the harder it gets (to model :P ) i used the bottom mount layout , it’s sort of a balanced options out of all the style . but hey what matters is personal preference do you like it thocky or creamy or clicky ? so choose what you want. either way i don’t really have much advice for this. much of it drawing sketch and basic math . it’s not hard and not easy, there’s definitely a learning curve and there will be a lot of failing before something stuck. fact btw when i was pushing to finish this keyboard for keeb i sat down for almost 6 hour and i felt like the ash baby afterwards (ps i didn’t make it). so trial and error buddy when you fall seven times, you stand up eight !!!"}, {"post_id": 77908, "ts": "2026-10-08T18:46:17Z", "hours": 10.4783, "text": "wassup Every Pony it’s me again with another devblog now the schematics is out the way, it’s time to move on to the actual PCB , this by far the longest process for me, you have take lots of things into consideration. when you first open the PCB editor , the first thing you do is import the parts you place in your schematics (there’s a button for that) then you would wanna go back to Keyboard layout editor to download the JSON File of your layout , then go back to kicad and open the plugin manager then download keyboard layout placer. you then go back to the pcb editor and open the plugin , there you will be able to insert your JSON file then the plugin will do the placing for you how cool is that ? there also an option to add more parts to be auto place. when you finish that you would need to draw out your pcb board edge with that we first select the edge cut layer then select whether the draw line tool or rectangles tool, left click and drag then voila you define your pcb borders. FOR RGB LED and HOT SWAP sockets you need to flip those to backside of the board for them to work. you also need the 5v trace to be thicker, how thick ? there’s a tool for that (PCB Trace width calculator) , a standard usb 3.0 output 0.9amps at 5v while usb 2.0 outputs 0.5 amps at 5v, check your usb port before deciding. now here comes the actual complicated part , routing it all together in a basic pcb you have two layer the front and back , so you have two layers to work with, you route wire by pressing x , to switch to the backside press v note v is also use to place vias vias are like channel that connect the front trace to back trace and it works the other way around. utilize them to the fullest extend . placing ground plane adding a ground plane is quick and easy press the draw filled zones ,select which layers have the most or both, set the net as GND and draw. a ground plane is like a filter of some sort, idk go google it. therefore adding one is good practice. DRC this is the most important thing you need to do everytime you finish making a change, the DRC checks for everything unconnected traces , shorted wires , parts clipping , silkscreen clipping. so i would advise you to run the drc everytime you finish a task, so you can fix the issue. customizing your board you can customize your board and add art using SVG and SIlkscreen. silkscreen is a non conductive layer use to add text and cool arts. woah now that’s a long read but there’s more What i did this past few day so this few days i just been doing CAD , the plate finish , i got the top case rough shape finish and i almost finish the bottom case just the usb-c port left. i went through three different design variations and eventually settle down for the design for the bottom case (in picture). i also model my own custom rotary encoder knob. i want to import a knurl design at first but then the model i import was too large and when i scale it down it won’t fit. either way we’re getting close to finishing the design phase."}, {"post_id": 76808, "ts": "2026-10-04T17:15:26Z", "hours": 3.0169, "text": "Hello every Pony im back again with more things to share. so now that you figure out what fancy features you want for your keyboard it’s time to make it come to fruition. you would need to first create your PCB first and to do that i use KICAD. the first step is to create your schematics first (it’s like instruction telling your component which wire goes where).In My schematics i use the PI PICO as my brain of my keyboard and i created a keyboard matrix based on the layout i want . so the Pi pico have a limited amount of GPIO pins if wire all our keyswitch to our pico we would need a dozen of pico and we don’t want that. so we create a keyboard matrix. i also added in a GPIO expansion chip mcp23017 to accommodate those other fancy feature i have.This stage is very crucial as any mistake make here will be a big headache when you wire your actual pcb. some tools that i found very useful: Keyboard layout editor.com, Marbastlib(KIcad plugin) so what i did today, i continue working on my keyboard cad files today, boy o boy is tiring , i have to manually place and align each keycap and it took a while bcs im such a perfectionist. anyway i decided to use a top mount layout for my keyboard so there will three layer a bottom case , the plate and the upper case. im so impatient , i want to finish this quickly !!! anyhow , everything i just said was oversimplified , remember to do your own research. until next time stay cool every pony"}, {"post_id": 75955, "ts": "2026-10-01T18:42:40Z", "hours": 0.6833, "text": "hey ya guys since i started project sometime ago i will tried to retell what i did and also include some ongoing process like what i did etc. so what do you do when you want to make a keyboard ? you do tons of research of course. keyboard format 60% 75% TKL etc features like knobs ,backlit and display Hot swappable ? or simply solder it on? all this have to be taken into consideration ultimately i choose to go with the 75% format ,with all kinds of fancy features(knobs,oled display,rgb backlit,hot swappable). below is an early sketch of what i want in my keyboard // so today i went back to the pcb and added more graphics cause why not , i got more time now"}, {"post_id": 75817, "ts": "2026-10-01T07:30:14Z", "hours": 40.2828, "text": "what’s up Guys alright so i may have been gone for a few days but now im back with a new project. RAINBOW DASH KEYBOARD yeah it was originally gonna be submitted to #keeb but i miss the deadline so im going to submit to Stardance instead. so currently i have Logged 40h 16min with lapse and i have finished designing the PCB and now currently designing the case for it. everything before this devblog will be in my github REPO ie timeline, pcb ,sch and case so definitely go through my repo. the features ; so this keyboard will have hot swappable backlit keyswitch with a rotary encoder, oled screen and a custom 3d case to go with it"}]...
|
Title: 20% Cooler KEYBOARD by @matthewwong12 | Sta Title: 20% Cooler KEYBOARD by @matthewwong12 | Stardance
Devlogs:
what’s up Guys alright so i may have been gone for a few days but now im back with a new project. RAINBOW DASH KEYBOARD yeah it was originally gonna be submitted to #keeb but i miss the deadline so im going to submit to Stardance instead. so currently i have Logged 40h 16min with lapse and i have finished designing the PCB and now currently designing the case for it. everything before this devblog will be in my github REPO ie timeline, pcb ,sch and case so definitely go through my repo. the features ; so this keyboard will have hot swappable backlit keyswitch with a rotary encoder, oled screen and a custom 3d case to go with it
hey ya guys since i started project sometime ago i will tried to retell what i did and also include some ongoing process like what i did etc. so what do you do when you want to make a keyboard ? you do tons of research of course. keyboard format 60% 75% TKL etc features like knobs ,backlit and display Hot swappable ? or simply solder it on? all this have to be taken into consideration ultimately i choose to go with the 75% format ,with all kinds of fancy features(knobs,oled display,rgb backlit,hot swappable). below is an early sketch of what i want in my keyboard // so today i went back to the pcb and added more graphics cause why not , i got more time now
Hello every Pony im back again with more things to share. so now that you figure out what fancy features you want for your keyboard it’s time to make it come to fruition. you would need to first create your PCB first and to do that i use KICAD. the first step is to create your schematics first (it’s like instruction telling your component which wire goes where).In My schematics i use the PI PICO as my brain of my keyboard and i created a keyboard matrix based on the layout i want . so the Pi pico have a limited amount of GPIO pins if wire all our keyswitch to our pico we would need a dozen of pico and we don’t want that. so we create a keyboard matrix. i also added in a GPIO expansion chip mcp23017 to accommodate those other fancy feature i have.This stage is very crucial as any mistake make here will be a big headache when you wire your actual pcb. some tools that i found very useful: Keyboard layout editor.com, Marbastlib(KIcad plugin) so what i did today, i continue working on my keyboard cad files today, boy o boy is tiring , i have to manually place and align each keycap and it took a while bcs im such a perfectionist. anyway i decided to use a top mount layout for my keyboard so there will three layer a bottom case , the plate and the upper case. im so impatient , i want to finish this quickly !!! anyhow , everything i just said was oversimplified , remember to do your own research. until next time stay cool every pony
wassup Every Pony it’s me again with another devblog now the schematics is out the way, it’s time to move on to the actual PCB , this by far the longest process for me, you have take lots of things into consideration. when you first open the PCB editor , the first thing you do is import the parts you place in your schematics (there’s a button for that) then you would wanna go back to Keyboard layout editor to download the JSON File of your layout , then go back to kicad and open the plugin manager then download keyboard layout placer. you then go back to the pcb editor and open the plugin , there you will be able to insert your JSON file then the plugin will do the placing for you how cool is that ? there also an option to add more parts to be auto place. when you finish that you would need to draw out your pcb board edge with that we first select the edge cut layer then select whether the draw line tool or rectangles tool, left click and drag then voila you define your pcb borders. FOR RGB LED and HOT SWAP sockets you need to flip those to backside of the board for them to work. you also need the 5v trace to be thicker, how thick ? there’s a tool for that (PCB Trace width calculator) , a standard usb 3.0 output 0.9amps at 5v while usb 2.0 outputs 0.5 amps at 5v, check your usb port before deciding. now here comes the actual complicated part , routing it all together in a basic pcb you have two layer the front and back , so you have two layers to work with, you route wire by pressing x , to switch to the backside press v note v is also use to place vias vias are like channel that connect the front trace to back trace and it works the other way around. utilize them to the fullest extend . placing ground plane adding a ground plane is quick and easy press the draw filled zones ,select which layers have the most or both, set the net as GND and draw. a ground plane is like a filter of some sort, idk go google it. therefore adding one is good practice. DRC this is the most important thing you need to do everytime you finish making a change, the DRC checks for everything unconnected traces , shorted wires , parts clipping , silkscreen clipping. so i would advise you to run the drc everytime you finish a task, so you can fix the issue. customizing your board you can customize your board and add art using SVG and SIlkscreen. silkscreen is a non conductive layer use to add text and cool arts. woah now that’s a long read but there’s more What i did this past few day so this few days i just been doing CAD , the plate finish , i got the top case rough shape finish and i almost finish the bottom case just the usb-c port left. i went through three different design variations and eventually settle down for the design for the bottom case (in picture). i also model my own custom rotary encoder knob. i want to import a knurl design at first but then the model i import was too large and when i scale it down it won’t fit. either way we’re getting close to finishing the design phase.
howdy pony ! this is it im done with my case this is it we’re done with the designing phase , things i did: changed the 3d model of the pi pico with a usb c cut out the upper case heatset insert hole cut out space for the screw head sticking out at the plate cut out the usb-c charger hole rounded the case edges oooo idk if u notice but there’s a big hole on top of pico and that’s there on purpose so i can add a clear acrylic plate there. oh yeah and the text there also have space below to insert some light dispersing material. tomorrow is repo day people im going go over yer tutorial now once you finish your pcb and it all checks out , now it’s time to create an enclosure for it . first export the stp file from kicad(there’s an option for you to export the silkscreen). then go to your software and import your stp file into your cad software.when i did this process i did encounter an issue where the stp file fail to translate(FUSION) so big L but there’s a work around. first i go to onshape and import and translate the file there. then we export the file that is just translated by onshape into fusion and voila success there’s many type of different design and mounting style to choose from and of course the more fancy you want it the harder it gets (to model :P ) i used the bottom mount layout , it’s sort of a balanced options out of all the style . but hey what matters is personal preference do you like it thocky or creamy or clicky ? so choose what you want. either way i don’t really have much advice for this. much of it drawing sketch and basic math . it’s not hard and not easy, there’s definitely a learning curve and there will be a lot of failing before something stuck. fact btw when i was pushing to finish this keyboard for keeb i sat down for almost 6 hour and i felt like the ash baby afterwards (ps i didn’t make it). so trial and error buddy when you fall seven times, you stand up eight !!!
what’s up Everypony this is the last devblog im posting before i ship my project for funding. during this time period , i made some finishing touches to the Case , prep it for production and i am just writing and updating my repo constantly. anyway i think i done with this project for now gotta work on my website fr fr it’s also exam season now for me, so there might be less frequent update enjoy this assembly animation i made :)...
|
1792705755.8393843
|
1793310555.8393843
|
|
58424
|
Geometry Web by @skornuta | Stardance
|
skornuta
|
0
|
63.79
|
0
|
[]
|
[{"post_id": 76552, "ts": "202 [{"post_id": 76552, "ts": "2026-10-03T22:24:08Z", "hours": 11.1511, "text": "I am working on bug fixes. Robot is finally complete, dual is ALMOST there, most levels are possible. I still need to fix the deadlocked wave, some weird block placements, audio glitches, and im pretty sure those are the last bugs. github link and demo are NOT out yet, as I need to figure out how to publish this without robtop suing me… We are getting close. Stay tuned."}, {"post_id": 73427, "ts": "2026-09-25T02:10:20Z", "hours": 9.5358, "text": "Devlog 3: physics and bugs I only worked on physics and bugs for the last 2 days since the last devlog. I’ve got recordings of the real game playing every level, so I replay the same inputs in my port and count every spot where the player ends up somewhere different. That number went from 333 → 30 . (its not perfect, but its getting close.) No more guessing numbers luckily, i got some real data. Fixed this time Force blocks, and the 3 other blocks. These were important, they shouldnt be rendered at all but they have a huge purpose. The 2.2 End trigger. the level ends at the correct place now. Rotate Gameplay speed hand-off, teleport gravity, linked teleports. (kinda works but i need to fix) Dash orbs, spider orbs, wave hitboxes, saw hitboxes. Ship/UFO getting pushed around by moving blocks (mainly for deadlocked. The bot beats all 22 levels but I cannot finish the levels. i might need to retrain the bot for it to not glitch through the maps wait i might get the bot to use actual game macros to test… ok Next fix robot as its terrible rn more physics stuff gamemodes dual is terrible right now fix the bot so it can really test optimizations bug hunting with my friends"}, {"post_id": 72478, "ts": "2026-09-23T01:23:03Z", "hours": 10.2392, "text": "a lot has been changed. We have finally figured out the ui, MOST gamemodes, most menus. i am working on the last assignments and planning to release THIS WEEK. stay tuned. its beginning to feel like the real thing. — sorry for this short devlog, next one will include all information. im trying to push out as much as i can."}, {"post_id": 65778, "ts": "2026-09-11T04:38:07Z", "hours": 10.1683, "text": "Devlog 2: Menus, Triggers, and Proper Animations Time spent since last devlog: ~10h 10m Total time logged: ~32h 53m The levels aren’t finished yet, but the game is finally starting to look and feel like actual Geometry Dash instead of a static test build. Visuals & Triggers The levels were way too stiff before. Adding authored trigger behavior makes everything move and pulse like the real game: Pulse & Color Triggers: Added live HSV shifts and over a thousand pulse triggers so backgrounds, objects, and channels flash to the beat properly. Movement & Easing: Implemented real easing curves (including overshooting) and move stacking so platforms follow the player smoothly instead of jittering. Rotate Triggers: Objects and hazards actually spin around pivot points instead of sitting frozen in place. Mirror Portals: The entire camera flips cleanly now without breaking the screen layout. (no animation for flip yet WILL BE ADDED NEXT) most of this works OKAY, but there are still lots of changes to be made. The UI Overhaul The game now boots into a real main menu. The setting, icon menu, pause menu, and win screen were rebuilt from scratch using original assets and binary-accurate layouts: Game Feel: Button press animations, proper hitboxes (almost), snappy sliders, and difficulty badges match the real thing (except for dash for some reason). Icon Menu: Swapped out the old sprite sheet for the individual 2.2 sheets. All 107 palette colors and hundreds of icons are loaded in and selectable. (not formatted well rn) HUD: Practice mode buttons, pause screens, and attempt counters scroll away naturally instead of cluttering the view. Next Up Finishing all levels bug testing optimizing everything more bug testing More devlogs coming soon"}, {"post_id": 61960, "ts": "2026-09-05T04:36:21Z", "hours": 22.6981, "text": "Devlog 1: I’m Porting Geometry Dash to the Web I have over 300 hours in GD and beat my first Extreme Demon a few weeks ago. Total time logged: ~22h 30m I forgot about devlogs even though I’ve been working on this for weeks. This is not a wrapper. No Unity, no Godot, no emulator, and none of the love.js stuff I used for my Balatro port. It’s vanilla TypeScript + WebGL2, reading the real level files directly out of my Steam copy and re-implementing GD’s physics, collision, gamemodes, triggers, and rendering entirely by hand. My plan for now is just to build the 22 classic main levels, the menus, and the icon kit. No editor, no online, and no platformer mode for now , though I do want to add custom levels later (possibly supporting .gmd imports via the Geode “GDShare” mod). What Works So Far Rendering: All 22 levels render somewhat correctly. Gamemodes: All 8 modes are implemented (Cube, Ship, Ball, UFO, Wave, Robot, Spider, Swing), though only 4 feel solid right now. Mechanics: Portals, orbs, pads, breakable blocks, and dual mode (barely working). Triggers: Color, Move, Alpha, Toggle, Spawn, and Shake. Features: Practice mode, checkpoints, secret coins, and save states. UI & Audio: Level select, icon kit, settings, music, SFX, and pause menu. VFX: Particles, screen shake, and death explosions. The Actual Hard Part Rendering was the easy part. Making it feel right is the entire project. While other GD web remakes exist, almost none of them nail the physics. I ended up disassembling the actual game binary with Claude to read the original physics values and logic directly. Next Up Finishing the last 3 levels Robot and Spider animations Proper easing on moving platforms Overhauling the main menu Deploying to a real domain so people can play it General bug fixes (there are a lot right now) More devlogs coming soon!"}]...
|
Title: Geometry Web by @skornuta | Stardance
Devl Title: Geometry Web by @skornuta | Stardance
Devlogs:
Devlog 1: I’m Porting Geometry Dash to the Web I have over 300 hours in GD and beat my first Extreme Demon a few weeks ago. Total time logged: ~22h 30m I forgot about devlogs even though I’ve been working on this for weeks. This is not a wrapper. No Unity, no Godot, no emulator, and none of the love.js stuff I used for my Balatro port. It’s vanilla TypeScript + WebGL2, reading the real level files directly out of my Steam copy and re-implementing GD’s physics, collision, gamemodes, triggers, and rendering entirely by hand. My plan for now is just to build the 22 classic main levels, the menus, and the icon kit. No editor, no online, and no platformer mode for now , though I do want to add custom levels later (possibly supporting .gmd imports via the Geode “GDShare” mod). What Works So Far Rendering: All 22 levels render somewhat correctly. Gamemodes: All 8 modes are implemented (Cube, Ship, Ball, UFO, Wave, Robot, Spider, Swing), though only 4 feel solid right now. Mechanics: Portals, orbs, pads, breakable blocks, and dual mode (barely working). Triggers: Color, Move, Alpha, Toggle, Spawn, and Shake. Features: Practice mode, checkpoints, secret coins, and save states. UI & Audio: Level select, icon kit, settings, music, SFX, and pause menu. VFX: Particles, screen shake, and death explosions. The Actual Hard Part Rendering was the easy part. Making it feel right is the entire project. While other GD web remakes exist, almost none of them nail the physics. I ended up disassembling the actual game binary with Claude to read the original physics values and logic directly. Next Up Finishing the last 3 levels Robot and Spider animations Proper easing on moving platforms Overhauling the main menu Deploying to a real domain so people can play it General bug fixes (there are a lot right now) More devlogs coming soon!
Devlog 2: Menus, Triggers, and Proper Animations Time spent since last devlog: ~10h 10m Total time logged: ~32h 53m The levels aren’t finished yet, but the game is finally starting to look and feel like actual Geometry Dash instead of a static test build. Visuals & Triggers The levels were way too stiff before. Adding authored trigger behavior makes everything move and pulse like the real game: Pulse & Color Triggers: Added live HSV shifts and over a thousand pulse triggers so backgrounds, objects, and channels flash to the beat properly. Movement & Easing: Implemented real easing curves (including overshooting) and move stacking so platforms follow the player smoothly instead of jittering. Rotate Triggers: Objects and hazards actually spin around pivot points instead of sitting frozen in place. Mirror Portals: The entire camera flips cleanly now without breaking the screen layout. (no animation for flip yet WILL BE ADDED NEXT) most of this works OKAY, but there are still lots of changes to be made. The UI Overhaul The game now boots into a real main menu. The setting, icon menu, pause menu, and win screen were rebuilt from scratch using original assets and binary-accurate layouts: Game Feel: Button press animations, proper hitboxes (almost), snappy sliders, and difficulty badges match the real thing (except for dash for some reason). Icon Menu: Swapped out the old sprite sheet for the individual 2.2 sheets. All 107 palette colors and hundreds of icons are loaded in and selectable. (not formatted well rn) HUD: Practice mode buttons, pause screens, and attempt counters scroll away naturally instead of cluttering the view. Next Up Finishing all levels bug testing optimizing everything more bug testing More devlogs coming soon
a lot has been changed. We have finally figured out the ui, MOST gamemodes, most menus. i am working on the last assignments and planning to release THIS WEEK. stay tuned. its beginning to feel like the real thing. — sorry for this short devlog, next one will include all information. im trying to push out as much as i can.
Devlog 3: physics and bugs I only worked on physics and bugs for the last 2 days since the last devlog. I’ve got recordings of the real game playing every level, so I replay the same inputs in my port and count every spot where the player ends up somewhere different. That number went from 333 → 30 . (its not perfect, but its getting close.) No more guessing numbers luckily, i got some real data. Fixed this time Force blocks, and the 3 other blocks. These were important, they shouldnt be rendered at all but they have a huge purpose. The 2.2 End trigger. the level ends at the correct place now. Rotate Gameplay speed hand-off, teleport gravity, linked teleports. (kinda works but i need to fix) Dash orbs, spider orbs, wave hitboxes, saw hitboxes. Ship/UFO getting pushed around by moving blocks (mainly for deadlocked. The bot beats all 22 levels but I cannot finish the levels. i might need to retrain the bot for it to not glitch through the maps wait i might get the bot to use actual game macros to test… ok Next fix robot as its terrible rn more physics stuff gamemodes dual is terrible right now fix the bot so it can really test optimizations bug hunting with my friends
I am working on bug fixes. Robot is finally complete, dual is ALMOST there, most levels are possible. I still need to fix the deadlocked wave, some weird block placements, audio glitches, and im pretty sure those are the last bugs. github link and demo are NOT out yet, as I need to figure out how to publish this without robtop suing me… We are getting close. Stay tuned....
|
1792749336.248374
|
1793354136.248374
|
|
40228
|
lstc by @static_noise | Stardance
|
static_noise
|
0
|
63.7
|
0
|
[]
|
[{"post_id": 74474, "ts": "202 [{"post_id": 74474, "ts": "2026-09-27T13:40:25Z", "hours": 4.2642, "text": "finished lexer YAY!!! so, lexer is done, one out of several parts of the compiler… used example for parsing: fn XD() -> none { return; } lexer works as intended, which is good, now I will have to write a parser for the lexer output, btw, I will not use AST, in my plans is to use 4 stages of IR to provide faster compiler speed (also, way less memory hungry because AST nodes are big, linear IR is slim), and, I will not use LLVM cuz of lack of control and always changing API"}, {"post_id": 73645, "ts": "2026-09-25T15:56:53Z", "hours": 25.3197, "text": "BRUH, I’m stuck on lexer, fking lexer, I have to do it, but somewhy I can’t, I need to finish it, I NEED TO FINISH IT, FINISH IT, also switched to nvim XD"}, {"post_id": 54034, "ts": "2026-08-24T19:48:51Z", "hours": 9.7186, "text": "fuck fuck fuck, I tried writing a lexer, this… piece of - code - doesn’t wanna work, gotta rewrite it (yes, I barely ever publish devblogs, this is why its near 10 hours)"}, {"post_id": 49865, "ts": "2026-08-18T20:19:28Z", "hours": 12.115, "text": "working on primitives, changed plans (now I won’t try to make the compiler super good from the start, just a carry to bootstrap) and so on"}, {"post_id": 37789, "ts": "2026-07-30T18:34:52Z", "hours": 2.5086, "text": "still stuck on asm, but finished more shit (I achieved independence from libc, still better than C++) overall cool, but should finish and pack up with the library and start lexer"}, {"post_id": 36956, "ts": "2026-07-29T11:30:11Z", "hours": 5.6811, "text": "went a bit crazy with primitives and asm (still working on them, but they’re starting to get shape, most still just stubs)"}, {"post_id": 36282, "ts": "2026-07-28T09:00:19Z", "hours": 1.5514, "text": "Tried to fix a bug, couldn’t, fuck C++, gonna try and rewrite everything in C (P.S. C++ is a pile of shitty compromises)"}, {"post_id": 35830, "ts": "2026-07-27T14:54:50Z", "hours": 2.1919, "text": "Added path expansion"}, {"post_id": 35315, "ts": "2026-07-26T17:12:29Z", "hours": 0.3506, "text": "starting project architecture and execution"}]...
|
Title: lstc by @static_noise | Stardance
Devlogs: Title: lstc by @static_noise | Stardance
Devlogs:
starting project architecture and execution
Added path expansion
Tried to fix a bug, couldn’t, fuck C++, gonna try and rewrite everything in C (P.S. C++ is a pile of shitty compromises)
went a bit crazy with primitives and asm (still working on them, but they’re starting to get shape, most still just stubs)
still stuck on asm, but finished more shit (I achieved independence from libc, still better than C++) overall cool, but should finish and pack up with the library and start lexer
working on primitives, changed plans (now I won’t try to make the compiler super good from the start, just a carry to bootstrap) and so on
fuck fuck fuck, I tried writing a lexer, this… piece of - code - doesn’t wanna work, gotta rewrite it (yes, I barely ever publish devblogs, this is why its near 10 hours)
BRUH, I’m stuck on lexer, fking lexer, I have to do it, but somewhy I can’t, I need to finish it, I NEED TO FINISH IT, FINISH IT, also switched to nvim XD
finished lexer YAY!!! so, lexer is done, one out of several parts of the compiler… used example for parsing: fn XD() -> none { return; } lexer works as intended, which is good, now I will have to write a parser for the lexer output, btw, I will not use AST, in my plans is to use 4 stages of IR to provide faster compiler speed (also, way less memory hungry because AST nodes are big, linear IR is slim), and, I will not use LLVM cuz of lack of control and always changing API...
|
1792684355.6723957
|
1793289155.6723957
|
|
43709
|
OpenVDE by @simplyrohan | Stardance
|
simplyrohan
|
0
|
63.69
|
0
|
[]
|
[{"post_id": 66393, "ts": "202 [{"post_id": 66393, "ts": "2026-09-12T06:23:42Z", "hours": 7.1575, "text": "Project Loader + Operation types Added the concept of a “Project” which is a collection of “Studios”. When you open the app you select a project directory and it will look at the files in it to load each Studio. This also unlocks persistent storage and multi-studio projects. One limitation is it relies on the Filesystem API which Firefox doesn’t support for security reasons. That is a bummer, but since the primary target for this app is anyways native it shouldn’t matter too much. I also implemented operation types for extrudes, including negative and intersection operations."}, {"post_id": 64537, "ts": "2026-09-09T00:59:14Z", "hours": 8.3597, "text": "Bidirectional Serialization I’ve been building up to this feature for a while but I finally got lossless and bidirectional conversion between the AST and UI representations. This means you can design something, pull up just the Python file on another device, and continue working seamlessly. This also means you can edit the code in real-time and see it immediately reflect in the UI and vice versa."}, {"post_id": 61917, "ts": "2026-09-05T02:46:53Z", "hours": 8.0708, "text": "Fillet feature and reparsable AST Completely forgot to log for a while but got a lot done. I wanted to add the fillet feature and in order to get there had to be able to select edges of the model. This was mostly just duplicating the same logic that I used for face selection. I basically just export the edge as it’s own poly-line in the .GLB file. Adding the fillet feature was pretty easy after this since the framework I made before makes it pretty simple. Then I added back the script view on the left to show a live preview of the code. Each feature exports python AST, which depending on the context can be run on Pyodide or be ran through a quick transformation to export. I’m currently working on making the script editable. Each feature and expression now has a fromAST method which gives an instance of that feature/expression based on the code. This gives a bi-directional and lossless conversion between the UI representation and code."}, {"post_id": 56465, "ts": "2026-08-28T07:32:19Z", "hours": 3.7097, "text": "More consistent dependency tracking and more! I generally cleaned up a lot of the jank from my rush to get an MVP working. Big thing is I actually have a somewhat working “timeline” now so each feature saves its output and it doesn’t get overwritten by the next one. Also added a new feature called “Script” which is sort of a back-up feature which allows you to inject arbitrary build123d code into the project and build off of it. This allowed me to remove the code editor along with the weird code to deal with manual code generation that wasn’t a feature. Overall, much less buggy experience and stuff working!"}, {"post_id": 55385, "ts": "2026-08-27T05:51:47Z", "hours": 7.2239, "text": "Working extrude! It works! I expanded a lot on the idea I had of Primitives and chunked the entire code-generation architecture into “Tools”, “Expressions”, “Primitives”, and “Bindings”. These all work with py-ast to generate an AST for Python and the AST get analyzed for dependencies (eg. the model its operating on, the face its extruding) and the deps are looked up in a “symbol table” which Pyodide then injects into the global namespace. All that to say, I can write features and have them operate on the model without rerunning the whole script and without duplicating a bunch of code. Here is an example of me selecting a face on the auto-generated key cap and extruding it 10mm. Since we can’t sketch yet, I need to auto-generate a model to be able to get faces in the scene."}, {"post_id": 50068, "ts": "2026-08-19T03:42:29Z", "hours": 6.5108, "text": "RPC with worker I started using Comlink to implement RPC with the worker. The idea was to be able to interact with PyProxies from the main thread through Comlink, but unfortunately since PyProxies are already proxies it makes the whole system incredibly weird. Instead, I started using a “registry” for PyProxies and referenced them with a string-type key in the main thread. This all needed a lot of refactoring and I also improved the types across the project. No new features have been added but I should be able to actually implement working features/tools now. P.S: Model regen is taking 200sec+ on my Mac which is very concerning, I need to look into it."}, {"post_id": 47352, "ts": "2026-08-15T07:35:03Z", "hours": 5.0864, "text": "Feature Menu I expanded on the feature templates, honestly went through 3 different iterations before settling on this one. This new one introduces dynamic fields, meaning sections can be shown or hidden based on the values of other fields. I also wrote a nicer interface for the menu, and got the a lot of different data-type inputs working. The nice thing about my custom schema-format for the fields is primitive inputs like numbers and check boxes are just as seamless as custom ones like face selectors. The next obvious step is making the feature actually work, which will require a small bit of refactoring. It would be really inefficient to recompute the entire script each time a feature is modified (especially if I want live updates while editing the feature) so I’d like to use Pyodide’s ability to interact with Python objects directly. Unfortunatly, the object responsible for that ( PyProxy ) is not serializable and can’t be shared between the worker and UI. The fix is setting up an RPC system and having all the features/tools live on the worker and the UI just uses comlink to call them."}, {"post_id": 45604, "ts": "2026-08-12T06:20:24Z", "hours": 4.6058, "text": "Feature Templates I want to start getting sketching and other features working and created a reusable object oriented way to make them. This forced me to learn a lot about TypeScript and I’m not even sure if I understand it now. But the end result is a Tool class that has a Zod schema defining the parameter types for the tool’s callback function. The function is automatically typed based on the schema, as well as a defaults object. This was crazy complicated because I had to juggle generic types, static vs instance properties, and a bunch of other weird typing stuff. There’s not much to show here but now when I click a feature a pop-up shows the parameter names and types. Next I’ll write a UI “generator” which has inputs for the parameter, even custom types like faces/planes."}, {"post_id": 44398, "ts": "2026-08-10T03:35:44Z", "hours": 2.7219, "text": "Face Selection I was going to start working on sketching and other features but realized I needed to be able to select faces first. Three.js does have a Raycaster to select objects in the scene but it returns the whole object or triangles since it has no knowledge of the B-REP model (which stores the actual faces we want rather than triangle approximations ) after exporting it. The solution was replacing build123d’s builtin export for a more manual process. I used the trimesh library to manually add each face of the model as it’s own mesh and exporting them all together as a scene. Three.js load’s the whole scene as a Group which is practically identical to a normal mesh in code. Now when the Raycaster returns a Mesh, it’s actually a face."}, {"post_id": 41797, "ts": "2026-08-06T06:47:20Z", "hours": 2.9908, "text": "GLB Optimizations and Improved Toolbar I got the regenerate+re-render times down to about 800ms. The biggest part was actually just letting the browser’s JIT compile the hot parts so that subsequent regens would run way faster. It only takes 1 eval to get there, although that one eval is about 15 seconds. After that its super fast. Another thing I did was switch to the GLB file format for transfering mesh data between build123d and three.js. GLB is very compact and encodes+decodes super fast. This took the encode + parse time from 3 seconds to about 100ms. I’d really like to be able to cache the “JIT”ed WASM between page loads and apparently the browser should do this already but it’s clearly not. I also worked on the toolbar and used Bits UI to get a really nice search function with the features. I want to have a nice reusable interface for defining features with an automatic UI builder which would also make an equivalent to OnShape’s FeatureScripts super easy to implement (literally just a build123d generator with some UI bindings)."}, {"post_id": 40561, "ts": "2026-08-04T06:09:59Z", "hours": 7.2558, "text": "The Idea OpenVDE (need a better name) is on the surface a standard CAD software to design parts and assemblies. I was frustrated with existing solutions like OnShape because it’s completely cloud-based (you will own nothing and be happy), and only runs in the browser which often lags a lot with WebGL and both of these mean offline use is impossible. However, these together do give the convenience of seamless collaboration. On the other hand, apps like Fusion360 (and I’m assuming SolidWorks although I’ve never used it) do run locally but run like garbage because they’re from the 20th century (I’m not even kidding) and will crash unless you make a sacrifice to Andrew Anagnost himself. As a side effect of running locally, the collaboration features are lacking and don’t work well with modern workflows. OpenVDE My solution is CodeCAD, which is an approach to designing parts using code to call a CAD kernel in order to generate parts. OpenVDE is a generator for build123d Python scripts. You use it just like any other CAD software but it saves to a Git repository (or whatever you want to use) which allows for advanced version control and collaboration (eg. live editing of the same file). Storing designs as text also unlocks true parametric design and can be used to also write generators for parts using the logic flows programming languages provide. I want this app to be an cross-platform and not look like crap, so I decided to go with a Tauri app with a Svelte front-end. A big feature of OpenVDE is the hybrid RPC CAD kernel, which is just jargon for you can run the heavy CAD operations natively, in WASM, in a cloud server, or on your own self-hosted server. This works because at it’s core OpenVDE just generates Python code and it can either be run through Pyodide in WASM, Py03 for native via Rust, or by calling a server. Progress I setup the project with some basic styles, Three.js, and Pyodide. Huge thanks to this project which provides the WASM compiled wheels for build123d (although I’m pretty sure the project is vibe coded). After getting that all setup plus IndexedDB caching of the packages and an async Web Worker to free the main thread, I got a bare-minimum example of a build123d sandbox in the browser. I’ll try optimizing it, but the WASM version is running extremely slowly right now (15sec+ to generate this simple part)."}]...
|
Title: OpenVDE by @simplyrohan | Stardance
Devlog Title: OpenVDE by @simplyrohan | Stardance
Devlogs:
The Idea OpenVDE (need a better name) is on the surface a standard CAD software to design parts and assemblies. I was frustrated with existing solutions like OnShape because it’s completely cloud-based (you will own nothing and be happy), and only runs in the browser which often lags a lot with WebGL and both of these mean offline use is impossible. However, these together do give the convenience of seamless collaboration. On the other hand, apps like Fusion360 (and I’m assuming SolidWorks although I’ve never used it) do run locally but run like garbage because they’re from the 20th century (I’m not even kidding) and will crash unless you make a sacrifice to Andrew Anagnost himself. As a side effect of running locally, the collaboration features are lacking and don’t work well with modern workflows. OpenVDE My solution is CodeCAD, which is an approach to designing parts using code to call a CAD kernel in order to generate parts. OpenVDE is a generator for build123d Python scripts. You use it just like any other CAD software but it saves to a Git repository (or whatever you want to use) which allows for advanced version control and collaboration (eg. live editing of the same file). Storing designs as text also unlocks true parametric design and can be used to also write generators for parts using the logic flows programming languages provide. I want this app to be an cross-platform and not look like crap, so I decided to go with a Tauri app with a Svelte front-end. A big feature of OpenVDE is the hybrid RPC CAD kernel, which is just jargon for you can run the heavy CAD operations natively, in WASM, in a cloud server, or on your own self-hosted server. This works because at it’s core OpenVDE just generates Python code and it can either be run through Pyodide in WASM, Py03 for native via Rust, or by calling a server. Progress I setup the project with some basic styles, Three.js, and Pyodide. Huge thanks to this project which provides the WASM compiled wheels for build123d (although I’m pretty sure the project is vibe coded). After getting that all setup plus IndexedDB caching of the packages and an async Web Worker to free the main thread, I got a bare-minimum example of a build123d sandbox in the browser. I’ll try optimizing it, but the WASM version is running extremely slowly right now (15sec+ to generate this simple part).
GLB Optimizations and Improved Toolbar I got the regenerate+re-render times down to about 800ms. The biggest part was actually just letting the browser’s JIT compile the hot parts so that subsequent regens would run way faster. It only takes 1 eval to get there, although that one eval is about 15 seconds. After that its super fast. Another thing I did was switch to the GLB file format for transfering mesh data between build123d and three.js. GLB is very compact and encodes+decodes super fast. This took the encode + parse time from 3 seconds to about 100ms. I’d really like to be able to cache the “JIT”ed WASM between page loads and apparently the browser should do this already but it’s clearly not. I also worked on the toolbar and used Bits UI to get a really nice search function with the features. I want to have a nice reusable interface for defining features with an automatic UI builder which would also make an equivalent to OnShape’s FeatureScripts super easy to implement (literally just a build123d generator with some UI bindings).
Face Selection I was going to start working on sketching and other features but realized I needed to be able to select faces first. Three.js does have a Raycaster to select objects in the scene but it returns the whole object or triangles since it has no knowledge of the B-REP model (which stores the actual faces we want rather than triangle approximations ) after exporting it. The solution was replacing build123d’s builtin export for a more manual process. I used the trimesh library to manually add each face of the model as it’s own mesh and exporting them all together as a scene. Three.js load’s the whole scene as a Group which is practically identical to a normal mesh in code. Now when the Raycaster returns a Mesh, it’s actually a face.
Feature Templates I want to start getting sketching and other features working and created a reusable object oriented way to make them. This forced me to learn a lot about TypeScript and I’m not even sure if I understand it now. But the end result is a Tool class that has a Zod schema defining the parameter types for the tool’s callback function. The function is automatically typed based on the schema, as well as a defaults object. This was crazy complicated because I had to juggle generic types, static vs instance properties, and a bunch of other weird typing stuff. There’s not much to show here but now when I click a feature a pop-up shows the parameter names and types. Next I’ll write a UI “generator” which has inputs for the parameter, even custom types like faces/planes.
Feature Menu I expanded on the feature templates, honestly went through 3 different iterations before settling on this one. This new one introduces dynamic fields, meaning sections can be shown or hidden based on the values of other fields. I also wrote a nicer interface for the menu, and got the a lot of different data-type inputs working. The nice thing about my custom schema-format for the fields is primitive inputs like numbers and check boxes are just as seamless as custom ones like face selectors. The next obvious step is making the feature actually work, which will require a small bit of refactoring. It would be really inefficient to recompute the entire script each time a feature is modified (especially if I want live updates while editing the feature) so I’d like to use Pyodide’s ability to interact with Python objects directly. Unfortunatly, the object responsible for that ( PyProxy ) is not serializable and can’t be shared between the worker and UI. The fix is setting up an RPC system and having all the features/tools live on the worker and the UI just uses comlink to call them.
RPC with worker I started using Comlink to implement RPC with the worker. The idea was to be able to interact with PyProxies from the main thread through Comlink, but unfortunately since PyProxies are already proxies it makes the whole system incredibly weird. Instead, I started using a “registry” for PyProxies and referenced them with a string-type key in the main thread. This all needed a lot of refactoring and I also improved the types across the project. No new features have been added but I should be able to actually implement working features/tools now. P.S: Model regen is taking 200sec+ on my Mac which is very concerning, I need to look into it.
Working extrude! It works! I expanded a lot on the idea I had of Primitives and chunked the entire code-generation architecture into “Tools”, “Expressions”, “Primitives”, and “Bindings”. These all work with py-ast to generate an AST for Python and the AST get analyzed for dependencies (eg. the model its operating on, the face its extruding) and the deps are looked up in a “symbol table” which Pyodide then injects into the global namespace. All that to say, I can write features and have them operate on the model without rerunning the whole script and without duplicating a bunch of code. Here is an example of me selecting a face on the auto-generated key cap and extruding it 10mm. Since we can’t sketch yet, I need to auto-generate a model to be able to get faces in the scene.
More consistent dependency tracking and more! I generally cleaned up a lot of the jank from my rush to get an MVP working. Big thing is I actually have a somewhat working “timeline” now so each feature saves its output and it doesn’t get overwritten by the next one. Also added a new feature called “Script” which is sort of a back-up feature which allows you to inject arbitrary build123d code into the project and build off of it. This allowed me to remove the code editor along with the weird code to deal with manual code generation that wasn’t a feature. Overall, much less buggy experience and stuff working!
Fillet feature and reparsable AST Completely forgot to log for a while but got a lot done. I wanted to add the fillet feature and in order to get there had to be able to select edges of the model. This was mostly just duplicating the same logic that I used for face selection. I basically just export the edge as it’s own poly-line in the .GLB file. Adding the fillet feature was pretty easy after this since the framework I made before makes it pretty simple. Then I added back the script view on the left to show a live preview of the code. Each feature exports python AST, which depending on the context can be run on Pyodide or be ran through a quick transformation to export. I’m currently working on making the script editable. Each feature and expression now has a fromAST method which gives an instance of that feature/expression based on the code. This gives a bi-directional and lossless conversion between the UI representation and code.
Bidirectional Serialization I’ve been building up to this feature for a while but I finally got lossless and bidirectional conversion between the AST and UI representations. This means you can design something, pull up just the Python file on another device, and continue working seamlessly. This also means you can edit the code in real-time and see it immediately reflect in the UI and vice versa.
Project Loader + Operation types Added the concept of a “Project” which is a collection of “Studios”. When you open the app you select a project directory and it will look at the files in it to load each Studio. This also unlocks persistent storage and multi-studio projects. One limitation is it relies on the Filesystem API which Firefox doesn’t support for security reasons. That is a bummer, but since the primary target for this app is anyways native it shouldn’t matter too much. I also implemented operation types for extrudes, including negative and intersection operations....
|
1792558291.108209
|
1793163091.108209
|
|
43031
|
4-paw-robot-intelligent by @yayabskt | Stardance
|
yayabskt
|
0
|
63.64
|
0
|
[]
|
[{"post_id": 71667, "ts": "202 [{"post_id": 71667, "ts": "2026-09-21T08:32:38Z", "hours": 4.9803, "text": "heyyyy i just devlog the hours i pass making the pcb and the extension issuer i encounter —————————————————————————————— for the pcb i only make the secon layer as the other part of the robot are moving or a pcb couldn’t usefull i’m happy to do this pcb as it was my first time making one and that something i always wanted to learn!!!! anyways during this 4 hour just optimization pcb and documentation screaching to get footprint (thank to that one hackclub guys that help me to found one i struggle on)"}, {"post_id": 47604, "ts": "2026-08-15T16:37:48Z", "hours": 10.5125, "text": "THE CODE IS APPROCHING THE END!!! ============DEV LOG STARDANCE #06 ============================================================ let’s start by the change ! YES every time i make a dev log the project took a new way TT BUT recently i add a logical thing that i don’t even think about it was! the vocal talk as i said the new step was the vocal reconnition (I DID IT) but i forgot to think about the vocal response to so now i end but using gemini ia api when the robot is on wifi and when he went offline he got an LLM that is ~3gb big to handle some litle dicussion with that i also make a litlte vocal order like “go forward” etc… and then i think about the web site the will be the command center ! i stat by making a screen with the lidar map and you can now put a ping on the map and the robot will go to this point (with nav2 use) and i also add the camera follow people thing that now when you choose the follow state your device will show the robot pov and you can choose who you want to track ==== after that a use the litle sg90 motor in the head to make the follow efficient as if the person move fast the camera will turn (max 30° each for each left or right so 60 °) to keep tracking ! == rencently i and the control panel if you choose the manual state where there is joystick for camera and body mouvement == now i’m working on the stabilit sensor (accelerometer) to handle my robot to adapt a minimum to the ground ….. but i’ve got a lot of problem since the launch of the project these are problem about geometry i know geometry is the BASIC but i work a lot on and still have problem to memories COS SIN AND TAN so for that claude ia help me sometimes i ask him to make a schema showing COS SIN TAN that help me choose what to use in the robot and for the stability i need… TAN! depending on the “SPITCH”(incline) of the robot ! yes ia help me… as i’m not a big hardware pro it like my second project to claude help me a lot about ROS/NODE/ROUTE/FLASK/ AND VOSK it just explain me how it work and help me to found the right documentation in the end that me who make the program but the logic how container/linux/node/threading discuss he help me a lot like a professor TT sorry for the big length of the text if you want more redable go to the github i use markdown it’s quite better because i strugle in stardance with markdown (i’m sixteen and a boomer TT) have great day thank to read all of that"}, {"post_id": 45898, "ts": "2026-08-12T17:23:26Z", "hours": 17.7389, "text": "HEYYYY dev log #4 i still don’t know how to make my text clear with the markdown in stardance so don’t hesitate to check on my github je journal.md file ========================================================= these recent day i work A LOT ON 3D model and ARTISTIC PATH as i pass a long time doing THE ANIMATION for the face of my robot (turtle) :) i bring back animation i’ve made from and old project “1st keychain” but i had some frames (~140) to match the different state of my robot: MANUAL / FOLLOW / NAVIGATE / STATIC so i’ve been making a turlte face for the follow and maybe the navigate state and the other is juste some cute eyes i’ve made AND i also prepare for the vocal talk so he got Y/N animation ============================================================ then work on the 3D! ( i love 3d but with the time it get hard to keep going as my pc is always crashing and sometimes loosing progression :( the white screen is now a fear ) negativity aside !! i have place the LIDAR (finaly!) and make a hole on the turtle i can not find another way so unfortunatly we got a cylinder in the top that pop up i also think about litle thing like the paw cable that will goes under the last chasis platform so i let a place to allow the cable to pass. now i just start the paw because the remaining thing to do is only the microphone and the paw as they were ready but visualy they weren’t like i wanted to ( my pc crash over 5 time to import 1 texture :/ (like we say in France “relou / chiantos”) =========================================================== i cary on ! i want so much my project to see real life before school/ sport competition/ job (every week + litle vaction ) start again!!! the NEXT STEP ARE : 3D PAW / MICROPHONE 3D / end the big part of code /and send everything!!!! ================================================================================================================================ unfortunatly i pass 10h recording but as i crash so many time the record stop :| so here’s only 10 hours instead of 20h ========================================================================================= so to complete like a second dev log : # DEV LOG STARDANCE #5 today i FINISH the fusion 3d design it was rought and hard as a total beginnier but i guess it was worth it !!! my turtle is finally complete (i just need to delete old garbage try on the file) to came here today i place the lidar and the microphone but when i finish and put the visual chasis i notice some logical gap that were obstucted so i fix it and not in purpose delete the main visual thing… so i pass an hour remake it and a long time to screach if i could found an old save but there were to old to allow me to come that back in the past. so i’m really poud of this 3D model MY FIRST ONE on fusion and REALLY THIS DETAIL i even show it to my friend TT. with this good ending it hope you passing a good day !! ––––––– next step : finish the CODE ++++++++++++++++++++++++++++++++++++++++ Update the time did COUNT but…. only 10h will be log because the last dev log didn’t work"}, {"post_id": 43946, "ts": "2026-08-09T12:16:58Z", "hours": 11.2503, "text": "today i work a lot on the lidar !!! i inplement the mapping file!!! for this time claude ai help me a lot because i doesn’t know any thing on linux and “containers” thing so because i wanted to use some librairy so claude guide me thought “DOCKER” and NAV2 (navigation thought map ) SLAM (mapping with lidar) ODOMETY ( to make the map and calculatd where i am) so it was a llot of neww thing for me like ROS2 (Node pakage) ============================================================ i also learn how to make my robot connected to wifi !!! as with emmc and radxa pcb if i connect one in a wifi it will be save so i just have to make like our phone every time i came somewhere i connect by changing before.txt file 1 time per places!! =========================================================== to end with that i also pass 5 long hour by making the wire design in my 3d model on fusion but my pc is litteraly a potatoes so i crash over 15 times and got to reopen fusion360 over 7 time and every time i lost a bit of progress even if i save sometimes! finnaly i have nearly complete the head (nearly because it left me the microphone to connect) wire design !!! =========================================================== P.S every times i want to ia to explain me i don’t record it evry time as for me it doesn’t really count it’s like watching youtube just with text and specialize for my project. —— the next STEP are finishing the 3D part by implementing the microphone/lidar/ motor cable/and redesign the paw to make them quite like a turtle! for the code the next step are the ia API and LLM depending if the robot is on wifi or not and the camera tracking/ the face animation/ emote( if i can) / the connection to a litle device if i want to control it manualy or give him location to go / the Speach to Text and be able to get order thought vocal reconizing and maybe some day the ability to get over litle obstacle by climbing litle stairs"}, {"post_id": 41953, "ts": "2026-08-06T14:11:49Z", "hours": 7.8075, "text": "heyyy dev log stardance #02 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––========================================================== today i still work on the turtle look and learning texture in fusion it took me a while understnding how to implement texture in fusion but i finally turn to a website call bump mesh i wasn’t aware about this one so before knowing i pass a long time screaching in all fusion parameter !! I end the 7h hour by having a full designed chasis it just left me to implemant the hole to put the lidar of the robot on the top next improvement code the lidar (i’ve already start) implemant the lidar on 3D and end the wire schema code the (camera object reconnizing) code the emote (if i succes)* code an vocal reconizing and talking conneted to a device to control him that all for today thank for reading remember if you want to check the github journal"}, {"post_id": 40733, "ts": "2026-08-04T13:28:08Z", "hours": 11.3544, "text": "DEV LOG stardance #1!!!! –––––––––––––––––––––––––––––––––––––––––––––––heyyy i’m starting this project as i was already documenting on git hub as i start the project serveral week agi and the hardware wasn’t already functioning so these 2 last days i was thinking about the fact that i wanted my robot to be able to move to a certain point so i remplace the distance sensor for a lidar in all the schema and i also start to make the visual chasis of the robot it will be a TURTLE after thinking about making bt7274 or a cat i finaly choos a turtle look!!"}]...
|
Title: 4-paw-robot-intelligent by @yayabskt | Star Title: 4-paw-robot-intelligent by @yayabskt | Stardance
Devlogs:
DEV LOG stardance #1!!!! –––––––––––––––––––––––––––––––––––––––––––––––heyyy i’m starting this project as i was already documenting on git hub as i start the project serveral week agi and the hardware wasn’t already functioning so these 2 last days i was thinking about the fact that i wanted my robot to be able to move to a certain point so i remplace the distance sensor for a lidar in all the schema and i also start to make the visual chasis of the robot it will be a TURTLE after thinking about making bt7274 or a cat i finaly choos a turtle look!!
heyyy dev log stardance #02 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––========================================================== today i still work on the turtle look and learning texture in fusion it took me a while understnding how to implement texture in fusion but i finally turn to a website call bump mesh i wasn’t aware about this one so before knowing i pass a long time screaching in all fusion parameter !! I end the 7h hour by having a full designed chasis it just left me to implemant the hole to put the lidar of the robot on the top next improvement code the lidar (i’ve already start) implemant the lidar on 3D and end the wire schema code the (camera object reconnizing) code the emote (if i succes)* code an vocal reconizing and talking conneted to a device to control him that all for today thank for reading remember if you want to check the github journal
today i work a lot on the lidar !!! i inplement the mapping file!!! for this time claude ai help me a lot because i doesn’t know any thing on linux and “containers” thing so because i wanted to use some librairy so claude guide me thought “DOCKER” and NAV2 (navigation thought map ) SLAM (mapping with lidar) ODOMETY ( to make the map and calculatd where i am) so it was a llot of neww thing for me like ROS2 (Node pakage) ============================================================ i also learn how to make my robot connected to wifi !!! as with emmc and radxa pcb if i connect one in a wifi it will be save so i just have to make like our phone every time i came somewhere i connect by changing before.txt file 1 time per places!! =========================================================== to end with that i also pass 5 long hour by making the wire design in my 3d model on fusion but my pc is litteraly a potatoes so i crash over 15 times and got to reopen fusion360 over 7 time and every time i lost a bit of progress even if i save sometimes! finnaly i have nearly complete the head (nearly because it left me the microphone to connect) wire design !!! =========================================================== P.S every times i want to ia to explain me i don’t record it evry time as for me it doesn’t really count it’s like watching youtube just with text and specialize for my project. —— the next STEP are finishing the 3D part by implementing the microphone/lidar/ motor cable/and redesign the paw to make them quite like a turtle! for the code the next step are the ia API and LLM depending if the robot is on wifi or not and the camera tracking/ the face animation/ emote( if i can) / the connection to a litle device if i want to control it manualy or give him location to go / the Speach to Text and be able to get order thought vocal reconizing and maybe some day the ability to get over litle obstacle by climbing litle stairs
HEYYYY dev log #4 i still don’t know how to make my text clear with the markdown in stardance so don’t hesitate to check on my github je journal.md file ========================================================= these recent day i work A LOT ON 3D model and ARTISTIC PATH as i pass a long time doing THE ANIMATION for the face of my robot (turtle) :) i bring back animation i’ve made from and old project “1st keychain” but i had some frames (~140) to match the different state of my robot: MANUAL / FOLLOW / NAVIGATE / STATIC so i’ve been making a turlte face for the follow and maybe the navigate state and the other is juste some cute eyes i’ve made AND i also prepare for the vocal talk so he got Y/N animation ============================================================ then work on the 3D! ( i love 3d but with the time it get hard to keep going as my pc is always crashing and sometimes loosing progression :( the white screen is now a fear ) negativity aside !! i have place the LIDAR (finaly!) and make a hole on the turtle i can not find another way so unfortunatly we got a cylinder in the top that pop up i also think about litle thing like the paw cable that will goes under the last chasis platform so i let a place to allow the cable to pass. now i just start the paw because the remaining thing to do is only the microphone and the paw as they were ready but visualy they weren’t like i wanted to ( my pc crash over 5 time to import 1 texture :/ (like we say in France “relou / chiantos”) =========================================================== i cary on ! i want so much my project to see real life before school/ sport competition/ job (every week + litle vaction ) start again!!! the NEXT STEP ARE : 3D PAW / MICROPHONE 3D / end the big part of code /and send everything!!!! ================================================================================================================================ unfortunatly i pass 10h recording but as i crash so many time the record stop :| so here’s only 10 hours instead of 20h ========================================================================================= so to complete like a second dev log : # DEV LOG STARDANCE #5 today i FINISH the fusion 3d design it was rought and hard as a total beginnier but i guess it was worth it !!! my turtle is finally complete (i just need to delete old garbage try on the file) to came here today i place the lidar and the microphone but when i finish and put the visual chasis i notice some logical gap that were obstucted so i fix it and not in purpose delete the main visual thing… so i pass an hour remake it and a long time to screach if i could found an old save but there were to old to allow me to come that back in the past. so i’m really poud of this 3D model MY FIRST ONE on fusion and REALLY THIS DETAIL i even show it to my friend TT. with this good ending it hope you passing a good day !! ––––––– next step : finish the CODE ++++++++++++++++++++++++++++++++++++++++ Update the time did COUNT but…. only 10h will be log because the last dev log didn’t work
THE CODE IS APPROCHING THE END!!! ============DEV LOG STARDANCE #06 ============================================================ let’s start by the change ! YES every time i make a dev log the project took a new way TT BUT recently i add a logical thing that i don’t even think about it was! the vocal talk as i said the new step was the vocal reconnition (I DID IT) but i forgot to think about the vocal response to so now i end but using gemini ia api when the robot is on wifi and when he went offline he got an LLM that is ~3gb big to handle some litle dicussion with that i also make a litlte vocal order like “go forward” etc… and then i think about the web site the will be the command center ! i stat by making a screen with the lidar map and you can now put a ping on the map and the robot will go to this point (with nav2 use) and i also add the camera follow people thing that now when you choose the follow state your device will show the robot pov and you can choose who you want to track ==== after that a use the litle sg90 motor in the head to make the follow efficient as if the person move fast the camera will turn (max 30° each for each left or right so 60 °) to keep tracking ! == rencently i and the control panel if you choose the manual state where there is joystick for camera and body mouvement == now i’m working on the stabilit sensor (accelerometer) to handle my robot to adapt a minimum to the ground ….. but i’ve got a lot of problem since the launch of the project these are problem about geometry i know geometry is the BASIC but i work a lot on and still have problem to memories COS SIN AND TAN so for that claude ia help me sometimes i ask him to make a schema showing COS SIN TAN that help me choose what to use in the robot and for the stability i need… TAN! depending on the “SPITCH”(incline) of the robot ! yes ia help me… as i’m not a big hardware pro it like my second project to claude help me a lot about ROS/NODE/ROUTE/FLASK/ AND VOSK it just explain me how it work and help me to found the right documentation in the end that me who make the program but the logic how container/linux/node/threading discuss he help me a lot like a professor TT sorry for the big length of the text if you want more redable go to the github i use markdown it’s quite better because i strugle in stardance with markdown (i’m sixteen and a boomer TT) have great day thank to read all of that
heyyyy i just devlog the hours i pass making the pcb and the extension issuer i encounter —————————————————————————————— for the pcb i only make the secon layer as the other part of the robot are moving or a pcb couldn’t usefull i’m happy to do this pcb as it was my first time making one and that something i always wanted to learn!!!! anyways during this 4 hour just optimization pcb and documentation screaching to get footprint (thank to that one hackclub guys that help me to found one i struggle on)...
|
1792532943.0369403
|
1793137743.0369403
|
|
15356
|
The Anypad by @Shreyansh | Stardance
|
Shreyansh
|
0
|
63.49
|
0
|
[]
|
[{"post_id": 34180, "ts": "202 [{"post_id": 34180, "ts": "2026-07-24T18:21:49Z", "hours": 3.9003, "text": "Devlog 8: I FINISHED IT! After 2 consecutive lies and extensions to you all I finally finished What Happened? I basically wrapped everything up and completed the form, I also made a ship post in #hackpad-ships channel. I also applied for outpost funding to complete my build. Next? All I have to do is wait for approval then order my parts and then build. If everything is right my build should be done by mid of August or end of august. P.S. If you like the Anypad you should check out The Rover X"}, {"post_id": 33827, "ts": "2026-07-24T02:09:49Z", "hours": 9.9383, "text": "Devlog #7: I am still not done but am very very close! Pixels pixels and compiling… This time I learned from my mistake and didnt wait till the 9 hour warning to devlog. I finally for real finished my code compiled it, I exported my pcb into the Gerber files which are basically just instructions that the pcb printer understands. And I also finished up my animation it looks pretty sick (Pixel art is kinda cool but it takes for ever). I also extra polished my readme and folder organization What I did in detail Thats basically everything I did (not much) Next steps? 1. Finish animation 2. Check Code 3. Check everything < Yup im about right here :) 4. Post a ship in slack and get peer review 5. Finally Ship The Anypad and hope it gets passed first try. — Iterate if required 6. Collect all parts 7. Assemble! 8. Review 9. Use! This weeks goal is to like ship in like the next 2 days Well that was wrong to assume. But for real I will definitley try to finish tommorow. Trust! Thank you! For anyone who has read this far. If you have any suggestions please feel free to comment Ik I say this everytime. But sadly no one sees or comments on my post, Im sad :("}, {"post_id": 32563, "ts": "2026-07-21T20:28:41Z", "hours": 13.3608, "text": "Devlog #6: I Guess I still have a bit more to go! I just spent 13 hours without a devlog and just realized that 3 of them won’t count. :( But anyways Im pretty much done with the firmware now and currently I am polishing up a Boot up Animation on the oled screen of the anypad What I did in detail I figured out how QMK works and then I created a new keyboard and edited some stuff, crashed out, handed over some stuff to gemini, finally understood how c and json files work. Then over the last couple days learned cool functions the micro controller can do. And then I added those to the code. So I am quite sure the code now works, I’ll check it once again. And then I thought of why no make like a cool start up animation. So I asked gemini if QMK allows that and turns out it does. So attached below is a short clip of the first draft of my boot up animation. I am thinking of adding like a series of intros where it displays anypad. And then a quick intro of hack club and says By Shreyansh Next steps? Finish animation Check Code Check everything Post a ship in slack and get peer review Finally Ship The Anypad and hope it gets passed first try. — Iterate if required Collect all parts Assemble! Review Use! My goal is to be done with first 5 steps by next devlog Scratch that, That was last weeks goal This weeks goal is to like ship in like the next 2 days Thank you! For anyone who has read this far. If you have any suggestions please feel free to comment"}, {"post_id": 28901, "ts": "2026-07-15T14:37:43Z", "hours": 10.0025, "text": "Devlog #5: Final Stretch Remaining! Over these 9-10 hours I have finally finished my entire hardware section of The Anypad. And now im gonna dive into the final software before arranging everything to be shipped. What I was doing? What took me so long? I found out why I couldn’t export my pcb from kicad. What happened was that fusion kept opening the old file because the name was in its quick cache. And so I fixed fusion’s cache and then exported it and placed it perfectly and it felt like everything is where it’s supposed to go…. But thats what I thought But… Later after I added the key caps I realized… I had messed up the positioning of the keycap holes on the top cover. And it was something that took a bit of a long time to fix. If I didnt fix it the keycap wouldn’t go all the way down and it would scrape the case. Next steps? Start and finish firmware Debug firmware Verify all designs and stamp final date on everything Wrap all files in nice GitHub repo with an appealing readme Finally Ship The Anypad and hope it gets passed first try. — Iterate if required Collect all parts Assemble! Review Use! My goal is to be done with first 5 steps by next devlog Thank you! For anyone who has read this far. If anyone has any suggestions please feel free to comment"}, {"post_id": 23796, "ts": "2026-07-06T23:07:03Z", "hours": 7.0344, "text": "Develog 4 Rough terrain but not too bad Honestly I am starting to get the hang of hardware. The Anypad v1 is coming together. I finalized the pcb layout, footprints, 3d models etc. I exported the exact layout of the pcb from kicad and made a plate out of it. After the plate I finished the top part of the case. What I have Left? bringing the actual 3d pcb file and putting it in my case to see if everything fits together Cool top design A good color scheme Branding Check all the measurements and layouts firmware Check absoulutley everything again Ship Wait for approval or fix stuff Assemble and enjoy! If any of you have any tips, tricks, or ideas, please feel free to comment."}, {"post_id": 20085, "ts": "2026-07-01T16:31:57Z", "hours": 5.0336, "text": "Life Lesson: Hardware Projects are extremely specific Honestly, I have been all over the place with this project. But these are some things that have accomplished in total but the creating the case was the most recent int these 5 hours. Finished a First Draft of the Schematic Finished a First Draft of the PCB Created a very basic case consisting of Base legs (front legs are shorter than back legs to create an ergonomic incline) Created a bottom section which holds the pcb and has 5mm space underneath for lights and key switches and other components. Created a funnel shape for the underglow lights Added a translucent white light dispersment layer so the underglow lights are smooth under the macropod. Next hurdles or challenges Finalizing my PCB design so it is ready for the case and plates. I realized there is a specific footprint for the oled screen that lets you see where the screen will sit instead of the 4 pin I have right now. Plus I have to finalize my 3d models and their directories so I can export my entire pcb so I can place it in my case. Creating a plate that holds all my switches and oled and knob. At the same time the plate shouldn’t cover up my visuals. This will be hard because I made my own key layout and not a basic grid layout. So I need a way to map my key locations and they have to be millimeter perfect. Creating the top part of the case with screw holes and brass insert etc. This is the final thing that will make my pcb get its gaming feel."}, {"post_id": 16034, "ts": "2026-06-26T01:28:48Z", "hours": 7.6631, "text": "I have finalized the first draft for the Anypad. It took a while to research and finally finish the Design rule checkers errors and warnings. The 3d models for my 3d view of the pcb didnt work so I had to find 3d .step models so that it would be easier to see the pcb with its components while designing the case on fusion 360. I am still having some trouble exporting the pcb as a .step file with all components present and aligned correctly. but ill get started on the rough draft for my case"}, {"post_id": 15100, "ts": "2026-06-24T15:16:31Z", "hours": 6.5603, "text": "I was having some trouble with Hackatime and Stardance, so I have actually spent like 20 hours on this. I have made a proper schematic, and I am finalizing the PCB design. I recently fell into an error where I had forgotten to put the usb port on the edge of the board. but I recently fixed that. Next update will be cleaner visual graphics and everything will be measured for the case"}]...
|
Title: The Anypad by @Shreyansh | Stardance
Devlo Title: The Anypad by @Shreyansh | Stardance
Devlogs:
I was having some trouble with Hackatime and Stardance, so I have actually spent like 20 hours on this. I have made a proper schematic, and I am finalizing the PCB design. I recently fell into an error where I had forgotten to put the usb port on the edge of the board. but I recently fixed that. Next update will be cleaner visual graphics and everything will be measured for the case
I have finalized the first draft for the Anypad. It took a while to research and finally finish the Design rule checkers errors and warnings. The 3d models for my 3d view of the pcb didnt work so I had to find 3d .step models so that it would be easier to see the pcb with its components while designing the case on fusion 360. I am still having some trouble exporting the pcb as a .step file with all components present and aligned correctly. but ill get started on the rough draft for my case
Life Lesson: Hardware Projects are extremely specific Honestly, I have been all over the place with this project. But these are some things that have accomplished in total but the creating the case was the most recent int these 5 hours. Finished a First Draft of the Schematic Finished a First Draft of the PCB Created a very basic case consisting of Base legs (front legs are shorter than back legs to create an ergonomic incline) Created a bottom section which holds the pcb and has 5mm space underneath for lights and key switches and other components. Created a funnel shape for the underglow lights Added a translucent white light dispersment layer so the underglow lights are smooth under the macropod. Next hurdles or challenges Finalizing my PCB design so it is ready for the case and plates. I realized there is a specific footprint for the oled screen that lets you see where the screen will sit instead of the 4 pin I have right now. Plus I have to finalize my 3d models and their directories so I can export my entire pcb so I can place it in my case. Creating a plate that holds all my switches and oled and knob. At the same time the plate shouldn’t cover up my visuals. This will be hard because I made my own key layout and not a basic grid layout. So I need a way to map my key locations and they have to be millimeter perfect. Creating the top part of the case with screw holes and brass insert etc. This is the final thing that will make my pcb get its gaming feel.
Develog 4 Rough terrain but not too bad Honestly I am starting to get the hang of hardware. The Anypad v1 is coming together. I finalized the pcb layout, footprints, 3d models etc. I exported the exact layout of the pcb from kicad and made a plate out of it. After the plate I finished the top part of the case. What I have Left? bringing the actual 3d pcb file and putting it in my case to see if everything fits together Cool top design A good color scheme Branding Check all the measurements and layouts firmware Check absoulutley everything again Ship Wait for approval or fix stuff Assemble and enjoy! If any of you have any tips, tricks, or ideas, please feel free to comment.
Devlog #5: Final Stretch Remaining! Over these 9-10 hours I have finally finished my entire hardware section of The Anypad. And now im gonna dive into the final software before arranging everything to be shipped. What I was doing? What took me so long? I found out why I couldn’t export my pcb from kicad. What happened was that fusion kept opening the old file because the name was in its quick cache. And so I fixed fusion’s cache and then exported it and placed it perfectly and it felt like everything is where it’s supposed to go…. But thats what I thought But… Later after I added the key caps I realized… I had messed up the positioning of the keycap holes on the top cover. And it was something that took a bit of a long time to fix. If I didnt fix it the keycap wouldn’t go all the way down and it would scrape the case. Next steps? Start and finish firmware Debug firmware Verify all designs and stamp final date on everything Wrap all files in nice GitHub repo with an appealing readme Finally Ship The Anypad and hope it gets passed first try. — Iterate if required Collect all parts Assemble! Review Use! My goal is to be done with first 5 steps by next devlog Thank you! For anyone who has read this far. If anyone has any suggestions please feel free to comment
Devlog #6: I Guess I still have a bit more to go! I just spent 13 hours without a devlog and just realized that 3 of them won’t count. :( But anyways Im pretty much done with the firmware now and currently I am polishing up a Boot up Animation on the oled screen of the anypad What I did in detail I figured out how QMK works and then I created a new keyboard and edited some stuff, crashed out, handed over some stuff to gemini, finally understood how c and json files work. Then over the last couple days learned cool functions the micro controller can do. And then I added those to the code. So I am quite sure the code now works, I’ll check it once again. And then I thought of why no make like a cool start up animation. So I asked gemini if QMK allows that and turns out it does. So attached below is a short clip of the first draft of my boot up animation. I am thinking of adding like a series of intros where it displays anypad. And then a quick intro of hack club and says By Shreyansh Next steps? Finish animation Check Code Check everything Post a ship in slack and get peer review Finally Ship The Anypad and hope it gets passed first try. — Iterate if required Collect all parts Assemble! Review Use! My goal is to be done with first 5 steps by next devlog Scratch that, That was last weeks goal This weeks goal is to like ship in like the next 2 days Thank you! For anyone who has read this far. If you have any suggestions please feel free to comment
Devlog #7: I am still not done but am very very close! Pixels pixels and compiling… This time I learned from my mistake and didnt wait till the 9 hour warning to devlog. I finally for real finished my code compiled it, I exported my pcb into the Gerber files which are basically just instructions that the pcb printer understands. And I also finished up my animation it looks pretty sick (Pixel art is kinda cool but it takes for ever). I also extra polished my readme and folder organization What I did in detail Thats basically everything I did (not much) Next steps? 1. Finish animation 2. Check Code 3. Check everything < Yup im about right here :) 4. Post a ship in slack and get peer review 5. Finally Ship The Anypad and hope it gets passed first try. — Iterate if required 6. Collect all parts 7. Assemble! 8. Review 9. Use! This weeks goal is to like ship in like the next 2 days Well that was wrong to assume. But for real I will definitley try to finish tommorow. Trust! Thank you! For anyone who has read this far. If you have any suggestions please feel free to comment Ik I say this everytime. But sadly no one sees or comments on my post, Im sad :(
Devlog 8: I FINISHED IT! After 2 consecutive lies and extensions to you all I finally finished What Happened? I basically wrapped everything up and completed the form, I also made a ship post in #hackpad-ships channel. I also applied for outpost funding to complete my build. Next? All I have to do is wait for approval then order my parts and then build. If everything is right my build should be done by mid of August or end of august. P.S. If you like the Anypad you should check out The Rover X...
|
1792644668.8126519
|
1793249468.8126519
|