|
18665
|
Covertfily by @jagathram | Stardance
|
jagathram
|
1
|
63.35
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T03:33:49Z", "hours": 61.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Covertfily is a privacy-first file toolkit that runs entirely in your browser. Drop a file, pick a format, download the result What you can do: • Convert 150+ format pairs — PNG→JPG, PDF→Word, MP4→MP3, Excel→CSV, and more • PDF tools — merge, compress, watermark, protect, reorder pages • Media tools — trim video, compress, change speed, extract frames (FFmpeg.wasm in the browser) • Image utilities — OCR, resize, EXIF reader, collage maker, pixel art, and more • NASA tools — pull Landsat satellite imagery by lat/long/date, and download Astronomy Picture of the Day in JPG/PNG/WebP Why it’s a real build, not a landing page: • Static site with 200+ HTML pages, zero backend • Custom generator pipeline — one template spawns every converter page • Heavy client-side libs: PDF.js, FFmpeg.wasm, Tesseract.js, SheetJS • Open source: github.com/jagathram-tech/covertfily ( https://github.com/jagathram-tech/covertfily ) • Live: covertfily.com ( https://covertfily.com )", "repo": "", "demo": ""}]...
|
[{"post_id": 43941, "ts": "202 [{"post_id": 43941, "ts": "2026-08-09T12:12:14Z", "hours": 2.3458, "text": "This week I cleaned up and improved Covertfily’s video tools. • Removed the Protect/Unlock PDF tool and all site-wide links • Fixed video compression so files actually get smaller (not larger) by switching from fixed bitrates to smarter, source-aware encoding • Fixed the progress bar on Video Compressor, Video Speed, and Video Trimmer so users can clearly see status during processing Small product polish, better UX, more trustworthy results — all still 100% private and browser-based."}, {"post_id": 19153, "ts": "2026-06-30T12:16:36Z", "hours": 10.7383, "text": "Upgrading the capacity and usability"}, {"post_id": 16663, "ts": "2026-06-27T02:50:44Z", "hours": 17.1214, "text": "the UI Looks much much better"}, {"post_id": 14036, "ts": "2026-06-23T00:37:28Z", "hours": 8.5031, "text": "Making The music trimmer working"}, {"post_id": 13438, "ts": "2026-06-22T00:39:37Z", "hours": 10.9403, "text": "Just rectifying the conversion issues"}, {"post_id": 12525, "ts": "2026-06-20T13:28:47Z", "hours": 3.2233, "text": "improving the site ui"}, {"post_id": 11671, "ts": "2026-06-19T00:41:40Z", "hours": 9.9317, "text": "Just improving the ui and experience"}, {"post_id": 10691, "ts": "2026-06-17T15:39:26Z", "hours": 0.3292, "text": "Spent some time today making Covertfily’s SEO actually solid instead of just “good enough.“The big stuff: every page now ships proper Open Graph image tags (dimensions, type, the works) so when someone drops a link in Discord or Twitter it doesn’t render as a sad cropped mess. Also wired up datePublished/dateModified on all the articles and blog posts — turns out Google straight-up won’t show article rich results without those, and we had none. Oops.Fixed a sneaky one too: the sitemap was stamping today’s date on all 203 pages every time it ran, basically telling Google “yeah everything changed at once” — which is a garbage signal. Now each page reports its real last-modified date.Threw in some cleanup while I was in there — tightened the attribute escaping so weird characters can’t break the HTML, and killed a copy-pasted homepage meta block that had quietly drifted out of sync with everything else.All 203 pages regenerated, validation passing, committed on its own branch.Couple things still on the list: the share image is a wide skinny logo right now, needs a proper 1200×630 one. And heads up — Google killed FAQ/HowTo rich results back in 2023, so that markup’s just along for the ride now."}]...
|
Title: Covertfily by @jagathram | Stardance
Devlo Title: Covertfily by @jagathram | Stardance
Devlogs:
Spent some time today making Covertfily’s SEO actually solid instead of just “good enough.“The big stuff: every page now ships proper Open Graph image tags (dimensions, type, the works) so when someone drops a link in Discord or Twitter it doesn’t render as a sad cropped mess. Also wired up datePublished/dateModified on all the articles and blog posts — turns out Google straight-up won’t show article rich results without those, and we had none. Oops.Fixed a sneaky one too: the sitemap was stamping today’s date on all 203 pages every time it ran, basically telling Google “yeah everything changed at once” — which is a garbage signal. Now each page reports its real last-modified date.Threw in some cleanup while I was in there — tightened the attribute escaping so weird characters can’t break the HTML, and killed a copy-pasted homepage meta block that had quietly drifted out of sync with everything else.All 203 pages regenerated, validation passing, committed on its own branch.Couple things still on the list: the share image is a wide skinny logo right now, needs a proper 1200×630 one. And heads up — Google killed FAQ/HowTo rich results back in 2023, so that markup’s just along for the ride now.
Just improving the ui and experience
improving the site ui
Just rectifying the conversion issues
Making The music trimmer working
the UI Looks much much better
Upgrading the capacity and usability
This week I cleaned up and improved Covertfily’s video tools. • Removed the Protect/Unlock PDF tool and all site-wide links • Fixed video compression so files actually get smaller (not larger) by switching from fixed bitrates to smarter, source-aware encoding • Fixed the progress bar on Video Compressor, Video Speed, and Video Trimmer so users can clearly see status during processing Small product polish, better UX, more trustworthy results — all still 100% private and browser-based.
Ships:
Covertfily is a privacy-first file toolkit that runs entirely in your browser. Drop a file, pick a format, download the result What you can do: • Convert 150+ format pairs — PNG→JPG, PDF→Word, MP4→MP3, Excel→CSV, and more • PDF tools — merge, compress, watermark, protect, reorder pages • Media tools — trim video, compress, change speed, extract frames (FFmpeg.wasm in the browser) • Image utilities — OCR, resize, EXIF reader, collage maker, pixel art, and more • NASA tools — pull Landsat satellite imagery by lat/long/date, and download Astronomy Picture of the Day in JPG/PNG/WebP Why it’s a real build, not a landing page: • Static site with 200+ HTML pages, zero backend • Custom generator pipeline — one template spawns every converter page • Heavy client-side libs: PDF.js, FFmpeg.wasm, Tesseract.js, SheetJS • Open source: github.com/jagathram-tech/covertfily ( https://github.com/jagathram-tech/covertfily ) • Live: covertfily.com ( https://covertfily.com )...
|
1792882075.334546
|
1793746075.334546
|
|
5550
|
PelagoHaven by @Kokoio01 | Stardance
|
Kokoio01
|
0
|
63.28
|
0
|
[]
|
[{"post_id": 79871, "ts": "202 [{"post_id": 79871, "ts": "2026-10-15T17:58:24Z", "hours": 11.0725, "text": "A devlog? So I am still in the middle of coding the Option Creator but it is making good progress. I have already finished the complex script to searilize the option data and cache it in sqlite and am now at creating the ui for it. The Ui is also making some progress, I already have rendering of the most basic option types implemented and am now trying to make the rest of the UI functional (you cant edit the options currently). Currently we have implemented: Toggle (and DefaultOnToggle) Text Input (FreeText) Select (Choice) Range Range with Options (NamedRange) So 6/20 different option types… Bye!"}, {"post_id": 77417, "ts": "2026-10-06T21:42:23Z", "hours": 10.4872, "text": "What happened? You ask? I finished the new Library tab! So what actually differentiates this one from the old one? Instead of a two column design, we now use cards for each world and can therefore show vastly more worlds in less space, also the cards are the right size to later support grid art! The backend works completely different: the old one read manifest files to get its data, this one asks the runtime directly! Caching in a DB, so loads are really fast! This also provides the basis for the following new Option Creator, which I will work on next! Bye!"}, {"post_id": 76823, "ts": "2026-10-04T18:30:05Z", "hours": 9.0603, "text": "Its been a long time, but i made a decission that I think is correct, but is sort of a scarry one, I decided to start over from scratch again. Reason for this move is that the old architecture built around PyInstaller wasnt really a way i could continue foward, as it had too much Problems and while I probably could have switched that out, I decided to just start over. So what happend in the new Version? I added well almost the complete bootstrap flow, so the App now downloads a python runtime and the archipelago source code and installs all dependencies automatically! I will now continue working on reimplementing the basic layout and the option editor Bye!"}, {"post_id": 44023, "ts": "2026-08-09T15:05:52Z", "hours": 7.7142, "text": "Here we are again, it’s been a bit of time, so what has happened? The option editor was updated to actually work (wuhhhhhh), we now handle rendering the options and allow editing of these options, supported option types are: Toggle Range Named Range Choice (Select). Text Choice (Combobox) List Text The editor also now allows selecting the apworld you want to edit and adding new ones (this was hardcoded before). Up next is a bit of styling work on the option editor, the room setup screen, and maybe getting started with generation of the YAML files. I too need to again take a look at the option extraction, as I ran into multiple errors with extracting options, ranging from missing deps to other errors. Bye!"}, {"post_id": 41472, "ts": "2026-08-05T18:11:50Z", "hours": 9.8719, "text": "So, it’s time for another devlog. So, what has happened? As I talked about in the last devlog, I got the program added to the .apworld file format in the Windows Explorer, so that one can install apworlds just by double pressing. I also made a lot of progress on handling the options creator, originally I wanted to use PyO3 for integrating with the official Archipelago runtime, which I realised isn’t that great of an idea as shipping a Python interpreter with it is kind of a pain. So I ended up using PyInstaller to create an executable of the runtime + my wrapper and bundling that executable with the application. This executable now allows me to read the options from an apworld, which I am using to recreate the options creator in a more intuitive way by bundling the seed generation and room creation all in one flow, so a user can in one flow create all configurations, configure their room, generate their seed and upload it to a webhost of their choosing. From that flow, I already have some basics of the slot configuration set up, as well as, of course, the option reader. Next up I will try to complete the slot configuration and try myself at the seed generation, as well as the room configuration UI. Bye!"}, {"post_id": 24377, "ts": "2026-07-07T22:00:43Z", "hours": 12.2931, "text": "So, well… This took a bit longer than expected, but here we are again. Over the last days, I managed to make some big progress on the launcher, to the point that it now has a World Manager. (For context, a world is basically a game, or, to be more specific, the piece of software that tells Archipelago how a game works and how it should generate the items.) Writing this World Manager was way more difficult than originally thought, since I personally am neither an expert on Archipelago nor an expert on Tauri. It also didn’t help that the manifest file “archipelago.json” isn’t really a standard, as every world has different values and keys available, even the builtin worlds don’t have a consistent schema here. So, what actually is new? Some basic settings for selecting the path of your Archipelago Folder The Library tab to view installed Worlds An APWorld Installation flow The ability to remove Worlds Next I will have to look what I do, in terms of the world management I would really like to add the program to the Windows file picker, so opening the APWorld files would open this launcher instead of the official one. I also now need to more focus on the core part of the project, the Generation side, there I currently don’t have a plan how to do that yet, as I need to read a lot of Python for that, I will probably end up using PyO3, but I will have to look. Bye!"}, {"post_id": 2587, "ts": "2026-06-05T05:42:19Z", "hours": 2.7783, "text": "Hi there, I have been working on making a basic Layout and getting those pesky traffic light buttons to look good, this is what i ended up on. Yeah also setup my Tauri dev enviroment but thats the boring stuff"}]...
|
Title: PelagoHaven by @Kokoio01 | Stardance
Devlo Title: PelagoHaven by @Kokoio01 | Stardance
Devlogs:
Hi there, I have been working on making a basic Layout and getting those pesky traffic light buttons to look good, this is what i ended up on. Yeah also setup my Tauri dev enviroment but thats the boring stuff
So, well… This took a bit longer than expected, but here we are again. Over the last days, I managed to make some big progress on the launcher, to the point that it now has a World Manager. (For context, a world is basically a game, or, to be more specific, the piece of software that tells Archipelago how a game works and how it should generate the items.) Writing this World Manager was way more difficult than originally thought, since I personally am neither an expert on Archipelago nor an expert on Tauri. It also didn’t help that the manifest file “archipelago.json” isn’t really a standard, as every world has different values and keys available, even the builtin worlds don’t have a consistent schema here. So, what actually is new? Some basic settings for selecting the path of your Archipelago Folder The Library tab to view installed Worlds An APWorld Installation flow The ability to remove Worlds Next I will have to look what I do, in terms of the world management I would really like to add the program to the Windows file picker, so opening the APWorld files would open this launcher instead of the official one. I also now need to more focus on the core part of the project, the Generation side, there I currently don’t have a plan how to do that yet, as I need to read a lot of Python for that, I will probably end up using PyO3, but I will have to look. Bye!
So, it’s time for another devlog. So, what has happened? As I talked about in the last devlog, I got the program added to the .apworld file format in the Windows Explorer, so that one can install apworlds just by double pressing. I also made a lot of progress on handling the options creator, originally I wanted to use PyO3 for integrating with the official Archipelago runtime, which I realised isn’t that great of an idea as shipping a Python interpreter with it is kind of a pain. So I ended up using PyInstaller to create an executable of the runtime + my wrapper and bundling that executable with the application. This executable now allows me to read the options from an apworld, which I am using to recreate the options creator in a more intuitive way by bundling the seed generation and room creation all in one flow, so a user can in one flow create all configurations, configure their room, generate their seed and upload it to a webhost of their choosing. From that flow, I already have some basics of the slot configuration set up, as well as, of course, the option reader. Next up I will try to complete the slot configuration and try myself at the seed generation, as well as the room configuration UI. Bye!
Here we are again, it’s been a bit of time, so what has happened? The option editor was updated to actually work (wuhhhhhh), we now handle rendering the options and allow editing of these options, supported option types are: Toggle Range Named Range Choice (Select). Text Choice (Combobox) List Text The editor also now allows selecting the apworld you want to edit and adding new ones (this was hardcoded before). Up next is a bit of styling work on the option editor, the room setup screen, and maybe getting started with generation of the YAML files. I too need to again take a look at the option extraction, as I ran into multiple errors with extracting options, ranging from missing deps to other errors. Bye!
Its been a long time, but i made a decission that I think is correct, but is sort of a scarry one, I decided to start over from scratch again. Reason for this move is that the old architecture built around PyInstaller wasnt really a way i could continue foward, as it had too much Problems and while I probably could have switched that out, I decided to just start over. So what happend in the new Version? I added well almost the complete bootstrap flow, so the App now downloads a python runtime and the archipelago source code and installs all dependencies automatically! I will now continue working on reimplementing the basic layout and the option editor Bye!
What happened? You ask? I finished the new Library tab! So what actually differentiates this one from the old one? Instead of a two column design, we now use cards for each world and can therefore show vastly more worlds in less space, also the cards are the right size to later support grid art! The backend works completely different: the old one read manifest files to get its data, this one asks the runtime directly! Caching in a DB, so loads are really fast! This also provides the basis for the following new Option Creator, which I will work on next! Bye!
A devlog? So I am still in the middle of coding the Option Creator but it is making good progress. I have already finished the complex script to searilize the option data and cache it in sqlite and am now at creating the ui for it. The Ui is also making some progress, I already have rendering of the most basic option types implemented and am now trying to make the rest of the UI functional (you cant edit the options currently). Currently we have implemented: Toggle (and DefaultOnToggle) Text Input (FreeText) Select (Choice) Range Range with Options (NamedRange) So 6/20 different option types… Bye!...
|
1792500701.894872
|
1793105501.894872
|
|
543
|
ICare by @SilentSword | Stardance
|
SilentSword
|
1
|
63.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T07:36:22Z", "hours": 63.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ICare is an eye break reminder app that FORCES you to take your breaks, and not just that, it adapts to YOUR needs. Overlay warnings, notifications, dark/light theme, automatic start, idle detection, Fullscreen detection, meeting trackers and more! ICare has them all. It started with my eye doctor telling me to start using the 20/20/20 rule, but it was hard to keep consistency, so I started building an app, and then added a new feature, and another one, and so on until we are here XD! I strongly recommend you read the readme file from GitHub, I explained everything in depth there. IMPORTANT - WINDOWS 10/11 ONLY", "repo": "https://github.com/SilentSword123456/ICare", "demo": "https://github.com/SilentSword123456/ICare/releases/latest"}]...
|
[{"post_id": 71035, "ts": "202 [{"post_id": 71035, "ts": "2026-09-20T07:25:47Z", "hours": 2.3283, "text": "Hi there, I realized that I won’t have enough time to build all the features I want for ICare, so I updated the readme, polished some things, temporarily disabled the AppsView since it still needs a lot of work on animations and other stuff, and I’m ready to ship!"}, {"post_id": 58216, "ts": "2026-08-30T16:00:39Z", "hours": 9.3022, "text": "Okkkkkkkay. I finally finished making two more views and linked the logic of the app groups/folders with their specific rules to the actual app timer. Even though the GUI isn’t pretty to look at, I just focused on getting it working. I did a terrific job at sniping all the bugs (took me 9h man😭😭), but I did also use a Claude’s help when I couldn’t find the root cause. The core ideea of the app works right now, what I do have left is fixing the UI for the newly added views (i have a LOT of work to do here) and implementing the rest of the “small” features I have in mind. Right now, it’s not pleasant to look at, but this is not what this devlog is about, it’s about the functionality I added to the app. To explain it in more detail, you can now create groups/folders with different apps inside of them and different rules applied for each group , meaning that if you don’t want the app to track the time you spend in let’s say Slack and other messaging apps, you can create a folder with that rule, and thats it. There are still bugs, like it not saving its config file 100% of the time or the fact that you can’t delete folders, or that you can add an app to multiple folders, etc… But I was getting close to the 10h mark and I had to post a devlog. See ya next time!"}, {"post_id": 55676, "ts": "2026-08-27T17:15:36Z", "hours": 3.0956, "text": "Holla dear readers! In this devlog I’m happy to announce that I finally added tests to the app, and they are great, they helped me debug much faster, and that’s not the only feature I added. But by far the most important feature added is that now the break warning will also be displayed if there is currently a full screen app opened, which might be the most important feature of the hole app. As you can see in the screenshot below, I modified the break overlay warning message box to be a floating island with a see trough background with rounded corners! Also, when it gets down to 3 seconds, the timer turns red , and I’m super happy with how it turned out! That’s it for this devlog, enjoy the new version!"}, {"post_id": 49818, "ts": "2026-08-18T19:21:11Z", "hours": 9.6128, "text": "Hi there, I’m writing this from my laptop since the PC is used right now, I hope the recording still looks smooth :) I took a break for a few weeks; therefore, I don’t remember what the first few hours of this devlog went into, I recon I might have just fixed some bugs I found while using the app. Buuuuuuut I do know the latest feature I’ve been working on, right now it’s just a menu with the apps installed (almost all), and the target functionality is to be able to create multiple apps groups in which the app will either just pause or alert you with a message similar to the meeting overlay. While implementing this new window, I learned about ObservableCollection and ListBox s, which were new concepts to me, but I love how they nicely combine together. For the ObservableCollecton specifically, I created a new data model called InstalledApp, which has a Name, a ExePath and an Icon field. After hitting random bugs, such as the view (an ListCollectionView ) not being initialized fast enough, I finally got a bare-bones version working. It’s ugly, it’s messy, but I’m hitting the 10h mark and I have to write this devlog."}, {"post_id": 29652, "ts": "2026-07-16T18:34:43Z", "hours": 3.4758, "text": "Holla, I’ve been working on a kind of useless bug that took me a long time to fix. The problem was that when the app was enabled to start automatically, you could still disable it from task manager. The bad thing is, I had no way of knowing if it was enabled or disabled from task manager, so I build one, and after that, I wanted a way to get notified when the user changed the disabled/enabled state, so I used a function named RegNotifyChangeKeyValue witch I’ve configured to notify the app when ICare’s state changed. I created a hole separate class for that named AutostartWatcher.cs, and it works flawlessly! Thanks for reading!"}, {"post_id": 29347, "ts": "2026-07-16T07:18:02Z", "hours": 8.2497, "text": "Hy there, I implemented two major things, those being a dark theme and an actual installer and updater. The dark theme: For this, I created two xaml files with the same SolidColorBrush names but with different colors, then I used ResourceDictionary and MergedDictionaries to change the current used file for the theme. After this I had to play with the color values because apparently you have to have layers to your app and yeah, it was a long and boring process of running the app, thinking if it needs to be darker or lighter, then going to the color picker and changing the value accordantly, then copying that into the program and repeating, but it worked! To make the title bar change color I found out that you need to import some of those weird libraries, again. I don’t understand every part of that function, but it does work. To change the theme, I removed the custom message box from settings and replaced it with a light/dark toggle for the theme. The installer and updater: For this, I used Velopack, which is great! It doesn’t require admin to install, it also has an updater, and it just works! Unfortunately, for the GitHub build action, I had no ideea how to write it, so just used Claude to do it for me, but that’s not really part of the app so it’s ok (I think?). Then, I wanted to have a way for the user to update the app with some confirmation things, because before I just had one button that you clicked, it shows no progress, and if it did find an update it would immediately restart the app, no questions asked. Now, in the bottom right of settings, there is some text that acts like a button which has all the states from let’s say no update found to ready to download to ready to install and more. That’s pretty much it, thanks for reading!"}, {"post_id": 26803, "ts": "2026-07-11T20:06:42Z", "hours": 7.1014, "text": "Dear reader, thank you for reading. I promise this devlog is gonna be fun to read trough. The biggest utility change is that the timer now pauses when the screen goes to sleep. To do this, I had to use some low-level hooks that I’m not a master in, but it was fun to use them and debug the errors. Then I wandered about how I could make the app report errors it had back to me while also putting YOUR 🫵 privacy on the first place. I found Sentry, an app which has a more than enough free plan for this use case. What Sentry does it’s that it collects all the errors and stores them in one dashboard, along with many other features. The setup was fairly simple; it wasn’t that big of a hustle. Next, I also added a darker picture for the background for when the pc is in dark mode so that you don’t get flash banged when a break suddenly starts and its 3am. To choose the correct picture, it checks a specific value from a specific path where Windows keeps the current theme. Here I had a problem with memory leak which required more debugging because the images were being kept in memory, twice, and they would also get deleted after each use? It was a mess, but now its fixed. The last change is in the UI. I decided to keep ICare at a fixed size so that the layout is more consistent, and then I adapted the Settings view to the new dimensions. Thank you so much for staying! I’m sure I have a long way to go until ICare reaches a reasonable standard, but I hope you had fun reading through my journey. Thanks again! P.S: You can show me that you’re interested in this by just leaving a like on this devlog and it will make me happy to know that someone read it!"}, {"post_id": 22053, "ts": "2026-07-04T09:34:51Z", "hours": 2.8311, "text": "Hello there, I added a few features that I needed while I was using ICare, and those being a nice background because the black one was just too basic and the timer stopping when the screen goes to sleep or when I lock the pc. To know when the pc went to sleep or the user locked the pc, I attached a listener to a SystemEvents thing, I don’t really know what it is, and now it constantly checks for SessionLock and SessionUnlock and pauses and starts the timer accordantly. For the pausing and starting the timer, I have redone its logic. Now, instead of calculating the exact time the break should start I use a stopwatch to track how much time has passed and when it reaches the desired time it triggers the break. It wasn’t easy because I runed into many bugs where, for example, it would just instantly start the break once the app launched and many such errors, but the latest version works flawlessly! Thanks for reading! Consider leaving a like or a comment if you enjoyed this devlog q(≧▽≦q)!"}, {"post_id": 17587, "ts": "2026-06-28T13:22:58Z", "hours": 3.1553, "text": "Holla, I worked on some core features but also some little improvements. The biggest change is that the app can now automatically start and this is a togglable feature from the settings with also has a nice toggle. It wasn’t hard to implement it science there is already api for it and all I had to do is create some basic functions to use it. Next, I added dismiss buttons in the notification for 5 and 10 minutes respectively. I also fixed the bug where when dismissing the break, it would only add the minutes to the visual timer, but it wouldn’t actually dismiss the break. Also, I figured that the break message and the countdown timer during the blackout (the break) was a bit distracting, so now only the primary monitor has the break message and the countdown, the rest are just blacked out. I added some small coloring touches to the Work time and the Break time, and they now look so much better. The final feature I added is a warning when the break time is smaller than the worktime; I figured that if you work or game or just use your computer for 60min, you should take a 60sec break, so for every X minutes of screentime you should take at least X seconds of break, so now that’s what the break message says. Thank you for reading, I appreciate all feedback! Bye!"}, {"post_id": 16424, "ts": "2026-06-26T18:37:55Z", "hours": 3.3353, "text": "Hey there! I have been working on quality-of-life improvements, such as adding a nice visual indicator when the next break is skipped by making the timer red, adding dismiss buttons to the notification, making the hotkey field automatically register the key pressed and adding the option to write a custom break message. Behind the scenes I also made some quality-of-life changes to the codebase. Now the configuration autosaves after each change, so I don’t need to worry about losing the config, and thats the only big change to the codebase. Im also proud to report that now the icon is also present on the notification, which is a small but important and elegant addition😆 Now I want to focus on making the app automaticly start on user login and figuring out how to properly install it on the computer."}, {"post_id": 4359, "ts": "2026-06-07T17:32:16Z", "hours": 6.6033, "text": "I decided that python wasn’t going to cut it anymore, so I decided to learn some basic C# (I was already pretty familiar with cpp, so it wasn’t that hard) and build the program in C#. It was so much fun, and it was also simpler, because it was VERY, VERY easy with C# to do a lot of things that with python required me to use a backdoor or something. I used Rider from IntelliJ to create my project that is using WPF, a thing for designing windows apps so easily. I also used some templates I found online to just get it working (and ok, I’m guilty, I used AI for the math on the circle, and good thing I did because I have no idea how that math works) and then tried to get them working together. For the notification, well, I almost committed a crime while coding it (for legal reasons, this is a joke(●’◡’●) ) because there is always a catch with windows APIs. Either I couldn’t have a button on the notification, or I had to have a notification manager instance (or something similar, I don’t remember), or I just needed to install yet another library for it. Fortunately, it worked! It doesn’t have an icon, don’t even get me started on the icon because I don’t want to break my computer😭. Anyway, for the keyboard handler, I was blessed enough to find a template on the web for it (apparently it is standard to do it that way), and I just got it, tweaked it a little bit, and it worked! The rest just went smoothly, with a bug here… a bug there… but it worked! It works and I’m so happy! I kind of want to improve the design of the dashboard a little bit, because even though it’s clean, it still could use a little work. And if u got here, ayyy, thank you for reading. Just comment something, anything, it would make me so happy to know someone else read this whole thing! Thank you!"}, {"post_id": 3380, "ts": "2026-06-06T08:45:00Z", "hours": 0.8103, "text": "Hi there! I worked a little bit on the app and added two core features: a Config class and a way to make the program launch as admin every time. I made the config class generate a file named config.json to store all the data, and I made a function to read the data from it. I also added setters for the current hotkey, break time, work time and other fields, and it worked after fixing a few bugs. Then I focused on the program launching as admin, for which I created two new functions, one to check if the program is already running as admin (which uses a long command to check it, I found it online) and another big command to relaunch the script with admin privileges(witch I also found online). Everything works well as shown in the video!"}, {"post_id": 310, "ts": "2026-06-01T15:57:53Z", "hours": 0.4147, "text": "I added support to skip the break with a hotkey combination “Ctrl+Shift+S”. I also used a library I found online for this, and it works! I’m so happy with how this is coming together!"}, {"post_id": 289, "ts": "2026-06-01T15:07:51Z", "hours": 0.4244, "text": "I added a function to send notifications so that you can dismiss the break if you’re in a meeting or in the middle of a game. It was actually the most fun part of the program! I sed a library with a weird name I found online; win11toast. Then all I had to do is to call a method, and then questioning reality because the on_click method didn’t work, but now it does! I even added an icon to the notification! I LOVE IT!"}, {"post_id": 274, "ts": "2026-06-01T14:35:56Z", "hours": 0.6642, "text": "I made the black screen work. I used a fancy library called tkinter to create a black screen on every monitor, and to get all the monitors I used the screeninfo library. Then I looped trough every screen and added a new window to it using that tkinter class. After this, I created two methods that block and unblock some keys on the keyboard, specifically the win key, the alt key and the control key so that you can’t exit the screen and cheat your way through the break"}, {"post_id": 263, "ts": "2026-06-01T13:42:16Z", "hours": 0.305, "text": "I improved the time tracking feature. I noticed that it before it was always ~1 second late and stacked up the more time it had to track. Now I’m using time.time() function to keep track of the exact start time so that it’s always exact, compared to waiting 1 second and incrementing a counter"}, {"post_id": 209, "ts": "2026-06-01T08:33:42Z", "hours": 1.2725, "text": "I got started by creating the GitHub repo, creating the IntelliJ project, then creating multiple .py files to separate their functionalities clearly. I had to search and learn how to use the threading class, which is pretty complicated in my option, but it works, and you know what they say: “If it works, don’t touch it”. Then I found a closed eye icon on the internet and used it as the ico for the systemtray. For now, it’s just in cli, but after I make the blackout screen work, I’m going to add a nice gui."}]...
|
Title: ICare by @SilentSword | Stardance
Devlogs: Title: ICare by @SilentSword | Stardance
Devlogs:
I got started by creating the GitHub repo, creating the IntelliJ project, then creating multiple .py files to separate their functionalities clearly. I had to search and learn how to use the threading class, which is pretty complicated in my option, but it works, and you know what they say: “If it works, don’t touch it”. Then I found a closed eye icon on the internet and used it as the ico for the systemtray. For now, it’s just in cli, but after I make the blackout screen work, I’m going to add a nice gui.
I improved the time tracking feature. I noticed that it before it was always ~1 second late and stacked up the more time it had to track. Now I’m using time.time() function to keep track of the exact start time so that it’s always exact, compared to waiting 1 second and incrementing a counter
I made the black screen work. I used a fancy library called tkinter to create a black screen on every monitor, and to get all the monitors I used the screeninfo library. Then I looped trough every screen and added a new window to it using that tkinter class. After this, I created two methods that block and unblock some keys on the keyboard, specifically the win key, the alt key and the control key so that you can’t exit the screen and cheat your way through the break
I added a function to send notifications so that you can dismiss the break if you’re in a meeting or in the middle of a game. It was actually the most fun part of the program! I sed a library with a weird name I found online; win11toast. Then all I had to do is to call a method, and then questioning reality because the on_click method didn’t work, but now it does! I even added an icon to the notification! I LOVE IT!
I added support to skip the break with a hotkey combination “Ctrl+Shift+S”. I also used a library I found online for this, and it works! I’m so happy with how this is coming together!
Hi there! I worked a little bit on the app and added two core features: a Config class and a way to make the program launch as admin every time. I made the config class generate a file named config.json to store all the data, and I made a function to read the data from it. I also added setters for the current hotkey, break time, work time and other fields, and it worked after fixing a few bugs. Then I focused on the program launching as admin, for which I created two new functions, one to check if the program is already running as admin (which uses a long command to check it, I found it online) and another big command to relaunch the script with admin privileges(witch I also found online). Everything works well as shown in the video!
I decided that python wasn’t going to cut it anymore, so I decided to learn some basic C# (I was already pretty familiar with cpp, so it wasn’t that hard) and build the program in C#. It was so much fun, and it was also simpler, because it was VERY, VERY easy with C# to do a lot of things that with python required me to use a backdoor or something. I used Rider from IntelliJ to create my project that is using WPF, a thing for designing windows apps so easily. I also used some templates I found online to just get it working (and ok, I’m guilty, I used AI for the math on the circle, and good thing I did because I have no idea how that math works) and then tried to get them working together. For the notification, well, I almost committed a crime while coding it (for legal reasons, this is a joke(●’◡’●) ) because there is always a catch with windows APIs. Either I couldn’t have a button on the notification, or I had to have a notification manager instance (or something similar, I don’t remember), or I just needed to install yet another library for it. Fortunately, it worked! It doesn’t have an icon, don’t even get me started on the icon because I don’t want to break my computer😭. Anyway, for the keyboard handler, I was blessed enough to find a template on the web for it (apparently it is standard to do it that way), and I just got it, tweaked it a little bit, and it worked! The rest just went smoothly, with a bug here… a bug there… but it worked! It works and I’m so happy! I kind of want to improve the design of the dashboard a little bit, because even though it’s clean, it still could use a little work. And if u got here, ayyy, thank you for reading. Just comment something, anything, it would make me so happy to know someone else read this whole thing! Thank you!
Hey there! I have been working on quality-of-life improvements, such as adding a nice visual indicator when the next break is skipped by making the timer red, adding dismiss buttons to the notification, making the hotkey field automatically register the key pressed and adding the option to write a custom break message. Behind the scenes I also made some quality-of-life changes to the codebase. Now the configuration autosaves after each change, so I don’t need to worry about losing the config, and thats the only big change to the codebase. Im also proud to report that now the icon is also present on the notification, which is a small but important and elegant addition😆 Now I want to focus on making the app automaticly start on user login and figuring out how to properly install it on the computer.
Holla, I worked on some core features but also some little improvements. The biggest change is that the app can now automatically start and this is a togglable feature from the settings with also has a nice toggle. It wasn’t hard to implement it science there is already api for it and all I had to do is create some basic functions to use it. Next, I added dismiss buttons in the notification for 5 and 10 minutes respectively. I also fixed the bug where when dismissing the break, it would only add the minutes to the visual timer, but it wouldn’t actually dismiss the break. Also, I figured that the break message and the countdown timer during the blackout (the break) was a bit distracting, so now only the primary monitor has the break message and the countdown, the rest are just blacked out. I added some small coloring touches to the Work time and the Break time, and they now look so much better. The final feature I added is a warning when the break time is smaller than the worktime; I figured that if you work or game or just use your computer for 60min, you should take a 60sec break, so for every X minutes of screentime you should take at least X seconds of break, so now that’s what the break message says. Thank you for reading, I appreciate all feedback! Bye!
Hello there, I added a few features that I needed while I was using ICare, and those being a nice background because the black one was just too basic and the timer stopping when the screen goes to sleep or when I lock the pc. To know when the pc went to sleep or the user locked the pc, I attached a listener to a SystemEvents thing, I don’t really know what it is, and now it constantly checks for SessionLock and SessionUnlock and pauses and starts the timer accordantly. For the pausing and starting the timer, I have redone its logic. Now, instead of calculating the exact time the break should start I use a stopwatch to track how much time has passed and when it reaches the desired time it triggers the break. It wasn’t easy because I runed into many bugs where, for example, it would just instantly start the break once the app launched and many such errors, but the latest version works flawlessly! Thanks for reading! Consider leaving a like or a comment if you enjoyed this devlog q(≧▽≦q)!
Dear reader, thank you for reading. I promise this devlog is gonna be fun to read trough. The biggest utility change is that the timer now pauses when the screen goes to sleep. To do this, I had to use some low-level hooks that I’m not a master in, but it was fun to use them and debug the errors. Then I wandered about how I could make the app report errors it had back to me while also putting YOUR 🫵 privacy on the first place. I found Sentry, an app which has a more than enough free plan for this use case. What Sentry does it’s that it collects all the errors and stores them in one dashboard, along with many other features. The setup was fairly simple; it wasn’t that big of a hustle. Next, I also added a darker picture for the background for when the pc is in dark mode so that you don’t get flash banged when a break suddenly starts and its 3am. To choose the correct picture, it checks a specific value from a specific path where Windows keeps the current theme. Here I had a problem with memory leak which required more debugging because the images were being kept in memory, twice, and they would also get deleted after each use? It was a mess, but now its fixed. The last change is in the UI. I decided to keep ICare at a fixed size so that the layout is more consistent, and then I adapted the Settings view to the new dimensions. Thank you so much for staying! I’m sure I have a long way to go until ICare reaches a reasonable standard, but I hope you had fun reading through my journey. Thanks again! P.S: You can show me that you’re interested in this by just leaving a like on this devlog and it will make me happy to know that someone read it!
Hy there, I implemented two major things, those being a dark theme and an actual installer and updater. The dark theme: For this, I created two xaml files with the same SolidColorBrush names but with different colors, then I used ResourceDictionary and MergedDictionaries to change the current used file for the theme. After this I had to play with the color values because apparently you have to have layers to your app and yeah, it was a long and boring process of running the app, thinking if it needs to be darker or lighter, then going to the color picker and changing the value accordantly, then copying that into the program and repeating, but it worked! To make the title bar change color I found out that you need to import some of those weird libraries, again. I don’t understand every part of that function, but it does work. To change the theme, I removed the custom message box from settings and replaced it with a light/dark toggle for the theme. The installer and updater: For this, I used Velopack, which is great! It doesn’t require admin to install, it also has an updater, and it just works! Unfortunately, for the GitHub build action, I had no ideea how to write it, so just used Claude to do it for me, but that’s not really part of the app so it’s ok (I think?). Then, I wanted to have a way for the user to update the app with some confirmation things, because before I just had one button that you clicked, it shows no progress, and if it did find an update it would immediately restart the app, no questions asked. Now, in the bottom right of settings, there is some text that acts like a button which has all the states from let’s say no update found to ready to download to ready to install and more. That’s pretty much it, thanks for reading!
Holla, I’ve been working on a kind of useless bug that took me a long time to fix. The problem was that when the app was enabled to start automatically, you could still disable it from task manager. The bad thing is, I had no way of knowing if it was enabled or disabled from task manager, so I build one, and after that, I wanted a way to get notified when the user changed the disabled/enabled state, so I used a function named RegNotifyChangeKeyValue witch I’ve configured to notify the app when ICare’s state changed. I created a hole separate class for that named AutostartWatcher.cs, and it works flawlessly! Thanks for reading!
Hi there, I’m writing this from my laptop since the PC is used right now, I hope the recording still looks smooth :) I took a break for a few weeks; therefore, I don’t remember what the first few hours of this devlog went into, I recon I might have just fixed some bugs I found while using the app. Buuuuuuut I do know the latest feature I’ve been working on, right now it’s just a menu with the apps installed (almost all), and the target functionality is to be able to create multiple apps groups in which the app will either just pause or alert you with a message similar to the meeting overlay. While implementing this new window, I learned about ObservableCollection and ListBox s, which were new concepts to me, but I love how they nicely combine together. For the ObservableCollecton specifically, I created a new data model called InstalledApp, which has a Name, a ExePath and an Icon field. After hitting random bugs, such as the view (an ListCollectionView ) not being initialized fast enough, I finally got a bare-bones version working. It’s ugly, it’s messy, but I’m hitting the 10h mark and I have to write this devlog.
Holla dear readers! In this devlog I’m happy to announce that I finally added tests to the app, and they are great, they helped me debug much faster, and that’s not the only feature I added. But by far the most important feature added is that now the break warning will also be displayed if there is currently a full screen app opened, which might be the most important feature of the hole app. As you can see in the screenshot below, I modified the break overlay warning message box to be a floating island with a see trough background with rounded corners! Also, when it gets down to 3 seconds, the timer turns red , and I’m super happy with how it turned out! That’s it for this devlog, enjoy the new version!
Okkkkkkkay. I finally finished making two more views and linked the logic of the app groups/folders with their specific rules to the actual app timer. Even though the GUI isn’t pretty to look at, I just focused on getting it working. I did a terrific job at sniping all the bugs (took me 9h man😭😭), but I did also use a Claude’s help when I couldn’t find the root cause. The core ideea of the app works right now, what I do have left is fixing the UI for the newly added views (i have a LOT of work to do here) and implementing the rest of the “small” features I have in mind. Right now, it’s not pleasant to look at, but this is not what this devlog is about, it’s about the functionality I added to the app. To explain it in more detail, you can now create groups/folders with different apps inside of them and different rules applied for each group , meaning that if you don’t want the app to track the time you spend in let’s say Slack and other messaging apps, you can create a folder with that rule, and thats it. There are still bugs, like it not saving its config file 100% of the time or the fact that you can’t delete folders, or that you can add an app to multiple folders, etc… But I was getting close to the 10h mark and I had to post a devlog. See ya next time!
Hi there, I realized that I won’t have enough time to build all the features I want for ICare, so I updated the readme, polished some things, temporarily disabled the AppsView since it still needs a lot of work on animations and other stuff, and I’m ready to ship!
Ships:
ICare is an eye break reminder app that FORCES you to take your breaks, and not just that, it adapts to YOUR needs. Overlay warnings, notifications, dark/light theme, automatic start, idle detection, Fullscreen detection, meeting trackers and more! ICare has them all. It started with my eye doctor telling me to start using the 20/20/20 rule, but it was hard to keep consistency, so I started building an app, and then added a new feature, and another one, and so on until we are here XD! I strongly recommend you read the readme file from GitHub, I explained everything in depth there. IMPORTANT - WINDOWS 10/11 ONLY...
|
1793001178.0328083
|
1793087578.0328083
|
|
1894
|
Boba Cats! by @Jewelia | Stardance
|
Jewelia
|
1
|
63.0
|
1069
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-09T20:19:28Z", "hours": 63.0, "multiplier": 17.55, "payout": 1069, "blessing": "neutral", "text": "Boba Cats! is a 2D adventure game about a cat’s quest to find the fabled brown sugar boba! After an entire summer of working on it, our team ( @graceyd , @kimeowsu , and I) are ready to present the first world of our game! This world takes place under the ocean! What might a cat be doing underwater, you might ask? You’ll see! 😉 The first world is fully playable, but the soundtrack and extra touches will be added in future versions! We hope you all enjoy the cute pixel art, fun platforming challenges, creative storyline, and easter eggs! You can play the game on the [itch app] ( https://itch.io/app ) or download it for Windows!", "repo": "https://github.com/graceyd1/Boba-Cats", "demo": "https://grassinabox.itch.io/boba-cats"}]...
|
[{"post_id": 44198, "ts": "202 [{"post_id": 44198, "ts": "2026-08-09T20:07:52Z", "hours": 3.2164, "text": "Quick devlog before shipping!! @graceyd and I had our sisters test the game, and we’ve been working on fixing some bugs this past week! File saving should be fixed now, as well as some issues with the miniboss and other minor visual bugs! Hope you enjoy the game! Ship coming right up —>"}, {"post_id": 39232, "ts": "2026-08-02T02:02:56Z", "hours": 11.4622, "text": "Today has been a rush to make final touches to our game! We hoped to be able to ship it today, but in favor of more thorough testing, we will probably end up shipping it later this week (hopefully tomorrow or the day after tomorrow or - 🤔 you get the idea right?) I’ve been working on the hidden pearls you can find in-game, as well as name labels to text boxes so it makes it easier for players to remember who is who! As for what the pearls do…I’ve taken a long time to work on that too! But you better come play our game to find out what they actually do 😉 if you can find them in the first place, that is! A couple hours were also spent adding major dialogue changes to one of the major plot points! We’re hoping with the new changes that the story will have more character depth and be more memorable for players! That’s it for now ~"}, {"post_id": 30183, "ts": "2026-07-17T15:31:42Z", "hours": 8.1886, "text": "As we near our final stage of completing the first world of our project, we are smoothing everything out as well as adding final touches and the last major additions such as the plant shop shown below (spoilers: it doesn’t sell you plants). I’ve smoothed out the camera movement in the miniboss arena and added a gate (as shown in the video). I’ve also had fun creating the UI for a multiple file save system and inventory! That’s it for now!! (If we’re not counting some stuff that would be better for you to experience when you actually play the game 😉😉)"}, {"post_id": 28367, "ts": "2026-07-14T16:12:56Z", "hours": 4.3056, "text": "We’ve been wrapping this game’s first level up, with some fixes and tweaks here and there, and adding the final cutscenes such as the one in the video! Aanddd….we might be getting a soundtrack from a special someone 😉"}, {"post_id": 25283, "ts": "2026-07-09T13:51:28Z", "hours": 11.0194, "text": "We’ve made a lot of progress on Boba Cats! Nearly all the rooms are added and we are close to finishing up the dialogue and story line! Thanks to @kimeowsu ’s amazing art and creativity and @graceyd ’s awesome coding and dedication, we hope to be able to ship the first level of our game very soon, so stay tuned!"}, {"post_id": 18439, "ts": "2026-06-29T16:24:00Z", "hours": 5.835, "text": "Dialogue and Story!! We’ve started to add the plot in the form of dialogue to our game, which we have decided to name Boba Cats! In order to get their ship fixed, the player must find brown sugar boba…but at what cost?"}, {"post_id": 14784, "ts": "2026-06-24T00:51:46Z", "hours": 3.7164, "text": "We got the underwater city art in by @kimeowsu !! Doesn’t it look amazing? 😍 I worked on the scene changes, which allow the player to go back and forth between rooms. Tell me why forwards scene changes took like 10 minutes and backwards took 2 and a half hours… at least it finally works!! 🥳 😅 🐈"}, {"post_id": 12215, "ts": "2026-06-19T22:47:01Z", "hours": 4.2386, "text": "We’ve moved on to ✨THE BIG BAD BOSS✨ of our underwater level: The SEA BUNNY. @graceyd and I worked on coding the bunny @kimeowsu drew. It can shoot bullets from its fur and launch a mad dash attack you can try to dodge! Who knew bunnies were so dangerous and…huge? 🫠 🧨 🐰"}, {"post_id": 11029, "ts": "2026-06-18T01:51:21Z", "hours": 3.1744, "text": "Oh yeah, that bomb that’s not supposed to explode and yet yeets you halfway across the screen? It’s not a bug……it’s a feature 😉 😎 😏"}, {"post_id": 7039, "ts": "2026-06-11T19:59:55Z", "hours": 2.1142, "text": "We got art for the cave the player will enter after passing the underwater level!! 🥳 @graceyd and I worked on coding a flashlight that will grow a vine to allow the player to climb it and reach the cliff! Enjoy the video 😊"}, {"post_id": 5996, "ts": "2026-06-10T01:39:28Z", "hours": 3.9172, "text": "Updates: We got some art by @graceyd ’s sister imported in! We’ve a few steps closer to creating an actual 2D scrolling game with the implementation of a camera to follow the player and factors in the environment (like fish and coral tubes!) that damage the player’s health. Video’s a bit laggy because my computer decided to be slow today XD but hope you enjoy!! Will bring more updates soon :D"}, {"post_id": 1637, "ts": "2026-06-03T19:22:49Z", "hours": 2.1739, "text": "@graceyd and I expanded on the coral tubes in our game by adding timers to make them turn off and on! When turned on, the tubes will suck the player in and cause damage in the future :C"}]...
|
Title: Boba Cats! by @Jewelia | Stardance
Devlogs Title: Boba Cats! by @Jewelia | Stardance
Devlogs:
@graceyd and I expanded on the coral tubes in our game by adding timers to make them turn off and on! When turned on, the tubes will suck the player in and cause damage in the future :C
Updates: We got some art by @graceyd ’s sister imported in! We’ve a few steps closer to creating an actual 2D scrolling game with the implementation of a camera to follow the player and factors in the environment (like fish and coral tubes!) that damage the player’s health. Video’s a bit laggy because my computer decided to be slow today XD but hope you enjoy!! Will bring more updates soon :D
We got art for the cave the player will enter after passing the underwater level!! 🥳 @graceyd and I worked on coding a flashlight that will grow a vine to allow the player to climb it and reach the cliff! Enjoy the video 😊
Oh yeah, that bomb that’s not supposed to explode and yet yeets you halfway across the screen? It’s not a bug……it’s a feature 😉 😎 😏
We’ve moved on to ✨THE BIG BAD BOSS✨ of our underwater level: The SEA BUNNY. @graceyd and I worked on coding the bunny @kimeowsu drew. It can shoot bullets from its fur and launch a mad dash attack you can try to dodge! Who knew bunnies were so dangerous and…huge? 🫠 🧨 🐰
We got the underwater city art in by @kimeowsu !! Doesn’t it look amazing? 😍 I worked on the scene changes, which allow the player to go back and forth between rooms. Tell me why forwards scene changes took like 10 minutes and backwards took 2 and a half hours… at least it finally works!! 🥳 😅 🐈
Dialogue and Story!! We’ve started to add the plot in the form of dialogue to our game, which we have decided to name Boba Cats! In order to get their ship fixed, the player must find brown sugar boba…but at what cost?
We’ve made a lot of progress on Boba Cats! Nearly all the rooms are added and we are close to finishing up the dialogue and story line! Thanks to @kimeowsu ’s amazing art and creativity and @graceyd ’s awesome coding and dedication, we hope to be able to ship the first level of our game very soon, so stay tuned!
We’ve been wrapping this game’s first level up, with some fixes and tweaks here and there, and adding the final cutscenes such as the one in the video! Aanddd….we might be getting a soundtrack from a special someone 😉
As we near our final stage of completing the first world of our project, we are smoothing everything out as well as adding final touches and the last major additions such as the plant shop shown below (spoilers: it doesn’t sell you plants). I’ve smoothed out the camera movement in the miniboss arena and added a gate (as shown in the video). I’ve also had fun creating the UI for a multiple file save system and inventory! That’s it for now!! (If we’re not counting some stuff that would be better for you to experience when you actually play the game 😉😉)
Today has been a rush to make final touches to our game! We hoped to be able to ship it today, but in favor of more thorough testing, we will probably end up shipping it later this week (hopefully tomorrow or the day after tomorrow or - 🤔 you get the idea right?) I’ve been working on the hidden pearls you can find in-game, as well as name labels to text boxes so it makes it easier for players to remember who is who! As for what the pearls do…I’ve taken a long time to work on that too! But you better come play our game to find out what they actually do 😉 if you can find them in the first place, that is! A couple hours were also spent adding major dialogue changes to one of the major plot points! We’re hoping with the new changes that the story will have more character depth and be more memorable for players! That’s it for now ~
Quick devlog before shipping!! @graceyd and I had our sisters test the game, and we’ve been working on fixing some bugs this past week! File saving should be fixed now, as well as some issues with the miniboss and other minor visual bugs! Hope you enjoy the game! Ship coming right up —>
Ships:
Boba Cats! is a 2D adventure game about a cat’s quest to find the fabled brown sugar boba! After an entire summer of working on it, our team ( @graceyd , @kimeowsu , and I) are ready to present the first world of our game! This world takes place under the ocean! What might a cat be doing underwater, you might ask? You’ll see! 😉 The first world is fully playable, but the soundtrack and extra touches will be added in future versions! We hope you all enjoy the cute pixel art, fun platforming challenges, creative storyline, and easter eggs! You can play the game on the [itch app] ( https://itch.io/app ) or download it for Windows!...
|
1792983329.0834324
|
1793069729.0834324
|
|
21500
|
HCR2 Setups Guide by @Alloy | Stardance
|
Alloy
|
1
|
63.0
|
846
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T11:58:58Z", "hours": 63.0, "multiplier": 13.44, "payout": 846, "blessing": "neutral", "text": "I made a web based information app that shows setups for each vehicle and track combination in the time attack game mode of Hill Climb Racing 2 (HCR2). The hardest thing was all of the queries for specific statistics, and since some of them also filtered by world records I just made a function to make world record queries cleaner and less messy. A second major problem was the filters on the search page, at the start were just simple select elements but they only take one value so the user can’t filter by more than one of each at once, to fix this I wanted to add a checkbox to each option but selects don’t support that so I needed to break my entire css by switching to details elements and restyling them so they stack nicely like the select elements before.", "repo": "https://github.com/Alloy-MVP/HCR2-Setups-Guide", "demo": "https://frenchtoast.pythonanywhere.com/"}]...
|
[{"post_id": 73537, "ts": "202 [{"post_id": 73537, "ts": "2026-09-25T10:57:09Z", "hours": 0.8028, "text": "FINAL DEVLOG: Added the new parts; Echo and Amplifier, added another part slot, increasing it to 4 since all world records use 4 parts now instead of 3. Took 4 hours to insert the world record setups (only all vehicle world records) for all 197 tracks as of 25/9/2026."}, {"post_id": 73425, "ts": "2026-09-25T02:03:28Z", "hours": 4.7644, "text": "Fixed a bug where inserting setups with a negative number were getting through because they are the only inputs not validated by sqlalchemy. Changed the validation to use the database data instead of the lists at the top of the .py, and therefore also added every single vehicle, part, and track to replace it in the db. Installed pylint to help my code look cleaner and changed everything it was complaining about. Also cleared the database so its empty and added all of the in game tracks and vehicles to replace the test data."}, {"post_id": 52034, "ts": "2026-08-22T02:16:53Z", "hours": 2.0461, "text": "Changed the tuning parts on setups and search page to icons, reversed the order of setups on the setups page so recently added ones are shown at the top, added a max time limit (32 bit integer limit). Tons of bug fixes: the search filters now handle more than one value, checking “World Records” doesnt wipe other filters, filters arent wiped when the page reloads after searching for a setup, rows per page defaults to 50, fixed the settings returning the error statement if rows per page is empty."}, {"post_id": 51494, "ts": "2026-08-21T07:31:36Z", "hours": 0.7431, "text": "Small tweak to the backend validation for the settings inputs, database path is now relative instead of absolute, added a second SQLAlchemy error catcher on top of the python ones, removed the .venv so a new one is made when the repository is cloned. (now it should be runable)"}, {"post_id": 51359, "ts": "2026-08-20T23:45:02Z", "hours": 0.8308, "text": "Changed most of the lists to now use list comprehension, made the error handler handle every error code from 400 to 599. Updated the error page to not break the flow. The app is now fully runable (hopefully) with instructions on the readme."}, {"post_id": 50800, "ts": "2026-08-20T06:19:49Z", "hours": 2.0058, "text": "Added a clear filters button to the insert form, added a shadow to the home page title. Changed the backend for time to not allow times > 32 bit int limit, changed the rows per page setting to be able to type custom amounts while still suggesting 5,10,20,30,40,50 with back end validation. Added a small section in information about insert field parameters. The setups table order is now reversed so new inserts are shown at the top. Settings errors are now shown on pages. Cleaned up some backend validation, the error messages now dont show for empty fields, created a requrements.txt and a readme on how to run the app."}, {"post_id": 49273, "ts": "2026-08-17T23:45:16Z", "hours": 0.8703, "text": "Added a 404 error handler and images of tuning parts to replace the text."}, {"post_id": 47929, "ts": "2026-08-16T06:12:15Z", "hours": 3.1731, "text": "Finished most of the home page, added a information section with a video, added 3 containers with quick navigation links, statistics, and fastest times on the home page, also added a background."}, {"post_id": 47790, "ts": "2026-08-15T23:28:52Z", "hours": 1.8481, "text": "Made the button borders brighter to be more visible, changed the content backgrounds to a gradient. Changed the setups table to look identical to search. Added a delete button to the all setups table to easily delete specific setups."}, {"post_id": 47320, "ts": "2026-08-15T06:19:10Z", "hours": 4.9217, "text": "Big Update: Moved links to the right and added a settings menu, added a title, made all inputs and filters have hover effects. Settings menu has a toggle for light/dark theme, and a way to select how many rows are shown in all tables (default is 10). Changed all of the css colors to variables for the settings."}, {"post_id": 46610, "ts": "2026-08-13T23:34:27Z", "hours": 2.1578, "text": "Search bar now fully supports searching for more than one word."}, {"post_id": 45471, "ts": "2026-08-11T23:30:33Z", "hours": 1.6261, "text": "The player, vehicle, and track filters can all take more than one filter so the search page can now show results from multiple players, vehicles, and tracks."}, {"post_id": 43698, "ts": "2026-08-09T03:15:24Z", "hours": 2.5139, "text": "Revamped the css again, the insert and delete forms are being moved to the setups table. No screenshot until the next devlog because its a mess right now."}, {"post_id": 43069, "ts": "2026-08-08T04:14:05Z", "hours": 1.5303, "text": "Added a leaderboard for the most used part setups, Changed how the parts are submitted, they are now sorted so there cant be multiple setups of the same parts combination but different orders, duplicates will just reuse an already existing one."}, {"post_id": 42928, "ts": "2026-08-07T22:11:58Z", "hours": 2.7381, "text": "Added a script that counts how many wrs every single player has and displays on the leaderboard page. Made the player field autoselect a name if you type it with wrong capitalization, for example ndwg will autoswitch to Ndwg."}, {"post_id": 39258, "ts": "2026-08-02T03:35:36Z", "hours": 2.9344, "text": "Completely finished styling the search page, also changed the filters to details instead of select so i can use checkboxes inside."}, {"post_id": 39170, "ts": "2026-08-01T22:55:05Z", "hours": 0.7469, "text": "World records filter is fully finished"}, {"post_id": 38508, "ts": "2026-07-31T22:44:24Z", "hours": 3.4031, "text": "Finished the backend of the wr filter, the fastest time with x vehicle and y track is highlighted in yellow."}, {"post_id": 36188, "ts": "2026-07-28T03:29:06Z", "hours": 1.2111, "text": "Finally found out about back_populates, players that arent currently in a setup now get deleted."}, {"post_id": 35045, "ts": "2026-07-26T06:34:23Z", "hours": 1.4058, "text": "Styled the filters section, added hover styling for links, buttons, and table data."}, {"post_id": 34983, "ts": "2026-07-26T03:54:43Z", "hours": 3.9231, "text": "Completely restarted the css, started styling the search bar filters and navigation bar."}, {"post_id": 29886, "ts": "2026-07-17T01:32:40Z", "hours": 1.055, "text": "Changed the filters to only show players,tracks, and vehicles that actually have a setup. Made the vehicle and track filter setups by time (lowest to highes) so the first time (fastest) is at the top."}, {"post_id": 29282, "ts": "2026-07-16T02:58:34Z", "hours": 0.8175, "text": "Added warnings for invalid filters (changed the values using inspect)"}, {"post_id": 28723, "ts": "2026-07-15T05:01:13Z", "hours": 1.4858, "text": "Made the filter fields functional but are misssing back end validation"}, {"post_id": 26951, "ts": "2026-07-12T01:24:49Z", "hours": 2.71, "text": "Added a stats/search page and moved the search bar there, also added a way to filter by players and vehicles (unfuctional)."}, {"post_id": 21229, "ts": "2026-07-03T02:00:51Z", "hours": 1.4261, "text": "Added a search bar to filter specific setups but still has some bugs (first table is all data, second table is data from the search)"}, {"post_id": 19058, "ts": "2026-06-30T07:43:15Z", "hours": 1.2028, "text": "Made the delete table functional and removes rows from setups but not the sub tables where the individual data is."}, {"post_id": 16718, "ts": "2026-06-27T05:02:23Z", "hours": 2.5661, "text": "Added checks for duplicates, missing fields, and times automatically updates if a time that is faster than the previous for a specific setup is submitted. Automatically adds the data to the setups table and puts the individual field data into their respective tables as well."}, {"post_id": 15998, "ts": "2026-06-25T23:45:29Z", "hours": 2.5778, "text": "Added some back end validation checks and added a list to check if the track field matches what can actually be inserted, also used a jinja loop to make options for each individual track in the list for the form."}, {"post_id": 14169, "ts": "2026-06-23T04:56:34Z", "hours": 2.9508, "text": "Basic input form for the database if every field is filled and correct"}]...
|
Title: HCR2 Setups Guide by @Alloy | Stardance
De Title: HCR2 Setups Guide by @Alloy | Stardance
Devlogs:
Basic input form for the database if every field is filled and correct
Added some back end validation checks and added a list to check if the track field matches what can actually be inserted, also used a jinja loop to make options for each individual track in the list for the form.
Added checks for duplicates, missing fields, and times automatically updates if a time that is faster than the previous for a specific setup is submitted. Automatically adds the data to the setups table and puts the individual field data into their respective tables as well.
Made the delete table functional and removes rows from setups but not the sub tables where the individual data is.
Added a search bar to filter specific setups but still has some bugs (first table is all data, second table is data from the search)
Added a stats/search page and moved the search bar there, also added a way to filter by players and vehicles (unfuctional).
Made the filter fields functional but are misssing back end validation
Added warnings for invalid filters (changed the values using inspect)
Changed the filters to only show players,tracks, and vehicles that actually have a setup. Made the vehicle and track filter setups by time (lowest to highes) so the first time (fastest) is at the top.
Completely restarted the css, started styling the search bar filters and navigation bar.
Styled the filters section, added hover styling for links, buttons, and table data.
Finally found out about back_populates, players that arent currently in a setup now get deleted.
Finished the backend of the wr filter, the fastest time with x vehicle and y track is highlighted in yellow.
World records filter is fully finished
Completely finished styling the search page, also changed the filters to details instead of select so i can use checkboxes inside.
Added a script that counts how many wrs every single player has and displays on the leaderboard page. Made the player field autoselect a name if you type it with wrong capitalization, for example ndwg will autoswitch to Ndwg.
Added a leaderboard for the most used part setups, Changed how the parts are submitted, they are now sorted so there cant be multiple setups of the same parts combination but different orders, duplicates will just reuse an already existing one.
Revamped the css again, the insert and delete forms are being moved to the setups table. No screenshot until the next devlog because its a mess right now.
The player, vehicle, and track filters can all take more than one filter so the search page can now show results from multiple players, vehicles, and tracks.
Search bar now fully supports searching for more than one word.
Big Update: Moved links to the right and added a settings menu, added a title, made all inputs and filters have hover effects. Settings menu has a toggle for light/dark theme, and a way to select how many rows are shown in all tables (default is 10). Changed all of the css colors to variables for the settings.
Made the button borders brighter to be more visible, changed the content backgrounds to a gradient. Changed the setups table to look identical to search. Added a delete button to the all setups table to easily delete specific setups.
Finished most of the home page, added a information section with a video, added 3 containers with quick navigation links, statistics, and fastest times on the home page, also added a background.
Added a 404 error handler and images of tuning parts to replace the text.
Added a clear filters button to the insert form, added a shadow to the home page title. Changed the backend for time to not allow times > 32 bit int limit, changed the rows per page setting to be able to type custom amounts while still suggesting 5,10,20,30,40,50 with back end validation. Added a small section in information about insert field parameters. The setups table order is now reversed so new inserts are shown at the top. Settings errors are now shown on pages. Cleaned up some backend validation, the error messages now dont show for empty fields, created a requrements.txt and a readme on how to run the app.
Changed most of the lists to now use list comprehension, made the error handler handle every error code from 400 to 599. Updated the error page to not break the flow. The app is now fully runable (hopefully) with instructions on the readme.
Small tweak to the backend validation for the settings inputs, database path is now relative instead of absolute, added a second SQLAlchemy error catcher on top of the python ones, removed the .venv so a new one is made when the repository is cloned. (now it should be runable)
Changed the tuning parts on setups and search page to icons, reversed the order of setups on the setups page so recently added ones are shown at the top, added a max time limit (32 bit integer limit). Tons of bug fixes: the search filters now handle more than one value, checking “World Records” doesnt wipe other filters, filters arent wiped when the page reloads after searching for a setup, rows per page defaults to 50, fixed the settings returning the error statement if rows per page is empty.
Fixed a bug where inserting setups with a negative number were getting through because they are the only inputs not validated by sqlalchemy. Changed the validation to use the database data instead of the lists at the top of the .py, and therefore also added every single vehicle, part, and track to replace it in the db. Installed pylint to help my code look cleaner and changed everything it was complaining about. Also cleared the database so its empty and added all of the in game tracks and vehicles to replace the test data.
FINAL DEVLOG: Added the new parts; Echo and Amplifier, added another part slot, increasing it to 4 since all world records use 4 parts now instead of 3. Took 4 hours to insert the world record setups (only all vehicle world records) for all 197 tracks as of 25/9/2026.
Ships:
I made a web based information app that shows setups for each vehicle and track combination in the time attack game mode of Hill Climb Racing 2 (HCR2). The hardest thing was all of the queries for specific statistics, and since some of them also filtered by world records I just made a function to make world record queries cleaner and less messy. A second major problem was the filters on the search page, at the start were just simple select elements but they only take one value so the user can’t filter by more than one of each at once, to fix this I wanted to add a checkbox to each option but selects don’t support that so I needed to break my entire css by switching to details elements and restyling them so they stack nicely like the select elements before....
|
1793008168.6604137
|
1793094568.6604137
|
|
26517
|
Exopossibilities by @Skye | Stardance
|
Skye
|
2
|
63.0
|
909
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T20:04:39Z", "hours": 50.0, "multiplier": 15.94, "payout": 791, "blessing": "neutral", "text": "Hi everyone! This is my first ever website I’ve made by myself and I’m super proud to share it with you guys! It’s called Exopossibilities (Exoplanet and Possibilities blended into one). It uses a whole bunch of data from NASA’s Exoplanet Archive and presents in a fun way. I started this summer by making the base of the website (the home, discover, and planet pages), and have since added a bunch of fun features! I used Claude for help a lot with JS at the beginning, but have since learned how to do most of it myself, which I’m super proud of. The point of this project is to bring together my interests and present them in a way that is fun for other people to explore and learn from. There’s a quiz to match exoplanets to your preferences, a glossary for words you don’t know, and so much more! I put a lot of work into this project and really hope you enjoy it!", "repo": "https://github.com/julietmeletta/Exopossibilities", "demo": "https://julietmeletta.github.io/Exopossibilities/index"}, {"ship_num": 2, "ts": "2026-07-06T03:13:26Z", "hours": 13.0, "multiplier": 9.22, "payout": 118, "blessing": "neutral", "text": "I created a website and named it Exopossibilities, basically blending the word possibilities into the word Exoplanets. On my website, the user can navigate to the Discover page, where they see a list of every exoplanet in NASA’s archive(over 5,000). They can then explore info on each planet, search for a specific planet, filter to see planets that fit specific criteria, i.e. Each box containing the planet’s name and info is able to be clicked on, which sends the user to a page focused solely on that planet. Each planet’s page displays the planet’s info, how long it would take to get to the planet, how living on the planet would affect the human body, and what would be needed to live on that planet, if possible at all. I’m super proud because this was all super unfamiliar to me. This was my first website, it was my first time using APIs, my first time using JS at all, i.e. As expected, I ran into some problems (for example, sometimes the list of planets just wouldn’t load: yes it was a very silly mistake of forgetting to rename one of the filters in my JS file) but was able to troubleshoot/debug to get everything working. I made this project because I’m interested in aerospace engineering and in biomedical engineering, so the idea behind the project was to blend the two by exploring the effects on the human body of living on different exoplanets. I hope you guys enjoy my project!", "repo": "https://github.com/julietmeletta/Exopossibilities", "demo": "https://julietmeletta.github.io/Exopossibilities/index"}]...
|
[{"post_id": 55773, "ts": "202 [{"post_id": 55773, "ts": "2026-08-27T19:32:22Z", "hours": 1.9789, "text": "Ready to Ship!! I haven’t done much since the last devlog, just some random fixes, polishing whatever. But I’ve added a bunch since my last ship that I’ll talk more about in my ship itself!"}, {"post_id": 54681, "ts": "2026-08-25T18:55:05Z", "hours": 6.4967, "text": "I added some statistics on a page! It’s not much but it was fun to make and I like it. There’s 6 different charts that each show different data. I think it’s cool to see and fits in with the “discover” theme. Currently I’m working on making it work well on mobile because rn it looks like it needs fixing. When I’m done I think I’m ready to ship!"}, {"post_id": 53153, "ts": "2026-08-23T16:17:58Z", "hours": 3.2425, "text": "Introducing Favorites! Used local storage so I’m not taking anyone’s info lol. It allows you to heart any planet and filter to favorites on the discover page. This way you can keep track of the planets you like! I like finding the matches of planets I like using the quiz then favoriting those!"}, {"post_id": 47729, "ts": "2026-08-15T20:47:06Z", "hours": 3.0519, "text": "I’ve been playing around with the locator page. For now I have it like this, where the info is entered and it tells the user where (better CSS than last devlog in my opinion). I don’t know if I can make it into a whole map thing mostly because I would probably use SVG but I don’t really have any experience with that. Anyway, if I have tons of extra time I might try that. For now, I’m just fixing the styling on mobile."}, {"post_id": 46666, "ts": "2026-08-14T03:09:32Z", "hours": 4.6506, "text": "So - another (not done) new feature. This one is kind of different. I found ra and dec values in the NASA archive I’ve been using and came up with this idea. My original idea was to make a map of the exoplanet and then you could search for one and it would find it on the map. There are sites that do same type of thing like Stellarium or the app Night Sky. I might do that or something like that later but this is what I have for now. It’s basically the math and JS that the map would use, just not made into a map. I’m hoping to make this more sophisticated than it currently is but I’m not sure quite how far I’ll be able to take it. I hope that the end product for this feature turns out well. Edit: When I say map I mean like a 360 view of the night sky from the ground type thing (you can look at Stellarium to understand what I mean if you are curious)."}, {"post_id": 45328, "ts": "2026-08-11T18:28:35Z", "hours": 2.3153, "text": "I added a print button on the planet page! Next to the side navigation button, there’s a button with the print symbol that allows the user to print that planet’s page. Lot of styling went into it to figure out how to get it to show the background image and colors and stuff but overall it was pretty simple to make."}, {"post_id": 44940, "ts": "2026-08-11T01:14:31Z", "hours": 3.0764, "text": "Added a navigation side bar menu! Not in love with the styling, so maybe I will change up the CSS to make it prettier. But overall it works fully and is much more helpful than navigating through the site using home and back buttons."}, {"post_id": 44250, "ts": "2026-08-09T21:36:52Z", "hours": 5.9186, "text": "I added a glossary. When my sister was looking at my project I realized there’s a lot of terms some people might not know so I made a page explaining those terms. I also have been keeping my project updated to work on mobile."}, {"post_id": 38479, "ts": "2026-07-31T21:40:58Z", "hours": 1.9289, "text": "Guys I need help. I have a question and I can’t figure out what I should do. I have a whole bunch of files for my website I’ve been making and I don’t know how I’m supposed to organize my files. You may be thinking, this isn’t really a problem. Well I guess you’re right in the sense that it doesn’t affect how my website works. BUT it’s like lowkey making me anxious because my file list keeps growing and whatnot. I tried to start sorting the files. I have folders for the JS files, the JSON files, and the images. Do I keep this pattern and make a folder for the html files and another for css files? I guess my real question is this: Is there a conventional way of organizing them that I’m supposed to know? If not, is there like a best way to do it?"}, {"post_id": 37691, "ts": "2026-07-30T16:16:58Z", "hours": 7.0717, "text": "So I was thinking about like what I could add to my site and came up with some fun ideas. First, I added a formula (from NASA’s website) to calculate the ESI (Earth Similarity Index) of each exoplanet. Then, I made certain exoplanets “medalists”. Basically if a exoplanet is like unique in a quantitative way (with the data I’m already using) then it is awarded a medal. Some examples are largest/smallest mass, highest/lowest ESI Score, etc. In total, right now, there are 11 exoplanets with medals (out of like 6,000 total). Then I added having a medal to the filters and connected it to a button on the home screen."}, {"post_id": 29699, "ts": "2026-07-16T19:47:15Z", "hours": 1.7039, "text": "I APOLOGIZE FOR THE 18 COMMITS THAT ARE ALL FOR THE SAME THING. So I decided to style the site for mobile as well as laptop because it worked okay on mobile but was very zoomed out and stuff. So it’s not like I have vs code on my phone and there probably is an easier way but I didn’t want to figure out getting a live server on my phone so I kept changing the CSS, committing, checking it on my phone, and repeat. But hey - now it looks better for mobile!"}, {"post_id": 29264, "ts": "2026-07-16T02:17:50Z", "hours": 1.1181, "text": "Introducing Planet of the Day and some neat CSS changes! I added a planet of the day on the home page which is clickable just like the cards on the discover page. I also added skeleton loading states for the list of planets on the discover page. I noticed that it was consistently taking time to load and render the planets (not surprisingly) so I added it to make it feel more polished and less sharp. And yes, the screenshot of the loading states was timed so that I caught them on the screen before the planets appeared."}, {"post_id": 29145, "ts": "2026-07-15T20:33:59Z", "hours": 2.8753, "text": "I added a new feature! A quiz that matches the user’s preferences with exoplanets. The user answers 5 questions and gets a collection of exoplanets that match those preferences!"}, {"post_id": 28859, "ts": "2026-07-15T12:41:13Z", "hours": 1.6367, "text": "Update - Changes Since My Ship Photos! As I mentioned in my last 2 devlogs, I changed the planets’ photos. I used to have a single blue planet that was on every planet’s page and that seemed boring, so I changed it. Most exoplanets don’t actually have photos, so I took a handful of photos and sorted the planets into types. Now, there is a photo for each type and the planet’s corresponding photo is on its planet page and its card in the discover page. I have a photo for each type: terrestrial, super-earth, Neptune-like, mini-Neptune, gas giant, and hot Jupiter. Mini-Neptunes and hot Jupiters are really just subsections of Neptune-like and gas giants, respectively, but I decided to give them their own photo anyways. Random Planet Button! I added a button right next to the filters that brings the user to a random planet page obeying the filters that they set. I thought it’s a fun little feature to make my site a bit more fun. Hopefully, I’ll be adding a couple other features too. I made like some minor CSS changes to the filters and stuff. Barely noticeable but I think that little part looks better than before. Yay! More to come!"}, {"post_id": 27429, "ts": "2026-07-13T00:02:15Z", "hours": 1.2636, "text": "So … I added the images to the discover page, which makes it less boring. The planets are sorted into 6 categories, each with a different photo. I also finally sorted my files. Yay! I wasn’t quite sure how I should organize them - like do I put css in one folder and html in another? So I left some unorganized for now."}, {"post_id": 26975, "ts": "2026-07-12T02:57:00Z", "hours": 1.3003, "text": "A lot of people who reviewed my ship mentioned all the planet pages having the same image - which is totally fair. I felt the same way (and so did my sister), so I decided to do something about it. Most exoplanets just simply don’t have photos, so it’s not like I could put a photo of each planet. I decided to put different photos for different types of planets (terrestrial, super earth, neptune-like, gas giant). Hope you guys like it!"}, {"post_id": 23246, "ts": "2026-07-06T02:28:12Z", "hours": 1.9897, "text": "I give you fonts ! And I’m done! (for now). I want to try and add a cool feature and do some other random stuff at some point but ta-da!"}, {"post_id": 22973, "ts": "2026-07-05T17:34:03Z", "hours": 7.4275, "text": "Finished the first draft of my website. I put an example image of what one of the planet pages looks like. I will probably do a little more CSS work and maybe add some new features but I’m pretty happy with what I have so far. This is my first website that I’ve made myself. It’s also my first time using APIs in a project which was super cool."}, {"post_id": 18833, "ts": "2026-06-30T01:11:16Z", "hours": 2.2908, "text": "I finished the filters and detailed blocks for each exoplanet! Next step is each exoplanet getting an individual page with more details."}, {"post_id": 18399, "ts": "2026-06-29T15:17:03Z", "hours": 1.0153, "text": "I have the API of exoplanets from NASA in my project and added a search bar. Next step is to add clickable cards to show the data of each planet, then filters for searching, etc. The API I used has info on each planet’s name, radius, mass, distance from earth, and equilibrium temp. I’ll get around to better CSS at the end, right now it’s kind of sad looking. Then I’ll tie the info to the effect on the human body."}, {"post_id": 17766, "ts": "2026-06-28T18:14:30Z", "hours": 0.4517, "text": "Hi everyone! This is my first ever devlog and I’m so excited! I’ve only just started my project, for now it’s called Exopossibilities. I’m planning on using an API to have data on exoplanets then users can see what would happen to a human on a specific exoplanets. I’m planning to use a second API to have information on how the human body is affected by certain environmental factors(pressure, extreme temps, etc.)."}]...
|
Title: Exopossibilities by @Skye | Stardance
Devl Title: Exopossibilities by @Skye | Stardance
Devlogs:
Hi everyone! This is my first ever devlog and I’m so excited! I’ve only just started my project, for now it’s called Exopossibilities. I’m planning on using an API to have data on exoplanets then users can see what would happen to a human on a specific exoplanets. I’m planning to use a second API to have information on how the human body is affected by certain environmental factors(pressure, extreme temps, etc.).
I have the API of exoplanets from NASA in my project and added a search bar. Next step is to add clickable cards to show the data of each planet, then filters for searching, etc. The API I used has info on each planet’s name, radius, mass, distance from earth, and equilibrium temp. I’ll get around to better CSS at the end, right now it’s kind of sad looking. Then I’ll tie the info to the effect on the human body.
I finished the filters and detailed blocks for each exoplanet! Next step is each exoplanet getting an individual page with more details.
Finished the first draft of my website. I put an example image of what one of the planet pages looks like. I will probably do a little more CSS work and maybe add some new features but I’m pretty happy with what I have so far. This is my first website that I’ve made myself. It’s also my first time using APIs in a project which was super cool.
I give you fonts ! And I’m done! (for now). I want to try and add a cool feature and do some other random stuff at some point but ta-da!
A lot of people who reviewed my ship mentioned all the planet pages having the same image - which is totally fair. I felt the same way (and so did my sister), so I decided to do something about it. Most exoplanets just simply don’t have photos, so it’s not like I could put a photo of each planet. I decided to put different photos for different types of planets (terrestrial, super earth, neptune-like, gas giant). Hope you guys like it!
So … I added the images to the discover page, which makes it less boring. The planets are sorted into 6 categories, each with a different photo. I also finally sorted my files. Yay! I wasn’t quite sure how I should organize them - like do I put css in one folder and html in another? So I left some unorganized for now.
Update - Changes Since My Ship Photos! As I mentioned in my last 2 devlogs, I changed the planets’ photos. I used to have a single blue planet that was on every planet’s page and that seemed boring, so I changed it. Most exoplanets don’t actually have photos, so I took a handful of photos and sorted the planets into types. Now, there is a photo for each type and the planet’s corresponding photo is on its planet page and its card in the discover page. I have a photo for each type: terrestrial, super-earth, Neptune-like, mini-Neptune, gas giant, and hot Jupiter. Mini-Neptunes and hot Jupiters are really just subsections of Neptune-like and gas giants, respectively, but I decided to give them their own photo anyways. Random Planet Button! I added a button right next to the filters that brings the user to a random planet page obeying the filters that they set. I thought it’s a fun little feature to make my site a bit more fun. Hopefully, I’ll be adding a couple other features too. I made like some minor CSS changes to the filters and stuff. Barely noticeable but I think that little part looks better than before. Yay! More to come!
I added a new feature! A quiz that matches the user’s preferences with exoplanets. The user answers 5 questions and gets a collection of exoplanets that match those preferences!
Introducing Planet of the Day and some neat CSS changes! I added a planet of the day on the home page which is clickable just like the cards on the discover page. I also added skeleton loading states for the list of planets on the discover page. I noticed that it was consistently taking time to load and render the planets (not surprisingly) so I added it to make it feel more polished and less sharp. And yes, the screenshot of the loading states was timed so that I caught them on the screen before the planets appeared.
I APOLOGIZE FOR THE 18 COMMITS THAT ARE ALL FOR THE SAME THING. So I decided to style the site for mobile as well as laptop because it worked okay on mobile but was very zoomed out and stuff. So it’s not like I have vs code on my phone and there probably is an easier way but I didn’t want to figure out getting a live server on my phone so I kept changing the CSS, committing, checking it on my phone, and repeat. But hey - now it looks better for mobile!
So I was thinking about like what I could add to my site and came up with some fun ideas. First, I added a formula (from NASA’s website) to calculate the ESI (Earth Similarity Index) of each exoplanet. Then, I made certain exoplanets “medalists”. Basically if a exoplanet is like unique in a quantitative way (with the data I’m already using) then it is awarded a medal. Some examples are largest/smallest mass, highest/lowest ESI Score, etc. In total, right now, there are 11 exoplanets with medals (out of like 6,000 total). Then I added having a medal to the filters and connected it to a button on the home screen.
Guys I need help. I have a question and I can’t figure out what I should do. I have a whole bunch of files for my website I’ve been making and I don’t know how I’m supposed to organize my files. You may be thinking, this isn’t really a problem. Well I guess you’re right in the sense that it doesn’t affect how my website works. BUT it’s like lowkey making me anxious because my file list keeps growing and whatnot. I tried to start sorting the files. I have folders for the JS files, the JSON files, and the images. Do I keep this pattern and make a folder for the html files and another for css files? I guess my real question is this: Is there a conventional way of organizing them that I’m supposed to know? If not, is there like a best way to do it?
I added a glossary. When my sister was looking at my project I realized there’s a lot of terms some people might not know so I made a page explaining those terms. I also have been keeping my project updated to work on mobile.
Added a navigation side bar menu! Not in love with the styling, so maybe I will change up the CSS to make it prettier. But overall it works fully and is much more helpful than navigating through the site using home and back buttons.
I added a print button on the planet page! Next to the side navigation button, there’s a button with the print symbol that allows the user to print that planet’s page. Lot of styling went into it to figure out how to get it to show the background image and colors and stuff but overall it was pretty simple to make.
So - another (not done) new feature. This one is kind of different. I found ra and dec values in the NASA archive I’ve been using and came up with this idea. My original idea was to make a map of the exoplanet and then you could search for one and it would find it on the map. There are sites that do same type of thing like Stellarium or the app Night Sky. I might do that or something like that later but this is what I have for now. It’s basically the math and JS that the map would use, just not made into a map. I’m hoping to make this more sophisticated than it currently is but I’m not sure quite how far I’ll be able to take it. I hope that the end product for this feature turns out well. Edit: When I say map I mean like a 360 view of the night sky from the ground type thing (you can look at Stellarium to understand what I mean if you are curious).
I’ve been playing around with the locator page. For now I have it like this, where the info is entered and it tells the user where (better CSS than last devlog in my opinion). I don’t know if I can make it into a whole map thing mostly because I would probably use SVG but I don’t really have any experience with that. Anyway, if I have tons of extra time I might try that. For now, I’m just fixing the styling on mobile.
Introducing Favorites! Used local storage so I’m not taking anyone’s info lol. It allows you to heart any planet and filter to favorites on the discover page. This way you can keep track of the planets you like! I like finding the matches of planets I like using the quiz then favoriting those!
I added some statistics on a page! It’s not much but it was fun to make and I like it. There’s 6 different charts that each show different data. I think it’s cool to see and fits in with the “discover” theme. Currently I’m working on making it work well on mobile because rn it looks like it needs fixing. When I’m done I think I’m ready to ship!
Ready to Ship!! I haven’t done much since the last devlog, just some random fixes, polishing whatever. But I’ve added a bunch since my last ship that I’ll talk more about in my ship itself!
Ships:
I created a website and named it Exopossibilities, basically blending the word possibilities into the word Exoplanets. On my website, the user can navigate to the Discover page, where they see a list of every exoplanet in NASA’s archive(over 5,000). They can then explore info on each planet, search for a specific planet, filter to see planets that fit specific criteria, i.e. Each box containing the planet’s name and info is able to be clicked on, which sends the user to a page focused solely on that planet. Each planet’s page displays the planet’s info, how long it would take to get to the planet, how living on the planet would affect the human body, and what would be needed to live on that planet, if possible at all. I’m super proud because this was all super unfamiliar to me. This was my first website, it was my first time using APIs, my first time using JS at all, i.e. As expected, I ran into some problems (for example, sometimes the list of planets just wouldn’t load: yes it was a very silly mistake of forgetting to rename one of the filters in my JS file) but was able to troubleshoot/debug to get everything working. I made this project because I’m interested in aerospace engineering and in biomedical engineering, so the idea behind the project was to blend the two by exploring the effects on the human body of living on different exoplanets. I hope you guys enjoy my project!
Hi everyone! This is my first ever website I’ve made by myself and I’m super proud to share it with you guys! It’s called Exopossibilities (Exoplanet and Possibilities blended into one). It uses a whole bunch of data from NASA’s Exoplanet Archive and presents in a fun way. I started this summer by making the base of the website (the home, discover, and planet pages), and have since added a bunch of fun features! I used Claude for help a lot with JS at the beginning, but have since learned how to do most of it myself, which I’m super proud of. The point of this project is to bring together my interests and present them in a way that is fun for other people to explore and learn from. There’s a quiz to match exoplanets to your preferences, a glossary for words you don’t know, and so much more! I put a lot of work into this project and really hope you enjoy it!...
|
1793105286.3802345
|
1793191686.3802345
|
|
39451
|
Olympus Mons: The Voyage by @AfdalFavas | Stardanc Olympus Mons: The Voyage by @AfdalFavas | Stardance...
|
AfdalFavas
|
2
|
63.0
|
975
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T20:40:11Z", "hours": 3.0, "multiplier": 16.95, "payout": 55, "blessing": "neutral", "text": "This is ship 2, I have drastically improved the README.md file, improved the overall game optimization. This isn’t a big ship, everything was mostly bug-fixing and working on feedback, and also improving my README file. Here are the controls: WASD - Move Space Bar - Reset Rotation, you will use this a lot, the Mars environment is annoying Left Shift - Brake, Don’t try using S, that is for reversing only E - Open in-game menu If there is anything wrong with the game, please include that in the feedback specifically and which rating component was affected by it. README is in Github Repo To try the game click “Try Project” below, which will redirect you to tich.io, from there you can play it. It might load for some time.", "repo": "https://github.com/afdal-f/Olympus-Mons-The-Voyage", "demo": "https://afdal-f.itch.io/olympus-mons-the-voyage"}, {"ship_num": 2, "ts": "2026-08-23T10:45:50Z", "hours": 60.0, "multiplier": 15.88, "payout": 920, "blessing": "neutral", "text": "So this project is a project in which you drive a rover, attempt dodging rocks from your spawn to a checkpoint which is the Caldera of Olympus Mons. The game is set on Olympus Mons the Solar System’s largest mountain. There are four checkpoints with the last one being the final Point (Caldera). There are a few phenomena you will experience like dust devils, which are basically harmless mini tornadoes, and dust storms, which actually do have wind effects and you will need to drive through it. A dust storm is spawned where you are at the spawn, so you will have to struggle initially. Be fast too, otherwise a dust storm is spawned every…. about 500 seconds. Once you reach the final Point, your rank will be shown, which is calculated based on how quickly you reached the final point. WASD - Movement E - Open inventory C - Close inventory Space Bar - reset movement and rotation (you will find yourself using this a lot because of Mars’s gravity. Left Shift - Brake", "repo": "https://github.com/afdal-f/Olympus-Mons-The-Voyage", "demo": "https://afdal-f.itch.io/olympus-mons-the-voyage"}]...
|
[{"post_id": 56799, "ts": "202 [{"post_id": 56799, "ts": "2026-08-28T18:32:00Z", "hours": 3.2736, "text": "Devlog 10 v.1.1.0 So this is probably my last last devlog; this is the last devlog (I think) before my second ship. The second ship is essentially based on feedback from people who rated my first. Changes since v.1.0.0 Added settings for volume. Improved rover stability. Optimized performance. Things I was hoping to add More settings that edit a lot of the values available, like the amount of rocks being spawned; the rocks might get too annoying for some people. Multiplayer modes More feature-packed things I’m probably not going to add this to the project because after this I have exams, and then more exams, so yeah. Challenges I had to overcome Learning Unity by myself for the first time Learning Blender by myself for the first time Having to learn C#, though this was easier because I already know C++ Things I learnt Game development is NOT easy You can’t make Forza Horizon 5 in a month Things exist outside of school Thanks to everyone who rated my first ship. I didn’t realize how much people rated projects, and I was losing hope I’d get any good feedback, but the feedback I got was amazing, pointed out exactly what the problem was and how they would like it fixed, exactly what they liked about my project, etc. Below is the complete playthrough of the game, from getting out of that dust storm to getting to the final point and falling down the Caldera of Olympus Mons."}, {"post_id": 52960, "ts": "2026-08-23T10:39:36Z", "hours": 6.2783, "text": "Devlog 09 v.1.0.0 This is the last devlog for this project, and I did NOT have enough time because school came by way faster than i thought. But it is what is is"}, {"post_id": 51828, "ts": "2026-08-21T18:01:20Z", "hours": 11.9369, "text": "DUST STORMMSSSS Devlog 08 v.0.3.0 I’m gonna make this short… I added dust storms, Music, a way better UI, and better vehicle physics. I attempted a better camera movement feature and failed miserably. I added a cool in game menu:"}, {"post_id": 50197, "ts": "2026-08-19T10:23:55Z", "hours": 3.9958, "text": "Devlog 07 v.0.2.0 So the last devlog was v.0.1.0; this is just the less-buggy, actually normal-looking UI version. Anyway, I just realized I have only 2 days to finish my project because I am going back to the UAE. My summer vacay in India is over, and in the UAE I’ll be way too busy with school stuff. At least it was nice while it lasted. I’m gonna have to pull all-nighters smhw … But honestly, I’m happy about the project till now; for a first game, I think it looks gud. Changes since v.0.1.0 Added a smarter particle system. Added way better UI, all made in Canva. I lowk spent too much time on the credits. I added ambient music Things I need for v.0.3.0 or at least v.0.5.0 Actual land structures Dust dust devils Clouds"}, {"post_id": 48845, "ts": "2026-08-17T12:07:48Z", "hours": 10.4806, "text": "Devlog 06 So basically, this is probably going to be the alpha version of my project… It is very under-polished, especially the UI, but I hope it is good enough for playtesting! I want to upload it on itch.io for feedback before I start polishing and adding finishing touches and features. But I have no idea if uploading to itch.io is allowed. Changes: Added UI, including the main menu, credits, and HUD. Added particle effects to the rover. Added a better mesh I made in Blender. Added lights and a cool backlight when you click the brakes Added checkpoints; there are four of them, with the fourth being called the finalPoint. Added a pointer object that points you in the right direction for the next checkpoint. Things I need to add: The checkpoints being actually visible, instead of just boring nothingness. A way better UI; currently it’s just text and primitive white squares. Better particle effects More Mars phenomena, like land structures, dust devils, clouds (I need to research them first), etc. Add a lander next to the rover for the lore, which is explained below: Basically, the lore is just that the Lander messes up and lands on the wrong crater, so the rover has to go by itself from the crater to the actual mountain “opening” called the Caldera; the journey is shown in a picture below. The reason I chose to only make the journey from that crater to the caldera instead of the whole mountain is just that Olympus Mons is HUGE. 600km wide and 21km tall, so even in a slightly scaled down version of the mountain, it still is going to take way too long and be way too boring to be playable. But anyway, I am really happy that this has actually reached a stage where it can be considered a game… even if it is classified as “barebones”"}, {"post_id": 41939, "ts": "2026-08-06T13:57:47Z", "hours": 8.3486, "text": "Devlog 05 (I think… I lost count) The video below is the complete playthrough of the game till now, btw. So today I just optimised things, made the code better, etc etc. I added rock spawning, and some actual feel of speed by increasing the FOV with higher speeds. Here are all the changes I made and what I need to do: Changes I added a script that increases the FOV of the camera when the speed increases… I tried making the FOV increase with acceleration, but that ended up really bad I added a script that spawns rocks in a 1000 x 1000 area, so if you get to the edge of that spawned square of land, it spawns rocks at the next square. This is temporary because it gets very glitchy when you get to the edge of the spawned square, and you can see the rocks spawning, which isn’t very polished. I added way better suspension, but it still rolls over pretty fast… any Unity devs here know what to do? The vehicle is 1500 kg with 8 wheels… (ignore my out of context accomplishment but I am very proud of it) I defeated my cousin in badminton 7 - 3… Yeah, nothing else lol… That’s that… now let’s get into things I plan on doing Things I plan on doing: I got to get that rock spawning thing better… I’m thinking of slowly spawning a huge area when the game is loading… I just have to figure out how… I need a good skybox; the main objective of the game is to make people fall in love with Mars (currently they’ll just get pissed at it for the annoying rocks…) I need some actual UI; currently, it is really bare-bones I need to add particle effects I also need something to keep people from getting bored… driving around a crater is not gonna cut it… And yeah… That is what I have done till now. The stupid thing is that I had studied Unity specifically for this project… I only knew C++ and Unreal Engine would bake my pc alive… So I had to learn Unity from scratch (help)"}, {"post_id": 40863, "ts": "2026-08-04T17:38:44Z", "hours": 4.5983, "text": "Devlog 04: So this devlog has added VERY unstable features… You usually see devlogs where the features are perfect and polished, but I really need to sleep, so I’ll figure the bugs out tomorrow. Firstly, I made this rock spawner; previously, it was a plain land of absolute nothingness… You couldn’t really see anything, in fact; when you were driving fast, all you would be able to see was an almost flat landscape, so you genuinely had almost no idea whether you were going fast or just not moving at all… The rocks removed that; our brain needs something passing by to judge the speed… Secondly, I made this thing where the FOV increases based on the speed… It was a good addition except it was concerningly shaky… I tried to move it all into LateUpdate(), but that did absolutely nothing at all whatsoever;t it would be really cool once I get it to be smooth. Thirdly I TRIED to add a rock spawning mechanism where the rocks spawn based on your location… It worked but only when you are at the edge of the already spawned chunk of land… I tried to make it spawn a bit earlier… (That is what you can see based on the following video ) Anyway, I use a potato, so I hope the one frame per next Christmas video recording doesn’t irritate you."}, {"post_id": 40126, "ts": "2026-08-03T14:58:04Z", "hours": 1.1603, "text": "slightlyyyyyy crashed unity hehe"}, {"post_id": 39940, "ts": "2026-08-03T08:29:02Z", "hours": 4.7933, "text": "Devlog 03 So this was a headache… until now, everything was relatively easy. I had conveniently forgotten to save the project, so I had to recode the movement system. I added wheel colliders… (I gave up on using my own wheel models because you can barely see the wheels anyway; I thought it would be better to get some work done on other things…) I made an e-brake option and a reset option in case you get stuck… But now I am stuck with this weird bug… does anyone know how to make wheel meshes follow the wheel collider? Because whatever I did is messing up my wheels… Well, after this (after fixing this bug, I hope…) I’m going to be adding a soul to the mountain because currently it’s just a plane modified using a heightmap… I got some cool rocks from Sketchfab so I can add some roughness to the current plane mountain, and then I need to do some other things, which I will think about later… I also need to add the actual game other than the physical stuff (I hope ToT); I need to add the main menu, and a hell lot of stuff before this competition ends… (I’m fried) NOTE: I just realized how bad the video recording is, sorry guys"}, {"post_id": 37431, "ts": "2026-07-30T05:00:59Z", "hours": 1.1381, "text": "Devlog 02 So basically… Wheel colliders were way too scary, so I decided to make my own wheel colliders from scratch cuz I can (no I cant). Hope I can actually get this project done in time, but this wheel collider issue is NOT helping… I have an emergency plan but that involves a very boring looking wheel… Anyway if you want you can analyze the bug below… I call it ‘The dance of wheels’ (ill try smth more creative next time)"}, {"post_id": 37047, "ts": "2026-07-29T14:49:08Z", "hours": 7.6333, "text": "Devlog 01 So basically I am trying to create a small little simulator which allows people to experience driving in another planet, I first had to find a DEM somewhere. A DEM is just a heightmap of a place. I wanted the DEM of Olympus Mons, the mountain the game is set at. It was a headache but I found it at some USGS website, I went into websites way too sketchy for my liking but I found it. After that I had to import it into Blender and then turn it into an actual model. So that is over, what I am working on right now is the rover itself… I made the model in Blender, and to call the model low-poly is an overstatement, but I am proud of it (somewhat). I was focusing on physics anyway ;-; Now the goals I have for the game is getting the physics and wheels to work. Unity did have wheel colliders but after a few hours of the wheel colliders appearing always somewhere random except where its supposed to be itself, I decided to somehow make my own wheel system… Wish me luck! (im so fried…)"}]...
|
Title: Olympus Mons: The Voyage by @AfdalFavas | S Title: Olympus Mons: The Voyage by @AfdalFavas | Stardance
Devlogs:
Devlog 01 So basically I am trying to create a small little simulator which allows people to experience driving in another planet, I first had to find a DEM somewhere. A DEM is just a heightmap of a place. I wanted the DEM of Olympus Mons, the mountain the game is set at. It was a headache but I found it at some USGS website, I went into websites way too sketchy for my liking but I found it. After that I had to import it into Blender and then turn it into an actual model. So that is over, what I am working on right now is the rover itself… I made the model in Blender, and to call the model low-poly is an overstatement, but I am proud of it (somewhat). I was focusing on physics anyway ;-; Now the goals I have for the game is getting the physics and wheels to work. Unity did have wheel colliders but after a few hours of the wheel colliders appearing always somewhere random except where its supposed to be itself, I decided to somehow make my own wheel system… Wish me luck! (im so fried…)
Devlog 02 So basically… Wheel colliders were way too scary, so I decided to make my own wheel colliders from scratch cuz I can (no I cant). Hope I can actually get this project done in time, but this wheel collider issue is NOT helping… I have an emergency plan but that involves a very boring looking wheel… Anyway if you want you can analyze the bug below… I call it ‘The dance of wheels’ (ill try smth more creative next time)
Devlog 03 So this was a headache… until now, everything was relatively easy. I had conveniently forgotten to save the project, so I had to recode the movement system. I added wheel colliders… (I gave up on using my own wheel models because you can barely see the wheels anyway; I thought it would be better to get some work done on other things…) I made an e-brake option and a reset option in case you get stuck… But now I am stuck with this weird bug… does anyone know how to make wheel meshes follow the wheel collider? Because whatever I did is messing up my wheels… Well, after this (after fixing this bug, I hope…) I’m going to be adding a soul to the mountain because currently it’s just a plane modified using a heightmap… I got some cool rocks from Sketchfab so I can add some roughness to the current plane mountain, and then I need to do some other things, which I will think about later… I also need to add the actual game other than the physical stuff (I hope ToT); I need to add the main menu, and a hell lot of stuff before this competition ends… (I’m fried) NOTE: I just realized how bad the video recording is, sorry guys
slightlyyyyyy crashed unity hehe
Devlog 04: So this devlog has added VERY unstable features… You usually see devlogs where the features are perfect and polished, but I really need to sleep, so I’ll figure the bugs out tomorrow. Firstly, I made this rock spawner; previously, it was a plain land of absolute nothingness… You couldn’t really see anything, in fact; when you were driving fast, all you would be able to see was an almost flat landscape, so you genuinely had almost no idea whether you were going fast or just not moving at all… The rocks removed that; our brain needs something passing by to judge the speed… Secondly, I made this thing where the FOV increases based on the speed… It was a good addition except it was concerningly shaky… I tried to move it all into LateUpdate(), but that did absolutely nothing at all whatsoever;t it would be really cool once I get it to be smooth. Thirdly I TRIED to add a rock spawning mechanism where the rocks spawn based on your location… It worked but only when you are at the edge of the already spawned chunk of land… I tried to make it spawn a bit earlier… (That is what you can see based on the following video ) Anyway, I use a potato, so I hope the one frame per next Christmas video recording doesn’t irritate you.
Devlog 05 (I think… I lost count) The video below is the complete playthrough of the game till now, btw. So today I just optimised things, made the code better, etc etc. I added rock spawning, and some actual feel of speed by increasing the FOV with higher speeds. Here are all the changes I made and what I need to do: Changes I added a script that increases the FOV of the camera when the speed increases… I tried making the FOV increase with acceleration, but that ended up really bad I added a script that spawns rocks in a 1000 x 1000 area, so if you get to the edge of that spawned square of land, it spawns rocks at the next square. This is temporary because it gets very glitchy when you get to the edge of the spawned square, and you can see the rocks spawning, which isn’t very polished. I added way better suspension, but it still rolls over pretty fast… any Unity devs here know what to do? The vehicle is 1500 kg with 8 wheels… (ignore my out of context accomplishment but I am very proud of it) I defeated my cousin in badminton 7 - 3… Yeah, nothing else lol… That’s that… now let’s get into things I plan on doing Things I plan on doing: I got to get that rock spawning thing better… I’m thinking of slowly spawning a huge area when the game is loading… I just have to figure out how… I need a good skybox; the main objective of the game is to make people fall in love with Mars (currently they’ll just get pissed at it for the annoying rocks…) I need some actual UI; currently, it is really bare-bones I need to add particle effects I also need something to keep people from getting bored… driving around a crater is not gonna cut it… And yeah… That is what I have done till now. The stupid thing is that I had studied Unity specifically for this project… I only knew C++ and Unreal Engine would bake my pc alive… So I had to learn Unity from scratch (help)
Devlog 06 So basically, this is probably going to be the alpha version of my project… It is very under-polished, especially the UI, but I hope it is good enough for playtesting! I want to upload it on itch.io for feedback before I start polishing and adding finishing touches and features. But I have no idea if uploading to itch.io is allowed. Changes: Added UI, including the main menu, credits, and HUD. Added particle effects to the rover. Added a better mesh I made in Blender. Added lights and a cool backlight when you click the brakes Added checkpoints; there are four of them, with the fourth being called the finalPoint. Added a pointer object that points you in the right direction for the next checkpoint. Things I need to add: The checkpoints being actually visible, instead of just boring nothingness. A way better UI; currently it’s just text and primitive white squares. Better particle effects More Mars phenomena, like land structures, dust devils, clouds (I need to research them first), etc. Add a lander next to the rover for the lore, which is explained below: Basically, the lore is just that the Lander messes up and lands on the wrong crater, so the rover has to go by itself from the crater to the actual mountain “opening” called the Caldera; the journey is shown in a picture below. The reason I chose to only make the journey from that crater to the caldera instead of the whole mountain is just that Olympus Mons is HUGE. 600km wide and 21km tall, so even in a slightly scaled down version of the mountain, it still is going to take way too long and be way too boring to be playable. But anyway, I am really happy that this has actually reached a stage where it can be considered a game… even if it is classified as “barebones”
Devlog 07 v.0.2.0 So the last devlog was v.0.1.0; this is just the less-buggy, actually normal-looking UI version. Anyway, I just realized I have only 2 days to finish my project because I am going back to the UAE. My summer vacay in India is over, and in the UAE I’ll be way too busy with school stuff. At least it was nice while it lasted. I’m gonna have to pull all-nighters smhw … But honestly, I’m happy about the project till now; for a first game, I think it looks gud. Changes since v.0.1.0 Added a smarter particle system. Added way better UI, all made in Canva. I lowk spent too much time on the credits. I added ambient music Things I need for v.0.3.0 or at least v.0.5.0 Actual land structures Dust dust devils Clouds
DUST STORMMSSSS Devlog 08 v.0.3.0 I’m gonna make this short… I added dust storms, Music, a way better UI, and better vehicle physics. I attempted a better camera movement feature and failed miserably. I added a cool in game menu:
Devlog 09 v.1.0.0 This is the last devlog for this project, and I did NOT have enough time because school came by way faster than i thought. But it is what is is
Devlog 10 v.1.1.0 So this is probably my last last devlog; this is the last devlog (I think) before my second ship. The second ship is essentially based on feedback from people who rated my first. Changes since v.1.0.0 Added settings for volume. Improved rover stability. Optimized performance. Things I was hoping to add More settings that edit a lot of the values available, like the amount of rocks being spawned; the rocks might get too annoying for some people. Multiplayer modes More feature-packed things I’m probably not going to add this to the project because after this I have exams, and then more exams, so yeah. Challenges I had to overcome Learning Unity by myself for the first time Learning Blender by myself for the first time Having to learn C#, though this was easier because I already know C++ Things I learnt Game development is NOT easy You can’t make Forza Horizon 5 in a month Things exist outside of school Thanks to everyone who rated my first ship. I didn’t realize how much people rated projects, and I was losing hope I’d get any good feedback, but the feedback I got was amazing, pointed out exactly what the problem was and how they would like it fixed, exactly what they liked about my project, etc. Below is the complete playthrough of the game, from getting out of that dust storm to getting to the final point and falling down the Caldera of Olympus Mons.
Ships:
So this project is a project in which you drive a rover, attempt dodging rocks from your spawn to a checkpoint which is the Caldera of Olympus Mons. The game is set on Olympus Mons the Solar System’s largest mountain. There are four checkpoints with the last one being the final Point (Caldera). There are a few phenomena you will experience like dust devils, which are basically harmless mini tornadoes, and dust storms, which actually do have wind effects and you will need to drive through it. A dust storm is spawned where you are at the spawn, so you will have to struggle initially. Be fast too, otherwise a dust storm is spawned every…. about 500 seconds. Once you reach the final Point, your rank will be shown, which is calculated based on how quickly you reached the final point. WASD - Movement E - Open inventory C - Close inventory Space Bar - reset movement and rotation (you will find yourself using this a lot because of Mars’s gravity. Left Shift - Brake
This is ship 2, I have drastically improved the README.md file, improved the overall game optimization. This isn’t a big ship, everything was mostly bug-fixing and working on feedback, and also improving my README file. Here are the controls: WASD - Move Space Bar - Reset Rotation, you will use this a lot, the Mars environment is annoying Left Shift - Brake, Don’t try using S, that is for reversing only E - Open in-game menu If there is anything wrong with the game, please include that in the feedback specifically and which rating component was affected by it. README is in Github Repo To try the game click “Try Project” below, which will redirect you to tich.io, from there you can play it. It might load for some time....
|
1792990171.108571
|
1793076571.108571
|
|
45745
|
JOURNALMIGRATION_TEST by @qcoral | Stardance
|
qcoral
|
0
|
63.0
|
0
|
[]
|
[{"post_id": 46144, "ts": "202 [{"post_id": 46144, "ts": "2025-08-07T00:00:00Z", "hours": 4.0, "text": "I like to order my days chronologically, but a couple weeks have passed! Now I’ve receive my boards and just have to solder them and assemble it. So first things first, I whipped out all the soldering stuff. I like to use my trusty pinecil with resin core leaded solder and then I use some wire cutters to cut off the strands. Something I learned about doing the neopixels, especially SMD like this, is to tin the pads, and then bend the leads so that they touch all the pads, and then just touch the solder to the pads, works very nicely. Anyways, the boards turned out very nice, and then I added some github keycaps onto them. Next I needed to assemble the case. I just glued the walls onto the sides nicely, and then I actually forgot to get the top part of my case printed, so I used duck tape to like hold it in place, and I feel like it turned out pretty nice. I skipped on the acrylic for now, but all stuff I need to do when I get back from my vacation: And then I just simply uploaded my code, and booted up the XIAO using the UF2 from the circuit python website, and it was ready to go! I’m a bit sad I didn’t get the neopixels to work in time for my trip, but I’ll get them working eventually!"}, {"post_id": 55984, "ts": "2025-08-07T00:00:00Z", "hours": 4.0, "text": "I like to order my days chronologically, but a couple weeks have passed! Now I’ve receive my boards and just have to solder them and assemble it. So first things first, I whipped out all the soldering stuff. I like to use my trusty pinecil with resin core leaded solder and then I use some wire cutters to cut off the strands. Something I learned about doing the neopixels, especially SMD like this, is to tin the pads, and then bend the leads so that they touch all the pads, and then just touch the solder to the pads, works very nicely. Anyways, the boards turned out very nice, and then I added some github keycaps onto them. Next I needed to assemble the case. I just glued the walls onto the sides nicely, and then I actually forgot to get the top part of my case printed, so I used duck tape to like hold it in place, and I feel like it turned out pretty nice. I skipped on the acrylic for now, but all stuff I need to do when I get back from my vacation: And then I just simply uploaded my code, and booted up the XIAO using the UF2 from the circuit python website, and it was ready to go! I’m a bit sad I didn’t get the neopixels to work in time for my trip, but I’ll get them working eventually!"}, {"post_id": 46142, "ts": "2025-07-06T00:00:00Z", "hours": 6.0, "text": "Now I’ve never used Blender before, but I really want to render my case and PCB. But before that, I have to update my KiCad! And it may have taken me way too long, but after 2 hours, I’ve updated KiCad. Now I can export the PCB with silkscreen (brand new feature!!) and add it to blender alongside my case. I’ve also added this cool blueprint effect on the plane I’ve put my model on which will look really futuristic in the render. To do this, I just used a wireframe on the plane and then gave them 2 different meshes. Now all this stuff took way longer than I’m making it seem but yeah that’s basically what I did. Next I added all the meshes and rendered everything, I couldn’t figure out lighting so I may or may not have just used the photo’s from the render without light. And there’s our render completed!"}, {"post_id": 55982, "ts": "2025-07-06T00:00:00Z", "hours": 6.0, "text": "Now I’ve never used Blender before, but I really want to render my case and PCB. But before that, I have to update my KiCad! And it may have taken me way too long, but after 2 hours, I’ve updated KiCad. Now I can export the PCB with silkscreen (brand new feature!!) and add it to blender alongside my case. I’ve also added this cool blueprint effect on the plane I’ve put my model on which will look really futuristic in the render. To do this, I just used a wireframe on the plane and then gave them 2 different meshes. Now all this stuff took way longer than I’m making it seem but yeah that’s basically what I did. Next I added all the meshes and rendered everything, I couldn’t figure out lighting so I may or may not have just used the photo’s from the render without light. And there’s our render completed!"}, {"post_id": 46141, "ts": "2025-07-05T00:00:00Z", "hours": 4.0, "text": "Next I need to customize the PCB so that it looks rlly cool inside of the case. I wanna go for like exposed trace with cyberpunk drawings style. I used the case DXF as a reference point, and then used figma to draw the lines. Then I just add the image properly scaled to kicad. Now I completely forgot to add the neopixels so let me do that real quick. Rewired + new schematic. Next I did the firmware. It was really simple, just some python with KMK. Next I completely forgot but I needed a USB port so I added that in. Then I’ll just add the bolt heads and such, and we’re done with the case!"}, {"post_id": 55983, "ts": "2025-07-05T00:00:00Z", "hours": 2.0, "text": "Now I needed to add all of this to GitHub, I left everything pretty organized so it won’t be too much of a hassle! I pretty much have everything in there except for the production files so let’s add those! First I’m going to add all my CAD files, I’m going to put all the separate files I need to 3D print, I have to separate all of the different parts to 3D print, but it’s not too complicated so I got through with relative ease. Next I need the production files, all the files I need to actually make my PCB. This is just the: All PCB gerbers, drills, pick and place, etc. All 3D printed parts All firmware So I just moved my CAD folder into this new one, move the firmware file, and then made a ZIP file with all the gerbers and stuff. And then finally, I had to add a new CAD folder with just my full case and then I also added my Onshape link as a txt just for the people that are looking there. And that is actually everything!"}, {"post_id": 55981, "ts": "2025-07-05T00:00:00Z", "hours": 4.0, "text": "Next I need to customize the PCB so that it looks rlly cool inside of the case. I wanna go for like exposed trace with cyberpunk drawings style. I used the case DXF as a reference point, and then used figma to draw the lines. Then I just add the image properly scaled to kicad. Now I completely forgot to add the neopixels so let me do that real quick. Rewired + new schematic. Next I did the firmware. It was really simple, just some python with KMK. Next I completely forgot but I needed a USB port so I added that in. Then I’ll just add the bolt heads and such, and we’re done with the case!"}, {"post_id": 46143, "ts": "2025-07-05T00:00:00Z", "hours": 2.0, "text": "Now I needed to add all of this to GitHub, I left everything pretty organized so it won’t be too much of a hassle! I pretty much have everything in there except for the production files so let’s add those! First I’m going to add all my CAD files, I’m going to put all the separate files I need to 3D print, I have to separate all of the different parts to 3D print, but it’s not too complicated so I got through with relative ease. Next I need the production files, all the files I need to actually make my PCB. This is just the: All PCB gerbers, drills, pick and place, etc. All 3D printed parts All firmware So I just moved my CAD folder into this new one, move the firmware file, and then made a ZIP file with all the gerbers and stuff. And then finally, I had to add a new CAD folder with just my full case and then I also added my Onshape link as a txt just for the people that are looking there. And that is actually everything!"}, {"post_id": 55980, "ts": "2025-07-03T00:00:00Z", "hours": 8.0, "text": "Now I’m going to start modelling the case, I’m going to give about 1cm total on each side just as a placeholder and then I’m going to model the main interior of the bottom I want to go for. Now that I have this base, I’m going to add some designs along the side. I like the way the graphics card is done, so I’m going to do something similar to that. Now I kind of want to go with a polarizing like effect which will go with the top of my case: Now I kind of want to with with some other designs just to fill the space, I’ll look into the graphics card design a bit more and kind of go off that. And now I have a really col base to go off of: Now I’m going to make the shapes a bit more complicated to give it some detail. Now it’s looking sick. Now I really like this style where there’s details on the top and bottom, and circles where all the divits are, so I’m going to first add the cool bottom and top details. And the minor details are really starting to add up. Now I want some of those extra thin lines. It’s starting to look incredible! Next I added the circles and the logo. The logo is done in inkscape with the Cynata font. Next I added some walls to it, and then created the plate and top plate. Now I’m going to start working on the side designs. I want them to be pretty similar to the GPU design and then make the top like the PC. Anyways next I added the side designs, I’ve mirrored each side onto the other side for simplicity and it’s looking even better now! Now I kind of have to figure out what I want to do for the top. I really like this style and kind of want to go for something similar. I might actually play around with my hackpad colors too, maybe a different color would look better like this green or something. Anyways next I’m going to work on the top. I don’t actually have anything in mind, so I’m just going to kind of stick to the same style for now and add more detail later. And that looks fitting but still now exactly what I want. I really want to see what it would look like if I put a piece of acrylic over the gap now. This took a long time and I’m sorry I didn’t journal all of it, but I added a knob, the acrylic and some text on the bottom. Looking absolutely insane now. But we are not finished, nowhere near the craziness I want. Next I’m going to add all the extra little things to give it dimension. I also refined the design a bit so it’s easier to print and it looks pretty good."}, {"post_id": 46140, "ts": "2025-07-03T00:00:00Z", "hours": 8.0, "text": "Now I’m going to start modelling the case, I’m going to give about 1cm total on each side just as a placeholder and then I’m going to model the main interior of the bottom I want to go for. Now that I have this base, I’m going to add some designs along the side. I like the way the graphics card is done, so I’m going to do something similar to that. Now I kind of want to go with a polarizing like effect which will go with the top of my case: Now I kind of want to with with some other designs just to fill the space, I’ll look into the graphics card design a bit more and kind of go off that. And now I have a really col base to go off of: Now I’m going to make the shapes a bit more complicated to give it some detail. Now it’s looking sick. Now I really like this style where there’s details on the top and bottom, and circles where all the divits are, so I’m going to first add the cool bottom and top details. And the minor details are really starting to add up. Now I want some of those extra thin lines. It’s starting to look incredible! Next I added the circles and the logo. The logo is done in inkscape with the Cynata font. Next I added some walls to it, and then created the plate and top plate. Now I’m going to start working on the side designs. I want them to be pretty similar to the GPU design and then make the top like the PC. Anyways next I added the side designs, I’ve mirrored each side onto the other side for simplicity and it’s looking even better now! Now I kind of have to figure out what I want to do for the top. I really like this style and kind of want to go for something similar. I might actually play around with my hackpad colors too, maybe a different color would look better like this green or something. Anyways next I’m going to work on the top. I don’t actually have anything in mind, so I’m just going to kind of stick to the same style for now and add more detail later. And that looks fitting but still now exactly what I want. I really want to see what it would look like if I put a piece of acrylic over the gap now. This took a long time and I’m sorry I didn’t journal all of it, but I added a knob, the acrylic and some text on the bottom. Looking absolutely insane now. But we are not finished, nowhere near the craziness I want. Next I’m going to add all the extra little things to give it dimension. I also refined the design a bit so it’s easier to print and it looks pretty good."}, {"post_id": 55946, "ts": "2025-06-30T00:00:00Z", "hours": 5.0, "text": "The Cyber Pad is going to be an extremely futuristic looking macropad. It’s going to be a test of my design skills and just a fun side project I want to build. I really like the cyberpunk aesthetic and want to make a series of projects that go with the theme, maybe ending up with a cyberpunk themed 3D printer. Anyways first I’m going to do some drawing and brainstorming on how I want this thing to look. Anyways this is my main inspiration that I spent some time on, I really like the buttons like this so I think I’m going to leave it like that. I don’t want any OLED’s or anything because I feel like that ruins the vibe so I’m going simple with a major focus on the design. Also this design seems quite blocky but the actual thing will be nice and round. Now let’s whip up a quick schematic. I’m trying to stick to best practices possible and I’m going to do the neopixels once I’m done my case! Now time to do the PCB, took me quite a long time because I was figuring out some footprint and alignment stuff."}, {"post_id": 55979, "ts": "2025-06-30T00:00:00Z", "hours": 5.0, "text": "The Cyber Pad is going to be an extremely futuristic looking macropad. It’s going to be a test of my design skills and just a fun side project I want to build. I really like the cyberpunk aesthetic and want to make a series of projects that go with the theme, maybe ending up with a cyberpunk themed 3D printer. Anyways first I’m going to do some drawing and brainstorming on how I want this thing to look. Anyways this is my main inspiration that I spent some time on, I really like the buttons like this so I think I’m going to leave it like that. I don’t want any OLED’s or anything because I feel like that ruins the vibe so I’m going simple with a major focus on the design. Also this design seems quite blocky but the actual thing will be nice and round. Now let’s whip up a quick schematic. I’m trying to stick to best practices possible and I’m going to do the neopixels once I’m done my case! Now time to do the PCB, took me quite a long time because I was figuring out some footprint and alignment stuff."}, {"post_id": 46139, "ts": "2025-06-30T00:00:00Z", "hours": 5.0, "text": "The Cyber Pad is going to be an extremely futuristic looking macropad. It’s going to be a test of my design skills and just a fun side project I want to build. I really like the cyberpunk aesthetic and want to make a series of projects that go with the theme, maybe ending up with a cyberpunk themed 3D printer. Anyways first I’m going to do some drawing and brainstorming on how I want this thing to look. Anyways this is my main inspiration that I spent some time on, I really like the buttons like this so I think I’m going to leave it like that. I don’t want any OLED’s or anything because I feel like that ruins the vibe so I’m going simple with a major focus on the design. Also this design seems quite blocky but the actual thing will be nice and round. Now let’s whip up a quick schematic. I’m trying to stick to best practices possible and I’m going to do the neopixels once I’m done my case! Now time to do the PCB, took me quite a long time because I was figuring out some footprint and alignment stuff."}]...
|
Title: JOURNALMIGRATION_TEST by @qcoral | Stardanc Title: JOURNALMIGRATION_TEST by @qcoral | Stardance
Devlogs:
The Cyber Pad is going to be an extremely futuristic looking macropad. It’s going to be a test of my design skills and just a fun side project I want to build. I really like the cyberpunk aesthetic and want to make a series of projects that go with the theme, maybe ending up with a cyberpunk themed 3D printer. Anyways first I’m going to do some drawing and brainstorming on how I want this thing to look. Anyways this is my main inspiration that I spent some time on, I really like the buttons like this so I think I’m going to leave it like that. I don’t want any OLED’s or anything because I feel like that ruins the vibe so I’m going simple with a major focus on the design. Also this design seems quite blocky but the actual thing will be nice and round. Now let’s whip up a quick schematic. I’m trying to stick to best practices possible and I’m going to do the neopixels once I’m done my case! Now time to do the PCB, took me quite a long time because I was figuring out some footprint and alignment stuff.
The Cyber Pad is going to be an extremely futuristic looking macropad. It’s going to be a test of my design skills and just a fun side project I want to build. I really like the cyberpunk aesthetic and want to make a series of projects that go with the theme, maybe ending up with a cyberpunk themed 3D printer. Anyways first I’m going to do some drawing and brainstorming on how I want this thing to look. Anyways this is my main inspiration that I spent some time on, I really like the buttons like this so I think I’m going to leave it like that. I don’t want any OLED’s or anything because I feel like that ruins the vibe so I’m going simple with a major focus on the design. Also this design seems quite blocky but the actual thing will be nice and round. Now let’s whip up a quick schematic. I’m trying to stick to best practices possible and I’m going to do the neopixels once I’m done my case! Now time to do the PCB, took me quite a long time because I was figuring out some footprint and alignment stuff.
The Cyber Pad is going to be an extremely futuristic looking macropad. It’s going to be a test of my design skills and just a fun side project I want to build. I really like the cyberpunk aesthetic and want to make a series of projects that go with the theme, maybe ending up with a cyberpunk themed 3D printer. Anyways first I’m going to do some drawing and brainstorming on how I want this thing to look. Anyways this is my main inspiration that I spent some time on, I really like the buttons like this so I think I’m going to leave it like that. I don’t want any OLED’s or anything because I feel like that ruins the vibe so I’m going simple with a major focus on the design. Also this design seems quite blocky but the actual thing will be nice and round. Now let’s whip up a quick schematic. I’m trying to stick to best practices possible and I’m going to do the neopixels once I’m done my case! Now time to do the PCB, took me quite a long time because I was figuring out some footprint and alignment stuff.
Now I’m going to start modelling the case, I’m going to give about 1cm total on each side just as a placeholder and then I’m going to model the main interior of the bottom I want to go for. Now that I have this base, I’m going to add some designs along the side. I like the way the graphics card is done, so I’m going to do something similar to that. Now I kind of want to go with a polarizing like effect which will go with the top of my case: Now I kind of want to with with some other designs just to fill the space, I’ll look into the graphics card design a bit more and kind of go off that. And now I have a really col base to go off of: Now I’m going to make the shapes a bit more complicated to give it some detail. Now it’s looking sick. Now I really like this style where there’s details on the top and bottom, and circles where all the divits are, so I’m going to first add the cool bottom and top details. And the minor details are really starting to add up. Now I want some of those extra thin lines. It’s starting to look incredible! Next I added the circles and the logo. The logo is done in inkscape with the Cynata font. Next I added some walls to it, and then created the plate and top plate. Now I’m going to start working on the side designs. I want them to be pretty similar to the GPU design and then make the top like the PC. Anyways next I added the side designs, I’ve mirrored each side onto the other side for simplicity and it’s looking even better now! Now I kind of have to figure out what I want to do for the top. I really like this style and kind of want to go for something similar. I might actually play around with my hackpad colors too, maybe a different color would look better like this green or something. Anyways next I’m going to work on the top. I don’t actually have anything in mind, so I’m just going to kind of stick to the same style for now and add more detail later. And that looks fitting but still now exactly what I want. I really want to see what it would look like if I put a piece of acrylic over the gap now. This took a long time and I’m sorry I didn’t journal all of it, but I added a knob, the acrylic and some text on the bottom. Looking absolutely insane now. But we are not finished, nowhere near the craziness I want. Next I’m going to add all the extra little things to give it dimension. I also refined the design a bit so it’s easier to print and it looks pretty good.
Now I’m going to start modelling the case, I’m going to give about 1cm total on each side just as a placeholder and then I’m going to model the main interior of the bottom I want to go for. Now that I have this base, I’m going to add some designs along the side. I like the way the graphics card is done, so I’m going to do something similar to that. Now I kind of want to go with a polarizing like effect which will go with the top of my case: Now I kind of want to with with some other designs just to fill the space, I’ll look into the graphics card design a bit more and kind of go off that. And now I have a really col base to go off of: Now I’m going to make the shapes a bit more complicated to give it some detail. Now it’s looking sick. Now I really like this style where there’s details on the top and bottom, and circles where all the divits are, so I’m going to first add the cool bottom and top details. And the minor details are really starting to add up. Now I want some of those extra thin lines. It’s starting to look incredible! Next I added the circles and the logo. The logo is done in inkscape with the Cynata font. Next I added some walls to it, and then created the plate and top plate. Now I’m going to start working on the side designs. I want them to be pretty similar to the GPU design and then make the top like the PC. Anyways next I added the side designs, I’ve mirrored each side onto the other side for simplicity and it’s looking even better now! Now I kind of have to figure out what I want to do for the top. I really like this style and kind of want to go for something similar. I might actually play around with my hackpad colors too, maybe a different color would look better like this green or something. Anyways next I’m going to work on the top. I don’t actually have anything in mind, so I’m just going to kind of stick to the same style for now and add more detail later. And that looks fitting but still now exactly what I want. I really want to see what it would look like if I put a piece of acrylic over the gap now. This took a long time and I’m sorry I didn’t journal all of it, but I added a knob, the acrylic and some text on the bottom. Looking absolutely insane now. But we are not finished, nowhere near the craziness I want. Next I’m going to add all the extra little things to give it dimension. I also refined the design a bit so it’s easier to print and it looks pretty good.
Now I needed to add all of this to GitHub, I left everything pretty organized so it won’t be too much of a hassle! I pretty much have everything in there except for the production files so let’s add those! First I’m going to add all my CAD files, I’m going to put all the separate files I need to 3D print, I have to separate all of the different parts to 3D print, but it’s not too complicated so I got through with relative ease. Next I need the production files, all the files I need to actually make my PCB. This is just the: All PCB gerbers, drills, pick and place, etc. All 3D printed parts All firmware So I just moved my CAD folder into this new one, move the firmware file, and then made a ZIP file with all the gerbers and stuff. And then finally, I had to add a new CAD folder with just my full case and then I also added my Onshape link as a txt just for the people that are looking there. And that is actually everything!
Next I need to customize the PCB so that it looks rlly cool inside of the case. I wanna go for like exposed trace with cyberpunk drawings style. I used the case DXF as a reference point, and then used figma to draw the lines. Then I just add the image properly scaled to kicad. Now I completely forgot to add the neopixels so let me do that real quick. Rewired + new schematic. Next I did the firmware. It was really simple, just some python with KMK. Next I completely forgot but I needed a USB port so I added that in. Then I’ll just add the bolt heads and such, and we’re done with the case!
Now I needed to add all of this to GitHub, I left everything pretty organized so it won’t be too much of a hassle! I pretty much have everything in there except for the production files so let’s add those! First I’m going to add all my CAD files, I’m going to put all the separate files I need to 3D print, I have to separate all of the different parts to 3D print, but it’s not too complicated so I got through with relative ease. Next I need the production files, all the files I need to actually make my PCB. This is just the: All PCB gerbers, drills, pick and place, etc. All 3D printed parts All firmware So I just moved my CAD folder into this new one, move the firmware file, and then made a ZIP file with all the gerbers and stuff. And then finally, I had to add a new CAD folder with just my full case and then I also added my Onshape link as a txt just for the people that are looking there. And that is actually everything!
Next I need to customize the PCB so that it looks rlly cool inside of the case. I wanna go for like exposed trace with cyberpunk drawings style. I used the case DXF as a reference point, and then used figma to draw the lines. Then I just add the image properly scaled to kicad. Now I completely forgot to add the neopixels so let me do that real quick. Rewired + new schematic. Next I did the firmware. It was really simple, just some python with KMK. Next I completely forgot but I needed a USB port so I added that in. Then I’ll just add the bolt heads and such, and we’re done with the case!
Now I’ve never used Blender before, but I really want to render my case and PCB. But before that, I have to update my KiCad! And it may have taken me way too long, but after 2 hours, I’ve updated KiCad. Now I can export the PCB with silkscreen (brand new feature!!) and add it to blender alongside my case. I’ve also added this cool blueprint effect on the plane I’ve put my model on which will look really futuristic in the render. To do this, I just used a wireframe on the plane and then gave them 2 different meshes. Now all this stuff took way longer than I’m making it seem but yeah that’s basically what I did. Next I added all the meshes and rendered everything, I couldn’t figure out lighting so I may or may not have just used the photo’s from the render without light. And there’s our render completed!
Now I’ve never used Blender before, but I really want to render my case and PCB. But before that, I have to update my KiCad! And it may have taken me way too long, but after 2 hours, I’ve updated KiCad. Now I can export the PCB with silkscreen (brand new feature!!) and add it to blender alongside my case. I’ve also added this cool blueprint effect on the plane I’ve put my model on which will look really futuristic in the render. To do this, I just used a wireframe on the plane and then gave them 2 different meshes. Now all this stuff took way longer than I’m making it seem but yeah that’s basically what I did. Next I added all the meshes and rendered everything, I couldn’t figure out lighting so I may or may not have just used the photo’s from the render without light. And there’s our render completed!
I like to order my days chronologically, but a couple weeks have passed! Now I’ve receive my boards and just have to solder them and assemble it. So first things first, I whipped out all the soldering stuff. I like to use my trusty pinecil with resin core leaded solder and then I use some wire cutters to cut off the strands. Something I learned about doing the neopixels, especially SMD like this, is to tin the pads, and then bend the leads so that they touch all the pads, and then just touch the solder to the pads, works very nicely. Anyways, the boards turned out very nice, and then I added some github keycaps onto them. Next I needed to assemble the case. I just glued the walls onto the sides nicely, and then I actually forgot to get the top part of my case printed, so I used duck tape to like hold it in place, and I feel like it turned out pretty nice. I skipped on the acrylic for now, but all stuff I need to do when I get back from my vacation: And then I just simply uploaded my code, and booted up the XIAO using the UF2 from the circuit python website, and it was ready to go! I’m a bit sad I didn’t get the neopixels to work in time for my trip, but I’ll get them working eventually!
I like to order my days chronologically, but a couple weeks have passed! Now I’ve receive my boards and just have to solder them and assemble it. So first things first, I whipped out all the soldering stuff. I like to use my trusty pinecil with resin core leaded solder and then I use some wire cutters to cut off the strands. Something I learned about doing the neopixels, especially SMD like this, is to tin the pads, and then bend the leads so that they touch all the pads, and then just touch the solder to the pads, works very nicely. Anyways, the boards turned out very nice, and then I added some github keycaps onto them. Next I needed to assemble the case. I just glued the walls onto the sides nicely, and then I actually forgot to get the top part of my case printed, so I used duck tape to like hold it in place, and I feel like it turned out pretty nice. I skipped on the acrylic for now, but all stuff I need to do when I get back from my vacation: And then I just simply uploaded my code, and booted up the XIAO using the UF2 from the circuit python website, and it was ready to go! I’m a bit sad I didn’t get the neopixels to work in time for my trip, but I’ll get them working eventually!...
|
1792634061.9644213
|
1793238861.9644213
|
|
54940
|
arya whether by @aryamankumar2403 | Stardance
|
aryamankumar2403
|
2
|
63.0
|
32
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T13:26:22Z", "hours": 54.0, "multiplier": 6.69, "payout": 0, "blessing": "neutral", "text": "What did i make ? I built a responsive weather website where users can search for a city and see its current weather, temperature, humidity, wind, pressure, hourly forecast and upcoming forecast. I also redesigned the whole interface and added smoother animations, transitions, weather visuals and a better way to explore different cities. What was challenging? The hardest part was getting all the different weather information to work together without making the interface confusing. Handling API responses, loading states, invalid searches and different screen sizes took more time than I expected. I also had to keep adjusting the animations because some of them looked good individually but felt too much when everything was running together. What i am proud of? I am most proud of the redesign because it started from a rough paper sketch and slowly became an actual working website. I also like that I didn’t just focus on making it look good — I spent time fixing the small interactions and making the weather data actually useful. What should people know? The project is still being developed, so some things may change as I continue working on it. I have intentionally kept the latest redesign hidden for now because I want to reveal the new look", "repo": "https://github.com/AryaBuilds/WHETHER-", "demo": "https://aryabuilds.github.io/WHETHER-/"}, {"ship_num": 2, "ts": "2026-08-29T05:04:20Z", "hours": 9.0, "multiplier": 3.66, "payout": 32, "blessing": "neutral", "text": "I Maked A full 3d funsctional Animated 3d gether aap for Pc And Mobile I Aaded open Api And Most Difiiculte part Is To make Dedgine", "repo": "https://github.com/AryaBuilds/WHETHER-", "demo": "https://aryabuilds.github.io/WHETHER-/"}]...
|
[{"post_id": 61496, "ts": "202 [{"post_id": 61496, "ts": "2026-09-04T13:16:43Z", "hours": 1.9011, "text": "i aaded map"}, {"post_id": 61422, "ts": "2026-09-04T10:12:45Z", "hours": 2.1961, "text": "After a lot of work behind the scenes, I finally revealed the home screen of the project. The main layout, visuals, animations, and overall experience are starting to come together. There is still a lot left to polish, but I’m happy with how it’s taking shape. Current progress: ~80% complete. The remaining 20% is mainly about refining the details, improving the animations, fixing small issues, and making everything feel more Profeesional"}, {"post_id": 61321, "ts": "2026-09-04T05:21:24Z", "hours": 1.6528, "text": "Hlw friend my whether web is almost completed aal api hanling mobile view tab desktop view aal are working perfect the animation are fully smooth any datanot in raw form Aal site is completed i will show the imadge of home view in next Devlog foolw the project to see what is made"}, {"post_id": 60939, "ts": "2026-09-03T16:45:26Z", "hours": 2.0514, "text": "After improving the weather visuals, I started checking how the website behaves on smaller screens. The desktop layout was looking good, but when everything became narrower, some cards started feeling too crowded and a few sections needed better spacing. Instead of making a completely separate mobile design, I am adjusting the existing layout so the same website can naturally adapt to different screen sizes. I am also checking the search area, weather information and forecast cards because these are the sections that can become difficult to use on a small screen."}, {"post_id": 60851, "ts": "2026-09-03T14:07:08Z", "hours": 4.3489, "text": "After finishing the basic error handling, I started working on how the website visually represents different weather conditions. I noticed that showing only the temperature and text does not give the user much feeling about what the weather is actually like. So I started connecting the weather conditions with the correct icons and visual elements. The tricky part was that the API can return different condition names, so I had to make sure similar conditions were handled correctly instead of creating a separate case for every small variation. I am also trying to keep the visuals consistent with the new design. I don’t want to add too many effects just for the sake of animation, so I am keeping them subtle and related to the actual weather."}, {"post_id": 60723, "ts": "2026-09-03T08:54:42Z", "hours": 3.0394, "text": "After working on the loading state, I moved on to the situations where something goes wrong. A weather website cannot assume that every search will always return a perfect result, so I wanted to make these cases feel like a normal part of the experience instead of looking like a broken page. I started handling cases such as an invalid city name, an empty search and problems with the API response. One small issue I found was that simply showing an error message was not enough — the user should also understand what they need to do next. So I am keeping the error messages simple and making sure the rest of the interface stays usable when a request fails. I am also checking that a failed search does not remove the weather information unnecessarily. What I worked on Invalid city handling Empty search handling API error handling Better error messages Keeping the interface usable after an error Testing different failed requests"}, {"post_id": 60655, "ts": "2026-09-03T04:44:50Z", "hours": 2.2597, "text": "After improving the city search, I started working on what happens between the search and the final weather result. I noticed that when the API takes a little time to respond, the page can feel like nothing is happening, which is not a very good experience. So I started adding a proper loading state while the new weather data is being fetched. I am also making sure that the old information does not stay visible in a confusing way while the new city is loading. Another thing I am working on is keeping the animations connected with these changes, so the weather information does not suddenly appear without any transition. What I worked on Added a loading state for weather searches Improved the transition between old Worked on API response timing Prevented confusing outdated information Connected loading with the existing animations Started preparing better error feedback"}, {"post_id": 60613, "ts": "2026-09-03T02:10:16Z", "hours": 6.2564, "text": "After working on how the weather data flows through the website, I started focusing on the city search experience. The search feature is an important part of the project because it is how users will interact with the website most of the time. One issue I noticed was that changing the city affected multiple parts of the page at once. The current weather, forecast and other information all need to update together. So instead of handling every section separately, I started organising the search flow more carefully. I am also working on making the interaction feel smoother after a search. The goal is to avoid the page feeling like it suddenly changes from one city to another. What I worked on Improving the city search flow Updating multiple weather sections together Handling different city searches Improving the response after searching Working on smoother content changes Preparing the search system for better error handling later"}, {"post_id": 60243, "ts": "2026-09-02T14:20:39Z", "hours": 3.3247, "text": "can you Belive I dont Have My Presnol laptop or pc i am from a very poor family from india and i am makeing projects working on hackclub from schools computer so i have limited time to work and make projects soory to giving less information"}, {"post_id": 60155, "ts": "2026-09-02T10:41:42Z", "hours": 2.1561, "text": "After arranging the main weather sections, I started working on how the information moves through the website. I noticed that simply getting the API data was not enough — the same data had to reach the correct cards and sections without making the page feel messy. I started separating the current weather, hourly data and forecast data so each part could be handled properly. While doing this, I found a few cases where some values were missing or the weather condition was not matching the icon being shown. I fixed these parts by making the data handling more flexible and checking the response before displaying it. I am also keeping the structure simple so it will be easier to add more features later."}, {"post_id": 60089, "ts": "2026-09-02T07:25:14Z", "hours": 3.3619, "text": "HI thats new dedgined tower For my site home screen i will revel only this pls like and foolow my devlog project and pls give suggestion on cooment what to aad to get 10 on 10 rating on ship"}, {"post_id": 60015, "ts": "2026-09-02T03:31:33Z", "hours": 8.6178, "text": "After getting the main structure ready, I started working on the different weather sections one by one. I did not want to build everything together because it became difficult to see which part was causing a problem. I started with the current weather information and then worked on the forecast and hourly sections. While doing this, I noticed that some information looked fine on its own but did not look balanced when placed next to the other sections. So I kept adjusting the structure and spacing while checking the whole page together. I am also trying to keep the information easy to understand, because showing too much weather data at once can make the page confusing. What I worked on Current weather information Forecast section Hourly weather section Weather informtion cards Other cities section Better arrangement of weather data Connecting different sections visually"}, {"post_id": 59630, "ts": "2026-09-01T15:29:40Z", "hours": 5.2403, "text": "The visual part of the redesign is getting close, so now I have started working on the actual functionality. One problem I noticed was that the page looked good with fixed weather information, but that is not useful for a real weather website because the data needs to change dynamically when a user searches for another city.I started connecting the [Yahan apni API ka naam likhein, e.g., OpenWeatherMap] API and working on how the JSON data will be received and parsed. At first, handling different responses was a little confusing because not every city returns the same weather condition data format (some cities lacked specific fields like rain or wind speed), so I had to make my JavaScript logic more flexible using conditional checks.I also added robust error handling using try…catch blocks for cases like an invalid city name (404 errors) or missing data, so the website displays a clean “City Not Found” message instead of crashing or freezing.What I worked on:Connected the live weather API and parsed the incoming JSON response.Replaced all static/fixed UI placeholders with dynamic live data.Linked the city search input button with the API fetch trigger.Implemented logic to dynamically render temperature, humidity, and weather condition text.Handled edge cases (invalid search results, API down, or empty inputs) to prevent UI breakage.Tested the app with multiple global cities to ensure consistent data behavior."}, {"post_id": 59433, "ts": "2026-09-01T08:54:16Z", "hours": 2.6108, "text": "After working on the transitions, I am now doing the small details that can make the website feel more complete. I am going through the whole page again and checking things like spacing, text sizes, card alignment and how each section looks together. I also found a few small things that did not feel right in the first version, so I am fixing them instead of leaving them as they are. The goal now is not to add a lot of new stuff, but to make the existing design cleaner and more polished."}, {"post_id": 59362, "ts": "2026-09-01T03:36:55Z", "hours": 0.4961, "text": "I have started working on the transitions of my weather website. The main design and animations are already there, but some parts still feel a little too sudden when they change or appear. Now I am trying to make everything feel more smooth and natural. I am adjusting the timing, speed and small movements of different elements so the website does not feel like everything is just jumping from one state to another."}, {"post_id": 59344, "ts": "2026-09-01T02:41:28Z", "hours": 0.5247, "text": "After completing the main CSS design, I have started working on the animations for the weather website. I want the page to feel a little more alive instead of everything just appearing on the screen at once. Right now I am experimenting with small animations for the weather section, cards, clouds and different parts of the page. I am trying to keep the animations smooth and simple so they do not make the website feel overloaded. I am also checking how the animations look while scrolling and on different screen sizes. Some animations still need a few adjustments, so this phase is not completely finished yet. i want to give a suprise to You so I didnt attached the dedgine imadge Smooth page animations Weather and cloud animations Card hover effects Small transitions between sections Scroll-based effects Making animations work properly on mobile"}, {"post_id": 58932, "ts": "2026-08-31T14:27:33Z", "hours": 1.8086, "text": "I finished the CSS part of my weather website redesign. After making the rough layout in the first phase, I started turning that idea into an actual interface with proper spacing, sections, cards and responsive layout. I worked on the main weather area, forecast sections, hourly weather, other cities and the footer. I also adjusted the typography, sizes and spacing so the page feels more balanced and closer to the sketch I made. The CSS is now mostly completed, and the website finally looks much closer to the design I had in mind. There are still some small things I want to improve later, but the main visual structure is done. What I completed Main page layout Weather hero section Search bar styling Weather information cards Forecast cards Hourly forecast layout Other cities cards Footer section Spacing and typography Responsive layout adjustments"}, {"post_id": 58781, "ts": "2026-08-31T11:04:42Z", "hours": 1.8761, "text": "to redesign my weather website because the old design was working, but I was not fully happy with how it looked. Some sections felt too plain and the information was not arranged the way I wanted. For this phase, I first looked at my old website and thought about what I should change. I did not want to completely change the idea of the project, so I kept the main weather features but started planning a new layout. Before writing the code, I made a rough sketch on paper. I planned the header, city search, main weather section, forecast cards, hourly weather, other cities and the bottom sections. I also wanted the new design to feel more like a real website and less like a basic practice project. I focused on better spacing, simple typography, clear sections and making the page look good on different screen sizes. Things I planned to improve Redesign the full page layout Make the weather section more clear Improve the forecast cards Add a better hourly forecast section Make the other cities section cleaner Improve mobile responsiveness Keep the interface simple and easy to use"}, {"post_id": 57043, "ts": "2026-08-29T03:39:07Z", "hours": 0.5303, "text": "finaaly animations working smoothly and aal whethers are acurate"}, {"post_id": 56562, "ts": "2026-08-28T11:20:38Z", "hours": 0.6133, "text": "project completed time to ship"}, {"post_id": 56538, "ts": "2026-08-28T10:23:20Z", "hours": 0.8494, "text": "i am aading 3d transictions animations currenetly"}, {"post_id": 56497, "ts": "2026-08-28T09:14:28Z", "hours": 0.4083, "text": "LOOK AT THE DESDGIEN GUYS"}, {"post_id": 56488, "ts": "2026-08-28T08:42:07Z", "hours": 1.2314, "text": "HI I AADED API TO WORK IT ACURATE"}, {"post_id": 56457, "ts": "2026-08-28T07:09:46Z", "hours": 5.0381, "text": "HI LOOK AT THIS CSS IS COMPLETED"}]...
|
Title: arya whether by @aryamankumar2403 | Stardan Title: arya whether by @aryamankumar2403 | Stardance
Devlogs:
HI LOOK AT THIS CSS IS COMPLETED
HI I AADED API TO WORK IT ACURATE
LOOK AT THE DESDGIEN GUYS
i am aading 3d transictions animations currenetly
project completed time to ship
finaaly animations working smoothly and aal whethers are acurate
to redesign my weather website because the old design was working, but I was not fully happy with how it looked. Some sections felt too plain and the information was not arranged the way I wanted. For this phase, I first looked at my old website and thought about what I should change. I did not want to completely change the idea of the project, so I kept the main weather features but started planning a new layout. Before writing the code, I made a rough sketch on paper. I planned the header, city search, main weather section, forecast cards, hourly weather, other cities and the bottom sections. I also wanted the new design to feel more like a real website and less like a basic practice project. I focused on better spacing, simple typography, clear sections and making the page look good on different screen sizes. Things I planned to improve Redesign the full page layout Make the weather section more clear Improve the forecast cards Add a better hourly forecast section Make the other cities section cleaner Improve mobile responsiveness Keep the interface simple and easy to use
I finished the CSS part of my weather website redesign. After making the rough layout in the first phase, I started turning that idea into an actual interface with proper spacing, sections, cards and responsive layout. I worked on the main weather area, forecast sections, hourly weather, other cities and the footer. I also adjusted the typography, sizes and spacing so the page feels more balanced and closer to the sketch I made. The CSS is now mostly completed, and the website finally looks much closer to the design I had in mind. There are still some small things I want to improve later, but the main visual structure is done. What I completed Main page layout Weather hero section Search bar styling Weather information cards Forecast cards Hourly forecast layout Other cities cards Footer section Spacing and typography Responsive layout adjustments
After completing the main CSS design, I have started working on the animations for the weather website. I want the page to feel a little more alive instead of everything just appearing on the screen at once. Right now I am experimenting with small animations for the weather section, cards, clouds and different parts of the page. I am trying to keep the animations smooth and simple so they do not make the website feel overloaded. I am also checking how the animations look while scrolling and on different screen sizes. Some animations still need a few adjustments, so this phase is not completely finished yet. i want to give a suprise to You so I didnt attached the dedgine imadge Smooth page animations Weather and cloud animations Card hover effects Small transitions between sections Scroll-based effects Making animations work properly on mobile
I have started working on the transitions of my weather website. The main design and animations are already there, but some parts still feel a little too sudden when they change or appear. Now I am trying to make everything feel more smooth and natural. I am adjusting the timing, speed and small movements of different elements so the website does not feel like everything is just jumping from one state to another.
After working on the transitions, I am now doing the small details that can make the website feel more complete. I am going through the whole page again and checking things like spacing, text sizes, card alignment and how each section looks together. I also found a few small things that did not feel right in the first version, so I am fixing them instead of leaving them as they are. The goal now is not to add a lot of new stuff, but to make the existing design cleaner and more polished.
The visual part of the redesign is getting close, so now I have started working on the actual functionality. One problem I noticed was that the page looked good with fixed weather information, but that is not useful for a real weather website because the data needs to change dynamically when a user searches for another city.I started connecting the [Yahan apni API ka naam likhein, e.g., OpenWeatherMap] API and working on how the JSON data will be received and parsed. At first, handling different responses was a little confusing because not every city returns the same weather condition data format (some cities lacked specific fields like rain or wind speed), so I had to make my JavaScript logic more flexible using conditional checks.I also added robust error handling using try…catch blocks for cases like an invalid city name (404 errors) or missing data, so the website displays a clean “City Not Found” message instead of crashing or freezing.What I worked on:Connected the live weather API and parsed the incoming JSON response.Replaced all static/fixed UI placeholders with dynamic live data.Linked the city search input button with the API fetch trigger.Implemented logic to dynamically render temperature, humidity, and weather condition text.Handled edge cases (invalid search results, API down, or empty inputs) to prevent UI breakage.Tested the app with multiple global cities to ensure consistent data behavior.
After getting the main structure ready, I started working on the different weather sections one by one. I did not want to build everything together because it became difficult to see which part was causing a problem. I started with the current weather information and then worked on the forecast and hourly sections. While doing this, I noticed that some information looked fine on its own but did not look balanced when placed next to the other sections. So I kept adjusting the structure and spacing while checking the whole page together. I am also trying to keep the information easy to understand, because showing too much weather data at once can make the page confusing. What I worked on Current weather information Forecast section Hourly weather section Weather informtion cards Other cities section Better arrangement of weather data Connecting different sections visually
HI thats new dedgined tower For my site home screen i will revel only this pls like and foolow my devlog project and pls give suggestion on cooment what to aad to get 10 on 10 rating on ship
After arranging the main weather sections, I started working on how the information moves through the website. I noticed that simply getting the API data was not enough — the same data had to reach the correct cards and sections without making the page feel messy. I started separating the current weather, hourly data and forecast data so each part could be handled properly. While doing this, I found a few cases where some values were missing or the weather condition was not matching the icon being shown. I fixed these parts by making the data handling more flexible and checking the response before displaying it. I am also keeping the structure simple so it will be easier to add more features later.
can you Belive I dont Have My Presnol laptop or pc i am from a very poor family from india and i am makeing projects working on hackclub from schools computer so i have limited time to work and make projects soory to giving less information
After working on how the weather data flows through the website, I started focusing on the city search experience. The search feature is an important part of the project because it is how users will interact with the website most of the time. One issue I noticed was that changing the city affected multiple parts of the page at once. The current weather, forecast and other information all need to update together. So instead of handling every section separately, I started organising the search flow more carefully. I am also working on making the interaction feel smoother after a search. The goal is to avoid the page feeling like it suddenly changes from one city to another. What I worked on Improving the city search flow Updating multiple weather sections together Handling different city searches Improving the response after searching Working on smoother content changes Preparing the search system for better error handling later
After improving the city search, I started working on what happens between the search and the final weather result. I noticed that when the API takes a little time to respond, the page can feel like nothing is happening, which is not a very good experience. So I started adding a proper loading state while the new weather data is being fetched. I am also making sure that the old information does not stay visible in a confusing way while the new city is loading. Another thing I am working on is keeping the animations connected with these changes, so the weather information does not suddenly appear without any transition. What I worked on Added a loading state for weather searches Improved the transition between old Worked on API response timing Prevented confusing outdated information Connected loading with the existing animations Started preparing better error feedback
After working on the loading state, I moved on to the situations where something goes wrong. A weather website cannot assume that every search will always return a perfect result, so I wanted to make these cases feel like a normal part of the experience instead of looking like a broken page. I started handling cases such as an invalid city name, an empty search and problems with the API response. One small issue I found was that simply showing an error message was not enough — the user should also understand what they need to do next. So I am keeping the error messages simple and making sure the rest of the interface stays usable when a request fails. I am also checking that a failed search does not remove the weather information unnecessarily. What I worked on Invalid city handling Empty search handling API error handling Better error messages Keeping the interface usable after an error Testing different failed requests
After finishing the basic error handling, I started working on how the website visually represents different weather conditions. I noticed that showing only the temperature and text does not give the user much feeling about what the weather is actually like. So I started connecting the weather conditions with the correct icons and visual elements. The tricky part was that the API can return different condition names, so I had to make sure similar conditions were handled correctly instead of creating a separate case for every small variation. I am also trying to keep the visuals consistent with the new design. I don’t want to add too many effects just for the sake of animation, so I am keeping them subtle and related to the actual weather.
After improving the weather visuals, I started checking how the website behaves on smaller screens. The desktop layout was looking good, but when everything became narrower, some cards started feeling too crowded and a few sections needed better spacing. Instead of making a completely separate mobile design, I am adjusting the existing layout so the same website can naturally adapt to different screen sizes. I am also checking the search area, weather information and forecast cards because these are the sections that can become difficult to use on a small screen.
Hlw friend my whether web is almost completed aal api hanling mobile view tab desktop view aal are working perfect the animation are fully smooth any datanot in raw form Aal site is completed i will show the imadge of home view in next Devlog foolw the project to see what is made
After a lot of work behind the scenes, I finally revealed the home screen of the project. The main layout, visuals, animations, and overall experience are starting to come together. There is still a lot left to polish, but I’m happy with how it’s taking shape. Current progress: ~80% complete. The remaining 20% is mainly about refining the details, improving the animations, fixing small issues, and making everything feel more Profeesional
i aaded map
Ships:
I Maked A full 3d funsctional Animated 3d gether aap for Pc And Mobile I Aaded open Api And Most Difiiculte part Is To make Dedgine
What did i make ? I built a responsive weather website where users can search for a city and see its current weather, temperature, humidity, wind, pressure, hourly forecast and upcoming forecast. I also redesigned the whole interface and added smoother animations, transitions, weather visuals and a better way to explore different cities. What was challenging? The hardest part was getting all the different weather information to work together without making the interface confusing. Handling API responses, loading states, invalid searches and different screen sizes took more time than I expected. I also had to keep adjusting the animations because some of them looked good individually but felt too much when everything was running together. What i am proud of? I am most proud of the redesign because it started from a rough paper sketch and slowly became an actual working website. I also like that I didn’t just focus on making it look good — I spent time fixing the small interactions and making the weather data actually useful. What should people know? The project is still being developed, so some things may change as I continue working on it. I have intentionally kept the latest redesign hidden for now because I want to reveal the new look...
|
1792878811.1856272
|
1793742811.1856272
|
|
55712
|
APP BLOCKER (macOS) by @Dhanush_Mundra | Stardance
|
Dhanush_Mundra
|
1
|
63.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-13T12:58:49Z", "hours": 63.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Finally!!! This is my first app, Multi-App-Blocker!!! So there would be two sections abut this project- What is this and How did I make this app. So let’s start with the first section:- What is this? So, this an application that only runs on macOS which blocks apps according to the time schedule set by the user. The app shows all the downloaded applications on the sysem in the dropdown list from where the user can select the app. When the user selects the app they want to block, the user need to enter the start time and the end time. After that the user gets the option of select the type of schedule. So there are four options to select the type of schedule, that are- Every Day; Today Only; Specific Days; Specific Date. So, here the user can select the type according to their needs. Another exciting feature of my app is that the user can set multiple schedules for a single app. However the condition is that the other schedules should not overlap or should be the same as the previous schedules. After this when the schedule has been checked by the app, the app starts to monitor the schedule. When the current time matches the schedule time, the app is blocked. Also, if you restart your system after setting the schedule, your app would be blocked then also within 3-5 minutes if you want the app to be instantly blocked after restarting the system otherwise normally, the app is immediately blocked depending on the speed of your system. Also, at last, another feature of this app is that you can delete, edit and disable or enable your scheudules. Like this, you can set as many schedules for as many apps you want. So, this was about how my App Blocker works. Now let’s move to the next section which is:- How did I make this app? So, I started making this project by building the time tracker of my app. When I completed making he time tracker, I learn about the processes of apps, PIDs(Process Identifier) and the terminal commands like mdfind and many libraries such as datetime, psutil, subprocess, pathlib, json etc. So, by combining all these I made a simple terminal working program that would block a single app for a particular period of time. After this, I thought of making a GUI using HTML and CSS and making the GUI functional using JavaScript. So, I wrote the code of HTML and CSS by myself and also learnt a bit of JavaScript to make the GUI functional. By now my GUI was ready and the backend for a single app blocker was also ready but were not connected. And then I got to know about Electron. So I explored about electron ad decided to use it for my app. Then I connected my GUI using Electron to my Python backend using some more JavaScript code. Now, it started to feel more like an app, But I wanted multi app blocker so I wrote the code for it also and added the features of multiple schedules, edit, delete, disable and enable, and schedule types. After all this, it was like, I built an app, but this so called app was not working after I restarted my mac. And just because of this, I needed to work 5 more days to figure out the solution. And when I got the solution. I did the final test. However, after restarting it takes around 3-5 minutes to block the app but it does block the app. Now, I can declare it a professional, working, Multi-App-Blocker. Note: This application is only for macOS. And you can download the .dmg file from the try project link below. Thank You so much for reading it till here.", "repo": "https://github.com/mundradhanush-lgtm/APP-BLOCKER", "demo": "https://github.com/mundradhanush-lgtm/APP-BLOCKER/releases/download/v1.0.0/App.Blocker-1.0.0-arm64.dmg"}]...
|
[{"post_id": 79280, "ts": "202 [{"post_id": 79280, "ts": "2026-10-13T09:45:42Z", "hours": 4.0328, "text": "Finally!!! I have created the MULTI-APP-BLOCKER!!! In this final session of app blocker I worked on the feature of blocking apps even after restarting the system if the current time is in the schedule. I literally worked on this feature for 3 days and it paid off. However this is not a strong feature because it takes around 3-5 minutes to block the application instantly after restarting the system. Normally, it immediately blocks the app. So, I worked on this feature in this final session and now I am going to set my APP BLOCKER out for rating soon. THANK YOU SO MUCH!!!"}, {"post_id": 78765, "ts": "2026-10-11T15:18:12Z", "hours": 9.7883, "text": "of so I have finally built a multi-app blocker. In this session I just made the GUI better, made a better backend and made it into a usable app. I added multiple schedule feature for a single app and then the feature of schedule types like today, specific date, specific days and every day from which the user can choose any and for multiple schedule I put a check that the second or the third or any later schedule should not overlap the earlier schedules. The App Blocker is working very nicely, but I want to fit the last piece of the puzzle and the is by making the App Blocker immune to computer restart or turning it on again after shutting down. So, I want to work on that that the app should be blocked even if the computer has been restarted or it has been turned on after shutting down. But, I can say that it is now a professional App Blocker and I would soon finish this project."}, {"post_id": 76373, "ts": "2026-10-03T10:29:23Z", "hours": 3.7033, "text": "ok so finally, I have created a professional single-app blocker. In the earlier section, I wrote my code for JavaScript and I was thinking that I have created the app, but I was wrong. After writing the code, in this section, I downloaded electron and connected it to my code using two json files and 2 JavaScript files. After that I worked on error handling which was a very complicated part. Also I took the help of AI to identify what kind of errors can happen and what kind of handling I should put. Also, I created a section in my GUI where I would be giving the status of the app blocker like is the app blocked or is it not blocked or is there any problem. I have done this much and it is working ratty decently. Now I have decided to make it a Multi-App Blocker where the user can set different schedules for different apps and set when to block the apps like after setting the time on which days the user want to block the apps or else the user wants to block the app in two different sections. For eg- The user wants to block the app from 2:00 pm to 3 pm and then from 6 pm to 8 pm. So, I would be trying to keep that functionality also. And if possible, the coolest thing I would want to do is that allowing the user to keep a password on it so that no one can block unwanted apps for 24 hours. Hopefully, I can do all of this because I have this idea in my mid only and I have no planning so I would be working very hard till 31st October."}, {"post_id": 75541, "ts": "2026-09-30T12:08:19Z", "hours": 3.2575, "text": "Let’s goooo everyone!! I have finally written my JavaScript code for my App Blocker. I am very happy as this was my first JavaScript code for this big project and I am very proud of myself as I wrote the whole code myself just taking the help of AI to know what step to take next. In this code I solved the time related problems like the checking of valid time, turning the time entered by the user into a 24 hour clock system and then turning it into a properly usable form. I also created a hardcoded list for now which included some app names, which would be replaced by my python list that would have all the app names downloaded in my system. And finally, I created an object containing app name, start time and end time. This object would be provided to my python code and it would block the app for that period of time."}, {"post_id": 75173, "ts": "2026-09-29T11:33:57Z", "hours": 1.0422, "text": "Ok Everyone!! I have made the structure for my GUI and designed it properly. Now, the only thing left is JavaScript and the coming up of these languages together in Electron. But there is still one problem. Right now my App Blocker is blocking only one app at a time, butI want to make it multi-app blocker and also my app blocker is not working after it is closed, so I want it to work forever and keep checking the time."}, {"post_id": 75042, "ts": "2026-09-28T23:41:53Z", "hours": 1.7242, "text": "Finally, I have completed the backend of my App Blocker and now I can start the work on my GUI and I would be using Electron to make my App Blocker into a real life desktop application. I am also very happy that Stardance has been extended till 31st October. I have given the final touches to my backend like the input of time by the user and in the future after making the GUI I would make the App Blocker block multiple apps. So, my next devlon would be of me updating you upon my GUI."}, {"post_id": 73229, "ts": "2026-09-24T17:02:27Z", "hours": 8.1553, "text": "ok so I am posting this devlon cuz i got a message on slack that more than 10 hours would not be counted in the devlon time. So after HTML and CSS I am learning JavaScript to work and know about Electron and make the interface with it. Then i would do the small tasks such as setting the password and the user inputs at various places and multiple app blocking feature. I am learning JavaScript with Dave Gray’s JavaScript course(I know its a bit old but the best). And I have like 2 chapters left and then i would start learning about electron. And the best thing is that Stardance has been extended by 1 month."}, {"post_id": 71934, "ts": "2026-09-21T20:13:44Z", "hours": 5.7328, "text": "ok so i have finally completed the course of CSS and HTML in just 5 days. this actually feels like an achievement to me. So, I learnt the basics of HTML and CSS that are required for my project. Now my next step would be to learn the basics of JavaScript and complete it in around 2 days and complete the APP BLOCKER."}, {"post_id": 70203, "ts": "2026-09-18T18:12:12Z", "hours": 5.0319, "text": "ok everyone, in this devlog I have not created anything, but I have gained a lot of knowledge. So, to make the GUI of my APP BLOCKER I want to use Electron and for that in these 2 days I have learnt CSS and HTML which are the basic languages. earlier what I as doing was I knew very little about HTML but not CSS, so I had to use AI, but now I want to make APP BLOCKER without AI and for that I am learning HTML, CSS and JavaScript. So after these I would read about Electron and make the GUI for this APP BLOCKER. NOTE: given below is the screenshot of me learning not of the project."}, {"post_id": 68764, "ts": "2026-09-15T18:21:59Z", "hours": 3.1256, "text": "Ok so earlier I was having a problem even after printing the dictionary and taking the number corresponding to it. the problem there was that my app blocker only blocked the apps that had no duplicates, which means like when i tried to block IDLE, I had 4 different versions of IDLE and after just telling my project that I need to block the IDLE it was not able to interpret which IDLE it had to block. So now I had to give it the parent folder also to find the mid but instead of trying two different ways to get the pid I gave the parent folder for every app and got the pid, hence dropping the idea of osascript. Then I continued my normal loop of blocking the app. Now I am happy it is blocking the app. Now i would first handle the small task like taking the start time and end time as the input from the user. Then I would add the feature of taking multiple apps as the input with their time and finally after all those things I would mage the GUI and end the project. In the image below is the part I added today."}, {"post_id": 65557, "ts": "2026-09-10T19:33:22Z", "hours": 6.5817, "text": "ok so earlier I was using hardcoded list of apps to block them, then I started taking the app name as an input, but then I realised that I would then want the user to type the app name in a specific type that is needed by the osascript to provide me its pid. but then I got an idea to give a dropdown of apps downloaded in the user’s system and they just simply had to select that app. so, I used multiple lists and dictionaries and splitted the path of the app into the app name that can be displayed. for now I have made a dictionary with the names of apps and serial numbers corresponding to them so the user just have to select the number. but in future when I would make the gui, the user would then just have to click on it. but currently I am facing a problem that after am printing the names of apps and the user is selecting the number, some apps are being blocked and and some are not. so I am currently working on this problem. if somebody can help me, please comment below. it would be of great pleasure. THANK YOU!!"}, {"post_id": 61734, "ts": "2026-09-04T19:42:57Z", "hours": 4.2442, "text": "ok so earlier my I made the time tracker and the hardcoded list for particular apps and then merged both of them so that it would just close the hardcoded apps in that list but now I modified it and took input from the user, ran the terminal command mdfind to check if the app is running or not then used osascript to get the pid of the process and then used that pid to terminate the app. but there was a challenge to find the difference of closed apps and already running apps and after that to keep them blocked till the designated time. so today I worked on that and made a good app blocker which can be used but some modifications like the input of time from the user, input of multiple apps and creating the gui. so after working on that my program would be ready."}, {"post_id": 60060, "ts": "2026-09-02T05:25:00Z", "hours": 0.5317, "text": "let’s go, today I added the loop for my program which was very important because earlier my program was just closing the app if it was running, but the user can again open it. now they couldn’t because I put all of that terminating part inside a loop that would work continuously for that time period."}, {"post_id": 59741, "ts": "2026-09-01T17:49:30Z", "hours": 1.1153, "text": "ok so this is my second devlog for this project. today I made the part where I would get the names of all the running processes on my Mac and then I made a list for the apps that I need to block then I compared the all the running processes with the apps I need to block and then just printed that this app needs to be closed just for the testing purpose. now my next work would be to terminate the app and then to modify it I would take the input of the app and time from the user itself and then in the end I would create a good GUI to give it a look of a fully polished project."}, {"post_id": 57999, "ts": "2026-08-30T10:29:51Z", "hours": 4.9769, "text": "ok so this is my first devlog of APP BLOCKER. this is a project where the app would be blocked between a specific period of time. and till now I have made the time system like for the testing purpose it would show blocked if the program is ran between the designated time period and would show allowed if not ran between the designated time. I also learnt about process and learnt how to print all the running processes using psutil (process and system utilities). now my target would be merging them after modifying both the codes"}]...
|
Title: APP BLOCKER (macOS) by @Dhanush_Mundra | St Title: APP BLOCKER (macOS) by @Dhanush_Mundra | Stardance
Devlogs:
ok so this is my first devlog of APP BLOCKER. this is a project where the app would be blocked between a specific period of time. and till now I have made the time system like for the testing purpose it would show blocked if the program is ran between the designated time period and would show allowed if not ran between the designated time. I also learnt about process and learnt how to print all the running processes using psutil (process and system utilities). now my target would be merging them after modifying both the codes
ok so this is my second devlog for this project. today I made the part where I would get the names of all the running processes on my Mac and then I made a list for the apps that I need to block then I compared the all the running processes with the apps I need to block and then just printed that this app needs to be closed just for the testing purpose. now my next work would be to terminate the app and then to modify it I would take the input of the app and time from the user itself and then in the end I would create a good GUI to give it a look of a fully polished project.
let’s go, today I added the loop for my program which was very important because earlier my program was just closing the app if it was running, but the user can again open it. now they couldn’t because I put all of that terminating part inside a loop that would work continuously for that time period.
ok so earlier my I made the time tracker and the hardcoded list for particular apps and then merged both of them so that it would just close the hardcoded apps in that list but now I modified it and took input from the user, ran the terminal command mdfind to check if the app is running or not then used osascript to get the pid of the process and then used that pid to terminate the app. but there was a challenge to find the difference of closed apps and already running apps and after that to keep them blocked till the designated time. so today I worked on that and made a good app blocker which can be used but some modifications like the input of time from the user, input of multiple apps and creating the gui. so after working on that my program would be ready.
ok so earlier I was using hardcoded list of apps to block them, then I started taking the app name as an input, but then I realised that I would then want the user to type the app name in a specific type that is needed by the osascript to provide me its pid. but then I got an idea to give a dropdown of apps downloaded in the user’s system and they just simply had to select that app. so, I used multiple lists and dictionaries and splitted the path of the app into the app name that can be displayed. for now I have made a dictionary with the names of apps and serial numbers corresponding to them so the user just have to select the number. but in future when I would make the gui, the user would then just have to click on it. but currently I am facing a problem that after am printing the names of apps and the user is selecting the number, some apps are being blocked and and some are not. so I am currently working on this problem. if somebody can help me, please comment below. it would be of great pleasure. THANK YOU!!
Ok so earlier I was having a problem even after printing the dictionary and taking the number corresponding to it. the problem there was that my app blocker only blocked the apps that had no duplicates, which means like when i tried to block IDLE, I had 4 different versions of IDLE and after just telling my project that I need to block the IDLE it was not able to interpret which IDLE it had to block. So now I had to give it the parent folder also to find the mid but instead of trying two different ways to get the pid I gave the parent folder for every app and got the pid, hence dropping the idea of osascript. Then I continued my normal loop of blocking the app. Now I am happy it is blocking the app. Now i would first handle the small task like taking the start time and end time as the input from the user. Then I would add the feature of taking multiple apps as the input with their time and finally after all those things I would mage the GUI and end the project. In the image below is the part I added today.
ok everyone, in this devlog I have not created anything, but I have gained a lot of knowledge. So, to make the GUI of my APP BLOCKER I want to use Electron and for that in these 2 days I have learnt CSS and HTML which are the basic languages. earlier what I as doing was I knew very little about HTML but not CSS, so I had to use AI, but now I want to make APP BLOCKER without AI and for that I am learning HTML, CSS and JavaScript. So after these I would read about Electron and make the GUI for this APP BLOCKER. NOTE: given below is the screenshot of me learning not of the project.
ok so i have finally completed the course of CSS and HTML in just 5 days. this actually feels like an achievement to me. So, I learnt the basics of HTML and CSS that are required for my project. Now my next step would be to learn the basics of JavaScript and complete it in around 2 days and complete the APP BLOCKER.
ok so I am posting this devlon cuz i got a message on slack that more than 10 hours would not be counted in the devlon time. So after HTML and CSS I am learning JavaScript to work and know about Electron and make the interface with it. Then i would do the small tasks such as setting the password and the user inputs at various places and multiple app blocking feature. I am learning JavaScript with Dave Gray’s JavaScript course(I know its a bit old but the best). And I have like 2 chapters left and then i would start learning about electron. And the best thing is that Stardance has been extended by 1 month.
Finally, I have completed the backend of my App Blocker and now I can start the work on my GUI and I would be using Electron to make my App Blocker into a real life desktop application. I am also very happy that Stardance has been extended till 31st October. I have given the final touches to my backend like the input of time by the user and in the future after making the GUI I would make the App Blocker block multiple apps. So, my next devlon would be of me updating you upon my GUI.
Ok Everyone!! I have made the structure for my GUI and designed it properly. Now, the only thing left is JavaScript and the coming up of these languages together in Electron. But there is still one problem. Right now my App Blocker is blocking only one app at a time, butI want to make it multi-app blocker and also my app blocker is not working after it is closed, so I want it to work forever and keep checking the time.
Let’s goooo everyone!! I have finally written my JavaScript code for my App Blocker. I am very happy as this was my first JavaScript code for this big project and I am very proud of myself as I wrote the whole code myself just taking the help of AI to know what step to take next. In this code I solved the time related problems like the checking of valid time, turning the time entered by the user into a 24 hour clock system and then turning it into a properly usable form. I also created a hardcoded list for now which included some app names, which would be replaced by my python list that would have all the app names downloaded in my system. And finally, I created an object containing app name, start time and end time. This object would be provided to my python code and it would block the app for that period of time.
ok so finally, I have created a professional single-app blocker. In the earlier section, I wrote my code for JavaScript and I was thinking that I have created the app, but I was wrong. After writing the code, in this section, I downloaded electron and connected it to my code using two json files and 2 JavaScript files. After that I worked on error handling which was a very complicated part. Also I took the help of AI to identify what kind of errors can happen and what kind of handling I should put. Also, I created a section in my GUI where I would be giving the status of the app blocker like is the app blocked or is it not blocked or is there any problem. I have done this much and it is working ratty decently. Now I have decided to make it a Multi-App Blocker where the user can set different schedules for different apps and set when to block the apps like after setting the time on which days the user want to block the apps or else the user wants to block the app in two different sections. For eg- The user wants to block the app from 2:00 pm to 3 pm and then from 6 pm to 8 pm. So, I would be trying to keep that functionality also. And if possible, the coolest thing I would want to do is that allowing the user to keep a password on it so that no one can block unwanted apps for 24 hours. Hopefully, I can do all of this because I have this idea in my mid only and I have no planning so I would be working very hard till 31st October.
of so I have finally built a multi-app blocker. In this session I just made the GUI better, made a better backend and made it into a usable app. I added multiple schedule feature for a single app and then the feature of schedule types like today, specific date, specific days and every day from which the user can choose any and for multiple schedule I put a check that the second or the third or any later schedule should not overlap the earlier schedules. The App Blocker is working very nicely, but I want to fit the last piece of the puzzle and the is by making the App Blocker immune to computer restart or turning it on again after shutting down. So, I want to work on that that the app should be blocked even if the computer has been restarted or it has been turned on after shutting down. But, I can say that it is now a professional App Blocker and I would soon finish this project.
Finally!!! I have created the MULTI-APP-BLOCKER!!! In this final session of app blocker I worked on the feature of blocking apps even after restarting the system if the current time is in the schedule. I literally worked on this feature for 3 days and it paid off. However this is not a strong feature because it takes around 3-5 minutes to block the application instantly after restarting the system. Normally, it immediately blocks the app. So, I worked on this feature in this final session and now I am going to set my APP BLOCKER out for rating soon. THANK YOU SO MUCH!!!
Ships:
Finally!!! This is my first app, Multi-App-Blocker!!! So there would be two sections abut this project- What is this and How did I make this app. So let’s start with the first section:- What is this? So, this an application that only runs on macOS which blocks apps according to the time schedule set by the user. The app shows all the downloaded applications on the sysem in the dropdown list from where the user can select the app. When the user selects the app they want to block, the user need to enter the start time and the end time. After that the user gets the option of select the type of schedule. So there are four options to select the type of schedule, that are- Every Day; Today Only; Specific Days; Specific Date. So, here the user can select the type according to their needs. Another exciting feature of my app is that the user can set multiple schedules for a single app. However the condition is that the other schedules should not overlap or should be the same as the previous schedules. After this when the schedule has been checked by the app, the app starts to monitor the schedule. When the current time matches the schedule time, the app is blocked. Also, if you restart your system after setting the schedule, your app would be blocked then also within 3-5 minutes if you want the app to be instantly blocked after restarting the system otherwise normally, the app is immediately blocked depending on the speed of your system. Also, at last, another feature of this app is that you can delete, edit and disable or enable your scheudules. Like this, you can set as many schedules for as many apps you want. So, this was about how my App Blocker works. Now let’s move to the next section which is:- How did I make this app? So, I started making this project by building the time tracker of my app. When I completed making he time tracker, I learn about the processes of apps, PIDs(Process Identifier) and the terminal commands like mdfind and many libraries such as datetime, psutil, subprocess, pathlib, json etc. So, by combining all these I made a simple terminal working program that would block a single app for a particular period of time. After this, I thought of making a GUI using HTML and CSS and making the GUI functional using JavaScript. So, I wrote the code of HTML and CSS by myself and also learnt a bit of JavaScript to make the GUI functional. By now my GUI was ready and the backend for a single app blocker was also ready but were not connected. And then I got to know about Electron. So I explored about electron ad decided to use it for my app. Then I connected my GUI using Electron to my Python backend using some more JavaScript code. Now, it started to feel more like an app, But I wanted multi app blocker so I wrote the code for it also and added the features of multiple schedules, edit, delete, disable and enable, and schedule types. After all this, it was like, I built an app, but this so called app was not working after I restarted my mac. And just because of this, I needed to work 5 more days to figure out the solution. And when I got the solution. I did the final test. However, after restarting it takes around 3-5 minutes to block the app but it does block the app. Now, I can declare it a professional, working, Multi-App-Blocker. Note: This application is only for macOS. And you can download the .dmg file from the try project link below. Thank You so much for reading it till here....
|
1793047942.0632558
|
1793134342.0632558
|
|
44385
|
Monster Slayer by @Iforgor | Stardance
|
Iforgor
|
0
|
62.94
|
0
|
[]
|
[{"post_id": 41632, "ts": "202 [{"post_id": 41632, "ts": "2026-08-05T23:24:43Z", "hours": 62.9378, "text": "Ive been working on this project and tracking the hours but wasnt on stardance, now im here yay! So this is my first devlog on here and ive already released demo v0.42 of my game and working on v0.5"}]...
|
Title: Monster Slayer by @Iforgor | Stardance
Dev Title: Monster Slayer by @Iforgor | Stardance
Devlogs:
Ive been working on this project and tracking the hours but wasnt on stardance, now im here yay! So this is my first devlog on here and ive already released demo v0.42 of my game and working on v0.5...
|
1792943702.6646624
|
1793807702.6646624
|
|
17304
|
Piston AI 5.0 by @milo0622 | Stardance
|
milo0622
|
0
|
62.8
|
0
|
[]
|
[{"post_id": 63474, "ts": "202 [{"post_id": 63474, "ts": "2026-09-07T11:01:07Z", "hours": 11.7681, "text": "Changelog ( e5c7d57 ) feat(media): Add playpause detection support on Windows ( 0fcef7d ) perf(import): Optimize term.py import speed ( 170bc09 ) fix(media): Fix import error of GlobalSystemMediaTransportControlsSessionManager ( 8ed4032 ) fix(media): Fix media import error and missing requirements ( 7bd359e ) fix(setup): Fix package installation ignorance of pip install ( a4e7bac ) feat(setup): Add argument to setup.py to skip package installation and jump directly to configuration page ( 62f5600 ) feat(setup): Add Windows automated setup installation ( dd043e5 ) feat(media): Add capability to read playing media on macOS and Windows ( e902e62 ) chore(readme): Change minimum Python version to 3.11 ( 3011897 ) fix(setup): Fix setup not exiting after Python version mismatch Piston AI can finally execute two tools with one single response without crashing!"}, {"post_id": 48259, "ts": "2026-08-16T15:47:14Z", "hours": 2.0331, "text": "Commits fo rthe last 2 hours: Commit 18a60f0 : fix(setup): Fix unfinished function Commit e3f2966 : chore(readme): Add README.md file and is almost ready to ship"}, {"post_id": 37617, "ts": "2026-07-30T14:09:33Z", "hours": 5.0208, "text": "Commits for the last ~5 hours: Commit a1b0e6 : feat(setup script): Add setup script to Piston AI Commit aed445f : fix(media): Add OS check before importing libraries Commit e1b9ec4 : fix(error): Fix error handling in agent.py Commit 0cdce18 : fix(wakeword): Fix wakeword initialization error on Linux devices Commit a80cd11 : fix(media): Fix media playback error for Linux and Add distro-specific packages for setup script b212ec3 : fix(setup): Fix unassociated API variable in setup.py Commit 0f9ba15 : fix(ignored file): Remove .env file from files and previous staged changes Commit 9c1251f : fix(setup): Fix non-iterable error in setup.py Commit 8649126 : fix(requirements file): Remove unused dependencies from requirements.txt and remove useless pycache Commit 84a4d9c : refactor(useless files): Remove unused depencies from requirements.txt and untrack useless pycache files from gitignore"}, {"post_id": 37042, "ts": "2026-07-29T14:43:35Z", "hours": 11.8947, "text": "Commits for the last 11.5 hours: Commit 927f3ba : feat(agent): add multi-provider support via LiteLLM Commit 3502eda : fix(weather fetch): Fix city name overwritting error Commit 3671e97 : feat(pull): Add API for pulling files directly from GitHub/internet Commit 98d8cc3 : feat(connectivity): Add connectivity checking to system health check and file download module Commit fca6563 : feat(system prompt): Prompt AI to add [OPEN] and [CLOSE] tags to every conversation for better STT Commit ee37f75 : feat(STT improvement): Add open return bool to main.py from agent.py to confirm STT continuity Commit 4231249 : feat(SFX): Implement sound effects back to main.py Commit df836eb : fix(library import): Remove the import of a deleted module (normal.py) Commit 90b6028 : feat(providers list): Add automatic fetching when providers file is not found Commit ca73e74 : feat(tools): Add clipboard manager and connectivity check tools to Piston AI Commit 3eac0f4 : feat(thinking mode): Add structurized thinking responses for supported models Commit d55c4d4 : refactor(connectivity): Remove useless file Commit 2b519df : feat(ytdlp): Add YouTube Music playback support to Piston AI Commit 67da465 : feat(continuous tool calling): Add continuous tool calling to call more than one function per request Commit 655312e : feat(provider): Add NVIDIA support Commit ed53111 : fix(websearch): Recover websearch tool back Commit 11bd96f : feat(providers): Add support to using .env files instead of editing the providers.json file Commit f17cc42 : fix(tool calling): Fix infinite tool calling bug"}, {"post_id": 34431, "ts": "2026-07-25T04:09:23Z", "hours": 10.0558, "text": "Commit messages in the past 9 hours: Commit cbb3ecc : feat(wakeword): Add wakeword engine (openwakeword) Commit 927f3ba : feat(agent): add multi-provider support via LiteLLM Rewrite agent logic to support dynamic provider switching using LiteLLM endpoints. Add provider and tool configuration files (providers.json, tool.json). Commit 3502eda fix(weather fetch): Fix city name overwritting error"}, {"post_id": 33032, "ts": "2026-07-22T16:18:56Z", "hours": 9.81, "text": "In this 9 hours of work, I’ve rewritten Piston AI… Again. But this, time, OOP is used much more than before, and more stable, with Jarvis’ voice, with British accents :)"}, {"post_id": 9232, "ts": "2026-06-15T14:38:10Z", "hours": 12.2214, "text": "I’m rlly sorry that I haven’t posted a devlog for a long time. But in the last 12 hours, I’ve used Python to add tools to the AI, STT and TTS to the whole program! My efficiency is sometimes low, so forgive me for not posting a devlog for this long Tools added to Piston AI: web search, weather fetching"}]...
|
Title: Piston AI 5.0 by @milo0622 | Stardance
Dev Title: Piston AI 5.0 by @milo0622 | Stardance
Devlogs:
I’m rlly sorry that I haven’t posted a devlog for a long time. But in the last 12 hours, I’ve used Python to add tools to the AI, STT and TTS to the whole program! My efficiency is sometimes low, so forgive me for not posting a devlog for this long Tools added to Piston AI: web search, weather fetching
In this 9 hours of work, I’ve rewritten Piston AI… Again. But this, time, OOP is used much more than before, and more stable, with Jarvis’ voice, with British accents :)
Commit messages in the past 9 hours: Commit cbb3ecc : feat(wakeword): Add wakeword engine (openwakeword) Commit 927f3ba : feat(agent): add multi-provider support via LiteLLM Rewrite agent logic to support dynamic provider switching using LiteLLM endpoints. Add provider and tool configuration files (providers.json, tool.json). Commit 3502eda fix(weather fetch): Fix city name overwritting error
Commits for the last 11.5 hours: Commit 927f3ba : feat(agent): add multi-provider support via LiteLLM Commit 3502eda : fix(weather fetch): Fix city name overwritting error Commit 3671e97 : feat(pull): Add API for pulling files directly from GitHub/internet Commit 98d8cc3 : feat(connectivity): Add connectivity checking to system health check and file download module Commit fca6563 : feat(system prompt): Prompt AI to add [OPEN] and [CLOSE] tags to every conversation for better STT Commit ee37f75 : feat(STT improvement): Add open return bool to main.py from agent.py to confirm STT continuity Commit 4231249 : feat(SFX): Implement sound effects back to main.py Commit df836eb : fix(library import): Remove the import of a deleted module (normal.py) Commit 90b6028 : feat(providers list): Add automatic fetching when providers file is not found Commit ca73e74 : feat(tools): Add clipboard manager and connectivity check tools to Piston AI Commit 3eac0f4 : feat(thinking mode): Add structurized thinking responses for supported models Commit d55c4d4 : refactor(connectivity): Remove useless file Commit 2b519df : feat(ytdlp): Add YouTube Music playback support to Piston AI Commit 67da465 : feat(continuous tool calling): Add continuous tool calling to call more than one function per request Commit 655312e : feat(provider): Add NVIDIA support Commit ed53111 : fix(websearch): Recover websearch tool back Commit 11bd96f : feat(providers): Add support to using .env files instead of editing the providers.json file Commit f17cc42 : fix(tool calling): Fix infinite tool calling bug
Commits for the last ~5 hours: Commit a1b0e6 : feat(setup script): Add setup script to Piston AI Commit aed445f : fix(media): Add OS check before importing libraries Commit e1b9ec4 : fix(error): Fix error handling in agent.py Commit 0cdce18 : fix(wakeword): Fix wakeword initialization error on Linux devices Commit a80cd11 : fix(media): Fix media playback error for Linux and Add distro-specific packages for setup script b212ec3 : fix(setup): Fix unassociated API variable in setup.py Commit 0f9ba15 : fix(ignored file): Remove .env file from files and previous staged changes Commit 9c1251f : fix(setup): Fix non-iterable error in setup.py Commit 8649126 : fix(requirements file): Remove unused dependencies from requirements.txt and remove useless pycache Commit 84a4d9c : refactor(useless files): Remove unused depencies from requirements.txt and untrack useless pycache files from gitignore
Commits fo rthe last 2 hours: Commit 18a60f0 : fix(setup): Fix unfinished function Commit e3f2966 : chore(readme): Add README.md file and is almost ready to ship
Changelog ( e5c7d57 ) feat(media): Add playpause detection support on Windows ( 0fcef7d ) perf(import): Optimize term.py import speed ( 170bc09 ) fix(media): Fix import error of GlobalSystemMediaTransportControlsSessionManager ( 8ed4032 ) fix(media): Fix media import error and missing requirements ( 7bd359e ) fix(setup): Fix package installation ignorance of pip install ( a4e7bac ) feat(setup): Add argument to setup.py to skip package installation and jump directly to configuration page ( 62f5600 ) feat(setup): Add Windows automated setup installation ( dd043e5 ) feat(media): Add capability to read playing media on macOS and Windows ( e902e62 ) chore(readme): Change minimum Python version to 3.11 ( 3011897 ) fix(setup): Fix setup not exiting after Python version mismatch Piston AI can finally execute two tools with one single response without crashing!...
|
1792795762.477894
|
1793400562.477894
|
|
52744
|
Context Forge by @vxyzln | Stardance
|
vxyzln
|
0
|
62.7
|
0
|
[]
|
[{"post_id": 81772, "ts": "202 [{"post_id": 81772, "ts": "2026-10-22T13:15:41Z", "hours": 4.16, "text": "Devlog#33 - Greeting Everyone ! Tl;DR - i spent quite a few hours working on makinf cf understand the repo better , finding th right info and letting the user to inspect a codebase before making changes. like searching for func what it depend on etc. Work : One thing i’ve been thinking abt is that when working on ap project that we can we see what things happend in the repo and where things are and what would i need to look for when changin something etc. . A So lot of work went into connecting some pieces and making sure cf gives reliable info and instead of the sqlite database dat Things done : cf can now check the rpeo and its analysis readiness. this helps bcz it can identify configuration problems instead of discovering them after halfway through. Improved the way cf finds specific symbols in a codebase of a project. the idea was to make it easier to locate and see where a func or a class or other element lies. without having to search everything manually. worked on retrieving relevant source excerpts and checking whether the info is still reliable in the current state of the repo/codebase as there is no use of having old data . added the git navigation capabilities so cf can work with arep changes and git’s context withut modifying the repo code. A MAJOR THING - cf can now bring imp repo info , evidence, other relevant things to help user see the codebase state before making a mistake or making changes to the code. Alongside these made some minor improvements lke more consistent error handling and auditing things etc. and also checking these minor things didnt broke any other things. these kinda things look boing but are nessecary/needed. i dont want cf to be one of the project where u give features without making the existng ones better. i want it to be better and useful for users when working on a large codebase etcetc. Honestly , i’ve had shipped this way earlier if i wasnt slacking off and exams didnt came i my way but we are now in the Last 10 days of Sd. i have a quite things in mind which i need to complete this before shippins so focus on that or some days and the i will ship it. ALso the time on this devlog is small bcz i had accidentally deleted the hackatime config(or file whatevery u want to say) and i didn’t noticed it for quite a few time and then today i relaized when i open my hackatime dashboard. So this is the last time that was logged. I will setup before writing a next devlog . So open to ur thoughts on the cf project and comment ur thoughts. ALso plz leave a like if u like m project !!!!!!!!!!!!"}, {"post_id": 81248, "ts": "2026-10-20T13:51:17Z", "hours": 8.2864, "text": "Devlog#32 - Greeting Everyone ! TL;DR - I spent quite some time making Context Forge more reliable under the hood. The focus was on improving repository analysis, CLI usability, and ensuring that the memory system stays consistent with the actual codebase. Work - I wanted to make cf more than js a tool that scans repo once and stores some info. i wanted to make it useful in real dev workflow or like for someone like me who is making many projects and can sometimes lose trace of what will happned to the codebase. HEre’s what i worked on for these 8h spread across some days. Improved repository analysis and persistence so that the stored knowledge remains consistent and can be reused across different runs. Strengthened incremental analysis to handle added, modified, and deleted files more reliably, reducing the chances of outdated information sticking around. Worked on retrieval and relationship handling to make results more predictable and easier to trace back to the actual source code. Improved the CLI experience, making it easier to inspect repository information and understand what Context Forge currently knows. Refined error handling and diagnostics so that failures are easier to investigate instead of leaving me guessing about what went wrong. Expanded the test coverage across the core systems to catch regressions and make sure that improvements in one area don’t quietly break another. One of the trickkier parts was that the stored repo info actually reflected the current codebase. it’s easy to get things on fresh analysis but things get more complicated when files change , disapper or contain info that cannot bre resolved cleanly. I had to spend time thinking abt edge cases to. a lot work was for strengthing the base the foundation , some improvements i made aren’t visibe ut matter when u want cf to behave properly across multiple projects. Yeah so there is more to build and it was a solid step for cf i would say so. Also SD getting ending in 10 days and i have a lot in mind and i need to ship quick so there would be a lots of commits and hrs or the upcoming 2-3 days as i will grind as much as the time i would get . So leave ur thoughts in the comments if u have any and plz like the project (image context : i ran the cf . command on the cf repo itself and this was its answer)"}, {"post_id": 80616, "ts": "2026-10-18T09:57:53Z", "hours": 4.5992, "text": "Devlog#31 - Greeting Everyone ! TL;DR - I spent time strengthening Context Forge’s core memory and retrieval systems, making repository knowledge more reliable and useful. I also improved how the project handles changes, retrieves relevant information, and exposes its capabilities through the CLI. Work - I wanted to move beyond simple analyzing repo and make cf better at remembering, understanding and retrieving repo knowledge. Here what i did : Strengthened how repository information is stored so files, symbols, and relationships remain available even after restarting the application. Improved how Context Forge handles added, modified, and deleted files, keeping stored knowledge aligned with the actual repository and preventing outdated information from lingering. Strengthened the way relevant files, symbols, and relationships are found and ranked, making results more predictable and consistent. Improved the ability to trace retrieved information back to repository evidence and understand why particular results were selected. Added the cf command as a shorter alternative to context-forge , while preserving the existing command and its behavior. Expanded the CLI with commands for inspecting repository status, memory, files, symbols, references, and relationships, making it easier to explore what Context Forge knows. Improved operational error handling, logging, and diagnostics, making failures easier to understand and helping keep the overall experience more predictable. So yeah did so many things It’s been a while since the Great Pivot / I took some time work through these as i also had to check whether there is some code of the things iripped off in the great pivot. the time went here on working through these features properly, strength the exisiting foundationand make cf more relaible and now moving onto the next things. So leave ur thoughts in the comments and plz leave a like"}, {"post_id": 79279, "ts": "2026-10-13T09:41:19Z", "hours": 2.2675, "text": "Devlog#30 - Greeting Everyone ! - THE GREAT PIVOT Work - Context forge is now moving away from being a generation based tool and becoming a deterministic agent memory foundation. now the rtransition is done cleanly and now i am working ahead on the current foundation but new features. work done - completed the changed direction of context forge from the old provider and generation system to a repo intellegence system removed the ollama integration, provider stack. runtime configuration and the dependencies that came with them. the core should now work without depending on LLM or external APIs refactoredthe application services, task understanding, context slelction, ranking and CLI to fit the new direction. kept the important foundation like SQLite storage , AST based analysis, repo fingerprints, inremental file change detection and evidence based context rtrieval added architecture tests for offline operation , deterministic ranking, file change detection and making sure the context output has proper evidence cleaned up all the old tests which were not needed and deleted the whole files which weren’t needed in the future . Today was mostly about get ting the big transition properly finished. So for the past days, I had some exams and was not happy with the behavior of Olama, of its undeterministic behavior. So I took this step. I did not change the base foundation. I just changed the overlying architecture, the Olama ones, and removed everything that was made that was not needed. So the commit of today is very large, like 7,000 lines removed, and 1000 lines written. I made one big commit for the entire transition instead of splitting this architectural layer into multiple commits. Transform context force into a deterministic agent memory foundation. I also cleaned up the extra local branches and checked that main was synced with GitHub. Now I’m moving towards a memory vault kind of thing. I have to build on what already exists instead of rewriting everything again, improve the memory idea of foundations, add the shorter commands. Yes, so yeah, this was a pretty big change for our project. There was still a lot to do, but at least reaction is much cleaner now. Hope you like the project and please leave your thoughts or feedback in the comments. To be completely transparent, I used AI assistance to help me safely untangle and delete parts of the old architecture that were tightly coupled. As a student developer handling a complex refactor alone, trying to manually map out every single breaking change across thousands of lines got overwhelming, and I needed the help to get it done cleanly. No regrets it got the job back on track, and the codebase is in a much healthier place. With the cleanup done and main fully synced, I’m now shifting focus toward building out the new deterministic memory vault and refining the short-form CLI commands for AI agents. Show writer shipwrights. Please don’t wreck my project. Hope you like the new direction! Let me know your thoughts or feedback in the comments below."}, {"post_id": 72726, "ts": "2026-09-23T16:27:26Z", "hours": 0.3028, "text": "Devlog#29 - Greeting Everyone ! STARDANCE IS GETTING EXTENDED YAYYY!!!!! No TL;DR today for short work Things did today in short time added clean generation outuput handling added cli error handling and seperated output from errors connected generation to the persisted project added test for the same also spent some time on editing some test generated bcz they werent like tha lvl Sp today short work due to other school work coming in. Leave ur thoguhts in the comments and pl like it if u think it is good and should get real appreciation."}, {"post_id": 72306, "ts": "2026-09-22T17:00:47Z", "hours": 1.1167, "text": "Devlog#28 - Greetings Everyone ! TL;DR - Added proper ollama checking and validation plus a runtime cli. Generation now safely uses fresh persisted repo intelligence instead of re-analyzing the project everytime Long - Problems : so when doing today’s work the problems that i wanted to fix was that the generation workflow was still too dependent on live repo analysis instead of using the persisted intelligence. 2nd there was no way to verify ollama itself is available or not. like ollama runtime and is a model available or not. runtime failures needed to stop generation cleanly and not throw a bunch of error a user neds to debug. we needed to preserve provider behaviour and avoid breaking the previous architecture i built the generation one. also the generation path needed clear boundaries between runtime validation, provider execution and final output and etc etc. It sound much but the implementation was simple as ig for me. things done today to solve the problems - added ollama runtime inspection to check local runtime and requested model are available added dedicated runtime cli commd for checking the state of the runtime and model independently changed the generation to load persistd repo intellegence insteasd of it everytime doing a fresh analysis as it would be bad for it to make new things for everytime a cli is ran added cache freshness validation so generation refues stale repo intellegence added regression covergae proving that a generation uses the persistent project and doesnt starts the analyzer again made a foundation kinda thing for a clean generationresponse to cli output boundary with remainng output workflow continuing afterwards added test for the features added Also some of the current changes may not be sen on the github repo bcz i havent comitted some changes as they are a part of a feature and i commit like a feature and the tests related to it for better commits ig . Now what we did to solve the problems and how i felt when solving them - . the generation pipeline is now ready to build the dev facing output worflow or like a user workflow on top of these things the previous architecture i made. i found addng the flags to main.py file easy but then adding the cache checking and the regression covergae and the generationresponse to cli output boundary a bit challenging . So today only this much. Hope u like my project and plz comment for feedback. also a mention to @CT5 on slack for telling me to added problem and solution section in my devlog for better project experii\\ence."}, {"post_id": 71819, "ts": "2026-09-21T16:41:30Z", "hours": 2.8994, "text": "Devlog#27 - Greetings Everyone ! TL;DR - Context Forge can now remember the repo state update it s understanding when things change and provides a proper cli for those who use it. It has ig aroung 6 funcs which u can read below. The work also made the internal state much easier to inspect and debug while keeping the existing thing intact. Long - SO this Devlog is after a long time ig. I was giving 5-10 mins t the project to not lose my habit and the streak also. But today my exams got over so now i can focus on the project. STARDANCE is ending soon so i need to hurry up and complete this asap. So basically did a lot of main writing for cli functionality. cf* - context forge (too lazy to write it out everytime) things did in those past days - made repo analysis persistent instead of starting from scratch everytime the cf* is ran. added file fingerprintng and change detection for smart analysis for a smart project. imporoved how changed files affect relationships and project info. added a proper dev workflow through the CLI as it is a main part and added commands like analysis and generation commands added task input , config handling, clenaer error behaviour for the better contxt of it added command to inspect repo state cache state project info and diagnostics or i should say Pre-Rendered Excuses Generation fixed issues around cache freshness and changed fiel reporting added tests for the new functionality and made sure the existing workflow stayed intact for cf* refactored the fingerprinting logic so it culd be shared cleany by the analyzer and the Cli i made for cf* So this much for the past these days. Now the thing is slowly coming like a real version. Its complexity is very high ,atleast for me . Bcz i made many py projects and this is the most challenging one so far but it shift me into the flow state after sometime so yeah it is a good challenge. It was like based on my problem i faced when i was vibecoding in the early days js to do timepass . But now when u can make it , it feels incredibale. SO yeah it is good. Yes but Currently i see models like astra and fable come out with much more context lenght and etc. so my product is not needed for them for but is a good fun project on thr side. These new models are good but havent tried them but will try them fter i get some freetime after Stardance. as stardance is my first and last ysws soi it was a great experience. Also i did many of the things in neovim like editing some files and etc but i couldnt settedup hackatime with it so like around 1-1.5 h of extra work was untracked on hackatime but it was ok. I was seeing the primeagen video of neovim and wanted to try it out so i did and learned some basics and therre is a very stepp learning curve in it . ALso tried out lazyvim but not my style . So wil pause the vim learing for a few days and finish the prject cf asap. Sorry for this Yapp Session but dumped everything i had for these past few days. SO plz leave ur review in the comment and plz like it and rate it good."}, {"post_id": 67921, "ts": "2026-09-14T07:08:45Z", "hours": 0.4872, "text": "Devlog#26 - Greeting Everyone ! No TL;DR as short work work today - Added deterministic evaluation baseline storage and serialization. Added validation, aggregation, coverage, and persistence support. Added comprehensive tests and maintained a clean, validated implementation. So, this much today only leave your thoughts in the comments/"}, {"post_id": 67491, "ts": "2026-09-13T16:35:20Z", "hours": 0.2508, "text": "Devlog#25 - Greeting Everyone ! No TL;DR as small work today. things accomplished today - Added evaluation aggregation and baseline regression tracking Added validation for duplicate cases and regression tolerance, with tests for the same. Committed implementation and tests as focused changes. Leave ur thoughts in the comments."}, {"post_id": 66802, "ts": "2026-09-12T18:07:31Z", "hours": 0.7114, "text": "Devlog#24 - Greeting Everyone ! TL;DR - Added evaluation for both context selection and final context quality, covering correctness, budget limits, and deterministic behavior. Added focused tests to validate the complete evaluation flow. Long - So exams are going on so can’t do long hour session. Was planning to add manythings over few days but it would stretch for about more days. Things did - Added context-selection evaluation against expected entities using precision recall f1 added end to end evaluation for final context accuracy budget compliance etc. adde d validation for unkown , mising extra and empty entities or context cases. addded tests for the same Js this much today. Leave ur thoughts in the comments ."}, {"post_id": 65802, "ts": "2026-09-11T05:54:26Z", "hours": 0.415, "text": "Devlog#23 - Greetings EVeryone ! TL;DR - Retrieval and task-grounding quality can now be measured deterministically against repository ground truth, with full regression coverage Long - Short sesssion today. added the tp*.txt in gitignore for me to make temporary text files Added deterministic retrieval and task-grounding evaluation with precision recall F1 metrics Added stable repo entity ground truth and evaluation ccovergae Added test for the same added init .py in every subfolder of test bcz there were name clashes in pytest. So today this much only . Leave ur thoughts in the comment and wish me luck!!"}, {"post_id": 65491, "ts": "2026-09-10T17:44:53Z", "hours": 0.4758, "text": "Devlog#22 - Greeting Everyone ! TL;DR - Built the local repository evaluation foundation.Added structural and graph accuracy measurement for files, symbols, and relationships. Long Story - So added chec for my tool. Also committed a wrong spelling recal instead of recall in a func and and then hchnaged it in the new commit. thiings did - Added local evaluation repositories and tasks. Added structural and graph evaluation Added tests for the same Leave ur thoguths iin the comment and like it"}, {"post_id": 64918, "ts": "2026-09-09T17:09:37Z", "hours": 1.3094, "text": "Devlog#21 - Greeting Everyone! TL;DR - Repository analysis is now persisted, freshness-aware, and capable of selectively invalidating stale data instead of rebuilding everything.Cache invalidation and refresh behavior are deterministic, validated, and comprehensively tested. Long - Today I implemented the cache thing for my project. my ool works by mapping a repo and giving context to the user for user to give to AI agent for a work. SO for storing data i use SQLite but making rep data everytime will take a lot of time. So i introduced caching fo data and will refresh in sometime and can be refreshed manually also. Things did : added cache freshness checks for missing metadata , schema/analyzer version , missing fingerprints and file changes added deterministic file fingerprinting using size, modification timestamp and SHA-256 content hashes added selective invalidation for afected files, symbols, and relationships while preserving unaffected analysis added full cache invalidation for cases where existing analysis can no longer be trusted. Added cache refresh orchestration finally added tests for the same So this much today . Leave ur thoughts in the comments and like it"}, {"post_id": 64108, "ts": "2026-09-08T09:36:54Z", "hours": 1.1172, "text": "Devlog#20 - Greetings Everyone ! TL;DR - COntext Forge can now remember the state of repo aand files and identify what changes while context construction remains deterministic, robust and free of generated reasoning. Long - So Hello everyone and welcom to the 20th devlog. today added some more things which are : added deterministic file fingerprinting using its path size modification time etc. and used SHA-256content hashing Persisted file fingerprints in SQLit alongside repocacheing of metadata added detection for unchanged edited modeified added or deleted files Added storage and cache tests covering fingerprint persistence, replacement, and missing data. added analyzer covergae verifying the fingerprints are generated and rpersisted corrrectly. Kept diagnostics based on structured metadata and repository evidence rather than generated reasoning. This much today. Leave ur thoughts in the comments . BYEE and thnx for reading"}, {"post_id": 63650, "ts": "2026-09-07T15:58:34Z", "hours": 2.2053, "text": "Devlog#19 - Greeting Everyone! TL;DR - Originally built the planned reasoning-heavy approach, then identified it as unnecessary complexity and hard-reset all of that work to the clean retrieval baseline. Replaced it with a minimal, structured LLM selection layer where the model only decides include + confidence, while repository intelligence and deterministic metadata remain authoritative. Long Story - So initially i was continuing my plan to have reasoning for every candidate why it was choosed . like was a reasoning heavy context approach includes LLM reasoning. Was working on implementing it throught a flow. during testing, debugging and checking that it works perfectly but things went the other ways. during the checking, i got to a problem that LLM gives out many token in reasoning and which exceeds the limit or the max_tokens limit that i have. it was bad as i couldnt get reasoning perfectly for the per candidate. the i thought of another approach. i will generate the candidates and then i will give all the reasoning fo all of the candidates at the end of it. but this want also working as i wanted it to. i had committed the wrong changes and then i had to hard reset to a stable previous commit whcih didnt had this. then i realized that i was making the system too complicated and it wasnt needed so i remove dthe reasoning nd hard reset to a previous atable commit. I used AI to fix the broken code for the reasoning part that i built but after multiple attempts . So as i said before, 1 option only i reverted to a old git commit . this took most of my time but then did some chages also now context_forgehandes repo intellengence and LLM which decide only what is actually worth keeping. added a strict context-selection contract. Added the selection service to handle the model interaction and validate its response Selection confidence is carried into the final context as metadata, keeping the output inspectable without depending on generated explanations. Added and updated tests around the contract, selection service, package construction, and engine integration Well so this much only today. This day was hassle ful. I’ve used AI 2 times to fix the tings but 1 time i was successful and 1 time i am not. But keeping it aside. i am close to complete the ‘source code’ but not too close. I am thinking of having a brew tap for mac users and another way for windows and linux. The system isnt perfect but it is running. I will make it better nd make it functionable in real world. SO these chages today were light. Most time spent was on Debuging and checkigerrors an fixing them. If hackatime would calculate time spent debugging or xiing, tiday would be 6h+ devlog. Leave ur thouhts in the coments and plz like it."}, {"post_id": 63012, "ts": "2026-09-06T16:03:37Z", "hours": 0.4644, "text": "Devlog#18 - Greeting Everyone!: TL;DR - Integrated relationship-aware retrieval into context construction with bounded depth, confidence propagation, and retrieval provenance. Long Story - So had a small coding session today bcz i didnt got much time as exam is tommorow. Thing Done today - integrated relationship-aware retrieval into context construction addded bounded relationship expansion with confidence and provenance cnnected context-depth evidence to retrieval- added relationhship/depth to context signals added the tests related to the code changes So this mucn only today. Thnx for reading . Leave ur thoughts in the comments."}, {"post_id": 62338, "ts": "2026-09-05T17:38:45Z", "hours": 1.2731, "text": "Devlog#17 - Greeting everyone! TL;DR - Added deterministic deduplication, strongest-path selection, candidate limits, and cycle protection for relationship-aware retrieval.Expanded retrieval is now bounded, predictable, and keeps its evidence consistent, with 13 tests covering the new behavior. long - So a small codin session and added some new things. added deterministic dedpulication for relationship expanded candidates added strongest path selection using confidence depth and UUID odering preserved original candidate odering. enforced candidate expansion limits and cycle protection kept retrieval evidence aligned with selected candidates. added coverage for all the thing s we did through tests. Well so this much the implmentation was small but the testing of it anc checking it was perfect was hassle full Leave ur thoguths in the comments"}, {"post_id": 61627, "ts": "2026-09-04T16:53:19Z", "hours": 1.0678, "text": "Devlog#16 : Greeting Everyone - TL;DR - Context Forge can now understand what a task is asking for and deterministically connect that task to actual repository entities.It can also expand those entities through the repository relationship graph, providing a grounded repository neighborhood for subsequent retrieval and reasoning. Long Yap - Today was a small session of writing code and added new thing which is rep-aware task understanding and grounding. Grounding connects what the user mentions in a task to the actual files and symbols in the repository.It turns vague task references into concrete, verified repository entities that Context Forge can reason about added structured task interpretation covering intent, concepts, requested actions , constraints and ambiguity added exact repo relative path matching exact/unique symbol resolution while keeping unresolved references explicit added repo grounding to expand grounded entites through the existing relationship graph extended candidate generation so directly grounded and relationship connected entities can participate in context retrieval js this much today. Also had a single commit today but was a long one bcz i was in flow and forgot to commit and it was mostly tests . So sorry dev community 😭. (image attached is js a look at the code) Leave r thoughts in comments. open to feedback."}, {"post_id": 61300, "ts": "2026-09-04T04:26:37Z", "hours": 1.9978, "text": "Devlog#15: Greeting Everyone : TL;DR - Built reliable repository structure and a deterministic relationship graph, including symbols, imports, references, inheritance, ownership, relationship resolution, confidence, traversal, and persistence. Added comprehensive tests and validated against a real repository. Long Yap - So the baisc archtecture is completed and now i am working on its hardening and testing it on some real basic repos. Things done today - strengthened repository structural intelligence with more user-reliable Python parsing, symbol extraction, import references, inheritance references, and structural validation, etc. establihed the repo relation graph with numerous relationships. added deterministic relationship resolution with confience scoring and handling of unresolved references. Integrated relationship construction into the analysis pipeline expanded parser,graph,query & pipeline tests verified it basic working on real repo. close to completring a working version but not too close. leave ur thought in th comments . Have a good day or Night"}, {"post_id": 60372, "ts": "2026-09-02T17:45:49Z", "hours": 1.3311, "text": "Devlog#14 : Greeting Everyone TL;DR - Built a complete repository-to-context-to-AI workflow with real Python source context and robust CLI/error handling.The architecture is now stable at this boundary, ready for smarter retrieval, ranking, graph expansion, and project memory. Long Story - So worked some more on the CLI workflow of the tool. SO things did today : Completed the repo to context to provider to response workflow for py projects. Added real source content to select context units added CLI coverage hardend CLI handling for path , config, task, analysis, and generation failures added the keyboardinterreupt i.e. ctrl+c/EOF handling, clean exit codes and safe operational logging. expanded failure-path test coverage So this is the final thing is that the peices were coming together. A locally executable Python workflow from repository analysis through context generation and AI response, with a reliable CLI boundary. So leave ur thoughts in the comments and plz like it."}, {"post_id": 59711, "ts": "2026-09-01T17:11:48Z", "hours": 0.9758, "text": "Devlog#13 - Working on the CLI TL;DR - Integrated generation lifecycle handling with robust success/failure paths and duration tracking.Added rotating operational logging with privacy-safe metadata only—no prompts, responses, or reasoning.Hardened CLI/application tests and logging isolation. Yap - So Majorly worked on the tool so that it could work in the terminal with the command : context-forge [-h][–provider] etc. eg: ~/project/EV > context-forge . the above is the command that wil scan repo the command was ran in and asks for the task. another eg: ~/project/EV > context-forge -h this will give help menu of the cli tool. Also the responses are the Answers are given by the local LLM from ollama which is Qwen2.5-coder:7b which is quantized to Q4_K_M i.e. quantized to 4bit. it takes about 5GB Memory when running. I have to make it s that it runs perfectly as it doesnt answers some times etc. there are many problems to figure out will figure everything out Other things: Hardened provider/application error handling and ensured failures terminate cleanly without leaking task content. integrated generation lifecycle handling into the app flow which inclludes start/stop/completion/failure paths and duration tracking Added operational logging infra with a rotating app log at the global config drectoy Added privacy-focused logging tests ensuring prompts/tasks, generated responses, and model reasoning/thinking are never logged. Consolidated and finalized the logging method and generation lifecycle work; resolved logger path isloation. formatting,linting and test issues. js this much today nothing much more. Leave ur Views and thoguhts on this in the comments."}, {"post_id": 59047, "ts": "2026-08-31T17:11:19Z", "hours": 1.8733, "text": "Devlog#12 - StageX going Good. Greeting everyone. So i am working on the transition from qwen3:8b thinking model to non thining model. TL;DR - We redesigned the generation layer around Qwen2.5-Coder 7B and removed the old Qwen3 thinking/reasoning assumptions. The provider contract was simplified and the Ollama integration boundary was kept clean and model-agnostic. A layered configuration system was added with project, global, and built-in defaults, plus validation and precedence resolution. The CLI was then integrated with this configuration architecture while keeping the existing repository-intelligence pipeline unchanged. Full story - i inspected the existing architecture and confirmed that the repo intellegence pipeline should remain intact. i moved the active generation direction away from the old qwen3 thinking oriented architecture and established Qwen2.5-coder:7Bas the new default without hardcoding model throughout the database. I cleaned theprovider contractso reasoning thinking is no longer a part of the current core generation model while deliberately leaving future reasoning support for later architectural decisions. I also investigated the Olama integration boundary other than replacing its transportation implementation, keeping the previous Olama provider as the boundary. The largest tradition was that I wanted to add a config support so like someone can have a project project-wise configs for my tool, but it can also have a global config. So, if the project config is not available, the tool would fall back to the global config. So, I was thinking of using it as as like a .contextforge.toml file format. Yes, configuration is a dedicated defaults loading validation, etc. facilities solution, etc. And finally, the CLI was connected to the new configuration architecture. Provider settings are no longer hard-coded as the remaining configuration. This much only for today. Leave ur thoughts in the comments"}, {"post_id": 58277, "ts": "2026-08-30T17:25:39Z", "hours": 4.1383, "text": "Devlog#11 - Things went the Otherways. Greting everyone! TL;DR - for those who dont want to read long story - Spent most of the day debugging and rethinking the Ollama integration, which exposed problems with building around a thinking model. After testing the full workflow, I decided to move to Qwen2.5-Coder 7B and introduce Stage X to realign the architecture before continuing development. Long Story - for those who are interested 🙋: SO i was working towards local LLM integration for my project as mentioned in the previous devlog. Today was a sunday so had a lot of time on me so worked on this. i decided of making ollama the sole provider for AI for v1 of my project as it is easy to work with. I chose initially qwen3:8b model. i was working with it for the ollama integration and model works perfectly and give answers and checkning for bugs errors and debugging and adding more tests etc. today most of the time went into debgging,investigating, rediscovering how the existing architecture actually worked, challenging earlier assumptions, and then rethinking the architecture around what the system really needs. The first major objective was making sure the complete Python-project path worked together rather than only working as isolated components. The question was whether these pieces actually behaved correctly as one pipeline. So assessed the code and assemebled it and strenghted it and then added tests for it. Now working with ollama’s qwen3:8b model but soon ralzied it was a major mistake. i wanted to make the model to communicate with the project. So it worked kind off. Like the model i was using was a model that thinks and has chain of thoughts. But soon it became a problem for me. our first integration attempt exposed a problem. The model was clearly behaving as a thinking model. that mattered bcz Context Forge was now trying to use it as a part of a deterministic workflow. The model’s internal thinking could consume substantial generation time before producing the actual answer.That made the original integration architecture less suitable for the project. So i asked myself some questions and came to a conclusion that i should build v1 around the non thinking models like the one i will be using now on is qwen2.5-coder:7b . and integrate thinking and AI providers in future versions. THE CURRENT MODEL ARCHITECTURE should work with a non thinking model. So i introduced a phase for now called StageX where i would check the code and try to refactor it acc to the new direction we are heading. what will StageX chenage: Model Asumptions Thinking or reasoning done by the model Adding a Config file feature- CLI Behaviour(improved) Better Ollama integration Operational Logging this all we implemented in span of some days as i’ve got exams coming but will work on it. a large part of time not logged onto hackatime was spent towards rethinking the decisions made in the past and plan out the Future. TH biggest progress from this was architectural clarity. LET”S START STAGEX Thank u for reading this brain DUmp of Mine. Stay Tuned for future updates"}, {"post_id": 57500, "ts": "2026-08-29T17:47:41Z", "hours": 2.0633, "text": "Devlog #10 — Working. This phase mainly has been about the architecture more complete and connected end-to-end. TL;DR of the whole DEVLOG : Complted provider foundations, task validation/understanding & progressed by introducing ContextRequest and task Aware election. the new pipeline connects task -> validation -> context -> task aware selection->provider. . leave r reviews Long summary for those who are interested: Completed the provider foundation and established generation boundary. this gave cf* a proper path from context generation to serialized context to provider request togenerated response. Added TaskUnderstanding which is the first layer for understanding what the user is actually asking for. added TaskInterpretation, task understanding and validation and validation states such as clear, ambiguous, and sufficient. added tests to ensure invalid tasks stop the pipeline early Introduced ContextRequest as a cleaner boundary b/w the tsk and context systems. instead of pasing ptoject and task seperately, the context engine now recieves a single request containing the relevanr context. Also added some more tests for hardening Now i am focused on connecting pieces more tightly and doing thr final integration work needed . the architecture is now becoming less of collection of individual sytem and more of a single pipeline."}, {"post_id": 56743, "ts": "2026-08-28T16:56:32Z", "hours": 2.2978, "text": "Devlog#9 - working on LLM integration Greeting everyone Working towards the completion of the integration of local LLM. i will implement ollama as the LLM provider in the v1 a very hefty day as had to resolve many problems that had occur. js did 2 commits which had like most tests updtedetc. js this much today."}, {"post_id": 55613, "ts": "2026-08-27T16:03:03Z", "hours": 2.5283, "text": "Devlog#8 - My Greetings !! working towards the git understanding of the project. Hey hello everyone reading this. today the context_forge was extended with git intellengence. I implemented git repo detection repo root, branch/HEAD dicoovery parent or merge tracking shallow repo handling- Aggregate git activity summaries etc.etc. then integrated this directly into analyzer and project model. Persistence Layer was etended so git intellegence survies SQLite save or load cycles Also made a bunch of tests for each thing so that project stays perfectly working. finally the query layer gained explainability metadata so search results can comunicate why a result matched while keeping the explanation seperate from number ranking core. Also coming clean about a thing that i used antigravity bcz when i was working and very deep, i broke most of the files and couldnt seem to fix it so first time i used it to fix that. i havent committed it changes but i cme clean about it. ok bye so leave your opinions here in the comment section."}, {"post_id": 55095, "ts": "2026-08-26T15:30:14Z", "hours": 2.3058, "text": "Devlog#7 - Greeting everyone. progressively buildiing the core. so today also worked towards completing this phase which is a major step towards the project. it was a progress from finding relevant context to building deterministic contextpackage. added serialization support for enriched context. established the provider boundary and deterministic provider without coupling the core engine to an external source like a LLM or a AI provider. introduced compression abstraction added budget -aware compression as we 3 lvls talked about in previous devlogs(you can refer to thm). introdued explicit context-priority modeling Added ContextPriorityOrdering and may smal changes also. from previous devlog, the changes are that previously it could build repo understanding, retrieval,rankingetc. but now it can do compression, prioritization, ordering and assembly. So leave your thoufghts i the comment. THANK YOU!! (also the image uploaded isnt the full code written its just a snippet and also not the full code of the file so plz dont make it the truth. Visit the GITHUB REPO to see the changes and the files)"}, {"post_id": 54515, "ts": "2026-08-25T15:23:24Z", "hours": 0.4597, "text": "Devlog#6 - working . Working towards the project arcitecture. Quick update: I just did a pass on the project with some minimal changes and additions. I added a graph expander and context expansion, and wired the full pipeline into the default context engine. Please leave your reviews in the comments!"}, {"post_id": 54412, "ts": "2026-08-25T12:43:28Z", "hours": 1.6861, "text": "Devlog#5 - workking .HELLO EVERYONE!!!! so i am working on my project and i have done some new things which are : added contextcandidate added conversion from existing searchresult added relevancesignals added deterministic ranking which combines candiadte score+signals and mac score is 1.0 Main : added context depth options which are minimal recommended and Deep. in this part , i am thinking of integrating local LLM like models ollama provides or a API key of a AI provider like claude or openAI or any other provider user wshes for which will help make good perfect context. the things are coming together and i am seeing my project become a great project. So plz leave a like and ur suggetions. (Note: While I am engineering the core context pipeline by hand, I am utilizing AI to generate my unit tests and boilerplate to accelerate development. i have declared it into the AI section of the Project.)"}, {"post_id": 53754, "ts": "2026-08-24T13:02:58Z", "hours": 1.1856, "text": "Devlog#4 - making context forge actually undertstand a project Hello Everyone !! So today just worked upon making some changes like make the project context forge, scan the repository, classify it, detect languages, et cetera. Yes, handbroken files without killing the analysis, etc. And also we built projectquery So, the analyzed project can be actually explored. now the project is coming together. next plan is add a custom LLM model to make it more better. if you have ideas for a good LLM available for free and locally so plz comment. Thank you for looking at it. Bye."}, {"post_id": 53150, "ts": "2026-08-23T16:07:50Z", "hours": 1.3417, "text": "Devlog#3 HELLO EVERYONE!!! I worked on the project search and retrieval foundation. The model is now useful for task-oriented retrieval and ranks search results. Search operates over the persistent project model created .It establishes the basic architecture: Task -> Retrieval -> Ranking -> Context. So far the project is going well and exactly as planned. I aim to ship it . Wish me luck and please check it out!"}, {"post_id": 52985, "ts": "2026-08-23T11:15:05Z", "hours": 3.5578, "text": "DEVLOG#2 - This time, Context Forge went from a basic skeleton to actually understanding a repository. It can now scan projects, classify files, detect languages/frameworks, extract Python symbols, build relationships, and store everything locally in SQLite. .The biggest takeaway: before making Context Forge “smart,” I need to make sure it has a solid understanding of the project itself."}, {"post_id": 52328, "ts": "2026-08-22T13:12:22Z", "hours": 1.5494, "text": "Devlog#1 : I actually started thinking the architecture for Context Forge and I am officially setting up the project and logging my hours here today. The idea came from a problem I repeatedly faced while coding in a big project that when there are massive amount of files, we tend to break things like which things would be affected potentialy but these changes etc.. Context Forge solves this by building a persistent understanding of software project"}]...
|
Title: Context Forge by @vxyzln | Stardance
Devlo Title: Context Forge by @vxyzln | Stardance
Devlogs:
Devlog#1 : I actually started thinking the architecture for Context Forge and I am officially setting up the project and logging my hours here today. The idea came from a problem I repeatedly faced while coding in a big project that when there are massive amount of files, we tend to break things like which things would be affected potentialy but these changes etc.. Context Forge solves this by building a persistent understanding of software project
DEVLOG#2 - This time, Context Forge went from a basic skeleton to actually understanding a repository. It can now scan projects, classify files, detect languages/frameworks, extract Python symbols, build relationships, and store everything locally in SQLite. .The biggest takeaway: before making Context Forge “smart,” I need to make sure it has a solid understanding of the project itself.
Devlog#3 HELLO EVERYONE!!! I worked on the project search and retrieval foundation. The model is now useful for task-oriented retrieval and ranks search results. Search operates over the persistent project model created .It establishes the basic architecture: Task -> Retrieval -> Ranking -> Context. So far the project is going well and exactly as planned. I aim to ship it . Wish me luck and please check it out!
Devlog#4 - making context forge actually undertstand a project Hello Everyone !! So today just worked upon making some changes like make the project context forge, scan the repository, classify it, detect languages, et cetera. Yes, handbroken files without killing the analysis, etc. And also we built projectquery So, the analyzed project can be actually explored. now the project is coming together. next plan is add a custom LLM model to make it more better. if you have ideas for a good LLM available for free and locally so plz comment. Thank you for looking at it. Bye.
Devlog#5 - workking .HELLO EVERYONE!!!! so i am working on my project and i have done some new things which are : added contextcandidate added conversion from existing searchresult added relevancesignals added deterministic ranking which combines candiadte score+signals and mac score is 1.0 Main : added context depth options which are minimal recommended and Deep. in this part , i am thinking of integrating local LLM like models ollama provides or a API key of a AI provider like claude or openAI or any other provider user wshes for which will help make good perfect context. the things are coming together and i am seeing my project become a great project. So plz leave a like and ur suggetions. (Note: While I am engineering the core context pipeline by hand, I am utilizing AI to generate my unit tests and boilerplate to accelerate development. i have declared it into the AI section of the Project.)
Devlog#6 - working . Working towards the project arcitecture. Quick update: I just did a pass on the project with some minimal changes and additions. I added a graph expander and context expansion, and wired the full pipeline into the default context engine. Please leave your reviews in the comments!
Devlog#7 - Greeting everyone. progressively buildiing the core. so today also worked towards completing this phase which is a major step towards the project. it was a progress from finding relevant context to building deterministic contextpackage. added serialization support for enriched context. established the provider boundary and deterministic provider without coupling the core engine to an external source like a LLM or a AI provider. introduced compression abstraction added budget -aware compression as we 3 lvls talked about in previous devlogs(you can refer to thm). introdued explicit context-priority modeling Added ContextPriorityOrdering and may smal changes also. from previous devlog, the changes are that previously it could build repo understanding, retrieval,rankingetc. but now it can do compression, prioritization, ordering and assembly. So leave your thoufghts i the comment. THANK YOU!! (also the image uploaded isnt the full code written its just a snippet and also not the full code of the file so plz dont make it the truth. Visit the GITHUB REPO to see the changes and the files)
Devlog#8 - My Greetings !! working towards the git understanding of the project. Hey hello everyone reading this. today the context_forge was extended with git intellengence. I implemented git repo detection repo root, branch/HEAD dicoovery parent or merge tracking shallow repo handling- Aggregate git activity summaries etc.etc. then integrated this directly into analyzer and project model. Persistence Layer was etended so git intellegence survies SQLite save or load cycles Also made a bunch of tests for each thing so that project stays perfectly working. finally the query layer gained explainability metadata so search results can comunicate why a result matched while keeping the explanation seperate from number ranking core. Also coming clean about a thing that i used antigravity bcz when i was working and very deep, i broke most of the files and couldnt seem to fix it so first time i used it to fix that. i havent committed it changes but i cme clean about it. ok bye so leave your opinions here in the comment section.
Devlog#9 - working on LLM integration Greeting everyone Working towards the completion of the integration of local LLM. i will implement ollama as the LLM provider in the v1 a very hefty day as had to resolve many problems that had occur. js did 2 commits which had like most tests updtedetc. js this much today.
Devlog #10 — Working. This phase mainly has been about the architecture more complete and connected end-to-end. TL;DR of the whole DEVLOG : Complted provider foundations, task validation/understanding & progressed by introducing ContextRequest and task Aware election. the new pipeline connects task -> validation -> context -> task aware selection->provider. . leave r reviews Long summary for those who are interested: Completed the provider foundation and established generation boundary. this gave cf* a proper path from context generation to serialized context to provider request togenerated response. Added TaskUnderstanding which is the first layer for understanding what the user is actually asking for. added TaskInterpretation, task understanding and validation and validation states such as clear, ambiguous, and sufficient. added tests to ensure invalid tasks stop the pipeline early Introduced ContextRequest as a cleaner boundary b/w the tsk and context systems. instead of pasing ptoject and task seperately, the context engine now recieves a single request containing the relevanr context. Also added some more tests for hardening Now i am focused on connecting pieces more tightly and doing thr final integration work needed . the architecture is now becoming less of collection of individual sytem and more of a single pipeline.
Devlog#11 - Things went the Otherways. Greting everyone! TL;DR - for those who dont want to read long story - Spent most of the day debugging and rethinking the Ollama integration, which exposed problems with building around a thinking model. After testing the full workflow, I decided to move to Qwen2.5-Coder 7B and introduce Stage X to realign the architecture before continuing development. Long Story - for those who are interested 🙋: SO i was working towards local LLM integration for my project as mentioned in the previous devlog. Today was a sunday so had a lot of time on me so worked on this. i decided of making ollama the sole provider for AI for v1 of my project as it is easy to work with. I chose initially qwen3:8b model. i was working with it for the ollama integration and model works perfectly and give answers and checkning for bugs errors and debugging and adding more tests etc. today most of the time went into debgging,investigating, rediscovering how the existing architecture actually worked, challenging earlier assumptions, and then rethinking the architecture around what the system really needs. The first major objective was making sure the complete Python-project path worked together rather than only working as isolated components. The question was whether these pieces actually behaved correctly as one pipeline. So assessed the code and assemebled it and strenghted it and then added tests for it. Now working with ollama’s qwen3:8b model but soon ralzied it was a major mistake. i wanted to make the model to communicate with the project. So it worked kind off. Like the model i was using was a model that thinks and has chain of thoughts. But soon it became a problem for me. our first integration attempt exposed a problem. The model was clearly behaving as a thinking model. that mattered bcz Context Forge was now trying to use it as a part of a deterministic workflow. The model’s internal thinking could consume substantial generation time before producing the actual answer.That made the original integration architecture less suitable for the project. So i asked myself some questions and came to a conclusion that i should build v1 around the non thinking models like the one i will be using now on is qwen2.5-coder:7b . and integrate thinking and AI providers in future versions. THE CURRENT MODEL ARCHITECTURE should work with a non thinking model. So i introduced a phase for now called StageX where i would check the code and try to refactor it acc to the new direction we are heading. what will StageX chenage: Model Asumptions Thinking or reasoning done by the model Adding a Config file feature- CLI Behaviour(improved) Better Ollama integration Operational Logging this all we implemented in span of some days as i’ve got exams coming but will work on it. a large part of time not logged onto hackatime was spent towards rethinking the decisions made in the past and plan out the Future. TH biggest progress from this was architectural clarity. LET”S START STAGEX Thank u for reading this brain DUmp of Mine. Stay Tuned for future updates
Devlog#12 - StageX going Good. Greeting everyone. So i am working on the transition from qwen3:8b thinking model to non thining model. TL;DR - We redesigned the generation layer around Qwen2.5-Coder 7B and removed the old Qwen3 thinking/reasoning assumptions. The provider contract was simplified and the Ollama integration boundary was kept clean and model-agnostic. A layered configuration system was added with project, global, and built-in defaults, plus validation and precedence resolution. The CLI was then integrated with this configuration architecture while keeping the existing repository-intelligence pipeline unchanged. Full story - i inspected the existing architecture and confirmed that the repo intellegence pipeline should remain intact. i moved the active generation direction away from the old qwen3 thinking oriented architecture and established Qwen2.5-coder:7Bas the new default without hardcoding model throughout the database. I cleaned theprovider contractso reasoning thinking is no longer a part of the current core generation model while deliberately leaving future reasoning support for later architectural decisions. I also investigated the Olama integration boundary other than replacing its transportation implementation, keeping the previous Olama provider as the boundary. The largest tradition was that I wanted to add a config support so like someone can have a project project-wise configs for my tool, but it can also have a global config. So, if the project config is not available, the tool would fall back to the global config. So, I was thinking of using it as as like a .contextforge.toml file format. Yes, configuration is a dedicated defaults loading validation, etc. facilities solution, etc. And finally, the CLI was connected to the new configuration architecture. Provider settings are no longer hard-coded as the remaining configuration. This much only for today. Leave ur thoughts in the comments
Devlog#13 - Working on the CLI TL;DR - Integrated generation lifecycle handling with robust success/failure paths and duration tracking.Added rotating operational logging with privacy-safe metadata only—no prompts, responses, or reasoning.Hardened CLI/application tests and logging isolation. Yap - So Majorly worked on the tool so that it could work in the terminal with the command : context-forge [-h][–provider] etc. eg: ~/project/EV > context-forge . the above is the command that wil scan repo the command was ran in and asks for the task. another eg: ~/project/EV > context-forge -h this will give help menu of the cli tool. Also the responses are the Answers are given by the local LLM from ollama which is Qwen2.5-coder:7b which is quantized to Q4_K_M i.e. quantized to 4bit. it takes about 5GB Memory when running. I have to make it s that it runs perfectly as it doesnt answers some times etc. there are many problems to figure out will figure everything out Other things: Hardened provider/application error handling and ensured failures terminate cleanly without leaking task content. integrated generation lifecycle handling into the app flow which inclludes start/stop/completion/failure paths and duration tracking Added operational logging infra with a rotating app log at the global config drectoy Added privacy-focused logging tests ensuring prompts/tasks, generated responses, and model reasoning/thinking are never logged. Consolidated and finalized the logging method and generation lifecycle work; resolved logger path isloation. formatting,linting and test issues. js this much today nothing much more. Leave ur Views and thoguhts on this in the comments.
Devlog#14 : Greeting Everyone TL;DR - Built a complete repository-to-context-to-AI workflow with real Python source context and robust CLI/error handling.The architecture is now stable at this boundary, ready for smarter retrieval, ranking, graph expansion, and project memory. Long Story - So worked some more on the CLI workflow of the tool. SO things did today : Completed the repo to context to provider to response workflow for py projects. Added real source content to select context units added CLI coverage hardend CLI handling for path , config, task, analysis, and generation failures added the keyboardinterreupt i.e. ctrl+c/EOF handling, clean exit codes and safe operational logging. expanded failure-path test coverage So this is the final thing is that the peices were coming together. A locally executable Python workflow from repository analysis through context generation and AI response, with a reliable CLI boundary. So leave ur thoughts in the comments and plz like it.
Devlog#15: Greeting Everyone : TL;DR - Built reliable repository structure and a deterministic relationship graph, including symbols, imports, references, inheritance, ownership, relationship resolution, confidence, traversal, and persistence. Added comprehensive tests and validated against a real repository. Long Yap - So the baisc archtecture is completed and now i am working on its hardening and testing it on some real basic repos. Things done today - strengthened repository structural intelligence with more user-reliable Python parsing, symbol extraction, import references, inheritance references, and structural validation, etc. establihed the repo relation graph with numerous relationships. added deterministic relationship resolution with confience scoring and handling of unresolved references. Integrated relationship construction into the analysis pipeline expanded parser,graph,query & pipeline tests verified it basic working on real repo. close to completring a working version but not too close. leave ur thought in th comments . Have a good day or Night
Devlog#16 : Greeting Everyone - TL;DR - Context Forge can now understand what a task is asking for and deterministically connect that task to actual repository entities.It can also expand those entities through the repository relationship graph, providing a grounded repository neighborhood for subsequent retrieval and reasoning. Long Yap - Today was a small session of writing code and added new thing which is rep-aware task understanding and grounding. Grounding connects what the user mentions in a task to the actual files and symbols in the repository.It turns vague task references into concrete, verified repository entities that Context Forge can reason about added structured task interpretation covering intent, concepts, requested actions , constraints and ambiguity added exact repo relative path matching exact/unique symbol resolution while keeping unresolved references explicit added repo grounding to expand grounded entites through the existing relationship graph extended candidate generation so directly grounded and relationship connected entities can participate in context retrieval js this much today. Also had a single commit today but was a long one bcz i was in flow and forgot to commit and it was mostly tests . So sorry dev community 😭. (image attached is js a look at the code) Leave r thoughts in comments. open to feedback.
Devlog#17 - Greeting everyone! TL;DR - Added deterministic deduplication, strongest-path selection, candidate limits, and cycle protection for relationship-aware retrieval.Expanded retrieval is now bounded, predictable, and keeps its evidence consistent, with 13 tests covering the new behavior. long - So a small codin session and added some new things. added deterministic dedpulication for relationship expanded candidates added strongest path selection using confidence depth and UUID odering preserved original candidate odering. enforced candidate expansion limits and cycle protection kept retrieval evidence aligned with selected candidates. added coverage for all the thing s we did through tests. Well so this much the implmentation was small but the testing of it anc checking it was perfect was hassle full Leave ur thoguths in the comments
Devlog#18 - Greeting Everyone!: TL;DR - Integrated relationship-aware retrieval into context construction with bounded depth, confidence propagation, and retrieval provenance. Long Story - So had a small coding session today bcz i didnt got much time as exam is tommorow. Thing Done today - integrated relationship-aware retrieval into context construction addded bounded relationship expansion with confidence and provenance cnnected context-depth evidence to retrieval- added relationhship/depth to context signals added the tests related to the code changes So this mucn only today. Thnx for reading . Leave ur thoughts in the comments.
Devlog#19 - Greeting Everyone! TL;DR - Originally built the planned reasoning-heavy approach, then identified it as unnecessary complexity and hard-reset all of that work to the clean retrieval baseline. Replaced it with a minimal, structured LLM selection layer where the model only decides include + confidence, while repository intelligence and deterministic metadata remain authoritative. Long Story - So initially i was continuing my plan to have reasoning for every candidate why it was choosed . like was a reasoning heavy context approach includes LLM reasoning. Was working on implementing it throught a flow. during testing, debugging and checking that it works perfectly but things went the other ways. during the checking, i got to a problem that LLM gives out many token in reasoning and which exceeds the limit or the max_tokens limit that i have. it was bad as i couldnt get reasoning perfectly for the per candidate. the i thought of another approach. i will generate the candidates and then i will give all the reasoning fo all of the candidates at the end of it. but this want also working as i wanted it to. i had committed the wrong changes and then i had to hard reset to a stable previous commit whcih didnt had this. then i realized that i was making the system too complicated and it wasnt needed so i remove dthe reasoning nd hard reset to a previous atable commit. I used AI to fix the broken code for the reasoning part that i built but after multiple attempts . So as i said before, 1 option only i reverted to a old git commit . this took most of my time but then did some chages also now context_forgehandes repo intellengence and LLM which decide only what is actually worth keeping. added a strict context-selection contract. Added the selection service to handle the model interaction and validate its response Selection confidence is carried into the final context as metadata, keeping the output inspectable without depending on generated explanations. Added and updated tests around the contract, selection service, package construction, and engine integration Well so this much only today. This day was hassle ful. I’ve used AI 2 times to fix the tings but 1 time i was successful and 1 time i am not. But keeping it aside. i am close to complete the ‘source code’ but not too close. I am thinking of having a brew tap for mac users and another way for windows and linux. The system isnt perfect but it is running. I will make it better nd make it functionable in real world. SO these chages today were light. Most time spent was on Debuging and checkigerrors an fixing them. If hackatime would calculate time spent debugging or xiing, tiday would be 6h+ devlog. Leave ur thouhts in the coments and plz like it.
Devlog#20 - Greetings Everyone ! TL;DR - COntext Forge can now remember the state of repo aand files and identify what changes while context construction remains deterministic, robust and free of generated reasoning. Long - So Hello everyone and welcom to the 20th devlog. today added some more things which are : added deterministic file fingerprinting using its path size modification time etc. and used SHA-256content hashing Persisted file fingerprints in SQLit alongside repocacheing of metadata added detection for unchanged edited modeified added or deleted files Added storage and cache tests covering fingerprint persistence, replacement, and missing data. added analyzer covergae verifying the fingerprints are generated and rpersisted corrrectly. Kept diagnostics based on structured metadata and repository evidence rather than generated reasoning. This much today. Leave ur thoughts in the comments . BYEE and thnx for reading
Devlog#21 - Greeting Everyone! TL;DR - Repository analysis is now persisted, freshness-aware, and capable of selectively invalidating stale data instead of rebuilding everything.Cache invalidation and refresh behavior are deterministic, validated, and comprehensively tested. Long - Today I implemented the cache thing for my project. my ool works by mapping a repo and giving context to the user for user to give to AI agent for a work. SO for storing data i use SQLite but making rep data everytime will take a lot of time. So i introduced caching fo data and will refresh in sometime and can be refreshed manually also. Things did : added cache freshness checks for missing metadata , schema/analyzer version , missing fingerprints and file changes added deterministic file fingerprinting using size, modification timestamp and SHA-256 content hashes added selective invalidation for afected files, symbols, and relationships while preserving unaffected analysis added full cache invalidation for cases where existing analysis can no longer be trusted. Added cache refresh orchestration finally added tests for the same So this much today . Leave ur thoughts in the comments and like it
Devlog#22 - Greeting Everyone ! TL;DR - Built the local repository evaluation foundation.Added structural and graph accuracy measurement for files, symbols, and relationships. Long Story - So added chec for my tool. Also committed a wrong spelling recal instead of recall in a func and and then hchnaged it in the new commit. thiings did - Added local evaluation repositories and tasks. Added structural and graph evaluation Added tests for the same Leave ur thoguths iin the comment and like it
Devlog#23 - Greetings EVeryone ! TL;DR - Retrieval and task-grounding quality can now be measured deterministically against repository ground truth, with full regression coverage Long - Short sesssion today. added the tp*.txt in gitignore for me to make temporary text files Added deterministic retrieval and task-grounding evaluation with precision recall F1 metrics Added stable repo entity ground truth and evaluation ccovergae Added test for the same added init .py in every subfolder of test bcz there were name clashes in pytest. So today this much only . Leave ur thoughts in the comment and wish me luck!!
Devlog#24 - Greeting Everyone ! TL;DR - Added evaluation for both context selection and final context quality, covering correctness, budget limits, and deterministic behavior. Added focused tests to validate the complete evaluation flow. Long - So exams are going on so can’t do long hour session. Was planning to add manythings over few days but it would stretch for about more days. Things did - Added context-selection evaluation against expected entities using precision recall f1 added end to end evaluation for final context accuracy budget compliance etc. adde d validation for unkown , mising extra and empty entities or context cases. addded tests for the same Js this much today. Leave ur thoughts in the comments .
Devlog#25 - Greeting Everyone ! No TL;DR as small work today. things accomplished today - Added evaluation aggregation and baseline regression tracking Added validation for duplicate cases and regression tolerance, with tests for the same. Committed implementation and tests as focused changes. Leave ur thoughts in the comments.
Devlog#26 - Greeting Everyone ! No TL;DR as short work work today - Added deterministic evaluation baseline storage and serialization. Added validation, aggregation, coverage, and persistence support. Added comprehensive tests and maintained a clean, validated implementation. So, this much today only leave your thoughts in the comments/
Devlog#27 - Greetings Everyone ! TL;DR - Context Forge can now remember the repo state update it s understanding when things change and provides a proper cli for those who use it. It has ig aroung 6 funcs which u can read below. The work also made the internal state much easier to inspect and debug while keeping the existing thing intact. Long - SO this Devlog is after a long time ig. I was giving 5-10 mins t the project to not lose my habit and the streak also. But today my exams got over so now i can focus on the project. STARDANCE is ending soon so i need to hurry up and complete this asap. So basically did a lot of main writing for cli functionality. cf* - context forge (too lazy to write it out everytime) things did in those past days - made repo analysis persistent instead of starting from scratch everytime the cf* is ran. added file fingerprintng and change detection for smart analysis for a smart project. imporoved how changed files affect relationships and project info. added a proper dev workflow through the CLI as it is a main part and added commands like analysis and generation commands added task input , config handling, clenaer error behaviour for the better contxt of it added command to inspect repo state cache state project info and diagnostics or i should say Pre-Rendered Excuses Generation fixed issues around cache freshness and changed fiel reporting added tests for the new functionality and made sure the existing workflow stayed intact for cf* refactored the fingerprinting logic so it culd be shared cleany by the analyzer and the Cli i made for cf* So this much for the past these days. Now the thing is slowly coming like a real version. Its complexity is very high ,atleast for me . Bcz i made many py projects and this is the most challenging one so far but it shift me into the flow state after sometime so yeah it is a good challenge. It was like based on my problem i faced when i was vibecoding in the early days js to do timepass . But now when u can make it , it feels incredibale. SO yeah it is good. Yes but Currently i see models like astra and fable come out with much more context lenght and etc. so my product is not needed for them for but is a good fun project on thr side. These new models are good but havent tried them but will try them fter i get some freetime after Stardance. as stardance is my first and last ysws soi it was a great experience. Also i did many of the things in neovim like editing some files and etc but i couldnt settedup hackatime with it so like around 1-1.5 h of extra work was untracked on hackatime but it was ok. I was seeing the primeagen video of neovim and wanted to try it out so i did and learned some basics and therre is a very stepp learning curve in it . ALso tried out lazyvim but not my style . So wil pause the vim learing for a few days and finish the prject cf asap. Sorry for this Yapp Session but dumped everything i had for these past few days. SO plz leave ur review in the comment and plz like it and rate it good.
Devlog#28 - Greetings Everyone ! TL;DR - Added proper ollama checking and validation plus a runtime cli. Generation now safely uses fresh persisted repo intelligence instead of re-analyzing the project everytime Long - Problems : so when doing today’s work the problems that i wanted to fix was that the generation workflow was still too dependent on live repo analysis instead of using the persisted intelligence. 2nd there was no way to verify ollama itself is available or not. like ollama runtime and is a model available or not. runtime failures needed to stop generation cleanly and not throw a bunch of error a user neds to debug. we needed to preserve provider behaviour and avoid breaking the previous architecture i built the generation one. also the generation path needed clear boundaries between runtime validation, provider execution and final output and etc etc. It sound much but the implementation was simple as ig for me. things done today to solve the problems - added ollama runtime inspection to check local runtime and requested model are available added dedicated runtime cli commd for checking the state of the runtime and model independently changed the generation to load persistd repo intellegence insteasd of it everytime doing a fresh analysis as it would be bad for it to make new things for everytime a cli is ran added cache freshness validation so generation refues stale repo intellegence added regression covergae proving that a generation uses the persistent project and doesnt starts the analyzer again made a foundation kinda thing for a clean generationresponse to cli output boundary with remainng output workflow continuing afterwards added test for the features added Also some of the current changes may not be sen on the github repo bcz i havent comitted some changes as they are a part of a feature and i commit like a feature and the tests related to it for better commits ig . Now what we did to solve the problems and how i felt when solving them - . the generation pipeline is now ready to build the dev facing output worflow or like a user workflow on top of these things the previous architecture i made. i found addng the flags to main.py file easy but then adding the cache checking and the regression covergae and the generationresponse to cli output boundary a bit challenging . So today only this much. Hope u like my project and plz comment for feedback. also a mention to @CT5 on slack for telling me to added problem and solution section in my devlog for better project experii\ence.
Devlog#29 - Greeting Everyone ! STARDANCE IS GETTING EXTENDED YAYYY!!!!! No TL;DR today for short work Things did today in short time added clean generation outuput handling added cli error handling and seperated output from errors connected generation to the persisted project added test for the same also spent some time on editing some test generated bcz they werent like tha lvl Sp today short work due to other school work coming in. Leave ur thoguhts in the comments and pl like it if u think it is good and should get real appreciation.
Devlog#30 - Greeting Everyone ! - THE GREAT PIVOT Work - Context forge is now moving away from being a generation based tool and becoming a deterministic agent memory foundation. now the rtransition is done cleanly and now i am working ahead on the current foundation but new features. work done - completed the changed direction of context forge from the old provider and generation system to a repo intellegence system removed the ollama integration, provider stack. runtime configuration and the dependencies that came with them. the core should now work without depending on LLM or external APIs refactoredthe application services, task understanding, context slelction, ranking and CLI to fit the new direction. kept the important foundation like SQLite storage , AST based analysis, repo fingerprints, inremental file change detection and evidence based context rtrieval added architecture tests for offline operation , deterministic ranking, file change detection and making sure the context output has proper evidence cleaned up all the old tests which were not needed and deleted the whole files which weren’t needed in the future . Today was mostly about get ting the big transition properly finished. So for the past days, I had some exams and was not happy with the behavior of Olama, of its undeterministic behavior. So I took this step. I did not change the base foundation. I just changed the overlying architecture, the Olama ones, and removed everything that was made that was not needed. So the commit of today is very large, like 7,000 lines removed, and 1000 lines written. I made one big commit for the entire transition instead of splitting this architectural layer into multiple commits. Transform context force into a deterministic agent memory foundation. I also cleaned up the extra local branches and checked that main was synced with GitHub. Now I’m moving towards a memory vault kind of thing. I have to build on what already exists instead of rewriting everything again, improve the memory idea of foundations, add the shorter commands. Yes, so yeah, this was a pretty big change for our project. There was still a lot to do, but at least reaction is much cleaner now. Hope you like the project and please leave your thoughts or feedback in the comments. To be completely transparent, I used AI assistance to help me safely untangle and delete parts of the old architecture that were tightly coupled. As a student developer handling a complex refactor alone, trying to manually map out every single breaking change across thousands of lines got overwhelming, and I needed the help to get it done cleanly. No regrets it got the job back on track, and the codebase is in a much healthier place. With the cleanup done and main fully synced, I’m now shifting focus toward building out the new deterministic memory vault and refining the short-form CLI commands for AI agents. Show writer shipwrights. Please don’t wreck my project. Hope you like the new direction! Let me know your thoughts or feedback in the comments below.
Devlog#31 - Greeting Everyone ! TL;DR - I spent time strengthening Context Forge’s core memory and retrieval systems, making repository knowledge more reliable and useful. I also improved how the project handles changes, retrieves relevant information, and exposes its capabilities through the CLI. Work - I wanted to move beyond simple analyzing repo and make cf better at remembering, understanding and retrieving repo knowledge. Here what i did : Strengthened how repository information is stored so files, symbols, and relationships remain available even after restarting the application. Improved how Context Forge handles added, modified, and deleted files, keeping stored knowledge aligned with the actual repository and preventing outdated information from lingering. Strengthened the way relevant files, symbols, and relationships are found and ranked, making results more predictable and consistent. Improved the ability to trace retrieved information back to repository evidence and understand why particular results were selected. Added the cf command as a shorter alternative to context-forge , while preserving the existing command and its behavior. Expanded the CLI with commands for inspecting repository status, memory, files, symbols, references, and relationships, making it easier to explore what Context Forge knows. Improved operational error handling, logging, and diagnostics, making failures easier to understand and helping keep the overall experience more predictable. So yeah did so many things It’s been a while since the Great Pivot / I took some time work through these as i also had to check whether there is some code of the things iripped off in the great pivot. the time went here on working through these features properly, strength the exisiting foundationand make cf more relaible and now moving onto the next things. So leave ur thoughts in the comments and plz leave a like
Devlog#32 - Greeting Everyone ! TL;DR - I spent quite some time making Context Forge more reliable under the hood. The focus was on improving repository analysis, CLI usability, and ensuring that the memory system stays consistent with the actual codebase. Work - I wanted to make cf more than js a tool that scans repo once and stores some info. i wanted to make it useful in real dev workflow or like for someone like me who is making many projects and can sometimes lose trace of what will happned to the codebase. HEre’s what i worked on for these 8h spread across some days. Improved repository analysis and persistence so that the stored knowledge remains consistent and can be reused across different runs. Strengthened incremental analysis to handle added, modified, and deleted files more reliably, reducing the chances of outdated information sticking around. Worked on retrieval and relationship handling to make results more predictable and easier to trace back to the actual source code. Improved the CLI experience, making it easier to inspect repository information and understand what Context Forge currently knows. Refined error handling and diagnostics so that failures are easier to investigate instead of leaving me guessing about what went wrong. Expanded the test coverage across the core systems to catch regressions and make sure that improvements in one area don’t quietly break another. One of the trickkier parts was that the stored repo info actually reflected the current codebase. it’s easy to get things on fresh analysis but things get more complicated when files change , disapper or contain info that cannot bre resolved cleanly. I had to spend time thinking abt edge cases to. a lot work was for strengthing the base the foundation , some improvements i made aren’t visibe ut matter when u want cf to behave properly across multiple projects. Yeah so there is more to build and it was a solid step for cf i would say so. Also SD getting ending in 10 days and i have a lot in mind and i need to ship quick so there would be a lots of commits and hrs or the upcoming 2-3 days as i will grind as much as the time i would get . So leave ur thoughts in the comments if u have any and plz like the project (image context : i ran the cf . command on the cf repo itself and this was its answer)
Devlog#33 - Greeting Everyone ! Tl;DR - i spent quite a few hours working on makinf cf understand the repo better , finding th right info and letting the user to inspect a codebase before making changes. like searching for func what it depend on etc. Work : One thing i’ve been thinking abt is that when working on ap project that we can we see what things happend in the repo and where things are and what would i need to look for when changin something etc. . A So lot of work went into connecting some pieces and making sure cf gives reliable info and instead of the sqlite database dat Things done : cf can now check the rpeo and its analysis readiness. this helps bcz it can identify configuration problems instead of discovering them after halfway through. Improved the way cf finds specific symbols in a codebase of a project. the idea was to make it easier to locate and see where a func or a class or other element lies. without having to search everything manually. worked on retrieving relevant source excerpts and checking whether the info is still reliable in the current state of the repo/codebase as there is no use of having old data . added the git navigation capabilities so cf can work with arep changes and git’s context withut modifying the repo code. A MAJOR THING - cf can now bring imp repo info , evidence, other relevant things to help user see the codebase state before making a mistake or making changes to the code. Alongside these made some minor improvements lke more consistent error handling and auditing things etc. and also checking these minor things didnt broke any other things. these kinda things look boing but are nessecary/needed. i dont want cf to be one of the project where u give features without making the existng ones better. i want it to be better and useful for users when working on a large codebase etcetc. Honestly , i’ve had shipped this way earlier if i wasnt slacking off and exams didnt came i my way but we are now in the Last 10 days of Sd. i have a quite things in mind which i need to complete this before shippins so focus on that or some days and the i will ship it. ALso the time on this devlog is small bcz i had accidentally deleted the hackatime config(or file whatevery u want to say) and i didn’t noticed it for quite a few time and then today i relaized when i open my hackatime dashboard. So this is the last time that was logged. I will setup before writing a next devlog . So open to ur thoughts on the cf project and comment ur thoughts. ALso plz leave a like if u like m project !!!!!!!!!!!!...
|
1792723718.2292595
|
1793328518.2292595
|
|
39938
|
My very own ZenOS by @jegtaiwo | Stardance
|
jegtaiwo
|
0
|
62.64
|
0
|
[]
|
[{"post_id": 80883, "ts": "202 [{"post_id": 80883, "ts": "2026-10-19T04:50:54Z", "hours": 21.8356, "text": "So far have not been able to write any devlog. This is what i built so far not ai built 😭😭"}, {"post_id": 58598, "ts": "2026-08-31T02:19:57Z", "hours": 10.4986, "text": "Currently working the Spotify integration to my WEBOS and adding some nice features"}, {"post_id": 54916, "ts": "2026-08-26T04:18:21Z", "hours": 10.1431, "text": "Starting my web OS all over again, i wasn’t feeling confident with my first idea. So i start building from starch"}, {"post_id": 47793, "ts": "2026-08-15T23:38:49Z", "hours": 10.3475, "text": "Another 8 hours spent working on ZenOS. ☯️ Today I mostly worked on making the desktop feel more like an actual OS instead of just a UI. I spent time working on the built-in apps and getting more of them working properly, including Finder, TextEdit, Notes, Paint, Calculator, Calendar, Terminal, Preview, and the other system apps. I also worked more on things like window management, the dock, Spotlight, notifications, keyboard shortcuts, and how the apps open and interact with the desktop. There’s still a lot that needs fixing and improving, but it’s starting to feel much more like an actual desktop environment now. 18 hours in so far. And I’m definitely not done yet. There’s still a lot more I want to add to ZenOS. ☯️ #ZenOS #DevLog #BuildInPublic #WebDevelopment #JavaScript #HTML #CSS"}, {"post_id": 41924, "ts": "2026-08-06T13:28:41Z", "hours": 9.8106, "text": "Devlog #1 It’s still rough around the edges, but every OS starts somewhere. Day one of building ZenOS. The foundation is finally taking shape. ☯️🚀"}]...
|
Title: My very own ZenOS by @jegtaiwo | Stardance
Title: My very own ZenOS by @jegtaiwo | Stardance
Devlogs:
Devlog #1 It’s still rough around the edges, but every OS starts somewhere. Day one of building ZenOS. The foundation is finally taking shape. ☯️🚀
Another 8 hours spent working on ZenOS. ☯️ Today I mostly worked on making the desktop feel more like an actual OS instead of just a UI. I spent time working on the built-in apps and getting more of them working properly, including Finder, TextEdit, Notes, Paint, Calculator, Calendar, Terminal, Preview, and the other system apps. I also worked more on things like window management, the dock, Spotlight, notifications, keyboard shortcuts, and how the apps open and interact with the desktop. There’s still a lot that needs fixing and improving, but it’s starting to feel much more like an actual desktop environment now. 18 hours in so far. And I’m definitely not done yet. There’s still a lot more I want to add to ZenOS. ☯️ #ZenOS #DevLog #BuildInPublic #WebDevelopment #JavaScript #HTML #CSS
Starting my web OS all over again, i wasn’t feeling confident with my first idea. So i start building from starch
Currently working the Spotify integration to my WEBOS and adding some nice features
So far have not been able to write any devlog. This is what i built so far not ai built 😭😭...
|
1792680636.9540184
|
1793285436.9540184
|
|
46752
|
RedeeMOD by @DoMax | Stardance
|
DoMax
|
2
|
62.38
|
1027
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T12:19:38Z", "hours": 20.0, "multiplier": 9.77, "payout": 203, "blessing": "neutral", "text": "After quite some time, RedeeMOD development is back! What’s new New adapter! : IOQuake 3 is officially supported on RedeeMOD! The adapter is quite complex due to engine’s hardcoded filepaths and external game loading, thus only one type of content can be loaded at a time (either an IOQuake 3 game or Quake 3 mod). API improvements : Each adapter is equipped with a setup() method that runs after adding a game - useful for first-time initialization instead of prompting user for setup steps. Mod adapters can limit the amount of mods they allow selected at once. Game configurations are isolated now, so every game can work on its own requiring no modifications to unrelated files! Tests! : RedeeMOD has automated integration and unit tests implemented. Layout changes : The layout was tweaked a bit to be more usable. Changes mainly made to card positioning, so Add Game and Add Mod cards are always shown first. I hope that many of you will enjoy this project. Even better if you try to script adapters of games that YOU think are important! Remember, that you can always resort to the Contributing Guide on GitHub ! And, of course, leave a nice review if you think RedeeMOD is worth one ;)", "repo": "https://github.com/domasles/redeemod", "demo": "https://github.com/domasles/redeemod/releases/latest"}, {"ship_num": 2, "ts": "2026-08-23T18:42:23Z", "hours": 38.0, "multiplier": 18.45, "payout": 824, "blessing": "neutral", "text": "Modding (some) games has never been easier! I present to you - RedeeMOD , a mod launcher that lets anyone mod games with ease! RedeeMOD was first created for modding Unreal Tournament games, but due to its expandable nature, anyone who knows Python can write a little script and expand RedeeMOD’s game selection for any game imaginable! What are its core features? Glad you asked! Here’s what you get out of the box: Automatic game discovery - RedeeMOD finds your game installations all by itself! A real mod library - every game gets its own mod collection. Add mods once and toggle them whenever you like Custom path overrides - is your game installed somewhere weird? Just point at it and carry on Cross-platform frontend - built with Python and PySide6 (Qt6), so it runs natively on both Windows and Linux! (macOS should also work, but I can’t test that - I own no apple gear) And here’s my favorite part: mods never mess up the vanilla game! Which games are supported? As of today: Unreal Tournament ’99 - mods are loaded through automatic INI patching Unreal Tournament 2004 - mods are stitched together into a package and loaded using the game’s own -mod mechanism Both games are available to download from OldUnreal page, FOR FREE ! What about other games? Can I add them myself? Absolutely! This is where RedeeMOD shines - every game is just an adapter. It knows three things about a game: What’s it called Where it might live How to launch it with mods I even prepared a guide just for that! If a game can be modded without wrecking its installation, an adapter can be written for it. Cool! How do I get it? Head over to the Releases page and grab the app! Or if you want to Redeem the source: git clone https://github.com/domasles/redeemod.git cd redeemod pip install -e . # Omit -e flag if you are not planning to edit the source files later. Leaving it is recommended though redeemod How to use it? Download Unreal Tournament ’99 or Unreal Tournament 2004 from OldUnreal Open the game, configure your settings, and ONLY THEN add the game to RedeeMOD Download any mod you like. My recommendations: Unreal Tournament ’99 HD textures XVehicles for Unreal Tournament ’99 HaloUT for Unreal Tournament 2004 About any skin mod available (be careful, some depend on others!) Add it to your games’ Mod Library Enable the mods you feel like playing today Launch the game and enjoy ! Honesty is the most important thing A few things to know before diving in: Windows’ Smart App Control might block the unsigned executable. You can either disable it or build the app yourself. On Linux, case-sensitive filenames occasionally bite older mods - usually fixable with some renames. Unreal Tournament 2004 was designed to load one mod at a time, so stacking several can lead to conflicts. In practice? It mostly just works. Some mods might not work properly because: a. They require some GUI classes RedeeMOD can’t handle yet b. They are straight up broken Try it, break it, tell me everything I made RedeeMOD out of the frustration that some games don’t have ways of loading mods while leaving the base intact. If it happened to you before, and RedeeMOD helped, I can feel proud. Found a bug, got an idea, or want to see your favorite game in the lineup? Mind you - contributions are very welcome!", "repo": "https://github.com/domasles/redeemod", "demo": "https://github.com/domasles/redeemod/releases/latest"}]...
|
[{"post_id": 82459, "ts": "202 [{"post_id": 82459, "ts": "2026-10-24T21:33:36Z", "hours": 4.3781, "text": "Server owner? RedeeMOD is now CLI! Honestly, I wouldn’t even have thought about it if not for my other project, UT99 server container . Turns out, this is quite useful! How does it work? Like any other CLI app would. It lets anyone load mods on any game without opening the GUI. It’s useful for 2 audiences: Server owners, that need a tool that could be automated Terminal tinkerers, most likely Linux users :D After the beginning of UT99 server project one of the things I immediately thought about was modding the server, not only the client. Whether it’s a mutator, map or anything else - tinkering with individual directories can be brittle, especially in a server environment. Having a tool manage mods is much simplier and foolproof, since RedeeMOD even handles mods disposably - they don’t override the main installation, leading to a predictable setup at all times. Did anything internally change? Yes! Qt is no longer a dependency of the backend, allowing CLI app to be much smaller. The application data paths are now handled manually. The repo now also has more tests to account for new CLI features."}, {"post_id": 58008, "ts": "2026-08-30T10:53:42Z", "hours": 7.3058, "text": "Tested and working! How (and why) I implemented tests in RedeeMOD The reason behind “why” My dad is a high profile developer, and many new things I try are influenced by him. While I always liked setting up CI/CD pipelines and other automations, one thing my projects lacked was testing. Turns out, many tech jobs require knowledge about tests, because they guarantee several things: They assure that your application works as it should They document your working concept They let you make refactors that don’t hurt the functionality So, after considering these benefits, I started reading how tests are implemented. How did I implement tests for RedeeMOD? There are 3 main types of tests: Unit (where one small component is tested) Integration (where several combined components and their behaviour is tested) End to End (where full system flow from start to finish is tested) (they take a long time, so I didn’t even consider them for RedeeMOD) First thing any testable software should have is clear dependency injection. Dependency injection is a pattern where you don’t call dependencies directly, but pass them externally. I opted for implementing method argument injection that I could later use in tests. Why is DI required? Well, during testing, the external environments must be mocked and created virtually to test different use cases (things like sys.* calls and more). Luckily, RedeeMOD already had a nice and semi-testable architecture where very few things needed to be changed. Writing tests is a tedious and rather boring process, because all the edge cases must be defined. Don’t hate me for this, but I handed over writing tests to AI. My arguments for why AI is appropriate for this are: You can’t test software that hasn’t been previously written (by people) Repetitive work takes away precious time, and AI just performs checks While one could argue that Test-Driven Development exists, after trying it out I can confidently say that I’m not a fan of TDD. However, giving very broad instructions, like “Make me tests for this project” usually doesn’t go well, because AI can’t retain project philosophy and tests what doesn’t need to be tested (things that don’t contain logic, thus can’t really fail). RedeeMOD currently has a test suite based on pytest with integration and unit tests written. How tests could benefit you? With tests, instead of clicking around (and often forgetting) every edge case manually, you can offload it to a machine that does hundreds of calculations extremely fast. Not only is it a well-regarded pattern within the developer community, but also helps with coding efficiency and guards from failed refactors."}, {"post_id": 55616, "ts": "2026-08-27T16:10:59Z", "hours": 12.4111, "text": "Quake fans - I got you! Thought RedeeMOD would only be available for niche titles? Not exactly! Which Quake? Most people would probably agree with me that Quake 3 Arena was the best entry of the series for multiplayer games. After seeing just how many Quake 3 mods there are (some even being standalone games) I had to implement an adapter for it with support for both standalone games and mods! I resorted to the IOQuake 3 engine support due to its extra capabilities and being the modern choice for most, so original Id Tech 3 might not work. How does it work? IOQuake 3 inherits cvar support (and adds more!) from Id Tech 3 engine. Utilizing com_basegame , i could bypass Quake 3 Arena file presence for standalone games. What about Quake 3 MODS that are not standalone? The new adapter follows an interesting edge-case detection logic: If a mod has default.cfg file somewhere within its .pk3 files, it’s considered standalone. Other games are required to have genuine Quake 3 Arena present, about what RedeeMOD will warn. IOQuake 3 requires Quake 3 Arena or Team Arena files to be in baseq3 and missionpack directories. This adapter handles warning users against such restriction. Quake 3 Arena can’t be launched through RedeeMOD as a mod. Everything else works perfectly fine (based on testing). All mods I tested worked fine. If you find one that does not, kindly report it on GitHub issues 😄 The most challenging adapter of all No doubt, the amount of testing that was required to get this working is absurd, and definitely it was the most challenging adapter of all ."}, {"post_id": 53272, "ts": "2026-08-23T18:39:02Z", "hours": 3.8986, "text": "Pre-ship devlog! Maitenance pre-ship revealed 3 more bugs that I couldn’t live with… Bugs? What bugs? Actually, very counter-intuitive! UT99-specific : Turns out, when Unreal Tournament ’99 reads configuration and finds duplicate filenames in different directories, FIRST ENTRY DEFINED WINS , which, from coding perspective, is very unusual! Usually, if you define a variable, it can be redefined later. UT99 does not work like that, so I made the mods override any system files if they do override any. I noticed this by trying to load one of my favorite mods ever - the HD pack, which overrides system textures. Glad this bug got noticed! UT2004 skins not working : Some skin mods would not work due to the correct files not being imported on game runtime. By adding an extra file extension to the list of import files, I was able to fix this! Label truncation fails : Previously I had implemented an ElidedLabel that truncates a string and replaces the ending with ... if it is too long. In some rare instances however it failed and set a boundary on window size instead of truncating. However, it’s not an issue anymore! Error handling is better now I ran into an issue that got me confused - I couldn’t launch a game. I panicked, thought that my launcher was broken again, and only then did I realise that the game wasn’t installed! Launcher did not notify me and I got frustrated. Since I want the UX to be flawless, the best decision was to make a pop-up in case of a critical error. I gotta say - the ship is finally truly 100% ready !"}, {"post_id": 51848, "ts": "2026-08-21T18:29:00Z", "hours": 10.6333, "text": "Code, break, fix, repeat! Here’s what the final 1.0.0 release of RedeeMOD brings: Fully tested and documented! I built RedeeMOD not only as an app to manage Unreal Tournament games exclusively (though at first, that was the plan), but also as a framework to create more games in the future compatible with RedeeMOD! I recently wrote a Contribution guide that lets anyone create adapters and expand RedeeMOD by following a detailed guide! Also, as a standard practice, GitHub actions were added to help with releases. Both Windows and Linux builds work perfectly, but are unsigned, so Windows might throw Smart Screen or Smart App Control warnings. These are safe to ignore, and if they bother you too much, you can always resort to launching RedeeMOD directly through Python! Changes in code The code is formatted with Black formatter . It’s way easier to format the code using a tool than doing so manually. Also, I found some bugs that weren’t immediately noticeable. Things like: An uninitialized variable being still required in code (produces a TypeError ) Image painting events overriding each other Much more They are now fully fixed. Some inconsistencies between files have also been resolved. This latest build now features logos to feel more professional . User interface has been updated with more detailed card subtitles, so the app is easier to navigate. Overall, RedeeMOD is in its stable form for the first time ever. Now it’s just the matter of whether more adapters will be created for other games by the community! Does RedeeMOD lack something? Well, the mod management is very simple - adding, removing and enabling/disabling a mod probably doesn’t sound like the most sophisticated mod manager on the earth, but I am planning to later add a pop up that lets users customize the mods even further, like adding custom launch options, paths, even image customization, but that will require more time and I feel confident enough that the current feature set is good for the first ship. For more info on RedeeMOD, visit its GitHub repository !"}, {"post_id": 49281, "ts": "2026-08-18T00:07:57Z", "hours": 4.3475, "text": "Finally, it feels complete! What I’ve been through and why do I feel relieved So, after a LOT of trial and error, and MANY wrong paths taken, Unreal Tournament 2004 adapter is functioning! Why it took so much effort for such a simple thing UT2004 differs from UT99 in many different areas, even its modding system: It now has a dedicated -mod flag instead of using an overriden .ini file Every mod has its own mandatory structure, and UT2004 doesn’t like multiple mods loaded Mods can load diffs of system .ini files My plan was to replicate what I was doing with UT99 - building a custom mod at runtime that would bundle every enabled mod together. Since this game is quite old, so are its development sources. I resorted to the best source there is - proven to work mods. My top 3 problems with UT2004, ranked: Using empty files or ones that are with LF line endings instead of CRLF produces either a segfault or a Bad Mod error UT2004 creates a LOT of mod-specific runtime files, and they need to be cleared to be regenerated (I hate caching, as going through them all is difficult) I couldn’t get mods with heavy custom GUI usage to work, unless they’re being launched standalone, using UT2004 Community tab (which defeats the point of my launcher) Since I wanted to use the modern -mod flag, I had to make my own mod, which needs such files to function: ModDir/UT2K4Mod.ini (Name and description) ModDir/System/Default (Diffs of what to add/remove) ModDir/System/DefUser (Can be left empty, but requires at least one \\r\\n line) I’m thankful to whatever or whoever made me as patient as I am, because DefUser being absolutely empty causing a segfault or files requiring CRLF even in Linux was very unexpected, and required hours of investigation. On top of said implementation, backend framework also needed changes to ensure stability and flexibility. New methods returning more data to the game adapters were added, as well as improvements in attribute names and path handling. Bugs are always present… After testing with some edge cases, I found bugs that got resolved shortly after. Windows, as of now, works flawlessly, but I’ll be performing more tests when I distribute a full build. What’s that, some new GUI? Yes! I wanted to implement logos since the day 1 of starting this project. Surprisingly, that was one of the easiest modifications to date. Screen state tracking was also improved to provide no visual bugs after adding, removing, selecting and deselecting added material. Finally shipping, finally stable? Again, yes. All the intended functionality is verified to be working, and you can already try it out for yourself! Running python -m frontend.app from the project’s root will open up this GUI for you to play around! Over the next few days I’ll finish making all the necessary branding, README and ensure licensing is correct. Then I’ll push a final devlog and make a ship. Thank you for everyone following RedeeMOD’s journey. Keep rocking, and make the world truly Unreal !"}, {"post_id": 48536, "ts": "2026-08-16T23:19:20Z", "hours": 8.3097, "text": "UI tweaks! This looks better in my opinion After taking a look at the previous design I thought it looked quite ugly and inconsistent when some cards have center-aligned elements and others don’t. This update fixes these issues! You really spent so many hours on simple UI tweaks? Yes and no. While the primary purpose of this devlog IS to describe subtle interface change, under the hood many quality of development improvements hide as I’m trying to implement and fiddle with Unreal Tournament 2004 game adapter, which required a more streamlined API of adapter creation rather than what was previously developed. So, this devlog has hours logged from both a fully developed interface and half-developed new game adapter implementation. Stardance was warning me about getting close to 10h limit, so I must post this before diving deeper into Unreal Tournament 2004, which has way more twisted stuff within its modding system. Stay tuned and wish me luck!"}, {"post_id": 46034, "ts": "2026-08-12T23:13:59Z", "hours": 4.5775, "text": "A fresh look Expanding on the design I like, I decided to add some improvements. What improvements exactly? All these things: The launcher now supports adding multiple games (even though currently the only game supported is Unreal Tournament ’99 (more to come)) A sidebar was introduced for better UX A more user-friendly card design was expanded to become the main component interface relies on Backend experienced a bit of an overhaul too to support game/mod branching Safeguards were implemented to disallow adding multiple copies of the same mod OR directories that do NOT contain Unreal mod content Config is now stored in local paths for saving/loading added material Library tab disappears if no games are detected Wow! This is really awesome! Is it ready to be shipped? I could ship the current version, but there are exactly 3 things stopping me from doing so. I need to: Verify functionality on Windows (so it doesn’t become another Linux-only project of mine) Add verification for game paths and prompt user to enter location for both executable and config (if applicable/not found) Add Unreal Tournament 2004 functionality to leverage multiple game selection and see if it works (as well as possibly other games of the franchise, like Unreal and maybe even Unreal Tournament 2014)"}, {"post_id": 45747, "ts": "2026-08-12T13:16:35Z", "hours": 4.2758, "text": "Interface update A functional UI demo has just been made! Following a design language similar to Unreal Engine 5, I was able to make a functional UI, that can launch the game with selected mods! The UI is written with PySide6, which allows for Qt6 API to be used on Python, giving a modern development workflow, with customizable stylesheets and cross-platform capabilities. What’s next? I want to rewrite the launcher a bit to support more games in the future and be more architecturally correct , at the same time feeling more premium both from the user-facing app, and the source code too."}, {"post_id": 45266, "ts": "2026-08-11T16:50:22Z", "hours": 1.1736, "text": "Discovery - done! With the installation discovery done, I can finally focus on the real provisioning and frontend. How does it work? Utilizing common installation paths of Unreal Tournament, I could build a simple config.json file that has all this information for Windows and Linux. Then, I wrote a simple json parser, and methods to use as a simple interface for the frontend. What else currently exists? The current source tree has this functionality implemented: Filesystem utils for finding and sanitizing paths (required by Unreal Engine to load paths relative to the executable) .ini file editor (because Unreal Engine operates on .ini files for configuration, one of which allows for custom file discovery. Editing it allows injecting custom mod files) Next plans? I will try and build a user-facing application that does exactly 3 things: It discovers the installation directory (so the frontend can also act as a launcher) It lets you add folders with mod files It lets you load one or more mods (and the base game) by constructing a .ini file on the go Maybe something more will come to my mind as time passes."}, {"post_id": 45205, "ts": "2026-08-11T15:03:58Z", "hours": 0.6744, "text": "Never more excited! What am I building now? As a kid, I used to play Unreal Tournament ’99 with my dad. I always thought that game is genius - how it encompasses the soul of classic arena shooters yet still being fun to play! What is this Unreal Tournament? You’ve most likely heard of Unreal Engine. The reason it got this name is due to Epic Games’ first major game - Unreal ! While at first it acted as a competitor to Quake I and II style games with its campaign against various creatures, in a year turned to compete with upcoming genre of Arena Shooters, specifically Quake 3, focusing entirely on multiplayer. Never heard of it. Why? While the game itself was awesome not only the way it was written (with an interpreted UScript language, which lets pure UScript mods run on every platform, as well as GPU utilization), and Epic even released the last installment’s source code available to read with promises of development based on what the community wants, quickly realized the harsh reality of Arena Shooters losing market share and turned to developing Fortnite , finally shutting down official server support on 24th of January, 2023. So can I still play it anyhow? Despite cancellation of the whole series, community has stepped in and is still keeping up with modern games! Epic Games even allowed the Unreal and Unreal Tournament (original as well as 2004 version) ecosystem be maintained by a group called OldUnreal , while the latest game is available on UT4Ever , a self-hosted group of volunteers, who have rewritten Epic’s servers. And, guess what, all of this is available for free! What RedeeMOD aims to provide I am always looking at ways to modularize the software I use for maximum customization. Currently the mods follow a drag-over logic, which mixes mod files with original game’s files, rendering the original, pure and unmodified version unplayable if you ever want it back. After researching how modding architecture of Unreal Tournament ’99 works, I was able to prepare a plan on how to implement a mod loader, and started to work on it! So stay tuned, and join the Unreal Tournament community!"}]...
|
Title: RedeeMOD by @DoMax | Stardance
Devlogs:
Ne Title: RedeeMOD by @DoMax | Stardance
Devlogs:
Never more excited! What am I building now? As a kid, I used to play Unreal Tournament ’99 with my dad. I always thought that game is genius - how it encompasses the soul of classic arena shooters yet still being fun to play! What is this Unreal Tournament? You’ve most likely heard of Unreal Engine. The reason it got this name is due to Epic Games’ first major game - Unreal ! While at first it acted as a competitor to Quake I and II style games with its campaign against various creatures, in a year turned to compete with upcoming genre of Arena Shooters, specifically Quake 3, focusing entirely on multiplayer. Never heard of it. Why? While the game itself was awesome not only the way it was written (with an interpreted UScript language, which lets pure UScript mods run on every platform, as well as GPU utilization), and Epic even released the last installment’s source code available to read with promises of development based on what the community wants, quickly realized the harsh reality of Arena Shooters losing market share and turned to developing Fortnite , finally shutting down official server support on 24th of January, 2023. So can I still play it anyhow? Despite cancellation of the whole series, community has stepped in and is still keeping up with modern games! Epic Games even allowed the Unreal and Unreal Tournament (original as well as 2004 version) ecosystem be maintained by a group called OldUnreal , while the latest game is available on UT4Ever , a self-hosted group of volunteers, who have rewritten Epic’s servers. And, guess what, all of this is available for free! What RedeeMOD aims to provide I am always looking at ways to modularize the software I use for maximum customization. Currently the mods follow a drag-over logic, which mixes mod files with original game’s files, rendering the original, pure and unmodified version unplayable if you ever want it back. After researching how modding architecture of Unreal Tournament ’99 works, I was able to prepare a plan on how to implement a mod loader, and started to work on it! So stay tuned, and join the Unreal Tournament community!
Discovery - done! With the installation discovery done, I can finally focus on the real provisioning and frontend. How does it work? Utilizing common installation paths of Unreal Tournament, I could build a simple config.json file that has all this information for Windows and Linux. Then, I wrote a simple json parser, and methods to use as a simple interface for the frontend. What else currently exists? The current source tree has this functionality implemented: Filesystem utils for finding and sanitizing paths (required by Unreal Engine to load paths relative to the executable) .ini file editor (because Unreal Engine operates on .ini files for configuration, one of which allows for custom file discovery. Editing it allows injecting custom mod files) Next plans? I will try and build a user-facing application that does exactly 3 things: It discovers the installation directory (so the frontend can also act as a launcher) It lets you add folders with mod files It lets you load one or more mods (and the base game) by constructing a .ini file on the go Maybe something more will come to my mind as time passes.
Interface update A functional UI demo has just been made! Following a design language similar to Unreal Engine 5, I was able to make a functional UI, that can launch the game with selected mods! The UI is written with PySide6, which allows for Qt6 API to be used on Python, giving a modern development workflow, with customizable stylesheets and cross-platform capabilities. What’s next? I want to rewrite the launcher a bit to support more games in the future and be more architecturally correct , at the same time feeling more premium both from the user-facing app, and the source code too.
A fresh look Expanding on the design I like, I decided to add some improvements. What improvements exactly? All these things: The launcher now supports adding multiple games (even though currently the only game supported is Unreal Tournament ’99 (more to come)) A sidebar was introduced for better UX A more user-friendly card design was expanded to become the main component interface relies on Backend experienced a bit of an overhaul too to support game/mod branching Safeguards were implemented to disallow adding multiple copies of the same mod OR directories that do NOT contain Unreal mod content Config is now stored in local paths for saving/loading added material Library tab disappears if no games are detected Wow! This is really awesome! Is it ready to be shipped? I could ship the current version, but there are exactly 3 things stopping me from doing so. I need to: Verify functionality on Windows (so it doesn’t become another Linux-only project of mine) Add verification for game paths and prompt user to enter location for both executable and config (if applicable/not found) Add Unreal Tournament 2004 functionality to leverage multiple game selection and see if it works (as well as possibly other games of the franchise, like Unreal and maybe even Unreal Tournament 2014)
UI tweaks! This looks better in my opinion After taking a look at the previous design I thought it looked quite ugly and inconsistent when some cards have center-aligned elements and others don’t. This update fixes these issues! You really spent so many hours on simple UI tweaks? Yes and no. While the primary purpose of this devlog IS to describe subtle interface change, under the hood many quality of development improvements hide as I’m trying to implement and fiddle with Unreal Tournament 2004 game adapter, which required a more streamlined API of adapter creation rather than what was previously developed. So, this devlog has hours logged from both a fully developed interface and half-developed new game adapter implementation. Stardance was warning me about getting close to 10h limit, so I must post this before diving deeper into Unreal Tournament 2004, which has way more twisted stuff within its modding system. Stay tuned and wish me luck!
Finally, it feels complete! What I’ve been through and why do I feel relieved So, after a LOT of trial and error, and MANY wrong paths taken, Unreal Tournament 2004 adapter is functioning! Why it took so much effort for such a simple thing UT2004 differs from UT99 in many different areas, even its modding system: It now has a dedicated -mod flag instead of using an overriden .ini file Every mod has its own mandatory structure, and UT2004 doesn’t like multiple mods loaded Mods can load diffs of system .ini files My plan was to replicate what I was doing with UT99 - building a custom mod at runtime that would bundle every enabled mod together. Since this game is quite old, so are its development sources. I resorted to the best source there is - proven to work mods. My top 3 problems with UT2004, ranked: Using empty files or ones that are with LF line endings instead of CRLF produces either a segfault or a Bad Mod error UT2004 creates a LOT of mod-specific runtime files, and they need to be cleared to be regenerated (I hate caching, as going through them all is difficult) I couldn’t get mods with heavy custom GUI usage to work, unless they’re being launched standalone, using UT2004 Community tab (which defeats the point of my launcher) Since I wanted to use the modern -mod flag, I had to make my own mod, which needs such files to function: ModDir/UT2K4Mod.ini (Name and description) ModDir/System/Default (Diffs of what to add/remove) ModDir/System/DefUser (Can be left empty, but requires at least one \r\n line) I’m thankful to whatever or whoever made me as patient as I am, because DefUser being absolutely empty causing a segfault or files requiring CRLF even in Linux was very unexpected, and required hours of investigation. On top of said implementation, backend framework also needed changes to ensure stability and flexibility. New methods returning more data to the game adapters were added, as well as improvements in attribute names and path handling. Bugs are always present… After testing with some edge cases, I found bugs that got resolved shortly after. Windows, as of now, works flawlessly, but I’ll be performing more tests when I distribute a full build. What’s that, some new GUI? Yes! I wanted to implement logos since the day 1 of starting this project. Surprisingly, that was one of the easiest modifications to date. Screen state tracking was also improved to provide no visual bugs after adding, removing, selecting and deselecting added material. Finally shipping, finally stable? Again, yes. All the intended functionality is verified to be working, and you can already try it out for yourself! Running python -m frontend.app from the project’s root will open up this GUI for you to play around! Over the next few days I’ll finish making all the necessary branding, README and ensure licensing is correct. Then I’ll push a final devlog and make a ship. Thank you for everyone following RedeeMOD’s journey. Keep rocking, and make the world truly Unreal !
Code, break, fix, repeat! Here’s what the final 1.0.0 release of RedeeMOD brings: Fully tested and documented! I built RedeeMOD not only as an app to manage Unreal Tournament games exclusively (though at first, that was the plan), but also as a framework to create more games in the future compatible with RedeeMOD! I recently wrote a Contribution guide that lets anyone create adapters and expand RedeeMOD by following a detailed guide! Also, as a standard practice, GitHub actions were added to help with releases. Both Windows and Linux builds work perfectly, but are unsigned, so Windows might throw Smart Screen or Smart App Control warnings. These are safe to ignore, and if they bother you too much, you can always resort to launching RedeeMOD directly through Python! Changes in code The code is formatted with Black formatter . It’s way easier to format the code using a tool than doing so manually. Also, I found some bugs that weren’t immediately noticeable. Things like: An uninitialized variable being still required in code (produces a TypeError ) Image painting events overriding each other Much more They are now fully fixed. Some inconsistencies between files have also been resolved. This latest build now features logos to feel more professional . User interface has been updated with more detailed card subtitles, so the app is easier to navigate. Overall, RedeeMOD is in its stable form for the first time ever. Now it’s just the matter of whether more adapters will be created for other games by the community! Does RedeeMOD lack something? Well, the mod management is very simple - adding, removing and enabling/disabling a mod probably doesn’t sound like the most sophisticated mod manager on the earth, but I am planning to later add a pop up that lets users customize the mods even further, like adding custom launch options, paths, even image customization, but that will require more time and I feel confident enough that the current feature set is good for the first ship. For more info on RedeeMOD, visit its GitHub repository !
Pre-ship devlog! Maitenance pre-ship revealed 3 more bugs that I couldn’t live with… Bugs? What bugs? Actually, very counter-intuitive! UT99-specific : Turns out, when Unreal Tournament ’99 reads configuration and finds duplicate filenames in different directories, FIRST ENTRY DEFINED WINS , which, from coding perspective, is very unusual! Usually, if you define a variable, it can be redefined later. UT99 does not work like that, so I made the mods override any system files if they do override any. I noticed this by trying to load one of my favorite mods ever - the HD pack, which overrides system textures. Glad this bug got noticed! UT2004 skins not working : Some skin mods would not work due to the correct files not being imported on game runtime. By adding an extra file extension to the list of import files, I was able to fix this! Label truncation fails : Previously I had implemented an ElidedLabel that truncates a string and replaces the ending with ... if it is too long. In some rare instances however it failed and set a boundary on window size instead of truncating. However, it’s not an issue anymore! Error handling is better now I ran into an issue that got me confused - I couldn’t launch a game. I panicked, thought that my launcher was broken again, and only then did I realise that the game wasn’t installed! Launcher did not notify me and I got frustrated. Since I want the UX to be flawless, the best decision was to make a pop-up in case of a critical error. I gotta say - the ship is finally truly 100% ready !
Quake fans - I got you! Thought RedeeMOD would only be available for niche titles? Not exactly! Which Quake? Most people would probably agree with me that Quake 3 Arena was the best entry of the series for multiplayer games. After seeing just how many Quake 3 mods there are (some even being standalone games) I had to implement an adapter for it with support for both standalone games and mods! I resorted to the IOQuake 3 engine support due to its extra capabilities and being the modern choice for most, so original Id Tech 3 might not work. How does it work? IOQuake 3 inherits cvar support (and adds more!) from Id Tech 3 engine. Utilizing com_basegame , i could bypass Quake 3 Arena file presence for standalone games. What about Quake 3 MODS that are not standalone? The new adapter follows an interesting edge-case detection logic: If a mod has default.cfg file somewhere within its .pk3 files, it’s considered standalone. Other games are required to have genuine Quake 3 Arena present, about what RedeeMOD will warn. IOQuake 3 requires Quake 3 Arena or Team Arena files to be in baseq3 and missionpack directories. This adapter handles warning users against such restriction. Quake 3 Arena can’t be launched through RedeeMOD as a mod. Everything else works perfectly fine (based on testing). All mods I tested worked fine. If you find one that does not, kindly report it on GitHub issues 😄 The most challenging adapter of all No doubt, the amount of testing that was required to get this working is absurd, and definitely it was the most challenging adapter of all .
Tested and working! How (and why) I implemented tests in RedeeMOD The reason behind “why” My dad is a high profile developer, and many new things I try are influenced by him. While I always liked setting up CI/CD pipelines and other automations, one thing my projects lacked was testing. Turns out, many tech jobs require knowledge about tests, because they guarantee several things: They assure that your application works as it should They document your working concept They let you make refactors that don’t hurt the functionality So, after considering these benefits, I started reading how tests are implemented. How did I implement tests for RedeeMOD? There are 3 main types of tests: Unit (where one small component is tested) Integration (where several combined components and their behaviour is tested) End to End (where full system flow from start to finish is tested) (they take a long time, so I didn’t even consider them for RedeeMOD) First thing any testable software should have is clear dependency injection. Dependency injection is a pattern where you don’t call dependencies directly, but pass them externally. I opted for implementing method argument injection that I could later use in tests. Why is DI required? Well, during testing, the external environments must be mocked and created virtually to test different use cases (things like sys.* calls and more). Luckily, RedeeMOD already had a nice and semi-testable architecture where very few things needed to be changed. Writing tests is a tedious and rather boring process, because all the edge cases must be defined. Don’t hate me for this, but I handed over writing tests to AI. My arguments for why AI is appropriate for this are: You can’t test software that hasn’t been previously written (by people) Repetitive work takes away precious time, and AI just performs checks While one could argue that Test-Driven Development exists, after trying it out I can confidently say that I’m not a fan of TDD. However, giving very broad instructions, like “Make me tests for this project” usually doesn’t go well, because AI can’t retain project philosophy and tests what doesn’t need to be tested (things that don’t contain logic, thus can’t really fail). RedeeMOD currently has a test suite based on pytest with integration and unit tests written. How tests could benefit you? With tests, instead of clicking around (and often forgetting) every edge case manually, you can offload it to a machine that does hundreds of calculations extremely fast. Not only is it a well-regarded pattern within the developer community, but also helps with coding efficiency and guards from failed refactors.
Server owner? RedeeMOD is now CLI! Honestly, I wouldn’t even have thought about it if not for my other project, UT99 server container . Turns out, this is quite useful! How does it work? Like any other CLI app would. It lets anyone load mods on any game without opening the GUI. It’s useful for 2 audiences: Server owners, that need a tool that could be automated Terminal tinkerers, most likely Linux users :D After the beginning of UT99 server project one of the things I immediately thought about was modding the server, not only the client. Whether it’s a mutator, map or anything else - tinkering with individual directories can be brittle, especially in a server environment. Having a tool manage mods is much simplier and foolproof, since RedeeMOD even handles mods disposably - they don’t override the main installation, leading to a predictable setup at all times. Did anything internally change? Yes! Qt is no longer a dependency of the backend, allowing CLI app to be much smaller. The application data paths are now handled manually. The repo now also has more tests to account for new CLI features.
Ships:
Modding (some) games has never been easier! I present to you - RedeeMOD , a mod launcher that lets anyone mod games with ease! RedeeMOD was first created for modding Unreal Tournament games, but due to its expandable nature, anyone who knows Python can write a little script and expand RedeeMOD’s game selection for any game imaginable! What are its core features? Glad you asked! Here’s what you get out of the box: Automatic game discovery - RedeeMOD finds your game installations all by itself! A real mod library - every game gets its own mod collection. Add mods once and toggle them whenever you like Custom path overrides - is your game installed somewhere weird? Just point at it and carry on Cross-platform frontend - built with Python and PySide6 (Qt6), so it runs natively on both Windows and Linux! (macOS should also work, but I can’t test that - I own no apple gear) And here’s my favorite part: mods never mess up the vanilla game! Which games are supported? As of today: Unreal Tournament ’99 - mods are loaded through automatic INI patching Unreal Tournament 2004 - mods are stitched together into a package and loaded using the game’s own -mod mechanism Both games are available to download from OldUnreal page, FOR FREE ! What about other games? Can I add them myself? Absolutely! This is where RedeeMOD shines - every game is just an adapter. It knows three things about a game: What’s it called Where it might live How to launch it with mods I even prepared a guide just for that! If a game can be modded without wrecking its installation, an adapter can be written for it. Cool! How do I get it? Head over to the Releases page and grab the app! Or if you want to Redeem the source: git clone https://github.com/domasles/redeemod.git cd redeemod pip install -e . # Omit -e flag if you are not planning to edit the source files later. Leaving it is recommended though redeemod How to use it? Download Unreal Tournament ’99 or Unreal Tournament 2004 from OldUnreal Open the game, configure your settings, and ONLY THEN add the game to RedeeMOD Download any mod you like. My recommendations: Unreal Tournament ’99 HD textures XVehicles for Unreal Tournament ’99 HaloUT for Unreal Tournament 2004 About any skin mod available (be careful, some depend on others!) Add it to your games’ Mod Library Enable the mods you feel like playing today Launch the game and enjoy ! Honesty is the most important thing A few things to know before diving in: Windows’ Smart App Control might block the unsigned executable. You can either disable it or build the app yourself. On Linux, case-sensitive filenames occasionally bite older mods - usually fixable with some renames. Unreal Tournament 2004 was designed to load one mod at a time, so stacking several can lead to conflicts. In practice? It mostly just works. Some mods might not work properly because: a. They require some GUI classes RedeeMOD can’t handle yet b. They are straight up broken Try it, break it, tell me everything I made RedeeMOD out of the frustration that some games don’t have ways of loading mods while leaving the base intact. If it happened to you before, and RedeeMOD helped, I can feel proud. Found a bug, got an idea, or want to see your favorite game in the lineup? Mind you - contributions are very welcome!
After quite some time, RedeeMOD development is back! What’s new New adapter! : IOQuake 3 is officially supported on RedeeMOD! The adapter is quite complex due to engine’s hardcoded filepaths and external game loading, thus only one type of content can be loaded at a time (either an IOQuake 3 game or Quake 3 mod). API improvements : Each adapter is equipped with a setup() method that runs after adding a game - useful for first-time initialization instead of prompting user for setup steps. Mod adapters can limit the amount of mods they allow selected at once. Game configurations are isolated now, so every game can work on its own requiring no modifications to unrelated files! Tests! : RedeeMOD has automated integration and unit tests implemented. Layout changes : The layout was tweaked a bit to be more usable. Changes mainly made to card positioning, so Add Game and Add Mod cards are always shown first. I hope that many of you will enjoy this project. Even better if you try to script adapters of games that YOU think are important! Remember, that you can always resort to the Contributing Guide on GitHub ! And, of course, leave a nice review if you think RedeeMOD is worth one ;)...
|
1793102068.9683864
|
1793188468.9683864
|
|
32702
|
Hardware Based SDP Solver by @brew | Stardance
|
brew
|
1
|
62.23
|
958
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-31T02:31:03Z", "hours": 50.0, "multiplier": 19.28, "payout": 958, "blessing": "neutral", "text": "I made a hardware implementation of Prange’s ISD algorithm. This algorithm is used in cryptanalysis of post-quantum cryptosystems (it can break something like HQC at extremely low parameters) or in some error correction algorithms (although these are not widely used). The hardest part about making this was designing the architecture. As my video demo shows, the math is not that hard. However, the architecture behind it required a software prototype, dozens of hours writing and debugging RTL, and accounting for deep memory access pipelines.", "repo": "https://github.com/0x62797465/isd", "demo": "https://youtu.be/89tWpNHTBE0"}]...
|
[{"post_id": 52677, "ts": "202 [{"post_id": 52677, "ts": "2026-08-22T22:59:53Z", "hours": 0.2883, "text": "made the codebase slightly more readable"}, {"post_id": 49043, "ts": "2026-08-17T17:07:26Z", "hours": 0.8281, "text": "Minor timing improvements; I realized that the multiplication path was poor for timing. However, I found out this only increased it to about 120mhz and that BRAM latency was the real killer."}, {"post_id": 41132, "ts": "2026-08-05T04:16:18Z", "hours": 6.9108, "text": "I wrote up the entire architecture updated my overall testbench. I do not know why this took so long."}, {"post_id": 39888, "ts": "2026-08-03T05:26:42Z", "hours": 3.0731, "text": "Cleaned up the codebase. The final thing I need to do before the technical write-up is make the overall test bench for a performance report & overall correctness."}, {"post_id": 38667, "ts": "2026-08-01T05:29:22Z", "hours": 1.13, "text": "Fixed the permutation testbench, which I didn’t even know was broken! Apparently it broke when I changed the memory access system to flatten the 2d array, it also exposed some other bugs that have been hiding."}, {"post_id": 37937, "ts": "2026-07-30T23:26:45Z", "hours": 0.8875, "text": "Well, I think this is it! I have some code hygiene to do, and I have to make the presentation video, but it’s done! I’ll be making a video presentation soon and pushing a release. Attached are some benchmark results; it’s pretty fast!"}, {"post_id": 37367, "ts": "2026-07-30T01:12:43Z", "hours": 2.0069, "text": "Finished the Gaussian elimination testbench! Only bugs I caught were in the testbench itself (which was expected, since I tested it in hardware before simulating). One complicated thing was to undo the row swaps, I had to scan the identity matrix."}, {"post_id": 37255, "ts": "2026-07-29T20:27:30Z", "hours": 2.2947, "text": "I’ve been running benchmarks. So far, the largest challenge I’ve been able to solve has an error length of 280 and a weight of 35, it took 13 hours and was externally verified."}, {"post_id": 36138, "ts": "2026-07-28T01:14:54Z", "hours": 2.8528, "text": "It’s done. This script receives, from UART, the columns needed for the error. However, due to the nature of the algorithm, it also contains non-error columns. With one RREF run on the permutated matrix we can recover the error vector. I have to clean the code up globally and finish the Gaussian elimination testbench before I start thinking about writing this up, benchmarking it, and publishing it."}, {"post_id": 35551, "ts": "2026-07-27T01:56:25Z", "hours": 2.9125, "text": "Implemented the UART logic, unfortunately there was a fire that led me to evacuate my house so I can not test it on my FPGA. Pictured is the top-level logic. (Each green block is a single unit, each unit contains one permutation unit and one Gaussian elimination unit)."}, {"post_id": 35209, "ts": "2026-07-26T14:25:31Z", "hours": 3.6583, "text": "Got it to synthesize and work, it’s faster than my CPU implementation!"}, {"post_id": 34383, "ts": "2026-07-25T01:41:47Z", "hours": 3.0183, "text": "Almost done rewriting the Gaussian elimination module. Today I worked on the elimination part and finished the selection part. It’s really hard because all memory accesses are pipelined, and what’s worse is that the depth is >4, making it complicated enough where I need to diagram. Below is the RTL view, you may notice some tall stuff, that’s free list access, but besides that it’s highly optimized. All that’s left for this module is bitcounting & stalling, which are both trivial, however the testbench is a different story."}, {"post_id": 33810, "ts": "2026-07-24T01:34:58Z", "hours": 2.5689, "text": "This is the new RTL view for the permutation! After changing some logic and fixing the testbench today I don’t think it will look much different in the future. The long thing is a 32 bit seed being used in the xorshift32 algorithm (a PRNG). Today I worked on the Gaussian elimination unit, there is a lot to do to move it into BRAM. First, I have to adapt it to receive the permutated matrix, which is the easy part. Everywhere else the architecture heavily diverges. I will be scanning the columns to build a list (in BRAM) of every row I need to eliminate, at the same time I will use a free list to prevent using an already-used row (which would break the algorithm) and select a row to use for elimination (and rename and allocate it to prevent re-use and actual swaps). During the elimination step, I will fetch the current word used for elimination, then eliminate every row in the list for the current word. I will repeat until it is done. Additionally, I’ll save some time by skipping unneeded words at the beginning (which should be all zero in our selected row by construction). The bit count implementation is pretty easy, all I need to do is read the new syndrome bits in many cycles, adding them together, then comparing against a constant. Most of this is not yet implemented, but progress is being made!"}, {"post_id": 33344, "ts": "2026-07-23T05:15:43Z", "hours": 2.8708, "text": "After an excessive amount of work, the permutation stage is now fully BRAM and the testbench is updated to match. This required renaming, state machines, multi-cycle delays, look ahead memory accesses, etc. I am very happy it is done, however the bigger beast (Gaussian elimination) is up next."}, {"post_id": 32714, "ts": "2026-07-22T01:23:27Z", "hours": 4.6639, "text": "Spent the entire day trying to refactor the permutation logic to use BRAM. So far, I was able to get the static matrix put into BRAM. I am currently working on getting the permutation matrix and snapshots put into BRAM. To prevent excessive logic or stale periods I am implementing a renaming system that allows for quick swaps of permutation matrixi. The testbench works for the static matrix in BRAM, but since the permutation logic is still being adapted to BRAM I am not near finished."}, {"post_id": 32098, "ts": "2026-07-21T00:55:21Z", "hours": 1.8475, "text": "RTL view or Factorio map? If you guessed RTL view, you would unfortunately be correct. My naive architecture was not a great idea! Pictured here is only 2% of the problem, the other 97% is the Gaussian elimination unit which doesn’t manage to load in RTL view even after an hour of waiting. Why? Muxes. I treated access into a 20k entry bitarray as cheap, which was not very smart, especially since I did multiple reads/writes in a single cycle (which duplicates logic). As a result, I am currently refactoring the codebase to store more things in BRAM. This will come at a heavy, heavy, heavy performance cost, but at least it’ll be synthesizable and the units may be duplicatable. This will require me to rewrite the permutation unit, the Gaussian unit, and both testbenches. Essentially 10 hours of work are down the drain."}, {"post_id": 31579, "ts": "2026-07-20T02:48:42Z", "hours": 1.3114, "text": "I am in the testing stage of the Prange implementation, simulation is really slow, so it will take a while. So far it has been running for an hour without a solution. However, other testbenches and results show that there likely will be a solution in some time."}, {"post_id": 31039, "ts": "2026-07-19T03:31:36Z", "hours": 2.4542, "text": "I wanted to one-up my time from yesterday so I continued working on my project. I implemented a fully randomized testbench of the new unit’s (responsible for gaussian elimination and hamming weight calculation) receiving protocol, hamming weight calculation, solution correctness, and more. Overall I found a few major bugs, but they’re all fixed now. My Prange implementation is nearly complete!"}, {"post_id": 30950, "ts": "2026-07-18T23:19:17Z", "hours": 3.2281, "text": "This has been an undertaking, I present to you, a very very tunable Gaussian elimination unit in GF(2). This is essentially a state machine that copies over a partial permutated matrix from the other permutation unit, then it finds a non-zero coordinate for the current column, swaps, eliminates, and repeats. Afterwards, it does a hamming weight calculation to see if it’s equal to our needed weight, if yes then it stalls, otherwise it requests another matrix and restarts. The hardest part of this was making every parameter tunable, because doing so allows us to later use something like an evolutionary algorithm to reach a theoretical optimal design for a given dimension."}, {"post_id": 30364, "ts": "2026-07-17T20:48:24Z", "hours": 3.4306, "text": "Major changes, the permutation generator now can transfer data to the Gaussian elimination units in blocks. I made sure this, and some other logic I’ve added, works via a large test bench (larger than the actual implementation!)."}, {"post_id": 29746, "ts": "2026-07-16T20:47:27Z", "hours": 2.4306, "text": "Small changes. I implemented the permutation generator in systemverilog and made a testbench for it (looks for frozen random values, zero random values (breaks xorshift), and for invalid permutation states (multiple entries point to the same thing)). I used the xorshift32 algorithm because of how cheap it is on hardware. I would have used xorshift16, but the larger state prevents exhaustion of search space. Pictured is incremental changes in simulation."}, {"post_id": 28641, "ts": "2026-07-15T00:43:09Z", "hours": 2.8442, "text": "I decided to take another look at my Prange implementation before committing it to hardware. It turns out that there was a lot of room for optimization. Originally, with full optimizations, the code solved an instance at 200 dimensions in 300 seconds. At that dimension, it is estimated to have a complexity of 2^21, which means that my code was not doing too well. First things first, I started storing bits in bit arrays rather than byte arrays. Since everything was in GF(2) it was much easier to simply use an array given that C had no high performance built-in bitarray. However, C++ did. So after migrating my code base and changing everything to bitarrays (and using the same random seed, meaning same solution and work) I got it solved in 150 seconds, which is a 2x improvement! After removing some repeated allocations, making my code take better advantage of boost’s high performance block operations (64 bits xored in a cycle rather than 1 (there’s some heavy nuance to this due to how modern processors work but there is an improvement)), and making the hamming weight calculator operate along with the Gaussian elimination rather than after it, I got a further 5x boost to 30 seconds (same randomness). I got another improvement to 10 seconds when I changed the randomness (so technically there is a different amount of work but the overall trend held for other tests) and permutation logic to prevent repeated allocations and to decrease the amount of swaps that were needed by partitioning two sections at the cost of some random uniformity. Overall, I achieved a 30x speedup and now I’m able to run higher dimensions in a reasonable time."}, {"post_id": 25473, "ts": "2026-07-09T19:16:54Z", "hours": 0.5122, "text": "Small updates, I fixed memory leakages and got the algorithm working at 170 dimensions instead of just 100. The next algorithm I will be prototyping will be the final one used in-hardware. In the screenshot, part of the matrix with partial RREF is shown along with a found solution after list generation and matching."}, {"post_id": 25061, "ts": "2026-07-09T00:47:57Z", "hours": 2.0878, "text": "I got the Stern algorithm prototype running! While the memory complexity makes it unusable for higher dimensions (multiple petabytes at just d=200), it is able to solve small dimensions relatively quickly. This is my last prototype until I start implementing BJMM in both software and HDL."}, {"post_id": 24924, "ts": "2026-07-08T20:02:16Z", "hours": 1.8081, "text": "This is my first devlog post! For now, my code is relatively basic. The problem it is attempting to solve is the syndrome decoding problem, which is used in error correction and post-quantum cryptography. I made a prototype of Prange’s algorithm, but now I am working on Stern’s, which has a higher memory complexity but better time complexity. Screenshotted is the partial RREF achieved in order to split the syndrome into two parts (one for lookup and the other for exact matching)."}]...
|
Title: Hardware Based SDP Solver by @brew | Starda Title: Hardware Based SDP Solver by @brew | Stardance
Devlogs:
This is my first devlog post! For now, my code is relatively basic. The problem it is attempting to solve is the syndrome decoding problem, which is used in error correction and post-quantum cryptography. I made a prototype of Prange’s algorithm, but now I am working on Stern’s, which has a higher memory complexity but better time complexity. Screenshotted is the partial RREF achieved in order to split the syndrome into two parts (one for lookup and the other for exact matching).
I got the Stern algorithm prototype running! While the memory complexity makes it unusable for higher dimensions (multiple petabytes at just d=200), it is able to solve small dimensions relatively quickly. This is my last prototype until I start implementing BJMM in both software and HDL.
Small updates, I fixed memory leakages and got the algorithm working at 170 dimensions instead of just 100. The next algorithm I will be prototyping will be the final one used in-hardware. In the screenshot, part of the matrix with partial RREF is shown along with a found solution after list generation and matching.
I decided to take another look at my Prange implementation before committing it to hardware. It turns out that there was a lot of room for optimization. Originally, with full optimizations, the code solved an instance at 200 dimensions in 300 seconds. At that dimension, it is estimated to have a complexity of 2^21, which means that my code was not doing too well. First things first, I started storing bits in bit arrays rather than byte arrays. Since everything was in GF(2) it was much easier to simply use an array given that C had no high performance built-in bitarray. However, C++ did. So after migrating my code base and changing everything to bitarrays (and using the same random seed, meaning same solution and work) I got it solved in 150 seconds, which is a 2x improvement! After removing some repeated allocations, making my code take better advantage of boost’s high performance block operations (64 bits xored in a cycle rather than 1 (there’s some heavy nuance to this due to how modern processors work but there is an improvement)), and making the hamming weight calculator operate along with the Gaussian elimination rather than after it, I got a further 5x boost to 30 seconds (same randomness). I got another improvement to 10 seconds when I changed the randomness (so technically there is a different amount of work but the overall trend held for other tests) and permutation logic to prevent repeated allocations and to decrease the amount of swaps that were needed by partitioning two sections at the cost of some random uniformity. Overall, I achieved a 30x speedup and now I’m able to run higher dimensions in a reasonable time.
Small changes. I implemented the permutation generator in systemverilog and made a testbench for it (looks for frozen random values, zero random values (breaks xorshift), and for invalid permutation states (multiple entries point to the same thing)). I used the xorshift32 algorithm because of how cheap it is on hardware. I would have used xorshift16, but the larger state prevents exhaustion of search space. Pictured is incremental changes in simulation.
Major changes, the permutation generator now can transfer data to the Gaussian elimination units in blocks. I made sure this, and some other logic I’ve added, works via a large test bench (larger than the actual implementation!).
This has been an undertaking, I present to you, a very very tunable Gaussian elimination unit in GF(2). This is essentially a state machine that copies over a partial permutated matrix from the other permutation unit, then it finds a non-zero coordinate for the current column, swaps, eliminates, and repeats. Afterwards, it does a hamming weight calculation to see if it’s equal to our needed weight, if yes then it stalls, otherwise it requests another matrix and restarts. The hardest part of this was making every parameter tunable, because doing so allows us to later use something like an evolutionary algorithm to reach a theoretical optimal design for a given dimension.
I wanted to one-up my time from yesterday so I continued working on my project. I implemented a fully randomized testbench of the new unit’s (responsible for gaussian elimination and hamming weight calculation) receiving protocol, hamming weight calculation, solution correctness, and more. Overall I found a few major bugs, but they’re all fixed now. My Prange implementation is nearly complete!
I am in the testing stage of the Prange implementation, simulation is really slow, so it will take a while. So far it has been running for an hour without a solution. However, other testbenches and results show that there likely will be a solution in some time.
RTL view or Factorio map? If you guessed RTL view, you would unfortunately be correct. My naive architecture was not a great idea! Pictured here is only 2% of the problem, the other 97% is the Gaussian elimination unit which doesn’t manage to load in RTL view even after an hour of waiting. Why? Muxes. I treated access into a 20k entry bitarray as cheap, which was not very smart, especially since I did multiple reads/writes in a single cycle (which duplicates logic). As a result, I am currently refactoring the codebase to store more things in BRAM. This will come at a heavy, heavy, heavy performance cost, but at least it’ll be synthesizable and the units may be duplicatable. This will require me to rewrite the permutation unit, the Gaussian unit, and both testbenches. Essentially 10 hours of work are down the drain.
Spent the entire day trying to refactor the permutation logic to use BRAM. So far, I was able to get the static matrix put into BRAM. I am currently working on getting the permutation matrix and snapshots put into BRAM. To prevent excessive logic or stale periods I am implementing a renaming system that allows for quick swaps of permutation matrixi. The testbench works for the static matrix in BRAM, but since the permutation logic is still being adapted to BRAM I am not near finished.
After an excessive amount of work, the permutation stage is now fully BRAM and the testbench is updated to match. This required renaming, state machines, multi-cycle delays, look ahead memory accesses, etc. I am very happy it is done, however the bigger beast (Gaussian elimination) is up next.
This is the new RTL view for the permutation! After changing some logic and fixing the testbench today I don’t think it will look much different in the future. The long thing is a 32 bit seed being used in the xorshift32 algorithm (a PRNG). Today I worked on the Gaussian elimination unit, there is a lot to do to move it into BRAM. First, I have to adapt it to receive the permutated matrix, which is the easy part. Everywhere else the architecture heavily diverges. I will be scanning the columns to build a list (in BRAM) of every row I need to eliminate, at the same time I will use a free list to prevent using an already-used row (which would break the algorithm) and select a row to use for elimination (and rename and allocate it to prevent re-use and actual swaps). During the elimination step, I will fetch the current word used for elimination, then eliminate every row in the list for the current word. I will repeat until it is done. Additionally, I’ll save some time by skipping unneeded words at the beginning (which should be all zero in our selected row by construction). The bit count implementation is pretty easy, all I need to do is read the new syndrome bits in many cycles, adding them together, then comparing against a constant. Most of this is not yet implemented, but progress is being made!
Almost done rewriting the Gaussian elimination module. Today I worked on the elimination part and finished the selection part. It’s really hard because all memory accesses are pipelined, and what’s worse is that the depth is >4, making it complicated enough where I need to diagram. Below is the RTL view, you may notice some tall stuff, that’s free list access, but besides that it’s highly optimized. All that’s left for this module is bitcounting & stalling, which are both trivial, however the testbench is a different story.
Got it to synthesize and work, it’s faster than my CPU implementation!
Implemented the UART logic, unfortunately there was a fire that led me to evacuate my house so I can not test it on my FPGA. Pictured is the top-level logic. (Each green block is a single unit, each unit contains one permutation unit and one Gaussian elimination unit).
It’s done. This script receives, from UART, the columns needed for the error. However, due to the nature of the algorithm, it also contains non-error columns. With one RREF run on the permutated matrix we can recover the error vector. I have to clean the code up globally and finish the Gaussian elimination testbench before I start thinking about writing this up, benchmarking it, and publishing it.
I’ve been running benchmarks. So far, the largest challenge I’ve been able to solve has an error length of 280 and a weight of 35, it took 13 hours and was externally verified.
Finished the Gaussian elimination testbench! Only bugs I caught were in the testbench itself (which was expected, since I tested it in hardware before simulating). One complicated thing was to undo the row swaps, I had to scan the identity matrix.
Well, I think this is it! I have some code hygiene to do, and I have to make the presentation video, but it’s done! I’ll be making a video presentation soon and pushing a release. Attached are some benchmark results; it’s pretty fast!
Fixed the permutation testbench, which I didn’t even know was broken! Apparently it broke when I changed the memory access system to flatten the 2d array, it also exposed some other bugs that have been hiding.
Cleaned up the codebase. The final thing I need to do before the technical write-up is make the overall test bench for a performance report & overall correctness.
I wrote up the entire architecture updated my overall testbench. I do not know why this took so long.
Minor timing improvements; I realized that the multiplication path was poor for timing. However, I found out this only increased it to about 120mhz and that BRAM latency was the real killer.
made the codebase slightly more readable
Ships:
I made a hardware implementation of Prange’s ISD algorithm. This algorithm is used in cryptanalysis of post-quantum cryptosystems (it can break something like HQC at extremely low parameters) or in some error correction algorithms (although these are not widely used). The hardest part about making this was designing the architecture. As my video demo shows, the math is not that hard. However, the architecture behind it required a software prototype, dozens of hours writing and debugging RTL, and accounting for deep memory access pipelines....
|
1793094821.2301111
|
1793181221.2301111
|
|
37765
|
nano65 by @lynx1076 | Stardance
|
lynx1076
|
0
|
62.17
|
0
|
[]
|
[{"post_id": 66283, "ts": "202 [{"post_id": 66283, "ts": "2026-09-12T00:59:04Z", "hours": 8.9686, "text": "Big things in the happening yall! The LCD just seemed oh so limiting so I decided to switch to a 64x64 LCD panel. Obviously the 6502 is nowhere near fast enough to control the display AND calculate stuff to put there so I’m using a tang nano 20k as a sort of GPU. It kind of feels like a waste though, using a device that could emulate a faster processor and drive the display at the same time so I might switch to a hardware implementation in the future. For now though this will suffice as I care more about the calculations I want to plot onto the display. (Ohoh what ever might he do with an array of pixels that can be arbitrarily colored and turned on/off )"}, {"post_id": 61195, "ts": "2026-09-04T00:28:40Z", "hours": 0.7014, "text": "Yall. Its wozzing time Running wozmon on a diy computer that I alone developed, debugged and produced is really something else. I dont know how much this applies to you guys but I think its time we all took a step back as junior devs and consider the stuff weve built. Im really amazed as to what we are all capable of when we put our minds to it. A few months ago I was a teen with a stupid idea, in way over my head. Now Im running 50 years old software on my very own machine, just as the computer gods intended. Ive certainly got quite a journey ahead of me but Im excited to see whats coming my way. Happy hacking yall"}, {"post_id": 61170, "ts": "2026-09-03T23:27:36Z", "hours": 1.5656, "text": "American layout… But hey ITS WORKING Next Stop: Wozmon on the nano65"}, {"post_id": 61124, "ts": "2026-09-03T21:27:24Z", "hours": 8.0733, "text": "Quick status update Im racking up hours too quickly so heres a quick update on what Im doing: Built hardware to support PS2 keyboard Switched LCD to 4-bit mode Started to work on interpreting keyboard signals Some of you might recognize the circuitry from Ben Eater’s video series. If you’re looking to implement this in your own project make sure to add some series resistors for the 74HC14 outputs as they may ring heavily distorting your interrupts."}, {"post_id": 58401, "ts": "2026-08-30T20:09:51Z", "hours": 5.9656, "text": "We ballin’! Last time I caught some heat for not using a project related pic so here are some exciting pictures of my messy desk and horrible wiring. I am excited to announce that flashing and dumping the memory is now a somewhat survivable experience even though its kind of slow. Right now Im just looking to hook up a PS2 keyboard so we can get some interactive stuff going but its lookin good. I had loads of issues with the wiring and since I was doing an internship up until friday I havent had much time but Im free now so expect more frequent updates more monke (lookin at you @fsh ) and more fanatic rambling about a processor nobody cares about (I LOVE ASSEMBLY)"}, {"post_id": 48484, "ts": "2026-08-16T21:07:50Z", "hours": 1.8153, "text": "Finally got flashing to work. The speed is absolutely abysmal (~30s for dumping and flashing) but it works and since single bytes can be quickly edited without re-flashing everything I don’t mind"}, {"post_id": 48412, "ts": "2026-08-16T19:03:51Z", "hours": 2.2406, "text": "Memory dumps now implemented. It’s a bit sketchy but you know… “Nothing more permanent than a temporary fix” It’s a bit slow all in all but I already increased the baudrate to 500k and I feel if I go any higher it’ll probably die like a hamster in a microwave."}, {"post_id": 44218, "ts": "2026-08-09T20:41:09Z", "hours": 9.3833, "text": "Just doing a quick post since I am racking up some time. Haven’t been working a lot on the software as I’ve been really busy recently. Anyways the command to dump the entire memory is almost done. Right now I am just making it print some specific known bytes from the dump."}, {"post_id": 35355, "ts": "2026-07-26T18:04:16Z", "hours": 3.2119, "text": "Tried running the nano65 at 2.5 MHz aaaannddd… IT WORKS PERFECTLY!!! I just ran a simple program that reads a byte from SRAM, adds 1 and then writes it back. This program loops infinitely so I could see if the CPU would go haywire and it actually didn’t. This means more intense programs like video games (oooh spoilers) could theoretically already run."}, {"post_id": 35119, "ts": "2026-07-26T10:55:48Z", "hours": 1.0125, "text": "Memory manipulation while processor is running!!! The memory can now be safely written to WHILE THE CPU IS RUNNING INSTRUCTIONS AT THE SAME ADDRESS! After adding a pull-up to the RWB pin (low means write so I’d have to assert the clock low before turning off the CPU) the SRAM and EEPROM can be written to/read from arbitrarily while the CPU is paused and all registers are preserved. Spot a bug while stepping through your code? Change the byte immediately before the CPU even sees it."}, {"post_id": 34921, "ts": "2026-07-26T00:57:06Z", "hours": 1.4275, "text": "UI starting to look good and memory interaction is working splendidly I also decided to finally change the font so we don’t all get eye cancer. Next is just going to be some QOL features like the panel on the left I haven’t really used. Probably going to put some status info there like if a vector is being pulled and the current clock state. Also going to implement writing a whole binary file to the nano65’s memory and dumping the memory. Once that’s all done I’ll treat myself to actually doing some projects with the nano65 to see if any other features might be nice."}, {"post_id": 34830, "ts": "2026-07-25T20:48:30Z", "hours": 1.4211, "text": "“The debugger is very confusing. It exists, but it’s very confusing. I don’t understand my debugger. It’s a low-level debugger and if you’re not familiar with a low-level debugger you don’t know what you’re talking about.” Terry A. Davis"}, {"post_id": 34713, "ts": "2026-07-25T17:24:35Z", "hours": 8.7947, "text": "THE HOST APP WORKS It’s now possible to step through a 6502 program using the debugger software instead of manually sending commands via serial. The GUI doesn’t look as good as I’d like it to but that’s a bridge I’ll burn when I get to it. For now the CPU can be reset with the hardware reset button and the stp (step [count]) command allows stepping through individual clock cycles. This will soon be changed to step through individual instructions instead to allow easier debugging but I’ll leave the direct clock manipulation in just in case. The screenshot clearly shows the W65C02S processor stepping through it’s reset cycle (the pseudo-reads were omitted since they are meaningless). The oscilloscope shows the external clock doing the 7 cycles until the reading of 0xFFFC is reached (bus is sampled on high clock so the positive edges count as clock ticks). Woah you read all that? Thx <3 From here on out it’s just a matter of implementing the rest of the commands on the host’s side and then doing some cool projects."}, {"post_id": 33241, "ts": "2026-07-22T23:51:47Z", "hours": 1.88, "text": "Well I decided to fully scrap the TUI afteralll since doing that would not let me compile for Windows and Linux easily and a GUI was going to be the end goal anyways. Using raylib and microui and it’s looking good (so far). https://www.raylib.com/ https://github.com/rxi/microui"}, {"post_id": 32733, "ts": "2026-07-22T02:21:39Z", "hours": 1.8928, "text": "Can’t get ncurses to work because I’d have to patch together like 5 different libraries just to get input working somewhat and you guys deserve better than me generating half of this project using ai cause I’m too dumb to figure out a 40 year old library. Stumbled upon this gem of a library (haven’t even tried it yet but the trailer so fire I had to share). Next update will hopefully be one about the hardware once I figure out this TUI-mess. notcurses https://www.youtube.com/watch?v=dcjkezf1ARY"}, {"post_id": 32131, "ts": "2026-07-21T02:45:01Z", "hours": 3.5219, "text": "Well I haven’t broken the firmware (yet) but the host software is really making me go through a lot. Setting up a “simple” ui using ncurses turned out to not be that simple afterall which might be due to the fact I decided to write this whole project in C. I’ll get back to logging once I have some decent program running on the nano65 so I can show off all the cool features of the arduBug. Since I don’t have much to show for all my work right now I’m just going to flex my C sloc on all the react kiddies ; ). Anyways that’s all for today folks (well I guess that’s just you, dear mod, reading this until I get verified). I’ve got to catch up on some sleep now (-_-)zzZZz"}, {"post_id": 31993, "ts": "2026-07-20T20:42:27Z", "hours": 0.2978, "text": "Working on the debugger (arduBug). Basically a little tool that I’ll use to manipulate the W65C02 processor and any devices on the bus. Its working well firmware-wise so I’m working on the host to let me interact with the nano65 (the actual computer) on a more abstract level. If all goes well I’ll hook up the VIA soon and from there on all sorts of cool things will be possible. In the picture you can see the full setup (arduBug, motherboard, and storage board). The oscilloscope shows the internal clock (2.5 MHz; will likely be decreased to 2 MHz). The interesting thing is that the arduBug boots up and turns off the internal clock to overwrite it with it’s own clock source. I was now able to revert that setup from the host software via a serial command."}]...
|
Title: nano65 by @lynx1076 | Stardance
Devlogs:
W Title: nano65 by @lynx1076 | Stardance
Devlogs:
Working on the debugger (arduBug). Basically a little tool that I’ll use to manipulate the W65C02 processor and any devices on the bus. Its working well firmware-wise so I’m working on the host to let me interact with the nano65 (the actual computer) on a more abstract level. If all goes well I’ll hook up the VIA soon and from there on all sorts of cool things will be possible. In the picture you can see the full setup (arduBug, motherboard, and storage board). The oscilloscope shows the internal clock (2.5 MHz; will likely be decreased to 2 MHz). The interesting thing is that the arduBug boots up and turns off the internal clock to overwrite it with it’s own clock source. I was now able to revert that setup from the host software via a serial command.
Well I haven’t broken the firmware (yet) but the host software is really making me go through a lot. Setting up a “simple” ui using ncurses turned out to not be that simple afterall which might be due to the fact I decided to write this whole project in C. I’ll get back to logging once I have some decent program running on the nano65 so I can show off all the cool features of the arduBug. Since I don’t have much to show for all my work right now I’m just going to flex my C sloc on all the react kiddies ; ). Anyways that’s all for today folks (well I guess that’s just you, dear mod, reading this until I get verified). I’ve got to catch up on some sleep now (-_-)zzZZz
Can’t get ncurses to work because I’d have to patch together like 5 different libraries just to get input working somewhat and you guys deserve better than me generating half of this project using ai cause I’m too dumb to figure out a 40 year old library. Stumbled upon this gem of a library (haven’t even tried it yet but the trailer so fire I had to share). Next update will hopefully be one about the hardware once I figure out this TUI-mess. notcurses https://www.youtube.com/watch?v=dcjkezf1ARY
Well I decided to fully scrap the TUI afteralll since doing that would not let me compile for Windows and Linux easily and a GUI was going to be the end goal anyways. Using raylib and microui and it’s looking good (so far). https://www.raylib.com/ https://github.com/rxi/microui
THE HOST APP WORKS It’s now possible to step through a 6502 program using the debugger software instead of manually sending commands via serial. The GUI doesn’t look as good as I’d like it to but that’s a bridge I’ll burn when I get to it. For now the CPU can be reset with the hardware reset button and the stp (step [count]) command allows stepping through individual clock cycles. This will soon be changed to step through individual instructions instead to allow easier debugging but I’ll leave the direct clock manipulation in just in case. The screenshot clearly shows the W65C02S processor stepping through it’s reset cycle (the pseudo-reads were omitted since they are meaningless). The oscilloscope shows the external clock doing the 7 cycles until the reading of 0xFFFC is reached (bus is sampled on high clock so the positive edges count as clock ticks). Woah you read all that? Thx <3 From here on out it’s just a matter of implementing the rest of the commands on the host’s side and then doing some cool projects.
“The debugger is very confusing. It exists, but it’s very confusing. I don’t understand my debugger. It’s a low-level debugger and if you’re not familiar with a low-level debugger you don’t know what you’re talking about.” Terry A. Davis
UI starting to look good and memory interaction is working splendidly I also decided to finally change the font so we don’t all get eye cancer. Next is just going to be some QOL features like the panel on the left I haven’t really used. Probably going to put some status info there like if a vector is being pulled and the current clock state. Also going to implement writing a whole binary file to the nano65’s memory and dumping the memory. Once that’s all done I’ll treat myself to actually doing some projects with the nano65 to see if any other features might be nice.
Memory manipulation while processor is running!!! The memory can now be safely written to WHILE THE CPU IS RUNNING INSTRUCTIONS AT THE SAME ADDRESS! After adding a pull-up to the RWB pin (low means write so I’d have to assert the clock low before turning off the CPU) the SRAM and EEPROM can be written to/read from arbitrarily while the CPU is paused and all registers are preserved. Spot a bug while stepping through your code? Change the byte immediately before the CPU even sees it.
Tried running the nano65 at 2.5 MHz aaaannddd… IT WORKS PERFECTLY!!! I just ran a simple program that reads a byte from SRAM, adds 1 and then writes it back. This program loops infinitely so I could see if the CPU would go haywire and it actually didn’t. This means more intense programs like video games (oooh spoilers) could theoretically already run.
Just doing a quick post since I am racking up some time. Haven’t been working a lot on the software as I’ve been really busy recently. Anyways the command to dump the entire memory is almost done. Right now I am just making it print some specific known bytes from the dump.
Memory dumps now implemented. It’s a bit sketchy but you know… “Nothing more permanent than a temporary fix” It’s a bit slow all in all but I already increased the baudrate to 500k and I feel if I go any higher it’ll probably die like a hamster in a microwave.
Finally got flashing to work. The speed is absolutely abysmal (~30s for dumping and flashing) but it works and since single bytes can be quickly edited without re-flashing everything I don’t mind
We ballin’! Last time I caught some heat for not using a project related pic so here are some exciting pictures of my messy desk and horrible wiring. I am excited to announce that flashing and dumping the memory is now a somewhat survivable experience even though its kind of slow. Right now Im just looking to hook up a PS2 keyboard so we can get some interactive stuff going but its lookin good. I had loads of issues with the wiring and since I was doing an internship up until friday I havent had much time but Im free now so expect more frequent updates more monke (lookin at you @fsh ) and more fanatic rambling about a processor nobody cares about (I LOVE ASSEMBLY)
Quick status update Im racking up hours too quickly so heres a quick update on what Im doing: Built hardware to support PS2 keyboard Switched LCD to 4-bit mode Started to work on interpreting keyboard signals Some of you might recognize the circuitry from Ben Eater’s video series. If you’re looking to implement this in your own project make sure to add some series resistors for the 74HC14 outputs as they may ring heavily distorting your interrupts.
American layout… But hey ITS WORKING Next Stop: Wozmon on the nano65
Yall. Its wozzing time Running wozmon on a diy computer that I alone developed, debugged and produced is really something else. I dont know how much this applies to you guys but I think its time we all took a step back as junior devs and consider the stuff weve built. Im really amazed as to what we are all capable of when we put our minds to it. A few months ago I was a teen with a stupid idea, in way over my head. Now Im running 50 years old software on my very own machine, just as the computer gods intended. Ive certainly got quite a journey ahead of me but Im excited to see whats coming my way. Happy hacking yall
Big things in the happening yall! The LCD just seemed oh so limiting so I decided to switch to a 64x64 LCD panel. Obviously the 6502 is nowhere near fast enough to control the display AND calculate stuff to put there so I’m using a tang nano 20k as a sort of GPU. It kind of feels like a waste though, using a device that could emulate a faster processor and drive the display at the same time so I might switch to a hardware implementation in the future. For now though this will suffice as I care more about the calculations I want to plot onto the display. (Ohoh what ever might he do with an array of pixels that can be arbitrarily colored and turned on/off )...
|
1792489718.2798085
|
1793094518.2798085
|
|
449
|
MYLO by @Mihai | Stardance
|
Mihai
|
1
|
62.0
|
994
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T19:58:57Z", "hours": 62.0, "multiplier": 16.0, "payout": 994, "blessing": "neutral", "text": "MYLO is a portable integrated neural network development IDE. Currently, building neural networks for your projects is a hassle, you have to write code, change apps for different tools and they are resource hungry. MYLO is here to change that! MYLO is split between 3 components, all with a different purpose: The Web interface It handles the entire user experience, it’s made to be lightweight, as no actual ML processing is happening on it, thus making it easy to host and usable on many low end devices. Its made using Next.js, and its the gateway to using the powerful tools MYLO provides, tools like: Visual neural network editor, just like any other visual editor, inspired by unreal engine blueprints, you right click to add new nodes and connect them in order to build your own neural network. Model Optimization, it uses a custom Neural-Genetic algorithm that applies mutations to the model, retrains it and then, the better performing models get their attributes passed on to the next generation and so on… Model diagnosis, can either be run using a dummy input or have your model retrained on the dataset itself for better info Dataset analasys tools, to see data distribution and outliers, together with per column information and encoding suggestions Neural network visualization, with in depth info about each node Ai assistant with a BYOK system, that can use tool calling to actually modify the model itself Customizable interface, with window system similar to visual studio code Model catalog where people can upload and share their models/projects Agent connection system, that allows you to use agents running in your local network/machine Now while these are the enabled and visible tools, also implemented are cloud tools that are currently disabled because it’s costly to host them: An agent orchestrator that using docker spins up agent instances on demand and routes them to your app Cloud storage system for projects and models Behind the scenes there is a lot more going on, there is a full documentation document linked in the repo readMe, which I encourage you to read, even tho its in romanian, you can easily translate it. The only thing is it that it doesn’t include more info about the BYOK system and security updates that where made after the documentation was written. The processing Agent It handles all of the ML processing Because of the way it’s implemented, it allows it to run on dedicated machines while the interface just connects to it It features the implementation of the descriptor system, a way to represent models while allowing them to be easily editable, while also having transferable weights and parameters. It sits at the base of the entire editor and optimization system. all of the features mentioned in the interface are run on the agent itself and not on the interface. For a more in depth analasys consult the documentation Orchestrator It handles the creation and destruction of the cloud instances, using a custom docker image and container handling, nothing fancy The biggest challenge… was the descriptor system, as an app made only by me and my friend, it was very hard to implement a robust system, and for the moment it’s quite unfeasable to extend the system further, as currently for each high level node its necessary to create connection templates manually, so thats why the node selection is currently smaller. Also it has to be easily compiled and almost ready for runtime while still being maleable enough for editing. Thankfully all of these hard systems I was able to build with help of a friend who is much more informed when it comes to AI. For any issues please write on my email ( [email protected] ) or on slack (altough im not so active)", "repo": "https://github.com/M-Y-L-O/docs/", "demo": "https://mylo-web-deployument.vercel.app/"}]...
|
[{"post_id": 40847, "ts": "202 [{"post_id": 40847, "ts": "2026-08-04T17:08:31Z", "hours": 3.2742, "text": "The app is now in a state ready for shipment, small UI tweaks and the possibility to easily enable and disable cloud features has been added. I borrowed an powerful AI agent from a friend to run a security audit on my website and also used it to fix them, as to assure the app is secure."}, {"post_id": 39967, "ts": "2026-08-03T09:36:09Z", "hours": 2.4158, "text": "In order to prepare my app for the ship, I decided to add some documentation and instructions about how to use the app, so there is now a docs page. Also necessary for the ship and publication, I made a Bring Your Own Key system for the AI Assistant, this way I don’t have to maintain and risk any of my own API keys. The keys are encrypted and stored in a Database, and once in said database, they only ever reach the Next.js server, no browser. The last few things I have to do for the ship are the following: -Make it easy to enable/disable cloud features (For the initial ship there will be no cloud features as I can’t pay for any uptime) -Consistent styling for the entire UI, fix any UI quirks I find, and/or redesign sections of the app. -Compile and make a release version of the desktop agent."}, {"post_id": 38340, "ts": "2026-07-31T17:52:37Z", "hours": 4.9881, "text": "I’ve made some polishing and steps towards the ship, that I want to make it happen this week. There have been a lot of bugs fixes and the addition of a new tool: The model diagnostic and retrain tool, which as it says, it helps you get metrics about a model on a specific dataset or, using a dummy input, get characteristics about the model itself. Besides that I got started on a landing page and added some flare to the login page."}, {"post_id": 34688, "ts": "2026-07-25T16:43:00Z", "hours": 2.0772, "text": "AI agent guyz!!! It uses gemini and I gave it some tools to edit and understand the model. I also added a markdown visualiser to have nice and pretty outputs from the model. It wasnt hard to implement and it’s a great addition to the app I feel."}, {"post_id": 34579, "ts": "2026-07-25T13:01:01Z", "hours": 3.2614, "text": "I’ve added cloud project saving and a project catalog! You can publish your projects/models for other to see, train and use in their own projects. It uses a simple s3 bucket for storage and handling the models, nothing too complex. The catalog has some filters and search function."}, {"post_id": 33014, "ts": "2026-07-22T15:52:39Z", "hours": 2.6136, "text": "I have added what I call an orchestrator system, you can now create a new client instance in the cloud, that can then be used for processing and editing your models, this comes as an automatic substitution to hosting your own local client. From the home page you can now click on the add new configuration button and choose the cloud option and a automatic connection will be established. The system uses docker to spin up and manage the instances, there is a service for cleanup and deleting orphan containers. The orchestrator itself doesn’t act like a proxy, all of the request go directly between the next.js server of the interface and instance."}, {"post_id": 31864, "ts": "2026-07-20T16:25:17Z", "hours": 3.5153, "text": "Okk, so there are now more tools to help you analyse your datasets, that includes charts, data quality, correlation and target analysys. Another change is to the optimization, more specifically to the optimization results. You can now clearly see what changes where made to the model, and what mutations the network suffered over time."}, {"post_id": 29086, "ts": "2026-07-15T18:59:26Z", "hours": 5.1808, "text": "What is there more to say, than the fact that there is now a working visual editor for creating your own neural networks!!!! It’s literally unreal engine blueprints but for NN’s, there is a library of nodes, from which you can choose to add, and then you connect those using handles. There is still some stuff to iron out, but this is looking good!"}, {"post_id": 26744, "ts": "2026-07-11T18:27:15Z", "hours": 4.4428, "text": "Ok you guys, we have working neural network optimization! For the moment there is only the option to optimize using a neuroevulution algorithm, but more will come in the future. You can select the input features, target one, change some settings, lay back and get back an optimized version of your neural network. This happens using pytorch models, i’m kind of moving away from .onnx, as they represent an “imovable” final version of a model to say so, and using the descriptor model me and my friend made will allow us to make visually editing models easier. Now, optimizing spits out both a .pt2 and a .onnx file, as the onnx file is directly usable. These changes required some modifications to the .mylo project file structure, but it’s not hard to add new stuff to it. Next, I will have to polish the UI, add some more animations and also handle the posibility to upload both a .pt2 for working and a .onnx for visualisation only in the same project. Besides that I also want to make like a “git” where people will be able to publish their models and stuff for you to use. I have plenty planned, i really like how this project is coming along."}, {"post_id": 24148, "ts": "2026-07-07T15:04:08Z", "hours": 2.2681, "text": "I got a friend that is more talented in working with AI to help me with this project, together, we developed a optimization tool. It’s currently not implemented in the UI, but it follows. Optimization is a huge step in the development of this app, as it incorporates, building new models, training and testing them all in one flow, so by getting this working we opened the doors to training and infering tools for the models you build using MYLO. Also, for this, my friend made a way to describe models in a json format, with the weights held in a seperate files, then, on runtime when needed, using the json, a new pytorch model will be built and the weights loaded, having it ready for any operations needed. I had also been working a lot on design in figma and from my friends computer, so sadly I am only able to count up 2 hours of work for something close to 10. Anyways, hopefully, next devlog ill have a working optimization window to show."}, {"post_id": 15694, "ts": "2026-06-25T14:50:36Z", "hours": 3.1078, "text": "Ok, we got dataset analysis tools! These first tools include a simple table viewer and a check for one-hot encoding, as in certain types of data it can cause excessive memory usage. Next I want to add graphs for data distribution, missing values, etc."}, {"post_id": 14464, "ts": "2026-06-23T16:26:14Z", "hours": 3.0642, "text": "I’ve worked on polishing what I got until now. I remade the home page to be more clean and to help you understand better what’s going on and what you have to do, basically some UX work. In the attached screenshot is the final version of the home page for now, implemented and fully reactive to the possible states."}, {"post_id": 13625, "ts": "2026-06-22T10:51:16Z", "hours": 3.5586, "text": "I got working project files. While there are still some edge cases to iron out, you can save and load projects into the interface. There is also a system, in case the connection between the client and the interface fails, the data won’t be lost, as there is a copy of the entire project stored on the client, so when the connection is reinstated all of the data can be retrieved. This project appears on a dedicated card when in the interface. Here is a small demo of the app:"}, {"post_id": 13072, "ts": "2026-06-21T11:46:57Z", "hours": 4.6014, "text": "I have spent this time integrating authentication into the app and making a small home page from which to manage client connections and projects. There has also been a structural change. Until now when loading a file into the client, on request, the client would open a file picker window using tkinter, but this caused a lot of bugs, as tkinter has to run on the main thread, and in general, blocking the entire server until you picked a file was not good, so instead I made it work more traditionally, by having a file picker open on the web interface and uploading a file there before sending it to the client, and its really much better, the client server isn’t stuck waiting for you to pick a file and also it allows for the client to be on another machine, like a powerful server and you just sending the relevant model files to it. It was still a slow crawl, I had to chew trough a lot of bugs with the authentication, as I implemented a middleware protection system, that blocks any requests that come from an unauthorized user, both for the client and webInterface, making the app fiarly secure, atleast by my standards. Now that I have client connections done with a nice UI to add new clients and stuff, I will occupy myself with loading, exporting and managing project files."}, {"post_id": 11793, "ts": "2026-06-19T05:59:06Z", "hours": 3.5428, "text": "Ok, so I started integrating the authentication into the app, this meant that now I had to make a way to tie projects and sessions to the user. To do this, I created my own project file, which is basically a disguised .zip file. When you save the project, it bundles all the necessary files into the zip, making it easy to send projects but also “tying” a project to a user is now very simple. Besides that, i began working on the Client system, basically, in the app, you will be able to have multiple clients/workers. Some may be in the local network, right on your device or there will be the option to rent out a server and use that for creating and training your neural networks. Now that there can be multiple clients, that means that can be many more errors, so I also decided to add a notification system. It was made using sonner."}, {"post_id": 9373, "ts": "2026-06-15T18:28:29Z", "hours": 4.8778, "text": "This devlog I bring you: - Authentication , made with Auth.js, it has the options to log in using github and google. For now its just the code itself for logging in, retrieving user data and checking if the user is logged in, but it doesnt serve any function. - Properties panel , now you have the option to open the properties panel. When clicking on a node it shows info about that node, like the inputs, outputs and any attributes it has. - Data processing , for now only in the API, the panel is coming too! It takes a csv file and checks it’s compatibility with One-Shot encoding, and other basic information about the data, like missing values, encoding size, etc."}, {"post_id": 7588, "ts": "2026-06-12T18:08:09Z", "hours": 4.0706, "text": "Sooo, I have been pretty efficient. We got the basic UI layout done, with the windows and tabs and everything, which have been customized. We also have a logo (sadly I couldn’t log the time working on it) and most importantly we have the first tool! The visualization tool! (now I realized I’ve misspelled visualize in the app) Which also means I got the communication between the web interface and api working. For now the visualization only works with ONNX files, but I hope to get this expanded to other formats like pytorch files. The tool works this way. You “point” to the file on your computer, the client on your laptop processes it and generates a list of edges and nodes, where each node carries specific information about itself. Then in the UI I post-process them a bit, as the names are pretty ugly like “/lstm/LSTM|/” and I just trim it. Then based on the category of node, I color it a specific color. The constant nodes are removed for clarity (although I will add a way to re-enable them). Then using ELKjs I order the nodes and then display them using react-flow. I really like how it all turned out. Some other notable things are about the meubar, it’s very easy to add buttons, and for those buttons to have nested ones, its just basically a JSON, where each button has a label, an onClick function and children. All of this setup will help me in the future. This is all for now."}, {"post_id": 6388, "ts": "2026-06-10T19:02:42Z", "hours": 1.2836, "text": "I’ve started with the scaffolding of this project. I want the UI to be IDE like, so I created a window management system using Dockview. I also made a Client class. The idea is for there to be two ways to process your neural networks, either locally or in the cloud, thus I made this client class that should make it very easy to switch between the two on the Frontend side. In the client itself, where all the processing happens, I made a very basic fastapi server and some endpoints for testing, as well as laid the brickwork to “load” local files into the client, without having them uploaded to the Website UI and then sent over to the MYLO client on the PC, basically creating a duplicate just to read from it. It works by instead of opening a file dialog in the browser, opening one from the python client installed on the computer, thus allowing me to access information such as the absolute file path, which would otherwise not be possible trough the webinterface."}]...
|
Title: MYLO by @Mihai | Stardance
Devlogs:
I’ve s Title: MYLO by @Mihai | Stardance
Devlogs:
I’ve started with the scaffolding of this project. I want the UI to be IDE like, so I created a window management system using Dockview. I also made a Client class. The idea is for there to be two ways to process your neural networks, either locally or in the cloud, thus I made this client class that should make it very easy to switch between the two on the Frontend side. In the client itself, where all the processing happens, I made a very basic fastapi server and some endpoints for testing, as well as laid the brickwork to “load” local files into the client, without having them uploaded to the Website UI and then sent over to the MYLO client on the PC, basically creating a duplicate just to read from it. It works by instead of opening a file dialog in the browser, opening one from the python client installed on the computer, thus allowing me to access information such as the absolute file path, which would otherwise not be possible trough the webinterface.
Sooo, I have been pretty efficient. We got the basic UI layout done, with the windows and tabs and everything, which have been customized. We also have a logo (sadly I couldn’t log the time working on it) and most importantly we have the first tool! The visualization tool! (now I realized I’ve misspelled visualize in the app) Which also means I got the communication between the web interface and api working. For now the visualization only works with ONNX files, but I hope to get this expanded to other formats like pytorch files. The tool works this way. You “point” to the file on your computer, the client on your laptop processes it and generates a list of edges and nodes, where each node carries specific information about itself. Then in the UI I post-process them a bit, as the names are pretty ugly like “/lstm/LSTM|/” and I just trim it. Then based on the category of node, I color it a specific color. The constant nodes are removed for clarity (although I will add a way to re-enable them). Then using ELKjs I order the nodes and then display them using react-flow. I really like how it all turned out. Some other notable things are about the meubar, it’s very easy to add buttons, and for those buttons to have nested ones, its just basically a JSON, where each button has a label, an onClick function and children. All of this setup will help me in the future. This is all for now.
This devlog I bring you: - Authentication , made with Auth.js, it has the options to log in using github and google. For now its just the code itself for logging in, retrieving user data and checking if the user is logged in, but it doesnt serve any function. - Properties panel , now you have the option to open the properties panel. When clicking on a node it shows info about that node, like the inputs, outputs and any attributes it has. - Data processing , for now only in the API, the panel is coming too! It takes a csv file and checks it’s compatibility with One-Shot encoding, and other basic information about the data, like missing values, encoding size, etc.
Ok, so I started integrating the authentication into the app, this meant that now I had to make a way to tie projects and sessions to the user. To do this, I created my own project file, which is basically a disguised .zip file. When you save the project, it bundles all the necessary files into the zip, making it easy to send projects but also “tying” a project to a user is now very simple. Besides that, i began working on the Client system, basically, in the app, you will be able to have multiple clients/workers. Some may be in the local network, right on your device or there will be the option to rent out a server and use that for creating and training your neural networks. Now that there can be multiple clients, that means that can be many more errors, so I also decided to add a notification system. It was made using sonner.
I have spent this time integrating authentication into the app and making a small home page from which to manage client connections and projects. There has also been a structural change. Until now when loading a file into the client, on request, the client would open a file picker window using tkinter, but this caused a lot of bugs, as tkinter has to run on the main thread, and in general, blocking the entire server until you picked a file was not good, so instead I made it work more traditionally, by having a file picker open on the web interface and uploading a file there before sending it to the client, and its really much better, the client server isn’t stuck waiting for you to pick a file and also it allows for the client to be on another machine, like a powerful server and you just sending the relevant model files to it. It was still a slow crawl, I had to chew trough a lot of bugs with the authentication, as I implemented a middleware protection system, that blocks any requests that come from an unauthorized user, both for the client and webInterface, making the app fiarly secure, atleast by my standards. Now that I have client connections done with a nice UI to add new clients and stuff, I will occupy myself with loading, exporting and managing project files.
I got working project files. While there are still some edge cases to iron out, you can save and load projects into the interface. There is also a system, in case the connection between the client and the interface fails, the data won’t be lost, as there is a copy of the entire project stored on the client, so when the connection is reinstated all of the data can be retrieved. This project appears on a dedicated card when in the interface. Here is a small demo of the app:
I’ve worked on polishing what I got until now. I remade the home page to be more clean and to help you understand better what’s going on and what you have to do, basically some UX work. In the attached screenshot is the final version of the home page for now, implemented and fully reactive to the possible states.
Ok, we got dataset analysis tools! These first tools include a simple table viewer and a check for one-hot encoding, as in certain types of data it can cause excessive memory usage. Next I want to add graphs for data distribution, missing values, etc.
I got a friend that is more talented in working with AI to help me with this project, together, we developed a optimization tool. It’s currently not implemented in the UI, but it follows. Optimization is a huge step in the development of this app, as it incorporates, building new models, training and testing them all in one flow, so by getting this working we opened the doors to training and infering tools for the models you build using MYLO. Also, for this, my friend made a way to describe models in a json format, with the weights held in a seperate files, then, on runtime when needed, using the json, a new pytorch model will be built and the weights loaded, having it ready for any operations needed. I had also been working a lot on design in figma and from my friends computer, so sadly I am only able to count up 2 hours of work for something close to 10. Anyways, hopefully, next devlog ill have a working optimization window to show.
Ok you guys, we have working neural network optimization! For the moment there is only the option to optimize using a neuroevulution algorithm, but more will come in the future. You can select the input features, target one, change some settings, lay back and get back an optimized version of your neural network. This happens using pytorch models, i’m kind of moving away from .onnx, as they represent an “imovable” final version of a model to say so, and using the descriptor model me and my friend made will allow us to make visually editing models easier. Now, optimizing spits out both a .pt2 and a .onnx file, as the onnx file is directly usable. These changes required some modifications to the .mylo project file structure, but it’s not hard to add new stuff to it. Next, I will have to polish the UI, add some more animations and also handle the posibility to upload both a .pt2 for working and a .onnx for visualisation only in the same project. Besides that I also want to make like a “git” where people will be able to publish their models and stuff for you to use. I have plenty planned, i really like how this project is coming along.
What is there more to say, than the fact that there is now a working visual editor for creating your own neural networks!!!! It’s literally unreal engine blueprints but for NN’s, there is a library of nodes, from which you can choose to add, and then you connect those using handles. There is still some stuff to iron out, but this is looking good!
Okk, so there are now more tools to help you analyse your datasets, that includes charts, data quality, correlation and target analysys. Another change is to the optimization, more specifically to the optimization results. You can now clearly see what changes where made to the model, and what mutations the network suffered over time.
I have added what I call an orchestrator system, you can now create a new client instance in the cloud, that can then be used for processing and editing your models, this comes as an automatic substitution to hosting your own local client. From the home page you can now click on the add new configuration button and choose the cloud option and a automatic connection will be established. The system uses docker to spin up and manage the instances, there is a service for cleanup and deleting orphan containers. The orchestrator itself doesn’t act like a proxy, all of the request go directly between the next.js server of the interface and instance.
I’ve added cloud project saving and a project catalog! You can publish your projects/models for other to see, train and use in their own projects. It uses a simple s3 bucket for storage and handling the models, nothing too complex. The catalog has some filters and search function.
AI agent guyz!!! It uses gemini and I gave it some tools to edit and understand the model. I also added a markdown visualiser to have nice and pretty outputs from the model. It wasnt hard to implement and it’s a great addition to the app I feel.
I’ve made some polishing and steps towards the ship, that I want to make it happen this week. There have been a lot of bugs fixes and the addition of a new tool: The model diagnostic and retrain tool, which as it says, it helps you get metrics about a model on a specific dataset or, using a dummy input, get characteristics about the model itself. Besides that I got started on a landing page and added some flare to the login page.
In order to prepare my app for the ship, I decided to add some documentation and instructions about how to use the app, so there is now a docs page. Also necessary for the ship and publication, I made a Bring Your Own Key system for the AI Assistant, this way I don’t have to maintain and risk any of my own API keys. The keys are encrypted and stored in a Database, and once in said database, they only ever reach the Next.js server, no browser. The last few things I have to do for the ship are the following: -Make it easy to enable/disable cloud features (For the initial ship there will be no cloud features as I can’t pay for any uptime) -Consistent styling for the entire UI, fix any UI quirks I find, and/or redesign sections of the app. -Compile and make a release version of the desktop agent.
The app is now in a state ready for shipment, small UI tweaks and the possibility to easily enable and disable cloud features has been added. I borrowed an powerful AI agent from a friend to run a security audit on my website and also used it to fix them, as to assure the app is secure.
Ships:
MYLO is a portable integrated neural network development IDE. Currently, building neural networks for your projects is a hassle, you have to write code, change apps for different tools and they are resource hungry. MYLO is here to change that! MYLO is split between 3 components, all with a different purpose: The Web interface It handles the entire user experience, it’s made to be lightweight, as no actual ML processing is happening on it, thus making it easy to host and usable on many low end devices. Its made using Next.js, and its the gateway to using the powerful tools MYLO provides, tools like: Visual neural network editor, just like any other visual editor, inspired by unreal engine blueprints, you right click to add new nodes and connect them in order to build your own neural network. Model Optimization, it uses a custom Neural-Genetic algorithm that applies mutations to the model, retrains it and then, the better performing models get their attributes passed on to the next generation and so on… Model diagnosis, can either be run using a dummy input or have your model retrained on the dataset itself for better info Dataset analasys tools, to see data distribution and outliers, together with per column information and encoding suggestions Neural network visualization, with in depth info about each node Ai assistant with a BYOK system, that can use tool calling to actually modify the model itself Customizable interface, with window system similar to visual studio code Model catalog where people can upload and share their models/projects Agent connection system, that allows you to use agents running in your local network/machine Now while these are the enabled and visible tools, also implemented are cloud tools that are currently disabled because it’s costly to host them: An agent orchestrator that using docker spins up agent instances on demand and routes them to your app Cloud storage system for projects and models Behind the scenes there is a lot more going on, there is a full documentation document linked in the repo readMe, which I encourage you to read, even tho its in romanian, you can easily translate it. The only thing is it that it doesn’t include more info about the BYOK system and security updates that where made after the documentation was written. The processing Agent It handles all of the ML processing Because of the way it’s implemented, it allows it to run on dedicated machines while the interface just connects to it It features the implementation of the descriptor system, a way to represent models while allowing them to be easily editable, while also having transferable weights and parameters. It sits at the base of the entire editor and optimization system. all of the features mentioned in the interface are run on the agent itself and not on the interface. For a more in depth analasys consult the documentation Orchestrator It handles the creation and destruction of the cloud instances, using a custom docker image and container handling, nothing fancy The biggest challenge… was the descriptor system, as an app made only by me and my friend, it was very hard to implement a robust system, and for the moment it’s quite unfeasable to extend the system further, as currently for each high level node its necessary to create connection templates manually, so thats why the node selection is currently smaller. Also it has to be easily compiled and almost ready for runtime while still being maleable enough for editing. Thankfully all of these hard systems I was able to build with help of a friend who is much more informed when it comes to AI. For any issues please write on my email ( [email protected] ) or on slack (altough im not so active)...
|
1793065953.257202
|
1793152353.257202
|
|
5668
|
NoteHop by @adobhi | Stardance
|
adobhi
|
1
|
62.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T00:57:58Z", "hours": 62.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’m aiming to build an app that makes music education free and fun for everyone! This summer was my first time EVER looking at SwiftUI and Xcode, the platform I used to code this app, as well as my first time actually working with GitHub, so I was learning how to code and make sure that code stayed safe every step of the way. For every code file I wrote, there are a hundred YouTube videos and Google Searches to thank right now. I’m proud that despite every debug session that took hours to resolve and through every error message that made me never want to open my project again, I made an effort to come back and learn from each mistake and to prove that with a determination, the sky’s the limit. The only issue right now is to test the project, I’ll need $99 for an Apple Developer Program account to be able to give you guys a usable link, so for now its sadly just a one-minute demo, but if I’m ever less broke, I’ll update it so everyone can see how amazing learning music for yourself can be. I hope you enjoy!", "repo": "https://github.com/adobhi/noteHop", "demo": "https://www.youtube.com/watch?v=KWcRyOvhUOo&feature=youtu.be"}]...
|
[{"post_id": 40469, "ts": "202 [{"post_id": 40469, "ts": "2026-08-04T00:49:12Z", "hours": 1.5922, "text": "Note Hop - Devlog 12 Guys I lied I didn’t ship last time like I said I would… BUT for good reason: After spending hours and hours on Stardance’s resource pages + Google, I realized that, despite what I was lead to believe, I had to get an Apple Developer’s Account for a hundred bucks just to generate a demo link that you all would use to try (guys I’m broke this project is on a budget). My Mac outright letting me refuse to try option two, which would be sideloading my app into another software which y’all would have to use to download my app… Recording a demo video. WRITING THIS ENTIRE DEVLOG WITH SO MUCH DETAIL JUST FOR IT TO GET WIPED OFF THE FACE OF THE PLANET BECAUSE I ATTACHED THE DEMO VIDEO HERE (the attachment was too large…) Rewriting the devlog (with less detail about the pain and suffering I went through sorry guys.) Anyway it has taken blood sweat and tears, and I’m sorry but I can’t attach the demo video 😢 BUT it is now in the project deets if you guys wanna check it out, but now I am ready for my Ship to set sail (I’m so funny 😁)!"}, {"post_id": 39696, "ts": "2026-08-02T20:39:00Z", "hours": 8.9247, "text": "Note Hop - Devlog 11 Today will be my first ship!!! This session was mainly just rewriting and organizing code and to take more user data to give my app some level of personalization before the ship, so now users can sign up, login, log out, and add courses that they like into their dashboard to practice their first lessons 🩷 !!!"}, {"post_id": 36555, "ts": "2026-07-28T19:03:15Z", "hours": 8.9889, "text": "Note Hop - Devlog 10 Finally double digits for my devlogs!!! I’ve been on a pretty locked in stint and started somewhat tracking user data via Firebase and a hundred YouTube tutorials! Everything was going well enough (which should have warned me), so imagine my surprise when I see this in my email 🙃. I Google Lensed it and it told me I was going to see hackers in my sleep if I didn’t fix it IMMEDIATELY so it took literal hours of working through git commands, more terminal prompts, compromised .plist files and API keys, just to eventually realize that all I needed to do was edit the access controls of the API keys and then mark the warning as a false positive in GitHub 🥀. 💻 Then came the second issue of the day! In the process of fixing the first problem, I guess I created an extra branch in my project, which meant all my changes weren’t saved across the main branch I was working in, as well as the edits that I made when I deleted my .plist file (which was holding some settings for my custom font, so my code was looking like the picture below and I was genuinely crashing out). I fixed it by adding a property in my fresh plist file and deleting the new branch I created, so everything remained the way I left it! 💻 After those hardships things got somewhat easier. I worked on the Login and Register pages for my code so now hopefully people can actually interact with my app instead of wistfully longing for a place to save their work! 💻 ALSO this is kinda new, but I’m realizing that I’m running out of ideas that I wanna implement in my app (I know I know there are a lot of lessons to create and sheet music to link) BUT if you guys have an ideas or things you’d like to see be added please let me know! Thank you! 🩷"}, {"post_id": 34985, "ts": "2026-07-26T03:59:10Z", "hours": 5.9297, "text": "Note Hop - Devlog 09 The barebones of this app are (somewhat?) coming together 🎉! Today was more focused on using my individual question banks and creating cohesive pages that connect those question banks into scrollable pages for each instrument. For the coding geeks (my people!), the one of the biggest struggles was trying to get the data structures right, especially when iterating with Lists and ForEach loops. Also WHY did no one warn me how hard organizing all my structs and variables and instances would be 😭 Actual footage of me trying to figure out where half of my code was."}, {"post_id": 34402, "ts": "2026-07-25T02:47:14Z", "hours": 7.6261, "text": "Note Hop - Devlog 08 This lock in was dedicated to actually code the purpose behind this app… AKA actually learning music 🙃 Just some of the things I’ve done so far! Created a question bank of question banks! Spent hours scouring for sound files for each note (didn’t get tracked by the way 🥀) . Writing and rewriting the interface code (no one told me it was this hard to make it look modern I still hate it 💀). Understand why the code to link an image to a note sound wouldn’t WORK (AHHH). Realizing the error was in a test call from a completely different file… Anyways blood sweat and tears were shed to build a struct that takes a question bank as a parameter and returns a UI that you can iterate questions through 😁 Me for 7 hours and 35 minutes 🥀."}, {"post_id": 30862, "ts": "2026-07-18T20:14:44Z", "hours": 10.065, "text": "Note Hop - Devlog 07 I finally made headway on the actual course pages and worked on updating the buttons in the homepage that were pretty but dysfunctional. What took a really really really big amount of time was trying to get my buttons to work, which required switching to a navigationLink() instead of Button() code, and making sure that the page that opened when clicking the button would have the corresponding sticky banner, which, for the longest time, refused to update on each webpage :( Just some of the frustrating scenes I’ve seen and now know how to avoid 🙃"}, {"post_id": 26542, "ts": "2026-07-11T12:48:28Z", "hours": 5.9269, "text": "Note Hop - Devlog 06 This lock in period was all about the music library 😁!!! The first real issue was finding actual, downloadable sheet music, which legitimately took HOURS that weren’t even tracked because it wasn’t on Xcode 😔, but after hours of blood, sweat, and tears, I was able to find a bunch of sheet music pdfs that were perfect for my cause! Then, was figuring out how to actually code the library… being a complete newbie in SwiftUI, it took hours of YouTube tutorials, thousands of google searches, and the trusted Rubber Duck method to work out every detail and push through every challenge, which include and are not limited to: Organizing the sheet music files within my Navigator Area (and accidentally deleting them at one point 😬) Having no way to title the top of my NavigationStack. Figuring out how to find the right amount of padding to make sure none of my titles were obscured. Creating new structs in previous files to handle my excessive catalogue of songs. Making sure all of my functions were calling each other in the right order with the right parameters. Adding details to each and every song like the title, composer, instrument, and key tips. Adding and formatting a back button to return the user to the music library. After getting the basics out of the way, I had to go back in and format everything with the app’s font and colors, only to realize that I couldn’t push all of my changes because I had no branch to push them to which ended up taking me a long, long while to fix 😭."}, {"post_id": 24902, "ts": "2026-07-08T19:12:23Z", "hours": 3.3028, "text": "Note Hop - Devlog 05 Was about to start with user data code when all the little things about the homepage started nagging at me 🫠… First, I cleaned up the code by adding functions for repeating segments like formatting images. Then, I added a sticky banner with the greeting that doesn’t move when the user scrolls down. Next, I added an extra sheet music button (Golden Hour!), and then stats buttons like a fire and gem for the potential streak calendar and shop. When making the sticky banner, I wanted more shades of the same color for UI Design, so I had to added lighter shades of the button colors into my assets tab, but then I realized that in dark mode, the text color in the banner would be white against a light yellow banner 😭 So I had to go back and add a whole other color set just to say “I want black font in my banners whether its light or dark mode!”"}, {"post_id": 24266, "ts": "2026-07-07T18:38:36Z", "hours": 4.2797, "text": "Note Hop - Devlog 04 Its been a little while since I’ve worked on this 😅. I spent almost four hours first getting back into the project and figuring out what feature to add next (coder’s block I guess 😭). I decided to start small and add more of the homepage with rows for the music library and other shortcut buttons, but with all the extra features the screen was quickly getting squished and words were getting cut out, so I coded a scroll feature that lets the complete text stay on screen and all you have to do to see it is scroll. Then, I added a cutesy font so it wasn’t boring and actually fun to look at 😁!"}, {"post_id": 10968, "ts": "2026-06-17T23:52:23Z", "hours": 2.4044, "text": "Note Hop - Devlog 03 Finally began working on Note Hop’s homepage! First I generated a list of greetings and wrote code to choose a random greeting to display on the dashboard, but for some reason the canvas kept throwing an error which could only be fixed by reducing the number of items in the list of greetings. Then, I started formatting the first set of features on the homepage, which would be buttons that take you to the next lesson of the course. With this I also added color sets for aesthetic and accessibility 😁. Next step is to add more buttons make it look like an actual app!"}, {"post_id": 8678, "ts": "2026-06-14T12:39:56Z", "hours": 1.7669, "text": "Note Hop - Devlog 02 Spent over an hour starting the design on the homepage… First I designed a set of tabs to go on top of the home screen, and then tried but couldn’t commit until I realized I didn’t have my GitHub Repo under remotes 😭. After figuring out how to commit, I finally finished the set of tabs with mini pages and drafts for content within those tabs."}, {"post_id": 7251, "ts": "2026-06-12T02:54:35Z", "hours": 0.9661, "text": "Note Hop - Devlog 01 Designed first basic wireframe drafts, color schemes, and app icon sketch! Hardest part so far was choosing colors that matched the vibe I want for the app (energetic and ready-to-learn) while complementing each other. (App icon is a work in progress 😅)"}]...
|
Title: NoteHop by @adobhi | Stardance
Devlogs:
No Title: NoteHop by @adobhi | Stardance
Devlogs:
Note Hop - Devlog 01 Designed first basic wireframe drafts, color schemes, and app icon sketch! Hardest part so far was choosing colors that matched the vibe I want for the app (energetic and ready-to-learn) while complementing each other. (App icon is a work in progress 😅)
Note Hop - Devlog 02 Spent over an hour starting the design on the homepage… First I designed a set of tabs to go on top of the home screen, and then tried but couldn’t commit until I realized I didn’t have my GitHub Repo under remotes 😭. After figuring out how to commit, I finally finished the set of tabs with mini pages and drafts for content within those tabs.
Note Hop - Devlog 03 Finally began working on Note Hop’s homepage! First I generated a list of greetings and wrote code to choose a random greeting to display on the dashboard, but for some reason the canvas kept throwing an error which could only be fixed by reducing the number of items in the list of greetings. Then, I started formatting the first set of features on the homepage, which would be buttons that take you to the next lesson of the course. With this I also added color sets for aesthetic and accessibility 😁. Next step is to add more buttons make it look like an actual app!
Note Hop - Devlog 04 Its been a little while since I’ve worked on this 😅. I spent almost four hours first getting back into the project and figuring out what feature to add next (coder’s block I guess 😭). I decided to start small and add more of the homepage with rows for the music library and other shortcut buttons, but with all the extra features the screen was quickly getting squished and words were getting cut out, so I coded a scroll feature that lets the complete text stay on screen and all you have to do to see it is scroll. Then, I added a cutesy font so it wasn’t boring and actually fun to look at 😁!
Note Hop - Devlog 05 Was about to start with user data code when all the little things about the homepage started nagging at me 🫠… First, I cleaned up the code by adding functions for repeating segments like formatting images. Then, I added a sticky banner with the greeting that doesn’t move when the user scrolls down. Next, I added an extra sheet music button (Golden Hour!), and then stats buttons like a fire and gem for the potential streak calendar and shop. When making the sticky banner, I wanted more shades of the same color for UI Design, so I had to added lighter shades of the button colors into my assets tab, but then I realized that in dark mode, the text color in the banner would be white against a light yellow banner 😭 So I had to go back and add a whole other color set just to say “I want black font in my banners whether its light or dark mode!”
Note Hop - Devlog 06 This lock in period was all about the music library 😁!!! The first real issue was finding actual, downloadable sheet music, which legitimately took HOURS that weren’t even tracked because it wasn’t on Xcode 😔, but after hours of blood, sweat, and tears, I was able to find a bunch of sheet music pdfs that were perfect for my cause! Then, was figuring out how to actually code the library… being a complete newbie in SwiftUI, it took hours of YouTube tutorials, thousands of google searches, and the trusted Rubber Duck method to work out every detail and push through every challenge, which include and are not limited to: Organizing the sheet music files within my Navigator Area (and accidentally deleting them at one point 😬) Having no way to title the top of my NavigationStack. Figuring out how to find the right amount of padding to make sure none of my titles were obscured. Creating new structs in previous files to handle my excessive catalogue of songs. Making sure all of my functions were calling each other in the right order with the right parameters. Adding details to each and every song like the title, composer, instrument, and key tips. Adding and formatting a back button to return the user to the music library. After getting the basics out of the way, I had to go back in and format everything with the app’s font and colors, only to realize that I couldn’t push all of my changes because I had no branch to push them to which ended up taking me a long, long while to fix 😭.
Note Hop - Devlog 07 I finally made headway on the actual course pages and worked on updating the buttons in the homepage that were pretty but dysfunctional. What took a really really really big amount of time was trying to get my buttons to work, which required switching to a navigationLink() instead of Button() code, and making sure that the page that opened when clicking the button would have the corresponding sticky banner, which, for the longest time, refused to update on each webpage :( Just some of the frustrating scenes I’ve seen and now know how to avoid 🙃
Note Hop - Devlog 08 This lock in was dedicated to actually code the purpose behind this app… AKA actually learning music 🙃 Just some of the things I’ve done so far! Created a question bank of question banks! Spent hours scouring for sound files for each note (didn’t get tracked by the way 🥀) . Writing and rewriting the interface code (no one told me it was this hard to make it look modern I still hate it 💀). Understand why the code to link an image to a note sound wouldn’t WORK (AHHH). Realizing the error was in a test call from a completely different file… Anyways blood sweat and tears were shed to build a struct that takes a question bank as a parameter and returns a UI that you can iterate questions through 😁 Me for 7 hours and 35 minutes 🥀.
Note Hop - Devlog 09 The barebones of this app are (somewhat?) coming together 🎉! Today was more focused on using my individual question banks and creating cohesive pages that connect those question banks into scrollable pages for each instrument. For the coding geeks (my people!), the one of the biggest struggles was trying to get the data structures right, especially when iterating with Lists and ForEach loops. Also WHY did no one warn me how hard organizing all my structs and variables and instances would be 😭 Actual footage of me trying to figure out where half of my code was.
Note Hop - Devlog 10 Finally double digits for my devlogs!!! I’ve been on a pretty locked in stint and started somewhat tracking user data via Firebase and a hundred YouTube tutorials! Everything was going well enough (which should have warned me), so imagine my surprise when I see this in my email 🙃. I Google Lensed it and it told me I was going to see hackers in my sleep if I didn’t fix it IMMEDIATELY so it took literal hours of working through git commands, more terminal prompts, compromised .plist files and API keys, just to eventually realize that all I needed to do was edit the access controls of the API keys and then mark the warning as a false positive in GitHub 🥀. 💻 Then came the second issue of the day! In the process of fixing the first problem, I guess I created an extra branch in my project, which meant all my changes weren’t saved across the main branch I was working in, as well as the edits that I made when I deleted my .plist file (which was holding some settings for my custom font, so my code was looking like the picture below and I was genuinely crashing out). I fixed it by adding a property in my fresh plist file and deleting the new branch I created, so everything remained the way I left it! 💻 After those hardships things got somewhat easier. I worked on the Login and Register pages for my code so now hopefully people can actually interact with my app instead of wistfully longing for a place to save their work! 💻 ALSO this is kinda new, but I’m realizing that I’m running out of ideas that I wanna implement in my app (I know I know there are a lot of lessons to create and sheet music to link) BUT if you guys have an ideas or things you’d like to see be added please let me know! Thank you! 🩷
Note Hop - Devlog 11 Today will be my first ship!!! This session was mainly just rewriting and organizing code and to take more user data to give my app some level of personalization before the ship, so now users can sign up, login, log out, and add courses that they like into their dashboard to practice their first lessons 🩷 !!!
Note Hop - Devlog 12 Guys I lied I didn’t ship last time like I said I would… BUT for good reason: After spending hours and hours on Stardance’s resource pages + Google, I realized that, despite what I was lead to believe, I had to get an Apple Developer’s Account for a hundred bucks just to generate a demo link that you all would use to try (guys I’m broke this project is on a budget). My Mac outright letting me refuse to try option two, which would be sideloading my app into another software which y’all would have to use to download my app… Recording a demo video. WRITING THIS ENTIRE DEVLOG WITH SO MUCH DETAIL JUST FOR IT TO GET WIPED OFF THE FACE OF THE PLANET BECAUSE I ATTACHED THE DEMO VIDEO HERE (the attachment was too large…) Rewriting the devlog (with less detail about the pain and suffering I went through sorry guys.) Anyway it has taken blood sweat and tears, and I’m sorry but I can’t attach the demo video 😢 BUT it is now in the project deets if you guys wanna check it out, but now I am ready for my Ship to set sail (I’m so funny 😁)!
Ships:
I’m aiming to build an app that makes music education free and fun for everyone! This summer was my first time EVER looking at SwiftUI and Xcode, the platform I used to code this app, as well as my first time actually working with GitHub, so I was learning how to code and make sure that code stayed safe every step of the way. For every code file I wrote, there are a hundred YouTube videos and Google Searches to thank right now. I’m proud that despite every debug session that took hours to resolve and through every error message that made me never want to open my project again, I made an effort to come back and learn from each mistake and to prove that with a determination, the sky’s the limit. The only issue right now is to test the project, I’ll need $99 for an Apple Developer Program account to be able to give you guys a usable link, so for now its sadly just a one-minute demo, but if I’m ever less broke, I’ll update it so everyone can see how amazing learning music for yourself can be. I hope you enjoy!...
|
1792997363.9877806
|
1793083763.9877806
|
|
32708
|
RiverFlow by @ToriYukari | Stardance
|
ToriYukari
|
1
|
62.0
|
756
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T20:40:09Z", "hours": 62.0, "multiplier": 14.42, "payout": 756, "blessing": "neutral", "text": "Here I welcome you to the very first release of RiverFlow - native macOS, resource-efficient file manager intended to be an alternative for Mac developers! This is my second project in Swift and my biggest project for now. Much of the stuff used in it I figured out on the spot, sometimes minutes before my internal deadlines. The project was developed using agile methods and strict version control along with code coverage focus. It introduces crucial functionalities that any file manager should have as well as some new, small but satisfying tweaks. It uses SwiftUI and AppKit - native Apple view libraries which makes the RiverFlow look exactly like most of the system’s apps, not requiring from user learning of the new interface cause it also resembles Finder in many ways. This is a second app being a part of The Shrimple Project - as simple as possible set of QoL apps for macOS filling the gaps that Apple left which drives people crazy. Important information before testing : This app is made for MACOS and its purpose is to work on MACOS. I am not planning to port it to Windows or Linux before I finish its main phase of development so please, do not leave one star reviews because there is no Windows version. Thank you all in advance, I sure do hope RiverFlow will help in efficient file management and you will enjoy using it!", "repo": "https://github.com/Predsu/RiverFlow", "demo": "https://github.com/Predsu/RiverFlow/releases/tag/v0.1.0"}]...
|
[{"post_id": 72808, "ts": "202 [{"post_id": 72808, "ts": "2026-09-23T19:30:51Z", "hours": 10.3908, "text": "23.09 Shipping is hours away now! I must admit that I’ve been a little lazy for the last two weeks and thus the demo has not been released yet and I’m a little afraid if I will be able to get all the necessary votes before 30th Sep. I took five topics that were bothering me: go to path like url bar in windows explorer finishing basic git operations with commit modal overhauling slightly abandoned listView advanced search panel with many options settings window And yet I had so much time to figure them out I couldn’t finish more than three… well two actually. ListView overhaul went… bad. I’ll have to make it from the very beginning but I do not have time for that now. I am not very satisified that I have to ship a software that has not been brought to a state where I would originally want to release it, but I am still really happy for what have I achieved. This was my second Swift project and first that big project at all! I’ve been learning everything about native macOS programming during the development. Thus I am really proud of myself. What I’ve done goToPath modal with autocompletion based on the mechanism used in file searching (revelance tiers) git commit modal with options based on the one from vscode core of listView rework which currently serves as an entry point to every new approach I am testing to make most of functionalities from gridView work also in listView (I am never leaving such a big technical debt in any project) What I’ve learned technical debt awareness deep understanding of git CLI Difficulties Of course the already mentioned listView and more specifically: columns and their resizement, active element area (because I wanted the element to be selected only when clicked on text and the empty area acts as background), additional columns adding, sorting by column. App sandboxing which caused many problems with release version comparing to debug version which appeared to be my mistake in implementation. So I am heading back to the last checklist elements and around 11PM CEST there should appear a shipping. Oh I have to write something for a shipping message… Maybe 1AM tomorrow? I don’t know, as soon as I can so there will be time to receive and give votes. See ya then! I am so excited!"}, {"post_id": 59886, "ts": "2026-09-01T21:31:38Z", "hours": 10.2817, "text": "1.09 We are getting so close to the first demo launch! Pushed by my Git fascination I managed to integrate another two important things into the repo: CodeQL and automatic code review by CodeRabbit. However I realised I’ve been doing much more things at the repo itself and I keep forgeting I am trying to code something. So - 4 new features (and first really developer-focused) and incoming REAL readme (because the current one is really crappy). I just started my last high school year so I’ll be a little more busy but my targets still remain the same: at least 80h on stardance and first beta release until 30th September. What I’ve made Git integration with status bar, staging, discarding for directories with repos present improved navigation with folder history (go back, go forward like every normal file manager) sidebar tree view instead of Finder-like fixed bookmarks (like Windows Explorer, kinda buggy for now but actively working on it!) file collision handling with choice dialog window What I’ve learned a bit of project management (kanban, agile etc.) Git API usage in Swift handling and applying code review reports CodeQL reports analysis Difficulties I must admit that I did not write unit tests for Git integration because I kinda don’t know how to approach it. Maybe the next few days in school with my teacher will help me going through it. Apart from that I struggled with applying some responsiveness to resizable elements (such as InteractivePathView) and eventually failed and will return to this later. I promised myself that I won’t go beyond those 10h of no devlog but I failed again. My own devlog template is incoming so I will be more eager to make them more frequent. Apart from that - I am planning demo launch around 14th September so I can gather feedback before beta release around 30th September. Thank you all in advance for reading this and till next time!"}, {"post_id": 50604, "ts": "2026-08-19T20:20:46Z", "hours": 10.2542, "text": "19.08 I’ve made myself a little break, I admit. It was a good time, I came back stronger and more motivated. I’ve noticed that the project is terribly documented and tested, files orgranization was also looking bad. I decided to correct those affairs to make the further development more… amicable. There was also some time for new feature: searching. Maybe not the best but it is already better than Finder’s (modest as always, I know) because it has revelance tier sorting. Of course it is not the final version but for now It’ll work. What I’ve made extended unit tests to have code coverage level at 68% experimented with DocC documentation and found it quite usable so I’ve made documentation for plenty of structs and methods organized files into a new structure (MVVM model) tried to reduce or just identify technical debt inside the project Sounds easy right? Swift Testing framework is easy but it took me some time to learn good practics (and I’m still learning). What I’ve learned reading Develop in Swift Fundamentals, covered a lot of holes in my knowledge code review by my friend, almost 2 hours of discussion and disappointment Also I have plenty of reflections about the technical debt meant earlier. I realized that if I want to efficiently go further with the project I have to think more carefully about planning and organizing the development process. Hopefully the next school year will teach me how real programmers do the thing. That’s all in today’s Not-So-Daily. I know I say that again but maybe it’s time to try doing devlogs more frequent than 10h of work. I didn’t even realize it went that fast. Till next time!"}, {"post_id": 39560, "ts": "2026-08-02T16:28:37Z", "hours": 11.2039, "text": "02.08 I tried to write a devlog several days ago but excessive heat beat me up. To be honest last week was the hardest during the whole project. The amount of documentation and videos I’ve read and watched was enormous. My head is overload and I may be considering a little break. But let’s get to the stuff what was made. As usual the full devlog will be posted on toriyukari.neocities.org website. What I’ve made Last Stardance devlog was 21 days ago so it was basically the very beginning of the project, so I’ll just write things that are already present: fast directory loading with grid view (better functionality) and list view sidebar like that in finder (not fully functional as the finder one) toolbar with “go up” “refresh” “showhiddenfiles” “sort by” and interactive path view multi-selecting files with shift (range), drag (area) and command (specific) drag and drop files (single for now) to other apps as well as between directories inside the app right click menus on empty space and elements with the following options: open with app reveal in finder file info (opening a dedicated element info window like this in finder) copy, cut, paste elements inline rename compress to zip trash open directory in terminal/vscode create folder/file copy shell-formatted path I am currently preparing the project to move into Test Driven Development, I am trying to cover the whole existing source code with tests to go on with this coding practice. Soon I’ll start learning about UI testing in Swift Testing framework. What I’ve learned I can’t even think about how many things I’ve read about during the last 3 weeks. Maybe if I would be doing this list regularly… that is actually a good idea. But most important thing that caused me to almost destroy my repo was: DO NOT LET GITHUB COPILOT CREATE COMMITS FOR YOU. They didn’t improve anything and now I have a freaking Copilot as a contributor in the repo. Worst mistake of my life. Difficulties EVERYTHING! But seriously since I use as little AI as I can I am going through hard time during almost everything. Sometimes it drives me crazy. The biggest difficulties were: removing the freaking slopilot from contributors (failed) running my mind at full throttle to understand the crazy UI code splitting (the compiler can’t parse large elements without splitting it into separate elements) running both “drag and drop” and “drag selection” at the same time without generating errors no one have seen before setting up codecov for swift in a new way because apparently no one has thought about any different way than travis for the last 7 years writing custom EULA and source code license (it will be used for all my future project so it was worth to invest some time and money into it) And that’s all worth to mention. Storytime HEAT WAVE HEAT WAVE HEAT WAVE HEAT WAVE WHY IN POLAND IT HAS TO BE -15C OR +40C WHY IT CAN’T BE FREAKING NORMAL 20C HEEEEELP I CAN’T WORK NORMALLY!!! … i’m fine I’ll try to make devlogs more frequently but I don’t think I like doing so. I’ll have to think about some formula, maybe a simpler approach, more reusable scheme or something like that. Until that going off the air for a moment to rest. See ya!"}, {"post_id": 28603, "ts": "2026-07-14T23:04:01Z", "hours": 2.4075, "text": "Announcement Hi everyone! Little update here: I will be posting full sized devlogs for RiverFlow and any other project on my website available at this address: https://toriyukari.neocities.org/ I am an enthusiast of big, bulky devlogs where I do not only write rough code facts but I’m also sharing a whole development story and 4000 chars is not enough for me. From now on I will be making a Stardance devlog version and full devlog version. I will be attaching a link for everyone who are curious about the whole process. I hope you all understand this. Also there is a first instance of brand new idea of mine available on the website: daily where I share the status and changes of the development every day. You should check it out cause they won’t show up here. Anyways, have a great day just how I’ve had! See ya!"}, {"post_id": 27312, "ts": "2026-07-12T19:41:35Z", "hours": 17.1411, "text": "Devlog #1 Until now the project was simply a prototype to test the idea but I kind of lost track of the time and made way too much before first devlog. So here it comes: RiverFlow , native file manager alternative for MacOS, part of The Shrimple Project . Fast as river, no one can stop the flow. It uses all the best stuff Swift language has to make it more resource-efficient than Finder (at least that’s the target) and it’s currently my biggest project. It is ultimately intended to be developer-friendly and will have a lot of built-in tweaks we as programmers needed a plugin for. I also wanted it to have some Linux-feel and make it customizable in every possible way: from colors and icon sizes to custom windows and built-in plugin maker. How it actually works (I had to cut this cause of 4000 chars limit, I will post full devlogs somewhere else) How it ACTUALLY works Alright, I’ve been talking about something entirely different. So here is the flow: You run the app. First you see all the windows attacking you, begging for permissions but it’s irrevelant. The run calls loadCurrentDirectory method from FolderViewModel class. It is the heart of the app, lCD method (as I call it) is being called every time something happens (well not really automatically but I’ll get to it later). lCD creates multiple FileItem class instances. That’s your folders and files as raw data! It also sorts them by your selected method (name / size / modification date) on place. In ContentView depending on which viewType has been selected (list or grid) list/gridView is being rendered. For each FileItem it creates FileList/GridItemView, that’s a view for a single file/folder. And that’s it! If I would want to I can fit all of this in 50-100 lines of code. The real fun starts in coding user interactions with all those objects. I must admit it wasn’t the easiest challenge. The difficulties The list is long. I’ve encountered several walls on my way, some cleared up by different websites, for some I had to use AI tho. The “minor difficulties”: I’ll spare you this rant The “major difficulties”: caching thumbnails for images (and even just making them display and not eating 300 MB of RAM instantly when generating) making the full path in toolbar (the animations and proper detection) efficiently calculating folder size in Info window implementing shift and drag select (took me freaking two days to figure it out) making the SwiftUI cooperate with me and not destroy my entire GridView when adding print somewhere Features list main window listing files and folders in two views: list and grid toolbar featuring full path copying, sorting, view and hidden files options sidebar featuring most used folders resembling the one from Finder (not customizable yet) files and directories operations: copying, cutting, pasting, deleting multiple files selecting items with shift (range), command (specific), drag (area) creating empty folder and file from context menu item info window showing full path, name, icon, size, modification date There isn’t much features yet but taking into account that I am using Swift for real for the first time I am proud of myself. I hope you all will like this project and find it useful in your every day productivity when it’ll be a finished product. Until next time! I will go make myself a real dinner for the first time since two weeks."}]...
|
Title: RiverFlow by @ToriYukari | Stardance
Devlo Title: RiverFlow by @ToriYukari | Stardance
Devlogs:
Devlog #1 Until now the project was simply a prototype to test the idea but I kind of lost track of the time and made way too much before first devlog. So here it comes: RiverFlow , native file manager alternative for MacOS, part of The Shrimple Project . Fast as river, no one can stop the flow. It uses all the best stuff Swift language has to make it more resource-efficient than Finder (at least that’s the target) and it’s currently my biggest project. It is ultimately intended to be developer-friendly and will have a lot of built-in tweaks we as programmers needed a plugin for. I also wanted it to have some Linux-feel and make it customizable in every possible way: from colors and icon sizes to custom windows and built-in plugin maker. How it actually works (I had to cut this cause of 4000 chars limit, I will post full devlogs somewhere else) How it ACTUALLY works Alright, I’ve been talking about something entirely different. So here is the flow: You run the app. First you see all the windows attacking you, begging for permissions but it’s irrevelant. The run calls loadCurrentDirectory method from FolderViewModel class. It is the heart of the app, lCD method (as I call it) is being called every time something happens (well not really automatically but I’ll get to it later). lCD creates multiple FileItem class instances. That’s your folders and files as raw data! It also sorts them by your selected method (name / size / modification date) on place. In ContentView depending on which viewType has been selected (list or grid) list/gridView is being rendered. For each FileItem it creates FileList/GridItemView, that’s a view for a single file/folder. And that’s it! If I would want to I can fit all of this in 50-100 lines of code. The real fun starts in coding user interactions with all those objects. I must admit it wasn’t the easiest challenge. The difficulties The list is long. I’ve encountered several walls on my way, some cleared up by different websites, for some I had to use AI tho. The “minor difficulties”: I’ll spare you this rant The “major difficulties”: caching thumbnails for images (and even just making them display and not eating 300 MB of RAM instantly when generating) making the full path in toolbar (the animations and proper detection) efficiently calculating folder size in Info window implementing shift and drag select (took me freaking two days to figure it out) making the SwiftUI cooperate with me and not destroy my entire GridView when adding print somewhere Features list main window listing files and folders in two views: list and grid toolbar featuring full path copying, sorting, view and hidden files options sidebar featuring most used folders resembling the one from Finder (not customizable yet) files and directories operations: copying, cutting, pasting, deleting multiple files selecting items with shift (range), command (specific), drag (area) creating empty folder and file from context menu item info window showing full path, name, icon, size, modification date There isn’t much features yet but taking into account that I am using Swift for real for the first time I am proud of myself. I hope you all will like this project and find it useful in your every day productivity when it’ll be a finished product. Until next time! I will go make myself a real dinner for the first time since two weeks.
Announcement Hi everyone! Little update here: I will be posting full sized devlogs for RiverFlow and any other project on my website available at this address: https://toriyukari.neocities.org/ I am an enthusiast of big, bulky devlogs where I do not only write rough code facts but I’m also sharing a whole development story and 4000 chars is not enough for me. From now on I will be making a Stardance devlog version and full devlog version. I will be attaching a link for everyone who are curious about the whole process. I hope you all understand this. Also there is a first instance of brand new idea of mine available on the website: daily where I share the status and changes of the development every day. You should check it out cause they won’t show up here. Anyways, have a great day just how I’ve had! See ya!
02.08 I tried to write a devlog several days ago but excessive heat beat me up. To be honest last week was the hardest during the whole project. The amount of documentation and videos I’ve read and watched was enormous. My head is overload and I may be considering a little break. But let’s get to the stuff what was made. As usual the full devlog will be posted on toriyukari.neocities.org website. What I’ve made Last Stardance devlog was 21 days ago so it was basically the very beginning of the project, so I’ll just write things that are already present: fast directory loading with grid view (better functionality) and list view sidebar like that in finder (not fully functional as the finder one) toolbar with “go up” “refresh” “showhiddenfiles” “sort by” and interactive path view multi-selecting files with shift (range), drag (area) and command (specific) drag and drop files (single for now) to other apps as well as between directories inside the app right click menus on empty space and elements with the following options: open with app reveal in finder file info (opening a dedicated element info window like this in finder) copy, cut, paste elements inline rename compress to zip trash open directory in terminal/vscode create folder/file copy shell-formatted path I am currently preparing the project to move into Test Driven Development, I am trying to cover the whole existing source code with tests to go on with this coding practice. Soon I’ll start learning about UI testing in Swift Testing framework. What I’ve learned I can’t even think about how many things I’ve read about during the last 3 weeks. Maybe if I would be doing this list regularly… that is actually a good idea. But most important thing that caused me to almost destroy my repo was: DO NOT LET GITHUB COPILOT CREATE COMMITS FOR YOU. They didn’t improve anything and now I have a freaking Copilot as a contributor in the repo. Worst mistake of my life. Difficulties EVERYTHING! But seriously since I use as little AI as I can I am going through hard time during almost everything. Sometimes it drives me crazy. The biggest difficulties were: removing the freaking slopilot from contributors (failed) running my mind at full throttle to understand the crazy UI code splitting (the compiler can’t parse large elements without splitting it into separate elements) running both “drag and drop” and “drag selection” at the same time without generating errors no one have seen before setting up codecov for swift in a new way because apparently no one has thought about any different way than travis for the last 7 years writing custom EULA and source code license (it will be used for all my future project so it was worth to invest some time and money into it) And that’s all worth to mention. Storytime HEAT WAVE HEAT WAVE HEAT WAVE HEAT WAVE WHY IN POLAND IT HAS TO BE -15C OR +40C WHY IT CAN’T BE FREAKING NORMAL 20C HEEEEELP I CAN’T WORK NORMALLY!!! … i’m fine I’ll try to make devlogs more frequently but I don’t think I like doing so. I’ll have to think about some formula, maybe a simpler approach, more reusable scheme or something like that. Until that going off the air for a moment to rest. See ya!
19.08 I’ve made myself a little break, I admit. It was a good time, I came back stronger and more motivated. I’ve noticed that the project is terribly documented and tested, files orgranization was also looking bad. I decided to correct those affairs to make the further development more… amicable. There was also some time for new feature: searching. Maybe not the best but it is already better than Finder’s (modest as always, I know) because it has revelance tier sorting. Of course it is not the final version but for now It’ll work. What I’ve made extended unit tests to have code coverage level at 68% experimented with DocC documentation and found it quite usable so I’ve made documentation for plenty of structs and methods organized files into a new structure (MVVM model) tried to reduce or just identify technical debt inside the project Sounds easy right? Swift Testing framework is easy but it took me some time to learn good practics (and I’m still learning). What I’ve learned reading Develop in Swift Fundamentals, covered a lot of holes in my knowledge code review by my friend, almost 2 hours of discussion and disappointment Also I have plenty of reflections about the technical debt meant earlier. I realized that if I want to efficiently go further with the project I have to think more carefully about planning and organizing the development process. Hopefully the next school year will teach me how real programmers do the thing. That’s all in today’s Not-So-Daily. I know I say that again but maybe it’s time to try doing devlogs more frequent than 10h of work. I didn’t even realize it went that fast. Till next time!
1.09 We are getting so close to the first demo launch! Pushed by my Git fascination I managed to integrate another two important things into the repo: CodeQL and automatic code review by CodeRabbit. However I realised I’ve been doing much more things at the repo itself and I keep forgeting I am trying to code something. So - 4 new features (and first really developer-focused) and incoming REAL readme (because the current one is really crappy). I just started my last high school year so I’ll be a little more busy but my targets still remain the same: at least 80h on stardance and first beta release until 30th September. What I’ve made Git integration with status bar, staging, discarding for directories with repos present improved navigation with folder history (go back, go forward like every normal file manager) sidebar tree view instead of Finder-like fixed bookmarks (like Windows Explorer, kinda buggy for now but actively working on it!) file collision handling with choice dialog window What I’ve learned a bit of project management (kanban, agile etc.) Git API usage in Swift handling and applying code review reports CodeQL reports analysis Difficulties I must admit that I did not write unit tests for Git integration because I kinda don’t know how to approach it. Maybe the next few days in school with my teacher will help me going through it. Apart from that I struggled with applying some responsiveness to resizable elements (such as InteractivePathView) and eventually failed and will return to this later. I promised myself that I won’t go beyond those 10h of no devlog but I failed again. My own devlog template is incoming so I will be more eager to make them more frequent. Apart from that - I am planning demo launch around 14th September so I can gather feedback before beta release around 30th September. Thank you all in advance for reading this and till next time!
23.09 Shipping is hours away now! I must admit that I’ve been a little lazy for the last two weeks and thus the demo has not been released yet and I’m a little afraid if I will be able to get all the necessary votes before 30th Sep. I took five topics that were bothering me: go to path like url bar in windows explorer finishing basic git operations with commit modal overhauling slightly abandoned listView advanced search panel with many options settings window And yet I had so much time to figure them out I couldn’t finish more than three… well two actually. ListView overhaul went… bad. I’ll have to make it from the very beginning but I do not have time for that now. I am not very satisified that I have to ship a software that has not been brought to a state where I would originally want to release it, but I am still really happy for what have I achieved. This was my second Swift project and first that big project at all! I’ve been learning everything about native macOS programming during the development. Thus I am really proud of myself. What I’ve done goToPath modal with autocompletion based on the mechanism used in file searching (revelance tiers) git commit modal with options based on the one from vscode core of listView rework which currently serves as an entry point to every new approach I am testing to make most of functionalities from gridView work also in listView (I am never leaving such a big technical debt in any project) What I’ve learned technical debt awareness deep understanding of git CLI Difficulties Of course the already mentioned listView and more specifically: columns and their resizement, active element area (because I wanted the element to be selected only when clicked on text and the empty area acts as background), additional columns adding, sorting by column. App sandboxing which caused many problems with release version comparing to debug version which appeared to be my mistake in implementation. So I am heading back to the last checklist elements and around 11PM CEST there should appear a shipping. Oh I have to write something for a shipping message… Maybe 1AM tomorrow? I don’t know, as soon as I can so there will be time to receive and give votes. See ya then! I am so excited!
Ships:
Here I welcome you to the very first release of RiverFlow - native macOS, resource-efficient file manager intended to be an alternative for Mac developers! This is my second project in Swift and my biggest project for now. Much of the stuff used in it I figured out on the spot, sometimes minutes before my internal deadlines. The project was developed using agile methods and strict version control along with code coverage focus. It introduces crucial functionalities that any file manager should have as well as some new, small but satisfying tweaks. It uses SwiftUI and AppKit - native Apple view libraries which makes the RiverFlow look exactly like most of the system’s apps, not requiring from user learning of the new interface cause it also resembles Finder in many ways. This is a second app being a part of The Shrimple Project - as simple as possible set of QoL apps for macOS filling the gaps that Apple left which drives people crazy. Important information before testing : This app is made for MACOS and its purpose is to work on MACOS. I am not planning to port it to Windows or Linux before I finish its main phase of development so please, do not leave one star reviews because there is no Windows version. Thank you all in advance, I sure do hope RiverFlow will help in efficient file management and you will enjoy using it!...
|
1793001161.4387147
|
1793087561.4387147
|
|
33582
|
air by @dylankaru | Stardance
|
dylankaru
|
2
|
62.0
|
968
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T08:42:38Z", "hours": 25.0, "multiplier": 17.33, "payout": 426, "blessing": "neutral", "text": "air is a lightweight macOS dashboard that collapses your morning routine into one glance. There’s no more opening five different apps just to check the weather, news, and what’s on today. Genuinely made organising my day so much easier since now I have a place I can easily access to see what I have left in the day and just stats about the day in general. Version 2.0.0 is here. Yay! I’ve added a bunch of new cards, those being the list generator, world clock, unit converter, RNG generator, public IP viewer, and a QR code generator. I’ve also added a few new features, those being temporary cards which let you view a single card as a floating overlay without adding it permanently to your dashboard; and spaces which act as separate card lists which support different themes. It was pretty difficult doing figuring out the QR code generator but I eventually made it work well. Air v2 now supports a minimum of macOS Sonoma (14), which is earlier than previous versions so that’s a good thing too. A project demo video will be available to watch on the projects ReadMe if you can’t/don’t want to download it :)", "repo": "https://github.com/dylankaru/air", "demo": "https://github.com/dylankaru/air/releases/tag/v1.0.1"}, {"ship_num": 2, "ts": "2026-08-26T04:01:39Z", "hours": 37.0, "multiplier": 14.95, "payout": 542, "blessing": "neutral", "text": "air is a lightweight macOS dashboard that collapses your morning routine into one glance. There’s no more opening five different apps just to check the weather, news, and what’s on today. Genuinely made organising my day so much easier since now I have a place I can easily access to see what I have left in the day and just stats about the day in general. The audio player was definitely the hardest part, having to quickly rundown on AppleScript and then also learn how to interact with macOS’s Now Playing system. I ended up finding an external CLI tool called nowplaying-cli by Kirtan Shah and others to pull metadata from it. I’m very, very happy with how this entire project turned, this is to date the best Swift project I’ve ever made by far, but I only plan to improve from here. Air requires a computer running at least macOS 26 and using an arm processor (so Apple Silicon) to run. macOS may also show a security warning on first launch, if it does just right-click the app and choose open to get past it.", "repo": "https://github.com/dylankaru/air", "demo": "https://github.com/dylankaru/air/releases/tag/v1.0.1"}]...
|
[{"post_id": 72490, "ts": "202 [{"post_id": 72490, "ts": "2026-09-23T02:25:22Z", "hours": 2.6056, "text": "Ive finished spaces, which have configurable keybinds that let users navigate through different layouts of cards. Different spaces can have different names, use different themes and have different cards. Adding this actually let me fix a few bugs that I didn’t know I had, mainly with the keybind recorder where after a keybind was set, if a valid keybind was still typed on the keyboard (after the alleged recording state was over) it would rebind it anyway."}, {"post_id": 72116, "ts": "2026-09-22T06:15:24Z", "hours": 3.6028, "text": "I finally got around to adding things to air, since im also doing another ysws thing, but I’ve finally got around to making the temporary card system; it basically acts as a overlay over the normal UI and can be opened using Cmd + K . There’s a search bar to search thru all registered cards. I plan to add spaces either tonight and tomorrow, and then air will be ready to ship again :)"}, {"post_id": 68010, "ts": "2026-09-14T11:31:44Z", "hours": 3.9642, "text": "Ive added two new both pretty simple cards, an IP card that shows your public ipv4 (and 6 if available) and a qr code generator card for any reachable web address. It took a while to figure out how to generate the qr code but coreimage has a way to help me render it. I’m not really sure how else to add to the IP card, but the QR code card has a bunch of customisability features including changing the colour and style of elements in the qr code whilst still being readable. The card can also export the code as a png :)"}, {"post_id": 65198, "ts": "2026-09-10T05:02:34Z", "hours": 2.4389, "text": "So I’ve made new cards now, an RNG card because why not and a configurable world clock. Nothing really too hard with these, tbh they are very simple cards; but they are meant to be so that’s most likely gonna be good for a future update iykwim ;)"}, {"post_id": 64057, "ts": "2026-09-08T05:54:40Z", "hours": 1.1375, "text": "Hi I’ve created a unit conversion card. I initially created my own conversion system which I thought was alright but then I found out that Foundation has built in conversions so I remodelled it to just be a UI front."}, {"post_id": 62854, "ts": "2026-09-06T11:55:24Z", "hours": 1.0897, "text": "Hello I’ve added swipe and click gestures to the news card to make it possible to navigate thru the different news articles, which was a good feature that my friend suggested so thanks to him. I’ve also decided what I want to do for v1.2 and possibly even a v2 since it seems like a large enough deal to release a new version 😱 Here’s what i’m thinking: for v1.2: – unit converter – world clock – public ip – random number generator – countdown – calc – qr code generator/link shortener (maybe) – colour picker – word of the day so basically more cards, but theres a reason: for v2 – spaces, basically different layouts of cards that can have different cards – temporary cards, summoning and focusing cards for sort amounts of time and then dismissing them I think this might be a good roadmap for air. I hope you will enjoy using the new air app as much as I will enjoy making it :)"}, {"post_id": 62129, "ts": "2026-09-05T11:47:24Z", "hours": 5.3814, "text": "This one took a while. I made a list generator card because I needed a way to actually remember what exercises to do, but it can be generalised for any sort of random list generation that you may need to do consistently. The hard part was making rules, which basically tell the generator when to change the odds of any specific category or item in general. Initially I was going to make it so that the user would have to use Swift to do it themselves, but that would make it inaccessible to an extent so I decided to just add rules as block based components, though they are now much more restricted."}, {"post_id": 60202, "ts": "2026-09-02T13:00:08Z", "hours": 2.9028, "text": "I’ve gotten feedback from the ship (tysm for all the feedback) and based off it I’ve made some changes to air and am also planning to change more. First of alll the to do card is now called the notes card since you can add multiple pages for different kinds of notes you may want to quickly jot down, this was my own volition not any feedback. I think the most useful feedback I got was setting the minimum deployment too high i.e. macos 26, and yes that was just because I was too lazy to change all the glass elements, but it turns it was ez (adding themes was harder) so now the minimum deployment is probably 14, though idk how to actually test it on an older os. I just made a new modifier that checked the version once rather than running the check in every single instance of the glass elements.."}, {"post_id": 57344, "ts": "2026-08-29T13:53:47Z", "hours": 1.4575, "text": "After taking a day off, I took a look at air, which at the time I was very proud off, but now I realise that it’s horrenda(saurus rex, those who know).. Today I added a new velvet style (might change the colours of this one but I need a second opinion) and spent the rest of the time just fixed some padding inconsistencies, minor UX upgrades, and a few other bugs; mainly the eyesore caused by the lack of proper colouring of non-text elements using the text colour, dividers looking out of place and bad in general, and the bugs with the to do list, being that overflow extended the card and non-multiline entries. The reason I thought it was ready to ship is because I had no idea what else to put, but now I have many ideas to that will hopefully improve the UX of the app. In the coming days I’m thinking of added a few new cards, adding new features to existing cards to make them more useful, and fixing other bugs that I’ve noticed."}, {"post_id": 54886, "ts": "2026-08-26T03:07:20Z", "hours": 10.5944, "text": "Hi So finally I added resizing the cards with a draggable UI gesture, and added themes thanks to skue’s suggestion (ty kind soul 😁) and a system stats card as well as a website/app shortcuts card because I had no idea what else to add. I added a dark, green, brown, blue and pink theme which differ to the original light (which is technically beige) theme, my personal favourite is the brown."}, {"post_id": 52191, "ts": "2026-08-22T08:57:46Z", "hours": 5.1172, "text": "Well hello there Ive added a clipboard manager because my raycast beta broke and i cannot be bothered reinstalling, also this ones easier to access so imo its a lot better. I also revamped the calendar card and internet speed test. I am thinking of adding more the to speed test like ping, but idk what else to add in the space but its daijyoubu i will find something to put there. I also revamped the news card so the text wasnt cut off, a couple of my friends noticed it and told me. Idk if i mentioned this in the previous devlog but i also changed the settings view instantiation so that if someone (myself too) can have an easier time adding a settings page for a card, as they are passed through at the same time so ye. Thanks for reading"}, {"post_id": 49368, "ts": "2026-08-18T04:40:24Z", "hours": 5.6594, "text": "Hello I’ve added 3 new cards: a pomodoro style timer card with adjustable time lengths, a calendar access card that (after granting permission) retrieves your next closest event, and a network card that checks your internet speed. I plan to add a few more cards, but most importantly (to me at least) is adding two features: A layout customiser that lets you change the organisational layout of the cards A guide on how to (theoretically) add one’s own cards, granted said person knows basic SwiftUI Thanks for reading :)"}, {"post_id": 46918, "ts": "2026-08-14T13:51:06Z", "hours": 8.9567, "text": "Hello again I’ve added a few more features since last time so yay that’s good. I’ve created a settings page where configuration of the existing cards is possible, for example atm u can change the info the weather card shows, and settings to configure the streak (i nearly spelt it configurate lol). I’ll be honest, I’m mostly proud of the audio player, since that took a very long time and it was a suggestion from a friend. It’s actually kinda handy coz even if spotify/music isnt open it will still start playing from it, and it can also control video sources from youtube from your browser yk, that took a long time to figure out."}, {"post_id": 45042, "ts": "2026-08-11T08:54:20Z", "hours": 6.5256, "text": "Hello Hi, this is my first devlog, I don’t really know what to put here so I’ll be brief. I’ve finished setting up the basic infrastructure for the cards, so now all that’s left to do is make more cards and add customisation features. I’ve currently done a greeting panel that uses cards to do so, also a weather card, news card and to do card, though they all need improvement and polishing of the design. I’ve also set up a backend api on a server of mine to run all my api requests to groq (for greeting), weatherapi.com (for calculating the time, what else would i do with this 😡) and newsdata.io without exposing my api keys Thanks"}]...
|
Title: air by @dylankaru | Stardance
Devlogs:
Hel Title: air by @dylankaru | Stardance
Devlogs:
Hello Hi, this is my first devlog, I don’t really know what to put here so I’ll be brief. I’ve finished setting up the basic infrastructure for the cards, so now all that’s left to do is make more cards and add customisation features. I’ve currently done a greeting panel that uses cards to do so, also a weather card, news card and to do card, though they all need improvement and polishing of the design. I’ve also set up a backend api on a server of mine to run all my api requests to groq (for greeting), weatherapi.com (for calculating the time, what else would i do with this 😡) and newsdata.io without exposing my api keys Thanks
Hello again I’ve added a few more features since last time so yay that’s good. I’ve created a settings page where configuration of the existing cards is possible, for example atm u can change the info the weather card shows, and settings to configure the streak (i nearly spelt it configurate lol). I’ll be honest, I’m mostly proud of the audio player, since that took a very long time and it was a suggestion from a friend. It’s actually kinda handy coz even if spotify/music isnt open it will still start playing from it, and it can also control video sources from youtube from your browser yk, that took a long time to figure out.
Hello I’ve added 3 new cards: a pomodoro style timer card with adjustable time lengths, a calendar access card that (after granting permission) retrieves your next closest event, and a network card that checks your internet speed. I plan to add a few more cards, but most importantly (to me at least) is adding two features: A layout customiser that lets you change the organisational layout of the cards A guide on how to (theoretically) add one’s own cards, granted said person knows basic SwiftUI Thanks for reading :)
Well hello there Ive added a clipboard manager because my raycast beta broke and i cannot be bothered reinstalling, also this ones easier to access so imo its a lot better. I also revamped the calendar card and internet speed test. I am thinking of adding more the to speed test like ping, but idk what else to add in the space but its daijyoubu i will find something to put there. I also revamped the news card so the text wasnt cut off, a couple of my friends noticed it and told me. Idk if i mentioned this in the previous devlog but i also changed the settings view instantiation so that if someone (myself too) can have an easier time adding a settings page for a card, as they are passed through at the same time so ye. Thanks for reading
Hi So finally I added resizing the cards with a draggable UI gesture, and added themes thanks to skue’s suggestion (ty kind soul 😁) and a system stats card as well as a website/app shortcuts card because I had no idea what else to add. I added a dark, green, brown, blue and pink theme which differ to the original light (which is technically beige) theme, my personal favourite is the brown.
After taking a day off, I took a look at air, which at the time I was very proud off, but now I realise that it’s horrenda(saurus rex, those who know).. Today I added a new velvet style (might change the colours of this one but I need a second opinion) and spent the rest of the time just fixed some padding inconsistencies, minor UX upgrades, and a few other bugs; mainly the eyesore caused by the lack of proper colouring of non-text elements using the text colour, dividers looking out of place and bad in general, and the bugs with the to do list, being that overflow extended the card and non-multiline entries. The reason I thought it was ready to ship is because I had no idea what else to put, but now I have many ideas to that will hopefully improve the UX of the app. In the coming days I’m thinking of added a few new cards, adding new features to existing cards to make them more useful, and fixing other bugs that I’ve noticed.
I’ve gotten feedback from the ship (tysm for all the feedback) and based off it I’ve made some changes to air and am also planning to change more. First of alll the to do card is now called the notes card since you can add multiple pages for different kinds of notes you may want to quickly jot down, this was my own volition not any feedback. I think the most useful feedback I got was setting the minimum deployment too high i.e. macos 26, and yes that was just because I was too lazy to change all the glass elements, but it turns it was ez (adding themes was harder) so now the minimum deployment is probably 14, though idk how to actually test it on an older os. I just made a new modifier that checked the version once rather than running the check in every single instance of the glass elements..
This one took a while. I made a list generator card because I needed a way to actually remember what exercises to do, but it can be generalised for any sort of random list generation that you may need to do consistently. The hard part was making rules, which basically tell the generator when to change the odds of any specific category or item in general. Initially I was going to make it so that the user would have to use Swift to do it themselves, but that would make it inaccessible to an extent so I decided to just add rules as block based components, though they are now much more restricted.
Hello I’ve added swipe and click gestures to the news card to make it possible to navigate thru the different news articles, which was a good feature that my friend suggested so thanks to him. I’ve also decided what I want to do for v1.2 and possibly even a v2 since it seems like a large enough deal to release a new version 😱 Here’s what i’m thinking: for v1.2: – unit converter – world clock – public ip – random number generator – countdown – calc – qr code generator/link shortener (maybe) – colour picker – word of the day so basically more cards, but theres a reason: for v2 – spaces, basically different layouts of cards that can have different cards – temporary cards, summoning and focusing cards for sort amounts of time and then dismissing them I think this might be a good roadmap for air. I hope you will enjoy using the new air app as much as I will enjoy making it :)
Hi I’ve created a unit conversion card. I initially created my own conversion system which I thought was alright but then I found out that Foundation has built in conversions so I remodelled it to just be a UI front.
So I’ve made new cards now, an RNG card because why not and a configurable world clock. Nothing really too hard with these, tbh they are very simple cards; but they are meant to be so that’s most likely gonna be good for a future update iykwim ;)
Ive added two new both pretty simple cards, an IP card that shows your public ipv4 (and 6 if available) and a qr code generator card for any reachable web address. It took a while to figure out how to generate the qr code but coreimage has a way to help me render it. I’m not really sure how else to add to the IP card, but the QR code card has a bunch of customisability features including changing the colour and style of elements in the qr code whilst still being readable. The card can also export the code as a png :)
I finally got around to adding things to air, since im also doing another ysws thing, but I’ve finally got around to making the temporary card system; it basically acts as a overlay over the normal UI and can be opened using Cmd + K . There’s a search bar to search thru all registered cards. I plan to add spaces either tonight and tomorrow, and then air will be ready to ship again :)
Ive finished spaces, which have configurable keybinds that let users navigate through different layouts of cards. Different spaces can have different names, use different themes and have different cards. Adding this actually let me fix a few bugs that I didn’t know I had, mainly with the keybind recorder where after a keybind was set, if a valid keybind was still typed on the keyboard (after the alleged recording state was over) it would rebind it anyway.
Ships:
air is a lightweight macOS dashboard that collapses your morning routine into one glance. There’s no more opening five different apps just to check the weather, news, and what’s on today. Genuinely made organising my day so much easier since now I have a place I can easily access to see what I have left in the day and just stats about the day in general. The audio player was definitely the hardest part, having to quickly rundown on AppleScript and then also learn how to interact with macOS’s Now Playing system. I ended up finding an external CLI tool called nowplaying-cli by Kirtan Shah and others to pull metadata from it. I’m very, very happy with how this entire project turned, this is to date the best Swift project I’ve ever made by far, but I only plan to improve from here. Air requires a computer running at least macOS 26 and using an arm processor (so Apple Silicon) to run. macOS may also show a security warning on first launch, if it does just right-click the app and choose open to get past it.
air is a lightweight macOS dashboard that collapses your morning routine into one glance. There’s no more opening five different apps just to check the weather, news, and what’s on today. Genuinely made organising my day so much easier since now I have a place I can easily access to see what I have left in the day and just stats about the day in general. Version 2.0.0 is here. Yay! I’ve added a bunch of new cards, those being the list generator, world clock, unit converter, RNG generator, public IP viewer, and a QR code generator. I’ve also added a few new features, those being temporary cards which let you view a single card as a floating overlay without adding it permanently to your dashboard; and spaces which act as separate card lists which support different themes. It was pretty difficult doing figuring out the QR code generator but I eventually made it work well. Air v2 now supports a minimum of macOS Sonoma (14), which is earlier than previous versions so that’s a good thing too. A project demo video will be available to watch on the projects ReadMe if you can’t/don’t want to download it :)...
|
1792990486.9976816
|
1793076886.9976816
|
|
45338
|
ESP32 MP3 Player by @tanvu | Stardance
|
tanvu
|
1
|
62.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-14T23:20:39Z", "hours": 62.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an ESP32 MP3 player on breadboard, complete with a file system and a multi-function playback controller. I went into this project essentially from zero - I had never used an ESP32 and had barely any experience with hobbyist electronics. I wasn’t even aware of the concept of debounce was until I naturally encountered button/encoder jitters in testing. What I’m most proud of is the journey from getting blinky on ESP32 just a few days before starting this project to having a complete embedded system.", "repo": "https://github.com/tanvu29/esp-mp3-player", "demo": ""}]...
|
[{"post_id": 57107, "ts": "202 [{"post_id": 57107, "ts": "2026-08-29T06:34:26Z", "hours": 4.5472, "text": "Final devlog! The main program came together pretty quick since I went through the gauntlet of writing classes for each major component. Quick summary of the MP3 player: Load up a microSD with songs/albums in MP3 format. Then navigate the file browser using the rotary encoder to scroll through and button to select. You can play/pause, skip to next song, and toggle between playback and browser mode at any time. I would love to continue improving this, like right now the ESP32 has trouble registering double button clicks if it’s also streaming audio at the same time. That’s why you see me pause songs before double clicking in the video LOL. Unfortunately with school starting soon I decided to wrap it up here. Still super proud of how far I’ve come considering I was only getting blinky on ESP32 one month ago. This is also meant to be a breadboard proof of concept for a larger PCB project I’ll be tackling, and I’m definitely glad I learned some lessons here and not while working on the PCB. I doubt finishing the PCB is in scope with a month left of stardance but stay tuned haha"}, {"post_id": 55329, "ts": "2026-08-27T02:18:26Z", "hours": 10.1339, "text": "File system stress tested When you start debugging you realize writing code was only half the battle"}, {"post_id": 54335, "ts": "2026-08-25T09:12:14Z", "hours": 3.8667, "text": "Day 9 - File system class written 700+ lines of code between the header and source files :o Once the final version of this class is tested, all classes will have been written and ready to be integrated into the final program. In the home stretch!"}, {"post_id": 54265, "ts": "2026-08-25T04:54:24Z", "hours": 10.0006, "text": "File system in progress Approaching 10 hrs so had to devlog lol Will be back once file system is finished"}, {"post_id": 52710, "ts": "2026-08-23T00:45:57Z", "hours": 11.8506, "text": "Day 8 - writing a proper class start to finish Display class for the LCD is now complete, ready to be integrated with rest of program. Learnings: Use C strings over String objects to avoid heap fragmentation Use structs when you want to store different kinds of information about a state Consider what the class needs to know about the program, but also what it doesn’t need to know"}, {"post_id": 51146, "ts": "2026-08-20T17:18:32Z", "hours": 4.4336, "text": "Day 7 - debugging, oop, state machines The only new functionality added today was updating my button state machine for double click and long press detection. Intended behavior: While a song is playing, double click to play the next song or long press to return to the file navigator / song selector. Demo test in video The more interesting part to me was getting experience with two real big potato things: debugging & oop in c++. I got a taste of debugging low-level errors using toolchains. In this case it was the Xtensa addr2line tool used to convert ESP32 memory address logs into the exact file and line number involved in the error. Shoutout RoboService on youtube with 10 subscribers for making a banger tutorial. I also kinda went headfirst into c++ classes. My main arduino ide sketch was getting long enough to the point where partitioning it into classes became the smart move. I got the hang of it faster than expected. The new part is learning c++ specific syntax, but the fundamental concepts are the same across all oop languages."}, {"post_id": 50137, "ts": "2026-08-19T07:22:05Z", "hours": 5.3003, "text": "Day 6 - song progress timer complete with the help of codex Didn’t realize how complicated calculating song duration from an MP3 would be. You would think duration is stored in metadata but you actually need to do some reverse engineering & check for a bunch of different compression formats yada yada Anyways now a basic timer is working. Also replaced the headphone jack with speakers like the engineers of the MAX98357 amp modules intended. Still lots more to implement like file navigation and song selection"}, {"post_id": 49358, "ts": "2026-08-18T04:15:32Z", "hours": 3.0836, "text": "Day 5 - hello world LCD display I2C protocol learnings: SDA and SCL lines are held HIGH by external pull-up resistors. Connecting to GPIO pins with internal pull-down resistors will interfere with the pull-ups and cause a serial error. I was stuck on that for a hot minute lol Looking forward, I’ll be implementing song title/artist, timer, progress bar, and hopefully file navigation functionality"}, {"post_id": 47356, "ts": "2026-08-15T07:45:24Z", "hours": 2.2667, "text": "Day 3 & 4 - Audio is now playing! Found a library called arduino-audio-tools that conveniently abstracts the MP3 -> PCM -> I2S pipeline, so no need to reinvent the wheel. This library provides functions like setVolume(), play(), and stop(). All I had to do was integrate these functions into my rotary encoder code from Day 1, and voila there’s volume control and pause/resume. The next session will likely be debugging the static & flicker coming out of the TRRS headphone jack"}, {"post_id": 46204, "ts": "2026-08-13T08:29:49Z", "hours": 3.2169, "text": "Day 2 - Researched SD card reading on the Arduino platform. This one took waayyyy too long - once I realized the native arduino SD library doesn’t support my >32GB exFAT microSD I spent the entire day looking into and testing various libraries.. turns out it was a hardware problem. I was using custom pins for SPI instead of the standard ESP32 VSPI pins and assumed it would work the same. Guess I chose a bad pin?"}, {"post_id": 45555, "ts": "2026-08-12T03:46:31Z", "hours": 3.0333, "text": "Day 1 - Prototyped volume control, scrolling, and button press on a KY-040 rotary encoder. Button press was done with a timer based debounce, but nailing down debounce logic for volume/scrolling was more tricky… The solution I landed on was making a state transition table, which maps changes in the encoder’s quadrature signal to a physical turn, CW or CCW. In the screenshot you can see debounce in action - button press is registered 3 times but the actual output only changes once!"}]...
|
Title: ESP32 MP3 Player by @tanvu | Stardance
Dev Title: ESP32 MP3 Player by @tanvu | Stardance
Devlogs:
Day 1 - Prototyped volume control, scrolling, and button press on a KY-040 rotary encoder. Button press was done with a timer based debounce, but nailing down debounce logic for volume/scrolling was more tricky… The solution I landed on was making a state transition table, which maps changes in the encoder’s quadrature signal to a physical turn, CW or CCW. In the screenshot you can see debounce in action - button press is registered 3 times but the actual output only changes once!
Day 2 - Researched SD card reading on the Arduino platform. This one took waayyyy too long - once I realized the native arduino SD library doesn’t support my >32GB exFAT microSD I spent the entire day looking into and testing various libraries.. turns out it was a hardware problem. I was using custom pins for SPI instead of the standard ESP32 VSPI pins and assumed it would work the same. Guess I chose a bad pin?
Day 3 & 4 - Audio is now playing! Found a library called arduino-audio-tools that conveniently abstracts the MP3 -> PCM -> I2S pipeline, so no need to reinvent the wheel. This library provides functions like setVolume(), play(), and stop(). All I had to do was integrate these functions into my rotary encoder code from Day 1, and voila there’s volume control and pause/resume. The next session will likely be debugging the static & flicker coming out of the TRRS headphone jack
Day 5 - hello world LCD display I2C protocol learnings: SDA and SCL lines are held HIGH by external pull-up resistors. Connecting to GPIO pins with internal pull-down resistors will interfere with the pull-ups and cause a serial error. I was stuck on that for a hot minute lol Looking forward, I’ll be implementing song title/artist, timer, progress bar, and hopefully file navigation functionality
Day 6 - song progress timer complete with the help of codex Didn’t realize how complicated calculating song duration from an MP3 would be. You would think duration is stored in metadata but you actually need to do some reverse engineering & check for a bunch of different compression formats yada yada Anyways now a basic timer is working. Also replaced the headphone jack with speakers like the engineers of the MAX98357 amp modules intended. Still lots more to implement like file navigation and song selection
Day 7 - debugging, oop, state machines The only new functionality added today was updating my button state machine for double click and long press detection. Intended behavior: While a song is playing, double click to play the next song or long press to return to the file navigator / song selector. Demo test in video The more interesting part to me was getting experience with two real big potato things: debugging & oop in c++. I got a taste of debugging low-level errors using toolchains. In this case it was the Xtensa addr2line tool used to convert ESP32 memory address logs into the exact file and line number involved in the error. Shoutout RoboService on youtube with 10 subscribers for making a banger tutorial. I also kinda went headfirst into c++ classes. My main arduino ide sketch was getting long enough to the point where partitioning it into classes became the smart move. I got the hang of it faster than expected. The new part is learning c++ specific syntax, but the fundamental concepts are the same across all oop languages.
Day 8 - writing a proper class start to finish Display class for the LCD is now complete, ready to be integrated with rest of program. Learnings: Use C strings over String objects to avoid heap fragmentation Use structs when you want to store different kinds of information about a state Consider what the class needs to know about the program, but also what it doesn’t need to know
File system in progress Approaching 10 hrs so had to devlog lol Will be back once file system is finished
Day 9 - File system class written 700+ lines of code between the header and source files :o Once the final version of this class is tested, all classes will have been written and ready to be integrated into the final program. In the home stretch!
File system stress tested When you start debugging you realize writing code was only half the battle
Final devlog! The main program came together pretty quick since I went through the gauntlet of writing classes for each major component. Quick summary of the MP3 player: Load up a microSD with songs/albums in MP3 format. Then navigate the file browser using the rotary encoder to scroll through and button to select. You can play/pause, skip to next song, and toggle between playback and browser mode at any time. I would love to continue improving this, like right now the ESP32 has trouble registering double button clicks if it’s also streaming audio at the same time. That’s why you see me pause songs before double clicking in the video LOL. Unfortunately with school starting soon I decided to wrap it up here. Still super proud of how far I’ve come considering I was only getting blinky on ESP32 one month ago. This is also meant to be a breadboard proof of concept for a larger PCB project I’ll be tackling, and I’m definitely glad I learned some lessons here and not while working on the PCB. I doubt finishing the PCB is in scope with a month left of stardance but stay tuned haha
Ships:
I made an ESP32 MP3 player on breadboard, complete with a file system and a multi-function playback controller. I went into this project essentially from zero - I had never used an ESP32 and had barely any experience with hobbyist electronics. I wasn’t even aware of the concept of debounce was until I naturally encountered button/encoder jitters in testing. What I’m most proud of is the journey from getting blinky on ESP32 just a few days before starting this project to having a complete embedded system....
|
1793004744.7573504
|
1793091144.7573504
|
|
41074
|
Android Portrait Mode by @zunair_charolia | Starda Android Portrait Mode by @zunair_charolia | Stardance...
|
zunair_charolia
|
0
|
61.76
|
0
|
[]
|
[{"post_id": 55162, "ts": "202 [{"post_id": 55162, "ts": "2026-08-26T17:15:29Z", "hours": 7.3611, "text": "I have highly refined the depth map algorithm, which has helped my project with the final result a ton. The computer keys are still the worst-case scenario from what I’ve tested, but it even handles them much better than the previous method. In order to achieve such a drastic difference, I have used a correction algorithm and an infill algorithm (see previous journal where parts were black (undefined). One of the big problems with the keyboard was that it would create a halo. Bokeh is still sharp, but it is also unfocused. This caused the SML algorithm to fail and create these “rings” around the true depth. To mitigate this, the correction algorithm calculates the edge of it’s own region. If a region is thick enough (this is a constant within the code), it is marked as trustworthy. Thin ribbons will fail this test.The black parts (missing data) is solved using an infill algorithm. It uses the original photo as a guide and assumes that if two adjacent pixels have the same color, they probably belong to the same object and should have the same depth. For every unsolved pixel, it looks at it’s neighbours and calculates the “color weight” (closeness in color). If the pixel has a high color weight, it likely belongs to the same object. If it has a low color weight, it is likely something like an edge. This process is repeated 40 times to ensure the entire frame is filled."}, {"post_id": 52725, "ts": "2026-08-23T01:26:37Z", "hours": 2.6831, "text": "After using AI, I have completed the blurring logic. (For this in particular, I used AI a little more than usual. I’m not a fan of it myself, but I’m in a time crunch, and the logic is a little complicated.) However, the results have turned out… Interesting. I will definitely have to double-check exactly what it did, though I do know the general gist. It uses CoC (circle of confusion… Confusion ) to blur parts that are not in focus. However, it seems that some adjustments have to be made, either to my focus algorithm or to the blurring logic. Most probably, I need to fix both. This is definitely something I need to look into… This is nowhere near perfect."}, {"post_id": 52403, "ts": "2026-08-22T15:05:19Z", "hours": 8.0944, "text": "Focus sweeping and creating a depth map now work successfully! I have stored the frames from each focus sweep in cache rather than storing them in memory, as storing them in memory caused the app to crash on some devices. The sweeps are then processed and stored in physical, non-cache storage along with the original image. I have also been able to create a depth map that shows the depth in an image. However, the depth map will need calibration, as the algorithm does not perform well in low light (it uses SML, but it does not seem to remove artifacts well, and blank areas are a problem). Since I am running out of time (1 day left), I will focus on creating the blur using the depth map and the original picture. I did use AI to make parts of this (mainly on how to extract the Y plane, save it, then read it, as that was confusing)."}, {"post_id": 50630, "ts": "2026-08-19T21:39:15Z", "hours": 4.9303, "text": "I am currently attempting to take individual images for depth. I am using AI to help me here, along with previous repos, as the CameraX and Camera2 APIs are not very extensive or well-written and are very confusing to use. I am also running into many problems in my code at the moment. My code is crashing due to the amount of memory used, and the camera preview is not the correct size anymore. I have also implemented a shutter button to allow me to capture images."}, {"post_id": 48370, "ts": "2026-08-16T18:06:15Z", "hours": 8.6883, "text": "I have now implemented tap-to-focus in my preview! Implementing this came with many bugs, mainly in handling tap-to-focus on fixed-focus devices and in creating the fade-in/out animation. There were also a couple of bugs in the preview that were much harder to fix, which varied across phones (I am testing on the Samsung S24 Ultra, Pixel 10 Pro XL, and Pixel 7 Pro, with the Pixel phones being the primary ones). These bugs were mainly the screen disappearing occasionally and not being able to click on a Logical Camera to see the underlying physical camera when there were no Physical Cameras within the Logical Camera."}, {"post_id": 46428, "ts": "2026-08-13T17:04:11Z", "hours": 8.5947, "text": "I have now added the camera preview! This proved to be much harder to do than it originally seemed. In order to show the preview, I had to switch to using CameraX API instead of using Camera2. This was because I constantly ran into glitches where the preview was stretched, or rotating the preview would cause problems. I have also made the orientation always portrait when in the camera preview. This helps the fluidity of the UI as you will not see the screen tilting animation when turning the phone (usually, camera software only tilts the icons or buttons). At the moment, the preview only shows the camera feed. I also used AI to help me with the logic for the camera preview and changing my project from Camera2 to CameraX."}, {"post_id": 44060, "ts": "2026-08-09T16:06:41Z", "hours": 5.0483, "text": "All previous glitches have been fixed. I had a problem where one Logical button would cause all buttons to show their Physical buttons. I also fixed other possible edge cases I overlooked that may cause my app to use more memory than it needs. I also slightly redesigned my buttons after realizing that Cards can be clickable. The different colour in the screenshot is simply because I changed my phone’s Material You theme (all colours are based on your phone’s theme by default). Small changes such as uneven padding for main cards and smaller padding for smaller cards helps the viewer group the cards. Rounding numbers for readability and a change in title have also been added."}, {"post_id": 43500, "ts": "2026-08-08T20:04:51Z", "hours": 8.0508, "text": "Ran into some problems… Thought I got the view and logic right for the buttons, but it seems I did not. Time to redo the button styling and logic! (I’m fried)"}, {"post_id": 41949, "ts": "2026-08-06T14:07:22Z", "hours": 8.3056, "text": "Finished the basis for my project. Time to start working on the camera preview and handling the physical lenses separately."}]...
|
Title: Android Portrait Mode by @zunair_charolia | Title: Android Portrait Mode by @zunair_charolia | Stardance
Devlogs:
Finished the basis for my project. Time to start working on the camera preview and handling the physical lenses separately.
Ran into some problems… Thought I got the view and logic right for the buttons, but it seems I did not. Time to redo the button styling and logic! (I’m fried)
All previous glitches have been fixed. I had a problem where one Logical button would cause all buttons to show their Physical buttons. I also fixed other possible edge cases I overlooked that may cause my app to use more memory than it needs. I also slightly redesigned my buttons after realizing that Cards can be clickable. The different colour in the screenshot is simply because I changed my phone’s Material You theme (all colours are based on your phone’s theme by default). Small changes such as uneven padding for main cards and smaller padding for smaller cards helps the viewer group the cards. Rounding numbers for readability and a change in title have also been added.
I have now added the camera preview! This proved to be much harder to do than it originally seemed. In order to show the preview, I had to switch to using CameraX API instead of using Camera2. This was because I constantly ran into glitches where the preview was stretched, or rotating the preview would cause problems. I have also made the orientation always portrait when in the camera preview. This helps the fluidity of the UI as you will not see the screen tilting animation when turning the phone (usually, camera software only tilts the icons or buttons). At the moment, the preview only shows the camera feed. I also used AI to help me with the logic for the camera preview and changing my project from Camera2 to CameraX.
I have now implemented tap-to-focus in my preview! Implementing this came with many bugs, mainly in handling tap-to-focus on fixed-focus devices and in creating the fade-in/out animation. There were also a couple of bugs in the preview that were much harder to fix, which varied across phones (I am testing on the Samsung S24 Ultra, Pixel 10 Pro XL, and Pixel 7 Pro, with the Pixel phones being the primary ones). These bugs were mainly the screen disappearing occasionally and not being able to click on a Logical Camera to see the underlying physical camera when there were no Physical Cameras within the Logical Camera.
I am currently attempting to take individual images for depth. I am using AI to help me here, along with previous repos, as the CameraX and Camera2 APIs are not very extensive or well-written and are very confusing to use. I am also running into many problems in my code at the moment. My code is crashing due to the amount of memory used, and the camera preview is not the correct size anymore. I have also implemented a shutter button to allow me to capture images.
Focus sweeping and creating a depth map now work successfully! I have stored the frames from each focus sweep in cache rather than storing them in memory, as storing them in memory caused the app to crash on some devices. The sweeps are then processed and stored in physical, non-cache storage along with the original image. I have also been able to create a depth map that shows the depth in an image. However, the depth map will need calibration, as the algorithm does not perform well in low light (it uses SML, but it does not seem to remove artifacts well, and blank areas are a problem). Since I am running out of time (1 day left), I will focus on creating the blur using the depth map and the original picture. I did use AI to make parts of this (mainly on how to extract the Y plane, save it, then read it, as that was confusing).
After using AI, I have completed the blurring logic. (For this in particular, I used AI a little more than usual. I’m not a fan of it myself, but I’m in a time crunch, and the logic is a little complicated.) However, the results have turned out… Interesting. I will definitely have to double-check exactly what it did, though I do know the general gist. It uses CoC (circle of confusion… Confusion ) to blur parts that are not in focus. However, it seems that some adjustments have to be made, either to my focus algorithm or to the blurring logic. Most probably, I need to fix both. This is definitely something I need to look into… This is nowhere near perfect.
I have highly refined the depth map algorithm, which has helped my project with the final result a ton. The computer keys are still the worst-case scenario from what I’ve tested, but it even handles them much better than the previous method. In order to achieve such a drastic difference, I have used a correction algorithm and an infill algorithm (see previous journal where parts were black (undefined). One of the big problems with the keyboard was that it would create a halo. Bokeh is still sharp, but it is also unfocused. This caused the SML algorithm to fail and create these “rings” around the true depth. To mitigate this, the correction algorithm calculates the edge of it’s own region. If a region is thick enough (this is a constant within the code), it is marked as trustworthy. Thin ribbons will fail this test.The black parts (missing data) is solved using an infill algorithm. It uses the original photo as a guide and assumes that if two adjacent pixels have the same color, they probably belong to the same object and should have the same depth. For every unsolved pixel, it looks at it’s neighbours and calculates the “color weight” (closeness in color). If the pixel has a high color weight, it likely belongs to the same object. If it has a low color weight, it is likely something like an edge. This process is repeated 40 times to ensure the entire frame is filled....
|
1792939674.9462821
|
1793803674.9462821
|
|
51526
|
Geozi by @DanTerry | Stardance
|
DanTerry
|
0
|
61.73
|
0
|
[]
|
[{"post_id": 62888, "ts": "202 [{"post_id": 62888, "ts": "2026-09-06T12:44:26Z", "hours": 9.0553, "text": "Devlog 12 - Geozi Gonna be one of the last devlogs probably. Here’s what I added/modified : Move tool: 4th option in the Point submenu, you click an existing point, drag it around, and release to drop it . Pen smoothing: the pen strokes looked jagged because the whole renderer is raw Bresenham lines, no antialiasing anywhere. Didn’t want to build real antialiasing, so instead added a draw_thick_line that redraws the same line with small ±1px offsets, makes the stroke ~3px wide instead of hairline, which hides the pixel-steps a lot without touching the core renderer. Submenu name renaming and UI redrawing: it wasn’t very clear what each submenu was for, so I gave them longer and more descriptive names. I also added borders and separators to the submenus"}, {"post_id": 61063, "ts": "2026-09-03T19:38:18Z", "hours": 9.8661, "text": "Devlog 11 - Geozi These two last days were pretty important because I added a lot of stuff, mostly around file handling and one last creative tool: File system: new icon in the toolbar, in first position, with a Save/Load submenu. Saving/loading uses the real Windows file picker ( GetSaveFileNameW / GetOpenFileNameW ) instead of a custom UI, I had to declare OPENFILENAMEW by hand, a pretty big struct (23 fields) where the field odrer has to match Windows’ ABI exactly or it just breaks silently. Files save as .gsp , a plain text format I made up with one section per object type ( POINTS n , CIRCLES n , etc), parsed line by line with no external lib. Split all that into its own storage.rs file. Pen tool: last icon in the toolbar, you can draw anywhere on the canvas with a small palette of 8 preset colors (skipped a full RGB slider picker to keep it simple, maybe I can implement it later). Each stroke is just like a polyline of world space points tagged with its color. I also moved the hint text (“click the second point” per exemple) from the top-left to the top-right - it was overlapping with the submenus which are all on the left side under their buttons. The difficult part was making Save/Load play nice with the rest of the app bcz clicking “Save” can’t just fire off the Windows dialog immediately, since I’m still holding a mutable borrow on the app state at that point and the dialog runs its own internal message loop. Same trick I used for the Radius/Sides popups, I set a flag, let the borrow end naturally, then open the dialog after. Also had to bump the toolbar from 7 to 9 buttons so every submenu’s x-position needed shifting"}, {"post_id": 58980, "ts": "2026-08-31T15:38:58Z", "hours": 5.2142, "text": "Devlog 10 - Geozi Added a bunch of stuff today, mostly around construction tools and cleaning up some UI edges : Regular polygon: new option in the Polygon submenu, you place 2 points, type a number of sides in a popup (same dialog box as the “Radius” one), and it builds the whole regular polygon by rotating the edge vector by the exterior angle (2π/n) at each step Angle tool: new toolbar option with two modes, angle between 3 points, or angle between 2 existing lines (at their intersection).I just need to change the angle’s color to make it stand out from the other components. Themed dialogs: the Radius and Sides popups now match the app’s theme and open centered on the main window instaed of a fixed corner (before it opened outside the app) The math side was the fun part, rotating vectors for the regular polygon, solving a 2x2 linear system for line intersections and normaliznig the arc angle so it always draw the short way around. Next I’ll add a Save/Load system (I completely forgot this lol) and a cool functionnality you’ll see in the next devlog. It’s almost the end of the project so if you have any suggestions just tell me"}, {"post_id": 58400, "ts": "2026-08-30T20:09:38Z", "hours": 8.4892, "text": "Devlog 9 - Geozi I’m a bit tired of debugging and coding for this long so here’s a quick devlog about what I added and changed : Added two new tools to the toolbar : Line (parallel/perpendicular) you have to click an existing line or segment to use it as reference then move the mouse - a semi-transparent preview line (it was a bit annoying cuz it’s a fake transparent line, no real alpha channel here, I just blend the line color with the background color channel by channel) follows the cursor, click to place it for real ; Helpers : Distance (select 2 points, shown bottom-left) and Area (click inside a closed polygon, and the area is calculated with the shoelace theorem) All the layout math had to shift over and I fixed some bugs that happened when the app launched"}, {"post_id": 57590, "ts": "2026-08-29T19:45:04Z", "hours": 6.2414, "text": "Devlog 8 - Geozi It’s almost the end of the project. I still have a few features to implement as helpers, things related to angles or ways to add perpendicular and parallel lines (quite a lot finally lol). Here is what I did today : I added some keyboard shortcuts : CTRL+A to select all the points and CTRL-Z to undo the last action done, it works with a snapshot stack : each action saves the state before it happens and undoing just pops the last one back. I also added point naming and the display of the coordinates of selected points in the top-right corner of the grid I fixed the “Radius” submenu. The bug was caused by the fact that I hadn’t registered the window class (with RegisterClassExW as shown in the screenshot) before creating the window with CreateWindowExW"}, {"post_id": 56807, "ts": "2026-08-28T18:41:45Z", "hours": 5.7058, "text": "Devlog 7 - Geozi Another day of grinding on the project ! I am a bit disappointed because I didn’t make as much as progress as I wanted to but nvm. Here is what I did today : Implementing the polygon system : the filling part was a bit difficult but the rendering looks nice I created a submenu for the circle tool with two options : either you place a circle by placing two points, or you place the center point first, then enter the radius in a modal dialog box (but for some reason the dialog box doesn’t appear and the app freezes - seems like a win32 issue that I need to fix) The app.rs file was getting too long so I added two new files, ui.rs which manages all the UI including all the constants and drawing stuff, and theme.rs which handles the palette and colors I also removed the distance display because I’ll add it to a submenu for helpers."}, {"post_id": 55746, "ts": "2026-08-27T18:40:21Z", "hours": 4.8717, "text": "Devlog 6 - Geozi Instead of having only axes, I added a grid to make it look more like an actual geometry engine. I also added the option to show tick marks, that we can enabled with a button in the bottom-right corner. I also created a submenu under the point icon where you can either place/select point, draw a segment or a line. Finally I added themes : a dark theme and a bright theme. It took quite a while today because I reorganized both the code and the UI. If you (who read this) have any ideas that can improve my app, let me now :)"}, {"post_id": 55458, "ts": "2026-08-27T10:08:39Z", "hours": 4.6367, "text": "Devlog 5 — Geozi Today I locked in and added some cool things to Geozi . Here is what I did today: Added a toolbar where you can choose to either navigate while dragging the mouse, place/select a point or place a circle You can now select and delete points Added a cartesian coordinate system (only axes) that we can enabled or disabled with a checkbox Worked on the circle mechanic : for the moment you have to place a point, then another one which will be the radius of the circle Next I’ll polish the UI, probably work on submenus and adding polygons, and maybe some stuff with angles"}, {"post_id": 54762, "ts": "2026-08-25T21:19:06Z", "hours": 1.4331, "text": "Devlog 4 — Geozi Fixing some bugs but now the core of the app is functionnal ! I tested it on my windows machine and as you can see in the video demo, it’s still pretty basic but I’m gonna improve it a lot over the next few days. I also created a logo with a nice background and maths symbols I found on pinterest and Photopea for the text."}, {"post_id": 54581, "ts": "2026-08-25T16:34:43Z", "hours": 3.0528, "text": "Devlog 3 — Geozi Today I made a big step on Geozi .The base is almost finished now. I connected the Win32 window with the app and added the main interactions: Clicking creates points Clicking on existing points selects them Selecting 2 points draws a line between them The distance between the 2 points is displayed The window can be resized Mouse wheel zoom I also connected the rendering, geometry and Win32 parts together. I’ll share a screenshot of the app later in the evening.Next step is to improve the UI, adding circles and adjusting the camera."}, {"post_id": 53989, "ts": "2026-08-24T18:35:30Z", "hours": 0.8922, "text": "Devlog #2 - Geometry & rendering Today I worked on the basic geometry and rendering of my Geogebra like project.I added points, distance calculations, pixel drawing and line rendering. I also implemented world-to-screen and screen-to-world coordinate conversion with scaling and offsets.This gives me the foundation for the zoom, movement and geometric tools I’ll add next.Still pretty basic, but it’s starting to look like an actual geometry engine :)"}, {"post_id": 53027, "ts": "2026-08-23T12:34:31Z", "hours": 2.2711, "text": "Devlog #1 I started working on the windowing part of my Geogebra-like app in Rust, using Win32 FFI directly without any crates, so today was mostly about copying things over: manually redeclaring the Windows structs (WNDCLASSEXW, MSG, BITMAPINFOHEADER…) and the user32/gdi32 functions I need for the project. Honestly, it was a bit boring to copy each field in the right order from the Microsoft documentation (with no room for error, because a misaligned #[repr(C)] crashes silently instead of giving a clear compile error lol) BUT it was instructive because I now understand much better why Windows expects strings in UTF-16, and why biHeight must be negative if I want my image right side up rather than inverted, for example…"}]...
|
Title: Geozi by @DanTerry | Stardance
Devlogs:
De Title: Geozi by @DanTerry | Stardance
Devlogs:
Devlog #1 I started working on the windowing part of my Geogebra-like app in Rust, using Win32 FFI directly without any crates, so today was mostly about copying things over: manually redeclaring the Windows structs (WNDCLASSEXW, MSG, BITMAPINFOHEADER…) and the user32/gdi32 functions I need for the project. Honestly, it was a bit boring to copy each field in the right order from the Microsoft documentation (with no room for error, because a misaligned #[repr(C)] crashes silently instead of giving a clear compile error lol) BUT it was instructive because I now understand much better why Windows expects strings in UTF-16, and why biHeight must be negative if I want my image right side up rather than inverted, for example…
Devlog #2 - Geometry & rendering Today I worked on the basic geometry and rendering of my Geogebra like project.I added points, distance calculations, pixel drawing and line rendering. I also implemented world-to-screen and screen-to-world coordinate conversion with scaling and offsets.This gives me the foundation for the zoom, movement and geometric tools I’ll add next.Still pretty basic, but it’s starting to look like an actual geometry engine :)
Devlog 3 — Geozi Today I made a big step on Geozi .The base is almost finished now. I connected the Win32 window with the app and added the main interactions: Clicking creates points Clicking on existing points selects them Selecting 2 points draws a line between them The distance between the 2 points is displayed The window can be resized Mouse wheel zoom I also connected the rendering, geometry and Win32 parts together. I’ll share a screenshot of the app later in the evening.Next step is to improve the UI, adding circles and adjusting the camera.
Devlog 4 — Geozi Fixing some bugs but now the core of the app is functionnal ! I tested it on my windows machine and as you can see in the video demo, it’s still pretty basic but I’m gonna improve it a lot over the next few days. I also created a logo with a nice background and maths symbols I found on pinterest and Photopea for the text.
Devlog 5 — Geozi Today I locked in and added some cool things to Geozi . Here is what I did today: Added a toolbar where you can choose to either navigate while dragging the mouse, place/select a point or place a circle You can now select and delete points Added a cartesian coordinate system (only axes) that we can enabled or disabled with a checkbox Worked on the circle mechanic : for the moment you have to place a point, then another one which will be the radius of the circle Next I’ll polish the UI, probably work on submenus and adding polygons, and maybe some stuff with angles
Devlog 6 - Geozi Instead of having only axes, I added a grid to make it look more like an actual geometry engine. I also added the option to show tick marks, that we can enabled with a button in the bottom-right corner. I also created a submenu under the point icon where you can either place/select point, draw a segment or a line. Finally I added themes : a dark theme and a bright theme. It took quite a while today because I reorganized both the code and the UI. If you (who read this) have any ideas that can improve my app, let me now :)
Devlog 7 - Geozi Another day of grinding on the project ! I am a bit disappointed because I didn’t make as much as progress as I wanted to but nvm. Here is what I did today : Implementing the polygon system : the filling part was a bit difficult but the rendering looks nice I created a submenu for the circle tool with two options : either you place a circle by placing two points, or you place the center point first, then enter the radius in a modal dialog box (but for some reason the dialog box doesn’t appear and the app freezes - seems like a win32 issue that I need to fix) The app.rs file was getting too long so I added two new files, ui.rs which manages all the UI including all the constants and drawing stuff, and theme.rs which handles the palette and colors I also removed the distance display because I’ll add it to a submenu for helpers.
Devlog 8 - Geozi It’s almost the end of the project. I still have a few features to implement as helpers, things related to angles or ways to add perpendicular and parallel lines (quite a lot finally lol). Here is what I did today : I added some keyboard shortcuts : CTRL+A to select all the points and CTRL-Z to undo the last action done, it works with a snapshot stack : each action saves the state before it happens and undoing just pops the last one back. I also added point naming and the display of the coordinates of selected points in the top-right corner of the grid I fixed the “Radius” submenu. The bug was caused by the fact that I hadn’t registered the window class (with RegisterClassExW as shown in the screenshot) before creating the window with CreateWindowExW
Devlog 9 - Geozi I’m a bit tired of debugging and coding for this long so here’s a quick devlog about what I added and changed : Added two new tools to the toolbar : Line (parallel/perpendicular) you have to click an existing line or segment to use it as reference then move the mouse - a semi-transparent preview line (it was a bit annoying cuz it’s a fake transparent line, no real alpha channel here, I just blend the line color with the background color channel by channel) follows the cursor, click to place it for real ; Helpers : Distance (select 2 points, shown bottom-left) and Area (click inside a closed polygon, and the area is calculated with the shoelace theorem) All the layout math had to shift over and I fixed some bugs that happened when the app launched
Devlog 10 - Geozi Added a bunch of stuff today, mostly around construction tools and cleaning up some UI edges : Regular polygon: new option in the Polygon submenu, you place 2 points, type a number of sides in a popup (same dialog box as the “Radius” one), and it builds the whole regular polygon by rotating the edge vector by the exterior angle (2π/n) at each step Angle tool: new toolbar option with two modes, angle between 3 points, or angle between 2 existing lines (at their intersection).I just need to change the angle’s color to make it stand out from the other components. Themed dialogs: the Radius and Sides popups now match the app’s theme and open centered on the main window instaed of a fixed corner (before it opened outside the app) The math side was the fun part, rotating vectors for the regular polygon, solving a 2x2 linear system for line intersections and normaliznig the arc angle so it always draw the short way around. Next I’ll add a Save/Load system (I completely forgot this lol) and a cool functionnality you’ll see in the next devlog. It’s almost the end of the project so if you have any suggestions just tell me
Devlog 11 - Geozi These two last days were pretty important because I added a lot of stuff, mostly around file handling and one last creative tool: File system: new icon in the toolbar, in first position, with a Save/Load submenu. Saving/loading uses the real Windows file picker ( GetSaveFileNameW / GetOpenFileNameW ) instead of a custom UI, I had to declare OPENFILENAMEW by hand, a pretty big struct (23 fields) where the field odrer has to match Windows’ ABI exactly or it just breaks silently. Files save as .gsp , a plain text format I made up with one section per object type ( POINTS n , CIRCLES n , etc), parsed line by line with no external lib. Split all that into its own storage.rs file. Pen tool: last icon in the toolbar, you can draw anywhere on the canvas with a small palette of 8 preset colors (skipped a full RGB slider picker to keep it simple, maybe I can implement it later). Each stroke is just like a polyline of world space points tagged with its color. I also moved the hint text (“click the second point” per exemple) from the top-left to the top-right - it was overlapping with the submenus which are all on the left side under their buttons. The difficult part was making Save/Load play nice with the rest of the app bcz clicking “Save” can’t just fire off the Windows dialog immediately, since I’m still holding a mutable borrow on the app state at that point and the dialog runs its own internal message loop. Same trick I used for the Radius/Sides popups, I set a flag, let the borrow end naturally, then open the dialog after. Also had to bump the toolbar from 7 to 9 buttons so every submenu’s x-position needed shifting
Devlog 12 - Geozi Gonna be one of the last devlogs probably. Here’s what I added/modified : Move tool: 4th option in the Point submenu, you click an existing point, drag it around, and release to drop it . Pen smoothing: the pen strokes looked jagged because the whole renderer is raw Bresenham lines, no antialiasing anywhere. Didn’t want to build real antialiasing, so instead added a draw_thick_line that redraws the same line with small ±1px offsets, makes the stroke ~3px wide instead of hairline, which hides the pixel-steps a lot without touching the core renderer. Submenu name renaming and UI redrawing: it wasn’t very clear what each submenu was for, so I gave them longer and more descriptive names. I also added borders and separators to the submenus...
|
1792673581.500341
|
1793278381.500341
|
|
43568
|
Look Up | Astronomy Observation Helper by @ASTRY | Look Up | Astronomy Observation Helper by @ASTRY | Stardance...
|
ASTRY
|
1
|
61.49
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T01:22:20Z", "hours": 57.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "H1 Find planets & stars with your phone !! I’m ASTRY , and I proudly present to you my 2nd real coding project that I made this summer (: It is called “Look UP” , the idea ? With real astronomical datas / weather datas / light pollution etc… LookUp can show you what objects of the celestial catalogue (that will grow ( ; ) you can see. For example if you have good conditions for astronomical observation , LookUp can then help you target with the orientation of your phone the object that you desire to look at. If you chose to target Saturn , once on the target page that is a 3d environement made with Three.JS , you’ll have an arrow that will guide you to the object with you moving you phone IRL !! I was motivated to do this project to learn how to manage bigger projects and learn many new things regarding coding. Also space is KINDA one of my passion , so when I discovered Stardance I went all in. I’m not going to lie , this was pretty hard and made me use IA multiple times without any kind of abuses , each time I brainstormed with GPT , this ended up beneficial with me finding better solution (even tho I think a majority of my code is meh lol) But this was worth all the time and effort ( those 50hr + of work doesn’t reflect the real time that went into this project (x ) I really liked seeing all thoses lines of code that I wrote coming little by little together to form this type of instrument , I’m VERRY HAPPY with it. PS : TRY IT ON PHONE , without “deviceorientation” of it the site will be pretty useless… , thx ! & This project will result in a youtube video on my channel ASTRY ! Eitherway , thanks to all the Stardance admins and people that contribute to this wonderful community that inspired me to also hit my head against walls to figure out solution for some scripts. Take care and I now cross my fingers for a 3d printer hehe (; (couldn’t put a video to show in shipping sorry…) -ASTRY", "repo": "https://github.com/Rukkoa17/LookUp2", "demo": "https://lookup2-1d9v.vercel.app"}]...
|
[{"post_id": 82004, "ts": "202 [{"post_id": 82004, "ts": "2026-10-23T12:37:50Z", "hours": 4.49, "text": "After Changes requested Log (; I don’t want to elaborate to much on what was made because I don’t find it very fun etc… But to simplify : -Change the backend and frontend from Render & Github Pages to Vercel. -Debugged many things related to that -Worked my way to make the webapp work loccally and being able to provide the instructions in order to do it -Changed the README to fill in the conditions of shipping. I wish this will be the last step please lol (:"}, {"post_id": 75058, "ts": "2026-09-29T00:51:15Z", "hours": 3.2325, "text": "H1 LAST DEVLOG !!!!! Finally it’s here , LookUp V2 , the coding project that makes me the most proud of this journey ! So I’m making this quick because it is actually almost 3:00AM where I live……. From last time the most notable features that where added : -Being able to email me from settings suggestions -Making my own way to get the infos regarding light pollution and rating it -Giving a score for tonight observability (nothing too serious I rushed that understanding that making something precise is way too hard for my situation.) -Ugly display of that score (made today around 00:00 ) -Getting displayed what you can see with eyes / bino / telescope (regarding that , I need to add more celestials objects into the catalogue because they seems to all be visible even by eyes in the proper conditions.) That’s pretty much it very summarized , thanks for reading this last devlog , now come submitting (;"}, {"post_id": 74644, "ts": "2026-09-27T20:44:18Z", "hours": 10.0178, "text": "H1 NEXT THING IS SHIPPING !!! Ok so many features and improvements have been made but I will keep it “secret” for now. I’m currently on my deadline to ship this project. So when it will be shipped I’ll elaborate on what’s new and a overall review of LookUP v2 !!! Right now I’m working on the lightpollution rating , that’s the last “complex” thing that I have to make , after that the rest SEEMS pretty simple but we’ll see (; Tommorow is my deadline , please dev/admin have some pity for me … Cya (:"}, {"post_id": 69832, "ts": "2026-09-17T21:23:54Z", "hours": 10.4528, "text": "Hey (; Been a little while ! So from last time I worked in things that are pretty much behind the scene for now. As an example of what I am saying , I worked on some api call , and refining my backend. But basicaly , without trying to list everything the main new things are : -A guiding arrow for the user to be able to spot / target the wanted celestial object much quicker. -Settings menu that can be accesed from the home page , for now the only available action is to change the “main color” of the web app , but I find it pretty cool and also liked coding it (I did it without any google or anything , just the IDE and my brain hehe) -Got back to work with APIs , goals : refine rating of the weather related to the position of the user , add changes to the overall rating with moon phase , atmosphere turbulances ( if I can do that , idk) and lastly light pollution ( this one will be special to do , there is no direct API that suits my criterias , so I’ll do something myself). For some the progress from last time while seem pathetic because there is nothing really fancy FOR NOW , this coming week is the rush for me don’t worry I’ll try my best to get it done ! Good luck to everybody for the final days of stardance (="}, {"post_id": 60981, "ts": "2026-09-03T17:42:30Z", "hours": 9.9806, "text": "HERE AGAIN !!!!! Okay so few days passed , school started for me but STILL working on my LookUp website (I want to get a gift with stardust for my girlfriend but I don’t think it’s possible to work this many hours now…….). Many littles features and improvements have been made as you can see in the video compared to the last one. (Please don’t focus on the top degrees display it’s BROKEN /:) Mainly I focused on adding all the celestial objects from the catalogue into the 3d space ! Everything seems to work fine now for the looking up part (; MANY things are still to be done but I’m going to get there because I want to post a video about this project in about 20 days hehe (believe will maybe make it possible..) I don’t want to get to much into listing what I have done neither what is still left but to summerize : -Overall esthetic of the webapp -Features for better 3d space -Weather/Observabilty part related to astronomical observation -Some settings features (; Please leave a like or a comment to support me , last post was …. yeah lol Love y’all , keep up the good work !"}, {"post_id": 51945, "ts": "2026-08-21T21:57:04Z", "hours": 12.3083, "text": "BACK BABY !!! Okay so I’m going to try to summerize what I’ve done in a few days (didn’t know that when +10hr logged the rest aren’t taken for the payout calculation…. MY BAD) So in the last devlog I was at the step of acquiring the SIMBAD database positions of the celestials objects that I wanted. So I was able to figure that out and let yall with the results of having things like => Sirius , RA/DEC of 101 / -16. During this period this is pretty much all I did in “order” : -First I converted the RA / DEC into Az/Alt coords , that allows to locate the object for the user by him being the anchor point of this , so for example a Az of 90° is at East and a Alt of 70° in addition with the Az means the object is at East pretty high up in the sky because it’s 70° from the horizon.This step took some time because I really tried to understand the logic behind it , at some point I understood all the steps / elements needed for the mathematical trick that was needed , from there I cherched forums for astronomical formulas and magic from there hehe. (Screenshot of the js script for that) -From there after some esthetical adjustements I went into brefly learning Three.Js , an beautiful webdev tool that makes us devs able to Create / Display / Render some 3D for our websites !!!! I for now learned pretty much the basic and didn’t really put much effort into the esthetic (FOR NOW) , as you can see in the screenshot ( = . -2 days ago I started working on the backend (with Render thx) that was needed for my app to hide the APIs Key. This step wasn’t something I really enjoyed because even tho I understood all the logical thing behing every requirement and action , I still remained stuck for long moments without any idea. This lead to Claude helping me , sorry ); BUT it was only minor bugs that would’ve took me SO MANY TIME to see , like wow… Now my only issue is that I am currently using a free plan for my server so after a little time without request , it will go to sleep and when the first request after that comes , it will take a pretty long time to load (Around 40s/1min … making the first Loading for some user TOO LONG) -AND NOW here we are ! So in the last hours logged what I did is add the scope for the 3d page and also position a pink sphere representing the selected object at his ACTUAL POSITION (like in Stellarium hehe). Today I also got in Raycasting method to click on a mesh and trigger an event. Yes in 3d like three.js adding a simple EventListener(“click”…) can’t be done. So the Idea is casting a ray from a point like your mouse and this ray (A mathematical Vector) will INTERSECT with the mesh if correctly orientated and THIS will prove to us that the usre clicked on the object. That is for me useful for a feature : I want that when the user succesfuly place the object in his LookUp scope , my JS detect this with a ray casted from the center of the scope and is then able to show a little info pannel like you can see in the 2nd screenshot again ! So yeah that’s it ! I find letting multiple logged days more enjoyable to devlog so Imma keep it like that I think (; Next step is really being able to control the 3D camera with the deviceorientationabsolute of the user’s phone. (For now I have been able with Quaternion (set with Euler for now) , to make a cube rotate with the phone being physically rotated IRL) If someone READ all that , please tell me in the comments what do you think , that would MAKE MY DAY , for real ! Love to yall <3"}, {"post_id": 46185, "ts": "2026-08-13T07:11:07Z", "hours": 1.7561, "text": "DAY 8 ! Made some progress hehe (; Okay so YESTERDAY , my goal was pretty clear , I wanted to get to a point where my python program for writing a .txt with all the datas for the celestial objects will be good. So I changed somethings because I feel like I was running towards a wall that I could simply dodge. So the big change was that instead of using a sort of celestial_objects_list.txt , I instead took the names of the objects that I wanted directly from my datas.js in order to after fill them. In the Afternoon , with this first part accomplished , I went into trying to understand how I could convert my Ra and Dec astronomical positions into Az / Alt ones with the help of the location of the User and their precise time according to their location. So right now I know that I could simply copy a script like that with all that I needed but I will try before correcting it with others examples online to seek understanding myself and writing it like I UNDERSTAND. Right now I know that I need to calculate the GMST (Greenwich Mean Sidereal Time) , this time with what I understood is something that will help me deal with the rotation of earth on itself by correcting it to have something “fixed”? THX FOR READING , <333"}, {"post_id": 45437, "ts": "2026-08-11T21:34:22Z", "hours": 1.2208, "text": "Hm hm , Day 7.. Yeah so today I don’t got much to tell , I spent all the coding time trying to figure out myself solutions for somes issues that I have. I pretty much went by the previous devlog plan today for having referenced names of data.js. But couldn’t figure all out today , will try to finish everything with the python script tommorow so I can get to more exciting stuff… Sorry for today being kinda “bad”. Love !!!!"}, {"post_id": 44807, "ts": "2026-08-10T20:40:51Z", "hours": 0.5775, "text": "Day …… 6 , hehe. Okay so today worked a really tiny time on this bcs last day of vacantions for me ); (all good tho). So I spend the time refining the python script for the .txt , I wanted to gather some others name from the SIMBAD database for each objects. After sometime I endded up with this code BUT as you can see adding all the others names of the objects is implying hundreds of new lines. The issue ? : to put each objects data in my data.js I will need an name that I want to find in all this other names but if there are SO MUCH to check , I’ll feel bad for this lack of performance. SO , I will try to do something like : -data.js will have all the objects with names already instaured (for ex : Andromeda) -I’ll put that into a .txt -then in my python script I will try to select for the name(s).? , the corresponding one. As you can see my mind is still pretty sketchy about this so time will tell us… I’ll seriously get into putting more hours to this from tomorrow , love yall !!!!!"}, {"post_id": 44209, "ts": "2026-08-09T20:23:08Z", "hours": 1.6989, "text": "DAY 5 , yeahhhh! Okay so today I did what I wanted to do. I’ve succeded at making the request with SIMBAD TAP for the position of objects in space (Ra & Deg) and then tranfering this in a JSON form inside of a .txt , from there I picked it up with JS and console.log the datas ! Maybe it seems pretty chill but it wasn’t intuitive for the request part because of a bug explained in the last devlog. Now the next step is with all thoses infos on objects , being able to calculate the Alt & Az from the user POV to make them able for a display in my website! Also I will soon need to dig a little about backend because I can’t publish this on Github bcs of some API keys… So yeah one day ! THANK YOU FOR READING !!!!!"}, {"post_id": 43752, "ts": "2026-08-09T05:23:37Z", "hours": 2.1511, "text": "Day 4 !!… of torturing myself with coding. Okay so I’m posting this devlog a little late because the day passed but still. Yesterday I started trying to implement Astroquery SIMBAD into my code , the goal ? Having a database from where I could take astronomical position value of all the celestial objects I need (this come in Ra & Deg) and from there I will convert it to where it is situated ocmpared to user location. Also read the comment on the code screenshot because I’m explaining why I used ChatGPT because of a “software issue?” , my code was fine but juste wouldn’t work so he helped me. So I put down some console result for you to see !! Now for this feature there is still the converting part but the rest will NORMALLY be more intuitive. Love yall (;"}, {"post_id": 42617, "ts": "2026-08-07T13:09:50Z", "hours": 2.0531, "text": "D-d-d-d-ay 3 of devlogs !! Okay so today I worked pretty well on some finitions and also on the “show all “and “visible” buttons. You can see pretty much how all this work together in the little video. Also I want to mention that for pretty much all this UI , Chatgpt helped with around 10% of the work , I really tried to use it only if necessary or to learn deeper about a concept/technique. After that I started like said yesterday to see how astroquery SIMBAD could help me with my project. Now I’m pretty sure that I got the theorical part like you can see in the notes screen. Anyways my day is far from being finished so I think tonight I will again try to work 1/2hours on getting the positions of celestial objects. Keep up the good work yall !!!!"}, {"post_id": 42224, "ts": "2026-08-06T20:51:18Z", "hours": 0.7856, "text": "DAY 2 , hehe! Okay so today I started working really late because I went moutain hiking (in vacations for a few days then real work (; ). I tried to inform myself and understand how apps like Stellarium works about gathering the postions of the celestial objects for like +1hr. So for now I think I will work with a database that is SIMBAD , I will gather some infos with sql or python (Astroquery | TAP SIMBAD). Then from here I THINK I’ll calculate the azimuth & altitude with the user being the perspectif point. After I juste styled little things because I was exhausted after a lonngggngng day -fews CSS changes (like user-select : none) -added the Observability text for the section -Finally started working on buttons that will make possible for the user to show all objects or only visibles ones for him (with altitude , observability conditions and his equipment)."}, {"post_id": 41503, "ts": "2026-08-05T19:05:25Z", "hours": 0.8856, "text": "DAY 1 … for my cosmical observation asistant ! I lied. I in fact started really working on this project a little time ago like you can read in his description (; Why only posting now ? Cause I didn’t had a clue stardance existed (btw if any admin is reading this , the concept is AMAZING !!). Ok now real talk. Today I didn’t code that much due to not being home for a little time. But I still managed to do some brainstorming about the features that are linked towards telling / showing to the user the rating I give to tonight sky for astronomical observation and to the specific celestial object he wants to Look Up to (; So I codded a … thing… (full of if if if , but dw it’s for a moment i’ll change it after implementing first what I need , plz don ’t hate YET). After that I quickly added a little dot of red/yellow/green color to tell the user if the object selected is observable with CURRENT CONDITIONS (based on the V1 of this app and worth with altitude and magnitude of the planet selected) , btw the moon rn isn’t visible where I am (I think??) , so working for NOW. That’s all for my really long devlog today , love to yall <3"}]...
|
Title: Look Up | Astronomy Observation Helper by @ Title: Look Up | Astronomy Observation Helper by @ASTRY | Stardance
Devlogs:
DAY 1 … for my cosmical observation asistant ! I lied. I in fact started really working on this project a little time ago like you can read in his description (; Why only posting now ? Cause I didn’t had a clue stardance existed (btw if any admin is reading this , the concept is AMAZING !!). Ok now real talk. Today I didn’t code that much due to not being home for a little time. But I still managed to do some brainstorming about the features that are linked towards telling / showing to the user the rating I give to tonight sky for astronomical observation and to the specific celestial object he wants to Look Up to (; So I codded a … thing… (full of if if if , but dw it’s for a moment i’ll change it after implementing first what I need , plz don ’t hate YET). After that I quickly added a little dot of red/yellow/green color to tell the user if the object selected is observable with CURRENT CONDITIONS (based on the V1 of this app and worth with altitude and magnitude of the planet selected) , btw the moon rn isn’t visible where I am (I think??) , so working for NOW. That’s all for my really long devlog today , love to yall <3
DAY 2 , hehe! Okay so today I started working really late because I went moutain hiking (in vacations for a few days then real work (; ). I tried to inform myself and understand how apps like Stellarium works about gathering the postions of the celestial objects for like +1hr. So for now I think I will work with a database that is SIMBAD , I will gather some infos with sql or python (Astroquery | TAP SIMBAD). Then from here I THINK I’ll calculate the azimuth & altitude with the user being the perspectif point. After I juste styled little things because I was exhausted after a lonngggngng day -fews CSS changes (like user-select : none) -added the Observability text for the section -Finally started working on buttons that will make possible for the user to show all objects or only visibles ones for him (with altitude , observability conditions and his equipment).
D-d-d-d-ay 3 of devlogs !! Okay so today I worked pretty well on some finitions and also on the “show all “and “visible” buttons. You can see pretty much how all this work together in the little video. Also I want to mention that for pretty much all this UI , Chatgpt helped with around 10% of the work , I really tried to use it only if necessary or to learn deeper about a concept/technique. After that I started like said yesterday to see how astroquery SIMBAD could help me with my project. Now I’m pretty sure that I got the theorical part like you can see in the notes screen. Anyways my day is far from being finished so I think tonight I will again try to work 1/2hours on getting the positions of celestial objects. Keep up the good work yall !!!!
Day 4 !!… of torturing myself with coding. Okay so I’m posting this devlog a little late because the day passed but still. Yesterday I started trying to implement Astroquery SIMBAD into my code , the goal ? Having a database from where I could take astronomical position value of all the celestial objects I need (this come in Ra & Deg) and from there I will convert it to where it is situated ocmpared to user location. Also read the comment on the code screenshot because I’m explaining why I used ChatGPT because of a “software issue?” , my code was fine but juste wouldn’t work so he helped me. So I put down some console result for you to see !! Now for this feature there is still the converting part but the rest will NORMALLY be more intuitive. Love yall (;
DAY 5 , yeahhhh! Okay so today I did what I wanted to do. I’ve succeded at making the request with SIMBAD TAP for the position of objects in space (Ra & Deg) and then tranfering this in a JSON form inside of a .txt , from there I picked it up with JS and console.log the datas ! Maybe it seems pretty chill but it wasn’t intuitive for the request part because of a bug explained in the last devlog. Now the next step is with all thoses infos on objects , being able to calculate the Alt & Az from the user POV to make them able for a display in my website! Also I will soon need to dig a little about backend because I can’t publish this on Github bcs of some API keys… So yeah one day ! THANK YOU FOR READING !!!!!
Day …… 6 , hehe. Okay so today worked a really tiny time on this bcs last day of vacantions for me ); (all good tho). So I spend the time refining the python script for the .txt , I wanted to gather some others name from the SIMBAD database for each objects. After sometime I endded up with this code BUT as you can see adding all the others names of the objects is implying hundreds of new lines. The issue ? : to put each objects data in my data.js I will need an name that I want to find in all this other names but if there are SO MUCH to check , I’ll feel bad for this lack of performance. SO , I will try to do something like : -data.js will have all the objects with names already instaured (for ex : Andromeda) -I’ll put that into a .txt -then in my python script I will try to select for the name(s).? , the corresponding one. As you can see my mind is still pretty sketchy about this so time will tell us… I’ll seriously get into putting more hours to this from tomorrow , love yall !!!!!
Hm hm , Day 7.. Yeah so today I don’t got much to tell , I spent all the coding time trying to figure out myself solutions for somes issues that I have. I pretty much went by the previous devlog plan today for having referenced names of data.js. But couldn’t figure all out today , will try to finish everything with the python script tommorow so I can get to more exciting stuff… Sorry for today being kinda “bad”. Love !!!!
DAY 8 ! Made some progress hehe (; Okay so YESTERDAY , my goal was pretty clear , I wanted to get to a point where my python program for writing a .txt with all the datas for the celestial objects will be good. So I changed somethings because I feel like I was running towards a wall that I could simply dodge. So the big change was that instead of using a sort of celestial_objects_list.txt , I instead took the names of the objects that I wanted directly from my datas.js in order to after fill them. In the Afternoon , with this first part accomplished , I went into trying to understand how I could convert my Ra and Dec astronomical positions into Az / Alt ones with the help of the location of the User and their precise time according to their location. So right now I know that I could simply copy a script like that with all that I needed but I will try before correcting it with others examples online to seek understanding myself and writing it like I UNDERSTAND. Right now I know that I need to calculate the GMST (Greenwich Mean Sidereal Time) , this time with what I understood is something that will help me deal with the rotation of earth on itself by correcting it to have something “fixed”? THX FOR READING , <333
BACK BABY !!! Okay so I’m going to try to summerize what I’ve done in a few days (didn’t know that when +10hr logged the rest aren’t taken for the payout calculation…. MY BAD) So in the last devlog I was at the step of acquiring the SIMBAD database positions of the celestials objects that I wanted. So I was able to figure that out and let yall with the results of having things like => Sirius , RA/DEC of 101 / -16. During this period this is pretty much all I did in “order” : -First I converted the RA / DEC into Az/Alt coords , that allows to locate the object for the user by him being the anchor point of this , so for example a Az of 90° is at East and a Alt of 70° in addition with the Az means the object is at East pretty high up in the sky because it’s 70° from the horizon.This step took some time because I really tried to understand the logic behind it , at some point I understood all the steps / elements needed for the mathematical trick that was needed , from there I cherched forums for astronomical formulas and magic from there hehe. (Screenshot of the js script for that) -From there after some esthetical adjustements I went into brefly learning Three.Js , an beautiful webdev tool that makes us devs able to Create / Display / Render some 3D for our websites !!!! I for now learned pretty much the basic and didn’t really put much effort into the esthetic (FOR NOW) , as you can see in the screenshot ( = . -2 days ago I started working on the backend (with Render thx) that was needed for my app to hide the APIs Key. This step wasn’t something I really enjoyed because even tho I understood all the logical thing behing every requirement and action , I still remained stuck for long moments without any idea. This lead to Claude helping me , sorry ); BUT it was only minor bugs that would’ve took me SO MANY TIME to see , like wow… Now my only issue is that I am currently using a free plan for my server so after a little time without request , it will go to sleep and when the first request after that comes , it will take a pretty long time to load (Around 40s/1min … making the first Loading for some user TOO LONG) -AND NOW here we are ! So in the last hours logged what I did is add the scope for the 3d page and also position a pink sphere representing the selected object at his ACTUAL POSITION (like in Stellarium hehe). Today I also got in Raycasting method to click on a mesh and trigger an event. Yes in 3d like three.js adding a simple EventListener(“click”…) can’t be done. So the Idea is casting a ray from a point like your mouse and this ray (A mathematical Vector) will INTERSECT with the mesh if correctly orientated and THIS will prove to us that the usre clicked on the object. That is for me useful for a feature : I want that when the user succesfuly place the object in his LookUp scope , my JS detect this with a ray casted from the center of the scope and is then able to show a little info pannel like you can see in the 2nd screenshot again ! So yeah that’s it ! I find letting multiple logged days more enjoyable to devlog so Imma keep it like that I think (; Next step is really being able to control the 3D camera with the deviceorientationabsolute of the user’s phone. (For now I have been able with Quaternion (set with Euler for now) , to make a cube rotate with the phone being physically rotated IRL) If someone READ all that , please tell me in the comments what do you think , that would MAKE MY DAY , for real ! Love to yall <3
HERE AGAIN !!!!! Okay so few days passed , school started for me but STILL working on my LookUp website (I want to get a gift with stardust for my girlfriend but I don’t think it’s possible to work this many hours now…….). Many littles features and improvements have been made as you can see in the video compared to the last one. (Please don’t focus on the top degrees display it’s BROKEN /:) Mainly I focused on adding all the celestial objects from the catalogue into the 3d space ! Everything seems to work fine now for the looking up part (; MANY things are still to be done but I’m going to get there because I want to post a video about this project in about 20 days hehe (believe will maybe make it possible..) I don’t want to get to much into listing what I have done neither what is still left but to summerize : -Overall esthetic of the webapp -Features for better 3d space -Weather/Observabilty part related to astronomical observation -Some settings features (; Please leave a like or a comment to support me , last post was …. yeah lol Love y’all , keep up the good work !
Hey (; Been a little while ! So from last time I worked in things that are pretty much behind the scene for now. As an example of what I am saying , I worked on some api call , and refining my backend. But basicaly , without trying to list everything the main new things are : -A guiding arrow for the user to be able to spot / target the wanted celestial object much quicker. -Settings menu that can be accesed from the home page , for now the only available action is to change the “main color” of the web app , but I find it pretty cool and also liked coding it (I did it without any google or anything , just the IDE and my brain hehe) -Got back to work with APIs , goals : refine rating of the weather related to the position of the user , add changes to the overall rating with moon phase , atmosphere turbulances ( if I can do that , idk) and lastly light pollution ( this one will be special to do , there is no direct API that suits my criterias , so I’ll do something myself). For some the progress from last time while seem pathetic because there is nothing really fancy FOR NOW , this coming week is the rush for me don’t worry I’ll try my best to get it done ! Good luck to everybody for the final days of stardance (=
H1 NEXT THING IS SHIPPING !!! Ok so many features and improvements have been made but I will keep it “secret” for now. I’m currently on my deadline to ship this project. So when it will be shipped I’ll elaborate on what’s new and a overall review of LookUP v2 !!! Right now I’m working on the lightpollution rating , that’s the last “complex” thing that I have to make , after that the rest SEEMS pretty simple but we’ll see (; Tommorow is my deadline , please dev/admin have some pity for me … Cya (:
H1 LAST DEVLOG !!!!! Finally it’s here , LookUp V2 , the coding project that makes me the most proud of this journey ! So I’m making this quick because it is actually almost 3:00AM where I live……. From last time the most notable features that where added : -Being able to email me from settings suggestions -Making my own way to get the infos regarding light pollution and rating it -Giving a score for tonight observability (nothing too serious I rushed that understanding that making something precise is way too hard for my situation.) -Ugly display of that score (made today around 00:00 ) -Getting displayed what you can see with eyes / bino / telescope (regarding that , I need to add more celestials objects into the catalogue because they seems to all be visible even by eyes in the proper conditions.) That’s pretty much it very summarized , thanks for reading this last devlog , now come submitting (;
After Changes requested Log (; I don’t want to elaborate to much on what was made because I don’t find it very fun etc… But to simplify : -Change the backend and frontend from Render & Github Pages to Vercel. -Debugged many things related to that -Worked my way to make the webapp work loccally and being able to provide the instructions in order to do it -Changed the README to fill in the conditions of shipping. I wish this will be the last step please lol (:
Ships:
H1 Find planets & stars with your phone !! I’m ASTRY , and I proudly present to you my 2nd real coding project that I made this summer (: It is called “Look UP” , the idea ? With real astronomical datas / weather datas / light pollution etc… LookUp can show you what objects of the celestial catalogue (that will grow ( ; ) you can see. For example if you have good conditions for astronomical observation , LookUp can then help you target with the orientation of your phone the object that you desire to look at. If you chose to target Saturn , once on the target page that is a 3d environement made with Three.JS , you’ll have an arrow that will guide you to the object with you moving you phone IRL !! I was motivated to do this project to learn how to manage bigger projects and learn many new things regarding coding. Also space is KINDA one of my passion , so when I discovered Stardance I went all in. I’m not going to lie , this was pretty hard and made me use IA multiple times without any kind of abuses , each time I brainstormed with GPT , this ended up beneficial with me finding better solution (even tho I think a majority of my code is meh lol) But this was worth all the time and effort ( those 50hr + of work doesn’t reflect the real time that went into this project (x ) I really liked seeing all thoses lines of code that I wrote coming little by little together to form this type of instrument , I’m VERRY HAPPY with it. PS : TRY IT ON PHONE , without “deviceorientation” of it the site will be pretty useless… , thx ! & This project will result in a youtube video on my channel ASTRY ! Eitherway , thanks to all the Stardance admins and people that contribute to this wonderful community that inspired me to also hit my head against walls to figure out solution for some scripts. Take care and I now cross my fingers for a 3d printer hehe (; (couldn’t put a video to show in shipping sorry…) -ASTRY...
|
1793004606.7454238
|
1793091006.7454238
|
|
20269
|
Social Media Website (YSX) by @AuraMonster | Stard Social Media Website (YSX) by @AuraMonster | Stardance...
|
AuraMonster
|
1
|
61.45
|
1074
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T00:44:15Z", "hours": 61.0, "multiplier": 17.75, "payout": 1074, "blessing": "neutral", "text": "This is YSX! A social media website where you can do pretty much anything! This project took a lot of time because of all the complex code involved with it. Fortunately, UI libraries (Such as ShadCN and Radix UI) and frameworks (such as Next.JS), as well as AI and other stuff helped me overcome this. IMPORTANT NOTE FOR SHIPWRIGHTS: IF YOU WANT TO TEST ADMIN PLEASE DM ME ON SLACK (username: mdmutahhar24).", "repo": "https://github.com/mdmutahhar24-pixel/YSX", "demo": "https://ysx-mu.vercel.app/"}]...
|
[{"post_id": 25748, "ts": "202 [{"post_id": 25748, "ts": "2026-07-10T05:57:49Z", "hours": 0.45, "text": "reship"}, {"post_id": 23816, "ts": "2026-07-06T23:48:56Z", "hours": 6.0539, "text": "Eleventh and final Devlog for YSX Social Media Website :D Changes: Removed empty screen from home page Heavy UI Changes Added Search bar to create Conversation Share, Comment Added Dislike removed Scrapped some ideas (or will come next ship) Updated Changelog so that it fits release New Features: Home Screen got added You can Now comment and share Files now compress in Chat but takes longer for larger files background around your name if you are creator of the post and you commented on it. Project will be shipped out soon :) (Image is admin POV)"}, {"post_id": 17752, "ts": "2026-06-28T17:50:39Z", "hours": 3.8953, "text": "Tenth Devlog for YSX Social Media Website Changes: Feed bug fixed and works again Liked button remains toggled even after refreshing the page Added a UI Sheet (from ShadCN) to comments button (Comments not finished) Switched from custom attachment style to using UI library’s attachment New Features: Ban Page (redirected when user is banned) In Progress: Comments Algorithm Chat Rework Feed Ban Expiry Being able to attach large files to chat Future Plans (Subject to Change): More features on Settings page Changelog upon release More (If you guys have any more ideas, I could use them!)"}, {"post_id": 16610, "ts": "2026-06-27T00:50:38Z", "hours": 4.315, "text": "Ninth Devlog for YSX Social Media Website Changes: UI Changes Chat Bug fixes New Features: Admin Features section now added! Frontend for Admin features Frontend Ban feature for admins In Progress: Chat UI revamp due to ShadCN (UI library) adding a message component Admin Features backend Ban backend Future Plans(subject to change): Being able to attach large files to chat Setting Page more features More loading pages Bug fixes More"}, {"post_id": 16033, "ts": "2026-06-26T01:13:55Z", "hours": 5.1086, "text": "Eight Devlog for YSX Social Media Website Changes: Added a posts tag feature Heavy UI changes and Bug fixes New Features: Added Banner Change feature Added Profile picture change feature Added scoring system (AKA an algorithm that tracks what you watch) Account Page now complete! You can also now delete your account via the settings page In Progress: Chat Page down due to multiple errors (trying to fix) Algorithm bug fixes Future plans (Subject to change): New features to settings page Ability to attach large files to chat Admin features Posts’ like, dislike, comment, share (crucial for algorithm) More"}, {"post_id": 15393, "ts": "2026-06-25T00:55:18Z", "hours": 8.6514, "text": "Seventh Devlog for YSX Social Media website Changes: Multiple bugs were fixed Loading Screens added for only a few pages New Features: Notifications now work! (This took me a long time and lots of frustration) Change description feature added In Progress: Banner change (frontend) Profile Picture change (frontend and backend) Settings Page Skeletons (loading pages) for other pages Future Plans (Subject to change): Being able to attach large files to chat (pushed off for later) Reels Algorithm Admin Features Post Editing Chat Editing Post likes, dislikes, messaging, share More"}, {"post_id": 14010, "ts": "2026-06-23T00:00:49Z", "hours": 5.8522, "text": "Sixth Devlog for YSX Social Media Website Changes: Chat Input styling Changed Messages styling Changed New Features: You can now attach small images/videos to chat Backend resolved for images/video attachments Mobile Support for chatting In Progress: Account Profile Picture changing being able to attach large files Account Banner Picture changing Account Page Settings Page Future Features (Subject to Change): Add comment, share, and like/dislike on posts Post editing Changelog editing upon release Admin Features Featured Posts Status for chatting Continually add mobile support for upcoming features"}, {"post_id": 13298, "ts": "2026-06-21T19:36:50Z", "hours": 2.9967, "text": "Fifth Devlog of YSX Social Media Website Changes: None New Features: Typing messages now works Backend added for Messaging Both users get messages and are automatically added to a conversation if one users starts it. In Progress: Account page Settings Page Future Things (To-Do list): Add attachments to messaging Add delete button to Posting Make a posts/reels algorithm Add User status on messaging page More (Subject to change)"}, {"post_id": 12700, "ts": "2026-06-20T18:55:57Z", "hours": 2.7692, "text": "Fourth Devlog of YSX Social Media Website Changes: Layout positioning UI design Instead of Relying on built in auth, created a synchronized table for extra features. New Features: Added and Completed Create Chat/Conversation Completed Backend to create chat In Progress: Messaging screen Sidebar Trigger fixed position Planned Features (Subject to change): Profile image changeable Chatting completion Likes/Dislikes feature on posts Comment Feature Share Feature Account and setting pages More undecided…"}, {"post_id": 12266, "ts": "2026-06-20T01:00:45Z", "hours": 6.4089, "text": "Third Devlog for YSX Social Media Website What is YSX? It is a social media website similar to websites like X, instagram, tik tok, etc. Changes: Added changelog section Chatting UI layout complete Chatting backend in progress Worked on UI Style Changes Made Chatting UI layout unique to YSX and no other social media website."}, {"post_id": 11571, "ts": "2026-06-18T21:09:22Z", "hours": 4.6431, "text": "Second Devlog for YSX Social Media Website What is YSX? A social media website. Changes: Added form to post (no built-in recorder) Added Backend to store posts information Added Feed page (Holds all posts) Added Likes feature Added Backend for Likes Log Out and Delete feature added (Incomplete) Mobile support built in Fixed text going under post instead of on top. Added reel snapping Added placeholder incase of no posts"}, {"post_id": 10973, "ts": "2026-06-18T00:07:27Z", "hours": 9.9475, "text": "First Devlog for YSX What is YSX? YSX is a social media website, like instagram, tiktok, x, etc. Why Make This? It’s fun. Added: Register Page Log In Page Sidebar Navigation Reel Creation Custom Logo Backend UI Redirects based on status (logged in/not logged in) Dark/Light Mode"}]...
|
Title: Social Media Website (YSX) by @AuraMonster Title: Social Media Website (YSX) by @AuraMonster | Stardance
Devlogs:
First Devlog for YSX What is YSX? YSX is a social media website, like instagram, tiktok, x, etc. Why Make This? It’s fun. Added: Register Page Log In Page Sidebar Navigation Reel Creation Custom Logo Backend UI Redirects based on status (logged in/not logged in) Dark/Light Mode
Second Devlog for YSX Social Media Website What is YSX? A social media website. Changes: Added form to post (no built-in recorder) Added Backend to store posts information Added Feed page (Holds all posts) Added Likes feature Added Backend for Likes Log Out and Delete feature added (Incomplete) Mobile support built in Fixed text going under post instead of on top. Added reel snapping Added placeholder incase of no posts
Third Devlog for YSX Social Media Website What is YSX? It is a social media website similar to websites like X, instagram, tik tok, etc. Changes: Added changelog section Chatting UI layout complete Chatting backend in progress Worked on UI Style Changes Made Chatting UI layout unique to YSX and no other social media website.
Fourth Devlog of YSX Social Media Website Changes: Layout positioning UI design Instead of Relying on built in auth, created a synchronized table for extra features. New Features: Added and Completed Create Chat/Conversation Completed Backend to create chat In Progress: Messaging screen Sidebar Trigger fixed position Planned Features (Subject to change): Profile image changeable Chatting completion Likes/Dislikes feature on posts Comment Feature Share Feature Account and setting pages More undecided…
Fifth Devlog of YSX Social Media Website Changes: None New Features: Typing messages now works Backend added for Messaging Both users get messages and are automatically added to a conversation if one users starts it. In Progress: Account page Settings Page Future Things (To-Do list): Add attachments to messaging Add delete button to Posting Make a posts/reels algorithm Add User status on messaging page More (Subject to change)
Sixth Devlog for YSX Social Media Website Changes: Chat Input styling Changed Messages styling Changed New Features: You can now attach small images/videos to chat Backend resolved for images/video attachments Mobile Support for chatting In Progress: Account Profile Picture changing being able to attach large files Account Banner Picture changing Account Page Settings Page Future Features (Subject to Change): Add comment, share, and like/dislike on posts Post editing Changelog editing upon release Admin Features Featured Posts Status for chatting Continually add mobile support for upcoming features
Seventh Devlog for YSX Social Media website Changes: Multiple bugs were fixed Loading Screens added for only a few pages New Features: Notifications now work! (This took me a long time and lots of frustration) Change description feature added In Progress: Banner change (frontend) Profile Picture change (frontend and backend) Settings Page Skeletons (loading pages) for other pages Future Plans (Subject to change): Being able to attach large files to chat (pushed off for later) Reels Algorithm Admin Features Post Editing Chat Editing Post likes, dislikes, messaging, share More
Eight Devlog for YSX Social Media Website Changes: Added a posts tag feature Heavy UI changes and Bug fixes New Features: Added Banner Change feature Added Profile picture change feature Added scoring system (AKA an algorithm that tracks what you watch) Account Page now complete! You can also now delete your account via the settings page In Progress: Chat Page down due to multiple errors (trying to fix) Algorithm bug fixes Future plans (Subject to change): New features to settings page Ability to attach large files to chat Admin features Posts’ like, dislike, comment, share (crucial for algorithm) More
Ninth Devlog for YSX Social Media Website Changes: UI Changes Chat Bug fixes New Features: Admin Features section now added! Frontend for Admin features Frontend Ban feature for admins In Progress: Chat UI revamp due to ShadCN (UI library) adding a message component Admin Features backend Ban backend Future Plans(subject to change): Being able to attach large files to chat Setting Page more features More loading pages Bug fixes More
Tenth Devlog for YSX Social Media Website Changes: Feed bug fixed and works again Liked button remains toggled even after refreshing the page Added a UI Sheet (from ShadCN) to comments button (Comments not finished) Switched from custom attachment style to using UI library’s attachment New Features: Ban Page (redirected when user is banned) In Progress: Comments Algorithm Chat Rework Feed Ban Expiry Being able to attach large files to chat Future Plans (Subject to Change): More features on Settings page Changelog upon release More (If you guys have any more ideas, I could use them!)
Eleventh and final Devlog for YSX Social Media Website :D Changes: Removed empty screen from home page Heavy UI Changes Added Search bar to create Conversation Share, Comment Added Dislike removed Scrapped some ideas (or will come next ship) Updated Changelog so that it fits release New Features: Home Screen got added You can Now comment and share Files now compress in Chat but takes longer for larger files background around your name if you are creator of the post and you commented on it. Project will be shipped out soon :) (Image is admin POV)
reship
Ships:
This is YSX! A social media website where you can do pretty much anything! This project took a lot of time because of all the complex code involved with it. Fortunately, UI libraries (Such as ShadCN and Radix UI) and frameworks (such as Next.JS), as well as AI and other stuff helped me overcome this. IMPORTANT NOTE FOR SHIPWRIGHTS: IF YOU WANT TO TEST ADMIN PLEASE DM ME ON SLACK (username: mdmutahhar24)....
|
1792993829.1901798
|
1793080229.1901798
|
|
56692
|
Signal Radius by @abhijeetmore | Stardance
|
abhijeetmore
|
0
|
61.26
|
0
|
[]
|
[{"post_id": 64417, "ts": "202 [{"post_id": 64417, "ts": "2026-09-08T19:43:22Z", "hours": 10.5389, "text": "Improved the graphics of the game a lot, somewhat 2.5D! fixed bugs simultaneously."}, {"post_id": 63919, "ts": "2026-09-07T23:24:06Z", "hours": 10.0331, "text": "added a lot of new features, finishing up the game design. Fixed a lot of bugs."}, {"post_id": 63289, "ts": "2026-09-07T01:07:42Z", "hours": 10.0167, "text": "Its a 20-level path game now. Start on the west. Follow the brown path. Finish at the cyan gate. Levels 1–3: walkers/rushers, bushes hide shades that pop when you get close. Level 4+: a Giant (stone colossus, own skin). The gate stays sealed until it falls. Later roads: faster, tankier, more bushes, then two Giants. Beat a road → pick a gift → next road. Beat 20 → The last gate opened. Upgraded the Main Menu with a better design."}, {"post_id": 62930, "ts": "2026-09-06T13:57:53Z", "hours": 9.4075, "text": "added 4 new guns and its mechanics, added new feature called Endless overworld terrain streams around you as you walk so No wall. also added Shift dash. added Echo wells added Brute drops added Static storms Lots of new features have been added."}, {"post_id": 62351, "ts": "2026-09-05T17:53:19Z", "hours": 8.6717, "text": "Improved the game design a lot. WASD move, mouse aim, hold click Space to fire the gun. 8-kill combo charges Signal. F or B-slot dumps a 7-second kill cone. Walkers, rushers, flankers, brutes. Waves get harder."}, {"post_id": 61703, "ts": "2026-09-04T19:00:43Z", "hours": 10.5753, "text": "Added new Mechanisms to the game (after each wave you can upgrade), added health bar, added wave counts. Next is distinctive UI/art design of the game. Updated the GitHub."}, {"post_id": 59260, "ts": "2026-08-31T23:06:47Z", "hours": 2.0153, "text": "Signal Radius is a top-down survival game — you defend a signal outpost with nothing but a beam of light you aim independently of movement, so anything outside it stays invisible until it’s already close. Got the core loop running today: movement, the vision-cone math, a chaser enemy that only takes damage while lit up, and a wave spawner. Still all placeholder shapes, no art yet, but the mechanic actually works — cone tracks the mouse, enemies spawn and close in, combat only lands on what’s inside the beam. Next: HUD, upgrade picks between waves, then art. You can try the game mechanic here : https://abhijeetmore.itch.io/signal-radius Concept sketch attached."}]...
|
Title: Signal Radius by @abhijeetmore | Stardance
Title: Signal Radius by @abhijeetmore | Stardance
Devlogs:
Signal Radius is a top-down survival game — you defend a signal outpost with nothing but a beam of light you aim independently of movement, so anything outside it stays invisible until it’s already close. Got the core loop running today: movement, the vision-cone math, a chaser enemy that only takes damage while lit up, and a wave spawner. Still all placeholder shapes, no art yet, but the mechanic actually works — cone tracks the mouse, enemies spawn and close in, combat only lands on what’s inside the beam. Next: HUD, upgrade picks between waves, then art. You can try the game mechanic here : https://abhijeetmore.itch.io/signal-radius Concept sketch attached.
Added new Mechanisms to the game (after each wave you can upgrade), added health bar, added wave counts. Next is distinctive UI/art design of the game. Updated the GitHub.
Improved the game design a lot. WASD move, mouse aim, hold click Space to fire the gun. 8-kill combo charges Signal. F or B-slot dumps a 7-second kill cone. Walkers, rushers, flankers, brutes. Waves get harder.
added 4 new guns and its mechanics, added new feature called Endless overworld terrain streams around you as you walk so No wall. also added Shift dash. added Echo wells added Brute drops added Static storms Lots of new features have been added.
Its a 20-level path game now. Start on the west. Follow the brown path. Finish at the cyan gate. Levels 1–3: walkers/rushers, bushes hide shades that pop when you get close. Level 4+: a Giant (stone colossus, own skin). The gate stays sealed until it falls. Later roads: faster, tankier, more bushes, then two Giants. Beat a road → pick a gift → next road. Beat 20 → The last gate opened. Upgraded the Main Menu with a better design.
added a lot of new features, finishing up the game design. Fixed a lot of bugs.
Improved the graphics of the game a lot, somewhat 2.5D! fixed bugs simultaneously....
|
1792922061.0325813
|
1793786061.0325813
|
|
131
|
WasFlash - A Flashplayer Implimentation in C++/Web WasFlash - A Flashplayer Implimentation in C++/Web by @Silverhoft | Stardance...
|
Silverhoft
|
0
|
61.13
|
0
|
[]
|
[{"post_id": 80252, "ts": "202 [{"post_id": 80252, "ts": "2026-10-16T22:41:11Z", "hours": 9.8989, "text": "WasFlash Devlog # 11.5 Alpha 3.1- Pre Release 4.5 Progress Update: ~ Sprite Parsing and preprocessing done for rendering functionality ~ Currently working on the implementation and actual rendering now… Notes: This serves as a midway point in a more extensive development stage - A real devlog will be posted soon, at a better stopping point."}, {"post_id": 76182, "ts": "2026-10-02T16:45:00Z", "hours": 6.0339, "text": "WasFlash Devlog # 11 Alpha 3.1- Pre Release 4 What I worked on today: ~ Started Work on sprite implementation. Notes: Hello everyone, it’s been quite a while, sorry about that. I am currently working on implementing sprites; it’s a lot of work and more difficult than anything else I’ve done for this project. I’m not sure if they will be done by the end of this, so I plan to ship this now, and possibly release another ship if I can finish it. I am very busy with my school’s performance of Les Mis; that is why this is a bit sparse. I appreciate your patience and hopefully we will have fully working sprites by the end of october. Agenda: - Work on sprite implimentation Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 36721, "ts": "2026-07-28T23:21:34Z", "hours": 1.88, "text": "WasFlash Devlog # 11 Alpha 3.1- Pre Release 3 What I worked on today: ~ DefineBitsLossless2 32Bit + 8Bit ARGB Support ~ Implimented Actual Alpha Pixel Rasterization Notes: Hello friends! I finally finished implementing Bitmaps, and I am very excited to port to WASM, and release the bitmaps release. I am planning on working on fonts and text next, and doing whatever else sprites will require. After which I will work on sprite animation, and a far more polished UI, as well as an official linux release. I have decided to name the first official release(And ship), Alpha 4.0 Anim. I feel that this represents the fact that adding sprites will make this a fully funtional flash animation player. After this, I plan to finish tag support, and try to work on some simple ActionScript, to get buttons and other simple functions working. And the end goal would involve a fully functional ActionScript Engine, and a fully implimented Flash Player replacement. Anyways, I hope you all have a good day, see you all next time! Agenda: - Impliment DefineBitsLossless2 Whats Next: - Create actual autobuild script for both WASM and Native Linux - Font Support + Other small sprite prerequisites - Sprite Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More Note: Image with brighter colors is 8Bit, and the one with the more nuanced colors is 32Bit"}, {"post_id": 34999, "ts": "2026-07-26T04:38:40Z", "hours": 9.8161, "text": "WasFlash Devlog # 10 Alpha 3.1- Pre Release 2 What I worked on today: - Implimented the following: ~ DefineBits2 + Corresponding Bug testing Files ~ DefineBits 3+4 + Corresponding Bug testing Files ~ DefineBitsLossless + Corresponding Bug testing Files, and custom image assemblers for speed. ~ Changed Zlib to Wuffs for much faster decomp times. Notes: Hello Friends, it’s been a while, and I really try to avoid 10 hour devlogs, but I really wanted a good real world testable result for bitmaps before I made one. The main reason being that next on the list is sprites, which will complete the animation stage of this project. Leading us to Alpha 4.0. Now I wanted to take the time to name each coming stage, as each one will be long, yet monumental. I am nearly done with bitmaps, and soon enough, I will be working on the grueling task of implementing the sprites. I think so far the most difficult task was shapes, because it required a very deep understanding of the SWF shape system, but sprites might be a close second. I really appreciate you guys’ support, even though there aren’t too many of you. I love this project, and I am so happy I get to express it here. Agenda: - Impliment DefineBitsLossless2 Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - In Progress - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 11762, "ts": "2026-06-19T04:34:27Z", "hours": 6.3311, "text": "WasFlash Devlog # 9 Alpha 3.1- Pre Release 1 What I worked on today: - Implimented DefineBits - Parsing and rendering ~ Updated Dependency Script to include libJPEGTurbo ~ Created 2 test SWF files using jpexs ~ Fixed major shape disappearing issue Notes: Hello Friends! I spent quite a bit of time on this, both parsing and processing bitmaps. So far we only have one working bitmap parser of 6, and that is the most bare bones one. There are some weird errors that can occur with the JPEG headers, but it is impossible to find SWF files with DefineBits, so I made my own, one without the error, and one with it. It currently works for both, which is great, and I am excited to see where I can take this project. I am so close to being ready for Sprite support. I just need to keep pushing through these tags. Thank you to anyone who’s been keeping up with this, for others, feel free to follow if you think this is cool. See you guys next time! Agenda: - Implement the other 5 DefineBits Types - Get EMScripten libJPEGTurbo Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - In Progress - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 9165, "ts": "2026-06-15T11:00:10Z", "hours": 0.8281, "text": "WasFlash Devlog # 8 Alpha 3.0 What I accomplished today: - MAJOR UPDATE! – NEW RELEASE – MAJOR UPDATE! - Fixed Morph Shape issues - Fixed wrong MorphShape Order - Fixed the Matrix Signing Error - This has been causing the shape warping - Optimized Rendering Packets - Updated Web Implementation Notes: Hello friends, My most recent Devlog may have reflected some distress, but I finally figured it out! The weird warping of shapes was caused by a bug in a script I wrote about 5 months ago, that I thought was solid. There was a signing error, so all numbers ended up unproportionately large if they were negative, because the first bit was being counted towards the value. With a quick change of 2 lines, it completely changed the look of animations. As for the color bug with morph shapes, there is no bug at all, in fact the morph shapes typically are used as templates for sprites. So if you see any odd colored shapes, that’s why :D. Lastly, for some reason morph shapes are interpolated in reverse when using Skia, so I simply reversed the inputs, and the morph shapes are working as intended. The final thing was updating the main tag processor to send render instructions in batches, not one at a time, as to reduce overhead. This is a tough project, and I have poured my soul into it, if you think it’s cool, please feel free to follow it! Anyways, see you guys next time! Whats Next: - Create actual autobuild script for both WASM and Native Linux - Some time a little less in the future… - Adding Sprite Support - Will take a very long time - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 9093, "ts": "2026-06-15T06:09:44Z", "hours": 6.4083, "text": "WasFlash Devlog # 7 Alpha 3.0 - Pre Release 3 What I worked on today: - Implimented DefineMorphShape’s - Still not fully working ~ Implemented MorphFillStyle Translator ~ Implemented MorphLineStyle Translator - 1 and 2 ~ Implemented MorphGradient Translator ~ Implemented DefineMorphShape to Shape Builder * ~ Fixed parsers to work with builders Notes: Hello friends, I did a lot of work in this long extended session! I decided that it would make sense to just convert the morph variants to the normal variants, and use my current framework to just build 2 shapes, and interpolate them. There were a lot of issues, because there are some odd SWF bugs that happen sometimes, and I thought they were my own errors, so I spent like 2 hours trying to get things working, and I just ended up putting in some fall back code, and got things working, but now there are some weird color bugs, so I need to work those out, but overall it seems to be working ok. It’s been a rough week, so I hope it gets a little easier(It’s not gonna be with sprites, but it is what it is). Anyways, thank you guys for following along, for anyone else coming across this, feel free to like this comment, and follow the project if you think it’s cool. See you guys next time! Agenda: - Fix odd color issues with morph shapes - Clean up parsing output - Update the website to use new update Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 6741, "ts": "2026-06-11T09:07:58Z", "hours": 5.9478, "text": "WasFlash Devlog # 6 Alpha 3.0 - Pre Release 2 What I worked on today: - Implemented Full DefineMorphShape Parsing - Currently not fully working ~ Implemented MorphFillStyle Parsing ~ Implemented MorphLineStyle Parsing - 1 and 2 ~ Implemented MorphGradient Parsing ~ Implemented SHAPE Struct Parsing ~ Implemented DefineMorphShape Parsing ~ Implemented DefineMorphShape2 Parsing Notes: Hello friends, as you can see, this Devlog is pretty long. This took around twice as long as ordinary Shape Styles, seen in DefineShape tags. This is because each DefineMorphShape tag contains a pair of each type of data for interpolation, rather than one set. For the most part this was just pretty tedious low level Bitmath operations, and a lot of nested structures. It wasn’t too bad, because I had a good reference from the original DefineShape structures, and just general experience, but yes, it was very tedious, and likely the least fun part of this process. Hopefully my next Devlog has a better timeframe, and parsing is working! Thank you all for stopping by, as always, please feel free to leave a comment with any questions you might have, or just feedback in general, as well as following and liking this post! See you all later! Agenda: - Get Parsing to a Functional State - Create a processor for Morph Shapes - Add rendering case for Morph Shapes Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 4777, "ts": "2026-06-08T08:29:50Z", "hours": 2.455, "text": "WasFlash Devlog # 5 Alpha 3.0 - Pre Release 1 What I worked on today: - Started Development Of DefineMorphShape tags ~ Created new SHAPE base structure ~ Set up all required structures for DefineMorphShape ~ Added DefineMorphShape to tags.h Notes: Hello friends, you may have noticed a different version type, “Pre Release”. This is simply an indication that this is not an official change, and is not implemented into the project. Pre Release Devlogs should tend to reflect 1-2 big changes, with a large majority of the content nested inside, as shown above. This Devlog serves to both announce the beginning of Morph Shape Development, and represent what to expect from Pre Releases. As a quick note to the fact that Morph Shapes were not even on the To Do list, I recently discovered that Morph Shapes were just as important as Sprites, when properly rendering animations. Anyways, though this one was short, thank you for stopping by, and feel free to check out my project, follow it, and like this post if you think it’s cool! See you all next time! Agenda: - Work on parsing for Morph Shapes - Create a processor for Morph Shapes - Add rendering case for Morph Shapes Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 2111, "ts": "2026-06-04T13:16:26Z", "hours": 1.9697, "text": "WasFlash Devlog # 4 Alpha 2.2.1 What I accomplished today: - Added even more optimizations to the shape processing - Implemented DefineShape4 support - Pushed Updates to Web - Updated Skia Git Clone - To prevent the deadly stack trace issue Notes: Hello friends, this session was very exciting! I was able to get DefineShape4 Shapes to render properly, and although it was a pain it looks really good! I had to kinda rework the processor a little bit, because DefineShape4 adds a few flags, but I already added LineStyles2 support, so it implemented well. I also got rid of the redundant line/fill storage, which was a small optimization, but still mostly noticeable. To end off the session, I changed the Skia commit hash, so we won’t need to deal with outdated headers. Whats Next: - Create actual autobuild script for both WASM and Native Linux - Some time a little less in the future… - Adding Sprite Support - Will take a very long time - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 1022, "ts": "2026-06-02T20:18:24Z", "hours": 1.4325, "text": "WasFlash Devlog # 3 Alpha 2.1.4 What I accomplished today: - Fixed scaling of canvas on website - Added anti-aliasing to smooth out animations on both web and native builds - Pushed web compiler flags to main build - Made Cinnamon Rolls Notes: Hello friends! I spent a lot of time trying to figure this one out, many hours were spent debugging this session. Originally the website was just plugging the file into the WASM binary, and re-scaling to output to make the output match the canvas size, but this would cause blurriness and distorted quality. The good thing about this is, because we actually have to build each shape, we can just tell Skia to draw the shapes bigger, so the scaling still produces a native shape, just with different dimensions. So I had to rework the way the scaling worked. I also added back anti-aliasing, because the optimizations worked so well, that we can run anti-aliased’ output at full speed! There wasn’t too much going on this time around. but it really made a big difference! Thank you all for being here, I really appreciate it! Please feel free to leave a comment, with any questions or feedback, and like this post if you think it’s cool, and follow the project, if you think it’s cool! Have a good day everyone! PS. The cinnamon rolls were yummy! Whats Next: - Adding DefineShape4 support + Port DefineShape4 to WebAssembly - Create actual autobuild script for both WASM and Native Linux - Some time a little less in the future… - Adding Sprite Support - Will take a very long time - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 400, "ts": "2026-06-01T19:45:39Z", "hours": 2.1522, "text": "WasFlash Devlog # 2 Alpha 2.1.3 What I accomplished today: - Added major optimizations to WebAssembly compilation - Revamped WasFlash official color scheme - Using the Catppuccin color scheme - Fixed some bugs with buttons + Added functionality to a few buttons - Updated logo with new color scheme Notes: Hello friends! I made some big differences to the look of the website, with a new logo, completely different color palette, and the general feel of the website. My original idea for WasFlash was a kind of cyberpunk theme, I spent countless hours adding little glowing effects, and these moving gradients, but I couldn’t shake the awkward feeling of it all. A flash emulator is old software, but it is by no means is it retro. I decided it was time to finally change it up, and I am so happy I did, because the website feels much cleaner, and well implemented. While pink and blue are my favorite gradient palette, cyan and green are a close second, and worked perfectly for this. Overall the website is much nicer on the eyes, and generally better to use! Finally I updated the popup to mention Stardance instead of Flavortown. Thank you for joining me today! Please feel free to leave a comment with what you think below, and like the project if you think it’s cool! Anyways, that’s all from me today, see you guys around! Whats Next: - Adding DefineShape4 support + Port DefineShape4 to WebAssembly - Create actual autobuild script for both WASM and Native Linux - Some time a little less in the future… - Adding Sprite Support - Will take a very long time - Adding Bitmap Support - Adding Jpeg + Font Support Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More Images"}, {"post_id": 191, "ts": "2026-06-01T07:02:35Z", "hours": 5.6261, "text": "WasFlash Devlog # 1 What I accomplished today: Debugging deadly stack trace error - Ended up being outdated headers from Skia Updating Skia headers to modern version Re-Added gradient shape fill support Added heavy optimizations for all locally built dependencies, for native Linux builds - Removes latency entirely Cleaned up loose files Notes: Hello friends, today was a little bit of a drag, given the fact that I just could not figure out what was causing this nonstop stack trace. I finally looked into Skia, and realized my headers were out of date with the actual program, so I had to update those, ultimately fixing the program entirely. I also took some time to add optimization, so much so, that there is now zero latency in both audible, and visual playback. Overall, this was a productive session, even though it took ages. Whats Next: Porting current version to WebAssembly - With similar optimizations Adding DefineShape4 support + Port DefineShape4 to WebAssembly Update Wasflash Website with new Catppuccin color palette Create actual autobuild script for both WASM and Native Linux - Some time in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More"}, {"post_id": 7, "ts": "2026-05-31T07:11:48Z", "hours": 0.3519, "text": "WasFlash has Officially Re-Started Development!"}]...
|
Title: WasFlash - A Flashplayer Implimentation in Title: WasFlash - A Flashplayer Implimentation in C++/Web by @Silverhoft | Stardance
Devlogs:
WasFlash has Officially Re-Started Development!
WasFlash Devlog # 1 What I accomplished today: Debugging deadly stack trace error - Ended up being outdated headers from Skia Updating Skia headers to modern version Re-Added gradient shape fill support Added heavy optimizations for all locally built dependencies, for native Linux builds - Removes latency entirely Cleaned up loose files Notes: Hello friends, today was a little bit of a drag, given the fact that I just could not figure out what was causing this nonstop stack trace. I finally looked into Skia, and realized my headers were out of date with the actual program, so I had to update those, ultimately fixing the program entirely. I also took some time to add optimization, so much so, that there is now zero latency in both audible, and visual playback. Overall, this was a productive session, even though it took ages. Whats Next: Porting current version to WebAssembly - With similar optimizations Adding DefineShape4 support + Port DefineShape4 to WebAssembly Update Wasflash Website with new Catppuccin color palette Create actual autobuild script for both WASM and Native Linux - Some time in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 2 Alpha 2.1.3 What I accomplished today: - Added major optimizations to WebAssembly compilation - Revamped WasFlash official color scheme - Using the Catppuccin color scheme - Fixed some bugs with buttons + Added functionality to a few buttons - Updated logo with new color scheme Notes: Hello friends! I made some big differences to the look of the website, with a new logo, completely different color palette, and the general feel of the website. My original idea for WasFlash was a kind of cyberpunk theme, I spent countless hours adding little glowing effects, and these moving gradients, but I couldn’t shake the awkward feeling of it all. A flash emulator is old software, but it is by no means is it retro. I decided it was time to finally change it up, and I am so happy I did, because the website feels much cleaner, and well implemented. While pink and blue are my favorite gradient palette, cyan and green are a close second, and worked perfectly for this. Overall the website is much nicer on the eyes, and generally better to use! Finally I updated the popup to mention Stardance instead of Flavortown. Thank you for joining me today! Please feel free to leave a comment with what you think below, and like the project if you think it’s cool! Anyways, that’s all from me today, see you guys around! Whats Next: - Adding DefineShape4 support + Port DefineShape4 to WebAssembly - Create actual autobuild script for both WASM and Native Linux - Some time a little less in the future… - Adding Sprite Support - Will take a very long time - Adding Bitmap Support - Adding Jpeg + Font Support Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More Images
WasFlash Devlog # 3 Alpha 2.1.4 What I accomplished today: - Fixed scaling of canvas on website - Added anti-aliasing to smooth out animations on both web and native builds - Pushed web compiler flags to main build - Made Cinnamon Rolls Notes: Hello friends! I spent a lot of time trying to figure this one out, many hours were spent debugging this session. Originally the website was just plugging the file into the WASM binary, and re-scaling to output to make the output match the canvas size, but this would cause blurriness and distorted quality. The good thing about this is, because we actually have to build each shape, we can just tell Skia to draw the shapes bigger, so the scaling still produces a native shape, just with different dimensions. So I had to rework the way the scaling worked. I also added back anti-aliasing, because the optimizations worked so well, that we can run anti-aliased’ output at full speed! There wasn’t too much going on this time around. but it really made a big difference! Thank you all for being here, I really appreciate it! Please feel free to leave a comment, with any questions or feedback, and like this post if you think it’s cool, and follow the project, if you think it’s cool! Have a good day everyone! PS. The cinnamon rolls were yummy! Whats Next: - Adding DefineShape4 support + Port DefineShape4 to WebAssembly - Create actual autobuild script for both WASM and Native Linux - Some time a little less in the future… - Adding Sprite Support - Will take a very long time - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 4 Alpha 2.2.1 What I accomplished today: - Added even more optimizations to the shape processing - Implemented DefineShape4 support - Pushed Updates to Web - Updated Skia Git Clone - To prevent the deadly stack trace issue Notes: Hello friends, this session was very exciting! I was able to get DefineShape4 Shapes to render properly, and although it was a pain it looks really good! I had to kinda rework the processor a little bit, because DefineShape4 adds a few flags, but I already added LineStyles2 support, so it implemented well. I also got rid of the redundant line/fill storage, which was a small optimization, but still mostly noticeable. To end off the session, I changed the Skia commit hash, so we won’t need to deal with outdated headers. Whats Next: - Create actual autobuild script for both WASM and Native Linux - Some time a little less in the future… - Adding Sprite Support - Will take a very long time - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 5 Alpha 3.0 - Pre Release 1 What I worked on today: - Started Development Of DefineMorphShape tags ~ Created new SHAPE base structure ~ Set up all required structures for DefineMorphShape ~ Added DefineMorphShape to tags.h Notes: Hello friends, you may have noticed a different version type, “Pre Release”. This is simply an indication that this is not an official change, and is not implemented into the project. Pre Release Devlogs should tend to reflect 1-2 big changes, with a large majority of the content nested inside, as shown above. This Devlog serves to both announce the beginning of Morph Shape Development, and represent what to expect from Pre Releases. As a quick note to the fact that Morph Shapes were not even on the To Do list, I recently discovered that Morph Shapes were just as important as Sprites, when properly rendering animations. Anyways, though this one was short, thank you for stopping by, and feel free to check out my project, follow it, and like this post if you think it’s cool! See you all next time! Agenda: - Work on parsing for Morph Shapes - Create a processor for Morph Shapes - Add rendering case for Morph Shapes Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 6 Alpha 3.0 - Pre Release 2 What I worked on today: - Implemented Full DefineMorphShape Parsing - Currently not fully working ~ Implemented MorphFillStyle Parsing ~ Implemented MorphLineStyle Parsing - 1 and 2 ~ Implemented MorphGradient Parsing ~ Implemented SHAPE Struct Parsing ~ Implemented DefineMorphShape Parsing ~ Implemented DefineMorphShape2 Parsing Notes: Hello friends, as you can see, this Devlog is pretty long. This took around twice as long as ordinary Shape Styles, seen in DefineShape tags. This is because each DefineMorphShape tag contains a pair of each type of data for interpolation, rather than one set. For the most part this was just pretty tedious low level Bitmath operations, and a lot of nested structures. It wasn’t too bad, because I had a good reference from the original DefineShape structures, and just general experience, but yes, it was very tedious, and likely the least fun part of this process. Hopefully my next Devlog has a better timeframe, and parsing is working! Thank you all for stopping by, as always, please feel free to leave a comment with any questions you might have, or just feedback in general, as well as following and liking this post! See you all later! Agenda: - Get Parsing to a Functional State - Create a processor for Morph Shapes - Add rendering case for Morph Shapes Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 7 Alpha 3.0 - Pre Release 3 What I worked on today: - Implimented DefineMorphShape’s - Still not fully working ~ Implemented MorphFillStyle Translator ~ Implemented MorphLineStyle Translator - 1 and 2 ~ Implemented MorphGradient Translator ~ Implemented DefineMorphShape to Shape Builder * ~ Fixed parsers to work with builders Notes: Hello friends, I did a lot of work in this long extended session! I decided that it would make sense to just convert the morph variants to the normal variants, and use my current framework to just build 2 shapes, and interpolate them. There were a lot of issues, because there are some odd SWF bugs that happen sometimes, and I thought they were my own errors, so I spent like 2 hours trying to get things working, and I just ended up putting in some fall back code, and got things working, but now there are some weird color bugs, so I need to work those out, but overall it seems to be working ok. It’s been a rough week, so I hope it gets a little easier(It’s not gonna be with sprites, but it is what it is). Anyways, thank you guys for following along, for anyone else coming across this, feel free to like this comment, and follow the project if you think it’s cool. See you guys next time! Agenda: - Fix odd color issues with morph shapes - Clean up parsing output - Update the website to use new update Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 8 Alpha 3.0 What I accomplished today: - MAJOR UPDATE! – NEW RELEASE – MAJOR UPDATE! - Fixed Morph Shape issues - Fixed wrong MorphShape Order - Fixed the Matrix Signing Error - This has been causing the shape warping - Optimized Rendering Packets - Updated Web Implementation Notes: Hello friends, My most recent Devlog may have reflected some distress, but I finally figured it out! The weird warping of shapes was caused by a bug in a script I wrote about 5 months ago, that I thought was solid. There was a signing error, so all numbers ended up unproportionately large if they were negative, because the first bit was being counted towards the value. With a quick change of 2 lines, it completely changed the look of animations. As for the color bug with morph shapes, there is no bug at all, in fact the morph shapes typically are used as templates for sprites. So if you see any odd colored shapes, that’s why :D. Lastly, for some reason morph shapes are interpolated in reverse when using Skia, so I simply reversed the inputs, and the morph shapes are working as intended. The final thing was updating the main tag processor to send render instructions in batches, not one at a time, as to reduce overhead. This is a tough project, and I have poured my soul into it, if you think it’s cool, please feel free to follow it! Anyways, see you guys next time! Whats Next: - Create actual autobuild script for both WASM and Native Linux - Some time a little less in the future… - Adding Sprite Support - Will take a very long time - Adding Bitmap Support - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 9 Alpha 3.1- Pre Release 1 What I worked on today: - Implimented DefineBits - Parsing and rendering ~ Updated Dependency Script to include libJPEGTurbo ~ Created 2 test SWF files using jpexs ~ Fixed major shape disappearing issue Notes: Hello Friends! I spent quite a bit of time on this, both parsing and processing bitmaps. So far we only have one working bitmap parser of 6, and that is the most bare bones one. There are some weird errors that can occur with the JPEG headers, but it is impossible to find SWF files with DefineBits, so I made my own, one without the error, and one with it. It currently works for both, which is great, and I am excited to see where I can take this project. I am so close to being ready for Sprite support. I just need to keep pushing through these tags. Thank you to anyone who’s been keeping up with this, for others, feel free to follow if you think this is cool. See you guys next time! Agenda: - Implement the other 5 DefineBits Types - Get EMScripten libJPEGTurbo Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - In Progress - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 10 Alpha 3.1- Pre Release 2 What I worked on today: - Implimented the following: ~ DefineBits2 + Corresponding Bug testing Files ~ DefineBits 3+4 + Corresponding Bug testing Files ~ DefineBitsLossless + Corresponding Bug testing Files, and custom image assemblers for speed. ~ Changed Zlib to Wuffs for much faster decomp times. Notes: Hello Friends, it’s been a while, and I really try to avoid 10 hour devlogs, but I really wanted a good real world testable result for bitmaps before I made one. The main reason being that next on the list is sprites, which will complete the animation stage of this project. Leading us to Alpha 4.0. Now I wanted to take the time to name each coming stage, as each one will be long, yet monumental. I am nearly done with bitmaps, and soon enough, I will be working on the grueling task of implementing the sprites. I think so far the most difficult task was shapes, because it required a very deep understanding of the SWF shape system, but sprites might be a close second. I really appreciate you guys’ support, even though there aren’t too many of you. I love this project, and I am so happy I get to express it here. Agenda: - Impliment DefineBitsLossless2 Whats Next: - Create actual autobuild script for both WASM and Native Linux - Adding Sprite Support - Adding Bitmap Support - In Progress - Adding Jpeg + Font Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 11 Alpha 3.1- Pre Release 3 What I worked on today: ~ DefineBitsLossless2 32Bit + 8Bit ARGB Support ~ Implimented Actual Alpha Pixel Rasterization Notes: Hello friends! I finally finished implementing Bitmaps, and I am very excited to port to WASM, and release the bitmaps release. I am planning on working on fonts and text next, and doing whatever else sprites will require. After which I will work on sprite animation, and a far more polished UI, as well as an official linux release. I have decided to name the first official release(And ship), Alpha 4.0 Anim. I feel that this represents the fact that adding sprites will make this a fully funtional flash animation player. After this, I plan to finish tag support, and try to work on some simple ActionScript, to get buttons and other simple functions working. And the end goal would involve a fully functional ActionScript Engine, and a fully implimented Flash Player replacement. Anyways, I hope you all have a good day, see you all next time! Agenda: - Impliment DefineBitsLossless2 Whats Next: - Create actual autobuild script for both WASM and Native Linux - Font Support + Other small sprite prerequisites - Sprite Support - Add a GUI to Native Linux Build - Finally Release for Native Linux Builds - Port for Windows and MacOS - Work on more tags in the future… Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More Note: Image with brighter colors is 8Bit, and the one with the more nuanced colors is 32Bit
WasFlash Devlog # 11 Alpha 3.1- Pre Release 4 What I worked on today: ~ Started Work on sprite implementation. Notes: Hello everyone, it’s been quite a while, sorry about that. I am currently working on implementing sprites; it’s a lot of work and more difficult than anything else I’ve done for this project. I’m not sure if they will be done by the end of this, so I plan to ship this now, and possibly release another ship if I can finish it. I am very busy with my school’s performance of Les Mis; that is why this is a bit sparse. I appreciate your patience and hopefully we will have fully working sprites by the end of october. Agenda: - Work on sprite implimentation Resources: If you are completely lost, here is a good place to learn a little more about what I’m doing: Learn More
WasFlash Devlog # 11.5 Alpha 3.1- Pre Release 4.5 Progress Update: ~ Sprite Parsing and preprocessing done for rendering functionality ~ Currently working on the implementation and actual rendering now… Notes: This serves as a midway point in a more extensive development stage - A real devlog will be posted soon, at a better stopping point....
|
1792511316.1022744
|
1793116116.1022744
|
|
16693
|
Evolve by @boredvoid | Stardance
|
boredvoid
|
1
|
61.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-10T07:42:22Z", "hours": 61.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This has been a hell of a ride and very interesting project to work on. Most challenging for me was all the shader work (normally my projects look meh at best xd). The project can be tested either in the browser on itch.io or downloaded there for all desktop platforms… Screenshots are in dev logs ( pls read I gave them a lot of love ((: ) and on itch!", "repo": "https://github.com/BoredVoidAter/Evolve", "demo": "https://boredvoidater.itch.io/evolve"}]...
|
[{"post_id": 44468, "ts": "202 [{"post_id": 44468, "ts": "2026-08-10T07:38:46Z", "hours": 5.0, "text": "Hi everyone, sorry for the long delay I’m in china rn so everything a bit difficult and I also lost ma laptop so I will be shipping this project early (updates to be expected so follow the itch if you are interested) Changes since last develop: finally tried implementing creatures and plants onto the planet generation which works for the most part now although the creature look a bit funny going up and down tiles… It’s been amazing I hope to participate in the next hack club event as well!"}, {"post_id": 35744, "ts": "2026-07-27T11:45:36Z", "hours": 7.0, "text": "Im baaaaaaaack! Lets go. I actually had the honor to go to an in person game dev event in NYC and even met Zack and some other amazing members of the hackclub team there, it was a blast. Anyways i also did some work on Evolve including some shader fixes for outlines (they didnt really look good on plants…), some general system fixes since the code base grew quite big and also isnt the most beautiful, fixed some IK issues that had been bugging me, implemented a lot of the #TODOs (: Anyways not really a lot of big new visual stuff so i just made a little animation of creatures and some plants hope you enjoy! (as always please test the game at https://boredvoidater.itch.io/evolve and tell me everything u got to say) byeee"}, {"post_id": 29625, "ts": "2026-07-16T18:00:56Z", "hours": 7.0, "text": "another big update this time, i noticed i was getting kinda lazy with the amount of devlogs per hours i promise ill do better first up is hormones: Adrenaline, Fear, and Aggression that the brain can hook up to. unlike normal math nodes that instantly flip on and off, these hormones smooth out over time so it is kinda like the memory nodes but they actually force the creature regardless of brain architecture to do specific stuff like turn away from everything, run faster, … second part: plants cus else creatures are all just carnivores. PlantDNA controls: branching depth, how many branches per node, Phototropism (fancy word for growing towards the light ) vs Gravitropism (gravity pulling branches down). meshes only get redone if there is substantial growth and ye, thas it do yall think of the chemical brain stuff? any ideas for other hormones or plant types i should add? let me know in the comments"}, {"post_id": 28848, "ts": "2026-07-15T12:08:44Z", "hours": 6.0, "text": "another big one this time added blinking eyes, moving mouths, eye movement just for some nice touch and then decided it’s finally time to give da animals a little bit of a brain. The system i decided on for now is a simple “neuronal network” kind of thing. I got a bunch of nodes like: sensor for vision/smell/time, math add/multiply/min/max/relu/…, memory basically just decaying values over time, actuators Move/Turn/Bite/Flee. these modules can then be linked up kinda like unity shader graph (thats why my ui look like dat lmao) the nodes are then connected via neurons that store a weight (which will later be adjusted via, who guessed it, Evolution). Addition of all the math nodes adds some complexity that i am quite a fan of. To recreate an idling cycle for example one could use a sin wave and time, … Anyways that’s all for now next up is probably instincts/hormones or sum else didnt decide yet. Any thoughts as always in the comments. Oh ye i also fixed webgl rendering via adressables (loading resources)."}, {"post_id": 28261, "ts": "2026-07-14T12:39:48Z", "hours": 5.0, "text": "Hello everybody, i was away for a week in kopenhagen (great place they got a bunch of cool animal museums as well and a trex head replica 1 to 1) but have finally returned. Now 1 of the 5h was spent on various bug fixes that i do not remember the others were spent on adding survivability stats. Up until know we only had weight, energy requirements and speed but now there is also attractiveness (eg a vibrant colored flower would have high atractiveness) and warning (also based on colors though also adapts per enviroment to fit in camoflauging into the same stat). then i added modular organs (eyes with different pupils, mouths with sharp teeth, no teeth or round teeth), snouts out of the same mouth shape, ears, … i also did some experiments with eyelid shapes but just landed on texturing a simple sphere since the 3d eyelids look like too much in my opinion (top left corner in devlog) what do you think"}, {"post_id": 20883, "ts": "2026-07-02T16:35:40Z", "hours": 4.0, "text": "A lot of changes in this one: Growth modifiers for regions like head, neck, abdomen, … give more granular simulation control over animals some new features like frills and scales new textures for various skin types like fur, feathers, scales, … me fighting with huge necks (see image ) next up i am gonna organs which im planning to make very universal using parametric 3d models"}, {"post_id": 20249, "ts": "2026-07-01T19:54:38Z", "hours": 3.0, "text": "I’ve been hard at work over the last few hours and made (a lot of) modifications: first i struggled with winding order for a solid hour before i just decided that i am not gonna win that fight (now i just don’t cull creature backfaces ), then i implemented muscles and fat which change weight and volume of limbs and as you might be able to see colors and textures for the skin, next up i also did some IK improvements ( @august pointed those out ), last but not least i added features like little spikes and scales. Also can we talk about how cute the starfish looks, its my favourite part about this project so far. all the creatures below are created with dna structures eg: (i’ll put the code here once i figured out how to format it nicely lmao) and animated proceduraly… (ignore the ape i made it a lil too fat )"}, {"post_id": 17772, "ts": "2026-06-28T18:23:43Z", "hours": 2.0, "text": "This one took quite a while but i finally got some meat on the bones: triangle winding order is a pain in the but soooo i’m just rendering front and back faces now , even more annoying is getting it to not twist with every single movement (still not fully working), still working on how the dna could sensibly define head shape since rn everything looks like megamind, UVs are next to tackle OH GOD PLEASE SAVE ME . Put ur favorite creature in the comments (as well as any feedback ofc xd)"}, {"post_id": 17439, "ts": "2026-06-28T06:51:43Z", "hours": 1.0, "text": "Work on IK is now nearly complete (for now ), now we move onto bigger any better things: putting meat n skin on the bones but first of all here’s some movies of stuff moving (the spider one is fixed dw)"}, {"post_id": 16237, "ts": "2026-06-26T11:43:13Z", "hours": 0.0, "text": "I’ve improved the IK through changes to: billateral limb distance (so far there was nothing in between for example 2 legs), timing adjustments, joint rotating planes, computed target body height and body center of mass, … Next up is animating limbs that aren’t legs! any feedback?put it in the comments (pretty please)"}, {"post_id": 15629, "ts": "2026-06-25T12:50:22Z", "hours": 1.0, "text": "FINALLLY starting work on Evolution with the first subject being animals. So far i’ve set up a DNA Structure that works in a bone like fashion with symmetry options. on the simulation layer these bone and thus resulting body shape will be represented like Position. Velocity, Mass,CenterOfMass,BoundingRadius, Height and prolly more that i didnt think of yet. As you may be able i’ve also tried my luck with IK with the FABRIK solver but so far yeaaaaaaaaaaaaah…."}, {"post_id": 15012, "ts": "2026-06-24T12:04:45Z", "hours": 0.0, "text": "Did a little more work on the water shader, i swear i’ll start with the Evolving part after this xd"}, {"post_id": 14937, "ts": "2026-06-24T08:34:42Z", "hours": 1.0, "text": "I’ve been working on an option to switch the layer to underwater since that is just as important as above water for us to see. Did quite a lot of work on the shader so now the above water terrain gets cut at sea level and its dirt color gets dithered into a fullscreen underwater shader with caustics and godrays, it definetly still needs imrpovement but its good enough for now"}, {"post_id": 14638, "ts": "2026-06-23T20:24:27Z", "hours": 1.0, "text": "This one is more of a cleanup where i finished some boring stuff so nothing that cool to showoff but i attached some screenshots. Also built the newest version of the game for all platforms (and web) and updated itch page. Feel free to give it a visit under https://boredvoidater.itch.io/evolve (:"}, {"post_id": 14536, "ts": "2026-06-23T17:58:01Z", "hours": 0.0, "text": "Aaaaaaaand another one about culling, this time the goal was to remove the particles from the river because, well, it looks bad. This took quite some time to solve but in the end i just calculate some spheres with diameter of river width and get rid of all particles in it"}, {"post_id": 14428, "ts": "2026-06-23T15:38:53Z", "hours": 0.0, "text": "Very quick and dirty one but i implemented particle culling since the particles would look really bad when zoomed out with the pixel art rendering…"}, {"post_id": 14396, "ts": "2026-06-23T14:47:09Z", "hours": 1.0, "text": "I’ve been working on some decorational particles on the terrain to make it loss less bland. These are however purely for visuals and not gonna be included in any evolution calculations (which i promise i’ll start doing at some point (: but for now i wanna finish the world generation, regarding that any ideas for what should be added to world gen in the COMMENTS!!)"}, {"post_id": 13713, "ts": "2026-06-22T14:11:42Z", "hours": 1.0, "text": "I’ve been working on the UI for a little bit which is a task i do not enjoy doing since i never like how it turns out. this time around the end result looks more like a cheap ai website than a good ui but oh well there will always be future possibility to make it better. Please put any ideas for making it look better in the comments Give it a play at: https://boredvoidater.itch.io/evolve I’d also be amazing if you’d check out my other devlogs if this project seems interesting to you"}, {"post_id": 13336, "ts": "2026-06-21T20:57:50Z", "hours": 1.0, "text": "i added rivers with width based on calculated flow and custom generated meshes. I am still thinking about another thing: in real life rivers sorta get momentum which causes them to cut trough terrain which i think would probably look a bit weird in my case but i still implemented the momentum but not the cutting so now sometimes rivers flow “up a tile” like a reverse waterfall… Not sure if i’ll keep that we’ll see"}, {"post_id": 11902, "ts": "2026-06-19T12:06:23Z", "hours": 0.0, "text": "I finally fixed the poles turned out i had my textures messed up and frozen water eg ice should also float ontop of the ocean ofc (: I also improved upon the water shader by reading depth and reconstructing the y pos difference from it"}, {"post_id": 11575, "ts": "2026-06-18T21:13:52Z", "hours": 1.0, "text": "improved the world generation with more interesting terrain with more variaty (stacked noise, different noise types, …) also imrpoved my simulation of humidity and made it get way colder towards poles, finally finished all the textures for the bioms and added a little water shader. Added camera movement and zooming to boot. thats it i belive, cyu in the next one"}, {"post_id": 10599, "ts": "2026-06-17T12:55:10Z", "hours": 0.0, "text": "the biomes are pretty much done, however i still got work to do regarding the biome simulation since what should be the poles is currently not ice biome but tundra in my generator (:"}, {"post_id": 10148, "ts": "2026-06-16T19:12:52Z", "hours": 0.0, "text": "Applying texture based on biome information (saved in uv’s so that we can still use srp batcher)"}, {"post_id": 10117, "ts": "2026-06-16T18:29:24Z", "hours": 1.0, "text": "have been spending some time on implementing my first attempt on landscape. landed on hex tiles since they are the easiest to simulate since movement in all 6 directions is the same distance and now spent some time visualizing the generated hex map"}, {"post_id": 7589, "ts": "2026-06-12T18:08:10Z", "hours": 1.0, "text": "I’ve finally finished the outline shader which is now looking a little bit unorganized but thats ok (: Also got some headache from the transparent rendering pass hogging my rendering textures since i didnt specifically declare which pass wants them which took quite a long while to figure out"}, {"post_id": 7074, "ts": "2026-06-11T21:00:12Z", "hours": 0.0, "text": "Highlight color is now detected based on sampling surrounding pixels and choosing closest based on death, also experimenting with light on outlines"}, {"post_id": 7049, "ts": "2026-06-11T20:18:17Z", "hours": 0.0, "text": "added a custom cell shader that can also use textures (black and white) to blend between colors and uses either only one color or textures based on shader keywords"}, {"post_id": 6996, "ts": "2026-06-11T19:02:05Z", "hours": 0.0, "text": "I’ve been working on a pixel perfect outline for this nice pixelized look and also shaded it according to surrounding colors instead of just black, it is based on a custom id texture and normals because i believe this is more reliable than just depth data. next up is cell shading"}]...
|
Title: Evolve by @boredvoid | Stardance
Devlogs:
Title: Evolve by @boredvoid | Stardance
Devlogs:
I’ve been working on a pixel perfect outline for this nice pixelized look and also shaded it according to surrounding colors instead of just black, it is based on a custom id texture and normals because i believe this is more reliable than just depth data. next up is cell shading
added a custom cell shader that can also use textures (black and white) to blend between colors and uses either only one color or textures based on shader keywords
Highlight color is now detected based on sampling surrounding pixels and choosing closest based on death, also experimenting with light on outlines
I’ve finally finished the outline shader which is now looking a little bit unorganized but thats ok (: Also got some headache from the transparent rendering pass hogging my rendering textures since i didnt specifically declare which pass wants them which took quite a long while to figure out
have been spending some time on implementing my first attempt on landscape. landed on hex tiles since they are the easiest to simulate since movement in all 6 directions is the same distance and now spent some time visualizing the generated hex map
Applying texture based on biome information (saved in uv’s so that we can still use srp batcher)
the biomes are pretty much done, however i still got work to do regarding the biome simulation since what should be the poles is currently not ice biome but tundra in my generator (:
improved the world generation with more interesting terrain with more variaty (stacked noise, different noise types, …) also imrpoved my simulation of humidity and made it get way colder towards poles, finally finished all the textures for the bioms and added a little water shader. Added camera movement and zooming to boot. thats it i belive, cyu in the next one
I finally fixed the poles turned out i had my textures messed up and frozen water eg ice should also float ontop of the ocean ofc (: I also improved upon the water shader by reading depth and reconstructing the y pos difference from it
i added rivers with width based on calculated flow and custom generated meshes. I am still thinking about another thing: in real life rivers sorta get momentum which causes them to cut trough terrain which i think would probably look a bit weird in my case but i still implemented the momentum but not the cutting so now sometimes rivers flow “up a tile” like a reverse waterfall… Not sure if i’ll keep that we’ll see
I’ve been working on the UI for a little bit which is a task i do not enjoy doing since i never like how it turns out. this time around the end result looks more like a cheap ai website than a good ui but oh well there will always be future possibility to make it better. Please put any ideas for making it look better in the comments Give it a play at: https://boredvoidater.itch.io/evolve I’d also be amazing if you’d check out my other devlogs if this project seems interesting to you
I’ve been working on some decorational particles on the terrain to make it loss less bland. These are however purely for visuals and not gonna be included in any evolution calculations (which i promise i’ll start doing at some point (: but for now i wanna finish the world generation, regarding that any ideas for what should be added to world gen in the COMMENTS!!)
Very quick and dirty one but i implemented particle culling since the particles would look really bad when zoomed out with the pixel art rendering…
Aaaaaaaand another one about culling, this time the goal was to remove the particles from the river because, well, it looks bad. This took quite some time to solve but in the end i just calculate some spheres with diameter of river width and get rid of all particles in it
This one is more of a cleanup where i finished some boring stuff so nothing that cool to showoff but i attached some screenshots. Also built the newest version of the game for all platforms (and web) and updated itch page. Feel free to give it a visit under https://boredvoidater.itch.io/evolve (:
I’ve been working on an option to switch the layer to underwater since that is just as important as above water for us to see. Did quite a lot of work on the shader so now the above water terrain gets cut at sea level and its dirt color gets dithered into a fullscreen underwater shader with caustics and godrays, it definetly still needs imrpovement but its good enough for now
Did a little more work on the water shader, i swear i’ll start with the Evolving part after this xd
FINALLLY starting work on Evolution with the first subject being animals. So far i’ve set up a DNA Structure that works in a bone like fashion with symmetry options. on the simulation layer these bone and thus resulting body shape will be represented like Position. Velocity, Mass,CenterOfMass,BoundingRadius, Height and prolly more that i didnt think of yet. As you may be able i’ve also tried my luck with IK with the FABRIK solver but so far yeaaaaaaaaaaaaah….
I’ve improved the IK through changes to: billateral limb distance (so far there was nothing in between for example 2 legs), timing adjustments, joint rotating planes, computed target body height and body center of mass, … Next up is animating limbs that aren’t legs! any feedback?put it in the comments (pretty please)
Work on IK is now nearly complete (for now ), now we move onto bigger any better things: putting meat n skin on the bones but first of all here’s some movies of stuff moving (the spider one is fixed dw)
This one took quite a while but i finally got some meat on the bones: triangle winding order is a pain in the but soooo i’m just rendering front and back faces now , even more annoying is getting it to not twist with every single movement (still not fully working), still working on how the dna could sensibly define head shape since rn everything looks like megamind, UVs are next to tackle OH GOD PLEASE SAVE ME . Put ur favorite creature in the comments (as well as any feedback ofc xd)
I’ve been hard at work over the last few hours and made (a lot of) modifications: first i struggled with winding order for a solid hour before i just decided that i am not gonna win that fight (now i just don’t cull creature backfaces ), then i implemented muscles and fat which change weight and volume of limbs and as you might be able to see colors and textures for the skin, next up i also did some IK improvements ( @august pointed those out ), last but not least i added features like little spikes and scales. Also can we talk about how cute the starfish looks, its my favourite part about this project so far. all the creatures below are created with dna structures eg: (i’ll put the code here once i figured out how to format it nicely lmao) and animated proceduraly… (ignore the ape i made it a lil too fat )
A lot of changes in this one: Growth modifiers for regions like head, neck, abdomen, … give more granular simulation control over animals some new features like frills and scales new textures for various skin types like fur, feathers, scales, … me fighting with huge necks (see image ) next up i am gonna organs which im planning to make very universal using parametric 3d models
Hello everybody, i was away for a week in kopenhagen (great place they got a bunch of cool animal museums as well and a trex head replica 1 to 1) but have finally returned. Now 1 of the 5h was spent on various bug fixes that i do not remember the others were spent on adding survivability stats. Up until know we only had weight, energy requirements and speed but now there is also attractiveness (eg a vibrant colored flower would have high atractiveness) and warning (also based on colors though also adapts per enviroment to fit in camoflauging into the same stat). then i added modular organs (eyes with different pupils, mouths with sharp teeth, no teeth or round teeth), snouts out of the same mouth shape, ears, … i also did some experiments with eyelid shapes but just landed on texturing a simple sphere since the 3d eyelids look like too much in my opinion (top left corner in devlog) what do you think
another big one this time added blinking eyes, moving mouths, eye movement just for some nice touch and then decided it’s finally time to give da animals a little bit of a brain. The system i decided on for now is a simple “neuronal network” kind of thing. I got a bunch of nodes like: sensor for vision/smell/time, math add/multiply/min/max/relu/…, memory basically just decaying values over time, actuators Move/Turn/Bite/Flee. these modules can then be linked up kinda like unity shader graph (thats why my ui look like dat lmao) the nodes are then connected via neurons that store a weight (which will later be adjusted via, who guessed it, Evolution). Addition of all the math nodes adds some complexity that i am quite a fan of. To recreate an idling cycle for example one could use a sin wave and time, … Anyways that’s all for now next up is probably instincts/hormones or sum else didnt decide yet. Any thoughts as always in the comments. Oh ye i also fixed webgl rendering via adressables (loading resources).
another big update this time, i noticed i was getting kinda lazy with the amount of devlogs per hours i promise ill do better first up is hormones: Adrenaline, Fear, and Aggression that the brain can hook up to. unlike normal math nodes that instantly flip on and off, these hormones smooth out over time so it is kinda like the memory nodes but they actually force the creature regardless of brain architecture to do specific stuff like turn away from everything, run faster, … second part: plants cus else creatures are all just carnivores. PlantDNA controls: branching depth, how many branches per node, Phototropism (fancy word for growing towards the light ) vs Gravitropism (gravity pulling branches down). meshes only get redone if there is substantial growth and ye, thas it do yall think of the chemical brain stuff? any ideas for other hormones or plant types i should add? let me know in the comments
Im baaaaaaaack! Lets go. I actually had the honor to go to an in person game dev event in NYC and even met Zack and some other amazing members of the hackclub team there, it was a blast. Anyways i also did some work on Evolve including some shader fixes for outlines (they didnt really look good on plants…), some general system fixes since the code base grew quite big and also isnt the most beautiful, fixed some IK issues that had been bugging me, implemented a lot of the #TODOs (: Anyways not really a lot of big new visual stuff so i just made a little animation of creatures and some plants hope you enjoy! (as always please test the game at https://boredvoidater.itch.io/evolve and tell me everything u got to say) byeee
Hi everyone, sorry for the long delay I’m in china rn so everything a bit difficult and I also lost ma laptop so I will be shipping this project early (updates to be expected so follow the itch if you are interested) Changes since last develop: finally tried implementing creatures and plants onto the planet generation which works for the most part now although the creature look a bit funny going up and down tiles… It’s been amazing I hope to participate in the next hack club event as well!
Ships:
This has been a hell of a ride and very interesting project to work on. Most challenging for me was all the shader work (normally my projects look meh at best xd). The project can be tested either in the browser on itch.io or downloaded there for all desktop platforms… Screenshots are in dev logs ( pls read I gave them a lot of love ((: ) and on itch!...
|
1792878750.0447795
|
1793742750.0447795
|
|
22772
|
Universal Existence by @JustCoding8790 | Stardance
|
JustCoding8790
|
1
|
61.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-12T05:36:44Z", "hours": 61.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Universal Existence is a 2d platformer with many mechanics that will be explored more in-depth and combined with other mechanics to make many interesting levels. Platform through 12 levels of the UPC (Universal Platforming Course) in the game’s demo. You can also get tips from Domainus, the creator of the universe and the manager of the UPC (Universal Platforming Course), or get yelled at for dying to a stationary triangle for the 8th time. There’s four unique difficulties, with your difficulty being adjusted to try and match your skill level. I found it challenging to make certain elements of the game like the settings menu (like the speedrun timer) and a couple of enemies (like the mushroom, which was hard to figure out when the player jumped on top of it and when it killed the player [I ended up having to adjust hitboxes several times]). I’m pretty proud of how I managed to make some pretty fun levels, such as level 6 (for providing just enough space for it to be possible, but still somewhat challenging) and level 11 (which involves knowing when to use each blaster and even has a cool level skip if you discover it [hint: one of Domainus’s voicelines reveals part of it]). Where to Play If you have a windows pc, you can download the game from the itch.io link below, if you want an executable. Just make sure to unzip the ZIP folder and open the .exe file (not the .console or .pck). Otherwise, you can play the game on any computer by clicking “Run Game” on itch.io. Keep in mind the game can be hard, especially during levels 9-12. Good luck! Also, if you have a controller, feel free to test it to see if it works with the game. Currently, the XBOX controller is partially supported (controllers cannot navigate the pause menu, but you can open it up by pressing Esc on keyboard or Menu button for Xbox controller). If you don’t want to play the game, here’s a 100% playthrough with all apples and secret melons collected. https://youtu.be/cXItOPMkMOI", "repo": "https://github.com/JustCoding8790/Universal-Existence", "demo": "https://justcoding8790.itch.io/universal-existence"}]...
|
[{"post_id": 78009, "ts": "202 [{"post_id": 78009, "ts": "2026-10-09T05:33:43Z", "hours": 9.9939, "text": "Devlog #10: Music, Rebalancing, and “Voicelines” This will most likely be the final devlog. At least for Stardance. There’s so much more that will happen after Stardance ends (more info later). Playtester Feedback and Rebalancing I’ve gotten feedback from multiple playtesters (all of them are listed in the credits), and they’ve all said that there’s a big difficulty spike between levels 8 and 9 (or 10), so I had to make the levels easier by removing enemies and spikes, along with nerfing enemy hp, bullet fire rates, and bullet speed. I also had to adjust level 5 due to how small the bottom section is, which gives you barely any room to avoid the snails. For any playtesters who are reading this right now, thanks for playtesting and I hope you recover from your plant PTSD (from your 20-50+ deaths). “Voiceline” System and Adaptive Difficulty If only the dialogue was actually voiced. I don’t have anyone to voice act for me right now. But anyways, this voiceline system reacts to every level you enter and every death. It’ll either give tips on how to deal with whatever you’re facing or simply mock you. Here’s a couple of sample lines: “…And you’re having trouble with a stationary triangle in the ground. I repeat… A STATIONARY TRIANGLE IN THE GROUND!” (8th death to spikes) “Looking for an easy way to counter snails? It’s called ‘double-jumping’.” (3rd death to snails) “Outplanted by the plants…” (7th death to plants) “Those bees sure do sting… But they won’t last long when you ‘sting’ them back.” (1st death to bees) It will also change your difficulty for you when you’ve died too few or too many times on one level. I’m planning on giving the commentator a name. Maybe Domainus? We’ll find out later if it becomes canon or not. New Music Licensing Agreement Remember how in a previous devlog, I found out I couldn’t use Rush’s music for my game due to legal issues? That’s been fixed now, as both of us along with our parents signed an agreement. It’s not formal or anything, but from what I’ve researched, it should do the trick for now. After everyone signed the agreement, I added some new tracks to the BGM player: Beehold the Bullets (boss battle theme) UPC Test: PASS (boss victory theme) Void Hub (plays after beating the demo) Note: The gameplay footage below does not have audio, but the actual game will. Minor Details and Changes Last devlog, last changes… Added credits with playtesters, attribution, assets, and composers Updated README (still needs a slight update, will finish before I ship) Fixed audio sliders in settings menu starting at wrong positions Added “Reset All Settings” Added speedrun timer for Speedrun Mode in settings Stopped leftover bullets from killing you Started off player on Ultra Hard instead of Extreme on game startup Future of Universal Existence I plan to post future devlogs in a Discord server for anyone that’s interested. You’ll also be able to sign up to playtest future versions of the game and give feedback, along with participating in server events. You can join here: https://discord.gg/Ztc37dcu9 This link will expire soon, which is why I’ll paste another one later in the comments. Hope to see you around!"}, {"post_id": 62673, "ts": "2026-09-06T04:52:57Z", "hours": 6.9667, "text": "Devlog #9: The Last Challenge and Stat Board We’re nearing the end of this part of the journey. I can’t believe this is only the demo part of the entire game that I’m making. Demo Boss Fight This is the last challenge of the game. Like I said last devlog, I don’t want to spoil the boss fight, and I don’t see any way to censor text for Stardance. So here’s a Google Doc for those who’d rather just see the spoilers rather than find out by playing the game’s demo. I’m pretty happy with the boss fight as it is. I don’t believe I’ll need to rework it (except for balancing purposes). I did die a lot on the boss fight, though (19 deaths). Stat/Death Board At the end of the demo, I decided to let the player see their stats on the board, including the amount of time it took for them to finish the game, how many times they died to specific causes, etc. I did end up having to globally track every death and the cause of each death using an array (if you don’t know what that is, think of a buffet where you get to decide how much of each of the foods are in each area). Copyright Problems I recently learned more about copyright policy and it turns out I cannot use music my friend Rush made, even though he gave verbal permission. We appear to need some sort of agreement as well. But I don’t want to get too deep into the legal stuff, so I’m going to have to make my own track to replace the current one soon. Honestly, I might just attempt to use a CC0 track since I’m running out of time currently. Because of this issue, I muted the audio of the gameplay footage below too. Minor Details and Changes Not as much going around this week, but nevertheless, here’s most of the small changes: Added apples to all difficulty variants of levels 1-9 and 1-11 Added disappearing animation for the player that plays after the death animation (overall looks better in my opinion) Upcoming Additions Of course, there’s work that still needs to be done. First of all, I haven’t finished the settings menu yet (if you remember from devlog 6). There’s also some tracks in the game I need to make (for the boss fight, the area ambience, etc) And most importantly, we can’t forget about the commentary that occurs when you die to specific traps/enemies (which I’ve already started). I’m hoping I can release this game by late-September at the latest, along with working on some Stardance missions. I’d like to maximize my coding time before Stardance ends, despite the fact I’m busy with all the homework I’m getting. :("}, {"post_id": 53393, "ts": "2026-08-23T22:27:54Z", "hours": 6.8183, "text": "Devlog #8: Giving Everyone Guns and Bullets (Part 2) Note: See Part 1 for context if you haven’t already. I think I’ll be done with guns for a while. After completing the first area, you most likely won’t see them again until one of the last levels of the second area (maybe not even until the next boss fight). Also, after rebalancing the harder difficulties to actually serve a good challenge, playtesting my own game took 2x longer than I usually would, as I’d keep dying to certain enemies or traps. But this game isn’t about breezing through easy levels, so… Guns for Plants and Bees These enemies are simple. Plants stay in one position, firing at random intervals. Their firerate is random and slower (average of 3.75/2.75/2/1.25 seconds), but their health is much higher compared to a Trunkwalker ( 65/75/90/100 health). Bees move around in the air, firing stinger bullets downwards. They fire often (average of 2.5/2/1.5/1 second[s]), but their health is decreased to make up for it ( 12/15/16/20 health). Since these bees will be above the player, I made an auto-firing gun that fires upwards. I decided that manual guns will instead show up in the next area after the boss. (That means the manual guns won’t be in the demo. Sorry…) These enemies show up in levels 1-10 and 1-11. Minor Details and Changes I spent a lot of time on major changes this week, but that doesn’t mean I didn’t spend time on minor problems. Here’s the small changes I made: Added Hard, Extra Hard, and Ultra Hard difficulty variants to level 1-9 Trunkwalker firing interval is more random instead of being fixed (to me, it just looks weird when they all attack at the same time) Rebalanced easier levels so they actually can somewhat serve a good challenge Resized hitbox of Mushrooms (so player can now properly die to a Mushroom when not bouncing on top of them) Moved melon in level 1-5 (for Ultra Hard and Extreme variants) to a harder-to-reach location (as it was too easy to reach the melon previously) You might think rebalancing levels would be a major change, but I honestly didn’t change much with each level. I mainly just moved traps/enemies around. Upcoming Additions Most of the time next week will be spent creating the first area’s boss fight. I won’t tell you what I plan to make for the boss fight, though. That would spoil everything. If you do want to view the spoilers, though I’ll provide a link to a Google Doc on the next devlog detailing everything about the upcoming boss fight. I suspect this boss will take more than 6 hours to make, so I’ll split it all into two devlogs (and also two weeks). Not much to say otherwise, though. Enjoy my (pretty horrible) gameplay below!"}, {"post_id": 45441, "ts": "2026-08-11T21:49:06Z", "hours": 5.0842, "text": "Devlog #7: Giving Everyone Guns and Bullets (Part 1) Honestly, I was intending to make something similar to a space shooter, where enemies come in from off-screen, but I’m still happy with what I ended up making. This devlog is a bit longer than usual, so feel free to just simply look at the video for explanation if you’re running short on time. Guns for the Player Starting with the player, remember how I wanted to make a mechanic that doesn’t just involve enemies? I ended up coming up with giving the player a gun (or, well, a blaster). I planned out the different types of guns the player will be able to equip. There will be two types of guns: auto-firing, which will automatically fire bullets every 0.2 seconds, and manual, which will only fire when the player presses a certain button, but it deals more damage per bullet (there’s a longer cooldown in between bullets, though, so better be precise). There are also three variants for each type that determine which direction the gun can fire: upwards, downwards, or horizontally. I may plan out more variants later. (But of course, this game isn’t all about guns, is it?) I implemented the auto-firing horizontal gun at the time of writing this devlog. And for the first time ever, I finally decided to make my own art instead of just using CC0 assets from Pixel Adventure. (Wild, right?) Not the best, but it’ll work for now. I don’t want to spend too much time on all the minor details to the point where I barely get anything done (like the settings menu, cough cough [refer to devlog 6 if you’re new here]). Guns for the Enemies It would be unfair if the player just simply had a significant advantage over the enemies, so I also gave guns to the enemies. Well, only a certain type of enemy, that is… Meet the Trunkwalker, a walking, square-like tree trunk part that fires bullets through its nose (aka the remains of a sliced tree branch). It can only fire a bullet horizontally every 3/2/1.5/1 second(s) depending on the difficulty ( Hard/Extra Hard/Ultra Hard/Extreme ). They also move around until they hit a wall, just like snails and mushrooms. I do find myself dying more to when they stop to shoot bullets rather than the bullets themselves. A bit concerning, but I find that it adds to the difficulty well, so… Basic Damage and Health System Anyways, there’s a reason why the player has a gun in the first place. To defeat enemies, of course. I gave the Trunkwalker a set amount of 25/30/35/40 health based on the difficulty. A bullet from an auto-firing gun deals 4 damage, so each Trunkwalker can be defeated after taking 7/8/9/10 hits. (There, I did the math for you. Happy?) Minor Details and Changes There’s still plenty to go around here. Here’s the rest of the changes: Reorganized folder structure, organized assets and scenes into subfolders Added a sound effect for when the enemy get hit by a bullet (made by tapping my laptop) Added extra frames to the mushroom’s death animation (they disappear in a similar fashion to collected fruits) Upcoming Additions I’ll have to continue all of this work in part 2. In other words, I’ll also have to make the other variants of guns, along with some more mechanics/enemies and levels. I also feel like the levels are too short and easy and don’t provide a proper challenge, mainly for the harder difficulties, so I might consider rebalancing the levels. Things are looking much better than last time. School is starting soon, however, so I may start to slow down on progress. I still think I can get the game’s demo done before Stardance ends, though. Until next time, jumpers! (And yes, I just recently came up with that name. I don’t know what else to call players without calling them “players”.)"}, {"post_id": 38618, "ts": "2026-08-01T03:24:24Z", "hours": 6.4911, "text": "Devlog #6: Underestimating the Work of a Settings Menu (for a beginner, at least) Yep, I apparently had a lot more to learn about UI, audio, and controller settings. I eventually decided to stop working on the settings menu. If there’s one thing I can take away from this experience, it’s that I should probably not focus too much on a settings menu over the actual gameplay. Audio Settings I filled the left side of the settings menu with sliders for controlling the audio volume. I used audio buses in Godot in order to separate audio into 3 main categories: Music, Sound, and Voice. Of course, there is nothing for the voice audio bus, since I haven’t recorded any voice lines yet. (I’ll get to that later!) Controller Deadzones and Assist Settings The right side contains buttons that open submenus. Players can now control the game speed and controller joystick deadzones, along with being able to practice a level as much as they want with Training Mode. I decided to save controller sensitivity, key rebinding, credits, and language translating for later, due to how much time it took to figure out what should happen with submenus in multiple cases. I know, doesn’t seem like it should take that much time, but I have to consider multiple cases in which the settings UI will stay visible and block the actual pause menu, which occurs when the player resumes and pauses again without exiting out of the UI. There’s also another thing I have to worry about… HSlider Bug When I reopen a menu after exiting out of it, the sliders seems to reset back to where it originally was when the game started. Thankfully, this issue doesn’t affect the actual gameplay, but still, it’s a visual bug that might confuse players. I managed to fix this with the audio sliders, but I haven’t done the same with the controller settings and assist settings. I’ll try to patch it next week. Minor Details and Changes There’s not much this week, sorry. (I regret spending so much time on the settings menu…) Upcoming Additions I want to start focusing on making more levels soon, but I don’t want to reuse the same mechanics from the levels I already made. I already made multiple enemies, so I want to start making a mechanic that involves more of the player, like a new action that can be enabled upon collecting something in a level. I’ll also have to come up with ideas for the area’s bossfight (yes, there are bosses in this game), since I feel like the area is almost complete. As for the settings menu, I’ll pick it back up in about a month. A not-so-productive week, I know. Hopefully I can do better."}, {"post_id": 33177, "ts": "2026-07-22T20:59:30Z", "hours": 4.6356, "text": "Devlog #5: New Mushroom Enemy + More Level Variants New Mushroom Enemy Yep, a new enemy. I had scrapped a few levels recently, and to replace them, I didn’t want to make another similar level. Mushrooms move in a certain direction until they hit a wall, causing them to move the other way and repeat this cycle. Unlike snails, though, these enemies can be defeated by jumping on top of them, giving you an extra jump boost (just like those Goombas from Super Mario Bros). Now I could’ve just brought back a scrapped level, slapped them in, and called it a day. But that seems too boring. So I instead thought about the new mechanic of being able to defeat the enemy. And that’s how I came up with using mushrooms over a spike pit to bounce your way to the end of a level. I added variants for each difficulty as well, adding more mushrooms on lower difficulties. Speaking of variants… Finished Level Variants I finished all level variants for each difficulty. I mainly did this by adjusting enemy speed and adding/removing spikes based on the difficulty. Of course, I’m going to have to do this a lot more often. The demo is going to be longer than 8 levels, and the demo is nothing compared to what I plan to release in the full game. Minor Details and Changes Added new level template Shrunk player hitbox Played and looped a track as a BGM player Imported image assets for upcoming enemies Reimported music assets New “Sign Guy” track Upcoming Additions This time, I will make the settings menu for sure, along with making another enemy for the next few levels. I plan to take no longer than 4 hours. Until then, see you soon!"}, {"post_id": 29831, "ts": "2026-07-16T23:37:59Z", "hours": 6.0467, "text": "Devlog #4: New Difficulties + UI and OST Changes (Part 1) Things are starting to look polished. I can probably get the game’s demo done by around late July. The deadline isn’t 100% confirmed, though. Four Brand New Difficulties I made four new difficulties. These will adjust how much room for error you have and the number of threats in each level. Hard : For those who have no experience and just want to have fun. No shame if this applies to you. Extra Hard : For rusty jumpers seeking to improve their skills. A casual, balanced experience. Ultra Hard : For all intermediate jumpers looking for a challenge. Serves as a fairly difficult journey. Extreme : For the most skilled jumpers of the universe. Not for the faint of heart. As you can see, there are only hard difficulties in this game. This is to remind you that even on the lower difficulties, it can be a hard game. You might not think so at first, but as more mechanics are introduced, you may find yourself getting stuck on certain levels. As shown in the recording below, for the first few levels, since they don’t contain much except platforms and fruits, I couldn’t do much except add and extend platforms for lower difficulties. Pause Menu In order for difficulties to be selected, I made a pause menu. I customized the UI and added multiple animations. I did end up having to redo the animations, however, as I not only realized there was UI overlap between the main pause menu and the difficulty description, but I also received a lot of warnings involving something called AnimationMixer, and I couldn’t find a way to get rid of them until I redid everything. I also linked the difficulty chosen in the menu to the game and added a small description for each of the 4 difficulties. New OST Yep, there’s music being composed for the game now. Rush (from Discord), a friend of mine, is helping out on creating good music for my game. I haven’t coded it so it plays in-game yet, but I’ve imported the assets in. I will upload the OST to a youtube channel after I make enough songs so you can listen to it whenever you want. (Keep in mind listening to the OST or checking the title may lead to spoiling the game demo.) Minor Changes I organized assets into more folders, but this later led me to encountering some issues involving paths to certain nodes not existing, which caused errors to appear. The issue mainly involved sound nodes like the jump sound and the death sound. Eventually, I reuploaded the sounds to each AudioStreamPlayer2D node. Additionally, the first level’s dialogue font (level 1-1) has now been changed to match with the other levels. Upcoming Additions Within the next 5 hours I spend on the game, I’m hoping to add variants for each of the remaining levels for each difficulty, along with making a background music player. I also need to add a settings menu for the player and fix multiple issues like the floating player bug (seen at the end of the recording below)."}, {"post_id": 27980, "ts": "2026-07-13T22:52:22Z", "hours": 5.9472, "text": "Devlog #3: Movement and Level Additions I’m back on Universal Existence now. I’ve spent most of the time so far on tweaking my movement system. It may seem unreasonable for me to do such at first, but believe me, there’s some important additions I needed to make, such as: Adding jump buffering and coyote time Adjusting speed, jump power, and gravity based on player size (to make bigger levels and as the framework for some size-changing mechanics) Boosting jump power for smaller sizes (since the player’s jump felt too heavy when small; you probably will especially understand this if you played other platformer games) The movement system changes took a lot longer than I expected, as I had to go through all 8 levels every time I made a change to make sure it was possible to progress. I’ve also added spikes to my game, and I created a few new levels containing them, along with remastering the old levels to make them harder. Here’s a list of other changes: Changed font for better readability Set strech mode to viewport so the game will adjust its size based on the current window size The recording below shows gameplay footage of the harder levels (collecting all melons and almost every apple). Don’t worry, I’m planning on adding a settings menu to allow you to change the difficulty to your liking, which will change the level to another variant."}, {"post_id": 16475, "ts": "2026-06-26T20:24:35Z", "hours": 5.4847, "text": "Devlog #2: More Levels and Mechanics Sorry for releasing a devlog so late. My internet went down as I was writing this. I added 5 more levels, with working exits leading to the next level, along with panels showing text that the antagonist of this game says (might turn the dialogue into voice lines). I also added a melon collectible, which is worth more points, but slightly harder to reach. Everything is going well so far. Down below is a video of me playing through the first few levels (and showing some secrets). Also, I ended up simply using the name Universal Existence instead of Simulation Overgrowth. Anyways, you might’ve noticed that I have another ongoing project. Don’t worry. I’ll still work on this game. For now, though, I want to improve my Godot skills to be able to make not only the mechanics I want to include in Universal Existence, but also more complex games in the future."}, {"post_id": 14030, "ts": "2026-06-23T00:26:55Z", "hours": 3.2917, "text": "Devlog #1: Learning about Godot + Double-Jumping and Air-Jumping I watched a series of tutorials on making a platformer in Godot and followed along, but I eventually decided to also implement my own features too. I ended up making a double-jump mechanic. In the process, I also accidentally made an air-jump mechanic, where I can also jump while falling. I hope to expand my level to include more content in the next 3 hours of work. Also, fun fact here, when I started this project, I originally named it Universal Existence, but I ended up changing the name to Simulation Overgrowth (and I might even change it again later on). I soon realized, though, that if I renamed the folder, Godot would prevent me from opening the game, as it doesn’t recognize the renamed folder as the actual game folder. Oops… (I’ll find a way to fix it in the next 3 hours as well.) Resources Used While Developing Free assets I used (CC0 license): https://pixelfrog-assets.itch.io/pixel-adventure-1 First tutorial in the series I watched: https://youtu.be/oED12Mo2018?si=6y_8LNeydut2Vyyr"}]...
|
Title: Universal Existence by @JustCoding8790 | St Title: Universal Existence by @JustCoding8790 | Stardance
Devlogs:
Devlog #1: Learning about Godot + Double-Jumping and Air-Jumping I watched a series of tutorials on making a platformer in Godot and followed along, but I eventually decided to also implement my own features too. I ended up making a double-jump mechanic. In the process, I also accidentally made an air-jump mechanic, where I can also jump while falling. I hope to expand my level to include more content in the next 3 hours of work. Also, fun fact here, when I started this project, I originally named it Universal Existence, but I ended up changing the name to Simulation Overgrowth (and I might even change it again later on). I soon realized, though, that if I renamed the folder, Godot would prevent me from opening the game, as it doesn’t recognize the renamed folder as the actual game folder. Oops… (I’ll find a way to fix it in the next 3 hours as well.) Resources Used While Developing Free assets I used (CC0 license): https://pixelfrog-assets.itch.io/pixel-adventure-1 First tutorial in the series I watched: https://youtu.be/oED12Mo2018?si=6y_8LNeydut2Vyyr
Devlog #2: More Levels and Mechanics Sorry for releasing a devlog so late. My internet went down as I was writing this. I added 5 more levels, with working exits leading to the next level, along with panels showing text that the antagonist of this game says (might turn the dialogue into voice lines). I also added a melon collectible, which is worth more points, but slightly harder to reach. Everything is going well so far. Down below is a video of me playing through the first few levels (and showing some secrets). Also, I ended up simply using the name Universal Existence instead of Simulation Overgrowth. Anyways, you might’ve noticed that I have another ongoing project. Don’t worry. I’ll still work on this game. For now, though, I want to improve my Godot skills to be able to make not only the mechanics I want to include in Universal Existence, but also more complex games in the future.
Devlog #3: Movement and Level Additions I’m back on Universal Existence now. I’ve spent most of the time so far on tweaking my movement system. It may seem unreasonable for me to do such at first, but believe me, there’s some important additions I needed to make, such as: Adding jump buffering and coyote time Adjusting speed, jump power, and gravity based on player size (to make bigger levels and as the framework for some size-changing mechanics) Boosting jump power for smaller sizes (since the player’s jump felt too heavy when small; you probably will especially understand this if you played other platformer games) The movement system changes took a lot longer than I expected, as I had to go through all 8 levels every time I made a change to make sure it was possible to progress. I’ve also added spikes to my game, and I created a few new levels containing them, along with remastering the old levels to make them harder. Here’s a list of other changes: Changed font for better readability Set strech mode to viewport so the game will adjust its size based on the current window size The recording below shows gameplay footage of the harder levels (collecting all melons and almost every apple). Don’t worry, I’m planning on adding a settings menu to allow you to change the difficulty to your liking, which will change the level to another variant.
Devlog #4: New Difficulties + UI and OST Changes (Part 1) Things are starting to look polished. I can probably get the game’s demo done by around late July. The deadline isn’t 100% confirmed, though. Four Brand New Difficulties I made four new difficulties. These will adjust how much room for error you have and the number of threats in each level. Hard : For those who have no experience and just want to have fun. No shame if this applies to you. Extra Hard : For rusty jumpers seeking to improve their skills. A casual, balanced experience. Ultra Hard : For all intermediate jumpers looking for a challenge. Serves as a fairly difficult journey. Extreme : For the most skilled jumpers of the universe. Not for the faint of heart. As you can see, there are only hard difficulties in this game. This is to remind you that even on the lower difficulties, it can be a hard game. You might not think so at first, but as more mechanics are introduced, you may find yourself getting stuck on certain levels. As shown in the recording below, for the first few levels, since they don’t contain much except platforms and fruits, I couldn’t do much except add and extend platforms for lower difficulties. Pause Menu In order for difficulties to be selected, I made a pause menu. I customized the UI and added multiple animations. I did end up having to redo the animations, however, as I not only realized there was UI overlap between the main pause menu and the difficulty description, but I also received a lot of warnings involving something called AnimationMixer, and I couldn’t find a way to get rid of them until I redid everything. I also linked the difficulty chosen in the menu to the game and added a small description for each of the 4 difficulties. New OST Yep, there’s music being composed for the game now. Rush (from Discord), a friend of mine, is helping out on creating good music for my game. I haven’t coded it so it plays in-game yet, but I’ve imported the assets in. I will upload the OST to a youtube channel after I make enough songs so you can listen to it whenever you want. (Keep in mind listening to the OST or checking the title may lead to spoiling the game demo.) Minor Changes I organized assets into more folders, but this later led me to encountering some issues involving paths to certain nodes not existing, which caused errors to appear. The issue mainly involved sound nodes like the jump sound and the death sound. Eventually, I reuploaded the sounds to each AudioStreamPlayer2D node. Additionally, the first level’s dialogue font (level 1-1) has now been changed to match with the other levels. Upcoming Additions Within the next 5 hours I spend on the game, I’m hoping to add variants for each of the remaining levels for each difficulty, along with making a background music player. I also need to add a settings menu for the player and fix multiple issues like the floating player bug (seen at the end of the recording below).
Devlog #5: New Mushroom Enemy + More Level Variants New Mushroom Enemy Yep, a new enemy. I had scrapped a few levels recently, and to replace them, I didn’t want to make another similar level. Mushrooms move in a certain direction until they hit a wall, causing them to move the other way and repeat this cycle. Unlike snails, though, these enemies can be defeated by jumping on top of them, giving you an extra jump boost (just like those Goombas from Super Mario Bros). Now I could’ve just brought back a scrapped level, slapped them in, and called it a day. But that seems too boring. So I instead thought about the new mechanic of being able to defeat the enemy. And that’s how I came up with using mushrooms over a spike pit to bounce your way to the end of a level. I added variants for each difficulty as well, adding more mushrooms on lower difficulties. Speaking of variants… Finished Level Variants I finished all level variants for each difficulty. I mainly did this by adjusting enemy speed and adding/removing spikes based on the difficulty. Of course, I’m going to have to do this a lot more often. The demo is going to be longer than 8 levels, and the demo is nothing compared to what I plan to release in the full game. Minor Details and Changes Added new level template Shrunk player hitbox Played and looped a track as a BGM player Imported image assets for upcoming enemies Reimported music assets New “Sign Guy” track Upcoming Additions This time, I will make the settings menu for sure, along with making another enemy for the next few levels. I plan to take no longer than 4 hours. Until then, see you soon!
Devlog #6: Underestimating the Work of a Settings Menu (for a beginner, at least) Yep, I apparently had a lot more to learn about UI, audio, and controller settings. I eventually decided to stop working on the settings menu. If there’s one thing I can take away from this experience, it’s that I should probably not focus too much on a settings menu over the actual gameplay. Audio Settings I filled the left side of the settings menu with sliders for controlling the audio volume. I used audio buses in Godot in order to separate audio into 3 main categories: Music, Sound, and Voice. Of course, there is nothing for the voice audio bus, since I haven’t recorded any voice lines yet. (I’ll get to that later!) Controller Deadzones and Assist Settings The right side contains buttons that open submenus. Players can now control the game speed and controller joystick deadzones, along with being able to practice a level as much as they want with Training Mode. I decided to save controller sensitivity, key rebinding, credits, and language translating for later, due to how much time it took to figure out what should happen with submenus in multiple cases. I know, doesn’t seem like it should take that much time, but I have to consider multiple cases in which the settings UI will stay visible and block the actual pause menu, which occurs when the player resumes and pauses again without exiting out of the UI. There’s also another thing I have to worry about… HSlider Bug When I reopen a menu after exiting out of it, the sliders seems to reset back to where it originally was when the game started. Thankfully, this issue doesn’t affect the actual gameplay, but still, it’s a visual bug that might confuse players. I managed to fix this with the audio sliders, but I haven’t done the same with the controller settings and assist settings. I’ll try to patch it next week. Minor Details and Changes There’s not much this week, sorry. (I regret spending so much time on the settings menu…) Upcoming Additions I want to start focusing on making more levels soon, but I don’t want to reuse the same mechanics from the levels I already made. I already made multiple enemies, so I want to start making a mechanic that involves more of the player, like a new action that can be enabled upon collecting something in a level. I’ll also have to come up with ideas for the area’s bossfight (yes, there are bosses in this game), since I feel like the area is almost complete. As for the settings menu, I’ll pick it back up in about a month. A not-so-productive week, I know. Hopefully I can do better.
Devlog #7: Giving Everyone Guns and Bullets (Part 1) Honestly, I was intending to make something similar to a space shooter, where enemies come in from off-screen, but I’m still happy with what I ended up making. This devlog is a bit longer than usual, so feel free to just simply look at the video for explanation if you’re running short on time. Guns for the Player Starting with the player, remember how I wanted to make a mechanic that doesn’t just involve enemies? I ended up coming up with giving the player a gun (or, well, a blaster). I planned out the different types of guns the player will be able to equip. There will be two types of guns: auto-firing, which will automatically fire bullets every 0.2 seconds, and manual, which will only fire when the player presses a certain button, but it deals more damage per bullet (there’s a longer cooldown in between bullets, though, so better be precise). There are also three variants for each type that determine which direction the gun can fire: upwards, downwards, or horizontally. I may plan out more variants later. (But of course, this game isn’t all about guns, is it?) I implemented the auto-firing horizontal gun at the time of writing this devlog. And for the first time ever, I finally decided to make my own art instead of just using CC0 assets from Pixel Adventure. (Wild, right?) Not the best, but it’ll work for now. I don’t want to spend too much time on all the minor details to the point where I barely get anything done (like the settings menu, cough cough [refer to devlog 6 if you’re new here]). Guns for the Enemies It would be unfair if the player just simply had a significant advantage over the enemies, so I also gave guns to the enemies. Well, only a certain type of enemy, that is… Meet the Trunkwalker, a walking, square-like tree trunk part that fires bullets through its nose (aka the remains of a sliced tree branch). It can only fire a bullet horizontally every 3/2/1.5/1 second(s) depending on the difficulty ( Hard/Extra Hard/Ultra Hard/Extreme ). They also move around until they hit a wall, just like snails and mushrooms. I do find myself dying more to when they stop to shoot bullets rather than the bullets themselves. A bit concerning, but I find that it adds to the difficulty well, so… Basic Damage and Health System Anyways, there’s a reason why the player has a gun in the first place. To defeat enemies, of course. I gave the Trunkwalker a set amount of 25/30/35/40 health based on the difficulty. A bullet from an auto-firing gun deals 4 damage, so each Trunkwalker can be defeated after taking 7/8/9/10 hits. (There, I did the math for you. Happy?) Minor Details and Changes There’s still plenty to go around here. Here’s the rest of the changes: Reorganized folder structure, organized assets and scenes into subfolders Added a sound effect for when the enemy get hit by a bullet (made by tapping my laptop) Added extra frames to the mushroom’s death animation (they disappear in a similar fashion to collected fruits) Upcoming Additions I’ll have to continue all of this work in part 2. In other words, I’ll also have to make the other variants of guns, along with some more mechanics/enemies and levels. I also feel like the levels are too short and easy and don’t provide a proper challenge, mainly for the harder difficulties, so I might consider rebalancing the levels. Things are looking much better than last time. School is starting soon, however, so I may start to slow down on progress. I still think I can get the game’s demo done before Stardance ends, though. Until next time, jumpers! (And yes, I just recently came up with that name. I don’t know what else to call players without calling them “players”.)
Devlog #8: Giving Everyone Guns and Bullets (Part 2) Note: See Part 1 for context if you haven’t already. I think I’ll be done with guns for a while. After completing the first area, you most likely won’t see them again until one of the last levels of the second area (maybe not even until the next boss fight). Also, after rebalancing the harder difficulties to actually serve a good challenge, playtesting my own game took 2x longer than I usually would, as I’d keep dying to certain enemies or traps. But this game isn’t about breezing through easy levels, so… Guns for Plants and Bees These enemies are simple. Plants stay in one position, firing at random intervals. Their firerate is random and slower (average of 3.75/2.75/2/1.25 seconds), but their health is much higher compared to a Trunkwalker ( 65/75/90/100 health). Bees move around in the air, firing stinger bullets downwards. They fire often (average of 2.5/2/1.5/1 second[s]), but their health is decreased to make up for it ( 12/15/16/20 health). Since these bees will be above the player, I made an auto-firing gun that fires upwards. I decided that manual guns will instead show up in the next area after the boss. (That means the manual guns won’t be in the demo. Sorry…) These enemies show up in levels 1-10 and 1-11. Minor Details and Changes I spent a lot of time on major changes this week, but that doesn’t mean I didn’t spend time on minor problems. Here’s the small changes I made: Added Hard, Extra Hard, and Ultra Hard difficulty variants to level 1-9 Trunkwalker firing interval is more random instead of being fixed (to me, it just looks weird when they all attack at the same time) Rebalanced easier levels so they actually can somewhat serve a good challenge Resized hitbox of Mushrooms (so player can now properly die to a Mushroom when not bouncing on top of them) Moved melon in level 1-5 (for Ultra Hard and Extreme variants) to a harder-to-reach location (as it was too easy to reach the melon previously) You might think rebalancing levels would be a major change, but I honestly didn’t change much with each level. I mainly just moved traps/enemies around. Upcoming Additions Most of the time next week will be spent creating the first area’s boss fight. I won’t tell you what I plan to make for the boss fight, though. That would spoil everything. If you do want to view the spoilers, though I’ll provide a link to a Google Doc on the next devlog detailing everything about the upcoming boss fight. I suspect this boss will take more than 6 hours to make, so I’ll split it all into two devlogs (and also two weeks). Not much to say otherwise, though. Enjoy my (pretty horrible) gameplay below!
Devlog #9: The Last Challenge and Stat Board We’re nearing the end of this part of the journey. I can’t believe this is only the demo part of the entire game that I’m making. Demo Boss Fight This is the last challenge of the game. Like I said last devlog, I don’t want to spoil the boss fight, and I don’t see any way to censor text for Stardance. So here’s a Google Doc for those who’d rather just see the spoilers rather than find out by playing the game’s demo. I’m pretty happy with the boss fight as it is. I don’t believe I’ll need to rework it (except for balancing purposes). I did die a lot on the boss fight, though (19 deaths). Stat/Death Board At the end of the demo, I decided to let the player see their stats on the board, including the amount of time it took for them to finish the game, how many times they died to specific causes, etc. I did end up having to globally track every death and the cause of each death using an array (if you don’t know what that is, think of a buffet where you get to decide how much of each of the foods are in each area). Copyright Problems I recently learned more about copyright policy and it turns out I cannot use music my friend Rush made, even though he gave verbal permission. We appear to need some sort of agreement as well. But I don’t want to get too deep into the legal stuff, so I’m going to have to make my own track to replace the current one soon. Honestly, I might just attempt to use a CC0 track since I’m running out of time currently. Because of this issue, I muted the audio of the gameplay footage below too. Minor Details and Changes Not as much going around this week, but nevertheless, here’s most of the small changes: Added apples to all difficulty variants of levels 1-9 and 1-11 Added disappearing animation for the player that plays after the death animation (overall looks better in my opinion) Upcoming Additions Of course, there’s work that still needs to be done. First of all, I haven’t finished the settings menu yet (if you remember from devlog 6). There’s also some tracks in the game I need to make (for the boss fight, the area ambience, etc) And most importantly, we can’t forget about the commentary that occurs when you die to specific traps/enemies (which I’ve already started). I’m hoping I can release this game by late-September at the latest, along with working on some Stardance missions. I’d like to maximize my coding time before Stardance ends, despite the fact I’m busy with all the homework I’m getting. :(
Devlog #10: Music, Rebalancing, and “Voicelines” This will most likely be the final devlog. At least for Stardance. There’s so much more that will happen after Stardance ends (more info later). Playtester Feedback and Rebalancing I’ve gotten feedback from multiple playtesters (all of them are listed in the credits), and they’ve all said that there’s a big difficulty spike between levels 8 and 9 (or 10), so I had to make the levels easier by removing enemies and spikes, along with nerfing enemy hp, bullet fire rates, and bullet speed. I also had to adjust level 5 due to how small the bottom section is, which gives you barely any room to avoid the snails. For any playtesters who are reading this right now, thanks for playtesting and I hope you recover from your plant PTSD (from your 20-50+ deaths). “Voiceline” System and Adaptive Difficulty If only the dialogue was actually voiced. I don’t have anyone to voice act for me right now. But anyways, this voiceline system reacts to every level you enter and every death. It’ll either give tips on how to deal with whatever you’re facing or simply mock you. Here’s a couple of sample lines: “…And you’re having trouble with a stationary triangle in the ground. I repeat… A STATIONARY TRIANGLE IN THE GROUND!” (8th death to spikes) “Looking for an easy way to counter snails? It’s called ‘double-jumping’.” (3rd death to snails) “Outplanted by the plants…” (7th death to plants) “Those bees sure do sting… But they won’t last long when you ‘sting’ them back.” (1st death to bees) It will also change your difficulty for you when you’ve died too few or too many times on one level. I’m planning on giving the commentator a name. Maybe Domainus? We’ll find out later if it becomes canon or not. New Music Licensing Agreement Remember how in a previous devlog, I found out I couldn’t use Rush’s music for my game due to legal issues? That’s been fixed now, as both of us along with our parents signed an agreement. It’s not formal or anything, but from what I’ve researched, it should do the trick for now. After everyone signed the agreement, I added some new tracks to the BGM player: Beehold the Bullets (boss battle theme) UPC Test: PASS (boss victory theme) Void Hub (plays after beating the demo) Note: The gameplay footage below does not have audio, but the actual game will. Minor Details and Changes Last devlog, last changes… Added credits with playtesters, attribution, assets, and composers Updated README (still needs a slight update, will finish before I ship) Fixed audio sliders in settings menu starting at wrong positions Added “Reset All Settings” Added speedrun timer for Speedrun Mode in settings Stopped leftover bullets from killing you Started off player on Ultra Hard instead of Extreme on game startup Future of Universal Existence I plan to post future devlogs in a Discord server for anyone that’s interested. You’ll also be able to sign up to playtest future versions of the game and give feedback, along with participating in server events. You can join here: https://discord.gg/Ztc37dcu9 This link will expire soon, which is why I’ll paste another one later in the comments. Hope to see you around!
Ships:
Universal Existence is a 2d platformer with many mechanics that will be explored more in-depth and combined with other mechanics to make many interesting levels. Platform through 12 levels of the UPC (Universal Platforming Course) in the game’s demo. You can also get tips from Domainus, the creator of the universe and the manager of the UPC (Universal Platforming Course), or get yelled at for dying to a stationary triangle for the 8th time. There’s four unique difficulties, with your difficulty being adjusted to try and match your skill level. I found it challenging to make certain elements of the game like the settings menu (like the speedrun timer) and a couple of enemies (like the mushroom, which was hard to figure out when the player jumped on top of it and when it killed the player [I ended up having to adjust hitboxes several times]). I’m pretty proud of how I managed to make some pretty fun levels, such as level 6 (for providing just enough space for it to be possible, but still somewhat challenging) and level 11 (which involves knowing when to use each blaster and even has a cool level skip if you discover it [hint: one of Domainus’s voicelines reveals part of it]). Where to Play If you have a windows pc, you can download the game from the itch.io link below, if you want an executable. Just make sure to unzip the ZIP folder and open the .exe file (not the .console or .pck). Otherwise, you can play the game on any computer by clicking “Run Game” on itch.io. Keep in mind the game can be hard, especially during levels 9-12. Good luck! Also, if you have a controller, feel free to test it to see if it works with the game. Currently, the XBOX controller is partially supported (controllers cannot navigate the pause menu, but you can open it up by pressing Esc on keyboard or Menu button for Xbox controller). If you don’t want to play the game, here’s a 100% playthrough with all apples and secret melons collected. https://youtu.be/cXItOPMkMOI...
|
1793004677.268508
|
1793091077.268508
|
|
35239
|
CORES Runtime by @ravi10 | Stardance
|
ravi10
|
2
|
61.0
|
58
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-31T19:08:41Z", "hours": 33.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "CORES Runtime is an open-source cognitive runtime for autonomous robots. Instead of controlling robot hardware directly, it manages the software systems that sit between perception, planning, scheduling, memory, and execution. Its goal is to help robots decide what to run, when to run it, and how to manage limited compute and energy while remaining deterministic and predictable. This ship focuses on a major redesign of the memory subsystem. I replaced the previous learning architecture with a new memory pipeline built around Episodic Memory, Semantic Memory, and a Logger that compresses experiences into long-term knowledge. During development, I discovered and fixed a consolidation bug through the demo itself, added regression tests, benchmarked the full compression pipeline, and documented a known scaling limitation for future optimization.", "repo": "https://github.com/Cores-Runtime/cores", "demo": "https://cores-rust.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-16T09:43:26Z", "hours": 8.0, "multiplier": 7.72, "payout": 58, "blessing": "neutral", "text": "CORES is a research project exploring how autonomous robots can schedule cognition instead of simply executing tasks. This update introduces the first public version of the CORES experience. I built and deployed a homepage that explains the runtime architecture, scheduling, benchmark overview, and cognitive module system. A major focus was making a complex robotics runtime understandable through clean visual design rather than long technical documentation. The next milestone is an interactive runtime simulator where visitors will be able to inject hazards, change mission conditions, and watch the scheduler reprioritize cognitive modules in real time. Exact visualizations and benchmark charts will be added. I’d love feedback on: Is the core idea easy to understand? Does the homepage clearly communicate the purpose of CORES? What sections are confusing or missing?", "repo": "https://github.com/Cores-Runtime/cores", "demo": "https://cores-rust.vercel.app/"}]...
|
[{"post_id": 40760, "ts": "202 [{"post_id": 40760, "ts": "2026-08-04T14:30:40Z", "hours": 10.0, "text": "Devlog #10 Meet the Mission Manager “What should the robot work on right now?” Planning already knows how to achieve a goal, but it doesn’t decide which goal is the most important. The Mission Manager sits one level above Planning, keeps track of every mission, chooses the active goal, and hands only that goal to the planner. Spent most of the day building the Mission Manager. The idea sounds simple: a mission is a list of goals, the manager picks the active one, hands it to Planning, and waits for the result. The details were anything but simple. I started with the mission lifecycle. Every mission begins in NEW , becomes READY , then ACTIVE , and eventually reaches a terminal state: COMPLETED , FAILED , or CANCELLED . A mission can also be PAUSED and resumed later. The transition rules are strict. You can’t jump from CANCELLED back to ACTIVE , and you can’t skip directly from NEW to COMPLETED . Every transition has to make sense. I spent much longer than I expected getting the state diagram and all the transitions right. Preemption was probably the most interesting part. When a higher-priority mission arrives, the current one moves back to READY , not PAUSED . That distinction took a while to figure out. PAUSED means someone intentionally stopped the mission. Preemption means the system decided something more important needs attention first. Different reasons, different states. Goals also execute one at a time. A goal can depend on another goal, so a task like Drop Package won’t begin until Pick Package has finished. Goal completion works in two independent ways. You can either call complete_goal() directly, or use a constraint evaluator that checks the robot’s state automatically. Neither depends on the other, and a goal never completes simply because it has no constraints. That felt like the safest design. A bug the dashboard exposed Near the end, I ran into a strange bug. As soon as a mission finished, the manager immediately wrote \"idle\" into the robot state, clearing the mission ID and progress. If you were watching the dashboard, the mission simply disappeared the moment it completed. The fix was straightforward: keep the final mission state visible until another mission becomes active. Now the homepage trace finishes at 100% Complete instead of dropping back to idle immediately. It was a small issue, but it made the runtime feel much more polished. Integration The cleanest part of this phase was the integration. Nothing else needed to change. The Scheduler still schedules. The Planner still plans. The Mission Manager simply runs earlier in the runtime cycle, selects the active goal, and passes it to Planning. Even the original way of giving a mission directly to the Runtime still works, so existing code remains compatible. Some Cleanups The rest of the session went into polishing the project. Updated documentation and runtime diagrams Refreshed test and strategy counts Replaced the remaining banned terminology Renamed the HTN primitive class across seven files for consistency Fixed benchmark test collection by adding import fallbacks for script execution Nothing particularly exciting, but it leaves the project in a much healthier state. I think this phase is finally complete."}, {"post_id": 39637, "ts": "2026-08-02T19:20:21Z", "hours": 10.0, "text": "Devlog #9 Meet the Planning Module The Planning Module answers one simple question: “What should we do next?” It looks at the goal and the current state, proposes candidate plans, and picks the best one. The module has one interface and five planners. You hand it a mission, which is a collection of goals. Each goal is something the robot wants to be true. Every planner produces candidate plans with a confidence, estimated cost, duration, and utility score. The module returns all candidates and the one it selects as the best. The five planners are: GoalPlanner searches forward using action pre-conditions and effects. HTNPlanner breaks high-level tasks into smaller actions using authored methods. UtilityPlanner scores candidates and picks the highest. ReactivePlanner reacts immediately to simple conditions. BehaviorTreePlanner executes authored behavior trees. All of them implement the same PlannerStrategy interface, so they can be swapped without changing the rest of the runtime. The planner learned to adapt its own plans Before today, whenever something changed during a mission, the planner threw away the entire plan and started again. Now it walks through the existing plan step by step. If the beginning of the plan is still valid, it keeps it. As soon as it reaches a step that can no longer be completed, it rebuilds only the remaining part. This means the robot no longer repeats work it has already finished. Both the Goal Planner and HTN Planner now support this. Every repaired plan also records where the original plan became invalid. The Runtime handles this automatically. If the environment changes, it first tries to update the existing plan. Only if that fails does it generate a completely new one. The planner learned to notice change The next challenge was deciding when to update a plan. The solution was a planning snapshot: a small summary of the robot and world containing only the information planning actually cares about. Objects, flags, payloads, and sensor-health keys are sorted. Battery is grouped into critical , low , medium , or high instead of using the exact percentage. Temperatures and positions are rounded, while noisy values like timestamps and raw pose are ignored. This keeps the snapshot deterministic, so identical worlds always produce identical snapshots and unnecessary replanning is avoided. The planner learned from experience The second big change was teaching the planner to use previous experiences. Before today, it only looked at the current situation. Now it asks Memory for a summary of previous successes and failures before making a decision. A new wrapper called MemoryAwarePlanner works with any existing planner. It lets the original planner create a plan, then adjusts the choices based on previous outcomes. Plans that failed before become less attractive, while successful ones get a small boost. The selected plan is stored back into Memory so future missions can learn from it as well. If there is no previous experience, the planner behaves exactly as it did before. The demo ties everything together. First, Door A becomes blocked, so the planner updates the existing plan and switches to Door B instead of starting over. Then, on the next run, Memory remembers that Door A failed twice while Door B succeeded once, so the planner chooses Door B from the beginning."}, {"post_id": 38154, "ts": "2026-07-31T12:17:53Z", "hours": 11.0, "text": "Devlog #8 The demo found a bug before I did. I had that type of day where, you think every feature is working correctly and when you test, you find out its not. The standalone Learning subsystem was deleted a while back. In its place I added the Logger, which uses a compression algorithm living inside Memory. SPSCA, the Semantic Pointer State Compression Algorithm, moved out of the memory strategies and into the Logger where it belonged. The new module: logger it only had one job and that was to summarize long memories and log it and somehow it still failed in demo. 😑 Then demo_memory.py ended with a summary that read: Episodic records: 7 | Semantic narratives: 0 If you watched that demo as an outsider, you would walk away thinking the Logger was a sticker on the box. It looked broken, because it was idle. The records I stored were all too important to archive, but the default trigger needed 50 new records to even consider firing. So I just re-wrote the pipeline and tested it. The bug was just one line Then the demo did something embarrassing. It caught a real bug. The source IDs in the second narrative overlapped with the first. Records that had already been summarized were showing up to be summarized again. Imagine a robot checking the same doorway every patrol because it never recorded that it had already inspected the doorway. The culprit was mark_consolidated checker. It was asked to flip a batch of records to CONSOLIDATED, and it did the polite thing of fetching one record per id. Except every single fetch returned the same record. The top one. So one record got filed, and the other ten stayed on the desk, waiting to be processed forever. A one-line fix and a regression test later, no record is ever re-compressed. Caught the bug by reading my own demo output, which is the cheapest way to find a bug on earth. (≧▽≦) The benchmark that revealed the hidden cost Then I measured the whole pipeline. Not the Logger in isolation, the full journey. Store, archive, trigger, compress, file into semantic memory. The numbers looked fine and then slowly stopped being fine:- 100 records: about 0.66 ms each 1000 records: about 0.83 ms each 5000 records: about 1.77 ms each Every cycle, archiving and consolidation scan the whole store to find what changed. That is a classic hidden O(n^2), the kind that is invisible at demo size and painful at robot lifetime size. It is fine for now. It is written down. It will be fixed before anyone deploys a robot that lives for a year. 😓 The interesting part wasn’t fixing the bug. It was realizing that a good demo isn’t just there to impress people. It’s another test. Unlike unit tests, it exercises the system the way a user would, and today it caught a bug that hundreds of automated tests never did. Sometimes the fastest debugger is simply watching your own software run."}, {"post_id": 36393, "ts": "2026-07-28T13:56:17Z", "hours": 10.0, "text": "Devlog #7 Today’s session was dedicated to a very big architectural refactor in the project. The goal was to simplify the memory and reasoning pipeline by redesigning how memory is represented and consolidated while preserving compatibility with the existing runtime. Session Goals Redesigning the memory architecture Removing old unnecessary learning subsystem Introducing Logger Migrating SPSCA Preserving runtime compatibility Keeping full test suite passing Architecture Design I went back to the basics and reviewed the entire architecture. I wanted to make it cleaner by identifying overlapping responsibilities between Memory and Learning. It was very time consuming as there were too many responsibilities and modules to simplify and distinguish here. This resulted in a new architecture: EpisodicStore SemanticStore Logger Since I believe learning will be taken care of in future updates. Implementation Implemented: Memory redesign Logger subsystem Trigger policies SPSCA migration Runtime integration Memory now internally composes Episodic Memory, Semantic Memory, and Logger while exposing a single interface to the runtime. Refactoring Performed a full project-wide migration: replaced string record types with enums updated runtime integration updated imports removed old unnecessary learning components updated public exports Testing & Validation Refactored the testing suite: New module integration tests SPSCA tests Trigger policy tests Updated memory tests Removed old unnecessary tests Final result: 590 / 590 tests passing Lint clean I was happy that the refactor didn’t break anything! (^///^) Documentation Updated: Memory documentation Benchmarks Demo programs Outcome The runtime now has a significantly cleaner architecture: State Estimation → Memory Episodic Semantic Logger → Planning → Scheduler → Execution This refactor was very important as it redefined the whole runtime(base) on which the whole project was built on. This will help to build future phases, secondly dividing memory types was one of the best decisions."}, {"post_id": 33975, "ts": "2026-07-24T10:58:42Z", "hours": 3.0, "text": "Devlog #6 👋 I just wanted to add a way for robot to effectively store and fetch its memory. I expected this phase to be fairly straightforward. The runtime already had State Estimation, Planning and Scheduling. Memory sounded like another subsystem to plug into the pipeline, expose a few interfaces and move on. It didn’t quite go that way. I started with what seemed like the obvious design: A common memory interface with multiple interchangeable strategies. Instead of committing to a single implementation, I built: FIFO Time Decay Priority Episodic SPSCA behind the same abstraction. I knew I’d want to compare different approaches later, so making them interchangeable from the beginning felt like the right decision. Most of the implementation went smoothly 🔥. Then I reached Sparse Principal Component Analysis (SPSCA). Unlike the other strategies, SPSCA wasn’t just storing records. It was trying to represent them. My first implementation followed the algorithm closely. Every piece of content was recursively encoded using semantic pointer operations before being stored. At the time, I was pretty happy with it. Then I ran the benchmarks. The larger scenarios became painfully slow. Some didn’t even finish. I was upset that this whole work and time for nothing and just ruining the project? :-( At this point, I feel like giving up on this and do the next thing or just implement this in the simplest way possible. I actually started making the next phase idea and then while doing that, suddenly out of nowhere, I got an idea about how to find the exact cause of failure 🥹. So, I just went to see that was my hypothesis was correct about the error. I spent a whole evening looking for small optimizations. Once I did, I found the issue with it!. The encoding stage itself had become the bottleneck. That forced me to see the bigger picture of what’s happening during that stage. Instead of trying to optimize the existing implementation, I redesigned the encoding pipeline completely. Memory content is now serialized into a deterministic representation and converted into fixed-length vectors using SHA-256 before participating in similarity operations. The semantic pointer operations are still implemented, but they’re no longer part of every storage operation. That one decision simplified the whole implementation very much. Watching the benchmarks finally finish without timing out was a huge relief. 😭 With the implementation stable again, I turned my attention to testing. I added benchmarks for insertion, retrieval latency, sustained memory growth and strategy comparisons, along with a much larger test suite covering storage, retrieval, forgetting behaviour, vector operations and runtime integration. By the end of the phase, the runtime could finally retain experiences across execution cycles. But, stopped myself from immediately moving on to the next feature as there were still a few loose ends I wanted to clean up before building anything on top of Memory. Nothing in the runtime actually depends on memory yet. Planning doesn’t query it, scheduling doesn’t use it, and no module learns from previous experience. I considered pushing further, but decided against it. Changing the foundation becomes much harder once other components start depending on it. As a small side quest during this phase, I also redesigned the project homepage. Hopefully it finally looks the way I originally imagined it. For now, memory exists for one reason: to give the runtime a place to store or fetch it in a very efficient way."}, {"post_id": 31622, "ts": "2026-07-20T05:20:32Z", "hours": 4.0, "text": "Devlog #5 I thought it would be an interesting day today, as I was going to add something important that will help a robot perceive and predict the world. Instead, I spent most of my time reading research papers. At first I thought I could just implement a World Model and move on. After reading more robotics papers, I realised everyone seems to solve the problem differently. Some approaches use occupancy grids. Some track objects. Some build semantic maps. Some focus almost entirely on probabilistic state estimation. I couldn’t find a single approach that worked well across every scenario. That changed my view of how I wanted to build this part of CORES. Instead of picking one approach that works only in one scenario, I started implementing multiple approaches instead of one. The plan Implement them. Benchmark them. See where each one performs well. Let the results decide which one should become the default. One thing I realised While doing this, I also realised that calling everything a “World Model” was a bit misleading. The runtime isn’t trying to store the world. It’s trying to estimate what the world currently looks like based on observations. That made “State Estimation” feel like a much better name for the implementation. The architecture didn’t really change. Only the implementation became clearer. It was mostly about changing how I think about this part of the project. I think spending a day reading papers and redesigning things will save me weeks of rewriting later. I’ve mentioned this before, but I think it’s important to build the clearest picture possible of a feature before implementing it. About the papers Just to be clear, the papers and images below are existing robotics research. I’m not claiming them as my own. I’m studying different approaches before deciding how to implement this part of CORES. Progress today Surveyed different robotics approaches Planned multiple State Estimation strategies Started implementing competing approaches Added benchmark framework Wrote more tests Refactored the architecture Renamed the implementation to State Estimation"}, {"post_id": 30532, "ts": "2026-07-18T05:46:20Z", "hours": 3.0, "text": "Devlog #4 Today was a difficult day as i was working on too many things but i tried to simulate what i have implemented till now. It was all about making it easier to understand. Until now I had graphs, benchmark results and logs. They were useful for me, but if someone else looked at them, they probably wouldn’t understand why the runtime made a particular decision. That made me think. If a robot suddenly stops or changes its plan, how do I show why that happened instead of just showing numbers? So today I spent most of my time working on the replay system. Building a mission To test everything, I created a simple Mars mission. The rover starts driving normally. Halfway through the mission a rockslide blocks the path. Instead of continuing, the runtime reacts. The rover stops. Safety takes priority. Navigation calculates another path. Then the mission continues. Watching that happen felt much better than looking at benchmark graphs. For the first time it actually felt like I was watching the runtime make decisions. I was happy at this point that all this work actually getting showed in a sim (┬┬﹏┬┬) Making it easier to understand I also spent time improving the replay itself. The rover now has moving wheels, suspension, antenna, brake lights, warning lights and dust effects. I also added different camera angles to make it easier to follow what is happening. One feature I enjoyed building was the cognition timeline. Instead of showing every module sitting there doing nothing, I can now see when modules become active, when they pause and when another module takes over. That made the scheduler much easier to understand, while replaying a mission. One thing I realised The most difficult part was finding a simple way to show what the runtime was thinking. Trust me it was difficult, putting everything into a presentable demo, Trying to fit weeks of work into a small demo meant deciding what to show and what to hide. I had to remove a lot of unnecessary details while still making it clear how the runtime actually works. I think that’s something I’ll keep improving as the project grows. What’s next Right now the replay still uses temporary modules. The next step is replacing them with actual runtime components like Perception, Planning, Navigation, State Estimation and Safety Monitor. After that I’ll connect the replay directly to the Python runtime so every event comes from the real scheduler instead of prerecorded data. Progress today Built the first replay system Added a Mars mission Added dynamic hazards Added cinematic camera modes Added rover animations Added cognition timeline Improved replay visualisation The replay is still pretty simple, but it finally feels like the project is becoming something people can interact with instead of just reading about. I finally achieved something what i wanted to when i started the project, a simulation that is demoable. It’s still far from finished, but seeing the runtime make decisions inside a simulation feels like a huge milestone for me."}, {"post_id": 29382, "ts": "2026-07-16T09:35:41Z", "hours": 3.0, "text": "Devlog #3 hmm, So when i started the project i thought i would build an actual simulation where i could show everyone how it works, its still far from that. So i focused on doing that, I took a break from working on the runtime itself and started building the website. Until now, everything was happening inside the codebase. The runtime was working, benchmarks were running, and tests were passing, but if someone visited the repository they still wouldn’t understand what CORES actually does. I just wanted it to explain the project. Building the homepage I started building the first version of the website using Next.js. Most of the time today went into trying different layouts and figuring out how to present the project in a simple way. The homepage now has: Hero section Navigation Runtime statistics Benchmark summary cards Cognitive architecture visualization Responsive layout One sentence stayed with me while building the page: The project should focus on making robots think better in emergency situations and have actual knowlege of their resources and their environment. I think it explains the project much better than a long paragraph. Designing to match my thinking After changing the layout a few times, I removed most of the unnecessary elements and kept the design much simpler. I’d rather have a clean page that explains the project than something flashy that distracts from it. Deployment Getting the website online wasn’t completely straightforward. Since the repository contains both the Python runtime and the Next.js frontend, I had to configure Vercel to build only the frontend. A couple of module import issues also showed up during deployment. After fixing those, the website finally deployed successfully. Thinking about the project differently While working on the homepage, I realised something. The website shouldn’t just tell people what CORES is. It should help them understand it. Instead of reading pages of documentation, I want someone to interact with the runtime and see how scheduling decisions change under different situations. That’s probably where I’ll spend most of my time next. Testing I also added around 80 more tests while working on the project. The runtime is getting bigger every day, so I’d rather spend extra time writing tests now than spend hours debugging later. End of the day Today wasn’t about adding another algorithm. It was about making the project easier to understand. The runtime is only useful if people can understand what it’s trying to do, and I think the homepage is a good first step toward that. Progress today Built the first version of the CORES homepage Added runtime overview and benchmark cards Added cognitive architecture visualization Simplified the website design Deployed the frontend on Vercel Fixed deployment and module import issues Added around 80 new tests Tomorrow I’ll start working on the simulator so visitors can interact with the runtime instead of only reading about it."}, {"post_id": 28872, "ts": "2026-07-15T13:19:25Z", "hours": 3.0, "text": "Devlog #2 Welcome to my another devlog!! Today was all about the scheduler. Yesterday I finished a greedy scheduler, but I wasn’t convinced it was the best option. So today I implemented an exact 0/1 Knapsack scheduler expecting it to perform much better. After running benchmarks, it honestly wasn’t what I expected. Most of the time both schedulers produced almost the same schedule. For a while I thought I had implemented something incorrectly, so I kept checking the code and rerunning the benchmarks. Turns out the implementation wasn’t the problem. The greedy scheduler was already finding the optimal solution in most of the scenarios I generated. The only noticeable differences appeared when resources became really limited. That’s where I found something that bothered me. During a simulated sensor failure, the Knapsack scheduler decided to stop localization because it increased the optimization score. From a mathematical point of view, that decision was correct. From a robotics point of view, it was terrible. A robot shouldn’t sacrifice safety just because it saves a little more battery. That’s when I stopped thinking about improving the algorithm itself and started thinking about what I was actually asking it to optimize. Instead of using one objective function, I switched to a lexicographic approach. Now scheduling decisions happen in this order: Safety Mission progress Energy Execution time This means lower priorities can never override higher ones. While changing the scheduler, I also realised I had been treating every module exactly the same. That didn’t make much sense. A battery monitor shouldn’t be treated the same way as an exploration module. So I divided modules into three groups. Mandatory Safety Critical Mission Those groups are now used directly by the scheduler. I also added a module dependency graph so relationships between modules can be represented instead of assuming every module is independent. After finishing the scheduler changes, I spent quite a bit of time expanding the benchmarks. I added more scenarios, an ablation framework, and graphs so I could compare different scheduling policies instead of relying on a few manual examples. The result I cared about the most was the original failure case. The previous scheduler reduced safety coverage during a sensor failure. The new scheduler kept safety at 100%. That was enough to convince me this direction makes more sense. Progress today Compared Greedy and Knapsack scheduling Built benchmark scenarios Implemented Lexicographic Scheduler Added module categories Added module dependency graph Created ablation framework Added benchmark visualizations Wrote research experiment documentation 83 tests passing. Today was a good day, I completed and learned so many things from different algorithms and how each behave differently from other in eveyr situation. And it was fun. Not anything cool yet but it felt like i achieved something here."}, {"post_id": 28595, "ts": "2026-07-14T22:48:05Z", "hours": 1.0, "text": "Devlog #1: Building the Foundation Date: July 15, 2026 Just started the project and it already feels ike theres too much too learn beofre starting. I know it would be hard designing the whole architecture and system and oh god it was! So as I was saying, I started with the most important steps designing the whole system and architecture of the project. The usual stufff!! : Setting up the project The first few commits were just getting the project into a shape where I could actually start building. Initial repository Project structure Cleaning up the directory layout .gitignore Removing unnecessary cache files Till this point I hadn’t really started implementing the actual idea. It was just a setup, that was going to be base of the whole project. Getting modules to communicate The first actual component I worked on was the event system. I didn’t want modules calling each other directly because that would make everything tightly coupled very quickly. Instead, I added an event-based communication layer. At this point it was very simple, but it gave me something to build on. Scheduler and Runtime Once events were working, I moved on to the scheduler. At first I wasn’t sure how much responsibility the scheduler should have. After a few iterations I settled on keeping it responsible only for deciding what runs next. The ExecutionLayer should only execute that plan. I wanted scheduling decisions to exist independently from execution, so I introduced an ExecutionPlan instead of letting the runtime decide everything on the fly. After that I implemented the runtime itself along with the execution layer. The runtime finally had a complete execution cycle. Too late feeling sleepyyy (┬┬﹏┬┬) however i moved on from my sleep with a coffee but the headache wasnot over yet. First redesign While connecting everything together I realised one part of the architecture wasn’t sitting right. ModuleResult was trying to do too much. Instead of letting it continue to grow, I redesigned it into a cleaner boundary between modules and the runtime. That change also let me decouple the ExecutionLayer from the EventBus . The code became much easier to understand what it does. Here i learned before coding any feature you have to have clearest picture of the feature you want to implement or you will end up debugging and redesigning the architecture whole night like me ಥ_ಥ I’m pretty sure this won’t be the last redesign, but it already feels cleaner than the first version. Testing After getting the runtime working, I didn’t want to assume it was correct. I added integration tests for the runtime cycle instead of only testing individual classes. It’s still a very small project, but having tests this early makes me much more comfortable refactoring things later. Documentation I’ve never really documented architectural decisions properly before. Usually I only remember what I changed. A month later I completely forget why I changed it. So this time I documented everything. End of the day By the end of today, System Design and Architecture was complete. There isn’t much to show visually yet. No robot. No simulator. No fancy AI. Just a runtime that can execute modules, schedule work, and pass integration tests. Honestly, I’m happy with that. The interesting features can wait. I’d rather spend time getting the foundation right than spend the next few months constantly rewriting it. Progress today Project structure Event system Scheduler ExecutionPlan Runtime ExecutionLayer Runtime integration tests ModuleResult redesign ExecutionLayer decoupled from EventBus So at last I went to sleep ofcourse it was important to me, I love my sleep. GoodNight ;-)"}]...
|
Title: CORES Runtime by @ravi10 | Stardance
Devlo Title: CORES Runtime by @ravi10 | Stardance
Devlogs:
Devlog #1: Building the Foundation Date: July 15, 2026 Just started the project and it already feels ike theres too much too learn beofre starting. I know it would be hard designing the whole architecture and system and oh god it was! So as I was saying, I started with the most important steps designing the whole system and architecture of the project. The usual stufff!! : Setting up the project The first few commits were just getting the project into a shape where I could actually start building. Initial repository Project structure Cleaning up the directory layout .gitignore Removing unnecessary cache files Till this point I hadn’t really started implementing the actual idea. It was just a setup, that was going to be base of the whole project. Getting modules to communicate The first actual component I worked on was the event system. I didn’t want modules calling each other directly because that would make everything tightly coupled very quickly. Instead, I added an event-based communication layer. At this point it was very simple, but it gave me something to build on. Scheduler and Runtime Once events were working, I moved on to the scheduler. At first I wasn’t sure how much responsibility the scheduler should have. After a few iterations I settled on keeping it responsible only for deciding what runs next. The ExecutionLayer should only execute that plan. I wanted scheduling decisions to exist independently from execution, so I introduced an ExecutionPlan instead of letting the runtime decide everything on the fly. After that I implemented the runtime itself along with the execution layer. The runtime finally had a complete execution cycle. Too late feeling sleepyyy (┬┬﹏┬┬) however i moved on from my sleep with a coffee but the headache wasnot over yet. First redesign While connecting everything together I realised one part of the architecture wasn’t sitting right. ModuleResult was trying to do too much. Instead of letting it continue to grow, I redesigned it into a cleaner boundary between modules and the runtime. That change also let me decouple the ExecutionLayer from the EventBus . The code became much easier to understand what it does. Here i learned before coding any feature you have to have clearest picture of the feature you want to implement or you will end up debugging and redesigning the architecture whole night like me ಥ_ಥ I’m pretty sure this won’t be the last redesign, but it already feels cleaner than the first version. Testing After getting the runtime working, I didn’t want to assume it was correct. I added integration tests for the runtime cycle instead of only testing individual classes. It’s still a very small project, but having tests this early makes me much more comfortable refactoring things later. Documentation I’ve never really documented architectural decisions properly before. Usually I only remember what I changed. A month later I completely forget why I changed it. So this time I documented everything. End of the day By the end of today, System Design and Architecture was complete. There isn’t much to show visually yet. No robot. No simulator. No fancy AI. Just a runtime that can execute modules, schedule work, and pass integration tests. Honestly, I’m happy with that. The interesting features can wait. I’d rather spend time getting the foundation right than spend the next few months constantly rewriting it. Progress today Project structure Event system Scheduler ExecutionPlan Runtime ExecutionLayer Runtime integration tests ModuleResult redesign ExecutionLayer decoupled from EventBus So at last I went to sleep ofcourse it was important to me, I love my sleep. GoodNight ;-)
Devlog #2 Welcome to my another devlog!! Today was all about the scheduler. Yesterday I finished a greedy scheduler, but I wasn’t convinced it was the best option. So today I implemented an exact 0/1 Knapsack scheduler expecting it to perform much better. After running benchmarks, it honestly wasn’t what I expected. Most of the time both schedulers produced almost the same schedule. For a while I thought I had implemented something incorrectly, so I kept checking the code and rerunning the benchmarks. Turns out the implementation wasn’t the problem. The greedy scheduler was already finding the optimal solution in most of the scenarios I generated. The only noticeable differences appeared when resources became really limited. That’s where I found something that bothered me. During a simulated sensor failure, the Knapsack scheduler decided to stop localization because it increased the optimization score. From a mathematical point of view, that decision was correct. From a robotics point of view, it was terrible. A robot shouldn’t sacrifice safety just because it saves a little more battery. That’s when I stopped thinking about improving the algorithm itself and started thinking about what I was actually asking it to optimize. Instead of using one objective function, I switched to a lexicographic approach. Now scheduling decisions happen in this order: Safety Mission progress Energy Execution time This means lower priorities can never override higher ones. While changing the scheduler, I also realised I had been treating every module exactly the same. That didn’t make much sense. A battery monitor shouldn’t be treated the same way as an exploration module. So I divided modules into three groups. Mandatory Safety Critical Mission Those groups are now used directly by the scheduler. I also added a module dependency graph so relationships between modules can be represented instead of assuming every module is independent. After finishing the scheduler changes, I spent quite a bit of time expanding the benchmarks. I added more scenarios, an ablation framework, and graphs so I could compare different scheduling policies instead of relying on a few manual examples. The result I cared about the most was the original failure case. The previous scheduler reduced safety coverage during a sensor failure. The new scheduler kept safety at 100%. That was enough to convince me this direction makes more sense. Progress today Compared Greedy and Knapsack scheduling Built benchmark scenarios Implemented Lexicographic Scheduler Added module categories Added module dependency graph Created ablation framework Added benchmark visualizations Wrote research experiment documentation 83 tests passing. Today was a good day, I completed and learned so many things from different algorithms and how each behave differently from other in eveyr situation. And it was fun. Not anything cool yet but it felt like i achieved something here.
Devlog #3 hmm, So when i started the project i thought i would build an actual simulation where i could show everyone how it works, its still far from that. So i focused on doing that, I took a break from working on the runtime itself and started building the website. Until now, everything was happening inside the codebase. The runtime was working, benchmarks were running, and tests were passing, but if someone visited the repository they still wouldn’t understand what CORES actually does. I just wanted it to explain the project. Building the homepage I started building the first version of the website using Next.js. Most of the time today went into trying different layouts and figuring out how to present the project in a simple way. The homepage now has: Hero section Navigation Runtime statistics Benchmark summary cards Cognitive architecture visualization Responsive layout One sentence stayed with me while building the page: The project should focus on making robots think better in emergency situations and have actual knowlege of their resources and their environment. I think it explains the project much better than a long paragraph. Designing to match my thinking After changing the layout a few times, I removed most of the unnecessary elements and kept the design much simpler. I’d rather have a clean page that explains the project than something flashy that distracts from it. Deployment Getting the website online wasn’t completely straightforward. Since the repository contains both the Python runtime and the Next.js frontend, I had to configure Vercel to build only the frontend. A couple of module import issues also showed up during deployment. After fixing those, the website finally deployed successfully. Thinking about the project differently While working on the homepage, I realised something. The website shouldn’t just tell people what CORES is. It should help them understand it. Instead of reading pages of documentation, I want someone to interact with the runtime and see how scheduling decisions change under different situations. That’s probably where I’ll spend most of my time next. Testing I also added around 80 more tests while working on the project. The runtime is getting bigger every day, so I’d rather spend extra time writing tests now than spend hours debugging later. End of the day Today wasn’t about adding another algorithm. It was about making the project easier to understand. The runtime is only useful if people can understand what it’s trying to do, and I think the homepage is a good first step toward that. Progress today Built the first version of the CORES homepage Added runtime overview and benchmark cards Added cognitive architecture visualization Simplified the website design Deployed the frontend on Vercel Fixed deployment and module import issues Added around 80 new tests Tomorrow I’ll start working on the simulator so visitors can interact with the runtime instead of only reading about it.
Devlog #4 Today was a difficult day as i was working on too many things but i tried to simulate what i have implemented till now. It was all about making it easier to understand. Until now I had graphs, benchmark results and logs. They were useful for me, but if someone else looked at them, they probably wouldn’t understand why the runtime made a particular decision. That made me think. If a robot suddenly stops or changes its plan, how do I show why that happened instead of just showing numbers? So today I spent most of my time working on the replay system. Building a mission To test everything, I created a simple Mars mission. The rover starts driving normally. Halfway through the mission a rockslide blocks the path. Instead of continuing, the runtime reacts. The rover stops. Safety takes priority. Navigation calculates another path. Then the mission continues. Watching that happen felt much better than looking at benchmark graphs. For the first time it actually felt like I was watching the runtime make decisions. I was happy at this point that all this work actually getting showed in a sim (┬┬﹏┬┬) Making it easier to understand I also spent time improving the replay itself. The rover now has moving wheels, suspension, antenna, brake lights, warning lights and dust effects. I also added different camera angles to make it easier to follow what is happening. One feature I enjoyed building was the cognition timeline. Instead of showing every module sitting there doing nothing, I can now see when modules become active, when they pause and when another module takes over. That made the scheduler much easier to understand, while replaying a mission. One thing I realised The most difficult part was finding a simple way to show what the runtime was thinking. Trust me it was difficult, putting everything into a presentable demo, Trying to fit weeks of work into a small demo meant deciding what to show and what to hide. I had to remove a lot of unnecessary details while still making it clear how the runtime actually works. I think that’s something I’ll keep improving as the project grows. What’s next Right now the replay still uses temporary modules. The next step is replacing them with actual runtime components like Perception, Planning, Navigation, State Estimation and Safety Monitor. After that I’ll connect the replay directly to the Python runtime so every event comes from the real scheduler instead of prerecorded data. Progress today Built the first replay system Added a Mars mission Added dynamic hazards Added cinematic camera modes Added rover animations Added cognition timeline Improved replay visualisation The replay is still pretty simple, but it finally feels like the project is becoming something people can interact with instead of just reading about. I finally achieved something what i wanted to when i started the project, a simulation that is demoable. It’s still far from finished, but seeing the runtime make decisions inside a simulation feels like a huge milestone for me.
Devlog #5 I thought it would be an interesting day today, as I was going to add something important that will help a robot perceive and predict the world. Instead, I spent most of my time reading research papers. At first I thought I could just implement a World Model and move on. After reading more robotics papers, I realised everyone seems to solve the problem differently. Some approaches use occupancy grids. Some track objects. Some build semantic maps. Some focus almost entirely on probabilistic state estimation. I couldn’t find a single approach that worked well across every scenario. That changed my view of how I wanted to build this part of CORES. Instead of picking one approach that works only in one scenario, I started implementing multiple approaches instead of one. The plan Implement them. Benchmark them. See where each one performs well. Let the results decide which one should become the default. One thing I realised While doing this, I also realised that calling everything a “World Model” was a bit misleading. The runtime isn’t trying to store the world. It’s trying to estimate what the world currently looks like based on observations. That made “State Estimation” feel like a much better name for the implementation. The architecture didn’t really change. Only the implementation became clearer. It was mostly about changing how I think about this part of the project. I think spending a day reading papers and redesigning things will save me weeks of rewriting later. I’ve mentioned this before, but I think it’s important to build the clearest picture possible of a feature before implementing it. About the papers Just to be clear, the papers and images below are existing robotics research. I’m not claiming them as my own. I’m studying different approaches before deciding how to implement this part of CORES. Progress today Surveyed different robotics approaches Planned multiple State Estimation strategies Started implementing competing approaches Added benchmark framework Wrote more tests Refactored the architecture Renamed the implementation to State Estimation
Devlog #6 👋 I just wanted to add a way for robot to effectively store and fetch its memory. I expected this phase to be fairly straightforward. The runtime already had State Estimation, Planning and Scheduling. Memory sounded like another subsystem to plug into the pipeline, expose a few interfaces and move on. It didn’t quite go that way. I started with what seemed like the obvious design: A common memory interface with multiple interchangeable strategies. Instead of committing to a single implementation, I built: FIFO Time Decay Priority Episodic SPSCA behind the same abstraction. I knew I’d want to compare different approaches later, so making them interchangeable from the beginning felt like the right decision. Most of the implementation went smoothly 🔥. Then I reached Sparse Principal Component Analysis (SPSCA). Unlike the other strategies, SPSCA wasn’t just storing records. It was trying to represent them. My first implementation followed the algorithm closely. Every piece of content was recursively encoded using semantic pointer operations before being stored. At the time, I was pretty happy with it. Then I ran the benchmarks. The larger scenarios became painfully slow. Some didn’t even finish. I was upset that this whole work and time for nothing and just ruining the project? :-( At this point, I feel like giving up on this and do the next thing or just implement this in the simplest way possible. I actually started making the next phase idea and then while doing that, suddenly out of nowhere, I got an idea about how to find the exact cause of failure 🥹. So, I just went to see that was my hypothesis was correct about the error. I spent a whole evening looking for small optimizations. Once I did, I found the issue with it!. The encoding stage itself had become the bottleneck. That forced me to see the bigger picture of what’s happening during that stage. Instead of trying to optimize the existing implementation, I redesigned the encoding pipeline completely. Memory content is now serialized into a deterministic representation and converted into fixed-length vectors using SHA-256 before participating in similarity operations. The semantic pointer operations are still implemented, but they’re no longer part of every storage operation. That one decision simplified the whole implementation very much. Watching the benchmarks finally finish without timing out was a huge relief. 😭 With the implementation stable again, I turned my attention to testing. I added benchmarks for insertion, retrieval latency, sustained memory growth and strategy comparisons, along with a much larger test suite covering storage, retrieval, forgetting behaviour, vector operations and runtime integration. By the end of the phase, the runtime could finally retain experiences across execution cycles. But, stopped myself from immediately moving on to the next feature as there were still a few loose ends I wanted to clean up before building anything on top of Memory. Nothing in the runtime actually depends on memory yet. Planning doesn’t query it, scheduling doesn’t use it, and no module learns from previous experience. I considered pushing further, but decided against it. Changing the foundation becomes much harder once other components start depending on it. As a small side quest during this phase, I also redesigned the project homepage. Hopefully it finally looks the way I originally imagined it. For now, memory exists for one reason: to give the runtime a place to store or fetch it in a very efficient way.
Devlog #7 Today’s session was dedicated to a very big architectural refactor in the project. The goal was to simplify the memory and reasoning pipeline by redesigning how memory is represented and consolidated while preserving compatibility with the existing runtime. Session Goals Redesigning the memory architecture Removing old unnecessary learning subsystem Introducing Logger Migrating SPSCA Preserving runtime compatibility Keeping full test suite passing Architecture Design I went back to the basics and reviewed the entire architecture. I wanted to make it cleaner by identifying overlapping responsibilities between Memory and Learning. It was very time consuming as there were too many responsibilities and modules to simplify and distinguish here. This resulted in a new architecture: EpisodicStore SemanticStore Logger Since I believe learning will be taken care of in future updates. Implementation Implemented: Memory redesign Logger subsystem Trigger policies SPSCA migration Runtime integration Memory now internally composes Episodic Memory, Semantic Memory, and Logger while exposing a single interface to the runtime. Refactoring Performed a full project-wide migration: replaced string record types with enums updated runtime integration updated imports removed old unnecessary learning components updated public exports Testing & Validation Refactored the testing suite: New module integration tests SPSCA tests Trigger policy tests Updated memory tests Removed old unnecessary tests Final result: 590 / 590 tests passing Lint clean I was happy that the refactor didn’t break anything! (^///^) Documentation Updated: Memory documentation Benchmarks Demo programs Outcome The runtime now has a significantly cleaner architecture: State Estimation → Memory Episodic Semantic Logger → Planning → Scheduler → Execution This refactor was very important as it redefined the whole runtime(base) on which the whole project was built on. This will help to build future phases, secondly dividing memory types was one of the best decisions.
Devlog #8 The demo found a bug before I did. I had that type of day where, you think every feature is working correctly and when you test, you find out its not. The standalone Learning subsystem was deleted a while back. In its place I added the Logger, which uses a compression algorithm living inside Memory. SPSCA, the Semantic Pointer State Compression Algorithm, moved out of the memory strategies and into the Logger where it belonged. The new module: logger it only had one job and that was to summarize long memories and log it and somehow it still failed in demo. 😑 Then demo_memory.py ended with a summary that read: Episodic records: 7 | Semantic narratives: 0 If you watched that demo as an outsider, you would walk away thinking the Logger was a sticker on the box. It looked broken, because it was idle. The records I stored were all too important to archive, but the default trigger needed 50 new records to even consider firing. So I just re-wrote the pipeline and tested it. The bug was just one line Then the demo did something embarrassing. It caught a real bug. The source IDs in the second narrative overlapped with the first. Records that had already been summarized were showing up to be summarized again. Imagine a robot checking the same doorway every patrol because it never recorded that it had already inspected the doorway. The culprit was mark_consolidated checker. It was asked to flip a batch of records to CONSOLIDATED, and it did the polite thing of fetching one record per id. Except every single fetch returned the same record. The top one. So one record got filed, and the other ten stayed on the desk, waiting to be processed forever. A one-line fix and a regression test later, no record is ever re-compressed. Caught the bug by reading my own demo output, which is the cheapest way to find a bug on earth. (≧▽≦) The benchmark that revealed the hidden cost Then I measured the whole pipeline. Not the Logger in isolation, the full journey. Store, archive, trigger, compress, file into semantic memory. The numbers looked fine and then slowly stopped being fine:- 100 records: about 0.66 ms each 1000 records: about 0.83 ms each 5000 records: about 1.77 ms each Every cycle, archiving and consolidation scan the whole store to find what changed. That is a classic hidden O(n^2), the kind that is invisible at demo size and painful at robot lifetime size. It is fine for now. It is written down. It will be fixed before anyone deploys a robot that lives for a year. 😓 The interesting part wasn’t fixing the bug. It was realizing that a good demo isn’t just there to impress people. It’s another test. Unlike unit tests, it exercises the system the way a user would, and today it caught a bug that hundreds of automated tests never did. Sometimes the fastest debugger is simply watching your own software run.
Devlog #9 Meet the Planning Module The Planning Module answers one simple question: “What should we do next?” It looks at the goal and the current state, proposes candidate plans, and picks the best one. The module has one interface and five planners. You hand it a mission, which is a collection of goals. Each goal is something the robot wants to be true. Every planner produces candidate plans with a confidence, estimated cost, duration, and utility score. The module returns all candidates and the one it selects as the best. The five planners are: GoalPlanner searches forward using action pre-conditions and effects. HTNPlanner breaks high-level tasks into smaller actions using authored methods. UtilityPlanner scores candidates and picks the highest. ReactivePlanner reacts immediately to simple conditions. BehaviorTreePlanner executes authored behavior trees. All of them implement the same PlannerStrategy interface, so they can be swapped without changing the rest of the runtime. The planner learned to adapt its own plans Before today, whenever something changed during a mission, the planner threw away the entire plan and started again. Now it walks through the existing plan step by step. If the beginning of the plan is still valid, it keeps it. As soon as it reaches a step that can no longer be completed, it rebuilds only the remaining part. This means the robot no longer repeats work it has already finished. Both the Goal Planner and HTN Planner now support this. Every repaired plan also records where the original plan became invalid. The Runtime handles this automatically. If the environment changes, it first tries to update the existing plan. Only if that fails does it generate a completely new one. The planner learned to notice change The next challenge was deciding when to update a plan. The solution was a planning snapshot: a small summary of the robot and world containing only the information planning actually cares about. Objects, flags, payloads, and sensor-health keys are sorted. Battery is grouped into critical , low , medium , or high instead of using the exact percentage. Temperatures and positions are rounded, while noisy values like timestamps and raw pose are ignored. This keeps the snapshot deterministic, so identical worlds always produce identical snapshots and unnecessary replanning is avoided. The planner learned from experience The second big change was teaching the planner to use previous experiences. Before today, it only looked at the current situation. Now it asks Memory for a summary of previous successes and failures before making a decision. A new wrapper called MemoryAwarePlanner works with any existing planner. It lets the original planner create a plan, then adjusts the choices based on previous outcomes. Plans that failed before become less attractive, while successful ones get a small boost. The selected plan is stored back into Memory so future missions can learn from it as well. If there is no previous experience, the planner behaves exactly as it did before. The demo ties everything together. First, Door A becomes blocked, so the planner updates the existing plan and switches to Door B instead of starting over. Then, on the next run, Memory remembers that Door A failed twice while Door B succeeded once, so the planner chooses Door B from the beginning.
Devlog #10 Meet the Mission Manager “What should the robot work on right now?” Planning already knows how to achieve a goal, but it doesn’t decide which goal is the most important. The Mission Manager sits one level above Planning, keeps track of every mission, chooses the active goal, and hands only that goal to the planner. Spent most of the day building the Mission Manager. The idea sounds simple: a mission is a list of goals, the manager picks the active one, hands it to Planning, and waits for the result. The details were anything but simple. I started with the mission lifecycle. Every mission begins in NEW , becomes READY , then ACTIVE , and eventually reaches a terminal state: COMPLETED , FAILED , or CANCELLED . A mission can also be PAUSED and resumed later. The transition rules are strict. You can’t jump from CANCELLED back to ACTIVE , and you can’t skip directly from NEW to COMPLETED . Every transition has to make sense. I spent much longer than I expected getting the state diagram and all the transitions right. Preemption was probably the most interesting part. When a higher-priority mission arrives, the current one moves back to READY , not PAUSED . That distinction took a while to figure out. PAUSED means someone intentionally stopped the mission. Preemption means the system decided something more important needs attention first. Different reasons, different states. Goals also execute one at a time. A goal can depend on another goal, so a task like Drop Package won’t begin until Pick Package has finished. Goal completion works in two independent ways. You can either call complete_goal() directly, or use a constraint evaluator that checks the robot’s state automatically. Neither depends on the other, and a goal never completes simply because it has no constraints. That felt like the safest design. A bug the dashboard exposed Near the end, I ran into a strange bug. As soon as a mission finished, the manager immediately wrote "idle" into the robot state, clearing the mission ID and progress. If you were watching the dashboard, the mission simply disappeared the moment it completed. The fix was straightforward: keep the final mission state visible until another mission becomes active. Now the homepage trace finishes at 100% Complete instead of dropping back to idle immediately. It was a small issue, but it made the runtime feel much more polished. Integration The cleanest part of this phase was the integration. Nothing else needed to change. The Scheduler still schedules. The Planner still plans. The Mission Manager simply runs earlier in the runtime cycle, selects the active goal, and passes it to Planning. Even the original way of giving a mission directly to the Runtime still works, so existing code remains compatible. Some Cleanups The rest of the session went into polishing the project. Updated documentation and runtime diagrams Refreshed test and strategy counts Replaced the remaining banned terminology Renamed the HTN primitive class across seven files for consistency Fixed benchmark test collection by adding import fallbacks for script execution Nothing particularly exciting, but it leaves the project in a much healthier state. I think this phase is finally complete.
Ships:
CORES is a research project exploring how autonomous robots can schedule cognition instead of simply executing tasks. This update introduces the first public version of the CORES experience. I built and deployed a homepage that explains the runtime architecture, scheduling, benchmark overview, and cognitive module system. A major focus was making a complex robotics runtime understandable through clean visual design rather than long technical documentation. The next milestone is an interactive runtime simulator where visitors will be able to inject hazards, change mission conditions, and watch the scheduler reprioritize cognitive modules in real time. Exact visualizations and benchmark charts will be added. I’d love feedback on: Is the core idea easy to understand? Does the homepage clearly communicate the purpose of CORES? What sections are confusing or missing?
CORES Runtime is an open-source cognitive runtime for autonomous robots. Instead of controlling robot hardware directly, it manages the software systems that sit between perception, planning, scheduling, memory, and execution. Its goal is to help robots decide what to run, when to run it, and how to manage limited compute and energy while remaining deterministic and predictable. This ship focuses on a major redesign of the memory subsystem. I replaced the previous learning architecture with a new memory pipeline built around Episodic Memory, Semantic Memory, and a Logger that compresses experiences into long-term knowledge. During development, I discovered and fixed a consolidation bug through the demo itself, added regression tests, benchmarked the full compression pipeline, and documented a known scaling limitation for future optimization....
|
1792878797.061941
|
1793742797.061941
|
|
45082
|
Testinggg by @Amcoo | Stardance
|
Amcoo
|
1
|
61.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-07T13:39:41Z", "hours": 61.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I AM JUST TESTINGG SOFTWARE THAT I DONT WANT TO PUT HERE BUT I WILL LATER AND I NEED HOURS LOGGED SO THAT IS WHY I SHIP THIS :)", "repo": "https://github.com/Amertos/playground", "demo": "https://amerbiberovic-portfolio.netlify.app/"}]...
|
[{"post_id": 42630, "ts": "202 [{"post_id": 42630, "ts": "2026-08-07T13:36:30Z", "hours": 61.1244, "text": "TESTING SOMETHING DONT CHECK THIS I HAVE TO KEEP MY HOURSE LOOGED"}]...
|
Title: Testinggg by @Amcoo | Stardance
Devlogs:
T Title: Testinggg by @Amcoo | Stardance
Devlogs:
TESTING SOMETHING DONT CHECK THIS I HAVE TO KEEP MY HOURSE LOOGED
Ships:
I AM JUST TESTINGG SOFTWARE THAT I DONT WANT TO PUT HERE BUT I WILL LATER AND I NEED HOURS LOGGED SO THAT IS WHY I SHIP THIS :)...
|
1792993739.5072474
|
1793080139.5072474
|
|
46463
|
DAEMON by @katopirat | Stardance
|
katopirat
|
1
|
61.0
|
1164
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T13:26:15Z", "hours": 61.0, "multiplier": 19.19, "payout": 1164, "blessing": "neutral", "text": "I shipped my game: DAEMON It’s 2am. Your friend is online. He wants you to print something. ⚠ Browser version can lag — grab the Windows build if you can. The game: first-person psychological horror about a 3D printer, a friend who won’t stop messaging you, and an OS that’s a little too honest about what it sees. Built: a real in-game OS — file explorer reading actual disk files, Discord-style chat, mail, terminal, all Windows 95 style over a gritty PSX world. A working 3D printer with its own physics, shader-based print reveal, and sound. Story written entirely in JSON, no code touched for content. Hardest part: never made horror before. Built the whole tech first, had a friend playtest — verdict: not scary. Rebuilt most of the second half because of it. Proud of: the printer, the OS, and the ending — which flips the camera around so you end up watching yourself through the eyes of the thing you built. Stuck? Check “Files” often, especially after a conversation ends.", "repo": "https://github.com/katopirat/DAEMON/", "demo": "https://katopiratgames.itch.io/daemon"}]...
|
[{"post_id": 72194, "ts": "202 [{"post_id": 72194, "ts": "2026-09-22T13:11:43Z", "hours": 6.9956, "text": "THIS IS THE LAST DEVLOG —————————————— finished the ending. you end up seeing everything through a screen from the other side, watching “him” sit down at the desk you’ve been sitting at the whole game. there’s a voice line now too (ElevenLabs), and two different ways it can end depending on what you do in the terminal went through and fixed a genuinely embarrassing bug where photos silently failed to save on a fresh install because the folder never existed. found it the hard way, glad I caught it before shipping it’s live: playable in browser on itch.io, Windows build on GitHub releases this is my last devlog for this one. never made a horror game before this, first version wasn’t scary at all according to a friend, and honestly that stung a bit. rebuilt a good chunk of it because of that. really happy with where it ended up thanks for reading these"}, {"post_id": 70636, "ts": "2026-09-19T14:23:51Z", "hours": 9.4572, "text": "NIGHT 4 IS NOW THE ENDING cut nights 5-6 and made night 4 the finale instead. it’s tighter and actually scarier than the original 6-night plan would’ve been the thing built from the printed pieces finally shows up in the room. it turns its head to look at you if you get close, then the lights flicker and it’s gone. added a proper scare sequence too - see it once through a window, then somewhere else it’s right behind you. screen goes black next: finishing the ending"}, {"post_id": 65332, "ts": "2026-09-10T12:36:07Z", "hours": 9.8781, "text": "NIGHT 3 FINISHED + MAIN MENU + TERMINAL built the main menu and its honestly my fav part. not a boring menu screen but literally ur monitor in the apartment. night 3 u wake up and the 3d printer is ALREADY running even tho u didnt queue anything and a terminal appeared terminal app has 4 commands - help ps clear and kill oh and the printer is making a hand. scaryyyy 👻 and in night 4 the hadn move into a room next to the livingroom next: night 4 - more body parts I’m sorry for the low quality video but it was too large :("}, {"post_id": 61901, "ts": "2026-09-05T02:23:10Z", "hours": 9.3094, "text": "SENDING REAL PHOTOS IN CHAT + SLEEP SYSTEM u can now physically take a pic of the 3d print and it saves to disk. in chat u just open the file explorer and send the actual photo. built a working sleep cycle too. walk to bed camera does a nice eyes-closing fade into a NIGHT 2 screen. so the story actually progresses now instead of just looping the same day forever funniest bug: realized my in game file explorer let u type “/” and browse my actual irl computer files. patched it but for like an hour my horror game had a literal zero day vulnerability lol added proper sound design everywhere. next: writing the story for night 3 + 2since all the tools are finally ready 📝"}, {"post_id": 58703, "ts": "2026-08-31T07:22:56Z", "hours": 7.6203, "text": "DISCORD CLONE + THE HORROR ACTUALLY STARTED built a full discord-style chat app from scratch. typing indicators message bubbles and it looks so sick in the win95 theme also made a win95 mail client . file explorer now reads straight off the real disk so adding content is literally just dropping a file in and the horror system went live. finished a chat, checked my files later, and a text file had silently renamed itself. added a notification sound next: writing the actual story since the skeleton is basically done"}, {"post_id": 52522, "ts": "2026-08-22T17:50:42Z", "hours": 8.6172, "text": "8.5 HOURS LATER: 3D PRINTER WORKS + OS FIXED spent 8.5 solid hours on this and honestly my brain is fried. finally got printhead and hotbed animated with a shader so models build layer by layer. syncing the movement was absolute pain but watching it print is insanely satisfying 🔥 added a bouncy physical print button and a grab system. once it finishes u can actually pick up the printed model as a real physics object finally fixed the annoying stuff: windows got classic win95 headers taskbar has icons and grabbed objects dont clip through walls anymore built a real file explorer reading disk files. It took a long time, but now the file browser reads files directly from the folder on your disk, so when you add a file to the folder, you can open it in the game. opening .stl opens a printer app biggest pain: godots UI anchors for sizing window content. offsets act totally diff depending on edge and nobody warned me >:( next: making the OS cursed. Finally… Maybe… 🥲"}, {"post_id": 48850, "ts": "2026-08-17T12:19:45Z", "hours": 6.9931, "text": "JUST CODED MY FIRST FAKE OS IN GAME 7 hours in and absolutely zero regrets i created my first ingame OS from scratch. I got desktop icons, windows you can drag around, and a working taskbar. never tried anything like this so it was basically a live speedrun of learning biggest win: slapped a free Windows 95 icon pack on it and now it genuinely looks like a legit retro OS instead of just ugly gray boxes also just added a grab mechanic so you can physically pick up objects and spin them around biggest bug: wasted 20 minutes thinking the click logic was broken :( turns out only the icon TEXT was clickable not the actual image lol next up: making the whole OS feel cursed. icons glitching out, files changing their own names. 😈"}, {"post_id": 45669, "ts": "2026-08-12T09:37:29Z", "hours": 1.8022, "text": "So i started a new Project! :) - it will be a first person psychological horror game set in a single apartment. I got a basic first person player movement working first, then i make the appartment from free assets (i thing it’s looking verry good!) and then i added psx style filter , whitch took some fighting to get looking and working right. then i added collisions for all the walls and furniture so the player can’t walk trought anything or escape the apartment, and set ip lighting that’s finaly starting to sell the mood I’m going for."}]...
|
Title: DAEMON by @katopirat | Stardance
Devlogs:
Title: DAEMON by @katopirat | Stardance
Devlogs:
So i started a new Project! :) - it will be a first person psychological horror game set in a single apartment. I got a basic first person player movement working first, then i make the appartment from free assets (i thing it’s looking verry good!) and then i added psx style filter , whitch took some fighting to get looking and working right. then i added collisions for all the walls and furniture so the player can’t walk trought anything or escape the apartment, and set ip lighting that’s finaly starting to sell the mood I’m going for.
JUST CODED MY FIRST FAKE OS IN GAME 7 hours in and absolutely zero regrets i created my first ingame OS from scratch. I got desktop icons, windows you can drag around, and a working taskbar. never tried anything like this so it was basically a live speedrun of learning biggest win: slapped a free Windows 95 icon pack on it and now it genuinely looks like a legit retro OS instead of just ugly gray boxes also just added a grab mechanic so you can physically pick up objects and spin them around biggest bug: wasted 20 minutes thinking the click logic was broken :( turns out only the icon TEXT was clickable not the actual image lol next up: making the whole OS feel cursed. icons glitching out, files changing their own names. 😈
8.5 HOURS LATER: 3D PRINTER WORKS + OS FIXED spent 8.5 solid hours on this and honestly my brain is fried. finally got printhead and hotbed animated with a shader so models build layer by layer. syncing the movement was absolute pain but watching it print is insanely satisfying 🔥 added a bouncy physical print button and a grab system. once it finishes u can actually pick up the printed model as a real physics object finally fixed the annoying stuff: windows got classic win95 headers taskbar has icons and grabbed objects dont clip through walls anymore built a real file explorer reading disk files. It took a long time, but now the file browser reads files directly from the folder on your disk, so when you add a file to the folder, you can open it in the game. opening .stl opens a printer app biggest pain: godots UI anchors for sizing window content. offsets act totally diff depending on edge and nobody warned me >:( next: making the OS cursed. Finally… Maybe… 🥲
DISCORD CLONE + THE HORROR ACTUALLY STARTED built a full discord-style chat app from scratch. typing indicators message bubbles and it looks so sick in the win95 theme also made a win95 mail client . file explorer now reads straight off the real disk so adding content is literally just dropping a file in and the horror system went live. finished a chat, checked my files later, and a text file had silently renamed itself. added a notification sound next: writing the actual story since the skeleton is basically done
SENDING REAL PHOTOS IN CHAT + SLEEP SYSTEM u can now physically take a pic of the 3d print and it saves to disk. in chat u just open the file explorer and send the actual photo. built a working sleep cycle too. walk to bed camera does a nice eyes-closing fade into a NIGHT 2 screen. so the story actually progresses now instead of just looping the same day forever funniest bug: realized my in game file explorer let u type “/” and browse my actual irl computer files. patched it but for like an hour my horror game had a literal zero day vulnerability lol added proper sound design everywhere. next: writing the story for night 3 + 2since all the tools are finally ready 📝
NIGHT 3 FINISHED + MAIN MENU + TERMINAL built the main menu and its honestly my fav part. not a boring menu screen but literally ur monitor in the apartment. night 3 u wake up and the 3d printer is ALREADY running even tho u didnt queue anything and a terminal appeared terminal app has 4 commands - help ps clear and kill oh and the printer is making a hand. scaryyyy 👻 and in night 4 the hadn move into a room next to the livingroom next: night 4 - more body parts I’m sorry for the low quality video but it was too large :(
NIGHT 4 IS NOW THE ENDING cut nights 5-6 and made night 4 the finale instead. it’s tighter and actually scarier than the original 6-night plan would’ve been the thing built from the printed pieces finally shows up in the room. it turns its head to look at you if you get close, then the lights flicker and it’s gone. added a proper scare sequence too - see it once through a window, then somewhere else it’s right behind you. screen goes black next: finishing the ending
THIS IS THE LAST DEVLOG —————————————— finished the ending. you end up seeing everything through a screen from the other side, watching “him” sit down at the desk you’ve been sitting at the whole game. there’s a voice line now too (ElevenLabs), and two different ways it can end depending on what you do in the terminal went through and fixed a genuinely embarrassing bug where photos silently failed to save on a fresh install because the folder never existed. found it the hard way, glad I caught it before shipping it’s live: playable in browser on itch.io, Windows build on GitHub releases this is my last devlog for this one. never made a horror game before this, first version wasn’t scary at all according to a friend, and honestly that stung a bit. rebuilt a good chunk of it because of that. really happy with where it ended up thanks for reading these
Ships:
I shipped my game: DAEMON It’s 2am. Your friend is online. He wants you to print something. ⚠ Browser version can lag — grab the Windows build if you can. The game: first-person psychological horror about a 3D printer, a friend who won’t stop messaging you, and an OS that’s a little too honest about what it sees. Built: a real in-game OS — file explorer reading actual disk files, Discord-style chat, mail, terminal, all Windows 95 style over a gritty PSX world. A working 3D printer with its own physics, shader-based print reveal, and sound. Story written entirely in JSON, no code touched for content. Hardest part: never made horror before. Built the whole tech first, had a friend playtest — verdict: not scary. Rebuilt most of the second half because of it. Proud of: the printer, the OS, and the ending — which flips the camera around so you end up watching yourself through the eyes of the thing you built. Stuck? Check “Files” often, especially after a conversation ends....
|
1793004865.1393566
|
1793091265.1393566
|
|
15256
|
the way to teal(just kill) by @love | Stardance
|
love
|
2
|
60.67
|
877
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T00:30:44Z", "hours": 23.0, "multiplier": 18.83, "payout": 413, "blessing": "neutral", "text": "this is a movement shooter made in godot 4.6 about a blue man in a green world, i really poured my soul into it so i hope you like it:)", "repo": "https://github.com/IDoTweaks/the-way-to-teal-just-kill-", "demo": "https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"ship_num": 2, "ts": "2026-06-21T13:09:47Z", "hours": 25.0, "multiplier": 18.23, "payout": 464, "blessing": "neutral", "text": "i made a speedrunning game inspired by a song, i will add more bosses and levels but now its in a state i very much like because this is my first game that i actually like i focused on the game feel way more than the looks and it shows its so fun i made a ghost system without any tutorial something i could never dream of this project let me see that i can build things on my own also i am aiming for a 3d printer so i need like 3x the hours so expect updates!", "repo": "https://github.com/IDoTweaks/the-way-to-teal-just-kill-", "demo": "https://idotweaks.itch.io/the-way-to-tealjust-kill"}]...
|
[{"post_id": 31312, "ts": "202 [{"post_id": 31312, "ts": "2026-07-19T16:42:06Z", "hours": 4.2094, "text": "DEVLOG 18 - ig we got a lot of art now new things in the game so pretty much all i did was new ui, make the game fit into a cartoon art style and some cover art for it new itch.io page the itch.io page sucked so i made it again and its so much better now check it out so as always the downloadable version is much better but there is still web support try it out: https://idotweaks.itch.io/the-way-to-tealjust-kill AND I LEFT SOME OF THE ART HERE SO YOU CAN SEE"}, {"post_id": 30937, "ts": "2026-07-18T22:54:39Z", "hours": 8.4639, "text": "DEVLOG 17 - i cant stop working on this last devlog i said i am done with the game but after those reviews i just cant stop key insights from the reviews so the main complains are that the game isnt visually appealing in some devices it ran poorly some mechanics arent clear/ need better tutorial the sfx are annoying (also there were some balancing issues and little bugs) i still got a little less than 19 per hour meaning people really did like it and it needs little changes so what did i change? i changed the tutorial to MAKE you do each mechanic and added a ghost that shows you how to do it new sfx i changed all the art style to be cartoonist i buffed the shotgun i did so much more but its so little that i cant point to each one so lets just say qol changes planning next i have already made 2 mini bosses and currently am working on some more enemy types, i will change the current levels to be the story mode with added story and dialogue and add a completly new mode which i will talk about in later devlogs"}, {"post_id": 28633, "ts": "2026-07-15T00:29:18Z", "hours": 1.1447, "text": "mini DEVLOG 16 - da final straw important if you rate it please download it, the web version is much much worse new levels added levels 7-9 unfortunate losses: sadly the styling system was very bad and i couldnt make it work so i just took it out something i had to add you could cheese everything with the dashes so im sorry… i added stamina da end so yeah i wont work on this project anymore prob but i am starting my own asm docs! be sure to stay updated!"}, {"post_id": 28494, "ts": "2026-07-14T19:34:05Z", "hours": 5.3678, "text": "DEVLOG 15 - boss redesign boss update the boss now attacks with a couple of new attacks! you can see them in the video AND a new paralysis system da cool af part so the boss now takes you to his office where he will offer you a deal: for 20% of your health you can get your paralysis level down! ui update so it looks better now, thats it XD UPDATE! so it is now updated in both github and itch.io but its very bad in the web versionT_T please just download itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill github: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST video btw the video was compressed and then converted so its low quality"}, {"post_id": 26518, "ts": "2026-07-11T11:21:23Z", "hours": 5.4061, "text": "DEVLOG 14 - the project is super star! boss update the current boss is very lazy in design so i decided to change it completely! with a snake boss, what i did is create a self generating floor and a snake with custom pathfinding boring technical stuff the floor has a function that does holes in it and makes sure the snake cannot get soft locked(since it cant pass through its own body) then the snake turns its positon + the player’s position into a tile in the map and using breadth first search from the head’s tile to the player’s tile it finds the next tile it needs to travel to this sounds so simple why did it take 5 hours? the reason is that this mf floor does not like generating how i want it to and i am very bad at algorithms so i had to try again and again and again and then i had to do the same thing with the snake because i havnt touched bfs in like 1.5 years THANKS FOR THE SUPER STAR as you can see while i was on vacation this project got a super star! i am very grateful for it! when will it be in the game? as you can see in the video it just follows the player right now, it has no attacks or something like it so i hope i can get it done by the end of this week(its saturday now so by next saturday) and it isnt wired into the game yet so its still just the old boss"}, {"post_id": 17327, "ts": "2026-06-28T02:11:05Z", "hours": 11.3172, "text": "DEVLOG 13 - UPDATE 1.1! this is a large update 1.1 basically doubles the size of the game and makes it actually feel good to play heres everything: enemies/combat added 4 new enemy types: the charger (rushes you and dashes), the drone (flies around and shoots), the exploder (runs at you and goes boom), and the sniper (snipes. very creative ik) added a sniper weapon for the player too shotgun and sniper now play a little reload animation between shots the new style system grading is no longer based on time insted its based on a style meter that is affected by cool things like no scoping in the air your final grade now mixes score + style + your final health ranking up the meter pops and flashes like super cool game feel hit-stop on kills(like a tiny freeze frame) FOV widens when you’re moving fast and stuff like that low health throws up a red vignette and getting hit shows an arrow pointing at whoever hit you combo kills rise in pitch the longer chain camera rolls when you strafe and dips when you land levels redesigned level 1 from scratch added levels 2 through 6 added a proper boss fight at the end added a tutorial UI + quality of life completely new UI that looks 10x better weapon indicator in the side added sound effects and music pause menu, switching weapons with the scroll wheel, on screen enemy counter settings menu for sensitivity, fov, volume, resolution, etc progress (and your best-run ghosts) now save locally web version web version is now fixed BUT its still a desktop game so its worse download github release: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill yeah thats it now go kill stuff"}, {"post_id": 13096, "ts": "2026-06-21T13:00:34Z", "hours": 2.7217, "text": "DEVLOG - 12 shipping soon notes if a reviewer sees this: i got a report about some web problems which did not happen to me, if you see the textures as too dark tho try downloading it i was not able to test the mac version as well changes i made a readme for the github added a text of damage done above enemies added a mage type enemy that shoots projectiles SHIPPING after this im shipping this so make sure to look at my github + itch.io github: https://github.com/IDoTweaks/the-way-to-teal-just-kill- itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 12239, "ts": "2026-06-19T23:54:55Z", "hours": 4.3089, "text": "DEVLOG - 11 (THE GAME IS ALMOST COMPLETE) + WINNER ANNOUNCEMENT so in the competition the only person that submitted a score was in the comments and late but he is now the winner:) @Connor you won! i will add you to the game soon major things i added: a ghost of your best run that plays back (if anyone is wondering i spent like an hour making it record every input with a timestamp and the WAY easier approach i ended up using is just saving the position + rotation + weapon used every frame (if animations were important to me i would have added them its not that hard) ground slam that does damage to enemies a jump orb to make levels feel less slow minor things i added: a health bar fixed enemies to know attack with a cooldown added a death screen now the enemies have black hands because animating csg shapes is expensive the state of the game now the game now is in what i feel full technicality ready the only things needed are: more levels, bosses, more enemies, more obstacles and interesting things in general and maybe a 3rd gun but other than that its basically ready so dont forget to playtest and lmk DOWNLOAD itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill side note:D also im the developer of the game so its not that hard for me to get s+ and im sure you can too so just spam ground slam its op(expect a patch soon🫣🫣🫣)so here is a clip of me getting s+ plus you can see the ghost after"}, {"post_id": 11305, "ts": "2026-06-18T14:29:13Z", "hours": 0.5894, "text": "THE TOURNAMENT IS STARTING NOW! as you can see in the last devlog the tournament said in it is starting right now! explanation this is a speedrunning competition in my 1 level demo game(very early in development) in that game you cant even die yet so go wild rules the clips must be unedited(unless you add like an edit of lebron and then its fine) submissions end when this post reaches 24 hours/2:30 pm utc and will be sent directly to me on slack/discord(which you can find in my bio) exploits are allowed! runs can only be in the current build in itch.io -runs that are on linux/windows must not use the web version because its super bad changes this version press r to restart + finished the end gui + fixed some score calculation bugs controls: wasd + space - normal movement ngl ctrl - slide lmb - shoot(with shotgun you get knockback btw) shift - dash 1/2 - switch weapons r - restart winner the winner will be the one with highest score by the end of the 24 hours/2:30 pm utc or the first person to reach a perfect score and he will win being inside the game + in the next devlog itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill now for the general stuff my discord: swiftfishi3 my slack: loveTheGodotDeveloper (if there will be any edits i will put them here) for now take a look at my fastest run(you have to wait a bit and its mid development)- runs can only be in the current build in itch.io like and repost so more people see it:D"}, {"post_id": 10797, "ts": "2026-06-17T18:26:42Z", "hours": 2.7661, "text": "DEVLOG - 10 this is a large milestone! COMPETITION ANNOUNCEMENT AT THE END i updated the map textures to a retro-ish style and updated the bullet holes and steps to look much better too! i added a timer and score with a grading system that allows for better speedrunning! i added a custom finish level orb with a custom shader that makes it look super cool look at this gameplay it looks like a real game! now the competition: so the competition will start in the next devlog because i plan to add a restart button to make it easier to speedrun and more now THE WINNER AND PRIZE: the winner will be the person that will get the highest score in 24 hours after the devlog is posted or the first person to get a perfect score of 20k(which is very hard gl) and the prize will be (imagine a drum roll) yeah you will just be on a wall or something its not that huge i will also write about you in the next devlog if thats important to you CLARIFICATIONS BECAUSE CLAUDE SAID THIS DEVLOG IS SHIT: 1.the competition will not be in the current build and will be submitted directly to me through slack/discord with the name you have in stardance 2.the prize is shit idk why claude treats it like i should try to deceive you into thinking its good, its bad i promise 3.if someone sends me they got a 20k score it will end idk whats confusing about it anyway only like 3 people will submit probably itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill (textures in web version are bugged please download!) if you have anything to say about this devlog you may comment it and i will ignore it(unless its a real question) anyway look at this clippp its happening now look at next devlog!"}, {"post_id": 10574, "ts": "2026-06-17T11:42:16Z", "hours": 1.5328, "text": "DEVLOG - 09 i added a shotgun! the shotgun has a large cooldown + it applies force on you! + itch.io update IF YOU DONT CARE ABOUT THE TECHNICAL STUFF WATCH THE VIDEO DOWN HERE TO JUST SEE THE COOL SHOTGUN it was much easier to implement because all i did was add a bunch of raycasts and randomize them with this simple code: func randomizeRays(): var i : int = 0 for ray in children: if ray is RayCast3D: ray.target_position.x = orgPos[i] + randf_range(-spread,spread) i+=1 ray.target_position.y = orgPos[i] + randf_range(-spread,spread) i+=1 the actual hard part was getting both guns to work with eachother but i managed to do that the force function was also interesting because i use a chartacterbody3d in godot i have to make this stuff myself with basically only velocity so the code is pretty easy to understand i dont think i need to explain much func _applyForce(point :Vector3,force , maxRange:float = 10): var dir = global_position - point var dist = dir.length() if dist > maxRange: return dir = dir.normalized() var fallOff = clamp(1 - (dist/ maxRange),0,1) velocity += dir * force * fallOff knockbackTimer = KNOCKBACK_LOCK_TIME also the game is now updated and free on itch.io! link: https://idotweaks.itch.io/the-way-to-tealjust-kill (please download it its much better than the web version because i cant solve some web specific bugs)"}, {"post_id": 9462, "ts": "2026-06-15T20:27:16Z", "hours": 1.6878, "text": "DEVLOG - 08 added an interesting navigation optimization script i encountered some lag even with 4 enemies so sadly i had to optimize it on the bright side i saw yesterday a video about exactly that and omfg it saved me and explains the general idea of what i do its just that i do it worse and in a different way video: https://www.youtube.com/watch?v=BPNr_txi6TU&t=813s time 33(already in link) how it works? ok so its not the MOST OPTIMAL but it is good i mean i can every time an enemy die to resort it blah blah blah and use the modulo but this works good enough even though i spent half an hour fixing a bug that doesnt exist(turns out if you select a navigation region and bake navigation mesh it does that to all regions and not just the one you selected) but for some reason i did have to use a raycast down the enemy’s feet for it to work so they wont fall probably because of friction so anyways here is the code: extends Node3D var tickAssigned = [] var tickCount = [] var currentTick = 0; var tickTimer = 0.0 const TICK_RATE = 0.025 func _ready() -> void: tickAssigned.resize(navObjects.size()) tickAssigned.fill(0) tickCount.resize(20); tickCount.fill(0) var length = navObjects.size() for i in tickAssigned.size(): tickAssigned[i] = -1 var num = 20.0 /length var current = 0.0 for i in length: if current >= 20: current -= 20 tickAssigned[i] = int(current) tickCount[int(current)]+=1 current += num``` # Called every frame. 'delta' is the elapsed time since the previous frame. ```func _process(delta: float) -> void: tickTimer +=delta if tickTimer < TICK_RATE: return tickTimer = 0.0 var tickDelta = TICK_RATE var count = 0 for entity in navObjects: if entity != null: if tickAssigned[count] == currentTick: var target = entity.target if target != null: var navAgent = entity.navAgent var mode = entity.mode var gotShot = entity.gotShot var SPEED = entity.SPEED var accelaration = entity.accelaration var velocity = entity.velocity if mode == \"chase\" or gotShot: navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true elif mode == \"attack\": navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true count+=1 currentTick +=1 if currentTick >= 20: currentTick = 0 #@onready var body =$body #@onready var explosionParticles = preload(\"res://Particles/enemyExplode.tscn\") #var particleInstance #@export var navAgent : NavigationAgent3D #@export var damage = 10 #@export var accelaration = 10 #var target #var mode : String = \"idle\" #var gotShot = false``` and the enemy code is too long so i cant put it here also here is a clip of the current state of the game"}, {"post_id": 9354, "ts": "2026-06-15T18:10:19Z", "hours": 2.9417, "text": "DEVLOG - 07 added vertical dash wall jumping and started with the tutorial level today i wanted to design the first level so i looked up what good level builders there are and saw trenchbroom and after like an hour of trying to make it work on fedora i gave up and tried something called cyclops but it doesnt support my current godot version so i spent MORE TIME diving into its code because there was only 1 small error(or so i thought) which i managed to fix but then every like 3 minutes of using it it just crashed so i guess im sticking with normal godot AND it took me like 20 versions and about 5 commits that i thought i fixed it to get to a working version of the 4 line code that lets me dash vertically but setting it up based on camera lets you dash up and gain insane momentum instantly so i tried a system of my own which calculated you vertical velocity using your horizontal one and tried a bunch of formulas and ended up with this fine version so the wall jumping was very easy to do because i just reflect the current movement and add a boost the hard part was that every time before hitting the wall i would already switch in my keyboard to the other other direction so to deal with that i “predicted the future” like i did with the slopes so that the movement feels smoother but to deal with the problem of the keyboard switching i also checked for the opposite directions(which is bassicly copy paste with minuses)so here is the code for that: if is_on_floor(): canWallJump = false return var veloc = Vector3(velocity.x,velocity.y,velocity.z) #var future = self.global_position + veloc for i in get_slide_collision_count(): var collision = get_slide_collision(i) if collision.get_normal().y < .3: wallNormal = collision.get_normal() canWallJump = true return if veloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + veloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return var altVeloc = Vector3(-velocity.x,velocity.y,velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return altVeloc = Vector3(velocity.x,velocity.y,-velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return canWallJump = false``` anyway here is a clip of the tutorial level now(compressed cause it was somehow 155mb): **NOTE**: it will be updated on itch.io after i finish making this tutorial level im just a little tired today and couldnt work on the project yesterday so i uploaded this devlog early"}, {"post_id": 8257, "ts": "2026-06-13T18:56:58Z", "hours": 1.4006, "text": "DEVLOG - 06 added a main menu! now as you can see THERE IS A MAIN MENU and it doesnt work very good on linux but my eye hurts so thats a problem for tommorow and let me know how it is on windows itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 8086, "ts": "2026-06-13T14:35:14Z", "hours": 2.2019, "text": "DEVLOG - 05 (it should’ve taken like 30 minutes wth) i added enemies that chase you and animations to your movements the animations were the easy part… but can someone tell me why godot uses the exact same shader to all of my models? so it took me like 50 god damn minutes to realise i need to just duplicate it and then i had a typo and i thought duplicating it doesnt work because of that so i gave up and sent it to chatgpt AND THEN I WAS RIGHT I DO NEED TO DUPLICATE IT anyways here is a clip of the game now and you have to like it ALSO SPECIAL THANKS TO CONNOR - thank him he is the reason the downloads now work in itch.io at least thats what i hope because if they dont idfk what to do itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 7998, "ts": "2026-06-13T10:48:12Z", "hours": 1.0583, "text": "DEVLOG - 04 HUGE MILESTONE movement is now finished with all new momentum logic and added dashing wait… why wont you just see for your selves? try out the movement in the link here and tell me if you like it:) https://idotweaks.itch.io/the-way-to-tealjust-kill note: i added downloadable versions and a web version the game is generally for windows/linux(i am on linux so i kinda have to XD) so i will not be fixing any only web only bugs anyways i have to put an image here so watch my first attempt of a crosshairT_T"}, {"post_id": 7964, "ts": "2026-06-13T09:10:34Z", "hours": 0.4461, "text": "mini devlog - 03.5 i wanted some art to the game so i made this banner it isnt proffesional at all and took me a damn hour for something thats kinda bad but this is what i cam up with i hope you like it (if you are interested in the project go check out my profile:)"}, {"post_id": 7754, "ts": "2026-06-12T23:03:36Z", "hours": 0.6658, "text": "DEVLOG - 03 added enemies that turn teal with time read devlog 00 to understand the game:) for this game i didnt want a boring health bar what i wanted was a visual indicator and well the green enemies are the health bar now you can see easily how much health they have as you can see in the video its a simple use of shaders and its my first time! I REALLY HATE THOSE but it works also look at those particles(i<3particles) –please like if you liked it and comment suggestions it really makes me feel better and improve the game"}, {"post_id": 7503, "ts": "2026-06-12T14:46:54Z", "hours": 1.8969, "text": "DEVLOG - 02 (still day one of the project i just do a lot:) IF YOU DONT KNOW WHAT THE GAME IS ABOUT GO TO DEVLOG - 00 added teal footsteps and teal bullet holes to emphasize the mix of blue and green it was implemented using decals which it is the first time i use them so they arent the greatest as you may have noticed i also added a gun with a simple animation+particles and a raycast currently it has nothing to shoot at but i might fix it soon… so the basics are done but i do need to add movement like double jump because after all it is a movement shooter and figure out how i can copy ultrakill’s movement so my game doesnt feel so “slow” next devlog will probably be today againT_T i just cant stop working on itttt"}, {"post_id": 7442, "ts": "2026-06-12T12:05:00Z", "hours": 0.9031, "text": "DEVLOG - 01 – how the way to teal(just kill) calculates sliding i added sliding and right now it isnt as smooth and polished as it might be at the end but i came up with a method that works quite well and im certain i will use it until the end how it works : if you are sliding a script checks what will be your position if you will continue in your current motion without changing the y if you wont be on the ground it means you will probably be on a slope how do we know how “sloppy”(hehe just like the game) it is? we shoot a raycast starting at the player’s feet down about 5 units(you may do whatever number you like) afterwards we check the position in which the raycast intersected with the floor and use it to calculate the force/boost we will give the player using that i can calculate everything i need to slide the player note :if you end up using it check my github because in the code you will need to adjust some things like more downward force in order for the player to not fly anyway here is a clip of it in action the game is in a newborn stage so no judging! –CODE TIME– (I NEVER USE COMMENTS BE GRATEFUL) #calculate the position in the future var horizontalVel = Vector3(velocity.x,0,velocity.z) var future = feet.global_position + horizontalVel #raycast prep var spaceState = get_world_3d().direct_space_state #starting above the future pos in case of upward slopes var rayStart = future + Vector3(0,1,0) var rayEnd = future + Vector3(0,-5,0) #setUp rayCast var rayQuery = PhysicsRayQueryParameters3D.create(rayStart,rayEnd) #so we dont hit ourselves xd rayQuery.exclude = [self.get_rid()] #now lets shoot this bad boyyy var intersect = spaceState.intersect_ray(rayQuery) #results time!!!! if intersect: #we want to return the distance from now to the future return feet.global_position.y - intersect.position.y else: #if it hits nothing we are fucking flying lets return so fucking much return 0```"}, {"post_id": 7416, "ts": "2026-06-12T10:55:30Z", "hours": 0.325, "text": "devlog - 00 today i thought about the idea of the game it will be inspired by a song i heard as a kid of a green man in a green world and he encounters a blue man “from a whole different story” the story is that you are a blue man who is sick from the inequality so you go to a mission killing all the green top % to get to a teal world from which comes the name: the way to teal(just kill) it will be a movement shooter made in godot i will try to create the assets myself but i might end up using some free models for now we will just use this bean with hands"}]...
|
Title: the way to teal(just kill) by @love | Stard Title: the way to teal(just kill) by @love | Stardance
Devlogs:
devlog - 00 today i thought about the idea of the game it will be inspired by a song i heard as a kid of a green man in a green world and he encounters a blue man “from a whole different story” the story is that you are a blue man who is sick from the inequality so you go to a mission killing all the green top % to get to a teal world from which comes the name: the way to teal(just kill) it will be a movement shooter made in godot i will try to create the assets myself but i might end up using some free models for now we will just use this bean with hands
DEVLOG - 01 – how the way to teal(just kill) calculates sliding i added sliding and right now it isnt as smooth and polished as it might be at the end but i came up with a method that works quite well and im certain i will use it until the end how it works : if you are sliding a script checks what will be your position if you will continue in your current motion without changing the y if you wont be on the ground it means you will probably be on a slope how do we know how “sloppy”(hehe just like the game) it is? we shoot a raycast starting at the player’s feet down about 5 units(you may do whatever number you like) afterwards we check the position in which the raycast intersected with the floor and use it to calculate the force/boost we will give the player using that i can calculate everything i need to slide the player note :if you end up using it check my github because in the code you will need to adjust some things like more downward force in order for the player to not fly anyway here is a clip of it in action the game is in a newborn stage so no judging! –CODE TIME– (I NEVER USE COMMENTS BE GRATEFUL) #calculate the position in the future var horizontalVel = Vector3(velocity.x,0,velocity.z) var future = feet.global_position + horizontalVel #raycast prep var spaceState = get_world_3d().direct_space_state #starting above the future pos in case of upward slopes var rayStart = future + Vector3(0,1,0) var rayEnd = future + Vector3(0,-5,0) #setUp rayCast var rayQuery = PhysicsRayQueryParameters3D.create(rayStart,rayEnd) #so we dont hit ourselves xd rayQuery.exclude = [self.get_rid()] #now lets shoot this bad boyyy var intersect = spaceState.intersect_ray(rayQuery) #results time!!!! if intersect: #we want to return the distance from now to the future return feet.global_position.y - intersect.position.y else: #if it hits nothing we are fucking flying lets return so fucking much return 0```
DEVLOG - 02 (still day one of the project i just do a lot:) IF YOU DONT KNOW WHAT THE GAME IS ABOUT GO TO DEVLOG - 00 added teal footsteps and teal bullet holes to emphasize the mix of blue and green it was implemented using decals which it is the first time i use them so they arent the greatest as you may have noticed i also added a gun with a simple animation+particles and a raycast currently it has nothing to shoot at but i might fix it soon… so the basics are done but i do need to add movement like double jump because after all it is a movement shooter and figure out how i can copy ultrakill’s movement so my game doesnt feel so “slow” next devlog will probably be today againT_T i just cant stop working on itttt
DEVLOG - 03 added enemies that turn teal with time read devlog 00 to understand the game:) for this game i didnt want a boring health bar what i wanted was a visual indicator and well the green enemies are the health bar now you can see easily how much health they have as you can see in the video its a simple use of shaders and its my first time! I REALLY HATE THOSE but it works also look at those particles(i<3particles) –please like if you liked it and comment suggestions it really makes me feel better and improve the game
mini devlog - 03.5 i wanted some art to the game so i made this banner it isnt proffesional at all and took me a damn hour for something thats kinda bad but this is what i cam up with i hope you like it (if you are interested in the project go check out my profile:)
DEVLOG - 04 HUGE MILESTONE movement is now finished with all new momentum logic and added dashing wait… why wont you just see for your selves? try out the movement in the link here and tell me if you like it:) https://idotweaks.itch.io/the-way-to-tealjust-kill note: i added downloadable versions and a web version the game is generally for windows/linux(i am on linux so i kinda have to XD) so i will not be fixing any only web only bugs anyways i have to put an image here so watch my first attempt of a crosshairT_T
DEVLOG - 05 (it should’ve taken like 30 minutes wth) i added enemies that chase you and animations to your movements the animations were the easy part… but can someone tell me why godot uses the exact same shader to all of my models? so it took me like 50 god damn minutes to realise i need to just duplicate it and then i had a typo and i thought duplicating it doesnt work because of that so i gave up and sent it to chatgpt AND THEN I WAS RIGHT I DO NEED TO DUPLICATE IT anyways here is a clip of the game now and you have to like it ALSO SPECIAL THANKS TO CONNOR - thank him he is the reason the downloads now work in itch.io at least thats what i hope because if they dont idfk what to do itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG - 06 added a main menu! now as you can see THERE IS A MAIN MENU and it doesnt work very good on linux but my eye hurts so thats a problem for tommorow and let me know how it is on windows itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG - 07 added vertical dash wall jumping and started with the tutorial level today i wanted to design the first level so i looked up what good level builders there are and saw trenchbroom and after like an hour of trying to make it work on fedora i gave up and tried something called cyclops but it doesnt support my current godot version so i spent MORE TIME diving into its code because there was only 1 small error(or so i thought) which i managed to fix but then every like 3 minutes of using it it just crashed so i guess im sticking with normal godot AND it took me like 20 versions and about 5 commits that i thought i fixed it to get to a working version of the 4 line code that lets me dash vertically but setting it up based on camera lets you dash up and gain insane momentum instantly so i tried a system of my own which calculated you vertical velocity using your horizontal one and tried a bunch of formulas and ended up with this fine version so the wall jumping was very easy to do because i just reflect the current movement and add a boost the hard part was that every time before hitting the wall i would already switch in my keyboard to the other other direction so to deal with that i “predicted the future” like i did with the slopes so that the movement feels smoother but to deal with the problem of the keyboard switching i also checked for the opposite directions(which is bassicly copy paste with minuses)so here is the code for that: if is_on_floor(): canWallJump = false return var veloc = Vector3(velocity.x,velocity.y,velocity.z) #var future = self.global_position + veloc for i in get_slide_collision_count(): var collision = get_slide_collision(i) if collision.get_normal().y < .3: wallNormal = collision.get_normal() canWallJump = true return if veloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + veloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return var altVeloc = Vector3(-velocity.x,velocity.y,velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return altVeloc = Vector3(velocity.x,velocity.y,-velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return canWallJump = false``` anyway here is a clip of the tutorial level now(compressed cause it was somehow 155mb): **NOTE**: it will be updated on itch.io after i finish making this tutorial level im just a little tired today and couldnt work on the project yesterday so i uploaded this devlog early
DEVLOG - 08 added an interesting navigation optimization script i encountered some lag even with 4 enemies so sadly i had to optimize it on the bright side i saw yesterday a video about exactly that and omfg it saved me and explains the general idea of what i do its just that i do it worse and in a different way video: https://www.youtube.com/watch?v=BPNr_txi6TU&t=813s time 33(already in link) how it works? ok so its not the MOST OPTIMAL but it is good i mean i can every time an enemy die to resort it blah blah blah and use the modulo but this works good enough even though i spent half an hour fixing a bug that doesnt exist(turns out if you select a navigation region and bake navigation mesh it does that to all regions and not just the one you selected) but for some reason i did have to use a raycast down the enemy’s feet for it to work so they wont fall probably because of friction so anyways here is the code: extends Node3D var tickAssigned = [] var tickCount = [] var currentTick = 0; var tickTimer = 0.0 const TICK_RATE = 0.025 func _ready() -> void: tickAssigned.resize(navObjects.size()) tickAssigned.fill(0) tickCount.resize(20); tickCount.fill(0) var length = navObjects.size() for i in tickAssigned.size(): tickAssigned[i] = -1 var num = 20.0 /length var current = 0.0 for i in length: if current >= 20: current -= 20 tickAssigned[i] = int(current) tickCount[int(current)]+=1 current += num``` # Called every frame. 'delta' is the elapsed time since the previous frame. ```func _process(delta: float) -> void: tickTimer +=delta if tickTimer < TICK_RATE: return tickTimer = 0.0 var tickDelta = TICK_RATE var count = 0 for entity in navObjects: if entity != null: if tickAssigned[count] == currentTick: var target = entity.target if target != null: var navAgent = entity.navAgent var mode = entity.mode var gotShot = entity.gotShot var SPEED = entity.SPEED var accelaration = entity.accelaration var velocity = entity.velocity if mode == "chase" or gotShot: navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true elif mode == "attack": navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true count+=1 currentTick +=1 if currentTick >= 20: currentTick = 0 #@onready var body =$body #@onready var explosionParticles = preload("res://Particles/enemyExplode.tscn") #var particleInstance #@export var navAgent : NavigationAgent3D #@export var damage = 10 #@export var accelaration = 10 #var target #var mode : String = "idle" #var gotShot = false``` and the enemy code is too long so i cant put it here also here is a clip of the current state of the game
DEVLOG - 09 i added a shotgun! the shotgun has a large cooldown + it applies force on you! + itch.io update IF YOU DONT CARE ABOUT THE TECHNICAL STUFF WATCH THE VIDEO DOWN HERE TO JUST SEE THE COOL SHOTGUN it was much easier to implement because all i did was add a bunch of raycasts and randomize them with this simple code: func randomizeRays(): var i : int = 0 for ray in children: if ray is RayCast3D: ray.target_position.x = orgPos[i] + randf_range(-spread,spread) i+=1 ray.target_position.y = orgPos[i] + randf_range(-spread,spread) i+=1 the actual hard part was getting both guns to work with eachother but i managed to do that the force function was also interesting because i use a chartacterbody3d in godot i have to make this stuff myself with basically only velocity so the code is pretty easy to understand i dont think i need to explain much func _applyForce(point :Vector3,force , maxRange:float = 10): var dir = global_position - point var dist = dir.length() if dist > maxRange: return dir = dir.normalized() var fallOff = clamp(1 - (dist/ maxRange),0,1) velocity += dir * force * fallOff knockbackTimer = KNOCKBACK_LOCK_TIME also the game is now updated and free on itch.io! link: https://idotweaks.itch.io/the-way-to-tealjust-kill (please download it its much better than the web version because i cant solve some web specific bugs)
DEVLOG - 10 this is a large milestone! COMPETITION ANNOUNCEMENT AT THE END i updated the map textures to a retro-ish style and updated the bullet holes and steps to look much better too! i added a timer and score with a grading system that allows for better speedrunning! i added a custom finish level orb with a custom shader that makes it look super cool look at this gameplay it looks like a real game! now the competition: so the competition will start in the next devlog because i plan to add a restart button to make it easier to speedrun and more now THE WINNER AND PRIZE: the winner will be the person that will get the highest score in 24 hours after the devlog is posted or the first person to get a perfect score of 20k(which is very hard gl) and the prize will be (imagine a drum roll) yeah you will just be on a wall or something its not that huge i will also write about you in the next devlog if thats important to you CLARIFICATIONS BECAUSE CLAUDE SAID THIS DEVLOG IS SHIT: 1.the competition will not be in the current build and will be submitted directly to me through slack/discord with the name you have in stardance 2.the prize is shit idk why claude treats it like i should try to deceive you into thinking its good, its bad i promise 3.if someone sends me they got a 20k score it will end idk whats confusing about it anyway only like 3 people will submit probably itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill (textures in web version are bugged please download!) if you have anything to say about this devlog you may comment it and i will ignore it(unless its a real question) anyway look at this clippp its happening now look at next devlog!
THE TOURNAMENT IS STARTING NOW! as you can see in the last devlog the tournament said in it is starting right now! explanation this is a speedrunning competition in my 1 level demo game(very early in development) in that game you cant even die yet so go wild rules the clips must be unedited(unless you add like an edit of lebron and then its fine) submissions end when this post reaches 24 hours/2:30 pm utc and will be sent directly to me on slack/discord(which you can find in my bio) exploits are allowed! runs can only be in the current build in itch.io -runs that are on linux/windows must not use the web version because its super bad changes this version press r to restart + finished the end gui + fixed some score calculation bugs controls: wasd + space - normal movement ngl ctrl - slide lmb - shoot(with shotgun you get knockback btw) shift - dash 1/2 - switch weapons r - restart winner the winner will be the one with highest score by the end of the 24 hours/2:30 pm utc or the first person to reach a perfect score and he will win being inside the game + in the next devlog itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill now for the general stuff my discord: swiftfishi3 my slack: loveTheGodotDeveloper (if there will be any edits i will put them here) for now take a look at my fastest run(you have to wait a bit and its mid development)- runs can only be in the current build in itch.io like and repost so more people see it:D
DEVLOG - 11 (THE GAME IS ALMOST COMPLETE) + WINNER ANNOUNCEMENT so in the competition the only person that submitted a score was in the comments and late but he is now the winner:) @Connor you won! i will add you to the game soon major things i added: a ghost of your best run that plays back (if anyone is wondering i spent like an hour making it record every input with a timestamp and the WAY easier approach i ended up using is just saving the position + rotation + weapon used every frame (if animations were important to me i would have added them its not that hard) ground slam that does damage to enemies a jump orb to make levels feel less slow minor things i added: a health bar fixed enemies to know attack with a cooldown added a death screen now the enemies have black hands because animating csg shapes is expensive the state of the game now the game now is in what i feel full technicality ready the only things needed are: more levels, bosses, more enemies, more obstacles and interesting things in general and maybe a 3rd gun but other than that its basically ready so dont forget to playtest and lmk DOWNLOAD itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill side note:D also im the developer of the game so its not that hard for me to get s+ and im sure you can too so just spam ground slam its op(expect a patch soon🫣🫣🫣)so here is a clip of me getting s+ plus you can see the ghost after
DEVLOG - 12 shipping soon notes if a reviewer sees this: i got a report about some web problems which did not happen to me, if you see the textures as too dark tho try downloading it i was not able to test the mac version as well changes i made a readme for the github added a text of damage done above enemies added a mage type enemy that shoots projectiles SHIPPING after this im shipping this so make sure to look at my github + itch.io github: https://github.com/IDoTweaks/the-way-to-teal-just-kill- itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG 13 - UPDATE 1.1! this is a large update 1.1 basically doubles the size of the game and makes it actually feel good to play heres everything: enemies/combat added 4 new enemy types: the charger (rushes you and dashes), the drone (flies around and shoots), the exploder (runs at you and goes boom), and the sniper (snipes. very creative ik) added a sniper weapon for the player too shotgun and sniper now play a little reload animation between shots the new style system grading is no longer based on time insted its based on a style meter that is affected by cool things like no scoping in the air your final grade now mixes score + style + your final health ranking up the meter pops and flashes like super cool game feel hit-stop on kills(like a tiny freeze frame) FOV widens when you’re moving fast and stuff like that low health throws up a red vignette and getting hit shows an arrow pointing at whoever hit you combo kills rise in pitch the longer chain camera rolls when you strafe and dips when you land levels redesigned level 1 from scratch added levels 2 through 6 added a proper boss fight at the end added a tutorial UI + quality of life completely new UI that looks 10x better weapon indicator in the side added sound effects and music pause menu, switching weapons with the scroll wheel, on screen enemy counter settings menu for sensitivity, fov, volume, resolution, etc progress (and your best-run ghosts) now save locally web version web version is now fixed BUT its still a desktop game so its worse download github release: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill yeah thats it now go kill stuff
DEVLOG 14 - the project is super star! boss update the current boss is very lazy in design so i decided to change it completely! with a snake boss, what i did is create a self generating floor and a snake with custom pathfinding boring technical stuff the floor has a function that does holes in it and makes sure the snake cannot get soft locked(since it cant pass through its own body) then the snake turns its positon + the player’s position into a tile in the map and using breadth first search from the head’s tile to the player’s tile it finds the next tile it needs to travel to this sounds so simple why did it take 5 hours? the reason is that this mf floor does not like generating how i want it to and i am very bad at algorithms so i had to try again and again and again and then i had to do the same thing with the snake because i havnt touched bfs in like 1.5 years THANKS FOR THE SUPER STAR as you can see while i was on vacation this project got a super star! i am very grateful for it! when will it be in the game? as you can see in the video it just follows the player right now, it has no attacks or something like it so i hope i can get it done by the end of this week(its saturday now so by next saturday) and it isnt wired into the game yet so its still just the old boss
DEVLOG 15 - boss redesign boss update the boss now attacks with a couple of new attacks! you can see them in the video AND a new paralysis system da cool af part so the boss now takes you to his office where he will offer you a deal: for 20% of your health you can get your paralysis level down! ui update so it looks better now, thats it XD UPDATE! so it is now updated in both github and itch.io but its very bad in the web versionT_T please just download itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill github: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST video btw the video was compressed and then converted so its low quality
mini DEVLOG 16 - da final straw important if you rate it please download it, the web version is much much worse new levels added levels 7-9 unfortunate losses: sadly the styling system was very bad and i couldnt make it work so i just took it out something i had to add you could cheese everything with the dashes so im sorry… i added stamina da end so yeah i wont work on this project anymore prob but i am starting my own asm docs! be sure to stay updated!
DEVLOG 17 - i cant stop working on this last devlog i said i am done with the game but after those reviews i just cant stop key insights from the reviews so the main complains are that the game isnt visually appealing in some devices it ran poorly some mechanics arent clear/ need better tutorial the sfx are annoying (also there were some balancing issues and little bugs) i still got a little less than 19 per hour meaning people really did like it and it needs little changes so what did i change? i changed the tutorial to MAKE you do each mechanic and added a ghost that shows you how to do it new sfx i changed all the art style to be cartoonist i buffed the shotgun i did so much more but its so little that i cant point to each one so lets just say qol changes planning next i have already made 2 mini bosses and currently am working on some more enemy types, i will change the current levels to be the story mode with added story and dialogue and add a completly new mode which i will talk about in later devlogs
DEVLOG 18 - ig we got a lot of art now new things in the game so pretty much all i did was new ui, make the game fit into a cartoon art style and some cover art for it new itch.io page the itch.io page sucked so i made it again and its so much better now check it out so as always the downloadable version is much better but there is still web support try it out: https://idotweaks.itch.io/the-way-to-tealjust-kill AND I LEFT SOME OF THE ART HERE SO YOU CAN SEE
Ships:
i made a speedrunning game inspired by a song, i will add more bosses and levels but now its in a state i very much like because this is my first game that i actually like i focused on the game feel way more than the looks and it shows its so fun i made a ghost system without any tutorial something i could never dream of this project let me see that i can build things on my own also i am aiming for a 3d printer so i need like 3x the hours so expect updates!
this is a movement shooter made in godot 4.6 about a blue man in a green world, i really poured my soul into it so i hope you like it:)...
|
1793000990.3584545
|
1793087390.3584545
|
|
4211
|
Wheat Operating System (WheatOS) by @Ravduct | Sta Wheat Operating System (WheatOS) by @Ravduct | Stardance...
|
Ravduct
|
0
|
60.63
|
0
|
[]
|
[{"post_id": 80878, "ts": "202 [{"post_id": 80878, "ts": "2026-10-19T04:37:06Z", "hours": 9.5486, "text": "Heap Allocation For Kernel I make heap allocations for the kernel (kmalloc and kfree). It will reserve a certain amount of memory for the kernel. I will do heap allocation for user later."}, {"post_id": 76992, "ts": "2026-10-05T08:56:10Z", "hours": 13.0931, "text": "Adding typing feature I did a lot of memory management before this to get the keyboard to work in my kernel. I also optimized and organized my source code a little bit."}, {"post_id": 70995, "ts": "2026-09-20T05:39:23Z", "hours": 8.3692, "text": "Foundation of Kernel I finished the basic printing functions. E820 Memory Map I also loaded the E820 memory map into the kernel so the kernel knows which areas of memory are usable or reserved. Screenshot Information In the picture below, the first row of numbers is the base address . The second row of numbers is the memory length (base address - memory length = physical memory area). The third row of numbers indicates the memory type (usable or reserved). In addition, the memory information will differ depending on how much memory I allocated to QEMU. In conclusion, the usable memory is 8.59GB."}, {"post_id": 63390, "ts": "2026-09-07T06:04:58Z", "hours": 9.6458, "text": "My bootloader Is Finished!!! It loads into Protected Mode (32-bit) and Long Mode (64-bit), and then jumps to the kernel. My Next Goal My next goal is to work on my kernel. Can y’all give me some ideas about the kernel? What features should it have?"}, {"post_id": 45570, "ts": "2026-08-12T04:53:27Z", "hours": 9.4389, "text": "Protected Mode (32-bit) Enabled I got into protected mode in my stage 2 bootloader. 1. A20 Line First, I have to enable the A20 line to give the computer permission to access more than 1MB memory. 2. E820 Memory Map Next, I write a part of code that informs the computer of the safe physical memory access range (tells the computer about memory areas) 3. Global Descriptor Table (GDT) Before switching to protected mode, the kernel has to know what memory areas is for what. That is why we have GDT to inform the kernel. 4. CR0.PE = 1 Finally, I enable protected mode through the register CR0."}, {"post_id": 31066, "ts": "2026-07-19T04:57:36Z", "hours": 4.2417, "text": "Stage 1 Rebuild I rebuilt the Stage 1 bootloader in a new way. It successfully loaded into the Stage 2 bootloader, but I didn’t fully develop the Stage 2 bootloader. Disk.asm I made a new file named “disk.asm” to load data from the disk into memory. It will be used by both Stage 1 and 2 bootloaders."}, {"post_id": 20557, "ts": "2026-07-02T05:17:15Z", "hours": 0.4719, "text": "Finished Stage 1 Everything in Stage 1 is done. It only works for x86 machines that have a BIOS from 1998 or later because it supports the feature that my Stage 1 bootloader has (Int 0x13, AH=0x42). What’s Next? I will work on the Stage 2 bootloader and load the machine into Long Mode (64-bit). First of all is get the Real Mode setup."}, {"post_id": 18450, "ts": "2026-06-29T16:42:59Z", "hours": 0.8031, "text": "Final of Stage 1, Beginning of Stage 2 I just found out that there are some final tasks I have to do in Stage 1 before I can completely switch to Stage 2. What’s Wrong I need to make sure the BIOS supports the function to switch to Stage 2"}, {"post_id": 14881, "ts": "2026-06-24T04:57:26Z", "hours": 0.6, "text": "Bootloader Stage 2 (still in progress) After stage 1, I continue with stage 2, which will extend the memory limit, so the os can handle more complex tasks. What Happened? Surprisingly, I don’t know why it has an error. disk_address_packet: db 0x10 db 0 dw 1 dw 0x8000 dw 0x0000 dq 1 disk_error: mov si, disk_error_message call print_loop jmp hang ret “disk_address_packet” and “disk_error” labels are to allow you to understand my screenshots more easily."}, {"post_id": 14193, "ts": "2026-06-23T05:50:17Z", "hours": 0.9475, "text": "Stage 1 Bootloader I just realized that I have lost in my own project 😅. I didn’t know what I was doing or whether it was right. Today, I finally kinda make a Stage 1 bootloader"}, {"post_id": 13554, "ts": "2026-06-22T05:56:27Z", "hours": 0.4569, "text": "Switching to A New Virtual Machine I have switched to a new virtual machine, QEMU, because I can compile and run my Assembly file (.asm) more quickly. My file will output “ Loading into Protected Mode 32-bit ” once it runs.😅 😅 😅 I am still stuck in Real Mode and still can’t get to Protected mode."}, {"post_id": 11805, "ts": "2026-06-19T06:47:33Z", "hours": 0.7722, "text": "Trying to switch CPU mode in bootloader (Part 2) Today, I am still stuck with the process of how to switch from Real Mode (16-bit) to Protected Mode (32-bit), but I think a little bit outside the box. Not only focused on A20, but I also researched the other parts in Real and Protected Mode."}, {"post_id": 11136, "ts": "2026-06-18T06:43:00Z", "hours": 0.7986, "text": "Trying to switch CPU mode in bootloader I’m currently working on the bootloader to make it from Real Mode (16-bit) to Protected Mode (32-bit) I’m still stuck with the A20 gate. I need to learn more about Assembly syntax, so it will help me understand how my CPU actually works."}, {"post_id": 7908, "ts": "2026-06-13T06:01:20Z", "hours": 0.8483, "text": "Shortcut for building files I just made a shortcut today, so it will help me later in this project. PowerShell file I have added a PowerShell file to build a Binary file (.bin) and other files (.img, .vdi) from my main Assembly file (.asm). & \"C:\\Program Files\\NASM\\nasm.exe\" -f bin boot.asm -o boot.bin del disk.img -ErrorAction SilentlyContinue del disk.vdi -ErrorAction SilentlyContinue $disk= New-Object byte[] (1474560) [IO.File]::WriteAllBytes(\"disk.img\", $disk) $boot= [IO.File]::ReadAllBytes(\"boot.bin\") $disk= [IO.File]::ReadAllBytes(\"disk.img\") [Array]::Copy($boot, 0, $disk, 0, 512) [IO.File]::WriteAllBytes(\"disk.img\", $disk) & \"C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe\" convertfromraw disk.img disk.vdi --format VDI"}, {"post_id": 6620, "ts": "2026-06-11T03:18:59Z", "hours": 0.3044, "text": "I finally get my operating system on a virtual machine and make it output some words"}, {"post_id": 6600, "ts": "2026-06-11T02:28:18Z", "hours": 0.2869, "text": "I am researching assembly programming and how hardware and software work together."}]...
|
Title: Wheat Operating System (WheatOS) by @Ravduc Title: Wheat Operating System (WheatOS) by @Ravduct | Stardance
Devlogs:
I am researching assembly programming and how hardware and software work together.
I finally get my operating system on a virtual machine and make it output some words
Shortcut for building files I just made a shortcut today, so it will help me later in this project. PowerShell file I have added a PowerShell file to build a Binary file (.bin) and other files (.img, .vdi) from my main Assembly file (.asm). & "C:\Program Files\NASM\nasm.exe" -f bin boot.asm -o boot.bin del disk.img -ErrorAction SilentlyContinue del disk.vdi -ErrorAction SilentlyContinue $disk= New-Object byte[] (1474560) [IO.File]::WriteAllBytes("disk.img", $disk) $boot= [IO.File]::ReadAllBytes("boot.bin") $disk= [IO.File]::ReadAllBytes("disk.img") [Array]::Copy($boot, 0, $disk, 0, 512) [IO.File]::WriteAllBytes("disk.img", $disk) & "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" convertfromraw disk.img disk.vdi --format VDI
Trying to switch CPU mode in bootloader I’m currently working on the bootloader to make it from Real Mode (16-bit) to Protected Mode (32-bit) I’m still stuck with the A20 gate. I need to learn more about Assembly syntax, so it will help me understand how my CPU actually works.
Trying to switch CPU mode in bootloader (Part 2) Today, I am still stuck with the process of how to switch from Real Mode (16-bit) to Protected Mode (32-bit), but I think a little bit outside the box. Not only focused on A20, but I also researched the other parts in Real and Protected Mode.
Switching to A New Virtual Machine I have switched to a new virtual machine, QEMU, because I can compile and run my Assembly file (.asm) more quickly. My file will output “ Loading into Protected Mode 32-bit ” once it runs.😅 😅 😅 I am still stuck in Real Mode and still can’t get to Protected mode.
Stage 1 Bootloader I just realized that I have lost in my own project 😅. I didn’t know what I was doing or whether it was right. Today, I finally kinda make a Stage 1 bootloader
Bootloader Stage 2 (still in progress) After stage 1, I continue with stage 2, which will extend the memory limit, so the os can handle more complex tasks. What Happened? Surprisingly, I don’t know why it has an error. disk_address_packet: db 0x10 db 0 dw 1 dw 0x8000 dw 0x0000 dq 1 disk_error: mov si, disk_error_message call print_loop jmp hang ret “disk_address_packet” and “disk_error” labels are to allow you to understand my screenshots more easily.
Final of Stage 1, Beginning of Stage 2 I just found out that there are some final tasks I have to do in Stage 1 before I can completely switch to Stage 2. What’s Wrong I need to make sure the BIOS supports the function to switch to Stage 2
Finished Stage 1 Everything in Stage 1 is done. It only works for x86 machines that have a BIOS from 1998 or later because it supports the feature that my Stage 1 bootloader has (Int 0x13, AH=0x42). What’s Next? I will work on the Stage 2 bootloader and load the machine into Long Mode (64-bit). First of all is get the Real Mode setup.
Stage 1 Rebuild I rebuilt the Stage 1 bootloader in a new way. It successfully loaded into the Stage 2 bootloader, but I didn’t fully develop the Stage 2 bootloader. Disk.asm I made a new file named “disk.asm” to load data from the disk into memory. It will be used by both Stage 1 and 2 bootloaders.
Protected Mode (32-bit) Enabled I got into protected mode in my stage 2 bootloader. 1. A20 Line First, I have to enable the A20 line to give the computer permission to access more than 1MB memory. 2. E820 Memory Map Next, I write a part of code that informs the computer of the safe physical memory access range (tells the computer about memory areas) 3. Global Descriptor Table (GDT) Before switching to protected mode, the kernel has to know what memory areas is for what. That is why we have GDT to inform the kernel. 4. CR0.PE = 1 Finally, I enable protected mode through the register CR0.
My bootloader Is Finished!!! It loads into Protected Mode (32-bit) and Long Mode (64-bit), and then jumps to the kernel. My Next Goal My next goal is to work on my kernel. Can y’all give me some ideas about the kernel? What features should it have?
Foundation of Kernel I finished the basic printing functions. E820 Memory Map I also loaded the E820 memory map into the kernel so the kernel knows which areas of memory are usable or reserved. Screenshot Information In the picture below, the first row of numbers is the base address . The second row of numbers is the memory length (base address - memory length = physical memory area). The third row of numbers indicates the memory type (usable or reserved). In addition, the memory information will differ depending on how much memory I allocated to QEMU. In conclusion, the usable memory is 8.59GB.
Adding typing feature I did a lot of memory management before this to get the keyboard to work in my kernel. I also optimized and organized my source code a little bit.
Heap Allocation For Kernel I make heap allocations for the kernel (kmalloc and kfree). It will reserve a certain amount of memory for the kernel. I will do heap allocation for user later....
|
1792713180.2731435
|
1793317980.2731435
|
|
6494
|
Irongingot by @TheShovel | Stardance
|
TheShovel
|
1
|
60.63
|
1033
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T14:59:09Z", "hours": 57.0, "multiplier": 19.31, "payout": 1033, "blessing": "neutral", "text": "Made a Minecraft server can uses like 5% CPU and less than 7mb of ram, because I really wanted to host a Java server on one of my old Raspberry Pis. I found this project called Bareiron, made by PortalRunner, but it was very very very bare bones and simple. So I decided to work on it and make it as close to vanilla as I can until I get tired of it! This is the result of that :)", "repo": "https://github.com/TheShovel/irongingot", "demo": "https://theshovel.rocks/irongingot/"}]...
|
[{"post_id": 25982, "ts": "202 [{"post_id": 25982, "ts": "2026-07-10T15:06:16Z", "hours": 3.6297, "text": "Since i made the first ship, i have gotten A LOT of bug reports, from the same guy. I want to thank this guy for actually using this and reporting all of these bugs! I still have not fixed all of them. there are a few open ones, but ill get to it eventually. The feedback for this project has been phenomenal and it has made me very happy !! I will keep working on it, adding features from time to time and fixing bugs. It wont be my main priority but ill keep working on it as much as i can :) Thank you!"}, {"post_id": 12556, "ts": "2026-06-20T14:43:31Z", "hours": 12.32, "text": "and so… with this last devlog… it ends. I will be honest, I am burnt out! So, i worked on getting a last stable build that makes survival viable on this server. Tons of testing and bug fixes went into this, and i worked constantly on it until burnout. It’s still not perfect. There’s some random bugs. You might get kicked randomly, but you should be able to get right back in every time. Hopefully. Gulp. Since the last devlog, i implemented so much stuff, i will just link the release here so you can read all of it!! https://github.com/TheShovel/irongingot/releases/tag/V1.6.1 I still am missing some features i wish i would have added. stuff like security improvements and a basic anti cheat but sadly, i gotta move on to something else. Thank you for being with me on this journey though! Was really fun! Heres a video to showcase how far i have come since i forked the original project on github :D"}, {"post_id": 9203, "ts": "2026-06-15T13:28:42Z", "hours": 6.5772, "text": "heyyyy!!! lots since last time. got the recipe book working, implemented item durability, underwater breathing, improved trading by making villagers have professions and levels and actually opening up the trading ui, but most importantly, a big change in the packet code that makes multiplayer incredibly smooth now. i am honestly so tired i cant be bothered to type every single thing i had to go through to get here, but oh my is this project getting more and more complex ish. oh also added critical hits forgot to mention that"}, {"post_id": 8298, "ts": "2026-06-13T19:55:12Z", "hours": 6.7508, "text": "well, it sure has been a bit. This took WAY longer than i thought, but… the server can now read and load vanilla buildings from the nbt data!!! Wohoo!!! This opens so many possibilities and its very exciting :D Also, i have implemented a ton of missing blocks, including blocks that connect. Fences, glass panes, hanging lanterns etc now work properly! (hopefully, im still finding bugs with this. its way more complex than it seems). Along with that, to go with the new villages, i have implemented proper trading! You can now trade with villagers, level them up and get more options! They also all have their specific clothing associated with their profession and all that! Besides that, i fixed some bug reports i got on github, improved world generation blending with structures, and other small misc stuff here and there that is not that interesting. This is really taking shape and its getting closer and closer to vanilla every day. Happy about that :)"}, {"post_id": 6795, "ts": "2026-06-11T11:56:18Z", "hours": 6.7319, "text": "back to the grind i went today. Implemented the “combat update” with amazing features like: Spiders Creepers (They actually create explosions!!) Skeletons (They pew pew) Revamped the player combat to reflect newer minecraft versions Shields (as well as other offhand fixes) Along side that, big groundwork changes. We now have SOUND!!! The server can now send sound packets so you are not left with the noise of your own breathing. AAAAAAND i finally dumped the binary format that the original bareiron used for saving. It SUCKED. It was unreliable and hard to work with. So i just went to a json solution. Im concerned how slow saving could get in a big world, but if i get complaints about that, i will launch the saving on a separate thread or something. Anything but using bin files again… This change also fixes a bug with chest data getting corrupted! So ypeeee! Ok see you next time when i add… other things that i feel like adding… mmmm yes"}, {"post_id": 5567, "ts": "2026-06-09T12:11:38Z", "hours": 4.24, "text": "hiii cuties :3 since last time, i added a couple more systems and things!! while still keeping that ridiculously low memory usage and cpu usage. We now have: Bows, with arrows that get shot with proper physics, and also get stuck to the ground if you miss! Ender pearls! They are… ender pearls! They teleport you. The end is now more… not ehttps://music.youtube.com/watch?v=XRTn6sjRHMo&list=OLAK5uy_lZCA6cMyH3cdQEeAs2WNc8q2lud18JX7gmpty! We have endermen in there too!! We also now have dungeons that spawn zombies and stuff and have juicy loot. anywayyyy i also did a lot of other general code stuff and bug fixing and parity and blah blah too tired to type all of it honestly. See you next time in “jodie tries to do basic stuff but struggles because i want to do it as efficient as possible”"}, {"post_id": 4436, "ts": "2026-06-07T19:11:59Z", "hours": 5.5061, "text": "hey! been some time since the last dev log! Added quite a lot of stuff since then! First of all… FISH! Fish mobs now spawn in water, and drop fish that you can cook. They also have fish specific pathfinding that lets them float and stuff. I also worked on nether structures! 2 different type of structures can now spawn in the nether: towers based on fortresses, and those places where the piglings live. Oh, also, piglings! They now spawn in the nether and you can trade with them! Related to structures, i have also worked on strongholds! They can now spawn underground, and they have an end portal, that right now, just sends you to a very buggy and unfinished version of the end. Regarding mechanics, i also added farming! You can now plant seeds and grow wheat and make bread! I also worked on correctly mapping block break speeds to tools, since i wasnt sending the correct tags to the client before. :And… last but not least, i reduced cpu usage by 70%!!!!! CRAZY!!! Yes the ram usage is still under 10mb, and now the cpu usage floats around 0.1 to 5% in intense situations. That is a HUGE deal taking into account that there are so many new features! (also fixed a bunch of bugs and stuff regarding numbers looping on eachother and stuff) AAAAANyway, see you next dev log :D"}, {"post_id": 3651, "ts": "2026-06-06T17:55:43Z", "hours": 1.4258, "text": "THE BOATS. THE BOATS ARE GONNA GET ME. HEEEELP HEEEEEELP"}, {"post_id": 2879, "ts": "2026-06-05T19:28:59Z", "hours": 3.6275, "text": "As i promised, i started working on the nether! Added some basic biomes and stuff. not that crazy the crazy thing i did here though is LIGHT. Now the server properly does lighting! Blocks that do light, now actually do light! Now, its not perfect. for the sake of performance and keeping that 7mb memory usage low i had to make some sacrifices. the light is per chunk, so if you place a light source between 2 chunks, you will see seams. But it wasnt all smooth sailing sadly :( most of the time i spent was fixing a segmentation fault caused by musl. It took me so long. It wasnt happening when just compiling with the system compiler, musl specifically was causing it. Every time a user joined the server id get a seg fault. Turns out, it was just a memory allocation bug. Since i have to be so tight about memory, it does cause issues as i said in my previous dev logs. Well anywayyyyyy! Next thing is gonna be nether mobs and structures! Maybe even trading?!?! no idea we will see if i feel like it lmao"}, {"post_id": 2647, "ts": "2026-06-05T09:30:55Z", "hours": 3.2011, "text": "I know i said id be working on the nether, but i realized that to make the nether cool, i need some more systems in place! so i started working on structures! Villages and little wooden tunnels can spawn around the world. Villages have multiple types based on their biome of origin, and also can spawn chests with items in them! Along with that, as you can see, the tunnels in the caves can be shaped dynamically! You can make structures shape themselves to the surface they spawn on to make them look more “dynamic”. Its gonna help a lot with the nether! This took so damn long because i spent like half of the time fixing bugs with chests and doors. The minecraft client is SO picky about entity data. Anything goes slightly wrong and BOOM you get disconnected!!! with that said im proud of what i have here so far :) next devlog will most likely be with nether world generation, unless i find another game breaking bug and have to rewrite a bunch of stuff. love you gonna go eat lunch now -3-"}, {"post_id": 2357, "ts": "2026-06-04T20:11:28Z", "hours": 1.9572, "text": "You can now craft a nether portal in survival! I implemented buckets, fluids and the interaction that allows for obsidian! Right now as you can see, the fluid interactions are kinda wacky… gonna work on that. Also, unrelated to that, but I reimplemented chests! Which took me WAAAAAY too long. It pissed me off so bad that i just left an LLM to debug stuff till it figured out why my Minecraft client was getting disconnected for a “invalid item id” when opening an empty chest (i was hungry so i wanted to eat but i also got really frustrated and wanted to figure that out. dont judge me i am disappointed in myself as well) Anyway turns out it was getting some garbage data and interpreting it as item data in a chest. Messed up some data types. Happens when you are trying to make something use as little memory as possible. While i was at it, i also added the little opening and closing animation that chests do. Apparently that is server side. Never thought it was but i guess it makes sense"}, {"post_id": 2236, "ts": "2026-06-04T16:57:23Z", "hours": 2.5894, "text": "Added FLINT AND STEEL and THE NETHER, as well as a bunch more tools to make development easier. Started working on a creative mode, even though as you can see you need to rejoin to refresh states and stuff, and also you cant use the creative UI because the server doesnt use the same stuff as a vanilla server to handle items and inventories. Also noclip, so you can woosh around!! Didnt show much of the nether yet because it is still very work in progress. Along with that, you cant make a portal in survival right now because you cant get obsidian and flint yet (flint should be pretty easy). So next up will be implementing all the stuff to make it viable to get there in survival. After that ill refine the nether world generation, add mobs and all that etc. This server still running on 7mb of ram btw B) AND IM DOING MY BEST TO KEEP IT THAT WAY!!!! :3"}, {"post_id": 1646, "ts": "2026-06-03T19:32:45Z", "hours": 2.3775, "text": "where it all starts… this is where the project is as of joining stardance! Been mainly working on making stuff easier to update and improving the build process so far. Next up: THE NETHER"}]...
|
Title: Irongingot by @TheShovel | Stardance
Devlo Title: Irongingot by @TheShovel | Stardance
Devlogs:
where it all starts… this is where the project is as of joining stardance! Been mainly working on making stuff easier to update and improving the build process so far. Next up: THE NETHER
Added FLINT AND STEEL and THE NETHER, as well as a bunch more tools to make development easier. Started working on a creative mode, even though as you can see you need to rejoin to refresh states and stuff, and also you cant use the creative UI because the server doesnt use the same stuff as a vanilla server to handle items and inventories. Also noclip, so you can woosh around!! Didnt show much of the nether yet because it is still very work in progress. Along with that, you cant make a portal in survival right now because you cant get obsidian and flint yet (flint should be pretty easy). So next up will be implementing all the stuff to make it viable to get there in survival. After that ill refine the nether world generation, add mobs and all that etc. This server still running on 7mb of ram btw B) AND IM DOING MY BEST TO KEEP IT THAT WAY!!!! :3
You can now craft a nether portal in survival! I implemented buckets, fluids and the interaction that allows for obsidian! Right now as you can see, the fluid interactions are kinda wacky… gonna work on that. Also, unrelated to that, but I reimplemented chests! Which took me WAAAAAY too long. It pissed me off so bad that i just left an LLM to debug stuff till it figured out why my Minecraft client was getting disconnected for a “invalid item id” when opening an empty chest (i was hungry so i wanted to eat but i also got really frustrated and wanted to figure that out. dont judge me i am disappointed in myself as well) Anyway turns out it was getting some garbage data and interpreting it as item data in a chest. Messed up some data types. Happens when you are trying to make something use as little memory as possible. While i was at it, i also added the little opening and closing animation that chests do. Apparently that is server side. Never thought it was but i guess it makes sense
I know i said id be working on the nether, but i realized that to make the nether cool, i need some more systems in place! so i started working on structures! Villages and little wooden tunnels can spawn around the world. Villages have multiple types based on their biome of origin, and also can spawn chests with items in them! Along with that, as you can see, the tunnels in the caves can be shaped dynamically! You can make structures shape themselves to the surface they spawn on to make them look more “dynamic”. Its gonna help a lot with the nether! This took so damn long because i spent like half of the time fixing bugs with chests and doors. The minecraft client is SO picky about entity data. Anything goes slightly wrong and BOOM you get disconnected!!! with that said im proud of what i have here so far :) next devlog will most likely be with nether world generation, unless i find another game breaking bug and have to rewrite a bunch of stuff. love you gonna go eat lunch now -3-
As i promised, i started working on the nether! Added some basic biomes and stuff. not that crazy the crazy thing i did here though is LIGHT. Now the server properly does lighting! Blocks that do light, now actually do light! Now, its not perfect. for the sake of performance and keeping that 7mb memory usage low i had to make some sacrifices. the light is per chunk, so if you place a light source between 2 chunks, you will see seams. But it wasnt all smooth sailing sadly :( most of the time i spent was fixing a segmentation fault caused by musl. It took me so long. It wasnt happening when just compiling with the system compiler, musl specifically was causing it. Every time a user joined the server id get a seg fault. Turns out, it was just a memory allocation bug. Since i have to be so tight about memory, it does cause issues as i said in my previous dev logs. Well anywayyyyyy! Next thing is gonna be nether mobs and structures! Maybe even trading?!?! no idea we will see if i feel like it lmao
THE BOATS. THE BOATS ARE GONNA GET ME. HEEEELP HEEEEEELP
hey! been some time since the last dev log! Added quite a lot of stuff since then! First of all… FISH! Fish mobs now spawn in water, and drop fish that you can cook. They also have fish specific pathfinding that lets them float and stuff. I also worked on nether structures! 2 different type of structures can now spawn in the nether: towers based on fortresses, and those places where the piglings live. Oh, also, piglings! They now spawn in the nether and you can trade with them! Related to structures, i have also worked on strongholds! They can now spawn underground, and they have an end portal, that right now, just sends you to a very buggy and unfinished version of the end. Regarding mechanics, i also added farming! You can now plant seeds and grow wheat and make bread! I also worked on correctly mapping block break speeds to tools, since i wasnt sending the correct tags to the client before. :And… last but not least, i reduced cpu usage by 70%!!!!! CRAZY!!! Yes the ram usage is still under 10mb, and now the cpu usage floats around 0.1 to 5% in intense situations. That is a HUGE deal taking into account that there are so many new features! (also fixed a bunch of bugs and stuff regarding numbers looping on eachother and stuff) AAAAANyway, see you next dev log :D
hiii cuties :3 since last time, i added a couple more systems and things!! while still keeping that ridiculously low memory usage and cpu usage. We now have: Bows, with arrows that get shot with proper physics, and also get stuck to the ground if you miss! Ender pearls! They are… ender pearls! They teleport you. The end is now more… not ehttps://music.youtube.com/watch?v=XRTn6sjRHMo&list=OLAK5uy_lZCA6cMyH3cdQEeAs2WNc8q2lud18JX7gmpty! We have endermen in there too!! We also now have dungeons that spawn zombies and stuff and have juicy loot. anywayyyy i also did a lot of other general code stuff and bug fixing and parity and blah blah too tired to type all of it honestly. See you next time in “jodie tries to do basic stuff but struggles because i want to do it as efficient as possible”
back to the grind i went today. Implemented the “combat update” with amazing features like: Spiders Creepers (They actually create explosions!!) Skeletons (They pew pew) Revamped the player combat to reflect newer minecraft versions Shields (as well as other offhand fixes) Along side that, big groundwork changes. We now have SOUND!!! The server can now send sound packets so you are not left with the noise of your own breathing. AAAAAAND i finally dumped the binary format that the original bareiron used for saving. It SUCKED. It was unreliable and hard to work with. So i just went to a json solution. Im concerned how slow saving could get in a big world, but if i get complaints about that, i will launch the saving on a separate thread or something. Anything but using bin files again… This change also fixes a bug with chest data getting corrupted! So ypeeee! Ok see you next time when i add… other things that i feel like adding… mmmm yes
well, it sure has been a bit. This took WAY longer than i thought, but… the server can now read and load vanilla buildings from the nbt data!!! Wohoo!!! This opens so many possibilities and its very exciting :D Also, i have implemented a ton of missing blocks, including blocks that connect. Fences, glass panes, hanging lanterns etc now work properly! (hopefully, im still finding bugs with this. its way more complex than it seems). Along with that, to go with the new villages, i have implemented proper trading! You can now trade with villagers, level them up and get more options! They also all have their specific clothing associated with their profession and all that! Besides that, i fixed some bug reports i got on github, improved world generation blending with structures, and other small misc stuff here and there that is not that interesting. This is really taking shape and its getting closer and closer to vanilla every day. Happy about that :)
heyyyy!!! lots since last time. got the recipe book working, implemented item durability, underwater breathing, improved trading by making villagers have professions and levels and actually opening up the trading ui, but most importantly, a big change in the packet code that makes multiplayer incredibly smooth now. i am honestly so tired i cant be bothered to type every single thing i had to go through to get here, but oh my is this project getting more and more complex ish. oh also added critical hits forgot to mention that
and so… with this last devlog… it ends. I will be honest, I am burnt out! So, i worked on getting a last stable build that makes survival viable on this server. Tons of testing and bug fixes went into this, and i worked constantly on it until burnout. It’s still not perfect. There’s some random bugs. You might get kicked randomly, but you should be able to get right back in every time. Hopefully. Gulp. Since the last devlog, i implemented so much stuff, i will just link the release here so you can read all of it!! https://github.com/TheShovel/irongingot/releases/tag/V1.6.1 I still am missing some features i wish i would have added. stuff like security improvements and a basic anti cheat but sadly, i gotta move on to something else. Thank you for being with me on this journey though! Was really fun! Heres a video to showcase how far i have come since i forked the original project on github :D
Since i made the first ship, i have gotten A LOT of bug reports, from the same guy. I want to thank this guy for actually using this and reporting all of these bugs! I still have not fixed all of them. there are a few open ones, but ill get to it eventually. The feedback for this project has been phenomenal and it has made me very happy !! I will keep working on it, adding features from time to time and fixing bugs. It wont be my main priority but ill keep working on it as much as i can :) Thank you!
Ships:
Made a Minecraft server can uses like 5% CPU and less than 7mb of ram, because I really wanted to host a Java server on one of my old Raspberry Pis. I found this project called Bareiron, made by PortalRunner, but it was very very very bare bones and simple. So I decided to work on it and make it as close to vanilla as I can until I get tired of it! This is the result of that :)...
|
1792997713.939837
|
1793084113.939837
|
|
52575
|
Lodge by @septech | Stardance
|
septech
|
0
|
60.55
|
0
|
[]
|
[{"post_id": 70702, "ts": "202 [{"post_id": 70702, "ts": "2026-09-19T16:44:49Z", "hours": 11.2886, "text": "Devlog #7 Added scene loading and scripting Now scenes are finally loaded from json, using a custom serializer, and each object can have scripts attached to it. In the demo video, the movement code is fully implemented in a lua script, which is attached to the camera. The car also has a script to rotate it and move it forward."}, {"post_id": 62863, "ts": "2026-09-06T12:09:42Z", "hours": 6.4744, "text": "Devlog #6 Improved reflections and rendering I added screen-space reflections by using ray marching in a compute shader and falling back to environment probes when off-screen. Now reflections look more realistic and metal materials can reflect too, not just glass like before. Now the asset loader also reads normals, metallicness, and roughness from models so everything looks better. I’m still only creating probes for transparent objects, I probably should start calculating good positions for them based on the environment since every object could reflect now."}, {"post_id": 61118, "ts": "2026-09-03T21:13:36Z", "hours": 5.6975, "text": "Devlog #5 Added baked glass reflections Now each glass object gets a probe that captures what the object sees on every face at scene load and the glass shader samples it instead of the sky. I also added a new pipeline and shaders so that there is a sky instead of just the clear color. It also gets reflected by the glass. It doesn’t support skyboxes yet, but that would just be updating the shader to sample a skybox instead of a function."}, {"post_id": 59816, "ts": "2026-09-01T19:34:14Z", "hours": 9.5103, "text": "Devlog #4 Added more realistic glass physics with reflections and refraction It was much simpler than what I expected, I just had to draw opaque objects to a sampler before rendering to the window and then sample that in the glass shader. Currently the reflections are just sampling a fake skybox, I’m now going to try to pass a cubemap of the scene so the reflections can finally reflect objects in the scene. I also rewrote how objects, lights and cameras are handled to use a more general API that abstracts the renderer so that adding scripting and physics is easier later."}, {"post_id": 57479, "ts": "2026-08-29T17:09:33Z", "hours": 6.4428, "text": "Devlog #3 Added lighting using phong illumination and support for transparent materials. I had to finally add a second rendering pipeline so that colored glass would blend with objects behind it, which made me have to change how I was doing rendering, but it wasn’t that big of a refactor as I expected. There are no shadows yet, so light stays the same color even if it passes through the glass, so I’ll work on that next, and allowing for rendering multiple models in the same scene."}, {"post_id": 56327, "ts": "2026-08-28T01:49:41Z", "hours": 9.6842, "text": "Devlog #2 Added loading 3D models into the engine and a debug menu for development. No lighting or transparency yet, so it looks kinda weird, but I will be adding that next. I implemented my own heap-allocated stack for computing the correct world transform for nested nodes without recursion, I think that’s a pretty neat solution."}, {"post_id": 54368, "ts": "2026-08-25T10:32:20Z", "hours": 11.4478, "text": "Spent 11h just to get a brick cube to render…. I love vulkan. Tbh, now that everything is set up everything else should be the easy part"}]...
|
Title: Lodge by @septech | Stardance
Devlogs:
Spe Title: Lodge by @septech | Stardance
Devlogs:
Spent 11h just to get a brick cube to render…. I love vulkan. Tbh, now that everything is set up everything else should be the easy part
Devlog #2 Added loading 3D models into the engine and a debug menu for development. No lighting or transparency yet, so it looks kinda weird, but I will be adding that next. I implemented my own heap-allocated stack for computing the correct world transform for nested nodes without recursion, I think that’s a pretty neat solution.
Devlog #3 Added lighting using phong illumination and support for transparent materials. I had to finally add a second rendering pipeline so that colored glass would blend with objects behind it, which made me have to change how I was doing rendering, but it wasn’t that big of a refactor as I expected. There are no shadows yet, so light stays the same color even if it passes through the glass, so I’ll work on that next, and allowing for rendering multiple models in the same scene.
Devlog #4 Added more realistic glass physics with reflections and refraction It was much simpler than what I expected, I just had to draw opaque objects to a sampler before rendering to the window and then sample that in the glass shader. Currently the reflections are just sampling a fake skybox, I’m now going to try to pass a cubemap of the scene so the reflections can finally reflect objects in the scene. I also rewrote how objects, lights and cameras are handled to use a more general API that abstracts the renderer so that adding scripting and physics is easier later.
Devlog #5 Added baked glass reflections Now each glass object gets a probe that captures what the object sees on every face at scene load and the glass shader samples it instead of the sky. I also added a new pipeline and shaders so that there is a sky instead of just the clear color. It also gets reflected by the glass. It doesn’t support skyboxes yet, but that would just be updating the shader to sample a skybox instead of a function.
Devlog #6 Improved reflections and rendering I added screen-space reflections by using ray marching in a compute shader and falling back to environment probes when off-screen. Now reflections look more realistic and metal materials can reflect too, not just glass like before. Now the asset loader also reads normals, metallicness, and roughness from models so everything looks better. I’m still only creating probes for transparent objects, I probably should start calculating good positions for them based on the environment since every object could reflect now.
Devlog #7 Added scene loading and scripting Now scenes are finally loaded from json, using a custom serializer, and each object can have scripts attached to it. In the demo video, the movement code is fully implemented in a lua script, which is attached to the camera. The car also has a script to rotate it and move it forward....
|
1792713117.3223007
|
1793317917.3223007
|
|
24173
|
Frictionless by @Stargazer5 | Stardance
|
Stargazer5
|
0
|
60.41
|
0
|
[]
|
[{"post_id": 75027, "ts": "202 [{"post_id": 75027, "ts": "2026-09-28T22:00:32Z", "hours": 9.9469, "text": "Devlog #5 of Procmonstr Apparently I had designed some of the ui back-end to process in batches while it was supposed to handle on event at a time. So I fixed that along with optimizing it a little further. To be honest I don’t really know where I left off last devlog but I might make something meaningful until tomorrow and if so I will also give a more detailed devlog. Peace."}, {"post_id": 53088, "ts": "2026-08-23T14:48:21Z", "hours": 14.0844, "text": "Devlog 4# of ProGaze(?) Dang bro I gotta write a devlog again? Well, since last time I have made it so that the kernel process trace events or rather the data that is needed from them is written into a binary file + are able to be read out of them. Besides that, just a lot of small optimizations to the event formatting, logic and structure, trying to keep it as lightweight as possible. Don’t have much to show besides a lot of code. Hopefully there’s more next time. I hope that I’ll have enough time to finish this project! I’ll try more for something finished than something perfect to ship something in time."}, {"post_id": 44066, "ts": "2026-08-09T16:11:49Z", "hours": 15.89, "text": "Devlog #3 of ProGaze I might call it that Lots of progress (atleast mentally ig), I don’t even remember where we left off. Anyways, I’m able to decode each incoming EVENT_RECORD into its’ EventPropertyInfoArray and EVENT_HEADER and then later by editable preference into individual variables. I use Tdh for this currently but might later make my own decoder if it seems relevant. I’m also almost done with parsing that preferred event data into a binary file which will serve as the actual process timeline when being used by the ui. Speaking of ui, I’ve barely started but I know that I will use egui and eframe for it. Not much else to say. I did take a pretty long break because there was a lot to process but now I’m back:p Oh I also haven’t written in my log much lately because it’s kinda unnecessarily distracting, might do it more later though. Screenshot 1 shows every available event property, some of which I could but don’t decode because they’re unnecessary Screenshot 2 shows every decoded EVENT_HEADER variable and each decoded property, both in bytes"}, {"post_id": 30956, "ts": "2026-07-18T23:32:37Z", "hours": 9.9261, "text": "Devlog #2 of my Task Manager-History tool using Rust or whatever I should call it Code progress I have successfully managed to start both a classic ETW session and a modern one and receive events from them. The difference in how the two work is that the latter uses EnableTraceEx2() (or earlier in its’ lifetime named something similar) to enable all kinds of providers while the former uses flags for the session start to enable only kernel-providers. I’ve also cleaned all of the comments from my code and pasted all of the commented versions into a .md file. Logging I’ve also logged about my understanding of the two different session versions, how they work and what the contrast between them tell me about the ETW architecture. Also written about wrappers in windows code, type casting, the difference between references and pointers in Rust, written a summary of how ETW works etc. Logging is definitely helping me remember what I’ve learned about Rust and the windows API as well as keeping both my progress and where I am going clear. Next? Next up is probably going to be the UI of my program as a desktop application, I have a vision of how I want it to look and I think starting to design it now is going to help me get to know what kind of data I am looking to receive from the events. Other I think I’m gonna keep these a little shorter just saying what I’ve done instead of explaining how everything works. Also if my logging shouldn’t count as hackatime time please let me know asap"}, {"post_id": 28393, "ts": "2026-07-14T16:59:18Z", "hours": 10.5606, "text": "(Friendly note: if your devlog is more than 4000 characters when posting, it will disappear) Devlog #1 of my windows event-tracing project written in Rust What is my project? You know Task Manager? You know how it only shows you the processes that are running in the instant that you’re looking at it? My main idea since the start has been to make an app like it but that also shows the “process history” since boot. Why? The point of the project is to allow the user more insight into what’s happening on their device, whether it’s to detect malware that sort of runs for a little while and then turns off, to see what unnecessary programs launch upon startup or just to get a better hint of what’s going on in the device. How? Figuring this out was what the first part of my project was about and I came to a surprisingly clean conclusion. ETW (Event Tracing for Windows) is an event-tracing framework built into windows whose entire role consists of tracing events (yup) I’m not too familiar with it yet but I know that it works like this in a nutshell: You start an ETW session by passing a struct which basically contains the settings for the session into a function called StartTraceW() . You enable what providers you want the session to listen to with EnableTraceEx2() , where the “providers” respectively emit notifications for different events. To receive the notifications, you use function OpenTraceW() which you also pass a struct which contains information mostly about the session you’re connecting to but also a pointer to one of your own functions (which needs a specific parameter). So basically: *my_function(trace_data) + other session info -> session_info_for_OpenTraceW -> OpenTraceW(session_info_for_OpenTraceW) And the reason you pass one of your own functions is so that ETW can call it to give you said trace data. The final stage is deciphering the above-mentioned trace_data argument that your registered function receives in order to perchance turn it into UI. And all of these functions exist inside of windows so you need a Linker so that your code can “link against” them aka. you write the definitions of the code you want to access in your code and the linker will make it so that calling your code accesses the real logic. And because there was a lot of code that I’d have to declare I used a Crate , which is basically like a built-in mechanic for code-dependencies in Rust and they work pretty much like header files in C/C++, except that they are managed through another file which is called Cargo.toml which installs the crates specified from the web where they are managed and upkept. And I haven’t mentioned that all of the windows logic including ETW is written primarily in C which might make it seem impossible for my code that interacts with it to be written in Rust but there’s something called FFI (Foreign Function Interface) which covers this completely. Where am I right now? Although my coding time has consisted of mostly logging thus far as I am learning both a new programming language and how to use ETW, at the moment I’ve made four scripts which are main.rs , ffi0.rs , ffi1.rs , misc.rs which basically covers stage 1 and 3 of the ETW explanation that I gave above. What’s next? The immediate next step is probably going to be to make my code do what it’s supposed to and start a session, after that it’s stage 2 and then a little into stage 4. That’s a few things necessary before configuring the UI and such. Something else I want to manage before that is schedule an ETW session for next boot that writes its’ data into a file which my program will then read."}]...
|
Title: Frictionless by @Stargazer5 | Stardance
De Title: Frictionless by @Stargazer5 | Stardance
Devlogs:
(Friendly note: if your devlog is more than 4000 characters when posting, it will disappear) Devlog #1 of my windows event-tracing project written in Rust What is my project? You know Task Manager? You know how it only shows you the processes that are running in the instant that you’re looking at it? My main idea since the start has been to make an app like it but that also shows the “process history” since boot. Why? The point of the project is to allow the user more insight into what’s happening on their device, whether it’s to detect malware that sort of runs for a little while and then turns off, to see what unnecessary programs launch upon startup or just to get a better hint of what’s going on in the device. How? Figuring this out was what the first part of my project was about and I came to a surprisingly clean conclusion. ETW (Event Tracing for Windows) is an event-tracing framework built into windows whose entire role consists of tracing events (yup) I’m not too familiar with it yet but I know that it works like this in a nutshell: You start an ETW session by passing a struct which basically contains the settings for the session into a function called StartTraceW() . You enable what providers you want the session to listen to with EnableTraceEx2() , where the “providers” respectively emit notifications for different events. To receive the notifications, you use function OpenTraceW() which you also pass a struct which contains information mostly about the session you’re connecting to but also a pointer to one of your own functions (which needs a specific parameter). So basically: *my_function(trace_data) + other session info -> session_info_for_OpenTraceW -> OpenTraceW(session_info_for_OpenTraceW) And the reason you pass one of your own functions is so that ETW can call it to give you said trace data. The final stage is deciphering the above-mentioned trace_data argument that your registered function receives in order to perchance turn it into UI. And all of these functions exist inside of windows so you need a Linker so that your code can “link against” them aka. you write the definitions of the code you want to access in your code and the linker will make it so that calling your code accesses the real logic. And because there was a lot of code that I’d have to declare I used a Crate , which is basically like a built-in mechanic for code-dependencies in Rust and they work pretty much like header files in C/C++, except that they are managed through another file which is called Cargo.toml which installs the crates specified from the web where they are managed and upkept. And I haven’t mentioned that all of the windows logic including ETW is written primarily in C which might make it seem impossible for my code that interacts with it to be written in Rust but there’s something called FFI (Foreign Function Interface) which covers this completely. Where am I right now? Although my coding time has consisted of mostly logging thus far as I am learning both a new programming language and how to use ETW, at the moment I’ve made four scripts which are main.rs , ffi0.rs , ffi1.rs , misc.rs which basically covers stage 1 and 3 of the ETW explanation that I gave above. What’s next? The immediate next step is probably going to be to make my code do what it’s supposed to and start a session, after that it’s stage 2 and then a little into stage 4. That’s a few things necessary before configuring the UI and such. Something else I want to manage before that is schedule an ETW session for next boot that writes its’ data into a file which my program will then read.
Devlog #2 of my Task Manager-History tool using Rust or whatever I should call it Code progress I have successfully managed to start both a classic ETW session and a modern one and receive events from them. The difference in how the two work is that the latter uses EnableTraceEx2() (or earlier in its’ lifetime named something similar) to enable all kinds of providers while the former uses flags for the session start to enable only kernel-providers. I’ve also cleaned all of the comments from my code and pasted all of the commented versions into a .md file. Logging I’ve also logged about my understanding of the two different session versions, how they work and what the contrast between them tell me about the ETW architecture. Also written about wrappers in windows code, type casting, the difference between references and pointers in Rust, written a summary of how ETW works etc. Logging is definitely helping me remember what I’ve learned about Rust and the windows API as well as keeping both my progress and where I am going clear. Next? Next up is probably going to be the UI of my program as a desktop application, I have a vision of how I want it to look and I think starting to design it now is going to help me get to know what kind of data I am looking to receive from the events. Other I think I’m gonna keep these a little shorter just saying what I’ve done instead of explaining how everything works. Also if my logging shouldn’t count as hackatime time please let me know asap
Devlog #3 of ProGaze I might call it that Lots of progress (atleast mentally ig), I don’t even remember where we left off. Anyways, I’m able to decode each incoming EVENT_RECORD into its’ EventPropertyInfoArray and EVENT_HEADER and then later by editable preference into individual variables. I use Tdh for this currently but might later make my own decoder if it seems relevant. I’m also almost done with parsing that preferred event data into a binary file which will serve as the actual process timeline when being used by the ui. Speaking of ui, I’ve barely started but I know that I will use egui and eframe for it. Not much else to say. I did take a pretty long break because there was a lot to process but now I’m back:p Oh I also haven’t written in my log much lately because it’s kinda unnecessarily distracting, might do it more later though. Screenshot 1 shows every available event property, some of which I could but don’t decode because they’re unnecessary Screenshot 2 shows every decoded EVENT_HEADER variable and each decoded property, both in bytes
Devlog 4# of ProGaze(?) Dang bro I gotta write a devlog again? Well, since last time I have made it so that the kernel process trace events or rather the data that is needed from them is written into a binary file + are able to be read out of them. Besides that, just a lot of small optimizations to the event formatting, logic and structure, trying to keep it as lightweight as possible. Don’t have much to show besides a lot of code. Hopefully there’s more next time. I hope that I’ll have enough time to finish this project! I’ll try more for something finished than something perfect to ship something in time.
Devlog #5 of Procmonstr Apparently I had designed some of the ui back-end to process in batches while it was supposed to handle on event at a time. So I fixed that along with optimizing it a little further. To be honest I don’t really know where I left off last devlog but I might make something meaningful until tomorrow and if so I will also give a more detailed devlog. Peace....
|
1792533205.9345427
|
1793138005.9345427
|
|
45772
|
DuckyOS by @ducky-violin | Stardance
|
ducky-violin
|
3
|
60.16
|
747
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-30T18:53:20Z", "hours": 39.0, "multiplier": 12.86, "payout": 602, "blessing": "neutral", "text": "DuckyOS - Spaceship Update: Part 1! The Curious Duck has approved of your ability and accepted you into the Secret Duck Society. You’ve been assigned a mission: infiltrate the mysterious alien spaceship that has been disturbing the peace of the ducks! Uncover the secrets of the Spaceship as you explore… To start the journey from the beginning, use this link: https://ducky-violin.github.io/duckyOS/index.html To continue where you left off from the previous update, use this link: https://ducky-violin.github.io/duckyOS/curiousduck.html DuckyOS originally started as a WebOS mission, but I changed the direction/goal toward an escape-room-like challenge. The project includes features such as draggable windows, selected apps, and navigable pages–just in a different way than you would expect ;) New features: -Added prologue page for story/context + instructions -Changed index.html into a redirect to prologue (index.html is blank) -Updated Matrix level headers (dark green headers) to have “cursor: pointer” to make draggability clearer -Curious Duck sends you off on a mission! -Space-themed level with fade-in text and element transitions -Added favicons and page titles -Draggable space elements (newspapers and job postings) -3 duck app icons; each give you a hint -App icons will turn “selected” (become a circle) when clicked -1 hidden duck that helps you find the application passcode -Links to Wikipedia pages on coal mining and aluminum recycling Spaceship Hints: -Read the newspaper! -Apply for a job! Being employed is nice… -Be a kind citizen and offer a drink to that studious duck! -Looking for the stolen newspaper? Check the original newspaper first!", "repo": "https://github.com/ducky-violin/duckyOS", "demo": "https://ducky-violin.github.io/duckyOS/"}, {"ship_num": 2, "ts": "2026-08-15T19:30:23Z", "hours": 10.0, "multiplier": 14.27, "payout": 145, "blessing": "neutral", "text": "“You have been taken to a secret duck base, and you must prove your worth in order to join the Secret Duck Society. Will you take on the challenge?” DuckyOS becomes a Secret Duck Society puzzle! Updates: -Added 3 app icons; each opens a window or a notification/task -App icons will turn “selected” (become a circle) when clicked -Secret “keys” hidden throughout the page; you have to find all 3 in order to unlock the hidden door -Added alert() notifications to add variety to the types of messages the user gets -Also uses confirm() and a text input button for tasks -There is one task that has the prerequisite of completing the two other tasks to unlock -Secret door will give you a hint if you click on it twice and only if you have not completed one of the quests Recap of old features: -Link to Wikipedia article with the Welcome Duck -Closeable welcome window -Openable welcome window (click the clock) -Draggable welcome window -Ducks that will hide if you click on them / drag them around (they’re shy! ;) ) -Summon ducks back with the header text May you be the next Secret Duck Society member, and most importantly, HAVE FUN! (By the way, README has hints if you’re stuck!)", "repo": "https://github.com/ducky-violin/duckyOS", "demo": "https://ducky-violin.github.io/duckyOS/"}, {"ship_num": 3, "ts": "2026-08-11T06:00:38Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "DuckyOS - a webpage of ducks and hidden clicks! 4 windows: a welcome page and 3 duck images (draggable) Ducks are shy and will hide if you click on them (or drag them), but you can summon them again with the header! Accidentally closed the welcome window and can’t figure out how to get it up again? I’ll give you a hint: check the clock when you first reload the page… (it has a certain text!) If you still don’t know what DuckyOS is, why don’t you check the definition of “duckOS” on the welcome page? It has a cool thing where you can hover over it and get a definition! I really enjoyed this project and look forward to updating it soon :3", "repo": "https://github.com/ducky-violin/duckyOS", "demo": "https://ducky-violin.github.io/duckyOS/"}]...
|
[{"post_id": 60654, "ts": "202 [{"post_id": 60654, "ts": "2026-09-03T04:44:20Z", "hours": 8.1594, "text": "It seems there is more to it than meets the eye… -added space-themed background (credits: NASA) -added 4 “secret text” boxes, each with different dimensions -moved around the boxes and fit them into the screen without too much overlap –> exception: box below “main box” is overlapping (intentional), but will be hidden on-enter and summoned through a different interaction -hid secret text in the boxes by making the font color the same as the background color -hid hints about where to find the “water vault” in the boxes -added a clock to the bottom-right corner of the screen -clock is functional and displays current time -clock will make cursor: pointer on hover -added draggable + openWindow + closeWindow functions to the js file Formatting the boxes and customizing the background was annoying. I couldn’t just copy-paste everything because the boxes were in different dimensions and different positions, and the background was difficult to find because I kept finding backgrounds that were the wrong dimensions (and it would just copy-paste itself on the screen, making it look like a grid of images instead of one image). Also, I was planning to add duck app icons, but since this is technically part 2 of Spaceship (and not a “main” page), I thought that adding duck icons wouldn’t be as fitting in this situation. clock-vault-summon interaction is under way…"}, {"post_id": 58339, "ts": "2026-08-30T18:39:39Z", "hours": 2.2364, "text": "Final polishing on the Spaceship page: part 1! -changed passcode to not be case-sensitive -edited transition page (Matrix –> Spaceship) –> changed text to match spaceship-specific advice -made new newspaper box draggable -added “selected app” look -compiled devlog updates into README -added hints for spaceship in README -removed cursor: pointer in non-clickable areas (even if draggable) –> reduces confusion on what opens links/events"}, {"post_id": 57841, "ts": "2026-08-30T04:27:49Z", "hours": 8.5392, "text": "-updated passcode barrier to react if the correct answer is inputted -edited the formatting of the application passcode window -updated soda duck interaction -added a receive/decline soda action -added a reminder to recycle the soda can when done -added aluminum recycling Wikipedia to post-soda-interaction interaction -changed interaction with studious duck to include soda task -added secret hint window, given by studious duck -secret hint window is only accessible after giving studious duck the soda -changed “reparier” job to “engineer” job -changed water-carrying-duck interaction -implemented a function to add a delay before alert() so that alert() interactions aren’t as in-your-face -added a transition message for entering new area -added a conclusion message to inform user that the new update is not yet finished I did a bit of researching on water pollution and coal mining to make sure the context for this made sense, and I also spent a while trying to figure out how to give the user the hint on how to unlock the application portal without making it too easy or too difficult. I’ve finally finished part 1 of the Spaceship realm, though! :3"}, {"post_id": 56324, "ts": "2026-08-28T01:48:06Z", "hours": 7.8986, "text": "-added duck interruption to Newspaper -added closebutton for duck interruption notif -merged duck image and duck notif into the same div -added stolen newspaper text / /new newspaper -linked coal mining Wikipedia to new newspaper -changed querySelector() to getElemendById() in the is() function -added waterbottleduck interaction -added sodaduck interaction -added studiousduck interaction -added application portal interaction (passcode-locked) silly dev moments: -I kept forgetting to add “” when using my is() function -when I did remember to add “”, I sometimes forgot the is() part and just put the element name -sometimes I’d forget both … and then I’d wonder why my code wasn’t running. I’d run through all the js line-by-line, trying to catch an error, when the answer was right in front of me-"}, {"post_id": 54865, "ts": "2026-08-26T02:03:02Z", "hours": 7.4658, "text": "-edited Newspaper details and formatting -added [Read more] for Newspaper -added [Apply here] for Job Postings -added 3 duck icons: –> carefree soda-carrying duck –> studious duck –> jubilant water-carrying duck -added fade-in transition to all 3 duck icon apps -changed timings of Spaceship elements -updated moveable windows to “cursor: pointer” to indicate draggability -updated Matrix level headers (dark green headers) to have “cursor: pointer” to make draggability clearer –> feedback from previous ship told me that I should make it clearer if it’s draggable; hopefully this makes it better! -added a duck agent interruption to reading the newspaper silly dev moment: I reused the “notif” css class for the duck interruption message, but the text was white because in the tag, I had defined all text to be white. However, I didn’t notice that; all I saw was that the “notif” css class didn’t specifically define text color. I kept trying to find where the white text color was coming from, and ended up copy-pasting the notif class and adding a “color: black” to override whatever was changing the text color. After I had changed the newspaper notif to a new space notif class, I realized I could’ve just kept the notif class and made the text black (since all the notif text was black anyways so it wouldn’t have mattered). I’m going insane ;-;"}, {"post_id": 53982, "ts": "2026-08-24T18:13:06Z", "hours": 8.2833, "text": "-added favicon to pages (prologue, intro, curious duck, spaceship) -added names to pages (noted above) -rearranged images into a folder, and organized images per page (intro page vs space page, etc.) -defined a function to get element instead of using document.getElementById() every time -added two new windows to Spaceship -made Spaceship windows draggable -added a delay to Spaceship typing intro -added a delay to Spaceship windows appearance (to appear after the text finished typing) -added a delay to Curious Duck appearance (movement makes it easier to spot; less likely to miss) a particularly silly mistake I found funny: I defined the location for the Spaceship div windows in the html file, but I forgot about it and started defining the location with the css file. I was really confused as to why editing the css file didn’t affect the location (it was being overridden by the html one the whole time)"}, {"post_id": 53305, "ts": "2026-08-23T19:28:20Z", "hours": 4.6397, "text": "-changed index.html into a redirect to prologue -added prologue page for story/context + instructions –> took feedback from previous ship stating that the instructions were unclear and the site was confusing; hopefully this clears things up! -added curious duck to the conclusion of the first level -curious duck redirects to a transition/instructions page, which then redirects into the next level -space-themed level! made the “welcome” sign fade in and added typing transition silly mistakes I found funny: -I linked the prologue script to the curious duck transition page instead of the transition script and was frustrated that nothing on the transition script was running -I tried to put a tag inside of another tag and was wondering why the id assignment wasn’t working"}, {"post_id": 47685, "ts": "2026-08-15T19:20:38Z", "hours": 2.5781, "text": "Final stretch! -added leafduck quest (task) -added icon-selection change (app becomes circular when clicked) to puzzle and leaf task -coded the “locked door” to become functional -locked door will now open if you have solved all the puzzles -updated README to have clearer instructions and a story silly mistake I found funny: I spent a long time trying to figure out why the leaf duck wasn’t updating its leafsolve variable, and then I realized I had put == instead of = :’)"}, {"post_id": 47295, "ts": "2026-08-15T04:54:43Z", "hours": 7.5728, "text": "New puzzle and escape-room-like format! I’m excited for this project :) -added app icons -coded a hints button (hidden) -added a secret door… somewhere ;) -gave the secret door hints (if the user clicks it, it’s locked and says nothing; if the user clicks it a second time without completing the first task, the door gives a hint); this is to prevent users from getting frustrated! The formatting for everything took so long, and fixing the code was difficult since there were so many lines and I had to test each line step-by-step to find out why the alert() wasn’t working or why the user-typed input didn’t go through D: There are two puzzles available so far, but I will add a third one to complete it! After that, I’m planning to redesign the welcome page completely to bring an escape-room-esque vibe ;)"}, {"post_id": 45030, "ts": "2026-08-11T05:46:24Z", "hours": 1.5047, "text": "-added 3 new duck image windows (draggable + click to disappear), can be summoned using header -organized CSS and JS scripts to another folder (for organization) -formatted so that time says “launching welcome page” when loading (it’s a hint that you can click it to show the welcome window!) goal is to add more easter eggs and make this more interesting!"}, {"post_id": 44260, "ts": "2026-08-09T21:53:14Z", "hours": 1.42, "text": "the MATRIX?! (plot twist: it’s not the matrix. it’s a duck.) -added header -added background -added time clock -reformatted a lot of the page"}, {"post_id": 43626, "ts": "2026-08-09T00:21:03Z", "hours": 0.5189, "text": "it’s a duck website! -welcome message -intro text -duck image -Wikipedia page to the damaging environmental actions of humans -duckOS defined as a duck website made by a duck -compos mantis"}]...
|
Title: DuckyOS by @ducky-violin | Stardance
Devlo Title: DuckyOS by @ducky-violin | Stardance
Devlogs:
it’s a duck website! -welcome message -intro text -duck image -Wikipedia page to the damaging environmental actions of humans -duckOS defined as a duck website made by a duck -compos mantis
the MATRIX?! (plot twist: it’s not the matrix. it’s a duck.) -added header -added background -added time clock -reformatted a lot of the page
-added 3 new duck image windows (draggable + click to disappear), can be summoned using header -organized CSS and JS scripts to another folder (for organization) -formatted so that time says “launching welcome page” when loading (it’s a hint that you can click it to show the welcome window!) goal is to add more easter eggs and make this more interesting!
New puzzle and escape-room-like format! I’m excited for this project :) -added app icons -coded a hints button (hidden) -added a secret door… somewhere ;) -gave the secret door hints (if the user clicks it, it’s locked and says nothing; if the user clicks it a second time without completing the first task, the door gives a hint); this is to prevent users from getting frustrated! The formatting for everything took so long, and fixing the code was difficult since there were so many lines and I had to test each line step-by-step to find out why the alert() wasn’t working or why the user-typed input didn’t go through D: There are two puzzles available so far, but I will add a third one to complete it! After that, I’m planning to redesign the welcome page completely to bring an escape-room-esque vibe ;)
Final stretch! -added leafduck quest (task) -added icon-selection change (app becomes circular when clicked) to puzzle and leaf task -coded the “locked door” to become functional -locked door will now open if you have solved all the puzzles -updated README to have clearer instructions and a story silly mistake I found funny: I spent a long time trying to figure out why the leaf duck wasn’t updating its leafsolve variable, and then I realized I had put == instead of = :’)
-changed index.html into a redirect to prologue -added prologue page for story/context + instructions –> took feedback from previous ship stating that the instructions were unclear and the site was confusing; hopefully this clears things up! -added curious duck to the conclusion of the first level -curious duck redirects to a transition/instructions page, which then redirects into the next level -space-themed level! made the “welcome” sign fade in and added typing transition silly mistakes I found funny: -I linked the prologue script to the curious duck transition page instead of the transition script and was frustrated that nothing on the transition script was running -I tried to put a tag inside of another tag and was wondering why the id assignment wasn’t working
-added favicon to pages (prologue, intro, curious duck, spaceship) -added names to pages (noted above) -rearranged images into a folder, and organized images per page (intro page vs space page, etc.) -defined a function to get element instead of using document.getElementById() every time -added two new windows to Spaceship -made Spaceship windows draggable -added a delay to Spaceship typing intro -added a delay to Spaceship windows appearance (to appear after the text finished typing) -added a delay to Curious Duck appearance (movement makes it easier to spot; less likely to miss) a particularly silly mistake I found funny: I defined the location for the Spaceship div windows in the html file, but I forgot about it and started defining the location with the css file. I was really confused as to why editing the css file didn’t affect the location (it was being overridden by the html one the whole time)
-edited Newspaper details and formatting -added [Read more] for Newspaper -added [Apply here] for Job Postings -added 3 duck icons: –> carefree soda-carrying duck –> studious duck –> jubilant water-carrying duck -added fade-in transition to all 3 duck icon apps -changed timings of Spaceship elements -updated moveable windows to “cursor: pointer” to indicate draggability -updated Matrix level headers (dark green headers) to have “cursor: pointer” to make draggability clearer –> feedback from previous ship told me that I should make it clearer if it’s draggable; hopefully this makes it better! -added a duck agent interruption to reading the newspaper silly dev moment: I reused the “notif” css class for the duck interruption message, but the text was white because in the tag, I had defined all text to be white. However, I didn’t notice that; all I saw was that the “notif” css class didn’t specifically define text color. I kept trying to find where the white text color was coming from, and ended up copy-pasting the notif class and adding a “color: black” to override whatever was changing the text color. After I had changed the newspaper notif to a new space notif class, I realized I could’ve just kept the notif class and made the text black (since all the notif text was black anyways so it wouldn’t have mattered). I’m going insane ;-;
-added duck interruption to Newspaper -added closebutton for duck interruption notif -merged duck image and duck notif into the same div -added stolen newspaper text / /new newspaper -linked coal mining Wikipedia to new newspaper -changed querySelector() to getElemendById() in the is() function -added waterbottleduck interaction -added sodaduck interaction -added studiousduck interaction -added application portal interaction (passcode-locked) silly dev moments: -I kept forgetting to add “” when using my is() function -when I did remember to add “”, I sometimes forgot the is() part and just put the element name -sometimes I’d forget both … and then I’d wonder why my code wasn’t running. I’d run through all the js line-by-line, trying to catch an error, when the answer was right in front of me-
-updated passcode barrier to react if the correct answer is inputted -edited the formatting of the application passcode window -updated soda duck interaction -added a receive/decline soda action -added a reminder to recycle the soda can when done -added aluminum recycling Wikipedia to post-soda-interaction interaction -changed interaction with studious duck to include soda task -added secret hint window, given by studious duck -secret hint window is only accessible after giving studious duck the soda -changed “reparier” job to “engineer” job -changed water-carrying-duck interaction -implemented a function to add a delay before alert() so that alert() interactions aren’t as in-your-face -added a transition message for entering new area -added a conclusion message to inform user that the new update is not yet finished I did a bit of researching on water pollution and coal mining to make sure the context for this made sense, and I also spent a while trying to figure out how to give the user the hint on how to unlock the application portal without making it too easy or too difficult. I’ve finally finished part 1 of the Spaceship realm, though! :3
Final polishing on the Spaceship page: part 1! -changed passcode to not be case-sensitive -edited transition page (Matrix –> Spaceship) –> changed text to match spaceship-specific advice -made new newspaper box draggable -added “selected app” look -compiled devlog updates into README -added hints for spaceship in README -removed cursor: pointer in non-clickable areas (even if draggable) –> reduces confusion on what opens links/events
It seems there is more to it than meets the eye… -added space-themed background (credits: NASA) -added 4 “secret text” boxes, each with different dimensions -moved around the boxes and fit them into the screen without too much overlap –> exception: box below “main box” is overlapping (intentional), but will be hidden on-enter and summoned through a different interaction -hid secret text in the boxes by making the font color the same as the background color -hid hints about where to find the “water vault” in the boxes -added a clock to the bottom-right corner of the screen -clock is functional and displays current time -clock will make cursor: pointer on hover -added draggable + openWindow + closeWindow functions to the js file Formatting the boxes and customizing the background was annoying. I couldn’t just copy-paste everything because the boxes were in different dimensions and different positions, and the background was difficult to find because I kept finding backgrounds that were the wrong dimensions (and it would just copy-paste itself on the screen, making it look like a grid of images instead of one image). Also, I was planning to add duck app icons, but since this is technically part 2 of Spaceship (and not a “main” page), I thought that adding duck icons wouldn’t be as fitting in this situation. clock-vault-summon interaction is under way…
Ships:
DuckyOS - a webpage of ducks and hidden clicks! 4 windows: a welcome page and 3 duck images (draggable) Ducks are shy and will hide if you click on them (or drag them), but you can summon them again with the header! Accidentally closed the welcome window and can’t figure out how to get it up again? I’ll give you a hint: check the clock when you first reload the page… (it has a certain text!) If you still don’t know what DuckyOS is, why don’t you check the definition of “duckOS” on the welcome page? It has a cool thing where you can hover over it and get a definition! I really enjoyed this project and look forward to updating it soon :3
“You have been taken to a secret duck base, and you must prove your worth in order to join the Secret Duck Society. Will you take on the challenge?” DuckyOS becomes a Secret Duck Society puzzle! Updates: -Added 3 app icons; each opens a window or a notification/task -App icons will turn “selected” (become a circle) when clicked -Secret “keys” hidden throughout the page; you have to find all 3 in order to unlock the hidden door -Added alert() notifications to add variety to the types of messages the user gets -Also uses confirm() and a text input button for tasks -There is one task that has the prerequisite of completing the two other tasks to unlock -Secret door will give you a hint if you click on it twice and only if you have not completed one of the quests Recap of old features: -Link to Wikipedia article with the Welcome Duck -Closeable welcome window -Openable welcome window (click the clock) -Draggable welcome window -Ducks that will hide if you click on them / drag them around (they’re shy! ;) ) -Summon ducks back with the header text May you be the next Secret Duck Society member, and most importantly, HAVE FUN! (By the way, README has hints if you’re stuck!)
DuckyOS - Spaceship Update: Part 1! The Curious Duck has approved of your ability and accepted you into the Secret Duck Society. You’ve been assigned a mission: infiltrate the mysterious alien spaceship that has been disturbing the peace of the ducks! Uncover the secrets of the Spaceship as you explore… To start the journey from the beginning, use this link: https://ducky-violin.github.io/duckyOS/index.html To continue where you left off from the previous update, use this link: https://ducky-violin.github.io/duckyOS/curiousduck.html DuckyOS originally started as a WebOS mission, but I changed the direction/goal toward an escape-room-like challenge. The project includes features such as draggable windows, selected apps, and navigable pages–just in a different way than you would expect ;) New features: -Added prologue page for story/context + instructions -Changed index.html into a redirect to prologue (index.html is blank) -Updated Matrix level headers (dark green headers) to have “cursor: pointer” to make draggability clearer -Curious Duck sends you off on a mission! -Space-themed level with fade-in text and element transitions -Added favicons and page titles -Draggable space elements (newspapers and job postings) -3 duck app icons; each give you a hint -App icons will turn “selected” (become a circle) when clicked -1 hidden duck that helps you find the application passcode -Links to Wikipedia pages on coal mining and aluminum recycling Spaceship Hints: -Read the newspaper! -Apply for a job! Being employed is nice… -Be a kind citizen and offer a drink to that studious duck! -Looking for the stolen newspaper? Check the original newspaper first!...
|
1792875211.7389245
|
1793739211.7389245
|
|
8178
|
GVK renderer by @gungu | Stardance
|
gungu
|
2
|
60.0
|
1009
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T14:22:35Z", "hours": 13.0, "multiplier": 19.44, "payout": 261, "blessing": "neutral", "text": "This is the second ship of my game engine / renderer. To explain, I like calling it a renderer instead of a game engine, because I purposefully tried to add as few bloat features as I could, I just wanted something that made rendering something that I don’t have to think about. More info on the README page, this isn’t a good explanation. Just know that it isn’t just a basic Vulkan abstraction, this is a full renderer with PBR, many post-processing effects, skyboxes, dynamic lights, rigged and animated meshes and frustrum culling ’cause why not. Changelog since the last ship: 2 new post-processing effects, pixelation and fog I also added a feature where shiny objects reflect the skybox, which isn’t realistic, but it adds a great sense of realism and I like to add it to my games. one of the largest changes was turning this into an actual library instead of an executable, which allows easier integration. I also made a full game as a tech demo for this project, it can be found at this link or under my stardance profile. It turned out really well, and I’m proud of myself, because I finally made a game engine that I can actually make games in easily. (The screenshot is from the game) and the smallest but still a significant change was rewriting the entire 2D rendering part of the engine for 2 reasons: it had a memory leak, and text rendering was buggy, slow and barely worked.", "repo": "https://github.com/gungugugungu/GVK-Engine", "demo": "https://github.com/gungugugungu/GVK-Engine/releases"}, {"ship_num": 2, "ts": "2026-08-17T20:15:46Z", "hours": 47.0, "multiplier": 15.86, "payout": 748, "blessing": "neutral", "text": "GVK (short for gungu vulkan) is my new renderer using the Vulkan graphics api. I miss the times when I worked with pygame and love2d, where rendering an image was one simple line of code, and I intend to bring that experience to 3D with this project. Everything is designed to be as easy as possible for the user, just writes gvk::draw_mesh(mesh, material, position, scale, rotation); and the mesh is where you want it, how you want it. But don’t mistake it, this is not a game engine, this is just a renderer, something you can build an engine on. I made this tool so my later projects have a graphical backbone to build on, but every game needs a different engine. Ever since I started graphics programming last year I knew that one day I had to learn Vulkan if I ever wanted a job in it in the future, and I’m very proud of myself for finally doing it. This was the greatest challenge I faced in programming so far, and I so glad I tackled it. And as for AI: This project was created so I could learn Vulkan, and if I copied everything from AI that would have been to effective. My goal was to use as little AI as I could, while still leaving out the headaches of development. Here’s what I used AI for: Many of the shaders were written by AI, but that’s because I haven’t learned any of the maths I need to know to write any of these shader. When a shader wasn’t too math heavy I wrote it myself, but there weren’t too many of those. The GLTF loading isn’t hard, it’s just a headache to work with it. GLTF is a horrible format for developers, but it’s the best I knew, so I rather had AI write the GLTF loading functions. I’m still glad I did that, I would have learned nothing from writing those.", "repo": "https://github.com/gungugugungu/GVK-Engine", "demo": "https://github.com/gungugugungu/GVK-Engine/releases"}]...
|
[{"post_id": 63563, "ts": "202 [{"post_id": 63563, "ts": "2026-09-07T14:07:41Z", "hours": 0.4622, "text": "I made a few minor tweaks to fog, and I started debugging it, which I ended up completely stopping and reverting, as it was useless. To be honest I’m really trying to find where this 27 minutes appeared, because I don’t remember spending half an hour on this"}, {"post_id": 61085, "ts": "2026-09-03T20:06:12Z", "hours": 0.76, "text": "FOG Yeah I just added fog because I thought it would look cool in my game. Obviously it’s over the top in this image because I wanted to show it off. I’m pretty proud of this one, definitely one of the more complex post-processing effects."}, {"post_id": 60850, "ts": "2026-09-03T14:06:32Z", "hours": 0.2822, "text": "SKYBOX REFLECTIONS This is a neat trick I did in my last engine and I’m happy I recreated it in this one. Every single shiny surface reflects the skybox, which while isn’t realistic, it does make those surfaces look a lot more shiny than what they actually are, which is a great hack. It sure as hell looks better in the environments I make."}, {"post_id": 60834, "ts": "2026-09-03T13:41:51Z", "hours": 0.5078, "text": "Screen-space reflections would be a major challenge, but I learned that making the skybox reflect off of shiny surfaces is a pretty good way of making your renders seem much better. As of right now it technically works, but I came to realize that I wasn’t loading materials right, so if an image didn’t have a roughness texture, then it would end up completely shiny. I’m almost done fixing it."}, {"post_id": 59082, "ts": "2026-08-31T18:07:57Z", "hours": 0.5186, "text": "I also fixed a bug where the bloom’s blur looped around to the other side of the screen."}, {"post_id": 58887, "ts": "2026-08-31T13:42:45Z", "hours": 0.8592, "text": "PIXELATION POST-PROCESSING EFFECT I made my post-processing system so expandable that I just casually added it ‘cause I thought it would look cool in the game I’m making. I’m sure as hell right about that."}, {"post_id": 58002, "ts": "2026-08-30T10:41:46Z", "hours": 3.0525, "text": "I wasted so much time trying to optimize it all to lead to nothing, but I did end up optimizing some stuff with the Surfaces along with actual color blending for them. I did end up optimizing a bit, but that’s basically nothing. This is the most worthless update to this entire project, I don’t even know how I spent 3 hours on this."}, {"post_id": 52632, "ts": "2026-08-22T21:10:39Z", "hours": 1.3003, "text": "I completely rewrote the text rendering in the Surface class and also fixed a giant memory leak. Here’s a picture of it in use in my game."}, {"post_id": 51872, "ts": "2026-08-21T19:11:56Z", "hours": 0.6219, "text": "I rewrote the texture loading part of GLTF loading because it just plain didn’t work since I updated everything to tinygltf3, but I didn’t notice because it was after the demo. Anyways, it’s done now."}, {"post_id": 51319, "ts": "2026-08-20T22:03:59Z", "hours": 0.4669, "text": "I also rewrote the single mesh gltf loading function to return the material and the entire vertex and index arrays, because I’ll need them for a feature I’m making for my game. This is slowly turning into engine development and I kinda like it."}, {"post_id": 50898, "ts": "2026-08-20T11:18:10Z", "hours": 4.5806, "text": "I worked for over 4 hours, but the renderer finally works as a library!!! That’s right, just put it in as a git submodule, add it as a subdirectory to you CMake project, and there it is! Way too much work for something so simple, but I had to debug a whole lot of stuff. I also edited the README to feature usage instructions and also how to try the demo."}, {"post_id": 49166, "ts": "2026-08-17T20:06:43Z", "hours": 1.8336, "text": "THE GREAT DEBUGGING and A DEMO This is the final post as long as everything works as intended. I fixed every single validation layer error that occurred, so this project is officially bug-free (to my knowledge) . I also made a really simple demo that I uploaded to the github releases tab of the repository. I also finalized the readme, so now the project also has a fancy description. What a ride, I love this project."}, {"post_id": 47631, "ts": "2026-08-15T17:22:29Z", "hours": 0.6358, "text": "FINAL POLISHING (mostly just making the API more useable) I genuinely can’t believe this. I did it, I made a renderer in Vulkan. Well, I’m still not in the clear yet, but I’m very close. Changelog: updated Skin struct to include find_joint() function added Pose struct updated existing skinned mesh systems to work with the Pose struct added sample_clip(), compute_global_pose(), compute_skinning_matrices(), pose_set_local(), pose_set_global(), pose_get_global(), update_animation() and finalize_pose(). These are all helpers for making work with animated and rigged meshes a whole lot easier moved all of the functions inside the gvk namespace, because they were about half and half before."}, {"post_id": 47191, "ts": "2026-08-14T22:29:34Z", "hours": 3.0672, "text": "SKINNED MESHES AND RIGGING This renderer is extremely close to done. I just implemented fully rigged (and animated) meshes. They render properly and animations work too (although I didn’t really care enough to show an example) . Now I am at the last 2 steps of this renderer before starting work on a game in it: 1. Polish up all the API commands so it’s more user friendly. For example, skinned meshes work and can be adjusted manually, but I have a really good idea on how to make working with them super easy, so I’ll definitely implement that. 2. Make a demo that includes basically everything I have developed so far. This step also includes writing compatibility for multiple platforms, because so far I’ve only tested this project on Ubuntu, and I’ll definitely need a windows version too. And that’s it, the project is nearing it’s completion. I can’t wait to make a proper game in this, which I’ll document too of course. Also, I’m writing all of this while I’m on a vacation in Denmark, so I’m quite far from home, but I’m extremely motivated to get this project finished."}, {"post_id": 45337, "ts": "2026-08-11T18:43:26Z", "hours": 3.4436, "text": "SSAO (screen-space ambient occlusion) This one was fun. Ambient occlusion is just a little shadow thing at the edge of meshes. It is not realistic, technically it doesn’t exist in the real world, yet it looks so much better with it. To be honest I don’t have a lot to say about this, it’s done and it’s cool."}, {"post_id": 42894, "ts": "2026-08-07T21:01:17Z", "hours": 1.6756, "text": "SCENE LOADING I just got home from a 10 day adventure that’ll never forget, but I’m back to code, and to get myself to shake into the civilized world again I decided to do a simpler feature before shadow mapping, so I implemented full scene loading from GLTF files. It’s a pretty handy feature, I’m glad I finally made it. It doesn’t just load models and materials, but lights too, pretty handy."}, {"post_id": 35091, "ts": "2026-07-26T09:27:19Z", "hours": 0.3281, "text": "NORMAL MAPPING This was a really easy update, most of the shader changes were copied from my last engine, and the CPU side of things was just changing the vertex struct and loading the tangents in the mesh loading function. But it works."}, {"post_id": 34858, "ts": "2026-07-25T22:07:52Z", "hours": 3.8317, "text": "Well well well. Seems like it’s time for LIGHTING !!!!! finally This was not easy, and yet it was made so much easier by having done it once before last year. I added support for a directional light, a dynamic (aka not hard coded, so pratically infinite amount of) point lights and spot lights, full PBR, and I also made a little handy editor to go along with it, although that’s not in the renderer that’s just in the demo project. Anyways, this was an incredible journey filled with pain and suffering like never before, and I’m so glad I’m through it all. And if this was a challenge, I don’t know what shadow mapping is going to be, which is going to be basically right now, I’m going to add tanget space normal mapping and then it’s already shadowmapping. I’m mentally unprepared, but oh well what can I do?"}, {"post_id": 33983, "ts": "2026-07-24T11:18:42Z", "hours": 1.8858, "text": "This change is not too visible, but it is a major change in the engine MATERIALS Everybody who worked in any sort of 3D graphics knows what materials are. And those know, that the next step after this is lighting . This wouldn’t have been that big of a change, if not for one issue. I’m developing on linux, and every once in a while my GPU drivers uninstall themselves, so everything runs on the integrated graphics on the CPU. That happened, but I thought that the code just became really slow because I was sending 6 images to the GPU every single frame, and that slowed it down. So I spent a bunch of time making a large optimization, and it worked like a charm, it ran fast. Then I found out the entire thing was running on the CPU and I didn’t even need to optimize it. Anyway, it’s here, and it’s fast"}, {"post_id": 33448, "ts": "2026-07-23T12:32:42Z", "hours": 2.7142, "text": "POST-PROCESSING STACK and TONEMAPPING AND COLOR GRADING (post-processing effect 5) This is the finale to the post-processing saga, because I’m finished with tonemapping and color grading. Everything will look really good and cool and whatever, altough I’ve been coding non-stop for 2.5 hours and I don’t really care to give an explanation right now. I don’t have to explain color grading everybody knows that, and tonemapping is the process of mapping the internal HDR render image to an LDR (whatever it’s called) image that the display can actually render properly, how cool is that?"}, {"post_id": 32903, "ts": "2026-07-22T11:24:50Z", "hours": 1.3728, "text": "BLOOM (post-processing effect 4) I’m almost done with all of the post-processing effects, and this was by far the hardest of them all, but I managed to push through it. I’m really proud of myself, because I finally understand Vulkan enough where I didn’t need any sort of outside help to debug this error. I think I can finally call myself someone who understands Vulkan now. Anyway, now I just need to make tonemapping and the effects are done. After that I just make the simplest pipeline to composite it all, and I’m done with that as well."}, {"post_id": 32861, "ts": "2026-07-22T09:31:30Z", "hours": 1.115, "text": "VIGNETTE (post-processing effect 3) This was the most fun I’ve had debugging something in a while. This was really simple to implement, although I can’t really say a lot. The initialization was the same as the other effects, the actual logic of it was pretty similar, the shader wasn’t too hard to write too, but added up it was pretty bad. I accidentally left one of the push parameters in the CPU code as an int, but a float in the GPU code, which I ended up having to chase down for quite a while. The values are over the top on the image so it is more visible on the screenshot, of course I won’t leave it like this. Also, I have written a new readme for the github page. I just kinda wanted to, and thought why not?"}, {"post_id": 32630, "ts": "2026-07-21T22:19:26Z", "hours": 0.3061, "text": "BOX BLUR (post-processing effect 2) I have to admit this took 11 minutes, and the rest of the 5 minutes I spent in this devlog was spent debugging 3 new errors so I can make a post about this feature too. It took so little because I literally just copied and renamed the gaussian blur functions, and changed the shader. Still, I have box blur now. Actually, I think there’s quite a difference between the 2 blurs, quite cool. Of course now that I look at it it’s barely visible in the screenshots."}, {"post_id": 32617, "ts": "2026-07-21T22:00:32Z", "hours": 2.6194, "text": "I thought how cool would it be if I just did a whole 10 hour devlog with all of post-processing in it, but I realized I wouldn’t be able to show off all the cool stuff I’ve done, so I’m doing it effect by effect, anyway, GAUSSIAN BLUR (post-processing effect 1) But not just that, I also brainstormed out the entire post-processing system, and “implemented” it. I didn’t exactly implement it yet because I need to finish all the effects, but it’s there. I still have to finish: box blur, bloom, vignette and tonemapping, and I also want support for custom effects, but that’ll be really easy so I don’t want to put it on this list."}, {"post_id": 31844, "ts": "2026-07-20T15:30:20Z", "hours": 1.5975, "text": "MSAA !! (multisampled anti-aliasing) I always viewed anit-aliasing as this mystery thing that can make a game prettier and I’ll never know how it works. I have to say, it was way easier than expected, most of the time I spent was on some stupid bug or general debugging. You can’t really see the difference in a small screenshot, but it looks so much better full screen."}, {"post_id": 31201, "ts": "2026-07-19T12:30:48Z", "hours": 1.5542, "text": "2D rendering!! I have to admit this feature was kinda easy to implement, because most of it was ripped straight from my last game engine, but I did it because I think it is a really smart way of handling how a 2D system should work. Everything relies on the Surface class, the display itself is a surface, the loaded images are surfaces, and those surfaces can draw to eachother. This makes the system easy yet expandable. I think it’s kinda cool. It was heavily inspired by how pygame does things."}, {"post_id": 31151, "ts": "2026-07-19T10:09:03Z", "hours": 1.3306, "text": "And just like that, the next major update is done! SKYBOXES and other stuff Here’s a full changelog of the last 3 posts: I wrote a really handy shader compiler to make this update just a bit easier, now it automatically compiles all shaders at once I don’t have to do it one by one I wrote a compositing pass that finally has a use case as can be seen right now. The skybox and the objects are rendered separately to separate images, and the compositing pass combines them and renders them to the screen together. Might sound simple, and I have to admit if I understood Vulkan a bit better it might have been, but right now I’m really proud of myself for it. Of course the headline feature: The Skybox . This is most of what I’ve been working on for the last 3 updates. It’s done in a really cool way. The easy way of doing a skybox is to just render it as one giant object and then bim bam boom there it is, but sadly that has a couple of issues, the largest one is that this is extremely lazy. So I did it the smart way instead. What you’re seeing there is actually a cube a tad bit smaller than the monkey, but it’s rendered in a separate pass, where I only pass the camera’s rotation and not the position, and I also have the depth disabled. I render that to a separate image, use the compositing pass, and there it is, a beautiful, very stable and very professional skybox. I’m almost done rambling, but I have to mention one last feature, and that is the loading of equirectangular images into a cubemap texture . I think I’ve typed enough for this update, but if you care you can look it up or like look at my code. Next up: 2D rendering and I have some great ideas for it"}, {"post_id": 30908, "ts": "2026-07-18T21:44:56Z", "hours": 1.5617, "text": "This is a change that cannot be seen, but the composite pipeline is actually working. This is a really simple step in the graphics pipeline, it takes the images from the previous passes and combines them to make a final image. This will be useful for future features like 2D drawing, post-processing, the skybox, etc., so I’m happy I managed to implement it. It’s not something that can be seen with the naked eye, but believe me it’s there and I’m so happy for it. As always, this is next to some generic bugfixes here and there, but it’s been 1.5 hours and I forgot what I fixed and what I didn’t so if you happen to care enough this is open-source just like go and check it out."}, {"post_id": 30852, "ts": "2026-07-18T19:58:13Z", "hours": 1.6753, "text": "I’m well into developing the skybox system along with a compositing pass , but since I needed to write so many new shaders for this update, I decided to write a simple shader compiler, and I kinda want to show it off so it’s not lost in the giant list of changes that I’ll push in the next update. That’s it, I rest my case, that’s all I wanted until I’m finished."}, {"post_id": 30103, "ts": "2026-07-17T12:46:44Z", "hours": 2.2475, "text": "I finished frustum culling . You’ve probably seen this feature in some random wannabe gamedevs post on tiktok saying how they “optimized their game” by enabling frustum culling in Unity and calling themselves genius for it. Well it wasn’t as easy as pressing a button for me. Here’s how it works: I generate an axis aligned bounding box (AABB) for every object when loaded. Every frame I generate 6 planes for each boundary of the camera, the left, right, bottom, top, near and far planes. Then I also calculate the world position AABB for each mesh, which is just translating the original AABB and making a new one from that’s boundary. From that, it’s actually quite simple to compare if the box is inside the frustum or not, though it’s kinda hard to explain so I won’t bother, but I just run that for every object, and it basically makes it, so if an object is not inside the camera’s vision, then it just makes it disappear. I attached the majority of the logic in the second picture"}, {"post_id": 28824, "ts": "2026-07-15T10:08:18Z", "hours": 1.3122, "text": "I implemented a fully automatic mipmap system . Basically, mipmaps are lower quality version of a texture that appear the farther you are from an object. The image I attached is of mipmap layer 4, but of course this was set manually to showcase the system working."}, {"post_id": 28331, "ts": "2026-07-14T14:52:20Z", "hours": 0.6636, "text": "I wrote a giant list on what I want to implement into this framework to make it full. I’m pretty sure I’ll be done in about 150-200 hours, which I have about 40 days to make before the end of this thing. That is 3.75 - 5 hours of coding in a day. Anyway, here’s the list: TODO FEATURES: lighting gpu scene data uniform buffer ambient light directional light point lights tangent space normal mapping tangent generation in gltf loading dynamic light count proper api for handling lights shadow mapping depth-only pipeline shadow map image light space matrix shadow pass shadow sampling in the main fragment shader shadow bias PCF filtering material system material struct (albedo map, normal map, roughness map, emissive map, scalar tint and roughness and metallic factors) material descriptor layout default fallback textures gltf material loading draw_mesh api update emissive support in the shader creating and destroying materials for user-made materials mipmaps and proper sample management mipmap generation on upload mip count calculation sampler cache (so samplers are never duplicated) instanced rendering per-instance storage buffer draw_mesh_instanced api write the shader for it (gl_InstanceIndex) move to indirect drawing so the instance count can eventually come from gpu-side data skybox cubemap loading skybox pipeline skybox shader set_skybox api frustrum culling bounding sphere per mesh (compute in loading by finding the disctance from the centroid across all vectires) frustrum plane extraction (gribb-hartmann) cull loop stats readout post processing stack fullscreen traingle pipeline HDR tonemapping guassian blur api box blur api bloom vignette 2D rendering quad mesh 2D pipeline surface class default surface draw_surface draw_rect font atlas rendering MSAA multisample draw image resolve attachment configurable sample count"}, {"post_id": 28166, "ts": "2026-07-14T09:18:04Z", "hours": 0.8786, "text": "I have to admit I’m pretty proud of myself. I implemented the proper transformations for objects , I also made a good camera system , and I fixed the uv mapping of objects, so textures finally work properly. All this in under an hour."}, {"post_id": 19382, "ts": "2026-06-30T17:57:36Z", "hours": 1.0408, "text": "To be completely honest this engine development thing is going a lot more awful than I could have imagined. I tried to implement a proper camera and transformations for the objects, and now nothing works, yet I barely changed anything. I have been staring at this function for like 2 hours, I’ve tried everything, and nothing works."}, {"post_id": 18575, "ts": "2026-06-29T19:26:50Z", "hours": 1.0686, "text": "I finally finished the guide (🥳🥳🥳), so it’s time to make the game engine I want . My first improvement was adding a render queue, which basically means I can render anything in a much user friendly way."}, {"post_id": 18301, "ts": "2026-06-29T12:31:38Z", "hours": 0.8061, "text": "Thanks to the major rework of the allocation of descriptors, I have managed to implemented textures into rendering. I haven’t made texture loading yet, since it’ll be an engine feature and I’m working on project setup , so enjoy the beautiful pink-black checkerboard pattern on Suzie, the Blender monkey."}, {"post_id": 18277, "ts": "2026-06-29T11:27:47Z", "hours": 1.3389, "text": "I did a giant rework of the descriptor allocation to make handling textures a breeze in the future. Yes, I did mostly just follow the guide, but I am really getting the hang of how Vulkan works, and the guide is ending in a couple of chapers, and the rest will be up to me, and I already feel ready for the task. I have to admit it doesn’t exactly work yet, but I’m working on patching it, it shouldn’t be an issue."}, {"post_id": 18218, "ts": "2026-06-29T09:03:15Z", "hours": 0.4683, "text": "Mesh rendering is finally complete. This is a full 3D scene with a little monkey, rendered perfectly in perspective."}, {"post_id": 17917, "ts": "2026-06-28T21:08:40Z", "hours": 1.0294, "text": "So mesh loading and rendering works, although I haven’t gotten the world matrix and transformations quite right😅 The guide I’m using to learn Vulkan actually recommended I use fastgltf, but I ended up going with tinygltf, as I’ve used it before and have a bunch more experience in it, and oh boy is having experience a good feeling when learning VK"}, {"post_id": 17836, "ts": "2026-06-28T19:36:25Z", "hours": 1.1339, "text": "I’m progressing rather fast, I implemented a full mesh buffer system, which allows me to render any mesh. Mesh loading will be the next task, but until then the best display I can do is a colorful rectangle, I hope that’s good enough"}, {"post_id": 16164, "ts": "2026-06-26T08:40:00Z", "hours": 0.4853, "text": "Implementing a proper graphics pipeline was surprisingly easy. I remembered a lot from my experience in sokol and of course the guide was quite helpful as well. Got from a compute shader to a proper pipeline very fast. I’m still very eager to get back to the fun part of graphics programming and not be stuck in setup hell, but the next step is writing the mesh buffers, so that’ll be fun."}, {"post_id": 11826, "ts": "2026-06-19T08:22:42Z", "hours": 1.095, "text": "I finished the ImGui implementation, I’m starting to get the hang of things. I’m still following vkguide.dev for the setup phase, but I’m eager to finally get to the fun part of graphics programming"}, {"post_id": 4078, "ts": "2026-06-07T08:34:21Z", "hours": 1.0794, "text": "After about an hour of following vkguide.dev, I managed to make a little compute shader that display 16×16 cells of a gradient. Great start!"}]...
|
Title: GVK renderer by @gungu | Stardance
Devlogs Title: GVK renderer by @gungu | Stardance
Devlogs:
After about an hour of following vkguide.dev, I managed to make a little compute shader that display 16×16 cells of a gradient. Great start!
I finished the ImGui implementation, I’m starting to get the hang of things. I’m still following vkguide.dev for the setup phase, but I’m eager to finally get to the fun part of graphics programming
Implementing a proper graphics pipeline was surprisingly easy. I remembered a lot from my experience in sokol and of course the guide was quite helpful as well. Got from a compute shader to a proper pipeline very fast. I’m still very eager to get back to the fun part of graphics programming and not be stuck in setup hell, but the next step is writing the mesh buffers, so that’ll be fun.
I’m progressing rather fast, I implemented a full mesh buffer system, which allows me to render any mesh. Mesh loading will be the next task, but until then the best display I can do is a colorful rectangle, I hope that’s good enough
So mesh loading and rendering works, although I haven’t gotten the world matrix and transformations quite right😅 The guide I’m using to learn Vulkan actually recommended I use fastgltf, but I ended up going with tinygltf, as I’ve used it before and have a bunch more experience in it, and oh boy is having experience a good feeling when learning VK
Mesh rendering is finally complete. This is a full 3D scene with a little monkey, rendered perfectly in perspective.
I did a giant rework of the descriptor allocation to make handling textures a breeze in the future. Yes, I did mostly just follow the guide, but I am really getting the hang of how Vulkan works, and the guide is ending in a couple of chapers, and the rest will be up to me, and I already feel ready for the task. I have to admit it doesn’t exactly work yet, but I’m working on patching it, it shouldn’t be an issue.
Thanks to the major rework of the allocation of descriptors, I have managed to implemented textures into rendering. I haven’t made texture loading yet, since it’ll be an engine feature and I’m working on project setup , so enjoy the beautiful pink-black checkerboard pattern on Suzie, the Blender monkey.
I finally finished the guide (🥳🥳🥳), so it’s time to make the game engine I want . My first improvement was adding a render queue, which basically means I can render anything in a much user friendly way.
To be completely honest this engine development thing is going a lot more awful than I could have imagined. I tried to implement a proper camera and transformations for the objects, and now nothing works, yet I barely changed anything. I have been staring at this function for like 2 hours, I’ve tried everything, and nothing works.
I have to admit I’m pretty proud of myself. I implemented the proper transformations for objects , I also made a good camera system , and I fixed the uv mapping of objects, so textures finally work properly. All this in under an hour.
I wrote a giant list on what I want to implement into this framework to make it full. I’m pretty sure I’ll be done in about 150-200 hours, which I have about 40 days to make before the end of this thing. That is 3.75 - 5 hours of coding in a day. Anyway, here’s the list: TODO FEATURES: lighting gpu scene data uniform buffer ambient light directional light point lights tangent space normal mapping tangent generation in gltf loading dynamic light count proper api for handling lights shadow mapping depth-only pipeline shadow map image light space matrix shadow pass shadow sampling in the main fragment shader shadow bias PCF filtering material system material struct (albedo map, normal map, roughness map, emissive map, scalar tint and roughness and metallic factors) material descriptor layout default fallback textures gltf material loading draw_mesh api update emissive support in the shader creating and destroying materials for user-made materials mipmaps and proper sample management mipmap generation on upload mip count calculation sampler cache (so samplers are never duplicated) instanced rendering per-instance storage buffer draw_mesh_instanced api write the shader for it (gl_InstanceIndex) move to indirect drawing so the instance count can eventually come from gpu-side data skybox cubemap loading skybox pipeline skybox shader set_skybox api frustrum culling bounding sphere per mesh (compute in loading by finding the disctance from the centroid across all vectires) frustrum plane extraction (gribb-hartmann) cull loop stats readout post processing stack fullscreen traingle pipeline HDR tonemapping guassian blur api box blur api bloom vignette 2D rendering quad mesh 2D pipeline surface class default surface draw_surface draw_rect font atlas rendering MSAA multisample draw image resolve attachment configurable sample count
I implemented a fully automatic mipmap system . Basically, mipmaps are lower quality version of a texture that appear the farther you are from an object. The image I attached is of mipmap layer 4, but of course this was set manually to showcase the system working.
I finished frustum culling . You’ve probably seen this feature in some random wannabe gamedevs post on tiktok saying how they “optimized their game” by enabling frustum culling in Unity and calling themselves genius for it. Well it wasn’t as easy as pressing a button for me. Here’s how it works: I generate an axis aligned bounding box (AABB) for every object when loaded. Every frame I generate 6 planes for each boundary of the camera, the left, right, bottom, top, near and far planes. Then I also calculate the world position AABB for each mesh, which is just translating the original AABB and making a new one from that’s boundary. From that, it’s actually quite simple to compare if the box is inside the frustum or not, though it’s kinda hard to explain so I won’t bother, but I just run that for every object, and it basically makes it, so if an object is not inside the camera’s vision, then it just makes it disappear. I attached the majority of the logic in the second picture
I’m well into developing the skybox system along with a compositing pass , but since I needed to write so many new shaders for this update, I decided to write a simple shader compiler, and I kinda want to show it off so it’s not lost in the giant list of changes that I’ll push in the next update. That’s it, I rest my case, that’s all I wanted until I’m finished.
This is a change that cannot be seen, but the composite pipeline is actually working. This is a really simple step in the graphics pipeline, it takes the images from the previous passes and combines them to make a final image. This will be useful for future features like 2D drawing, post-processing, the skybox, etc., so I’m happy I managed to implement it. It’s not something that can be seen with the naked eye, but believe me it’s there and I’m so happy for it. As always, this is next to some generic bugfixes here and there, but it’s been 1.5 hours and I forgot what I fixed and what I didn’t so if you happen to care enough this is open-source just like go and check it out.
And just like that, the next major update is done! SKYBOXES and other stuff Here’s a full changelog of the last 3 posts: I wrote a really handy shader compiler to make this update just a bit easier, now it automatically compiles all shaders at once I don’t have to do it one by one I wrote a compositing pass that finally has a use case as can be seen right now. The skybox and the objects are rendered separately to separate images, and the compositing pass combines them and renders them to the screen together. Might sound simple, and I have to admit if I understood Vulkan a bit better it might have been, but right now I’m really proud of myself for it. Of course the headline feature: The Skybox . This is most of what I’ve been working on for the last 3 updates. It’s done in a really cool way. The easy way of doing a skybox is to just render it as one giant object and then bim bam boom there it is, but sadly that has a couple of issues, the largest one is that this is extremely lazy. So I did it the smart way instead. What you’re seeing there is actually a cube a tad bit smaller than the monkey, but it’s rendered in a separate pass, where I only pass the camera’s rotation and not the position, and I also have the depth disabled. I render that to a separate image, use the compositing pass, and there it is, a beautiful, very stable and very professional skybox. I’m almost done rambling, but I have to mention one last feature, and that is the loading of equirectangular images into a cubemap texture . I think I’ve typed enough for this update, but if you care you can look it up or like look at my code. Next up: 2D rendering and I have some great ideas for it
2D rendering!! I have to admit this feature was kinda easy to implement, because most of it was ripped straight from my last game engine, but I did it because I think it is a really smart way of handling how a 2D system should work. Everything relies on the Surface class, the display itself is a surface, the loaded images are surfaces, and those surfaces can draw to eachother. This makes the system easy yet expandable. I think it’s kinda cool. It was heavily inspired by how pygame does things.
MSAA !! (multisampled anti-aliasing) I always viewed anit-aliasing as this mystery thing that can make a game prettier and I’ll never know how it works. I have to say, it was way easier than expected, most of the time I spent was on some stupid bug or general debugging. You can’t really see the difference in a small screenshot, but it looks so much better full screen.
I thought how cool would it be if I just did a whole 10 hour devlog with all of post-processing in it, but I realized I wouldn’t be able to show off all the cool stuff I’ve done, so I’m doing it effect by effect, anyway, GAUSSIAN BLUR (post-processing effect 1) But not just that, I also brainstormed out the entire post-processing system, and “implemented” it. I didn’t exactly implement it yet because I need to finish all the effects, but it’s there. I still have to finish: box blur, bloom, vignette and tonemapping, and I also want support for custom effects, but that’ll be really easy so I don’t want to put it on this list.
BOX BLUR (post-processing effect 2) I have to admit this took 11 minutes, and the rest of the 5 minutes I spent in this devlog was spent debugging 3 new errors so I can make a post about this feature too. It took so little because I literally just copied and renamed the gaussian blur functions, and changed the shader. Still, I have box blur now. Actually, I think there’s quite a difference between the 2 blurs, quite cool. Of course now that I look at it it’s barely visible in the screenshots.
VIGNETTE (post-processing effect 3) This was the most fun I’ve had debugging something in a while. This was really simple to implement, although I can’t really say a lot. The initialization was the same as the other effects, the actual logic of it was pretty similar, the shader wasn’t too hard to write too, but added up it was pretty bad. I accidentally left one of the push parameters in the CPU code as an int, but a float in the GPU code, which I ended up having to chase down for quite a while. The values are over the top on the image so it is more visible on the screenshot, of course I won’t leave it like this. Also, I have written a new readme for the github page. I just kinda wanted to, and thought why not?
BLOOM (post-processing effect 4) I’m almost done with all of the post-processing effects, and this was by far the hardest of them all, but I managed to push through it. I’m really proud of myself, because I finally understand Vulkan enough where I didn’t need any sort of outside help to debug this error. I think I can finally call myself someone who understands Vulkan now. Anyway, now I just need to make tonemapping and the effects are done. After that I just make the simplest pipeline to composite it all, and I’m done with that as well.
POST-PROCESSING STACK and TONEMAPPING AND COLOR GRADING (post-processing effect 5) This is the finale to the post-processing saga, because I’m finished with tonemapping and color grading. Everything will look really good and cool and whatever, altough I’ve been coding non-stop for 2.5 hours and I don’t really care to give an explanation right now. I don’t have to explain color grading everybody knows that, and tonemapping is the process of mapping the internal HDR render image to an LDR (whatever it’s called) image that the display can actually render properly, how cool is that?
This change is not too visible, but it is a major change in the engine MATERIALS Everybody who worked in any sort of 3D graphics knows what materials are. And those know, that the next step after this is lighting . This wouldn’t have been that big of a change, if not for one issue. I’m developing on linux, and every once in a while my GPU drivers uninstall themselves, so everything runs on the integrated graphics on the CPU. That happened, but I thought that the code just became really slow because I was sending 6 images to the GPU every single frame, and that slowed it down. So I spent a bunch of time making a large optimization, and it worked like a charm, it ran fast. Then I found out the entire thing was running on the CPU and I didn’t even need to optimize it. Anyway, it’s here, and it’s fast
Well well well. Seems like it’s time for LIGHTING !!!!! finally This was not easy, and yet it was made so much easier by having done it once before last year. I added support for a directional light, a dynamic (aka not hard coded, so pratically infinite amount of) point lights and spot lights, full PBR, and I also made a little handy editor to go along with it, although that’s not in the renderer that’s just in the demo project. Anyways, this was an incredible journey filled with pain and suffering like never before, and I’m so glad I’m through it all. And if this was a challenge, I don’t know what shadow mapping is going to be, which is going to be basically right now, I’m going to add tanget space normal mapping and then it’s already shadowmapping. I’m mentally unprepared, but oh well what can I do?
NORMAL MAPPING This was a really easy update, most of the shader changes were copied from my last engine, and the CPU side of things was just changing the vertex struct and loading the tangents in the mesh loading function. But it works.
SCENE LOADING I just got home from a 10 day adventure that’ll never forget, but I’m back to code, and to get myself to shake into the civilized world again I decided to do a simpler feature before shadow mapping, so I implemented full scene loading from GLTF files. It’s a pretty handy feature, I’m glad I finally made it. It doesn’t just load models and materials, but lights too, pretty handy.
SSAO (screen-space ambient occlusion) This one was fun. Ambient occlusion is just a little shadow thing at the edge of meshes. It is not realistic, technically it doesn’t exist in the real world, yet it looks so much better with it. To be honest I don’t have a lot to say about this, it’s done and it’s cool.
SKINNED MESHES AND RIGGING This renderer is extremely close to done. I just implemented fully rigged (and animated) meshes. They render properly and animations work too (although I didn’t really care enough to show an example) . Now I am at the last 2 steps of this renderer before starting work on a game in it: 1. Polish up all the API commands so it’s more user friendly. For example, skinned meshes work and can be adjusted manually, but I have a really good idea on how to make working with them super easy, so I’ll definitely implement that. 2. Make a demo that includes basically everything I have developed so far. This step also includes writing compatibility for multiple platforms, because so far I’ve only tested this project on Ubuntu, and I’ll definitely need a windows version too. And that’s it, the project is nearing it’s completion. I can’t wait to make a proper game in this, which I’ll document too of course. Also, I’m writing all of this while I’m on a vacation in Denmark, so I’m quite far from home, but I’m extremely motivated to get this project finished.
FINAL POLISHING (mostly just making the API more useable) I genuinely can’t believe this. I did it, I made a renderer in Vulkan. Well, I’m still not in the clear yet, but I’m very close. Changelog: updated Skin struct to include find_joint() function added Pose struct updated existing skinned mesh systems to work with the Pose struct added sample_clip(), compute_global_pose(), compute_skinning_matrices(), pose_set_local(), pose_set_global(), pose_get_global(), update_animation() and finalize_pose(). These are all helpers for making work with animated and rigged meshes a whole lot easier moved all of the functions inside the gvk namespace, because they were about half and half before.
THE GREAT DEBUGGING and A DEMO This is the final post as long as everything works as intended. I fixed every single validation layer error that occurred, so this project is officially bug-free (to my knowledge) . I also made a really simple demo that I uploaded to the github releases tab of the repository. I also finalized the readme, so now the project also has a fancy description. What a ride, I love this project.
I worked for over 4 hours, but the renderer finally works as a library!!! That’s right, just put it in as a git submodule, add it as a subdirectory to you CMake project, and there it is! Way too much work for something so simple, but I had to debug a whole lot of stuff. I also edited the README to feature usage instructions and also how to try the demo.
I also rewrote the single mesh gltf loading function to return the material and the entire vertex and index arrays, because I’ll need them for a feature I’m making for my game. This is slowly turning into engine development and I kinda like it.
I rewrote the texture loading part of GLTF loading because it just plain didn’t work since I updated everything to tinygltf3, but I didn’t notice because it was after the demo. Anyways, it’s done now.
I completely rewrote the text rendering in the Surface class and also fixed a giant memory leak. Here’s a picture of it in use in my game.
I wasted so much time trying to optimize it all to lead to nothing, but I did end up optimizing some stuff with the Surfaces along with actual color blending for them. I did end up optimizing a bit, but that’s basically nothing. This is the most worthless update to this entire project, I don’t even know how I spent 3 hours on this.
PIXELATION POST-PROCESSING EFFECT I made my post-processing system so expandable that I just casually added it ‘cause I thought it would look cool in the game I’m making. I’m sure as hell right about that.
I also fixed a bug where the bloom’s blur looped around to the other side of the screen.
Screen-space reflections would be a major challenge, but I learned that making the skybox reflect off of shiny surfaces is a pretty good way of making your renders seem much better. As of right now it technically works, but I came to realize that I wasn’t loading materials right, so if an image didn’t have a roughness texture, then it would end up completely shiny. I’m almost done fixing it.
SKYBOX REFLECTIONS This is a neat trick I did in my last engine and I’m happy I recreated it in this one. Every single shiny surface reflects the skybox, which while isn’t realistic, it does make those surfaces look a lot more shiny than what they actually are, which is a great hack. It sure as hell looks better in the environments I make.
FOG Yeah I just added fog because I thought it would look cool in my game. Obviously it’s over the top in this image because I wanted to show it off. I’m pretty proud of this one, definitely one of the more complex post-processing effects.
I made a few minor tweaks to fog, and I started debugging it, which I ended up completely stopping and reverting, as it was useless. To be honest I’m really trying to find where this 27 minutes appeared, because I don’t remember spending half an hour on this
Ships:
GVK (short for gungu vulkan) is my new renderer using the Vulkan graphics api. I miss the times when I worked with pygame and love2d, where rendering an image was one simple line of code, and I intend to bring that experience to 3D with this project. Everything is designed to be as easy as possible for the user, just writes gvk::draw_mesh(mesh, material, position, scale, rotation); and the mesh is where you want it, how you want it. But don’t mistake it, this is not a game engine, this is just a renderer, something you can build an engine on. I made this tool so my later projects have a graphical backbone to build on, but every game needs a different engine. Ever since I started graphics programming last year I knew that one day I had to learn Vulkan if I ever wanted a job in it in the future, and I’m very proud of myself for finally doing it. This was the greatest challenge I faced in programming so far, and I so glad I tackled it. And as for AI: This project was created so I could learn Vulkan, and if I copied everything from AI that would have been to effective. My goal was to use as little AI as I could, while still leaving out the headaches of development. Here’s what I used AI for: Many of the shaders were written by AI, but that’s because I haven’t learned any of the maths I need to know to write any of these shader. When a shader wasn’t too math heavy I wrote it myself, but there weren’t too many of those. The GLTF loading isn’t hard, it’s just a headache to work with it. GLTF is a horrible format for developers, but it’s the best I knew, so I rather had AI write the GLTF loading functions. I’m still glad I did that, I would have learned nothing from writing those.
This is the second ship of my game engine / renderer. To explain, I like calling it a renderer instead of a game engine, because I purposefully tried to add as few bloat features as I could, I just wanted something that made rendering something that I don’t have to think about. More info on the README page, this isn’t a good explanation. Just know that it isn’t just a basic Vulkan abstraction, this is a full renderer with PBR, many post-processing effects, skyboxes, dynamic lights, rigged and animated meshes and frustrum culling ’cause why not. Changelog since the last ship: 2 new post-processing effects, pixelation and fog I also added a feature where shiny objects reflect the skybox, which isn’t realistic, but it adds a great sense of realism and I like to add it to my games. one of the largest changes was turning this into an actual library instead of an executable, which allows easier integration. I also made a full game as a tech demo for this project, it can be found at this link or under my stardance profile. It turned out really well, and I’m proud of myself, because I finally made a game engine that I can actually make games in easily. (The screenshot is from the game) and the smallest but still a significant change was rewriting the entire 2D rendering part of the engine for 2 reasons: it had a memory leak, and text rendering was buggy, slow and barely worked....
|
1792993753.995224
|
1793080153.995224
|
|
16711
|
vibe-check by @subhansh | Stardance
|
|
1
|
60.0
|
521
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T12:11:56Z", "hours": 60.0, "multiplier": 17.37, "payout": 521, "blessing": "neutral", "text": "Vibe Check is a web app that makes working with AI easier by improving prompts before you send them. It focuses on three simple quality-of-life improvements: automatic AI prompt engineering to produce clearer and more effective prompts, a Token Saver mode that converts prompts into Chinese to significantly reduce token usage on many AI models, and built-in prompt scoring with personalized feedback so you can understand and improve your prompting skills over time. The goal is simple: better prompts, lower costs, and better AI responses with almost no extra effort, and the question that “cant I just ask gpt/claude do the same?” u can.. but that means using the ai just to prepare another prompt. vibe check skips that extra step. It optimizes, scores, and compresses your prompt before it reaches the model, saving both time and tokens. go try it out :3 :- https://vibe-check-vert-theta.vercel.app", "repo": "https://github.com/subhansh-dev/vibe-check", "demo": "https://vibe-check-vert-theta.vercel.app"}]...
|
[{"post_id": 17551, "ts": "202 [{"post_id": 17551, "ts": "2026-06-28T11:41:54Z", "hours": 21.9344, "text": "Vibe Check — Devlog 🍓 well… there was a pretty big plot twist. the original plan was to ship Vibe Check as a Chrome extension. everything was already built around that idea. popup UI. chrome APIs. extension architecture. the whole thing. then i found out Google wants a $5 one-time fee just to publish an extension. and honestly… i was NOT about to pay $5 just so my little prompt tool could exist on the Chrome Web Store 😭 so… i scrapped the entire extension idea. which meant i had to redesign… basically everything. the whole app was originally designed around a tiny popup window. now it had to become a full webpage. different layout. different navigation. different spacing. different interactions. pretty much every screen got rewritten from scratch. the funny part is that none of the actual features changed. they just had to be rebuilt in a way that actually made sense on a full website. while rebuilding everything i also decided to add a feature i honestly wish more AI tools had. Token Saver :3 after Vibe Check analyzes and improves your prompt… it can now convert the final prompt into Chinese. before anyone asks… no, this isn’t some weird translation gimmick 😭 the reason is actually pretty simple. Chinese is far more information-dense than English, so the same instructions usually require significantly fewer input tokens. that means: lower API costs fewer prompt tokens more room inside the context window without changing what the prompt is actually asking. the AI still understands exactly the same instructions. if you want the response in English, you can literally just add: “Respond in English, even though my prompt is written in Chinese.” and it’ll work exactly the same. so now Vibe Check doesn’t just make prompts better… it also tries to make them cheaper to run. which i thought was a pretty neat addition :3 meow"}, {"post_id": 14247, "ts": "2026-06-23T08:25:48Z", "hours": 26.3192, "text": "Vibe Check — Devlog said last devlog i’d be tackling the UI redesign next. did that. also did about four other things i didn’t plan on. classic me. two days, and somehow: bug fixes, the redesign, AI integration, a whole landing page, and deployment setup. CSS changes enough to make me question my existence 💔 bugs that were silently ruining everything found out half the buttons in the app weren’t even styled because the css class they used literally didn’t exist 😭 also discovered template search wasn’t searching anything because the input id was missing. the search bar looked functional. it was not. meow. fixed a bunch of cursed unicode issues too because apparently some checkmarks had transformed into ancient artifacts from another dimension. the redesign arc 🥀 this one was planned, but it still spiraled way harder than expected. changed one thing. then another. then suddenly popup.css was over 700 lines. goodbye neon cyberpunk. hello warm golds, soft reds, glass panels, crystal backgrounds, rounded corners and way too many blur effects. the whole thing feels a lot calmer now. less “rgb gaming keyboard” more “expensive thing i can’t afford” :3 ai brain upgrade probably the biggest change, and definitely not planned. vibe check can now use Cerebras gpt-oss-120b for prompt enhancement. ended up building support for: local development chrome extension mode production deployment all using the same enhancement pipeline. if ai dies the app automatically falls back to local enhancement so users don’t get hit with a giant error message. because nobody likes giant error messages. built a whole landing page because apparently i enjoy suffering didn’t even plan this one. but now there’s: animated hero section glassmorphism everywhere feature cards demo section platform showcase responsive layout and enough floating visual effects to make my gpu slightly concerned. production stuff nobody will notice added deployment configs. serverless functions. environment variables. request validation. api key protection. cors handling. all the boring stuff that becomes very exciting when it’s missing. stats files modified: basically yes popup.css: 730 lines popup.js: 1300+ lines new files: landing page serverless ai endpoint deployment config :3"}, {"post_id": 12406, "ts": "2026-06-20T07:35:36Z", "hours": 11.5258, "text": "VibeCheck Devlog #1 🥀 so… for the last few days i’ve been building something called VibeCheck . the idea is pretty simple: you paste a prompt. VibeCheck tears it apart. then tells you how to make it better. that’s it. but somehow that “simple” idea ended up turning into an entire app 💔 the original problem i kept seeing the same thing over and over. people would ask an ai for something. the result would be bad. then they’d blame the model. when half the time the real problem was the prompt. so i thought… what if there was a tool that could actually analyze prompts and explain what’s wrong with them? not just give a score. actually tell you: what’s missing what’s unclear what’s limiting the output how to improve it and that’s basically where VibeCheck started. browser compatibility was a disaster one thing i realized pretty quickly… the whole app depended on chrome extension APIs. which means outside a chrome extension… everything exploded 💔 so i built a chrome api polyfill layer. now VibeCheck can run inside an extension and directly in a browser without completely falling apart. storage works. runtime messaging works. browser preview works. and the app stops screaming at me every time i open it. template collection got out of control this one got a little ridiculous. templates went from: 15 → 38 there’s now stuff for: ui components full applications backend systems debugging ai prompts api development and probably more coming later because apparently i don’t know how to stop adding things. random suffering also spent way too long fixing bugs that should not have existed. you know the type: 40 minutes of debugging. 3 line fix. questioning life choices afterwards. those. what’s next? right now i’m focusing on making the scoring system smarter and improving the actual prompt analysis. the ui is pretty trash so id be working on that too the architecture isn’t actively trying to kill me anymore and VibeCheck is slowly becoming the tool i originally wanted to build we’ll see how long that lasts before i break everything again 🥀"}]...
|
Title: vibe-check by @subhansh | Stardance
Devlog Title: vibe-check by @subhansh | Stardance
Devlogs:
VibeCheck Devlog #1 🥀 so… for the last few days i’ve been building something called VibeCheck . the idea is pretty simple: you paste a prompt. VibeCheck tears it apart. then tells you how to make it better. that’s it. but somehow that “simple” idea ended up turning into an entire app 💔 the original problem i kept seeing the same thing over and over. people would ask an ai for something. the result would be bad. then they’d blame the model. when half the time the real problem was the prompt. so i thought… what if there was a tool that could actually analyze prompts and explain what’s wrong with them? not just give a score. actually tell you: what’s missing what’s unclear what’s limiting the output how to improve it and that’s basically where VibeCheck started. browser compatibility was a disaster one thing i realized pretty quickly… the whole app depended on chrome extension APIs. which means outside a chrome extension… everything exploded 💔 so i built a chrome api polyfill layer. now VibeCheck can run inside an extension and directly in a browser without completely falling apart. storage works. runtime messaging works. browser preview works. and the app stops screaming at me every time i open it. template collection got out of control this one got a little ridiculous. templates went from: 15 → 38 there’s now stuff for: ui components full applications backend systems debugging ai prompts api development and probably more coming later because apparently i don’t know how to stop adding things. random suffering also spent way too long fixing bugs that should not have existed. you know the type: 40 minutes of debugging. 3 line fix. questioning life choices afterwards. those. what’s next? right now i’m focusing on making the scoring system smarter and improving the actual prompt analysis. the ui is pretty trash so id be working on that too the architecture isn’t actively trying to kill me anymore and VibeCheck is slowly becoming the tool i originally wanted to build we’ll see how long that lasts before i break everything again 🥀
Vibe Check — Devlog said last devlog i’d be tackling the UI redesign next. did that. also did about four other things i didn’t plan on. classic me. two days, and somehow: bug fixes, the redesign, AI integration, a whole landing page, and deployment setup. CSS changes enough to make me question my existence 💔 bugs that were silently ruining everything found out half the buttons in the app weren’t even styled because the css class they used literally didn’t exist 😭 also discovered template search wasn’t searching anything because the input id was missing. the search bar looked functional. it was not. meow. fixed a bunch of cursed unicode issues too because apparently some checkmarks had transformed into ancient artifacts from another dimension. the redesign arc 🥀 this one was planned, but it still spiraled way harder than expected. changed one thing. then another. then suddenly popup.css was over 700 lines. goodbye neon cyberpunk. hello warm golds, soft reds, glass panels, crystal backgrounds, rounded corners and way too many blur effects. the whole thing feels a lot calmer now. less “rgb gaming keyboard” more “expensive thing i can’t afford” :3 ai brain upgrade probably the biggest change, and definitely not planned. vibe check can now use Cerebras gpt-oss-120b for prompt enhancement. ended up building support for: local development chrome extension mode production deployment all using the same enhancement pipeline. if ai dies the app automatically falls back to local enhancement so users don’t get hit with a giant error message. because nobody likes giant error messages. built a whole landing page because apparently i enjoy suffering didn’t even plan this one. but now there’s: animated hero section glassmorphism everywhere feature cards demo section platform showcase responsive layout and enough floating visual effects to make my gpu slightly concerned. production stuff nobody will notice added deployment configs. serverless functions. environment variables. request validation. api key protection. cors handling. all the boring stuff that becomes very exciting when it’s missing. stats files modified: basically yes popup.css: 730 lines popup.js: 1300+ lines new files: landing page serverless ai endpoint deployment config :3
Vibe Check — Devlog 🍓 well… there was a pretty big plot twist. the original plan was to ship Vibe Check as a Chrome extension. everything was already built around that idea. popup UI. chrome APIs. extension architecture. the whole thing. then i found out Google wants a $5 one-time fee just to publish an extension. and honestly… i was NOT about to pay $5 just so my little prompt tool could exist on the Chrome Web Store 😭 so… i scrapped the entire extension idea. which meant i had to redesign… basically everything. the whole app was originally designed around a tiny popup window. now it had to become a full webpage. different layout. different navigation. different spacing. different interactions. pretty much every screen got rewritten from scratch. the funny part is that none of the actual features changed. they just had to be rebuilt in a way that actually made sense on a full website. while rebuilding everything i also decided to add a feature i honestly wish more AI tools had. Token Saver :3 after Vibe Check analyzes and improves your prompt… it can now convert the final prompt into Chinese. before anyone asks… no, this isn’t some weird translation gimmick 😭 the reason is actually pretty simple. Chinese is far more information-dense than English, so the same instructions usually require significantly fewer input tokens. that means: lower API costs fewer prompt tokens more room inside the context window without changing what the prompt is actually asking. the AI still understands exactly the same instructions. if you want the response in English, you can literally just add: “Respond in English, even though my prompt is written in Chinese.” and it’ll work exactly the same. so now Vibe Check doesn’t just make prompts better… it also tries to make them cheaper to run. which i thought was a pretty neat addition :3 meow
Ships:
Vibe Check is a web app that makes working with AI easier by improving prompts before you send them. It focuses on three simple quality-of-life improvements: automatic AI prompt engineering to produce clearer and more effective prompts, a Token Saver mode that converts prompts into Chinese to significantly reduce token usage on many AI models, and built-in prompt scoring with personalized feedback so you can understand and improve your prompting skills over time. The goal is simple: better prompts, lower costs, and better AI responses with almost no extra effort, and the question that “cant I just ask gpt/claude do the same?” u can.. but that means using the ai just to prepare another prompt. vibe check skips that extra step. It optimizes, scores, and compresses your prompt before it reaches the model, saving both time and tokens. go try it out :3 :- https://vibe-check-vert-theta.vercel.app...
|
1792993953.4911926
|
1793080353.4911926
|
|
37205
|
Neurorust by @toqtu | Stardance
|
toqtu
|
1
|
60.0
|
1254
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T20:32:48Z", "hours": 60.0, "multiplier": 17.4, "payout": 1254, "blessing": "neutral", "text": "Neurorust lets you train a simple neural network in your browser, using the GPU. The network predicts handwritten digits. After training you can draw your own digits and see its predictions. This project has tought me a lot about neural networks, Rust, GPU programming and WebAssembly. It was really challenging to produce a good result when just learning about everything. Even though the code is not perfect and there are a lot of things I would do different next time I feel like the end result has turned out quite well.", "repo": "https://github.com/fritl/neurorust", "demo": "https://neurorust.toqtou.me"}]...
|
[{"post_id": 63169, "ts": "202 [{"post_id": 63169, "ts": "2026-09-06T20:24:25Z", "hours": 4.1433, "text": "Done I added a README, improved the website defaults and did some final debugging. Now the project is ready to ship."}, {"post_id": 61056, "ts": "2026-09-03T19:23:48Z", "hours": 8.6478, "text": "Website finished I finished the frontend. You can now create a network with specific hyperparameters and then train it. After training you can draw a number and see what it predicts. Now I just need a good README and the project is ready to ship."}, {"post_id": 59056, "ts": "2026-08-31T17:25:19Z", "hours": 6.1647, "text": "Does it ever get easier? I thought using the network in the web would be a piece of cake. I was wrong. After fixing some minor issues I wrote some quick code to test training. It worked… technically. It was really slow and froze my whole pc. A quick glance into my system monitor revealed the secret. All CPU cores were almost maxed out while the GPU sat idle. So after spending a bunch of time to use the GPU everything was back to the CPU again. WebGPU is still experimental. Especially on Linux which is why instead of throwing an error when it couldn’t access my graphics card it just used all my CPU cores as a fallback. To get the GPU back into the game I started my browser with some flags and compatibility layers which makes training still slower than on native hardware but faster than with the CPU. Hopefully this was the last major challenge and implementing the frontend will be easier."}, {"post_id": 54637, "ts": "2026-08-25T17:43:42Z", "hours": 6.8453, "text": "It acutally learns (again) After some more pain with the loss function, buffer sizes and shape mismatches I got a neural network running on the gpu. The GPU is about 10x faster than the CPU version although some hyperparameters can affect this result. Now I want to build a small wasm interface and build a small web page around that to allow anyone to run a local neural net in the browser."}, {"post_id": 51621, "ts": "2026-08-21T12:20:16Z", "hours": 4.3658, "text": "GPU Layers I initially thought porting the forward and backward passes to the GPU would be as simple as replacing Matrix with GpuMatrix everywhere. It wasn’t. Unlike CPU operations, GPU operations can’t allocate memory themselves. On the CPU, x + 2 simply creates a new value. On the GPU, every operation needs a pre-existing buffer to write its result into. So x += 2 works, but y = x + 2 requires a buffer for y to exist first. And x = x + 2 isn’t supported on the GPU at all. The solution is to pre-allocate buffers and keep them around, resizing them only when the batch size changes. It works, but it also means every struct starts accumulating buffer fields and scaling that approach to an entire network only makes the problem worse. Next: some kind of global buffer manager, before tackling the loss function."}, {"post_id": 47481, "ts": "2026-08-15T12:37:59Z", "hours": 4.6719, "text": "Forward pass After adding all necessary operations on the GpuMatrix I implemented the forward pass. It was surprisingly hard to get the caching for the backward pass right because reallocating buffers on the gpu should be avoided. As always I let AI write some test cases and everything passed. Next I’ll implement the backward pass which will hopefully let the network learn with incredible speeds."}, {"post_id": 38223, "ts": "2026-07-31T14:55:33Z", "hours": 4.6517, "text": "GPU Matmul I thought beating the CPU at matrix multiplication would be easy. It turns out that hand-optimized assembly code is a tough opponent. My naive GPU version isn’t bad, though: it’s roughly on par with NumPy, and about 13x faster than my CPU code but still worse than I initially expected. There’s plenty of room to improve. Right now the GPU sits idle about 80% of the time, just waiting on memory reads. For now, I’ll keep building out the rest of the neural net on the GPU and come back to optimizing matmul later."}, {"post_id": 37145, "ts": "2026-07-29T17:08:59Z", "hours": 1.7775, "text": "Sidequest: Doubling numbers In my last devlog I stated that doubling numbers on the GPU is only faster if you want to double a HUUUGE amount of numbers. Of course I wanted to see at what point the GPU really is faster. I found out that the CPU is actually quite good at doubling numbers so the GPU wasn’t faster at all. I then measured just the time the GPU takes to double the numbers ignoring the time it needs to transfer the data. With that the GPU eventually overtakes the CPU."}, {"post_id": 36003, "ts": "2026-07-27T20:21:29Z", "hours": 2.0819, "text": "Doubling numbers Turns out you have to go back to square one to run a neural net on the GPU. For me that meant writing a program that multiplies every number in an array by 2, on the GPU. Limited learning resources Rust has a great library called wgpu for talking to the GPU. It’s cross-platform and can even run in WebAssembly if you do it right. The problem: most tutorials only cover rendering, and my neural net doesn’t care about triangles on a screen, it needs compute. I never found a tutorial on compute shaders from scratch, so I read the rendering material, stripped out what didn’t apply (windows, vertices, …), and added what did (workgroup size, how a compute pass works, …). Not trivial, but the official wgpu compute example got me on track. I mostly just copied it. Why it’s hard GPU programming isn’t straightforward. Here’s everything required just to multiply an array by 2: Get a wgpu instance , adapter , device , and queue Create a shader module Create the input , output , and download buffers Create the bind group layout and bind group Create the pipeline layout Create an encoder and a compute pass Copy data CPU → GPU , run the shader, then copy data GPU → CPU After 190 lines and some unexpected debugging (on code copied straight from an example, no less), I could finally double numbers fast, but only with huge arrays. Below a certain size, shuttling data to the GPU and back is slower than just doing the math on the CPU. I don’t fully understand every step yet. Hopefully I won’t need to, or I’ll pick it up along the way. Up next Matrix multiplication is next, and most of the boilerplate above should carry over. Big questions remain about the final network, but taking it one step at a time should get me there eventually… or to a complete surrender, who knows."}, {"post_id": 34824, "ts": "2026-07-25T20:39:43Z", "hours": 5.475, "text": "It actually learns After getting XOR working, I tried my neural net on MNIST (handwritten digit recognition). Loading the data was easier than expected, though getting it into the right shape for my network took some fiddling. To make sure I loaded it correctly, I drew a few of the digits to check they looked right before training. Once that was sorted, training worked well, and the results were better than I hoped: 97.8% accuracy , in about 5 minutes. I also experimented with running the whole thing in a browser, but that turned out to be more involved than expected, so I’m parking it for now and focusing on other improvements first."}, {"post_id": 32587, "ts": "2026-07-21T21:16:07Z", "hours": 7.3772, "text": "It learns (a bit) After implementing loss functions, activation functions, and the forward and backward pass for the layers, I tried training a simple network to predict the XOR function. After running the network, I found that it didn’t learn at all. The loss just stayed at 0.25 without any changes. Not only that, the whole neural network didn’t update anything. After some initial digging, I had a feeling this was one of those dumb, simple bugs you can’t find for hours. Unfortunately, my feeling was right: the error was multiplying the bias instead of adding it. This is really bad because the bias initially has a value of 0, which means all outputs turn out to be 0 (not good). Of course, the fix was a one character change: * to + . Now that the network can predict XOR, I’ll see if it can also handle MNIST. I’m still a bit scared about performance issues with matrix multiplication."}, {"post_id": 31187, "ts": "2026-07-19T12:03:17Z", "hours": 3.8625, "text": "Rust Learning Project: Building a Neural Network I recently read a few chapters of The Rust Programming Language and wanted to put my newly gained knowledge to use. Naturally, the first thing that came to mind was building a neural network in Rust. I’d already tried this in Python and failed, so I figured maybe, for some reason, it would go better this time around. Matmul The first step was implementing matrices and their operations in Rust, the most important of course being matrix multiplication. Since this would likely become the biggest bottleneck for the whole model, I got curious about its performance and benchmarked multiplying two 1024x1024 matrices. The naive implementation took about 20 seconds. One simple optimization brought that down to 14 seconds. Then I built with compiler optimizations enabled, and the naive implementation suddenly ran in 63 nanoseconds. I was floored, briefly convinced I’d stumbled onto some incredible compiler magic, before realizing what actually happened: the compiler had simply skipped the calculation entirely, since the result was never used. Classic dead code elimination. After forcing the compiler to keep the computation, the naive implementation came in at a more believable 2 seconds, and the optimized version dropped to 200ms. For comparison, Numpy does the same multiplication in about 4ms. Whether 200ms is fast enough for training neural nets in reasonable time remains to be seen."}]...
|
Title: Neurorust by @toqtu | Stardance
Devlogs:
R Title: Neurorust by @toqtu | Stardance
Devlogs:
Rust Learning Project: Building a Neural Network I recently read a few chapters of The Rust Programming Language and wanted to put my newly gained knowledge to use. Naturally, the first thing that came to mind was building a neural network in Rust. I’d already tried this in Python and failed, so I figured maybe, for some reason, it would go better this time around. Matmul The first step was implementing matrices and their operations in Rust, the most important of course being matrix multiplication. Since this would likely become the biggest bottleneck for the whole model, I got curious about its performance and benchmarked multiplying two 1024x1024 matrices. The naive implementation took about 20 seconds. One simple optimization brought that down to 14 seconds. Then I built with compiler optimizations enabled, and the naive implementation suddenly ran in 63 nanoseconds. I was floored, briefly convinced I’d stumbled onto some incredible compiler magic, before realizing what actually happened: the compiler had simply skipped the calculation entirely, since the result was never used. Classic dead code elimination. After forcing the compiler to keep the computation, the naive implementation came in at a more believable 2 seconds, and the optimized version dropped to 200ms. For comparison, Numpy does the same multiplication in about 4ms. Whether 200ms is fast enough for training neural nets in reasonable time remains to be seen.
It learns (a bit) After implementing loss functions, activation functions, and the forward and backward pass for the layers, I tried training a simple network to predict the XOR function. After running the network, I found that it didn’t learn at all. The loss just stayed at 0.25 without any changes. Not only that, the whole neural network didn’t update anything. After some initial digging, I had a feeling this was one of those dumb, simple bugs you can’t find for hours. Unfortunately, my feeling was right: the error was multiplying the bias instead of adding it. This is really bad because the bias initially has a value of 0, which means all outputs turn out to be 0 (not good). Of course, the fix was a one character change: * to + . Now that the network can predict XOR, I’ll see if it can also handle MNIST. I’m still a bit scared about performance issues with matrix multiplication.
It actually learns After getting XOR working, I tried my neural net on MNIST (handwritten digit recognition). Loading the data was easier than expected, though getting it into the right shape for my network took some fiddling. To make sure I loaded it correctly, I drew a few of the digits to check they looked right before training. Once that was sorted, training worked well, and the results were better than I hoped: 97.8% accuracy , in about 5 minutes. I also experimented with running the whole thing in a browser, but that turned out to be more involved than expected, so I’m parking it for now and focusing on other improvements first.
Doubling numbers Turns out you have to go back to square one to run a neural net on the GPU. For me that meant writing a program that multiplies every number in an array by 2, on the GPU. Limited learning resources Rust has a great library called wgpu for talking to the GPU. It’s cross-platform and can even run in WebAssembly if you do it right. The problem: most tutorials only cover rendering, and my neural net doesn’t care about triangles on a screen, it needs compute. I never found a tutorial on compute shaders from scratch, so I read the rendering material, stripped out what didn’t apply (windows, vertices, …), and added what did (workgroup size, how a compute pass works, …). Not trivial, but the official wgpu compute example got me on track. I mostly just copied it. Why it’s hard GPU programming isn’t straightforward. Here’s everything required just to multiply an array by 2: Get a wgpu instance , adapter , device , and queue Create a shader module Create the input , output , and download buffers Create the bind group layout and bind group Create the pipeline layout Create an encoder and a compute pass Copy data CPU → GPU , run the shader, then copy data GPU → CPU After 190 lines and some unexpected debugging (on code copied straight from an example, no less), I could finally double numbers fast, but only with huge arrays. Below a certain size, shuttling data to the GPU and back is slower than just doing the math on the CPU. I don’t fully understand every step yet. Hopefully I won’t need to, or I’ll pick it up along the way. Up next Matrix multiplication is next, and most of the boilerplate above should carry over. Big questions remain about the final network, but taking it one step at a time should get me there eventually… or to a complete surrender, who knows.
Sidequest: Doubling numbers In my last devlog I stated that doubling numbers on the GPU is only faster if you want to double a HUUUGE amount of numbers. Of course I wanted to see at what point the GPU really is faster. I found out that the CPU is actually quite good at doubling numbers so the GPU wasn’t faster at all. I then measured just the time the GPU takes to double the numbers ignoring the time it needs to transfer the data. With that the GPU eventually overtakes the CPU.
GPU Matmul I thought beating the CPU at matrix multiplication would be easy. It turns out that hand-optimized assembly code is a tough opponent. My naive GPU version isn’t bad, though: it’s roughly on par with NumPy, and about 13x faster than my CPU code but still worse than I initially expected. There’s plenty of room to improve. Right now the GPU sits idle about 80% of the time, just waiting on memory reads. For now, I’ll keep building out the rest of the neural net on the GPU and come back to optimizing matmul later.
Forward pass After adding all necessary operations on the GpuMatrix I implemented the forward pass. It was surprisingly hard to get the caching for the backward pass right because reallocating buffers on the gpu should be avoided. As always I let AI write some test cases and everything passed. Next I’ll implement the backward pass which will hopefully let the network learn with incredible speeds.
GPU Layers I initially thought porting the forward and backward passes to the GPU would be as simple as replacing Matrix with GpuMatrix everywhere. It wasn’t. Unlike CPU operations, GPU operations can’t allocate memory themselves. On the CPU, x + 2 simply creates a new value. On the GPU, every operation needs a pre-existing buffer to write its result into. So x += 2 works, but y = x + 2 requires a buffer for y to exist first. And x = x + 2 isn’t supported on the GPU at all. The solution is to pre-allocate buffers and keep them around, resizing them only when the batch size changes. It works, but it also means every struct starts accumulating buffer fields and scaling that approach to an entire network only makes the problem worse. Next: some kind of global buffer manager, before tackling the loss function.
It acutally learns (again) After some more pain with the loss function, buffer sizes and shape mismatches I got a neural network running on the gpu. The GPU is about 10x faster than the CPU version although some hyperparameters can affect this result. Now I want to build a small wasm interface and build a small web page around that to allow anyone to run a local neural net in the browser.
Does it ever get easier? I thought using the network in the web would be a piece of cake. I was wrong. After fixing some minor issues I wrote some quick code to test training. It worked… technically. It was really slow and froze my whole pc. A quick glance into my system monitor revealed the secret. All CPU cores were almost maxed out while the GPU sat idle. So after spending a bunch of time to use the GPU everything was back to the CPU again. WebGPU is still experimental. Especially on Linux which is why instead of throwing an error when it couldn’t access my graphics card it just used all my CPU cores as a fallback. To get the GPU back into the game I started my browser with some flags and compatibility layers which makes training still slower than on native hardware but faster than with the CPU. Hopefully this was the last major challenge and implementing the frontend will be easier.
Website finished I finished the frontend. You can now create a network with specific hyperparameters and then train it. After training you can draw a number and see what it predicts. Now I just need a good README and the project is ready to ship.
Done I added a README, improved the website defaults and did some final debugging. Now the project is ready to ship.
Ships:
Neurorust lets you train a simple neural network in your browser, using the GPU. The network predicts handwritten digits. After training you can draw your own digits and see its predictions. This project has tought me a lot about neural networks, Rust, GPU programming and WebAssembly. It was really challenging to produce a good result when just learning about everything. Even though the code is not perfect and there are a lot of things I would do different next time I feel like the end result has turned out quite well....
|
1793004531.3515701
|
1793090931.3515701
|
|
38387
|
CGPT by @bartoszkasyna | Stardance
|
bartoszkasyna
|
1
|
60.0
|
699
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T20:10:27Z", "hours": 60.0, "multiplier": 11.69, "payout": 699, "blessing": "neutral", "text": "I made small Language Model from scratch in CUDA and C++. Training time was 3.5 hours and 18.8$ with val loss 3.28. The hardest part was optimizing attention kernel - pure chaos. My journey and technical details can be found in devlogs!", "repo": "https://github.com/B4rtekk1/CGPT", "demo": "https://github.com/B4rtekk1/CGPT/releases/tag/CGPT-104M"}]...
|
[{"post_id": 51271, "ts": "202 [{"post_id": 51271, "ts": "2026-08-20T20:07:20Z", "hours": 3.6269, "text": "What I made? My model is trained. Final val loss is 3.28 after 3.5 hour, in comparison original GPT-2 was around 3.1 after 169 hours on 32 Google TPUs. Also my costed 18.8$ while OpenAi one 43.1k$. Technical info about training in previous devlog What’s new in this devlog? I added CPU support and CLI for inference. Most of new CPUs should works with it. It only works on windows. Ready to ship!"}, {"post_id": 51000, "ts": "2026-08-20T14:19:13Z", "hours": 1.9456, "text": "CGPT CGPT is a C++ and CUDA project for training transformer language models from scratch. Training result A 104M-parameter model was trained for one epoch on approximately 10 GB of FineWeb-Edu data , containing about 2.14 billion tokens . Training completed successfully after 58,874 optimizer steps with: final training loss: 3.302037 ; final validation loss: 3.282484 ; training time: approximately 3 hours 32 minutes on single Nvidia H100 GPU; estimated training cost: $25 . The validation loss decreased from 3.908841 to 3.282484 , showing clear learning progress without obvious signs of overfitting. NOTE this is text prediction model not chatbot. Performance The custom BPE tokenizer processed the complete dataset in 22.62 seconds at approximately 414.98 MiB/s .After training, the model generated text at approximately 150–157 tokens/s on an NVIDIA RTX 3050 Laptop GPU with 4 GB VRAM . The generated text is generally fluent, but it can be repetitive and semantically unstable. This is expected for a relatively small model trained for only one epoch. Output The final model, checkpoints, tokenizer, and training logs are stored in:- output/model-104m ;- output/model-104m/checkpoints/ ;- data/fineweb_edu_tokenizer_32k.json ;- training_output.txt . Generated output The cat’s ring in front of the cage is short, so full-body cat with a small rackwork to keep them from licking tails from the cat’s face. Close the cage, but not impossible. Pine fronds are so thick that they can’t hold them up. They also don’t work as well as catnip. But they are troublesome. They tend to grow old and dead in the spring. Pine fronds are the most beautiful cat in the West. They started life a few years ago at the museum, where they were sold in the strongest boxes in the Provided images On first image you can see val loss chart across steps, on the second image you have comparison with GPT-2 from 2019 Next steps in project Now I will write CPU optimized kernels because now it only works on NVIDIA GPU. Feature plans If I would have some money I would like to train something like 1.5B model on much larger amoount of data and time. I also would like to add post training focused on converastions so I would be able to chat with it. Full report For the complete training configuration, detailed results, generation samples, and GPT-2 comparison, see the full CGPT README ."}, {"post_id": 50843, "ts": "2026-08-20T09:07:51Z", "hours": 4.0297, "text": "I was working on optimizing attention and cross entropy kernel. I went from 41ms->1ms in attention backward 2ms-> 0.48ms attention forward and 3.5ms->2.3ms in cross entropy. On the first image you can see new kernels times on the second the old ones. Note gpu utilization is not real in attention kernels"}, {"post_id": 49463, "ts": "2026-08-18T10:04:18Z", "hours": 5.4833, "text": "I was trying to train my model, but something went wrong. I need to find out, why loss jumped into sky. Ln(32000) = 10.37 which mean tokens are random but I got 20.8 so model is predicting worst possible token???"}, {"post_id": 48344, "ts": "2026-08-16T17:34:52Z", "hours": 3.2119, "text": "Optimizations I was working on optimizing CUDA kernels and adding some Doxygen documentation. In the image you can see GPU utilization per kernel. Note: The relatively low utilization is expected — these kernels are likely optimized for larger GPUs than the RTX 3050 (which is quite limited in terms of Tensor cores and SM count). My small language model is written entirely in CUDA and C++ with no third-party dependencies. Note I posted kernels bechamrk in the image because stardance markdown doesnt support tables yet"}, {"post_id": 47041, "ts": "2026-08-14T17:15:00Z", "hours": 6.1558, "text": "Successfully trained very small model. Optimized kernel a lot (especially attention backward). Now I have to optimize kernels even more, documented code, and train full model."}, {"post_id": 40142, "ts": "2026-08-03T15:25:37Z", "hours": 5.5306, "text": "Added embedding backward, attention backward, linear backward, rmsnorm backward, rope backward, swiglu backward"}, {"post_id": 36570, "ts": "2026-07-28T19:33:06Z", "hours": 7.2014, "text": "Hello, world! Recently, I’ve been working on optimizing CUDA kernels for my own LLM implementation. Most of them are now performing quite well, especially considering that I’m running everything on an RTX 3050 Laptop GPU with only 4 GB of VRAM. There is still one kernel that keeps frustrating me: GQA attention . Its GPU utilization is much lower than the rest, and I’m not sure how to optimize it further. Here are my current benchmark results: RMSNorm Input: [512, 4096] Data type: FP16 Execution time: 0.049 ms GPU throughput: 89% SwiGLU Input: [512, 4096] Data type: FP16 Execution time: 0.074 ms GPU throughput: 90% Linear layer Input: [512, 4096] Weights: [4096, 4096] Output: [512, 4096] Data type: FP16 Execution time: 1.04 ms GPU throughput: 60% Note: The reported throughput is relatively low because this benchmark runs GEMM on a comparatively small input matrix. At this problem size, the GPU cannot reach the same utilization as it would with larger batches or longer sequences. Rotary Position Embedding — RoPE Query: [1, 512, 32, 128] Key: [1, 512, 8, 128] Cosine and sine cache: [512, 64] Data type: FP16 Execution time: 0.06 ms GPU throughput: 87% Grouped Query Attention — GQA Query and output: [1, 512, 32, 128] Key and value: [1, 512, 8, 128] Data type: FP16 Execution time: 3.32 ms GPU throughput: 10% This is currently the main bottleneck. I have already applied tiling, online softmax, and shared-memory optimizations, but the utilization is still very low. Embedding lookup Number of input tokens: 512 Vocabulary size: 32,000 Hidden size: 4,096 Output: [512, 4096] Data type: FP16 Execution time: 0.05 ms GPU throughput: 88% Summary Overall, I’m satisfied with the results, but the attention kernel still needs a lot of work. (I will probably use cuDNN). The hardest thing before me - backprop. But now I can play with kernels and model layers."}, {"post_id": 35761, "ts": "2026-07-27T12:20:59Z", "hours": 4.4969, "text": "Implemented RoPE kernel. All 10 tests passed. I also added in code documentation. Netx big stepp will be attention kernel."}, {"post_id": 35220, "ts": "2026-07-26T14:49:29Z", "hours": 6.4347, "text": "With chatgpt help i optimized my tokenizer. 100MiB needs only 33.72s of training time. Batch encode throughput is around ~400MiB/s which is around 11.5x faster than OpenAI tiktoken(look at images). I have CPU AMD 5 5600H inside PC. I think that on AI data center my tokenizer could reach even about 4GiB/s ! My tokenizer is fast but it require relative big amount of ram. Nedded RAM is about 20x of train file size. When I finish my project I will train my model and benchmark my tokenizer on god tier machine. Wish me luck!"}, {"post_id": 34640, "ts": "2026-07-25T15:14:20Z", "hours": 3.9872, "text": "Succesfully improved Tokenizer. Now 100MiB of text encode in around 1 minute. In previous devlog 8MiB nedded 22 seconds. So huge improvemnt"}, {"post_id": 34171, "ts": "2026-07-24T18:14:15Z", "hours": 0.6911, "text": "Optimized tokenizer - 100Mib require 21.8s training time. Encoding time 5.5MiB/s"}, {"post_id": 33942, "ts": "2026-07-24T08:30:33Z", "hours": 6.4489, "text": "Implemented RMSNorm, linear layer kernel. Implemented BPE Tokenizer - currently its slow."}, {"post_id": 33119, "ts": "2026-07-22T18:55:53Z", "hours": 0.5714, "text": "Successfully complied CUDA hello world"}]...
|
Title: CGPT by @bartoszkasyna | Stardance
Devlogs Title: CGPT by @bartoszkasyna | Stardance
Devlogs:
Successfully complied CUDA hello world
Implemented RMSNorm, linear layer kernel. Implemented BPE Tokenizer - currently its slow.
Optimized tokenizer - 100Mib require 21.8s training time. Encoding time 5.5MiB/s
Succesfully improved Tokenizer. Now 100MiB of text encode in around 1 minute. In previous devlog 8MiB nedded 22 seconds. So huge improvemnt
With chatgpt help i optimized my tokenizer. 100MiB needs only 33.72s of training time. Batch encode throughput is around ~400MiB/s which is around 11.5x faster than OpenAI tiktoken(look at images). I have CPU AMD 5 5600H inside PC. I think that on AI data center my tokenizer could reach even about 4GiB/s ! My tokenizer is fast but it require relative big amount of ram. Nedded RAM is about 20x of train file size. When I finish my project I will train my model and benchmark my tokenizer on god tier machine. Wish me luck!
Implemented RoPE kernel. All 10 tests passed. I also added in code documentation. Netx big stepp will be attention kernel.
Hello, world! Recently, I’ve been working on optimizing CUDA kernels for my own LLM implementation. Most of them are now performing quite well, especially considering that I’m running everything on an RTX 3050 Laptop GPU with only 4 GB of VRAM. There is still one kernel that keeps frustrating me: GQA attention . Its GPU utilization is much lower than the rest, and I’m not sure how to optimize it further. Here are my current benchmark results: RMSNorm Input: [512, 4096] Data type: FP16 Execution time: 0.049 ms GPU throughput: 89% SwiGLU Input: [512, 4096] Data type: FP16 Execution time: 0.074 ms GPU throughput: 90% Linear layer Input: [512, 4096] Weights: [4096, 4096] Output: [512, 4096] Data type: FP16 Execution time: 1.04 ms GPU throughput: 60% Note: The reported throughput is relatively low because this benchmark runs GEMM on a comparatively small input matrix. At this problem size, the GPU cannot reach the same utilization as it would with larger batches or longer sequences. Rotary Position Embedding — RoPE Query: [1, 512, 32, 128] Key: [1, 512, 8, 128] Cosine and sine cache: [512, 64] Data type: FP16 Execution time: 0.06 ms GPU throughput: 87% Grouped Query Attention — GQA Query and output: [1, 512, 32, 128] Key and value: [1, 512, 8, 128] Data type: FP16 Execution time: 3.32 ms GPU throughput: 10% This is currently the main bottleneck. I have already applied tiling, online softmax, and shared-memory optimizations, but the utilization is still very low. Embedding lookup Number of input tokens: 512 Vocabulary size: 32,000 Hidden size: 4,096 Output: [512, 4096] Data type: FP16 Execution time: 0.05 ms GPU throughput: 88% Summary Overall, I’m satisfied with the results, but the attention kernel still needs a lot of work. (I will probably use cuDNN). The hardest thing before me - backprop. But now I can play with kernels and model layers.
Added embedding backward, attention backward, linear backward, rmsnorm backward, rope backward, swiglu backward
Successfully trained very small model. Optimized kernel a lot (especially attention backward). Now I have to optimize kernels even more, documented code, and train full model.
Optimizations I was working on optimizing CUDA kernels and adding some Doxygen documentation. In the image you can see GPU utilization per kernel. Note: The relatively low utilization is expected — these kernels are likely optimized for larger GPUs than the RTX 3050 (which is quite limited in terms of Tensor cores and SM count). My small language model is written entirely in CUDA and C++ with no third-party dependencies. Note I posted kernels bechamrk in the image because stardance markdown doesnt support tables yet
I was trying to train my model, but something went wrong. I need to find out, why loss jumped into sky. Ln(32000) = 10.37 which mean tokens are random but I got 20.8 so model is predicting worst possible token???
I was working on optimizing attention and cross entropy kernel. I went from 41ms->1ms in attention backward 2ms-> 0.48ms attention forward and 3.5ms->2.3ms in cross entropy. On the first image you can see new kernels times on the second the old ones. Note gpu utilization is not real in attention kernels
CGPT CGPT is a C++ and CUDA project for training transformer language models from scratch. Training result A 104M-parameter model was trained for one epoch on approximately 10 GB of FineWeb-Edu data , containing about 2.14 billion tokens . Training completed successfully after 58,874 optimizer steps with: final training loss: 3.302037 ; final validation loss: 3.282484 ; training time: approximately 3 hours 32 minutes on single Nvidia H100 GPU; estimated training cost: $25 . The validation loss decreased from 3.908841 to 3.282484 , showing clear learning progress without obvious signs of overfitting. NOTE this is text prediction model not chatbot. Performance The custom BPE tokenizer processed the complete dataset in 22.62 seconds at approximately 414.98 MiB/s .After training, the model generated text at approximately 150–157 tokens/s on an NVIDIA RTX 3050 Laptop GPU with 4 GB VRAM . The generated text is generally fluent, but it can be repetitive and semantically unstable. This is expected for a relatively small model trained for only one epoch. Output The final model, checkpoints, tokenizer, and training logs are stored in:- output/model-104m ;- output/model-104m/checkpoints/ ;- data/fineweb_edu_tokenizer_32k.json ;- training_output.txt . Generated output The cat’s ring in front of the cage is short, so full-body cat with a small rackwork to keep them from licking tails from the cat’s face. Close the cage, but not impossible. Pine fronds are so thick that they can’t hold them up. They also don’t work as well as catnip. But they are troublesome. They tend to grow old and dead in the spring. Pine fronds are the most beautiful cat in the West. They started life a few years ago at the museum, where they were sold in the strongest boxes in the Provided images On first image you can see val loss chart across steps, on the second image you have comparison with GPT-2 from 2019 Next steps in project Now I will write CPU optimized kernels because now it only works on NVIDIA GPU. Feature plans If I would have some money I would like to train something like 1.5B model on much larger amoount of data and time. I also would like to add post training focused on converastions so I would be able to chat with it. Full report For the complete training configuration, detailed results, generation samples, and GPT-2 comparison, see the full CGPT README .
What I made? My model is trained. Final val loss is 3.28 after 3.5 hour, in comparison original GPT-2 was around 3.1 after 169 hours on 32 Google TPUs. Also my costed 18.8$ while OpenAi one 43.1k$. Technical info about training in previous devlog What’s new in this devlog? I added CPU support and CLI for inference. Most of new CPUs should works with it. It only works on windows. Ready to ship!
Ships:
I made small Language Model from scratch in CUDA and C++. Training time was 3.5 hours and 18.8$ with val loss 3.28. The hardest part was optimizing attention kernel - pure chaos. My journey and technical details can be found in devlogs!...
|
1793051601.0576868
|
1793138001.0576868
|
|
39289
|
Cortex Engine by @ball | Stardance
|
ball
|
1
|
60.0
|
814
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T02:00:55Z", "hours": 60.0, "multiplier": 13.72, "payout": 814, "blessing": "neutral", "text": "First ship for Cortex :D. Cortex is a tool for building and testing automated trading strategies without needing to write code. You can load stock price data, pick technical indicators like moving averages or RSI, and visually create custom buy and sell rules. It then runs a simulation over historical data to show you how your strategy would have performed, complete with interactive charts, performance stats like win rates and total returns, and downloadable trade logs. Hope you all enjoy using it :D", "repo": "https://github.com/kavinr24/Cortex", "demo": "https://cortexsim.xyz"}]...
|
[{"post_id": 41092, "ts": "202 [{"post_id": 41092, "ts": "2026-08-05T01:52:43Z", "hours": 0.8061, "text": "Devlog 11 I’m just doing this last devlog before the first ship, so that I get the remaining time I spent working on the readme. The complete readme.md is finished, including all the features, development tools, tech stack, and more. I will be shipping now."}, {"post_id": 41047, "ts": "2026-08-05T00:17:19Z", "hours": 4.4878, "text": "Devlog 10 hello :D. the first version of Cortex is ready to ship. After I modularized the components, I finished up the strategy builder module and the UI in streamlit. So now you can make your own custom no-code entry and exit rules. The app is deployed on Render. I’ve bought a domain for it, and linked that up to the Render link. The current UI takes in whatever rules you set, fixes up the signal logic, and then hands it to the backtester so you get results pretty much instantly. What I got working for the builder: Add, delete, change multi condition rules using basic boolean logic Compare indicators against fixed numbers or just evaluate 2 strategies against eachother, eg SMA and EMA Calculates indicators ahead of time and edge cases like NaN crashes and random state resets. What’s next? README, full runthrough to make sure everything runs smoothly, and then the first ship."}, {"post_id": 40531, "ts": "2026-08-04T03:53:38Z", "hours": 9.0089, "text": "Devlog 09 hello :D. With the bridge now running, I built out the full app.py dashboard to test all the ui features, strategies, and visual analytics like the graphs. Its currently all in a singular file before I split it into seperate components. All the Streamlit app does is gather parameters from the sidebar, send them to CortexBridge, and create a render of the returned metrics/payload. What I’ve added to the dashboard: Full strategy support (choose from dropdown in sidebar) Date range controls & friction inputs: added execution start/end date selectors + interactive sliders for initial capital, commission fees, and slippage % Chart shows equity curve performance Downloadable CSV exports for trade logs and JSON backtest reports What’s next? The dashboard logic is complete, next up is to modularize it into different components. I will most likely also be adding a custom strategy building system soon."}, {"post_id": 38650, "ts": "2026-08-01T04:50:15Z", "hours": 3.9858, "text": "Devlog 08 hi :D. Before writing out the Streamlit code, I decided to setup the actual pipeline to connect the frontend to the backtesting engine. bridge.py now handles the transfer of UI control outputs to commands in the engine. All the streamlit app has to do now is pass input parameters into CortexBridge and receive a payload. This makes sure the web client and backend stay completely seperate. Bridge features: BacktestPayload is the dataclass that returns everything Streamlit will need. This includes the formatted metrics (Total return, Sharpe, etc.), the equity curve df, the trade history table, and execution logs. looks for local sqlite databases, falls back to local csv files, or generates synthetic data if the ticker data isn’t available signals are delayed by 1 bar so that the strategy can’t cheat by knowing the future prices, and trading costs like fees and slippage are also factored into every executed trade bunch of error handling and logging Whats next? Next up is building the full Streamlit layout and hooking it up to the bridge."}, {"post_id": 38284, "ts": "2026-07-31T16:25:02Z", "hours": 10.6756, "text": "Devlog 07 Hello :D. I’m at 10 hours so I have to make a devlog. I will be dropping the tkinter gui completely. Tkinter is genuinely terrible for this project, I’ve spent too long making the dark theme frames and canvas charts, and the UI still looks very old and bad. I will be switching the whole frontend to Streamlit. Streamlit is alot easier to use and is way more convenient. Streamlit also converts Cortex into a web app instead of having to download and run it locally. Alot better for users who just want to test it. The Streamlit building experience also seems better, as they have prebuilt UI components, proper charting libraries, and easier deployment. Whats next? I am scrapping the tkinter app. I will start building the backend wrappers and logic to connect with the Streamlit frontend."}, {"post_id": 37216, "ts": "2026-07-29T19:20:18Z", "hours": 10.3425, "text": "Devlog 06 Hello :D. Since the last devlog, I’ve gotten started on creating the complete pipeline. I started on a script for a complete backtest run. Majority of the time in this devlog was taken up by my frontend work that I just started. This has been the hardest part so far (for me), I don’t remember the last time I’ve had to use tkinter. Current features in the UI: Ticker selection and date range picker (to retrieve stock data) Strategy parameters (fast/slow SMA periods) Risk controls (initial capital, commision %, slippage %) to improve backtesting accuracy List of all trade executions I haven’t implemented matplotlib to show the equity curve and drawdown, that will most likely be up next. The current UI also just feels very blocky and sharp, I will be smoothening everything out. Whats next? I’ll be implementing the chart using Matplotlib for equity curves and drawdowns, and fixing up the styling/layout."}, {"post_id": 36100, "ts": "2026-07-27T23:41:23Z", "hours": 7.4644, "text": "Devlog 05 hey guys :D. I’ve finally completed the PerformanceMetrics module. This allows the program to now display trade stats, WLR, return metrics, and alot more. I also added 4 new strategies for the EMA, Stochastic, ADX, and ATR indicators that I added in the prev devlog. Main.py was also of course updated to handle the metrics. I’ve also just began work on the full pipeline and data wrappers. After that will come the frontend development."}, {"post_id": 35308, "ts": "2026-07-26T17:01:11Z", "hours": 4.0656, "text": "Devlog 04 Hello :D. Last devlog I finished up the backtesting engine, strategy module, and added 2 new indicators. 3 new indicators were added to the TechnicalIndicators module: Stochastic Oscillator ADX (Average directional index - trend strength) ATR (Average true range - volatility) My strategy module was also updated to generate signals for the MACD and Bollinger Bands indicators. Majority of my time has been taken up by the new PerformanceMetrics module I’ve been working on. This module evaluates the backtesting results with return, risk, drawdown, and trade statistics. It still isn’t finished, but will definitely be done before the next devlog. Whats next? Next up will just be more addition of indicators and strategy refinement. After I’ll be setting up the backend wrapper and data handlers to work with the frontend (which I will develop later)."}, {"post_id": 34973, "ts": "2026-07-26T03:20:56Z", "hours": 5.1519, "text": "Devlog 03 Hello :D. Last devlog I migrated everythng to SQLite and built out a few technical indicators. Devlog took this long as I was working on the backtesting engine for a while. Took a while to understand what was going on when I first tried to work on trade execution, create the cash vs holdings trackng, and the entry exit logic. I did get a full simulation working that has slippage, comissions, and risk management like stop loss and take profit. I’ve also added the strategy module to turn indicator outputs into buy and sell signals. 2 new indicators were also added: MACD (Moving Average Convergence Divergence) Bollinger Bands main.py was also of course updated to handle the new modules."}, {"post_id": 34414, "ts": "2026-07-25T02:59:32Z", "hours": 3.0003, "text": "Devlog 02 Hello :D. Last time, I had a script that pulled stock data from yfinance, flattened the dataframes, and saved the data to JSON and CSV files. For this update, I migrated to an actual local database, created separate modules, and built out the first bit of the indicators. I switched over to an SQLite database, and as everything was getting too crammed in the main.py, created separate modules for handling the database and fetching yfinance data, which include the DatabaseManager and DataFetcher classes. I’ve started out on building indicators.py to compute technical indicators. So far I’ve implemented: SMA (Simple Moving Average) EMA (Exponential Moving Average) RSI (Relative Strength Index) I also updated main.py to handle all the new modules and work with the SQLite database. Whats next? I will most likely start building out the strategy part to generate signals based on the indicator outputs."}, {"post_id": 34286, "ts": "2026-07-24T21:16:18Z", "hours": 1.3603, "text": "Devlog 01 Hey guys :D. First devlog of Cortex, heres a quick overview: Cortex is a backtesting and market analysis platform that I’m building to test algotrading strategies. For this first update, I got the main data pipeline working. All my data is coming from yfinance. I setup yfinance to pull 2 years of daily OHLCV data for 6 tickers (AAPL, MSFT, GOOGL, NVDA, SPY, and AMZN). pandas returns MultiIndex columns, so I had to format everything into a flat table. The formatted JSON and CSV files are also exported."}]...
|
Title: Cortex Engine by @ball | Stardance
Devlogs Title: Cortex Engine by @ball | Stardance
Devlogs:
Devlog 01 Hey guys :D. First devlog of Cortex, heres a quick overview: Cortex is a backtesting and market analysis platform that I’m building to test algotrading strategies. For this first update, I got the main data pipeline working. All my data is coming from yfinance. I setup yfinance to pull 2 years of daily OHLCV data for 6 tickers (AAPL, MSFT, GOOGL, NVDA, SPY, and AMZN). pandas returns MultiIndex columns, so I had to format everything into a flat table. The formatted JSON and CSV files are also exported.
Devlog 02 Hello :D. Last time, I had a script that pulled stock data from yfinance, flattened the dataframes, and saved the data to JSON and CSV files. For this update, I migrated to an actual local database, created separate modules, and built out the first bit of the indicators. I switched over to an SQLite database, and as everything was getting too crammed in the main.py, created separate modules for handling the database and fetching yfinance data, which include the DatabaseManager and DataFetcher classes. I’ve started out on building indicators.py to compute technical indicators. So far I’ve implemented: SMA (Simple Moving Average) EMA (Exponential Moving Average) RSI (Relative Strength Index) I also updated main.py to handle all the new modules and work with the SQLite database. Whats next? I will most likely start building out the strategy part to generate signals based on the indicator outputs.
Devlog 03 Hello :D. Last devlog I migrated everythng to SQLite and built out a few technical indicators. Devlog took this long as I was working on the backtesting engine for a while. Took a while to understand what was going on when I first tried to work on trade execution, create the cash vs holdings trackng, and the entry exit logic. I did get a full simulation working that has slippage, comissions, and risk management like stop loss and take profit. I’ve also added the strategy module to turn indicator outputs into buy and sell signals. 2 new indicators were also added: MACD (Moving Average Convergence Divergence) Bollinger Bands main.py was also of course updated to handle the new modules.
Devlog 04 Hello :D. Last devlog I finished up the backtesting engine, strategy module, and added 2 new indicators. 3 new indicators were added to the TechnicalIndicators module: Stochastic Oscillator ADX (Average directional index - trend strength) ATR (Average true range - volatility) My strategy module was also updated to generate signals for the MACD and Bollinger Bands indicators. Majority of my time has been taken up by the new PerformanceMetrics module I’ve been working on. This module evaluates the backtesting results with return, risk, drawdown, and trade statistics. It still isn’t finished, but will definitely be done before the next devlog. Whats next? Next up will just be more addition of indicators and strategy refinement. After I’ll be setting up the backend wrapper and data handlers to work with the frontend (which I will develop later).
Devlog 05 hey guys :D. I’ve finally completed the PerformanceMetrics module. This allows the program to now display trade stats, WLR, return metrics, and alot more. I also added 4 new strategies for the EMA, Stochastic, ADX, and ATR indicators that I added in the prev devlog. Main.py was also of course updated to handle the metrics. I’ve also just began work on the full pipeline and data wrappers. After that will come the frontend development.
Devlog 06 Hello :D. Since the last devlog, I’ve gotten started on creating the complete pipeline. I started on a script for a complete backtest run. Majority of the time in this devlog was taken up by my frontend work that I just started. This has been the hardest part so far (for me), I don’t remember the last time I’ve had to use tkinter. Current features in the UI: Ticker selection and date range picker (to retrieve stock data) Strategy parameters (fast/slow SMA periods) Risk controls (initial capital, commision %, slippage %) to improve backtesting accuracy List of all trade executions I haven’t implemented matplotlib to show the equity curve and drawdown, that will most likely be up next. The current UI also just feels very blocky and sharp, I will be smoothening everything out. Whats next? I’ll be implementing the chart using Matplotlib for equity curves and drawdowns, and fixing up the styling/layout.
Devlog 07 Hello :D. I’m at 10 hours so I have to make a devlog. I will be dropping the tkinter gui completely. Tkinter is genuinely terrible for this project, I’ve spent too long making the dark theme frames and canvas charts, and the UI still looks very old and bad. I will be switching the whole frontend to Streamlit. Streamlit is alot easier to use and is way more convenient. Streamlit also converts Cortex into a web app instead of having to download and run it locally. Alot better for users who just want to test it. The Streamlit building experience also seems better, as they have prebuilt UI components, proper charting libraries, and easier deployment. Whats next? I am scrapping the tkinter app. I will start building the backend wrappers and logic to connect with the Streamlit frontend.
Devlog 08 hi :D. Before writing out the Streamlit code, I decided to setup the actual pipeline to connect the frontend to the backtesting engine. bridge.py now handles the transfer of UI control outputs to commands in the engine. All the streamlit app has to do now is pass input parameters into CortexBridge and receive a payload. This makes sure the web client and backend stay completely seperate. Bridge features: BacktestPayload is the dataclass that returns everything Streamlit will need. This includes the formatted metrics (Total return, Sharpe, etc.), the equity curve df, the trade history table, and execution logs. looks for local sqlite databases, falls back to local csv files, or generates synthetic data if the ticker data isn’t available signals are delayed by 1 bar so that the strategy can’t cheat by knowing the future prices, and trading costs like fees and slippage are also factored into every executed trade bunch of error handling and logging Whats next? Next up is building the full Streamlit layout and hooking it up to the bridge.
Devlog 09 hello :D. With the bridge now running, I built out the full app.py dashboard to test all the ui features, strategies, and visual analytics like the graphs. Its currently all in a singular file before I split it into seperate components. All the Streamlit app does is gather parameters from the sidebar, send them to CortexBridge, and create a render of the returned metrics/payload. What I’ve added to the dashboard: Full strategy support (choose from dropdown in sidebar) Date range controls & friction inputs: added execution start/end date selectors + interactive sliders for initial capital, commission fees, and slippage % Chart shows equity curve performance Downloadable CSV exports for trade logs and JSON backtest reports What’s next? The dashboard logic is complete, next up is to modularize it into different components. I will most likely also be adding a custom strategy building system soon.
Devlog 10 hello :D. the first version of Cortex is ready to ship. After I modularized the components, I finished up the strategy builder module and the UI in streamlit. So now you can make your own custom no-code entry and exit rules. The app is deployed on Render. I’ve bought a domain for it, and linked that up to the Render link. The current UI takes in whatever rules you set, fixes up the signal logic, and then hands it to the backtester so you get results pretty much instantly. What I got working for the builder: Add, delete, change multi condition rules using basic boolean logic Compare indicators against fixed numbers or just evaluate 2 strategies against eachother, eg SMA and EMA Calculates indicators ahead of time and edge cases like NaN crashes and random state resets. What’s next? README, full runthrough to make sure everything runs smoothly, and then the first ship.
Devlog 11 I’m just doing this last devlog before the first ship, so that I get the remaining time I spent working on the readme. The complete readme.md is finished, including all the features, development tools, tech stack, and more. I will be shipping now.
Ships:
First ship for Cortex :D. Cortex is a tool for building and testing automated trading strategies without needing to write code. You can load stock price data, pick technical indicators like moving averages or RSI, and visually create custom buy and sell rules. It then runs a simulation over historical data to show you how your strategy would have performed, complete with interactive charts, performance stats like win rates and total returns, and downloadable trade logs. Hope you all enjoy using it :D...
|
1792878600.0681653
|
1793742600.0681653
|
|
44313
|
Cube Matcher by @LCdev1234 | Stardance
|
LCdev1234
|
1
|
60.0
|
1031
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T23:19:21Z", "hours": 60.0, "multiplier": 17.28, "payout": 1031, "blessing": "neutral", "text": "This is Cube Matcher, a strategy puzzle game in wich you need to move a 3x3 cube to match a shown pattern, but the problem is that there are zombies climbing the walls that move toward you each time you take an action!! So you need to be careful about how many actions you take before having to knock them. The most challenging part of my project was making the 3D cube and the player interactions. This was becouse I decided to make the 3D system in my game from scratch, so I had to add projections, and deal with the cube coordinates of each point (that were a lot), and for the player interactions the most difficult part was knowing when the player and the cube needed to perform an interaction becouse I needed to add a fake movement (the animation) for the action not to see so quickly, so i needed to sync the animation with the real position. In the end the project turned out like I imagined from the beggining just changing some small concepts for the game to be fun and fair.", "repo": "https://github.com/LCdev1234/Cube-Matcher", "demo": "https://lcdev1234.itch.io/cube-matcher"}]...
|
[{"post_id": 74659, "ts": "202 [{"post_id": 74659, "ts": "2026-09-27T21:44:20Z", "hours": 4.0744, "text": "Devlog #12: Final devlog Added a in-game tutorial and music and sounds. I finally finished making the game!! For the last modifications I added the tutorial of the game with the instructions and example videos to show how everything works. I also added background music and sound effects, it was difficult finding the ones that fit best my game, but I was able to find some really good ones."}, {"post_id": 74159, "ts": "2026-09-26T19:58:35Z", "hours": 2.6803, "text": "Devlog #11 Finished adding the menus to the game!!"}, {"post_id": 73837, "ts": "2026-09-26T03:59:13Z", "hours": 2.8544, "text": "Devlog #10 I added the zombies actual movement to the game, each times the player makes an action the zombies take a few steps. I also added the death screen and the “Play Again” button alredy works. While adding this, I changed a name of a git commit and it merged with the one i was currently working on - I tried to undo what I had done, but I coudnt fix it, I even through I was going to have to code the last parts of the game again, but I was able to fix it using the integrate Copilot AI integrated in VS code."}, {"post_id": 73753, "ts": "2026-09-25T21:11:48Z", "hours": 8.365, "text": "Devlog #9 Added the zombies to the game. The zombies werent so difficult to code. The only problems I had were some interactions with the player or cube. One of the things that took me the most time was making the zombies follow the player when they were on the top, it turned out that one of my lines of code to keep the zombies in their column when climbing, was the problem."}, {"post_id": 72434, "ts": "2026-09-22T22:58:16Z", "hours": 4.725, "text": "Devlog #8 I added the code to check if the upper face pattern of the cube matches the one shown, and I was finally able to tried solving it myself. When doing so I notice that it is a little hard (at least for me) to solve the cube, and adding zombies as I originally planned would not make a lot of sense, so i decided it to change the idea a little bit, instead of the zombies climbing the wall and stopping them and be able to fitgh them once they were on top (the original idea), I will add the zombies so they slowly move when the player slides or rotates the cube and once the zombie is on top the player is basicly dead."}, {"post_id": 70940, "ts": "2026-09-20T02:34:15Z", "hours": 3.9314, "text": "Devlog #7 Added the sliding stickers cube mechanic. The dificult part wasn’t making the stickers change place, it was the sticker movement animation, witch took took the most hours to code. This was becouse i needed to be show a false player and sticker movement while still having the real position variables and once the animation ended record the new position."}, {"post_id": 68940, "ts": "2026-09-16T02:39:43Z", "hours": 6.1658, "text": "Devlog #6 This time, I mostly just added some small changes and fixes, some of the more important changes are: I changed the player textures to a simple white square with eyes, this was just becouse I am not good drawing and making the animations was too dificult, to make the square a little more alive, I added some squishing to its animation using code I added some invisible walls around the player so it dont fall off the cube, but I made so when the rubik cube is rotating the player could fall if not careful I also made some small fixes to some problems I find along the way while making all of this changes"}, {"post_id": 63633, "ts": "2026-09-07T15:41:05Z", "hours": 9.5733, "text": "Devlog #5 I couldn’t advance as fast with the project because of school but now I was able to make the player be able to interact with the cube (rotating it), it was a little hard specially the parts before actually making the interactions that were upgrading the collision system, because before the collision system was only “not fall down past certain y level” which means it didn’t have to see anything with the cube, with the upgraded collisions now it depends on the cube and even when its rotated it can collide normally, also I changed a little bit the jumping so now it has a little cooldown so it can’t be spammed and for rotating the cube I made it so the player needs to jump twice in less than a certain time for it to rotate. I think that the rotation interaction already works well I will next add a solving system and maybe add a new interaction mechanic with the cube."}, {"post_id": 47221, "ts": "2026-08-15T00:12:05Z", "hours": 5.6078, "text": "Devlog #4 Hi there! I took a little more time on this part of the code mainly because I added something that broke the code, and i coudnt find the evil piece of code, but I finally got it working. I just added the player on top of the cube, added some pretty much basic physics that include jumping and walking. For the walking i made it so the controls always move where the camera is viewing not the actual game coordinates, it just means that the player walks forward, backward, and to the sides no matter how the cube is rotated. I also added basic collision system which I am in the process of upgrading, once I get the collisions working better I will desing the other player animations because right now is just a idle animation replaying no matter what. Those are the main features i added aside from fixing some bugs that my code had, next I will be adding some of the main mechanics of the game (rotating the cube) so that the player can start making some actions. Thanks for reading"}, {"post_id": 44366, "ts": "2026-08-10T02:28:58Z", "hours": 4.1247, "text": "Devlog #3 I alredy added the cube textures, and divided the cube into a 3x3 grid, I also added rubiks cube-style rotations and the different color textures. I decided to give the textures that hand painted style becouse I think it seems cool!!. This ended up being more time consuming than I expected, and still needs some work. For now the code just defines the starting colors and lets me rotate the different parts of the cube freely. However I still need to make the rotation permanent and to stored in the cube colors. With this I finally finished the basics of the cube, so I can alredy start working on the player next. The player will be able to interact with the cube so I can finally start working with the real game mechanics."}, {"post_id": 43476, "ts": "2026-08-08T19:23:15Z", "hours": 4.7336, "text": "Devlog #2 I was alredy able to add textures to the 3d cube!! It was more difficult that i expected, i needed to add texture layering so the faces dont overlap each other, and I had to learn how to use mesh2d to render the image texture in the cube. There is still a little visual problem, but its not ver noticible, so I’ll leave it as is for now. My next steps will be to add the Rubik cube rotations and the real and final textures for the cube."}, {"post_id": 42246, "ts": "2026-08-06T21:18:45Z", "hours": 2.7878, "text": "Devlog #1 Hello there! i finally managed to render a 3d cube for the game i just starting working on. I know its simple for now, but next i’ll add textures and the rubik’s cube movement. The game is basically about completing a cube face with a random generated pattern while some little monsters try to stop you… Its still work in progress, and i’ll show more as the idea becomes clearer and the game takes shape."}]...
|
Title: Cube Matcher by @LCdev1234 | Stardance
Dev Title: Cube Matcher by @LCdev1234 | Stardance
Devlogs:
Devlog #1 Hello there! i finally managed to render a 3d cube for the game i just starting working on. I know its simple for now, but next i’ll add textures and the rubik’s cube movement. The game is basically about completing a cube face with a random generated pattern while some little monsters try to stop you… Its still work in progress, and i’ll show more as the idea becomes clearer and the game takes shape.
Devlog #2 I was alredy able to add textures to the 3d cube!! It was more difficult that i expected, i needed to add texture layering so the faces dont overlap each other, and I had to learn how to use mesh2d to render the image texture in the cube. There is still a little visual problem, but its not ver noticible, so I’ll leave it as is for now. My next steps will be to add the Rubik cube rotations and the real and final textures for the cube.
Devlog #3 I alredy added the cube textures, and divided the cube into a 3x3 grid, I also added rubiks cube-style rotations and the different color textures. I decided to give the textures that hand painted style becouse I think it seems cool!!. This ended up being more time consuming than I expected, and still needs some work. For now the code just defines the starting colors and lets me rotate the different parts of the cube freely. However I still need to make the rotation permanent and to stored in the cube colors. With this I finally finished the basics of the cube, so I can alredy start working on the player next. The player will be able to interact with the cube so I can finally start working with the real game mechanics.
Devlog #4 Hi there! I took a little more time on this part of the code mainly because I added something that broke the code, and i coudnt find the evil piece of code, but I finally got it working. I just added the player on top of the cube, added some pretty much basic physics that include jumping and walking. For the walking i made it so the controls always move where the camera is viewing not the actual game coordinates, it just means that the player walks forward, backward, and to the sides no matter how the cube is rotated. I also added basic collision system which I am in the process of upgrading, once I get the collisions working better I will desing the other player animations because right now is just a idle animation replaying no matter what. Those are the main features i added aside from fixing some bugs that my code had, next I will be adding some of the main mechanics of the game (rotating the cube) so that the player can start making some actions. Thanks for reading
Devlog #5 I couldn’t advance as fast with the project because of school but now I was able to make the player be able to interact with the cube (rotating it), it was a little hard specially the parts before actually making the interactions that were upgrading the collision system, because before the collision system was only “not fall down past certain y level” which means it didn’t have to see anything with the cube, with the upgraded collisions now it depends on the cube and even when its rotated it can collide normally, also I changed a little bit the jumping so now it has a little cooldown so it can’t be spammed and for rotating the cube I made it so the player needs to jump twice in less than a certain time for it to rotate. I think that the rotation interaction already works well I will next add a solving system and maybe add a new interaction mechanic with the cube.
Devlog #6 This time, I mostly just added some small changes and fixes, some of the more important changes are: I changed the player textures to a simple white square with eyes, this was just becouse I am not good drawing and making the animations was too dificult, to make the square a little more alive, I added some squishing to its animation using code I added some invisible walls around the player so it dont fall off the cube, but I made so when the rubik cube is rotating the player could fall if not careful I also made some small fixes to some problems I find along the way while making all of this changes
Devlog #7 Added the sliding stickers cube mechanic. The dificult part wasn’t making the stickers change place, it was the sticker movement animation, witch took took the most hours to code. This was becouse i needed to be show a false player and sticker movement while still having the real position variables and once the animation ended record the new position.
Devlog #8 I added the code to check if the upper face pattern of the cube matches the one shown, and I was finally able to tried solving it myself. When doing so I notice that it is a little hard (at least for me) to solve the cube, and adding zombies as I originally planned would not make a lot of sense, so i decided it to change the idea a little bit, instead of the zombies climbing the wall and stopping them and be able to fitgh them once they were on top (the original idea), I will add the zombies so they slowly move when the player slides or rotates the cube and once the zombie is on top the player is basicly dead.
Devlog #9 Added the zombies to the game. The zombies werent so difficult to code. The only problems I had were some interactions with the player or cube. One of the things that took me the most time was making the zombies follow the player when they were on the top, it turned out that one of my lines of code to keep the zombies in their column when climbing, was the problem.
Devlog #10 I added the zombies actual movement to the game, each times the player makes an action the zombies take a few steps. I also added the death screen and the “Play Again” button alredy works. While adding this, I changed a name of a git commit and it merged with the one i was currently working on - I tried to undo what I had done, but I coudnt fix it, I even through I was going to have to code the last parts of the game again, but I was able to fix it using the integrate Copilot AI integrated in VS code.
Devlog #11 Finished adding the menus to the game!!
Devlog #12: Final devlog Added a in-game tutorial and music and sounds. I finally finished making the game!! For the last modifications I added the tutorial of the game with the instructions and example videos to show how everything works. I also added background music and sound effects, it was difficult finding the ones that fit best my game, but I was able to find some really good ones.
Ships:
This is Cube Matcher, a strategy puzzle game in wich you need to move a 3x3 cube to match a shown pattern, but the problem is that there are zombies climbing the walls that move toward you each time you take an action!! So you need to be careful about how many actions you take before having to knock them. The most challenging part of my project was making the 3D cube and the player interactions. This was becouse I decided to make the 3D system in my game from scratch, so I had to add projections, and deal with the cube coordinates of each point (that were a lot), and for the player interactions the most difficult part was knowing when the player and the cube needed to perform an interaction becouse I needed to add a fake movement (the animation) for the action not to see so quickly, so i needed to sync the animation with the real position. In the end the project turned out like I imagined from the beggining just changing some small concepts for the game to be fun and fair....
|
1793004666.1912394
|
1793091066.1912394
|
|
22375
|
libspacetime by @jpeisach | Stardance
|
jpeisach
|
0
|
59.7
|
0
|
[]
|
[{"post_id": 34364, "ts": "202 [{"post_id": 34364, "ts": "2026-07-25T00:32:21Z", "hours": 8.3572, "text": "again idk if I will be doing sd instead of macondo but anyways, been doing documentation :) I also fixed ammarstime and did bindings to other langs."}, {"post_id": 27142, "ts": "2026-07-12T12:59:18Z", "hours": 9.5753, "text": "Again, in case I switch back from Macondo. More fighting with leap years - I’ll have to use AI for help. In the meantime I created a marsdate program, and did wcsfmarstime (analogous to wcsftime). I also created some initial Rust bindings :)"}, {"post_id": 25052, "ts": "2026-07-09T00:28:55Z", "hours": 18.6614, "text": "Devlog now in case I switch from Macondo to Stardance. In the event that I need to, I will edit this with more details. Basically, I managed to work on strfmarstime, strpmarstime, ammarstime, and I’ve been drilling testcases."}, {"post_id": 20036, "ts": "2026-07-01T15:17:21Z", "hours": 1.8528, "text": "strfmarstime testing - week numbers Nothing crazy to report for the current testsuite and implementation verification I’ve been doing. Basically same thing as I did before I took a break for strpmarstime. For some formats, it will literally print anything (if it’s invalid), which appears to be normal in Glibc, so it’s normal to me. Some locale work too on AM/PM formatting and time formatting - some do “AM”, some do “am”, Spain does “a.m.”. The big thing is: Week Numbers Okay, so there are three different definitions of week numbers: %U: The first day of week 1 is on Sunday. Range 00 (because sometimes in January we don’t get to Sunday for a few days), up until 53 (sometimes we actually get 53 weeks due to day placement.) %V: ISO 8601, which has week 1 as the first week with at least 4 days in the new year. Range 01 to 53. (Week 0 would be represented by 52, in my testing) %W: The first day of week 1 is on Monday. But, here is the key thing about the Darian calendar: Each month resets the week. This is actually one of the things about the Gregorian Calendar some people don’t like-how the # of the day is on inconsistent weekdays. The Darian Calendar has a neat 28 days for each month, so with 7 days a week, this isn’t a problem. And since each week is guaranteed to have four days, we can just take the number of days and divide by 7. For %W, shift by 1, because Monday (Lunae) is not the first day of the week. However.. every 6th month is the end of a season, and it has 27 days. So we need to, in our calculations, which must go based off the nth day of the year, make sure we reset, otherwise we will lose our day alignment (because again, the week resets). So we need to realign every 167 days, and also check how many seasons passed and use that to get the amount of prior weeks we are skipping when we have modulated. As for the leap day: It divides perfectly by 7 and 167, so it gets its own if statement case (otherwise it would read “97”). Experience I knew this would be weird to figure out, and challenging, but I actually had a lot of fun doing it. It kept my brain working, I stayed energetic, and I managed to have fun, which is the most important thing! So after my long Pomodoro break, I’ll verify %W (since %U and %V are thee same), and then %w, %x, %X, %y and %Y and that will be it, since for an initial ship I don’t plan to do timezones."}, {"post_id": 19959, "ts": "2026-07-01T12:47:21Z", "hours": 1.3667, "text": "strpmarstime - basic implementation complete Using musl as a reference, I’ve completed an.. implementation, of strpmarstime. Yesterday I must’ve placed my energy wrong because I just wasn’t super motivated and didn’t do as much coding. Anyway: strpmarstime is the inverse of strfmarstime, taking a date-time formatted string and given its format, entering those values into a mars_tm struct. Everything made sense, mostly. There are still some areas of code I need to comment and reread to make sure I understand what is going on. But after strfmarstime, it isn’t too crazy. As usual, it does the things for string parsing, like str++ to move to the rest of the string’s characters, then it parses by item. In order to find values, I think that the calculations sort of estimate the character location of the number range, and then we import it. Challenges nl_langinfo Once again, I found myself in a situation where musl can lookup strings to match values like day and month names via numerical item addresses with nl_langinfo, but I cannot (as this is not a “standard” item index). Musl is able to use this item address to iterate through the list of potential matches, which is easy to do in common goto routines. For me, I had to basically make a pointer to an array of char* (so I had char**, once I figured it out), that was the “iteration_array”. Depending on the format, it would check the array for the match. The main confusing thing was really just the pointers. Spent about 10 minutes fighting with compiler errors until I figured it out with the help of stackoverflow and Google’s AI. By the way, using nl_langinfo_l, which I did in strfmarstime, does not exist in locale.h by default on macOS, it’s in xlocale.h, so I made a small configure define this morning to take care of that. The vague formats There are several ways of determining what # week of year we are in. One format says it’s the week with at least four days, and starts indexing at like, 1 I think? And then there are a few others? I can’t remember off the top of my head. Because there are no clear answers, I (and musl) have left these formats as “parse only”. This really impacts week number formats, which, I guess makes sense, because if you only have that, who knows what year you are in, and how many days are in the first full “week”, however you define that. Timezones Skipped for now, as I have yet to take care of this, and I think some proposed timekeeping systems actually don’t do the standard one-hour intervals.. I need to look into it. Future Welp, it’s off to testing and verification. Yay!"}, {"post_id": 19165, "ts": "2026-06-30T12:40:21Z", "hours": 1.7647, "text": "strpmarstime I took a break from validating strfmarstime because.. well I needed it. So I started doing the function that does the opposite, takes a string, parses into into a mars_tm structure. I am taking the same approach as musl, and enjoying myself, as in, because musl is able to lookup string matches by locale (because there is a fixed offset for dates), but I can’t, I have to manually search. But instead of copy pasting code I’m trying to setup a pointer to an array to check in a common code routine. And now I’m getting memory issues. Yay!"}, {"post_id": 18437, "ts": "2026-06-29T16:21:21Z", "hours": 1.5994, "text": "strfmarstime testing and verification - date time format locales The %c format specifier checks the system locale for how to format the date and time. Of course, it’s a good idea to test this. It took me a while.. unfortunately I don’t have a way of checking in test configuration if one of the formats is installed on the host system (see https://en.wikipedia.org/wiki/List_of_date_formats_by_country ). I also don’t really have a nice way (as far as I know) to set test environment variables. So what I ended on was in the test setup, just passing the LC_ALL environment variable. But this was broken for some reason? Ah, it turns out that my logic in strfmarstime to get the locale was incorrect. For some reason, setlocale ( LC_ALL , NULL ); does not work, and you have to use “”. My guess is that NULL goes to system default, and “” will read from environment variables. Yay! While Day-Month-Year format is straight forward, the few countries that use Year-Month-Day are driving me insane, like Hungary, because their formats have like, dots in them, and I’m not seeing much consistency across the other country’s formats that also have Year-Month-Day formatting. I’ll come back to it later. It’s actually broken anyway, because my week number representations are still wrong."}, {"post_id": 18310, "ts": "2026-06-29T12:44:15Z", "hours": 1.5208, "text": "strfmarstime - ~80% complete After about 6 hrs total, the strfmarstime function is complete, using musl as a reference, except: %E (era based format) %k (hour as a decimal, but including padding 0s, probably this will be a quick fix %O (modifier symbols?) %P (lowercase version of “am” and “pm” - need to find a good way to run tolower on a const char*) All week numbering formats, because there are different standards on when the week “starts” and “how many weeks we are into the year” (e.g. first 4 days of year, vs. whether week starts on Sunday vs. Monday) %z, %Z (Timezones, not implemented yet) This was quite the grind, having strftime docs open on one screen, musl’s implementation on another, and trying to go through each format while documenting and understanding how the formatting is being processed, one by one. I also did some slight restructuring: the __mars_tm_to_secs function exists. It is basically what mkmarstime did. I would have it not subtract by epoch, but it was causing tests to fail. Technically the strftime docs say that %s, which uses it, calls the function anyways, so it may be pointless but whatever. Oh, speaking of %s: That is seconds since the Unix epoch. Who knows how useful that will be when this calendar implementation starts at MSD 0 (like, 1873). Also, it’s martian seconds instead of Earth seconds. Fun shoutout to “%%”, “%t”, and “%n”, which required nothing, just setting the length of the item to “1” and returning the actual formatting character. Lol. Welp, now it’s time to test and drill this function into oblivion."}, {"post_id": 17044, "ts": "2026-06-27T17:47:07Z", "hours": 3.7639, "text": "strfmarstime progress I think it is warranted, otherwise I will forget later. This is part 1 of many on the journey to the strfmarstime function - which returns a formatted string of a broken down mars time structure. This was my first time ever recreating a string formatting function - especially in C, so I learned some things along the way. Basing off of musl After some attempts, it became pretty clear that, although string formatting functions may seem easy, when you need to support width and padding specifiers, things get complicated. Since I had to learn this, I decided to save time by basically recreating musl’s strftime implementation side by side. I would comment and give details on what is happening so I learned how it worked while also getting the result I need to, without just blatantly copying and pasting without giving credit. This took about an hour since some of the variable names in musl’s implementation are like, ‘l’, ‘f’, and I had to keep it straight. I actually am writing this devlog after I spent 30+ minutes debugging some stack smashing that was happening, as a result of me putting in the wrong variable for string length into memcpy. How it works Basically, strftime/strfmarstime will first collect information needed for each format specifier, like if there is a character requesting padding. Then it will do each item at a time, with the given padding and width. Here’s a fun thing I learned: There is a lot of “format++”. But format is a char*. How does that make sense? Well, format++ actually is basically the same as doing .substring(1, format.length()) in other languages. I guess it makes sense if you think about a list of characters, and you are progressing to the next character. (Like a “cdr” of a “cons” box in functional programming). So that helped. Locales, locales I wanted to come back to this later, especially because I will eventually need translations. But the %c specifier actually refers to the system locale’s date and time format. This required some hacking that came around the time I was stuck with that stack smashing. So seriously, I was stuck . musl has it easy, it can tell by its own thread what the locale is. Here, we need to initialize locales (setlocale), and then make a locale_t object we can use with newlocale. Then we free it at the end. Where I am now Since the locale’s DT formatting is really just a shorthand for other specifiers, it returns “-” in its place. But as I continue forward, it will work."}, {"post_id": 16257, "ts": "2026-06-26T13:02:44Z", "hours": 0.9283, "text": "libspacetime - preparing for localization Nothing really crazy, but I ran gettextize, looked at as much docs as I could (the website is unreachable at the moment), and other project examples to create a basic localization setup. This will allow for localization of day and month names."}, {"post_id": 15962, "ts": "2026-06-25T22:28:30Z", "hours": 2.7319, "text": "Darian Calendar C Library: ammarstime Probably the hurdle that will be the second hardest part of the entire libspacetime library is ammarstime. It is the same as the C stdlib’s “gmtime”, which, from a timestamp, returns a broken down time structure (struct tm) of the date/time info of that timestamp (the human readable info like day, month, year, etc.) This is actually difficult. Seconds just count up, and you have to go backwards. You can try to divide by the amount of seconds in a year, but what about leap years? Honestly, the math is too weird, even for me. Some parts make sense, but the rest, eh… I referred to musl’s “secs_to_tm” function for how it did the calculations. This is what mostly guided my work, with a few pieces of calculation and numbers help from Google AI search results. I didn’t write a test suite for this function, because I think it will be easier to do once I knock down what will be the hardest kinds of functions: *string manipulation *(e.g. strftime) But now that I have a way to convert seconds to a mars_tm struct, it should make everything else somewhat easier. Hopefully."}, {"post_id": 13897, "ts": "2026-06-22T19:40:18Z", "hours": 4.1111, "text": "AI vs Debugging I added some tests for Y2038, before, and after, because, of course, that could be an issue. It turned out that Darian timestamps on non-leap years (even-numbered years) were incorrect. But they were correct in leap years. So… what gives? Manual Looking I thought it could be the result of the calendar epoch being incorrect (it did end up being slightly incorrect) - but I tried using other dates on non-leap years, and couldn’t find a consistent offset that all the dates were off by. This was.. really weird. I also tried setting the year to calculate the year before - no dice. Taking out the AI Eventually, I decided, “screw it”, so I took GPT-5 mini and asked it to try to figure out what was happening. Spoiler alert: It did eventually figure everything out.. but it was.. quite the process to watch it do so. It detected that the sols-passed-at-the-start-of-month table was actually missing the value for the 8th month. Of course, adjusting this caused tests to fail, so I was hesitant to trust it. It also suggested subtracting 1 from the day count when multiplying by 86400 seconds per day. This was bogus. Asking it to make a diff I asked it to make a .patch or a .diff I could apply - and it didn’t work. Missing headers or invalid patch data, whatever it was, it can’t generate a .patch file. Which is kind of hilarious. It also didn’t look back at my codebase when I applied some of it’s suggestions, so it would be making patches that refer to deleted lines that didn’t exist anymore. Could just be a skill issue. Figure it out, man I told it to figure out what was wrong. It spent the next ~16 mins, making a “debug mkmarstime” script, and a bunch of other small scripts like “probe_unix”, “probe_y2038” - in some cases, it was just going around in a circle - making changes that only resulted in the same prior status. I thought it was hallucinating at first, especially with the compiler errors it got. Eventually I’ll look back at the thread and it’s thinking, because like, in some ways, it was stupid, but in some ways it was smart. I don’t know if the method to debug everything was the most efficient - but it eventually worked. Probably trying to fix the epoch, and also fix the leap years, and also fix the month - all at the same time - overwhelmed it, and my guess is there was no confidence in itself. I’m talking too much about the AI here for code I didn’t do in a dev log. But anyway, it brute forced tested leap year handling, (it also mentioned “leap seconds” which I’m not dealing with.. so I’m not sure what the heck it’s doing), but eventually all the testcases did past. Some helpful tidbits It also did suggest using llround to fix some precision issues, like sometimes conversions being off by 1 second. This is actually not a terrible idea, and I may make a build-time config option for this. Since it was successful, I also asked it to import all its scripts in a test suite - which it wasn’t going anywhere for, so I decided to stop wasting energy and stop it there. Eventually I may come back to it. Overall thoughts So it spent at 187K tokens - and even though it did seem to go nowhere, it eventually kind of.. worked? And mkmarstime behaves properly now. I was worried the AI would just try to focus on “solution that solves testcases” instead of “solution that does actual behavior”, but the resulting diff is justified (I even had it check that the output produced was the same in its loop vs closed form intercalation). Vibe coding, no. But vibe debugging? Well, maybe there is something to be said about it.."}, {"post_id": 13192, "ts": "2026-06-21T16:27:46Z", "hours": 1.755, "text": "libspacetime - mkmarstime function Wow, what a sprint! Part of the C date and time functions is mktime. It takes a struct tm object (which is a “broken down” time structure), and converts it into the time_t format (seconds since 1970). For libspacetime and the Darian Calendar, we need mkmarstime to track time on Mars. In some ways, this ended up not being harder than I thought it was, and in some ways it did. Leap Years In the Gregorian Calendar, we have leap years every 4 years - except when the year is divisible by 100, unless divisible by 400. Yeah, it’s confusing. The Darian Calendar, in it’s wording from the website and also Wikipedia confused me. I thought Intercalation was the length of a year, but no, it’s actually just getting the # of leap years that have passed at a given year number. Darian Calendar rules are actually, every odd numbered year is a yeap lear, except for decades (10, 20, 30). Exception to that is if the year is divisible by 100, and again for divisible by 1000. In the commented code, you can see how I put down my train of thought, but ended up coming to what the actual source was anyway. Basically, you find the number of leap years, multiply by 669 days, then non-leap years, multiply by 668. Fun fact: Glibc in its tm structures, according to POSIX specs, starts the year at 0. I believe it is because it could make those numbers fit in a smaller data structure. For us, the Darian year is 221. I guess I could maybe try to shave it down? But these are things I’ll have to decide before any release. Months Every month has 28 days, except for the last month in each “quarter”, which has 27. You could calculate this, but Glibc, for the Gregorian Calendar actually has a static table that lists the amount of days since each month starts. This way it doesn’t have to do the multiplication every time. I was doing it manually, and I was going to write out the expressions - 28 1, 28 2, etc. but it got complicated when also having to add like, 28 7 + (27 1) and I didn’t know which I was on track for. By using the example website, I got the numbers by manual conversion. Leap Days The table makes sense in Glibc for another reason: The leap day in the Gregorian Calendar is so early in the year, it shifts every day forward by one. In the Darian Calendar, the leap day is actually at the end of the last month of the year. So we don’t need to store duplicate entries, or actually really worry about it for this function. (Not sure whether it is my job to handle invalid values). But basically if the current year is a leap year, we can still work as normal, and then just add on the day as requested. Nice! The rest Days, hours, minutes, seconds are all as normal. The epoch The Darian Calendar epoch actually begins in 1609. But.. the Mars Sol Date, which is unofficial but even used in NASA’s Mars24 program, has its “0” date at Dec 29 1873. So we need to subtract to make up for the difference. If you use dates before MSD 0, you get negative mars_time_t values. I couldn’t figure out what the epoch meant, until I realized it was just MSD 0. I also found that marsclock.com’s “midday” is actually off by about 177 seconds. But I calculated MSD 0 to be what you see in the code (I need to save characters so I can submit this), and off I went. Testcases Yeah, this needs tests. Even more than what I put in for this devlog (MSD 0 and Unix Epoch 0). Unfortunately in Mars -> Earth time, I am losing about an Earth second in conversion. I’ll try to debug this now. But it causes some tests, like the epoch to be incorrect - it returns a mars_time_t of what would be unix epoch -1. Overall thoughts The genius of how Glibc handles the months was probably the coolest part. Most challenging, the leap year intercalation for sure. Now, onto more test suites, and more functions."}, {"post_id": 12526, "ts": "2026-06-20T13:29:31Z", "hours": 0.3856, "text": "Earth Timekeeping to Mars Timekeeping Conversions Because I’m going out to see family today - might as well get something done. I was going to add “mktime” but I realized that I’ve done Mars to Earth but not vice versa. Besides, I need an “epoch” to start time from. Technically, I already had done this with mars_time(), I just needed to do it with any timestamp. I did “0” (January 1, 1970, midnight) locally to verify, then chose the Mariner 9 enter orbit as a testcase. I will note, Wikipedia shows MSD (Mars Sol Date) but also Mars Julian Sol. I wonder if I’ll have to do that later. I also will probably need to organize my tests/Makefile.am for further testcases. It will grow once I start adding time tests and not just MSD."}, {"post_id": 12506, "ts": "2026-06-20T13:02:00Z", "hours": 1.3219, "text": "libspacetime - creating a testsuite But first, pre-stardance talk I’ve known the Darian Calendar existed, and my goal is to spend my time over the summer to try to make it as close to system level support as possible. This includes trying to get it at kernel-level - which is another project. Anyways, libspacetime is basically time.h but for other planets. I want it to be portable and work on as many systems as possible. For this reason I setup a GNU Autotools project (autoconf, automake, that fun stuff). Now, the Darian calendar is not standard, but C date and time functions are. Also, timekeeping is actually complicated. So I’m kind of.. mimicking the standards, and I may not get there in terms of implementation for a while, but I try my best. Using some sites: Wikipedia “timekeeping on mars” article https://ops-alaska.com/time/gangale_converter/calendar_clock.htm https://marsclock.com/ And after fighting with type versions, I eventually got a current unix time, represented in Martian seconds, in a way that you can get to the current Mars Sol Date (MSD). Uh.. I’m not a mathematician. How does the timekeeping and conversions work, I honestly don’t know off hand. This will prove to continue being a challenge… especially because like, “ok, so what is our “epoch” for mars? Still Jan 1 1970 on Earth? But the existing proposed calendar conversions use this date instead?” - lots of fun in the future. Okay, basically pre stardance was just mars_time and the initial project. Creating the testsuite For test runners, there are options - TAP, DejaGNU, etc. But this isn’t Meson where you can setup test targets. Autotest is kind of weird (that seems to be the general consensus). If you are testing executable programs, it’s great, because you can get a fixed output. But at the base level, it’s really just a bunch of shell scripts. So in test “setup”, I want to compile my “tests”. But a user building the library may not have libspacetime headers or library installed, so we need to not only build a C target (which in itself is weird, the GNU Autotools docs for test suites doesn’t suggest this as far as I know), but we need to link against the library built in the src folder of the project and also include its headers. Kinda janky. The lack of useful documentation examples is what I spent a lot of time on. There is also the thing with atlocal, which I think is like.. empty? But docs suggest it should be generated? package.m4 files exist now, which I did a great job filling out now that I look back at it -_- when it comes to actual test checks (testsuite.at), apparently it compares output, not status code.. so I have to like, verbatim tell “I expect this output”. So there goes printing out the status of the current times I am testing. Also it is so specific, like I can’t use a newline character in the printf in the test executable. The print is useful because a round conversion from Earth -> Martian -> Earth results in a one earth second loss. I don’t know if it’s because of floating point precision or because of the time it takes to execute the conversion from the processor. Ideally, the application can ask the kernel for the time and it uses its own clocks - which can use a counter chip, and using the amount of increases per a set of time, can figure out how long a “cycle” is and keep time that way. That was sort of the goal of my kernel “spacetime” support, but I wanted it to show up in lsclocks, and after all clocksource is like, a hardware abstraction, not an actual clock. Idealy a clocksource could just have a lower multiplier, but the kernel still uses the best clocksource which certainly won’t be the martian one. Anyways, use janky tools (Autotest framework), get janky results. Cheers to more date and time functions and tests."}]...
|
Title: libspacetime by @jpeisach | Stardance
Devl Title: libspacetime by @jpeisach | Stardance
Devlogs:
libspacetime - creating a testsuite But first, pre-stardance talk I’ve known the Darian Calendar existed, and my goal is to spend my time over the summer to try to make it as close to system level support as possible. This includes trying to get it at kernel-level - which is another project. Anyways, libspacetime is basically time.h but for other planets. I want it to be portable and work on as many systems as possible. For this reason I setup a GNU Autotools project (autoconf, automake, that fun stuff). Now, the Darian calendar is not standard, but C date and time functions are. Also, timekeeping is actually complicated. So I’m kind of.. mimicking the standards, and I may not get there in terms of implementation for a while, but I try my best. Using some sites: Wikipedia “timekeeping on mars” article https://ops-alaska.com/time/gangale_converter/calendar_clock.htm https://marsclock.com/ And after fighting with type versions, I eventually got a current unix time, represented in Martian seconds, in a way that you can get to the current Mars Sol Date (MSD). Uh.. I’m not a mathematician. How does the timekeeping and conversions work, I honestly don’t know off hand. This will prove to continue being a challenge… especially because like, “ok, so what is our “epoch” for mars? Still Jan 1 1970 on Earth? But the existing proposed calendar conversions use this date instead?” - lots of fun in the future. Okay, basically pre stardance was just mars_time and the initial project. Creating the testsuite For test runners, there are options - TAP, DejaGNU, etc. But this isn’t Meson where you can setup test targets. Autotest is kind of weird (that seems to be the general consensus). If you are testing executable programs, it’s great, because you can get a fixed output. But at the base level, it’s really just a bunch of shell scripts. So in test “setup”, I want to compile my “tests”. But a user building the library may not have libspacetime headers or library installed, so we need to not only build a C target (which in itself is weird, the GNU Autotools docs for test suites doesn’t suggest this as far as I know), but we need to link against the library built in the src folder of the project and also include its headers. Kinda janky. The lack of useful documentation examples is what I spent a lot of time on. There is also the thing with atlocal, which I think is like.. empty? But docs suggest it should be generated? package.m4 files exist now, which I did a great job filling out now that I look back at it -_- when it comes to actual test checks (testsuite.at), apparently it compares output, not status code.. so I have to like, verbatim tell “I expect this output”. So there goes printing out the status of the current times I am testing. Also it is so specific, like I can’t use a newline character in the printf in the test executable. The print is useful because a round conversion from Earth -> Martian -> Earth results in a one earth second loss. I don’t know if it’s because of floating point precision or because of the time it takes to execute the conversion from the processor. Ideally, the application can ask the kernel for the time and it uses its own clocks - which can use a counter chip, and using the amount of increases per a set of time, can figure out how long a “cycle” is and keep time that way. That was sort of the goal of my kernel “spacetime” support, but I wanted it to show up in lsclocks, and after all clocksource is like, a hardware abstraction, not an actual clock. Idealy a clocksource could just have a lower multiplier, but the kernel still uses the best clocksource which certainly won’t be the martian one. Anyways, use janky tools (Autotest framework), get janky results. Cheers to more date and time functions and tests.
Earth Timekeeping to Mars Timekeeping Conversions Because I’m going out to see family today - might as well get something done. I was going to add “mktime” but I realized that I’ve done Mars to Earth but not vice versa. Besides, I need an “epoch” to start time from. Technically, I already had done this with mars_time(), I just needed to do it with any timestamp. I did “0” (January 1, 1970, midnight) locally to verify, then chose the Mariner 9 enter orbit as a testcase. I will note, Wikipedia shows MSD (Mars Sol Date) but also Mars Julian Sol. I wonder if I’ll have to do that later. I also will probably need to organize my tests/Makefile.am for further testcases. It will grow once I start adding time tests and not just MSD.
libspacetime - mkmarstime function Wow, what a sprint! Part of the C date and time functions is mktime. It takes a struct tm object (which is a “broken down” time structure), and converts it into the time_t format (seconds since 1970). For libspacetime and the Darian Calendar, we need mkmarstime to track time on Mars. In some ways, this ended up not being harder than I thought it was, and in some ways it did. Leap Years In the Gregorian Calendar, we have leap years every 4 years - except when the year is divisible by 100, unless divisible by 400. Yeah, it’s confusing. The Darian Calendar, in it’s wording from the website and also Wikipedia confused me. I thought Intercalation was the length of a year, but no, it’s actually just getting the # of leap years that have passed at a given year number. Darian Calendar rules are actually, every odd numbered year is a yeap lear, except for decades (10, 20, 30). Exception to that is if the year is divisible by 100, and again for divisible by 1000. In the commented code, you can see how I put down my train of thought, but ended up coming to what the actual source was anyway. Basically, you find the number of leap years, multiply by 669 days, then non-leap years, multiply by 668. Fun fact: Glibc in its tm structures, according to POSIX specs, starts the year at 0. I believe it is because it could make those numbers fit in a smaller data structure. For us, the Darian year is 221. I guess I could maybe try to shave it down? But these are things I’ll have to decide before any release. Months Every month has 28 days, except for the last month in each “quarter”, which has 27. You could calculate this, but Glibc, for the Gregorian Calendar actually has a static table that lists the amount of days since each month starts. This way it doesn’t have to do the multiplication every time. I was doing it manually, and I was going to write out the expressions - 28 1, 28 2, etc. but it got complicated when also having to add like, 28 7 + (27 1) and I didn’t know which I was on track for. By using the example website, I got the numbers by manual conversion. Leap Days The table makes sense in Glibc for another reason: The leap day in the Gregorian Calendar is so early in the year, it shifts every day forward by one. In the Darian Calendar, the leap day is actually at the end of the last month of the year. So we don’t need to store duplicate entries, or actually really worry about it for this function. (Not sure whether it is my job to handle invalid values). But basically if the current year is a leap year, we can still work as normal, and then just add on the day as requested. Nice! The rest Days, hours, minutes, seconds are all as normal. The epoch The Darian Calendar epoch actually begins in 1609. But.. the Mars Sol Date, which is unofficial but even used in NASA’s Mars24 program, has its “0” date at Dec 29 1873. So we need to subtract to make up for the difference. If you use dates before MSD 0, you get negative mars_time_t values. I couldn’t figure out what the epoch meant, until I realized it was just MSD 0. I also found that marsclock.com’s “midday” is actually off by about 177 seconds. But I calculated MSD 0 to be what you see in the code (I need to save characters so I can submit this), and off I went. Testcases Yeah, this needs tests. Even more than what I put in for this devlog (MSD 0 and Unix Epoch 0). Unfortunately in Mars -> Earth time, I am losing about an Earth second in conversion. I’ll try to debug this now. But it causes some tests, like the epoch to be incorrect - it returns a mars_time_t of what would be unix epoch -1. Overall thoughts The genius of how Glibc handles the months was probably the coolest part. Most challenging, the leap year intercalation for sure. Now, onto more test suites, and more functions.
AI vs Debugging I added some tests for Y2038, before, and after, because, of course, that could be an issue. It turned out that Darian timestamps on non-leap years (even-numbered years) were incorrect. But they were correct in leap years. So… what gives? Manual Looking I thought it could be the result of the calendar epoch being incorrect (it did end up being slightly incorrect) - but I tried using other dates on non-leap years, and couldn’t find a consistent offset that all the dates were off by. This was.. really weird. I also tried setting the year to calculate the year before - no dice. Taking out the AI Eventually, I decided, “screw it”, so I took GPT-5 mini and asked it to try to figure out what was happening. Spoiler alert: It did eventually figure everything out.. but it was.. quite the process to watch it do so. It detected that the sols-passed-at-the-start-of-month table was actually missing the value for the 8th month. Of course, adjusting this caused tests to fail, so I was hesitant to trust it. It also suggested subtracting 1 from the day count when multiplying by 86400 seconds per day. This was bogus. Asking it to make a diff I asked it to make a .patch or a .diff I could apply - and it didn’t work. Missing headers or invalid patch data, whatever it was, it can’t generate a .patch file. Which is kind of hilarious. It also didn’t look back at my codebase when I applied some of it’s suggestions, so it would be making patches that refer to deleted lines that didn’t exist anymore. Could just be a skill issue. Figure it out, man I told it to figure out what was wrong. It spent the next ~16 mins, making a “debug mkmarstime” script, and a bunch of other small scripts like “probe_unix”, “probe_y2038” - in some cases, it was just going around in a circle - making changes that only resulted in the same prior status. I thought it was hallucinating at first, especially with the compiler errors it got. Eventually I’ll look back at the thread and it’s thinking, because like, in some ways, it was stupid, but in some ways it was smart. I don’t know if the method to debug everything was the most efficient - but it eventually worked. Probably trying to fix the epoch, and also fix the leap years, and also fix the month - all at the same time - overwhelmed it, and my guess is there was no confidence in itself. I’m talking too much about the AI here for code I didn’t do in a dev log. But anyway, it brute forced tested leap year handling, (it also mentioned “leap seconds” which I’m not dealing with.. so I’m not sure what the heck it’s doing), but eventually all the testcases did past. Some helpful tidbits It also did suggest using llround to fix some precision issues, like sometimes conversions being off by 1 second. This is actually not a terrible idea, and I may make a build-time config option for this. Since it was successful, I also asked it to import all its scripts in a test suite - which it wasn’t going anywhere for, so I decided to stop wasting energy and stop it there. Eventually I may come back to it. Overall thoughts So it spent at 187K tokens - and even though it did seem to go nowhere, it eventually kind of.. worked? And mkmarstime behaves properly now. I was worried the AI would just try to focus on “solution that solves testcases” instead of “solution that does actual behavior”, but the resulting diff is justified (I even had it check that the output produced was the same in its loop vs closed form intercalation). Vibe coding, no. But vibe debugging? Well, maybe there is something to be said about it..
Darian Calendar C Library: ammarstime Probably the hurdle that will be the second hardest part of the entire libspacetime library is ammarstime. It is the same as the C stdlib’s “gmtime”, which, from a timestamp, returns a broken down time structure (struct tm) of the date/time info of that timestamp (the human readable info like day, month, year, etc.) This is actually difficult. Seconds just count up, and you have to go backwards. You can try to divide by the amount of seconds in a year, but what about leap years? Honestly, the math is too weird, even for me. Some parts make sense, but the rest, eh… I referred to musl’s “secs_to_tm” function for how it did the calculations. This is what mostly guided my work, with a few pieces of calculation and numbers help from Google AI search results. I didn’t write a test suite for this function, because I think it will be easier to do once I knock down what will be the hardest kinds of functions: *string manipulation *(e.g. strftime) But now that I have a way to convert seconds to a mars_tm struct, it should make everything else somewhat easier. Hopefully.
libspacetime - preparing for localization Nothing really crazy, but I ran gettextize, looked at as much docs as I could (the website is unreachable at the moment), and other project examples to create a basic localization setup. This will allow for localization of day and month names.
strfmarstime progress I think it is warranted, otherwise I will forget later. This is part 1 of many on the journey to the strfmarstime function - which returns a formatted string of a broken down mars time structure. This was my first time ever recreating a string formatting function - especially in C, so I learned some things along the way. Basing off of musl After some attempts, it became pretty clear that, although string formatting functions may seem easy, when you need to support width and padding specifiers, things get complicated. Since I had to learn this, I decided to save time by basically recreating musl’s strftime implementation side by side. I would comment and give details on what is happening so I learned how it worked while also getting the result I need to, without just blatantly copying and pasting without giving credit. This took about an hour since some of the variable names in musl’s implementation are like, ‘l’, ‘f’, and I had to keep it straight. I actually am writing this devlog after I spent 30+ minutes debugging some stack smashing that was happening, as a result of me putting in the wrong variable for string length into memcpy. How it works Basically, strftime/strfmarstime will first collect information needed for each format specifier, like if there is a character requesting padding. Then it will do each item at a time, with the given padding and width. Here’s a fun thing I learned: There is a lot of “format++”. But format is a char*. How does that make sense? Well, format++ actually is basically the same as doing .substring(1, format.length()) in other languages. I guess it makes sense if you think about a list of characters, and you are progressing to the next character. (Like a “cdr” of a “cons” box in functional programming). So that helped. Locales, locales I wanted to come back to this later, especially because I will eventually need translations. But the %c specifier actually refers to the system locale’s date and time format. This required some hacking that came around the time I was stuck with that stack smashing. So seriously, I was stuck . musl has it easy, it can tell by its own thread what the locale is. Here, we need to initialize locales (setlocale), and then make a locale_t object we can use with newlocale. Then we free it at the end. Where I am now Since the locale’s DT formatting is really just a shorthand for other specifiers, it returns “-” in its place. But as I continue forward, it will work.
strfmarstime - ~80% complete After about 6 hrs total, the strfmarstime function is complete, using musl as a reference, except: %E (era based format) %k (hour as a decimal, but including padding 0s, probably this will be a quick fix %O (modifier symbols?) %P (lowercase version of “am” and “pm” - need to find a good way to run tolower on a const char*) All week numbering formats, because there are different standards on when the week “starts” and “how many weeks we are into the year” (e.g. first 4 days of year, vs. whether week starts on Sunday vs. Monday) %z, %Z (Timezones, not implemented yet) This was quite the grind, having strftime docs open on one screen, musl’s implementation on another, and trying to go through each format while documenting and understanding how the formatting is being processed, one by one. I also did some slight restructuring: the __mars_tm_to_secs function exists. It is basically what mkmarstime did. I would have it not subtract by epoch, but it was causing tests to fail. Technically the strftime docs say that %s, which uses it, calls the function anyways, so it may be pointless but whatever. Oh, speaking of %s: That is seconds since the Unix epoch. Who knows how useful that will be when this calendar implementation starts at MSD 0 (like, 1873). Also, it’s martian seconds instead of Earth seconds. Fun shoutout to “%%”, “%t”, and “%n”, which required nothing, just setting the length of the item to “1” and returning the actual formatting character. Lol. Welp, now it’s time to test and drill this function into oblivion.
strfmarstime testing and verification - date time format locales The %c format specifier checks the system locale for how to format the date and time. Of course, it’s a good idea to test this. It took me a while.. unfortunately I don’t have a way of checking in test configuration if one of the formats is installed on the host system (see https://en.wikipedia.org/wiki/List_of_date_formats_by_country ). I also don’t really have a nice way (as far as I know) to set test environment variables. So what I ended on was in the test setup, just passing the LC_ALL environment variable. But this was broken for some reason? Ah, it turns out that my logic in strfmarstime to get the locale was incorrect. For some reason, setlocale ( LC_ALL , NULL ); does not work, and you have to use “”. My guess is that NULL goes to system default, and “” will read from environment variables. Yay! While Day-Month-Year format is straight forward, the few countries that use Year-Month-Day are driving me insane, like Hungary, because their formats have like, dots in them, and I’m not seeing much consistency across the other country’s formats that also have Year-Month-Day formatting. I’ll come back to it later. It’s actually broken anyway, because my week number representations are still wrong.
strpmarstime I took a break from validating strfmarstime because.. well I needed it. So I started doing the function that does the opposite, takes a string, parses into into a mars_tm structure. I am taking the same approach as musl, and enjoying myself, as in, because musl is able to lookup string matches by locale (because there is a fixed offset for dates), but I can’t, I have to manually search. But instead of copy pasting code I’m trying to setup a pointer to an array to check in a common code routine. And now I’m getting memory issues. Yay!
strpmarstime - basic implementation complete Using musl as a reference, I’ve completed an.. implementation, of strpmarstime. Yesterday I must’ve placed my energy wrong because I just wasn’t super motivated and didn’t do as much coding. Anyway: strpmarstime is the inverse of strfmarstime, taking a date-time formatted string and given its format, entering those values into a mars_tm struct. Everything made sense, mostly. There are still some areas of code I need to comment and reread to make sure I understand what is going on. But after strfmarstime, it isn’t too crazy. As usual, it does the things for string parsing, like str++ to move to the rest of the string’s characters, then it parses by item. In order to find values, I think that the calculations sort of estimate the character location of the number range, and then we import it. Challenges nl_langinfo Once again, I found myself in a situation where musl can lookup strings to match values like day and month names via numerical item addresses with nl_langinfo, but I cannot (as this is not a “standard” item index). Musl is able to use this item address to iterate through the list of potential matches, which is easy to do in common goto routines. For me, I had to basically make a pointer to an array of char* (so I had char**, once I figured it out), that was the “iteration_array”. Depending on the format, it would check the array for the match. The main confusing thing was really just the pointers. Spent about 10 minutes fighting with compiler errors until I figured it out with the help of stackoverflow and Google’s AI. By the way, using nl_langinfo_l, which I did in strfmarstime, does not exist in locale.h by default on macOS, it’s in xlocale.h, so I made a small configure define this morning to take care of that. The vague formats There are several ways of determining what # week of year we are in. One format says it’s the week with at least four days, and starts indexing at like, 1 I think? And then there are a few others? I can’t remember off the top of my head. Because there are no clear answers, I (and musl) have left these formats as “parse only”. This really impacts week number formats, which, I guess makes sense, because if you only have that, who knows what year you are in, and how many days are in the first full “week”, however you define that. Timezones Skipped for now, as I have yet to take care of this, and I think some proposed timekeeping systems actually don’t do the standard one-hour intervals.. I need to look into it. Future Welp, it’s off to testing and verification. Yay!
strfmarstime testing - week numbers Nothing crazy to report for the current testsuite and implementation verification I’ve been doing. Basically same thing as I did before I took a break for strpmarstime. For some formats, it will literally print anything (if it’s invalid), which appears to be normal in Glibc, so it’s normal to me. Some locale work too on AM/PM formatting and time formatting - some do “AM”, some do “am”, Spain does “a.m.”. The big thing is: Week Numbers Okay, so there are three different definitions of week numbers: %U: The first day of week 1 is on Sunday. Range 00 (because sometimes in January we don’t get to Sunday for a few days), up until 53 (sometimes we actually get 53 weeks due to day placement.) %V: ISO 8601, which has week 1 as the first week with at least 4 days in the new year. Range 01 to 53. (Week 0 would be represented by 52, in my testing) %W: The first day of week 1 is on Monday. But, here is the key thing about the Darian calendar: Each month resets the week. This is actually one of the things about the Gregorian Calendar some people don’t like-how the # of the day is on inconsistent weekdays. The Darian Calendar has a neat 28 days for each month, so with 7 days a week, this isn’t a problem. And since each week is guaranteed to have four days, we can just take the number of days and divide by 7. For %W, shift by 1, because Monday (Lunae) is not the first day of the week. However.. every 6th month is the end of a season, and it has 27 days. So we need to, in our calculations, which must go based off the nth day of the year, make sure we reset, otherwise we will lose our day alignment (because again, the week resets). So we need to realign every 167 days, and also check how many seasons passed and use that to get the amount of prior weeks we are skipping when we have modulated. As for the leap day: It divides perfectly by 7 and 167, so it gets its own if statement case (otherwise it would read “97”). Experience I knew this would be weird to figure out, and challenging, but I actually had a lot of fun doing it. It kept my brain working, I stayed energetic, and I managed to have fun, which is the most important thing! So after my long Pomodoro break, I’ll verify %W (since %U and %V are thee same), and then %w, %x, %X, %y and %Y and that will be it, since for an initial ship I don’t plan to do timezones.
Devlog now in case I switch from Macondo to Stardance. In the event that I need to, I will edit this with more details. Basically, I managed to work on strfmarstime, strpmarstime, ammarstime, and I’ve been drilling testcases.
Again, in case I switch back from Macondo. More fighting with leap years - I’ll have to use AI for help. In the meantime I created a marsdate program, and did wcsfmarstime (analogous to wcsftime). I also created some initial Rust bindings :)
again idk if I will be doing sd instead of macondo but anyways, been doing documentation :) I also fixed ammarstime and did bindings to other langs....
|
1792615870.6269038
|
1793220670.6269038
|
|
55042
|
Monochromium by @eli | Stardance
|
eli
|
1
|
59.56
|
414
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T13:51:31Z", "hours": 23.0, "multiplier": 17.92, "payout": 414, "blessing": "neutral", "text": "Hi everyone! Today I am shipping Monochromium (v0.1.1) a flexible CLI note taking app for the terminal! Written in Rust its a fast app with a binary smaller than 2mb! We have a full spec for future versions and plan to keep writing more code soon! My favorite part of developing this app was probably learning the clap syntax, its quite easy and intuitive now! Thanks for reading :)", "repo": "https://github.com/Papaya-Voldemort/Monochromium", "demo": "https://crates.io/crates/monochromium"}]...
|
[{"post_id": 82775, "ts": "202 [{"post_id": 82775, "ts": "2026-10-25T20:06:00Z", "hours": 2.8222, "text": "Monochromium v0.6.0 — We’re so back (with graphs!) Sorry it’s been so long since my last devlog! I have been stuck writing emails for Haven for such a long time lol! But I finally got 0.6.0 out to you guys! Yeah I know it’s super cool! Here is what got added (yeah, added ! It’s been a bit since I was not just writing polish): Sugar commands for checkin , todo , and ideas — allows you to quickly add notes with different types Value row on the db — allows you to add a value associated with the notes (as a suggestion: hype for ideas, mood for checkins, and priority for todos) And the big one… an overhauled stats command with mood graphs ! Yeah, you saw the value row and thought it was LAME right! Well, I added it so I could add these fancy graphs! Ok, quick story time: my mental health sucks (I assume it’s a common thing among programmers), so I have been adding a little score: +4 or smth to the end of my checkins from monochromium. I honestly have loved this, and it helped me get through the day just a little better… So I added that feature directly into the CLI… yeah, you don’t HAVE to use it… but I highly recommend it, even if it’s just for the pretty graphs (in the media below :) Anyways guys, have a great day <3"}, {"post_id": 81914, "ts": "2026-10-23T00:44:26Z", "hours": 2.1578, "text": "I started working through the feedback that I got from the different star interviews on my last ship because I want to make sure that the next one’s really polished for you guys! I wanted to try to be professional with this, so I made five GitHub issues, and I’ve been trying to use the CLI for most of the stuff! Here are the two I finished so far: Switch stats command to use SQL count for performance and simplicity Added Mac OS Intel release as well as a Universal binary Unrelated to the start interviews, I added some checks before you can commit your code to prevent CI fails Anyway, guys, sorry for the long time between this and the last vlog. Hopefully you guys are having a great day. Thanks for checking in. Bye :)"}, {"post_id": 81026, "ts": "2026-10-19T16:32:41Z", "hours": 3.8953, "text": "Honestly not much to share with you guys, just lots and lots of bug fixes across the board. Some of the major ones identified and fixed were: Commands breaking when parsing locked commands Code being super ugly :( Security Fixes And several I forgot… Any ways I am currently working on more security fixes so we can release 0.5.1 full release, I want to ensure that there are NO security issues for a update based entirely on making it secure… Some other planned stuff: Quick config change commands Better quick note title genration Full documentation on how to use Tutorial command? On Install helper prompt Anything else you guys want Ok bye! Changelog Fix fmt and clippy ( e839d6b ) pre security patch ( 90f155f ) QoL and code quality fixes ( a2be63e ) Bug fixes ( 9bbf71f ) Some more small polish ( 183aa5a ) 0.5.1-alpha.0: Attempt one at fixing enough bugs for a release ( 0a825ab ) PS: Make a github issue or submit a comment on any of the devlogs and I will most likely implement it within the day :)"}, {"post_id": 79342, "ts": "2026-10-13T15:47:40Z", "hours": 5.7886, "text": "I should probably be posting these devlogs significantly more… Almost 6 hours for a devlog is quite a bit… But here I am. Here’s what’s changed. Here’s what’s finished: 0.5.0 full release Official Markdown file support Quality-of-life improvements Comprehensive test suite for more things Here’s what’s in progress: The cryptography branch Basic file locking and unlocking More tests Binary optimization 0.5.1 beta release soon Here’s what’s yet to be started: Additional updates More commands Quality of life for locking and unlocking Better branding and more Anyway my first ship finally finished so I should be submitting the next one any day now, probably once 0.5.1 or 0.5.2 is completed! Thanks for reading bye! PS: Still no idea what to put for screenshots for a CLI like this so enjoy more terminal screenshots…"}, {"post_id": 77873, "ts": "2026-10-08T16:53:43Z", "hours": 5.5978, "text": "Hey guys! Sorry for the crazy long wait! I have been insanely busy lately with stuff but this project is finally mostly ready for the next release! 0.5.0-alpha.0 is done! The biggest new feature being file contents are controlled by md files not just db contents! Here is more depth: Schema changes: contents string -> file_link -> String Command Changes: Edit now uses default configured editor and also has commands to change db values (other than id!) QoL: Lots of tiny fixes for quality of life to ensure things work well More command flags: Many more flags have had added support Why still in alpha? So this update is HUGE and has tons of small bugs on migrations, editing, searching, listing files, and more… so I just want to make a few more changes before a full release! Thanks for staying with me its almost over! Bye!"}, {"post_id": 75994, "ts": "2026-10-01T22:54:09Z", "hours": 3.5514, "text": "I have been working on a big migration :) its not quite done ofc but I will get their eventually. So sorry for this tiny devlog but I am working on somthing big for you guys!"}, {"post_id": 74188, "ts": "2026-09-26T21:40:23Z", "hours": 2.2856, "text": "Hi guys! Today I worked on a new stats command! Pretty basic I know… But I was lazy ok… Also I did a few other small things: Updated CI a bit Wrote some more tests Bumped version to v0.4.3 Some other stuff Oh one bigger thing I did was fix a bug with new lines and the shell prompt bugging into stuff that did not do a new line at the end… pretty simple fix but it makes reminders and stats look much better! Sorry for the stale devlog! bye"}, {"post_id": 73152, "ts": "2026-09-24T14:25:32Z", "hours": 3.3036, "text": "No way! Stardance was extended for one more month! And it has a story! This is insane! Sorry for not keeping up with the daily scheduled… don’t worry I am back on track (for a unnumbered amount of time)… but I am totally getting some hours in so the spaceship can be rebuilt… (Do I really want that? I man the destruction particle effects are really nice…) Hopfully my past ship that is still not reviewed counts for the time for this event! Ok changes time: Added tests Unified CLI commands Added Github Actions Added Binarys for all OSes and a bunch of other stuff I forgot about :) Hopfully this media/screenshots are decent looking because I was lazy and did not put much work into them ;D thanks for tolerating me :) bye!"}, {"post_id": 72018, "ts": "2026-09-22T00:43:19Z", "hours": 3.6858, "text": "Ok my goal is to write 3 devlogs today so I can make up for some missed ones last week… Plus I have the day off. So here is the first one: This morning I worked on writing some tests for db and for utility functions just getting it prepped for the 0.3.0 release. Next I am going to work on the 0.4.0 release which will mostly be a polish run honestly :)"}, {"post_id": 71445, "ts": "2026-09-20T20:42:37Z", "hours": 3.4747, "text": "Whoah! Its been a LONG time since I made a devlog here… Honestly I had intended on never making another one…but then I found myself actually using Monochromium, and I had a lot of issues with it, and well I have a roadmap in my mind so might as well… So I may have done a few hour long rewrite… I basically did a little bit of stuff for the ship getting fixed, then updated the config and reminder timer, then updated the reminder system, then… I SWITCHED THE ENTIRE DB LIBRARY! So that took a very, very, very long time… but resulted in 75% smaller binary (again) we are looking at a very small binary now :) and that is with SQLite still bundled for compatibility! Anyway guys I am so happy to be back (not happy about my missing sticky streak…) and hope to write again soon! PS: Yes the media sucks I just ran out of time today ok… Changelog fix issue with time parsing ( 4ccff8e ) Finish refactor, ran cargo fmt, bump version number to 0.3.0 alpha ( 2825568 ) Switch everything over to rusqlite, switch to sync instead of async, add new database model, cut binary size a lot, fix minor bugs, huge refactor ( f2f318b ) V0.2.0: Moved the types system to seperate folder, fixed reminer and checkins, added toml config, and minor other fixes ( 735d4c4 ) Update reminder to use config time, updated config to support toml ( 281a6a3 ) Fix readme and demo video ( 3466ed2 )"}, {"post_id": 68287, "ts": "2026-09-14T21:08:35Z", "hours": 1.6672, "text": "Ok I am actually so tired. I have to work today and tomorrow and I am also starting third place so this is your final devlog… for now… I will inevitably come back to make more changes, small polishes and upgrades down the line, but it will be a bit. In this last update, I polished things fixed a ton of warnings and made it good enough to hopefully release. Thank you all for following me through this journey. Its tiring to look back on it now but honestly it was still worth it. Goodbye! <3"}, {"post_id": 66917, "ts": "2026-09-12T21:40:13Z", "hours": 1.2172, "text": "Sorry for missing yesterdays devlog… Figured I would save it for today :) Today/Yesterday I worked on fixing major and minor bugs, additionally I made a export command to export all of the db rows quickly. Its so close to a v1 release I just want to make sure its super duper polished before I will release it!"}, {"post_id": 65784, "ts": "2026-09-11T04:59:59Z", "hours": 1.0553, "text": "Apparently you guys like programming memes. So its late again and I don’t want to make another piece of nice looking media! So here are some more memes (I know lazy…) Anyways today I worked on more docs, fixed bugs, published to crates.io and worked on the readme. Not much really… I am working on a few small tweaks and features but nothing major. Love you guys and have a great night :)"}, {"post_id": 65154, "ts": "2026-09-10T03:08:06Z", "hours": 1.145, "text": "Hey! I am back! Today is not even that late! Today I did not do that much but I did run into a Hackatime bug again! I hate when I write human code and it gets logged as AI time :( But time logging aside I worked on the docs today, I finished up comments for each of the commands and started on the readme. Anyway for the media I found a funny rust meme I wanted to share with you, its relevant because tokio is like 0.2mb of my binary size and V2 will def remove it…"}, {"post_id": 64637, "ts": "2026-09-09T05:56:05Z", "hours": 0.9472, "text": "Sorry this is so late (A common theme among my devlogs) But I still have 20 min before tomorrow! Let me have it! Today I mostly wrote docs, added a logo, packaged it, shrunk the binary by 75% from 8mb to 2mb! Anyways its basically done, probably 3 days more of devlogs just because I am a perfectionist. Also super sorry about the media… it kind of sucks I know."}, {"post_id": 63927, "ts": "2026-09-07T23:48:22Z", "hours": 1.0564, "text": "Ok not much done today I had a 4 hour drive so I just watched some Attack on Titan :) But I did get SOME coding done! Today I implemented the reminder function and the inital set up functions. The reminder one is mostly complete but I might add a few different message types. As for the init command its iffy, I just need to change the checks and update a few things but its a pretty minimal feature. Honestly I will be honest its getting pretty close to done! My expected timeline for V1 of this project was 20 hours so its already pretty on target."}, {"post_id": 63198, "ts": "2026-09-06T21:21:33Z", "hours": 0.8339, "text": "OK we are back to daily (I hope ) devlogs. Again really sorry about last time… So I only did about an hour of work today because my Mom hates when I code on sundays… Today I started working on the reminder command, it will run when ever you open your terminal and remind you to check in (yay mental health!) Becuase this is a pretty big task I started by updating the search function to support searching for types, I am going to use this new search to find the last time a user checked in with a note. Sorry I had little time to make better looking screenshots… or a video… but hopfully they look decent. Thanks for reading! Have a wonderful day!"}, {"post_id": 62546, "ts": "2026-09-06T00:08:47Z", "hours": 3.3806, "text": "I am SOOO sorry! I completely missed 2 days in a row… And the worst part is I totally knew the whole time… So here is the story: Basically I usally work from 5 PM to 10:30 PM, but on Thursday, I got out of work at 12:00 and then on Friday (The next day) I got out at 11:30 . So I was way too tired to do much… Now I am out of my house for Labor day weekend and so I can’t make my pretty videos for a few days. So here is what I did: Updated add command with better error handling Made the edit command and fixed it a lot Add MIT LICENSE and blank readme Start shell config for future features Anyways so I did a little bit! Again super sorry for the boring image, its the logo/banner for the project!"}, {"post_id": 60551, "ts": "2026-09-02T23:30:19Z", "hours": 1.5156, "text": "Today was kind of slow :( but that does not mean I am missing a devlog! I did 3 main things, first I added a view command allowing you to see note content, second I updated the delete function logging, and finally I added the search function to let you basic search your notes! Thanks for reading and again, really sorry for bad media upload (just realizing I will probably saw that about every day), and have a great day! PS: My time logging is really odd lately, despite not using AI its logging some of it as AI and I think that lost me 20m today or smth… but idk! PPS: The video was huge so I had chatgpt edit it, let me know how you think it did…"}, {"post_id": 59921, "ts": "2026-09-01T23:04:18Z", "hours": 1.8117, "text": "Hey everyone! I am back for another daily devlog again almost nothing new to show (Sorry) But its getting better! I added a few new things: Updated list command, switch from providing full db every time to just a connection instance, and updated the delete function to be able to remove notes. So a pretty substantial day imo! Enjoy the video, hopefully its fun to watch!"}, {"post_id": 59329, "ts": "2026-09-01T01:53:03Z", "hours": 2.1469, "text": "Almost missed this one! Honestly I sometimes love writing these but after a longer day of debugging its not as much fun… Anyways, today I got some good stuff done, I finally make it kind of usable with working commands* (kind of…) Still not much to show in the media but I tried my best for you guys! Enjoy!"}, {"post_id": 58464, "ts": "2026-08-30T21:43:19Z", "hours": 0.9561, "text": "Ok we are back to the daily devlogs! So lets get into this one: Today I just did a little bit of work, I implemented a utilities folder with small helper functions for tiny things here and there. I updated the add() function and made the checkin() function. Not much else… Honestly I have no idea what to put for the picture yet… Anyways thanks for reading!"}, {"post_id": 57673, "ts": "2026-08-29T21:57:43Z", "hours": 5.3897, "text": "So I was gonna post a lot more dev logs for this project, but I accidentally had the wrong hackatime project set… Anyway, unfortunately there’s still not a whole lot more for me to show as it’s a CL hide but… Here’s a few pretty pictures from my code editor to tie you over!"}]...
|
Title: Monochromium by @eli | Stardance
Devlogs:
Title: Monochromium by @eli | Stardance
Devlogs:
So I was gonna post a lot more dev logs for this project, but I accidentally had the wrong hackatime project set… Anyway, unfortunately there’s still not a whole lot more for me to show as it’s a CL hide but… Here’s a few pretty pictures from my code editor to tie you over!
Ok we are back to the daily devlogs! So lets get into this one: Today I just did a little bit of work, I implemented a utilities folder with small helper functions for tiny things here and there. I updated the add() function and made the checkin() function. Not much else… Honestly I have no idea what to put for the picture yet… Anyways thanks for reading!
Almost missed this one! Honestly I sometimes love writing these but after a longer day of debugging its not as much fun… Anyways, today I got some good stuff done, I finally make it kind of usable with working commands* (kind of…) Still not much to show in the media but I tried my best for you guys! Enjoy!
Hey everyone! I am back for another daily devlog again almost nothing new to show (Sorry) But its getting better! I added a few new things: Updated list command, switch from providing full db every time to just a connection instance, and updated the delete function to be able to remove notes. So a pretty substantial day imo! Enjoy the video, hopefully its fun to watch!
Today was kind of slow :( but that does not mean I am missing a devlog! I did 3 main things, first I added a view command allowing you to see note content, second I updated the delete function logging, and finally I added the search function to let you basic search your notes! Thanks for reading and again, really sorry for bad media upload (just realizing I will probably saw that about every day), and have a great day! PS: My time logging is really odd lately, despite not using AI its logging some of it as AI and I think that lost me 20m today or smth… but idk! PPS: The video was huge so I had chatgpt edit it, let me know how you think it did…
I am SOOO sorry! I completely missed 2 days in a row… And the worst part is I totally knew the whole time… So here is the story: Basically I usally work from 5 PM to 10:30 PM, but on Thursday, I got out of work at 12:00 and then on Friday (The next day) I got out at 11:30 . So I was way too tired to do much… Now I am out of my house for Labor day weekend and so I can’t make my pretty videos for a few days. So here is what I did: Updated add command with better error handling Made the edit command and fixed it a lot Add MIT LICENSE and blank readme Start shell config for future features Anyways so I did a little bit! Again super sorry for the boring image, its the logo/banner for the project!
OK we are back to daily (I hope ) devlogs. Again really sorry about last time… So I only did about an hour of work today because my Mom hates when I code on sundays… Today I started working on the reminder command, it will run when ever you open your terminal and remind you to check in (yay mental health!) Becuase this is a pretty big task I started by updating the search function to support searching for types, I am going to use this new search to find the last time a user checked in with a note. Sorry I had little time to make better looking screenshots… or a video… but hopfully they look decent. Thanks for reading! Have a wonderful day!
Ok not much done today I had a 4 hour drive so I just watched some Attack on Titan :) But I did get SOME coding done! Today I implemented the reminder function and the inital set up functions. The reminder one is mostly complete but I might add a few different message types. As for the init command its iffy, I just need to change the checks and update a few things but its a pretty minimal feature. Honestly I will be honest its getting pretty close to done! My expected timeline for V1 of this project was 20 hours so its already pretty on target.
Sorry this is so late (A common theme among my devlogs) But I still have 20 min before tomorrow! Let me have it! Today I mostly wrote docs, added a logo, packaged it, shrunk the binary by 75% from 8mb to 2mb! Anyways its basically done, probably 3 days more of devlogs just because I am a perfectionist. Also super sorry about the media… it kind of sucks I know.
Hey! I am back! Today is not even that late! Today I did not do that much but I did run into a Hackatime bug again! I hate when I write human code and it gets logged as AI time :( But time logging aside I worked on the docs today, I finished up comments for each of the commands and started on the readme. Anyway for the media I found a funny rust meme I wanted to share with you, its relevant because tokio is like 0.2mb of my binary size and V2 will def remove it…
Apparently you guys like programming memes. So its late again and I don’t want to make another piece of nice looking media! So here are some more memes (I know lazy…) Anyways today I worked on more docs, fixed bugs, published to crates.io and worked on the readme. Not much really… I am working on a few small tweaks and features but nothing major. Love you guys and have a great night :)
Sorry for missing yesterdays devlog… Figured I would save it for today :) Today/Yesterday I worked on fixing major and minor bugs, additionally I made a export command to export all of the db rows quickly. Its so close to a v1 release I just want to make sure its super duper polished before I will release it!
Ok I am actually so tired. I have to work today and tomorrow and I am also starting third place so this is your final devlog… for now… I will inevitably come back to make more changes, small polishes and upgrades down the line, but it will be a bit. In this last update, I polished things fixed a ton of warnings and made it good enough to hopefully release. Thank you all for following me through this journey. Its tiring to look back on it now but honestly it was still worth it. Goodbye! <3
Whoah! Its been a LONG time since I made a devlog here… Honestly I had intended on never making another one…but then I found myself actually using Monochromium, and I had a lot of issues with it, and well I have a roadmap in my mind so might as well… So I may have done a few hour long rewrite… I basically did a little bit of stuff for the ship getting fixed, then updated the config and reminder timer, then updated the reminder system, then… I SWITCHED THE ENTIRE DB LIBRARY! So that took a very, very, very long time… but resulted in 75% smaller binary (again) we are looking at a very small binary now :) and that is with SQLite still bundled for compatibility! Anyway guys I am so happy to be back (not happy about my missing sticky streak…) and hope to write again soon! PS: Yes the media sucks I just ran out of time today ok… Changelog fix issue with time parsing ( 4ccff8e ) Finish refactor, ran cargo fmt, bump version number to 0.3.0 alpha ( 2825568 ) Switch everything over to rusqlite, switch to sync instead of async, add new database model, cut binary size a lot, fix minor bugs, huge refactor ( f2f318b ) V0.2.0: Moved the types system to seperate folder, fixed reminer and checkins, added toml config, and minor other fixes ( 735d4c4 ) Update reminder to use config time, updated config to support toml ( 281a6a3 ) Fix readme and demo video ( 3466ed2 )
Ok my goal is to write 3 devlogs today so I can make up for some missed ones last week… Plus I have the day off. So here is the first one: This morning I worked on writing some tests for db and for utility functions just getting it prepped for the 0.3.0 release. Next I am going to work on the 0.4.0 release which will mostly be a polish run honestly :)
No way! Stardance was extended for one more month! And it has a story! This is insane! Sorry for not keeping up with the daily scheduled… don’t worry I am back on track (for a unnumbered amount of time)… but I am totally getting some hours in so the spaceship can be rebuilt… (Do I really want that? I man the destruction particle effects are really nice…) Hopfully my past ship that is still not reviewed counts for the time for this event! Ok changes time: Added tests Unified CLI commands Added Github Actions Added Binarys for all OSes and a bunch of other stuff I forgot about :) Hopfully this media/screenshots are decent looking because I was lazy and did not put much work into them ;D thanks for tolerating me :) bye!
Hi guys! Today I worked on a new stats command! Pretty basic I know… But I was lazy ok… Also I did a few other small things: Updated CI a bit Wrote some more tests Bumped version to v0.4.3 Some other stuff Oh one bigger thing I did was fix a bug with new lines and the shell prompt bugging into stuff that did not do a new line at the end… pretty simple fix but it makes reminders and stats look much better! Sorry for the stale devlog! bye
I have been working on a big migration :) its not quite done ofc but I will get their eventually. So sorry for this tiny devlog but I am working on somthing big for you guys!
Hey guys! Sorry for the crazy long wait! I have been insanely busy lately with stuff but this project is finally mostly ready for the next release! 0.5.0-alpha.0 is done! The biggest new feature being file contents are controlled by md files not just db contents! Here is more depth: Schema changes: contents string -> file_link -> String Command Changes: Edit now uses default configured editor and also has commands to change db values (other than id!) QoL: Lots of tiny fixes for quality of life to ensure things work well More command flags: Many more flags have had added support Why still in alpha? So this update is HUGE and has tons of small bugs on migrations, editing, searching, listing files, and more… so I just want to make a few more changes before a full release! Thanks for staying with me its almost over! Bye!
I should probably be posting these devlogs significantly more… Almost 6 hours for a devlog is quite a bit… But here I am. Here’s what’s changed. Here’s what’s finished: 0.5.0 full release Official Markdown file support Quality-of-life improvements Comprehensive test suite for more things Here’s what’s in progress: The cryptography branch Basic file locking and unlocking More tests Binary optimization 0.5.1 beta release soon Here’s what’s yet to be started: Additional updates More commands Quality of life for locking and unlocking Better branding and more Anyway my first ship finally finished so I should be submitting the next one any day now, probably once 0.5.1 or 0.5.2 is completed! Thanks for reading bye! PS: Still no idea what to put for screenshots for a CLI like this so enjoy more terminal screenshots…
Honestly not much to share with you guys, just lots and lots of bug fixes across the board. Some of the major ones identified and fixed were: Commands breaking when parsing locked commands Code being super ugly :( Security Fixes And several I forgot… Any ways I am currently working on more security fixes so we can release 0.5.1 full release, I want to ensure that there are NO security issues for a update based entirely on making it secure… Some other planned stuff: Quick config change commands Better quick note title genration Full documentation on how to use Tutorial command? On Install helper prompt Anything else you guys want Ok bye! Changelog Fix fmt and clippy ( e839d6b ) pre security patch ( 90f155f ) QoL and code quality fixes ( a2be63e ) Bug fixes ( 9bbf71f ) Some more small polish ( 183aa5a ) 0.5.1-alpha.0: Attempt one at fixing enough bugs for a release ( 0a825ab ) PS: Make a github issue or submit a comment on any of the devlogs and I will most likely implement it within the day :)
I started working through the feedback that I got from the different star interviews on my last ship because I want to make sure that the next one’s really polished for you guys! I wanted to try to be professional with this, so I made five GitHub issues, and I’ve been trying to use the CLI for most of the stuff! Here are the two I finished so far: Switch stats command to use SQL count for performance and simplicity Added Mac OS Intel release as well as a Universal binary Unrelated to the start interviews, I added some checks before you can commit your code to prevent CI fails Anyway, guys, sorry for the long time between this and the last vlog. Hopefully you guys are having a great day. Thanks for checking in. Bye :)
Monochromium v0.6.0 — We’re so back (with graphs!) Sorry it’s been so long since my last devlog! I have been stuck writing emails for Haven for such a long time lol! But I finally got 0.6.0 out to you guys! Yeah I know it’s super cool! Here is what got added (yeah, added ! It’s been a bit since I was not just writing polish): Sugar commands for checkin , todo , and ideas — allows you to quickly add notes with different types Value row on the db — allows you to add a value associated with the notes (as a suggestion: hype for ideas, mood for checkins, and priority for todos) And the big one… an overhauled stats command with mood graphs ! Yeah, you saw the value row and thought it was LAME right! Well, I added it so I could add these fancy graphs! Ok, quick story time: my mental health sucks (I assume it’s a common thing among programmers), so I have been adding a little score: +4 or smth to the end of my checkins from monochromium. I honestly have loved this, and it helped me get through the day just a little better… So I added that feature directly into the CLI… yeah, you don’t HAVE to use it… but I highly recommend it, even if it’s just for the pretty graphs (in the media below :) Anyways guys, have a great day <3
Ships:
Hi everyone! Today I am shipping Monochromium (v0.1.1) a flexible CLI note taking app for the terminal! Written in Rust its a fast app with a binary smaller than 2mb! We have a full spec for future versions and plan to keep writing more code soon! My favorite part of developing this app was probably learning the clap syntax, its quite easy and intuitive now! Thanks for reading :)...
|
1793001163.5581372
|
1793087563.5581372
|
|
55565
|
THE 9TH WAVE: APOCALYPSE by @jdaviddg077 | Stardan THE 9TH WAVE: APOCALYPSE by @jdaviddg077 | Stardance...
|
jdaviddg077
|
0
|
59.3
|
0
|
[]
|
[{"post_id": 80024, "ts": "202 [{"post_id": 80024, "ts": "2026-10-16T00:25:09Z", "hours": 5.3261, "text": "Hi! We’ve been fixing up more things in the game; it’s turning out really epic."}, {"post_id": 73816, "ts": "2026-09-26T02:41:18Z", "hours": 5.6961, "text": "Hi! Today we were adding the monsters and several other things."}, {"post_id": 73435, "ts": "2026-09-25T02:37:09Z", "hours": 5.6336, "text": "Hello! Today we set the scene and started working with the monsters."}, {"post_id": 72846, "ts": "2026-09-23T21:09:45Z", "hours": 6.4003, "text": "Hi, today we were fixing bugs and working on sounds and atmosphere."}, {"post_id": 72511, "ts": "2026-09-23T03:18:04Z", "hours": 6.4108, "text": "Hi, today we were working on the game’s atmosphere and recording audio as well."}, {"post_id": 72290, "ts": "2026-09-22T16:24:00Z", "hours": 0.8, "text": "Hi! Today we were editing the project’s ambient sounds to make it more immersive."}, {"post_id": 70412, "ts": "2026-09-19T04:29:31Z", "hours": 6.3008, "text": "Hello, today we had some problems, I can’t upload videos to the studio, what do I have to do to record audio for the setting?"}, {"post_id": 68891, "ts": "2026-09-15T23:39:00Z", "hours": 4.6731, "text": "Hello we’ve further improved the lighting, and we’ve also added spaces for you to explore and discover the stories hidden within."}, {"post_id": 65150, "ts": "2026-09-10T02:51:08Z", "hours": 6.0111, "text": "Hi! Today we were modeling and tweaking the map a bit more, and we added a flashlight with batteries."}, {"post_id": 61943, "ts": "2026-09-05T03:49:27Z", "hours": 4.9172, "text": "Hi, we got quite a bit of work done today; we modeled interiors and some lighting.d"}, {"post_id": 59997, "ts": "2026-09-02T02:45:14Z", "hours": 5.2836, "text": "Log 2: Today we worked a bit more on the map and on some creature animations."}, {"post_id": 57037, "ts": "2026-08-29T03:30:10Z", "hours": 1.8503, "text": "Hi! Today we were working on the game terrain and the streets."}]...
|
Title: THE 9TH WAVE: APOCALYPSE by @jdaviddg077 | Title: THE 9TH WAVE: APOCALYPSE by @jdaviddg077 | Stardance
Devlogs:
Hi! Today we were working on the game terrain and the streets.
Log 2: Today we worked a bit more on the map and on some creature animations.
Hi, we got quite a bit of work done today; we modeled interiors and some lighting.d
Hi! Today we were modeling and tweaking the map a bit more, and we added a flashlight with batteries.
Hello we’ve further improved the lighting, and we’ve also added spaces for you to explore and discover the stories hidden within.
Hello, today we had some problems, I can’t upload videos to the studio, what do I have to do to record audio for the setting?
Hi! Today we were editing the project’s ambient sounds to make it more immersive.
Hi, today we were working on the game’s atmosphere and recording audio as well.
Hi, today we were fixing bugs and working on sounds and atmosphere.
Hello! Today we set the scene and started working with the monsters.
Hi! Today we were adding the monsters and several other things.
Hi! We’ve been fixing up more things in the game; it’s turning out really epic....
|
1792500789.8067887
|
1793105589.8067887
|
|
37011
|
yth-auth by @gideon | Stardance
|
gideon
|
0
|
59.11
|
0
|
[]
|
[{"post_id": 57007, "ts": "202 [{"post_id": 57007, "ts": "2026-08-29T02:30:34Z", "hours": 1.3494, "text": "added custom logo and background for apps!"}, {"post_id": 56976, "ts": "2026-08-29T00:53:20Z", "hours": 11.6725, "text": "added some profile changes - now you can set your last name to show first, and upload a profile picture. these changes also show in other apps too! (0:22) uploads were a little annoying to implement - you can’t send files over json so you have to use formdata, but you can’t encode booleans/integers in formdata so you have to use json I worked around this by set up a separate upload endpoint which stores images and sends back an id for use elsewhere. this makes uploading images elsewhere in the app much easier though! plus, I can set up a schedule to find and remove orphaned images (like if a user changes their profile picture, the old picture can be removed later) I also spent some time cleaning up the backend, which took some time, but is less exciting than changing your profile picture to a cat :3"}, {"post_id": 54858, "ts": "2026-08-26T01:18:32Z", "hours": 5.6311, "text": "added the ability to view and revoke sessions! each session shows the browser and OS you’re using, with icons, as well as your current session. on top of this, I’ve made a number of small ui changes. it doesn’t look super different, but if you compare 0:29 onwards to a previous devlog, the app feels less busy borders are slightly lighter corners are slightly more round forms have a horizontal layout and more spacing form inputs have a white background user/session/app tables have a new layout the save button is at the bottom of the screen, and only shows when you’ve made changes (with a little animation so you can find it) there’s a reset button too!"}, {"post_id": 54170, "ts": "2026-08-25T01:05:10Z", "hours": 9.3639, "text": "added consent! consent is always a good thing for each app a user logs in to, it stores which scopes were granted. the user can then open the app from their homepage, or revoke the app’s access (which deletes all access tokens). - as shown, once I revoke tokens, the test app can no longer read my profile :D"}, {"post_id": 49288, "ts": "2026-08-18T00:29:03Z", "hours": 1.2003, "text": "logging in to other apps now works! made a quick demo using better-auth (on a separate website) to test it. implemented OAuth2 code exchange and user info endpoints. I wrote them using orpc, so they have proper input validation, and as a bonus I can generate OpenAPI docs too ^-^ also added a ‘return_to’ query parameter so if you’re not logged in, it asks you to log in first, then redirects you back where you were."}, {"post_id": 48917, "ts": "2026-08-17T14:11:35Z", "hours": 8.9456, "text": "added creating external apps! this will allow other apps to log in through my system (similar to ‘sign in with google’), access users’ info like their name and email, and also add updates, like adding events they’ve attended to their logbook! turns out implementing OAuth2/OIDC from scratch is actually not super fun, who would have thought I’m partway though! in brief, when users want to log in to an app, they’re sent to your auth system first. if they’ve not already used the app before, they can give permission first. then they’re sent back, with a unique code that the app uses to talk to the auth system and find out who the user is. - at the moment, I’ve added a consent page, and am working on adding APIs to allow the app to exchange a code for user info. there’s a lot of hidden backend work still to do though, like making sure everything is standards-compliant (enough), proper input validation, only allowing specific scopes, detecting token reuse, etc."}, {"post_id": 39734, "ts": "2026-08-02T21:54:38Z", "hours": 2.2947, "text": "added the ‘console’ page! mostly just design for now, but you can update your name and date of birth ^-^"}, {"post_id": 39092, "ts": "2026-08-01T19:50:17Z", "hours": 1.1319, "text": "implemented the login flow! the app asks you to login if you already have an account, or to signup if you don’t. the one-time code field also now auto-focuses, so you can type in a code straight away."}, {"post_id": 31464, "ts": "2026-07-19T20:48:55Z", "hours": 3.3472, "text": "implemented the signup flow! now when you sign up, your account actually gets created and you’re logged in as well nice extra feature - when you enter your email and click ‘next’, the email input stays in the same place. plus, between each page, the title stays in the same place too!"}, {"post_id": 30876, "ts": "2026-07-18T20:36:59Z", "hours": 14.1728, "text": "a lot of this time was spent playing around with different frameworks and seeing what I preferred. I ended up picking TanStack Start just because I liked it, and it doesn’t feel like feature overload anyway, so I have something to show for 14h, I wrote the signup flow with proper validation, and it’s multi-step so it ‘guides’ a user through signing up. no accounts are created yet (that comes later), but it looks nice"}]...
|
Title: yth-auth by @gideon | Stardance
Devlogs:
a Title: yth-auth by @gideon | Stardance
Devlogs:
a lot of this time was spent playing around with different frameworks and seeing what I preferred. I ended up picking TanStack Start just because I liked it, and it doesn’t feel like feature overload anyway, so I have something to show for 14h, I wrote the signup flow with proper validation, and it’s multi-step so it ‘guides’ a user through signing up. no accounts are created yet (that comes later), but it looks nice
implemented the signup flow! now when you sign up, your account actually gets created and you’re logged in as well nice extra feature - when you enter your email and click ‘next’, the email input stays in the same place. plus, between each page, the title stays in the same place too!
implemented the login flow! the app asks you to login if you already have an account, or to signup if you don’t. the one-time code field also now auto-focuses, so you can type in a code straight away.
added the ‘console’ page! mostly just design for now, but you can update your name and date of birth ^-^
added creating external apps! this will allow other apps to log in through my system (similar to ‘sign in with google’), access users’ info like their name and email, and also add updates, like adding events they’ve attended to their logbook! turns out implementing OAuth2/OIDC from scratch is actually not super fun, who would have thought I’m partway though! in brief, when users want to log in to an app, they’re sent to your auth system first. if they’ve not already used the app before, they can give permission first. then they’re sent back, with a unique code that the app uses to talk to the auth system and find out who the user is. - at the moment, I’ve added a consent page, and am working on adding APIs to allow the app to exchange a code for user info. there’s a lot of hidden backend work still to do though, like making sure everything is standards-compliant (enough), proper input validation, only allowing specific scopes, detecting token reuse, etc.
logging in to other apps now works! made a quick demo using better-auth (on a separate website) to test it. implemented OAuth2 code exchange and user info endpoints. I wrote them using orpc, so they have proper input validation, and as a bonus I can generate OpenAPI docs too ^-^ also added a ‘return_to’ query parameter so if you’re not logged in, it asks you to log in first, then redirects you back where you were.
added consent! consent is always a good thing for each app a user logs in to, it stores which scopes were granted. the user can then open the app from their homepage, or revoke the app’s access (which deletes all access tokens). - as shown, once I revoke tokens, the test app can no longer read my profile :D
added the ability to view and revoke sessions! each session shows the browser and OS you’re using, with icons, as well as your current session. on top of this, I’ve made a number of small ui changes. it doesn’t look super different, but if you compare 0:29 onwards to a previous devlog, the app feels less busy borders are slightly lighter corners are slightly more round forms have a horizontal layout and more spacing form inputs have a white background user/session/app tables have a new layout the save button is at the bottom of the screen, and only shows when you’ve made changes (with a little animation so you can find it) there’s a reset button too!
added some profile changes - now you can set your last name to show first, and upload a profile picture. these changes also show in other apps too! (0:22) uploads were a little annoying to implement - you can’t send files over json so you have to use formdata, but you can’t encode booleans/integers in formdata so you have to use json I worked around this by set up a separate upload endpoint which stores images and sends back an id for use elsewhere. this makes uploading images elsewhere in the app much easier though! plus, I can set up a schedule to find and remove orphaned images (like if a user changes their profile picture, the old picture can be removed later) I also spent some time cleaning up the backend, which took some time, but is less exciting than changing your profile picture to a cat :3
added custom logo and background for apps!...
|
1792676923.5601451
|
1793281723.5601451
|
|
1910
|
Planet Trotter by @Atlus | Stardance
|
Atlus
|
1
|
59.0
|
583
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T19:40:39Z", "hours": 59.0, "multiplier": 9.84, "payout": 583, "blessing": "neutral", "text": "This is a very early version of my game Planet Trotter. I am very proud of the progress I’ve made as before this I didn’t know anything of game development. The game is still very early in development, but I thought I’d put something out and ship a working version. have fun playing my game! :D", "repo": "https://github.com/Atlus06/Planet-Trotter", "demo": "https://atlus06.itch.io/planet-trotter"}]...
|
[{"post_id": 56284, "ts": "202 [{"post_id": 56284, "ts": "2026-08-28T00:04:50Z", "hours": 6.2547, "text": "I tried adding a new game button. It did not work. the last for the last month or so and recorded 6 hours, I’ve been trying to create a system in my game to reset the player’s save. I SEVERELY underestimated how hard it’d be. It really is weird what gets you caught up in a project, if you wanna know more about my prosses and possibly help you can read below. So first I thought it would be as easy as deleting the save file that is already on the player’s system, that not only crashed, but after I fixed all of the bugs and errors I noticed it completely destroyed the saving system and the level loading system with it. after hours which turned to weeks of debugging, I figured it wasn’t worth it. At least not right now, this is a challenge I’ll tackle another day, or at least when I don’t have a time limit. But as they say, failure is apart of the process and I’m okay with that."}, {"post_id": 43368, "ts": "2026-08-08T15:57:40Z", "hours": 8.6789, "text": "Changes: Added state machine Added NPC with dialogue Added more menu options Added Debug mode"}, {"post_id": 36707, "ts": "2026-07-28T22:47:47Z", "hours": 6.5531, "text": "Changes: Added jump cutting - make platforming feel better/ more responsive added settings menu added controls rebinding menu"}, {"post_id": 32625, "ts": "2026-07-21T22:15:39Z", "hours": 2.1347, "text": "Changes: Made a checkpoint System After disagreeing with a bunch of tutorials I decided to reuse a system I already had. Used the code to set player position at the start of the level and a global variables scripts to remember the position of the checkpoint and respawn the player when their equaled to 0 Made a “return to checkpoint” button to give use to the checkpoints in the levels due to there being nothing that will kill the player yet"}, {"post_id": 30765, "ts": "2026-07-18T16:59:21Z", "hours": 2.66, "text": "Changes: Added UI with a working health, dash cooldown and collectable counting system -Tweaked dash adding a slight start lag and changed the way cooldowns work"}, {"post_id": 29869, "ts": "2026-07-17T00:59:28Z", "hours": 7.8633, "text": "Changes: Made 5 levels Finished first reeditions of levels that will be included in the demo Small Tweaks: Made wall slide way faster Changed how dash cooldown works Here are 2 level layouts and their renditions/ filled out versions"}, {"post_id": 24941, "ts": "2026-07-08T20:30:51Z", "hours": 3.9625, "text": "Changes Reworked double jump Other small Tweaks"}, {"post_id": 23631, "ts": "2026-07-06T18:23:24Z", "hours": 2.4867, "text": "Changes: -Added a placeholder level transition/ loading screen -Finally made level spawn points work -Added textures/ replaced placeholder platforms with actual assets The 2 photos are an example of making something unnecessarily complex. The few lines of code I used where the whole reason that the level spawn points took weeks the work out. So make sure you understand your code so you really know what’s actually helping and what’s bloat and holding you back."}, {"post_id": 19254, "ts": "2026-06-30T14:51:35Z", "hours": 2.7731, "text": "Changes: Added a Health System Re-added the Collectable counter Life Update: To explain the big gap in updates, I got burnout. while working on the project I ended up working too hard and too fast, and a certain point I stopped to take a break and couldn’t bring myself to work, but I’m back now and won’t let that happen again."}, {"post_id": 9581, "ts": "2026-06-15T23:19:01Z", "hours": 1.7408, "text": "Devlog 8: Did: -Started w/ fixing coyote time Reworked jump to make coyote time work Remade double jump by making double jump variable -Make System for changing levels Used signals w/ parameters to send path to next level -Fixed up collectables Turned of collisions for .1 seconds so collectables won’t be collected on start up (hopefully)"}, {"post_id": 9273, "ts": "2026-06-15T15:57:48Z", "hours": 2.4539, "text": "Changes: -Cleaned up backend more -added coyote time -make scene/ level changing work"}, {"post_id": 7007, "ts": "2026-06-11T19:14:31Z", "hours": 2.5389, "text": "Changes: -organized file system and scene tree"}, {"post_id": 2797, "ts": "2026-06-05T16:43:33Z", "hours": 2.0925, "text": "Changes: Changed dash mechanic so dashing downwards is possible Added sliding mechanic The sliding was strange to add, but I ended up figuring it out. Adding this I’ll make the game’s movement feel more fluid, like celeste. Later I’ll make a momentum system to increase the slide and the dash distance depending on speed"}, {"post_id": 2643, "ts": "2026-06-05T09:25:51Z", "hours": 1.1644, "text": "Changes: -Added camera zoom -Added collectable counter The camera zoom feature is mainly for testing, but I though while I work on a map system I’ll give a pseudo map that make traversing the test area easier."}, {"post_id": 1702, "ts": "2026-06-03T21:19:03Z", "hours": 3.9031, "text": "Changes: -Polished movement -player jumps off of walls -dash is stronger -Added collectables -Added camera movement The collectable system was the most challenges from collision errors to tracking & counting collectables, but I did figure it out and learned how to signal between scripts at the same time. I also learned about the camera positioning smoothing option in Godot which cut out a lot of learning and trial & error that I would need to figure out."}, {"post_id": 416, "ts": "2026-06-01T20:23:52Z", "hours": 2.0153, "text": "I and a couple friends are going to create a game about venturing unknown planets in search of a new earth to inhabit To start off I created a simple movement system with a double jump, dash and wall cling mechanic. the dash was hardest to implement because of all the small hiccups and things to keep track of, but I did manage to get a hold of it after a lot of trial and error. I started this project with the aim to learn composition and I’m happy that I was able to implement that into this project. If you don’t know composition makes your code more readable and modular. As you can tell there aren’t any sprites, but there will be in the future, but for now the Godot logo will be my placeholder."}]...
|
Title: Planet Trotter by @Atlus | Stardance
Devlo Title: Planet Trotter by @Atlus | Stardance
Devlogs:
I and a couple friends are going to create a game about venturing unknown planets in search of a new earth to inhabit To start off I created a simple movement system with a double jump, dash and wall cling mechanic. the dash was hardest to implement because of all the small hiccups and things to keep track of, but I did manage to get a hold of it after a lot of trial and error. I started this project with the aim to learn composition and I’m happy that I was able to implement that into this project. If you don’t know composition makes your code more readable and modular. As you can tell there aren’t any sprites, but there will be in the future, but for now the Godot logo will be my placeholder.
Changes: -Polished movement -player jumps off of walls -dash is stronger -Added collectables -Added camera movement The collectable system was the most challenges from collision errors to tracking & counting collectables, but I did figure it out and learned how to signal between scripts at the same time. I also learned about the camera positioning smoothing option in Godot which cut out a lot of learning and trial & error that I would need to figure out.
Changes: -Added camera zoom -Added collectable counter The camera zoom feature is mainly for testing, but I though while I work on a map system I’ll give a pseudo map that make traversing the test area easier.
Changes: Changed dash mechanic so dashing downwards is possible Added sliding mechanic The sliding was strange to add, but I ended up figuring it out. Adding this I’ll make the game’s movement feel more fluid, like celeste. Later I’ll make a momentum system to increase the slide and the dash distance depending on speed
Changes: -organized file system and scene tree
Changes: -Cleaned up backend more -added coyote time -make scene/ level changing work
Devlog 8: Did: -Started w/ fixing coyote time Reworked jump to make coyote time work Remade double jump by making double jump variable -Make System for changing levels Used signals w/ parameters to send path to next level -Fixed up collectables Turned of collisions for .1 seconds so collectables won’t be collected on start up (hopefully)
Changes: Added a Health System Re-added the Collectable counter Life Update: To explain the big gap in updates, I got burnout. while working on the project I ended up working too hard and too fast, and a certain point I stopped to take a break and couldn’t bring myself to work, but I’m back now and won’t let that happen again.
Changes: -Added a placeholder level transition/ loading screen -Finally made level spawn points work -Added textures/ replaced placeholder platforms with actual assets The 2 photos are an example of making something unnecessarily complex. The few lines of code I used where the whole reason that the level spawn points took weeks the work out. So make sure you understand your code so you really know what’s actually helping and what’s bloat and holding you back.
Changes Reworked double jump Other small Tweaks
Changes: Made 5 levels Finished first reeditions of levels that will be included in the demo Small Tweaks: Made wall slide way faster Changed how dash cooldown works Here are 2 level layouts and their renditions/ filled out versions
Changes: Added UI with a working health, dash cooldown and collectable counting system -Tweaked dash adding a slight start lag and changed the way cooldowns work
Changes: Made a checkpoint System After disagreeing with a bunch of tutorials I decided to reuse a system I already had. Used the code to set player position at the start of the level and a global variables scripts to remember the position of the checkpoint and respawn the player when their equaled to 0 Made a “return to checkpoint” button to give use to the checkpoints in the levels due to there being nothing that will kill the player yet
Changes: Added jump cutting - make platforming feel better/ more responsive added settings menu added controls rebinding menu
Changes: Added state machine Added NPC with dialogue Added more menu options Added Debug mode
I tried adding a new game button. It did not work. the last for the last month or so and recorded 6 hours, I’ve been trying to create a system in my game to reset the player’s save. I SEVERELY underestimated how hard it’d be. It really is weird what gets you caught up in a project, if you wanna know more about my prosses and possibly help you can read below. So first I thought it would be as easy as deleting the save file that is already on the player’s system, that not only crashed, but after I fixed all of the bugs and errors I noticed it completely destroyed the saving system and the level loading system with it. after hours which turned to weeks of debugging, I figured it wasn’t worth it. At least not right now, this is a challenge I’ll tackle another day, or at least when I don’t have a time limit. But as they say, failure is apart of the process and I’m okay with that.
Ships:
This is a very early version of my game Planet Trotter. I am very proud of the progress I’ve made as before this I didn’t know anything of game development. The game is still very early in development, but I thought I’d put something out and ship a working version. have fun playing my game! :D...
|
1793065706.648508
|
1793152106.648508
|