|
15627
|
GEMU by @maxogravo | Stardance
|
maxogravo
|
1
|
10.54
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T20:01:11Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an emulator designed around a 16bit CPU I designed called the GRAVY 16. I coded this predominantly in c++ with some minor areas in python. The CPU has an address and data width of 16bits and a RAM and ROM size of 64kb. It has a custom designed instruction set which is based off Harvard architecture and even a mini programming language to make programs in. Graphics were also added using Raylib to simulate a 64x64 screen that relies on a video buffer in memory to draw to. When making this project I faced several problems. First of all I had to learn how CPUs work on an extremely low level and how to design one. This was not easy and it took me a long time to grasp various concepts. Then I had to learn how to design an ISA for it. This was also difficult as I had to think about what core instructions the CPU needed and how I could allocate bits of data to that. I found myself updating and refining it as I went along and discovered new inconveniences. On top of all of this I had to learn the c++ language to program it in as it is significantly faster than one like python and a popular choice in the industry I want to work in. I learnt so much when making this project. I now know a wide range of computing and programming concepts I can use in my career and day to day life. You can check this out on my GitHub (github.com/Maxogravo). You will have to compile it yourself if you want to run it which may not be so accessible for many people but I have included loads of documents explaining how it works and showing examples of programs I’ve made for those who can’t. I hope you like my project (it took me way longer than 10hrs but I only joined Stardance like a week ago)!!! Attached below is a program that draws a cube and prints an output of the current instruction.", "repo": "https://github.com/Maxogravo/GEMU", "demo": "https://github.com/Maxogravo/GEMU/releases"}]...
|
[{"post_id": 24865, "ts": "202 [{"post_id": 24865, "ts": "2026-07-08T18:31:56Z", "hours": 0.54, "text": "Just cleaned up the project a bit. Also published my first release. Only for macOS so far."}, {"post_id": 13900, "ts": "2026-06-22T19:47:10Z", "hours": 1.035, "text": "I created a new refined document on how the emulator works. I also programmed a 3d cube graphics demote show off the latest features."}, {"post_id": 12203, "ts": "2026-06-19T22:23:39Z", "hours": 0.5772, "text": "I spent my time formatting some code and also making it so that, when plotting pixels, you can specify coordinates to plot using registers."}, {"post_id": 11584, "ts": "2026-06-18T21:24:55Z", "hours": 0.7817, "text": "I expanded the amount of registers to 15. Registers like pc, acc, ir etc are all standalone variables. Also you can now specify FPS. I also made this mini cube spinner with help from chatgpt. It doesn’t use any math just plots pixels so that why I just got Ai to do it. Cool demo tho. The gif doesn’t really do it justice as the gif appears much slower than the program really is."}, {"post_id": 10898, "ts": "2026-06-17T21:13:20Z", "hours": 2.1639, "text": "I added a lot of new features today. Just features that make it nicer to use. You can now do arithmetic with immediates, calculations are saved in the first register, you can store and load using reigister values to determine the address, a clear screen feature has been added and a pixel plotter which makes drawing pixels a lot more intuitive than storing values manually in different locations of memory."}, {"post_id": 10243, "ts": "2026-06-16T21:33:07Z", "hours": 0.4903, "text": "I just polished the documents associated with the emulator such as the README and other documents."}, {"post_id": 10139, "ts": "2026-06-16T18:59:49Z", "hours": 0.8772, "text": "I added a store immediate instruction to make writing pixels to memory more optimised. I had to update the Isa document and also the compiler to accommodate this."}, {"post_id": 9432, "ts": "2026-06-15T19:51:42Z", "hours": 3.6169, "text": "I have finished implementing graphics to my emulator. It works by using a frame buffer and assigning a set amount of ram to video. It then uses ray lib to render it (I suck at c++ and graphics programming so it’s not sdl or anything). The demo shows a red pixel and a blue pixel at the first and last location in video memory its small but if you suint you can probably see it."}, {"post_id": 7032, "ts": "2026-06-11T19:51:16Z", "hours": 0.7336, "text": "I finished writing my emulator for my own 16bit cpu. It is written in c++ and comes with a mini language as well, the compiler was written in python. I am new to c++ and used this as a learning project."}]...
|
Title: GEMU by @maxogravo | Stardance
Devlogs:
I Title: GEMU by @maxogravo | Stardance
Devlogs:
I finished writing my emulator for my own 16bit cpu. It is written in c++ and comes with a mini language as well, the compiler was written in python. I am new to c++ and used this as a learning project.
I have finished implementing graphics to my emulator. It works by using a frame buffer and assigning a set amount of ram to video. It then uses ray lib to render it (I suck at c++ and graphics programming so it’s not sdl or anything). The demo shows a red pixel and a blue pixel at the first and last location in video memory its small but if you suint you can probably see it.
I added a store immediate instruction to make writing pixels to memory more optimised. I had to update the Isa document and also the compiler to accommodate this.
I just polished the documents associated with the emulator such as the README and other documents.
I added a lot of new features today. Just features that make it nicer to use. You can now do arithmetic with immediates, calculations are saved in the first register, you can store and load using reigister values to determine the address, a clear screen feature has been added and a pixel plotter which makes drawing pixels a lot more intuitive than storing values manually in different locations of memory.
I expanded the amount of registers to 15. Registers like pc, acc, ir etc are all standalone variables. Also you can now specify FPS. I also made this mini cube spinner with help from chatgpt. It doesn’t use any math just plots pixels so that why I just got Ai to do it. Cool demo tho. The gif doesn’t really do it justice as the gif appears much slower than the program really is.
I spent my time formatting some code and also making it so that, when plotting pixels, you can specify coordinates to plot using registers.
I created a new refined document on how the emulator works. I also programmed a 3d cube graphics demote show off the latest features.
Just cleaned up the project a bit. Also published my first release. Only for macOS so far.
Ships:
I made an emulator designed around a 16bit CPU I designed called the GRAVY 16. I coded this predominantly in c++ with some minor areas in python. The CPU has an address and data width of 16bits and a RAM and ROM size of 64kb. It has a custom designed instruction set which is based off Harvard architecture and even a mini programming language to make programs in. Graphics were also added using Raylib to simulate a 64x64 screen that relies on a video buffer in memory to draw to. When making this project I faced several problems. First of all I had to learn how CPUs work on an extremely low level and how to design one. This was not easy and it took me a long time to grasp various concepts. Then I had to learn how to design an ISA for it. This was also difficult as I had to think about what core instructions the CPU needed and how I could allocate bits of data to that. I found myself updating and refining it as I went along and discovered new inconveniences. On top of all of this I had to learn the c++ language to program it in as it is significantly faster than one like python and a popular choice in the industry I want to work in. I learnt so much when making this project. I now know a wide range of computing and programming concepts I can use in my career and day to day life. You can check this out on my GitHub (github.com/Maxogravo). You will have to compile it yourself if you want to run it which may not be so accessible for many people but I have included loads of documents explaining how it works and showing examples of programs I’ve made for those who can’t. I hope you like my project (it took me way longer than 10hrs but I only joined Stardance like a week ago)!!! Attached below is a program that draws a cube and prints an output of the current instruction....
|
1793134253.3852541
|
1793220653.3852541
|
|
15657
|
Telemetry LMU by @Karlito | Stardance
|
Karlito
|
1
|
178.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T18:45:37Z", "hours": 178.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Telemetry LMU An application for both Windows and Linux to visualize the telemetry data from Le Mans Ultimate What it does: This application collects, stores, and visualizes data from a racing simulator called Le Mans Ultimate. The main goal: Allow users to analyze their driving and learn from their data through an easy-to-use interface. The requirements: Performance, nice and simple UI, expandability, minimal setup. Results: Main goal: Achieved. (I wouldn’t be shipping this app otherwise) Performance: On average the app uses 4% of CPU and 250Mb of RAM under full load. That is less RAM usage than running Spotify in the background. Nice and simple UI: This is personal preference, however in my opinion I think i succeeded. Expandability: The architecture of the app is very modular so this also isn’t a problem. Setup: On windows there is none (except installing the app), on linux there is one dependency (this is sadly unavoidable.) Some stats: 200+ hours of development time (including the time before Stardance) 250+ commits 6 000+ lines of Rust", "repo": "https://github.com/Karlito05/TelemetryLMU", "demo": "https://github.com/Karlito05/TelemetryLMU/releases/tag/v1.0.1"}]...
|
[{"post_id": 71364, "ts": "202 [{"post_id": 71364, "ts": "2026-09-20T18:08:56Z", "hours": 1.2894, "text": "Devlog 29 - The end So this is the last one, huh. Here is the full write up on this project as I promised. Chapter 1 - The beginnings This project started about 3 months ago. I started experimenting with just getting the data and plotting it. Just for fun as an exercise to learn rust. Then I realized that there actually isn’t a proper working telemetry tool that works on linux. So I did some research… and I decided that I am going to make the app in Dioxus. Chapter 2 - The Dioxus era This leads us to the shortest of eras. The Dioxus era. Nothing really happened here and quite frankly I don’t even remember it that much. There aren’t really any git commits because I didn’t have that setup yet. One thing i remember tho is that I couldn’t figure out how to draw the garphs, because Dioxus is based on web technologies but weirdly becuase you are writing HTLM like syntax but in rust. And that was the main reason I decided to switch to Tauri. Chapter 3 - The Tauri era At first Tauri was the best framework ever made for me. That is because I already kinda knew react, it was simple to understand and I could really lean into the split frontend and backend architecture. This sadly proved very inefficient for the graph view which needs to render thousands of points each frame. Since it was too much for the basic HTML canvas I have switched to using WebGL with numerous downsampling techniques. This was just a bandaid fix though. I have also ran into bunch of architectural issues with the whole split frontend and backend thing. Accessing the telemetry data proved to be very difficult and inefficient. I remember that I ran each of the graphs on a separate thread. This was so stupid. I don’t even remember how I could’ve come up with such a stupid idea :D. It just led to memory leaks and threads uncontrollably spinning up and not stopping. I am sure that all of that could’ve been easily avoided with simpler architecture but at that point I was at my lowest point of this project, so I didn’t even have the energy to do it. I also had the state of the frontend so fragmented which didn’t help. And the whole retained mode GUI thing just wasn’t well suited for this kind of app. And that is when I decided to do a complete rewrite in pure rust! Chapter 4 - The sweet EGUI I didn’t know it at the time, but this was the best idea on what to do with the project. I remember that I was very split between just shipping it half done and finishing it just because of how bad the development experience with Tauri was (sorry Tauri devs, it’s not a you thing, it’s a me thing). It took about 30h to fully rewrite the app with EGUI, which looking back at it isn’t too bad. It felt like ages though. It didn’t help that almost none of the work in this “chapter” did AI. Which at the end of the day is better! Although my style of writing EGUI code was let’s say original… I have just put everything into one file and that grew very fast :D. I had like 5 files that were about 800 lines each. That has since luckily changed. (I have adopted more of a React style file structure.) Anyway at the end of the rewrite I kinda started loving EGUI and that hasn’t stopped since. I continued to develop the Map page in EASY which was pretty easy. But then I needed the track limits data for the map page. This was a bit of a roadblock… First I have tried to extract the data directly from the game, however this was inaccurate and the track width was missing entirely. So then I tried to download an up to date image of the top down view of the track and extract the inside and outside line from it and match it to the in game data. This partially worked better, still not great tho. So there was only one option left. And that was to painfully drive each layout of each track by hand. This took almost 7h of just driving in circles. After that it was smooth and buggy sailing until the ship. Everyone who read this, have a beautiful day."}, {"post_id": 71172, "ts": "2026-09-20T12:02:04Z", "hours": 7.2817, "text": "Devlog 28 Today is gonna be a big day, because I will ship the project. There is a few things left to do tho. Mainly the readme and the demo video! In my last and next devlog I will also make a write up on the story of the whole project so far. Besides that I have yesterday refactored the whole codebase so now there aren’t just 5 monolithic files. I went for a more react like approach with the structure being divided into pages and components. Sadly there isn’t enough time until the ship to touch up on some old UI and UX problems in the edit view of the graphs, neither is there time to add more fields. This will be done in the near future! Overall I am very happy how the app turned out. But this is not the end of the development this is just the end of the stardance journey!"}, {"post_id": 70125, "ts": "2026-09-18T14:50:07Z", "hours": 4.7625, "text": "Devlog 27 For the past few hours I have been polishing the app up. The main you’ll probably see are the onboarding dialogs. A global one pops up when you first launch the app and then one for each page when you first enter them. Another change I have done is that I made the ghosts on the map page be based on time and not data point index."}, {"post_id": 68694, "ts": "2026-09-15T15:37:09Z", "hours": 9.5181, "text": "Devlog 26 Hiiiii For the past few hours I have been working on polishing the app and get it to a shippable state overall. There is still work left to do, but I am getting there. I have set up a simple packager, and a simple script to use it. It automatically compiles the release version of the app and packages it into a windows installer a Debian .deb package and a pacman package. I have also (after like 2 hours of struggeling with it) added an Icon for the app. So now it looks nice!There has been a lot of new bugfixes as well and the app has been tested by my friend so it should be somwhat usable, tho the setup UX should be improved upon. If you wish you can download the app from here: https://github.com/Karlito05/TelemetryLMU/releases/tag/v0.2.3 Well that is all I have for you all today, so have a nice one :)"}, {"post_id": 66482, "ts": "2026-09-12T10:09:34Z", "hours": 5.3067, "text": "Devlog 25 I know I have just made a devlog like yesterday but holy s*** the track references work so well. They are practically perfect . Besides the references I have also implemented the delta time between the 2 cars! That has really tied the page together. If I can say so myself, we are getting pretty close to the final ship . There is not much needed to implement. The obvious are bugfixes, and some simple onboarding. But really, that’s it! Everyone who is following or caring about this project can expect a ship in the next week or so. In my final devlog I will also do a writeup on this project as a whole, from the coarse beginnings in Dyoxys, trough Tauri, to the sweet home of EGUI. There will also be a trailer video and a demo for all the raters :D Anyway for now you can have this preview of the map page! Stay tuned!"}, {"post_id": 65936, "ts": "2026-09-11T12:33:33Z", "hours": 6.7664, "text": "Devlog 24 HI! All of the time on this devlog was basically just driving in circles. And I mean that. I have recorded all of the outsides and insides of all tracks in the game to get the data for the map page. It was very teidius and very boring. Like very very boring. There are 31 tracks in LMU (including each layout) and on every one of them I had to do an out lap, the ouside, another out lap and the inside. So 4laps for each. That is about 15min per layout. Yeah it was a long one. And the recordings aren’t perfect either! I will now have to somehow process them all to get them ready for the ship. You can watch the timelapses of this process here if you wish. https://lapse.hackclub.com/timelapse/OQcismBwxbBB https://lapse.hackclub.com/timelapse/le3Lta0RxcUA https://lapse.hackclub.com/timelapse/XRf98OimmUk9 Anyway. Have a nice day!"}, {"post_id": 63016, "ts": "2026-09-06T16:07:27Z", "hours": 7.12, "text": "Devlog 23 - More Refactoring Hi! In the past few days I have been making some core architectural changes to the project and I would like to explain them now. Telemetry Provider I have finally decided on how I am gonna handle telemetry in the long term. It’s a pretty simple concept but the implementation is pretty hard. I have one object (the TelemetryProvider struct) that is in charge of getting and managing the telemetry. Right now it logs data from all cars and stores the best, last and current laps. If you wish it can save only your laps or laps of everybody. Each lap is a json file about 500kB - 1MB in size and holds all the data that can be displayed in the app. Notably the position ( so you can load that lap directly into the map page ) and the data displayed by the graphs (so you can load it as a reference there as well.) Pointer to this struct is distributed to pages that need it so they can access it! The provider has a core logging loop that is running on another thread so the whole UI doesn’t have to redraw each time you log new data. (About 60 times a second.) State and Settings Providers Next, I have implemented a StateProvider and an SettingsProvider . These two are basically a drop in replacement of what was stored in the Sidebar and SettingsPage respectively. Difference between the two is that the StateProvider isn’t stored between app restarts. Similarly to how the TelemetryProvider works, each of the pages that need these values get a shared pointer (or an Arc in rust) and can access the values. What’s next Going further I will keep my focus on the map page. Finish it, and then start polishing the app for the final ship! Wish me luck and have a nice day!"}, {"post_id": 61727, "ts": "2026-09-04T19:26:10Z", "hours": 9.5394, "text": "Devlog 22 Hiiiiiiiiiiiii I have some huge news to tell you. I have just made the MOST complex addition yet. And I love it! I have completely overhauled the accessing and managing the telemetry! I have designed a thread safe way to have it run on a separate thread and be accessible from *every place in the app. One unified API for everything! I now store the current lap and the last lap for each of the cars. Tho this takes up a massive 140mb of just floats (in the worst case scenario) I believe its worth the RAM! (Let’s be real, we have saved over 400mb from the tauri implementation so we can now use some of that!) Next I will continue on further implementing these features around the tool. Anyway have a nice day people and bye bye. Some context to that meme: I have a type in my app that is literally Arc<Mutex<[([f64; TelemetryValueType::Max as usize], Option); 104]»"}, {"post_id": 60204, "ts": "2026-09-02T13:06:23Z", "hours": 9.4931, "text": "Devlog 21 For the past few days I have been working on a new feature. The map page. It is turning out great, however it has a lot of bugs. These will get fix over the next few days. I promise :) There have also been changes made to the lap logging system and some other systems as well. As you can see on the image you select 2 saved laps and can crosscompare the lines you drove. Obviously this is completly useless if you loaded 2 different track like I did here. This will get checked for and prohibited in the future. Next I will add the underlying lap overlay which I will somehow extract from the game or from somewhere else. I don’t really know yet. Well that is it for today. Have a great day and bye bye!"}, {"post_id": 57444, "ts": "2026-08-29T16:23:51Z", "hours": 8.955, "text": "Devlog 20 So I have been polishing up the current features a bit and they are far from done. I am starting to question if i will make it to shipping this app one day :D. Anyway I have fixed numerous bugs, added an settings page and implemnted although very crudly a lap logger. But there is still a lot work that needs to be done. I have also added persistancy so the app remembers your choices. I am almost ready to replace the main branch with the fully rusted version, but like I said more work has to be done to go trough with that! I have probably never shown how the Car info page turned out and IMO it did really well. (The empty space is for inputs. That will be implemented soon!)"}, {"post_id": 55542, "ts": "2026-08-27T13:46:52Z", "hours": 8.0039, "text": "Devlog 19 Hello hello! Today I have some exciting news. The rewrite is complete That’s right, after about 30 hours of porting this code from tauri into EGUI it is finally finished! So let’s take a look at some stats, shall we ? | | Tauri | EGUI | |----------------------|-------------|--------------- | | Dev time | 80h | 30h | | Lines of code written | 6k | 3k | | Enjoyability | suboptimal | above average | And some perofrmance stuff as well: | | Tauri | EGUI | |----------------------|-------------|--------------- | | Ram idle | ~700Mb | ~150Mb | | CPU % idle | ~5% | ~5% | | FPS under load | ~29fps | stable 60 | Some other perks also include that EGUI doesn’t need a browser installed on the system to work. Overall I think this was a very successful rewrite! I wouldn’t do it again tho Next I will refactor the code a bit, do a bit off the good ’ol cleanup and then get to work on the map feature."}, {"post_id": 54543, "ts": "2026-08-25T15:54:21Z", "hours": 4.4164, "text": "Devlog 18 - 100h on the project So it’s been a hundred hours huh ? I also can’t believe it! I have also just now finished* the graph view which will be newly called Telemetry (page) Now I will move onto making the car info page previously known as the championship view. I expect this to be very easy!"}, {"post_id": 53875, "ts": "2026-08-24T16:07:03Z", "hours": 6.4811, "text": "Devlog 17 Hello guys. Its me again :D I am continuing to rewrite the UI into egui. I have completed the Graph view’s UI and now I am moving onto implementing it. One thing I have noticed is just how much more “code efficient” egui is. I understand that I didn’t make the logic behind the code yet but even with that I made the same thing with 3k less lines of code. Here is how the layout edit mode is looking for now."}, {"post_id": 51324, "ts": "2026-08-20T22:11:51Z", "hours": 5.83, "text": "Devlog 16 Another 6 hours, another devlog… Hi people. For the last 2 days I took a bit of a break from the project. I have played Approximately up with the boys and it was so fun. Y’all should try the game. It has a free demo 😉 But we are not here to talk about games, are we… I am continuing the implementation of the frontend and its coming along nicely. I’ve just noticed one thing, making the UI itself in egui is kinda slow however the state is very easy. Whilst this not being completely ideal i can push trough that. Since the last devlog, I have finished the implementation of the sidebar, and started working on the telemetry page. I have the graphs sorted and now I am working on the top bar. It’s having a couple of issues at the moment but nothing hard to fix really. I am hopefully gonna continue tomorrow and have the page finished by the end of the week. Welp, I guess that’s it for today. Everybody have a beautiful day, and bye bye!"}, {"post_id": 48473, "ts": "2026-08-16T20:40:29Z", "hours": 6.3456, "text": "Devlog 15 For the last few days, I have been remaking the UI in EGUI and I am enjoying it so far. I’ve been working on the graphs in the graph view and also the sidebar. The sidebar is turning out very well and I am also pretty pleased with the graphs. I have only this for now, so enjoy :D"}, {"post_id": 46562, "ts": "2026-08-13T21:40:19Z", "hours": 2.9933, "text": "Devlog 14 I have done some research and decided that moving forward the app will use eGPU as the main GUI library. I have chosen this over the competitors due to a few reasons. The main being that its rendered natively and that its a intermediate mode library. This will make it very easy to work with the graphs and hopefully other stuff too. I am enjoying working with it so far. There are some concepts that I really like, like that everything that has state is just a simple struct that is initialized somewhere and you do most of the implementation. The widget system is also pretty cool. I was at first worried that I would hate it due to my experiences from TKInter that was forced on me in school :D but its pretty intuitive how they did it. Going further I will need to think about the architecture of the app a bit to not have it fall apart. Right now I am thinking that one thread will be the main “logger thread” which will gather data from the telemetry and then there will be the UI thread. I think that is what pretty much everyone is doing so it might work . With this approach i am worried that its gonna be a pain, but what isn’t these days… I don’t really have that much more to say so at least enjoy this screenshot of a pretty much not working app Fun fact: due to how the lib works there is a bug now that you have to move your cursor on the app for it to log data :DDD"}, {"post_id": 46009, "ts": "2026-08-12T21:29:42Z", "hours": 2.5956, "text": "Devlog 13 Okay so I might have found a solution for me not liking react and web technologies but still wanting to finish this project. And I don’t like it…. but it has to be done. But before I tell you what it is you have to understand my problems. The good React in combination with typescript is a very easy thing to understand. They are everywhere, the skill of knowing these is very valuable. They have a huge ecosystem because they are everywhere. And I am sure that I have forgotten many other cool and interesting features and perks but I picked them for mainly these 3. The Bad They are slow (in comparison to something like rust) They rely too heavily on browsers (I mean it’s basically their runtime) You have to be “hacky” to do some things. They are not suitable to develop desktop apps I mean in hindsight those are so obvious but until you are balls deep into some specific project you don’t really think about those. The main problem is that the performance is, for the lack of a better word, sh*t. And normally that isn’t a problem however when you are processing a memory object of about 300kb 60 times per second it adds up fast. Even on my pretty beefy PC (r7 9800x3d and n5070ti) it hardly gets 30 fps. I know this could probably be fixed with “more hacky workarounds” but I am tired of those. The solution I am going to REWRITE The project I have spent 70h on already in some rust native GUI framework such as ICED. I have not yet decided which one to chose and I will do that research tomorrow and report back Literally me RN ⬇️"}, {"post_id": 45715, "ts": "2026-08-12T11:49:22Z", "hours": 2.1014, "text": "Devlog 12 This will be more of like a quick update on the championships feature. So what has happened is that I have implemented the feature, and assumed that the data will be there for all players… which there isn’t. The other players show up and everything but the details like tire data, damage data and fuel data just isn’t there. So I am kinda stuck if I should just scrap the feature or recreate it into a personal data panel which would just not be fun I think. Also the damages data is very very limited, so I just don’t know what to do."}, {"post_id": 45217, "ts": "2026-08-11T15:31:51Z", "hours": 9.4839, "text": "Devlog 11 Hello guys. I have some good news and some bad news… Let’s start with the not so good news. After thinking about it, I have decided, that I don’t really enjoy working on this project. It’s not that the project it self is bad, it’s more about the tech stack I chose… Don’t get me wrong typescript and react are both phenomenal choices and great tools but, I guess the web is just not for me. I realized that I like the lower end of the spectrum better. So I have decided to cut this project short. The map view will not be included in the final ship for the time being and the profile stats also will not be there. On the bright side, I have started working on the championships page with that nearing its completion. Next I will start to work on the onboarding and settings pages."}, {"post_id": 23759, "ts": "2026-07-06T21:48:28Z", "hours": 10.0158, "text": "Devlog 10 - We are in the double digits 🎊 UI Redesign Progress I am slowly redesigning the app to look like the design I made. I started with the sidebar and then the top control panel. All that went well. The Graphs… 😅 But then I got to the Graphs . *Oh, the graphs… *I wanted to redo the backend for them because the multiple-thread approach was just straight up stupid. It was a pain to develop and would be a pain to maintain. So, in my infinite wisdom , I have gone for just a simple async function. That means that right now the frontend is requesting each data point instead of subscribing to a stream. After that, I needed to revise the frontend graph component itself. At first I just wanted to make a non-messy implementation of the old version. However, it turned out that the HTML <canvas> element is really slow. And I mean realllllllllly slow. So after I wasted like 2 hours trying to optimize the design with no success, I rage quit and went to watch a movie. WebGL to the Rescue But I don’t give up that easily. After the movie, I reimplemented the graph view with WebGL through Pixi.js , which wasn’t even that hard like I expected and overall had much better performance. Well… at least after I fixed one very stupid bug . The Bug That Ate 10 GB of RAM I had forgotten everything from the first GraphView.tsx implementation, so I was just mindlessly copying over the code and renaming the variables to what I thought they meant when I first made it. Then I got to the part which draws the lap (aka the big loop over all the points-up to 10,000 points at a time). There was an error on one of the variables. It was the length of some array. I just renamed it to the main array length because… *what other thing would it be, right? *Well…It was the length of the values array , which was always 1 or 2 .So I accidentally turned 1 × 10,000 iterations into 10,000^2 iterations . Somehow the app still wasn’t lagging that much. It just took like 10 GB of RAM . The Result Thankfully, the new WebGL + Pixi.js approach is way more efficient , so after fixing that bug the graph rendering performs much better. It still isn’t perfect on the UI side of things but I am getting there!"}, {"post_id": 22818, "ts": "2026-07-05T12:34:46Z", "hours": 6.9447, "text": "Devlog 9 - THE REDESIGN For the past few days I’ve been working on a new design for the app. I am not the best designer and to be real I didn’t enjoy it :D. Designing is just too illogical for me. There’s not really much more to say about this. Enjoy the design:"}, {"post_id": 20110, "ts": "2026-07-01T17:12:04Z", "hours": 9.2647, "text": "Devlog 8 Do you guys remember how I said that I will take a break ? Yeah… That didn’t happen. Instead I have made a plan for myself on how I am gonna continue in the tool’s development. Da plan The plan Is pretty simple: Design the app in Figma, then build it! I have also made a list of features that will be added. You can find the plan on Github. You can also suggest features if you’re interested! …oh and before making the plan I have implemented a pretty cool logging feature. Basically it records the currently selected driver and saves all his data to a file along with the lap time and date. It does this only for laps that the game considers valid (aka gives a lap time to.)"}, {"post_id": 17764, "ts": "2026-06-28T18:11:51Z", "hours": 6.7406, "text": "DevLog 7 This will be just a quick update on how things are looking right now, what’s happening, and the overall state of the project. Good news The rewrite is complete The sole UI library is now ShadCN. There have also been some minor bugfixes and ux improvements. The main being that the app is now working on lower resolutions. We’ve got a readme. It’s basic, but its there. Also I have added installation instructions and released the 1st alpha version. You can find it in the releases! Both windows and linux packages are there! Bad news I will take a break for the next few days. I will be working on a smaller project for android and I hope that by the time I return I will be full of energy and ideas! What’s next I will continue working on the graph view. Mainly saving and loading reference laps, and overall better UI and UX."}, {"post_id": 12606, "ts": "2026-06-20T16:24:29Z", "hours": 9.7894, "text": "DevLog 6 - Windows support and the first rewrite! Windows support There’s not really much to say about this. You just get a handle on the game’s memory. This was vibecoded but it’s below 100 lines of windows specific code, so I’m gonna allow it. (It was just the 2 function that handle updating the telemetry and the rest is the same.) Rewrite After adding windows support, and sending it to a friend to test, I have discovered a massive problem. The app just didn’t work on a lower resolution. Since I have a QHD monitor, I didn’t notice it. Also when I started writing the app, I did it in pure React without any UI libraries, then I started to use Antd and then MUI and it became a mess. So I have done some research and decided to rewrite the app using ShadcnUI. I did this because Shadcn has one massive advantage - the code that you use is in your codebase. This means that you can modify the components however you want. It is also one of the more popular ones out there. For icons, I will be using Tabular, because they have a lot of them, and I like their look."}, {"post_id": 10767, "ts": "2026-06-17T17:54:53Z", "hours": 4.4767, "text": "DevLog 5 - Introducing the Layouts feature! So for the past few days I was implementing a layouts feature for the Graphs view in my app. Features: Adding layouts Removing layouts Managing layouts change what graphs they display change the properties of those graphs aka their number of gridlines, color and type How many graphs there are and what sizes they have You can do all of that in the Edit Mode . This mode is accessible via the layout selection dropdown. In edit mode you have options to change the graphs as said, remove the layout you’re editing, to save it as a new one or to save it (basically override the last one). All of this is persistent between sessions. Note that the UI in the screenshots is probably gonna be changed in the future and is just a development placeholder :)"}, {"post_id": 8829, "ts": "2026-06-14T18:01:40Z", "hours": 5.2161, "text": "DevLog 4 Today I have started implementing the layouts feature. There’s not much to really say. The graphs can be vertically adjusted in size, their color and type can be changed and there is a whole new edit mode for that. And that’s what I did for 5h today… (I really hate frontend :D) The design of the whole thing is unfinished but hey, it works. Even though some features (mainly saving and loading layouts) are missing its turning out great. I will continue developing this feature for the time being."}, {"post_id": 8235, "ts": "2026-06-13T18:14:25Z", "hours": 4.1997, "text": "DevLog 3 This one will be more about the organization of the project. New folder structure I have split up the src directory into a few different subdirectories mainly pages directory which is further split up into directories for each page and a components directory for reusable components like the sidebar. Logging Furthermore I have implemented logging on the backend. (It’s also callable from the frontend but that’s not that convenient at least in case of debugging so I won’t be using it as much.) The top bar Next I have started implementing a top bar for the telemetry view . On there will be some important controls and information regarding that view. Just note that in the screenshot the game is not open therefore the driver dropdown isn’t populated with any text. This will probably change in the future. And the layout dropdown is there just for the looks for now ;)"}, {"post_id": 6907, "ts": "2026-06-11T16:08:05Z", "hours": 2.7908, "text": "DevLog 2 Today i have fixed a bug where threads would spawn infinitely. I’ve been at it for 3h… Yeah it was kinda pain. So I basically have this architecture, where my backend spawns a new thread for each graph ( to provide information more responsibly. ) However whenever the graph element unloaded, it didn’t unsubscribe from that thread. A simple fix, just unsubscribe it, right ? Yup basically. However my lack of expertise in this kind of stuff led me on a wild goose chase. After I realized that what I am doing is stupid, it was just a simple hook that the spawn function returned, when spawning the new thread. Well we all make mistakes :D"}, {"post_id": 6797, "ts": "2026-06-11T12:14:18Z", "hours": 0.4275, "text": "DevLog 1 — An Introduction to My Project Hi! I’m Karlito, and this is my first devlog. I’d like to use this devlog to introduce my project, explain its current state, and share my plans for the future. So, what actually is LMU Telemetry? The TL;DR is that it’s a telemetry tool for Le Mans Ultimate. However, many people don’t know what that means, so I’ll explain it here. What is Le Mans Ultimate? In short, Le Mans Ultimate is a racing simulator. Unlike traditional racing games, it doesn’t simply say “the car accelerates when you press W.” Instead, it simulates the engine, tires, driveshafts, brakes, track grip, and many other factors to provide a realistic driving experience. What is telemetry? Telemetry is a way for simulators to output simulation data, such as speed, position, engine temperature, and much more. At a lower level, it’s essentially a chunk of memory containing numbers that are constantly updated with current information. What LMU Telemetry actually does LMU Telemetry aims to visualize these data points in a way that’s easy to understand and can help users improve their driving. It does this in several ways. For example, one feature draws real-time graphs of various metrics such as speed or delta time compared to your best lap. The current state of development The app is currently little more than a glorified demo. It has some rough UI elements and only plots graphs for a hardcoded car (index 0). While this works in private lobbies, where you’re always the first car, the system fails in most other situations. In short, the app isn’t very useful yet, but it’s a start. Main goals Live telemetry view Real-time graphs Map view A view showing the track layout and the line you drove Sharing features Exporting laps and comparing them with laps driven by other users Requirements The app must be performant Running LMU can already be demanding on some systems, so the app shouldn’t use more resources than necessary Linux support A reactive and polished UI Future plans Windows support Depending on how difficult this turns out to be, it may be implemented sooner Strategy mode Useful for endurance and team events, allowing you to monitor the tire and fuel status of other drivers So, what now? Right now, I’ll focus on getting the app to its MVP state. This means refining the UI, fixing bugs, and, most importantly, making the app genuinely useful. Well, that was quite a long one, wasn’t it? Thank you for reading all the way to the end, and have a wonderful rest of your day!"}]...
|
Title: Telemetry LMU by @Karlito | Stardance
Devl Title: Telemetry LMU by @Karlito | Stardance
Devlogs:
DevLog 1 — An Introduction to My Project Hi! I’m Karlito, and this is my first devlog. I’d like to use this devlog to introduce my project, explain its current state, and share my plans for the future. So, what actually is LMU Telemetry? The TL;DR is that it’s a telemetry tool for Le Mans Ultimate. However, many people don’t know what that means, so I’ll explain it here. What is Le Mans Ultimate? In short, Le Mans Ultimate is a racing simulator. Unlike traditional racing games, it doesn’t simply say “the car accelerates when you press W.” Instead, it simulates the engine, tires, driveshafts, brakes, track grip, and many other factors to provide a realistic driving experience. What is telemetry? Telemetry is a way for simulators to output simulation data, such as speed, position, engine temperature, and much more. At a lower level, it’s essentially a chunk of memory containing numbers that are constantly updated with current information. What LMU Telemetry actually does LMU Telemetry aims to visualize these data points in a way that’s easy to understand and can help users improve their driving. It does this in several ways. For example, one feature draws real-time graphs of various metrics such as speed or delta time compared to your best lap. The current state of development The app is currently little more than a glorified demo. It has some rough UI elements and only plots graphs for a hardcoded car (index 0). While this works in private lobbies, where you’re always the first car, the system fails in most other situations. In short, the app isn’t very useful yet, but it’s a start. Main goals Live telemetry view Real-time graphs Map view A view showing the track layout and the line you drove Sharing features Exporting laps and comparing them with laps driven by other users Requirements The app must be performant Running LMU can already be demanding on some systems, so the app shouldn’t use more resources than necessary Linux support A reactive and polished UI Future plans Windows support Depending on how difficult this turns out to be, it may be implemented sooner Strategy mode Useful for endurance and team events, allowing you to monitor the tire and fuel status of other drivers So, what now? Right now, I’ll focus on getting the app to its MVP state. This means refining the UI, fixing bugs, and, most importantly, making the app genuinely useful. Well, that was quite a long one, wasn’t it? Thank you for reading all the way to the end, and have a wonderful rest of your day!
DevLog 2 Today i have fixed a bug where threads would spawn infinitely. I’ve been at it for 3h… Yeah it was kinda pain. So I basically have this architecture, where my backend spawns a new thread for each graph ( to provide information more responsibly. ) However whenever the graph element unloaded, it didn’t unsubscribe from that thread. A simple fix, just unsubscribe it, right ? Yup basically. However my lack of expertise in this kind of stuff led me on a wild goose chase. After I realized that what I am doing is stupid, it was just a simple hook that the spawn function returned, when spawning the new thread. Well we all make mistakes :D
DevLog 3 This one will be more about the organization of the project. New folder structure I have split up the src directory into a few different subdirectories mainly pages directory which is further split up into directories for each page and a components directory for reusable components like the sidebar. Logging Furthermore I have implemented logging on the backend. (It’s also callable from the frontend but that’s not that convenient at least in case of debugging so I won’t be using it as much.) The top bar Next I have started implementing a top bar for the telemetry view . On there will be some important controls and information regarding that view. Just note that in the screenshot the game is not open therefore the driver dropdown isn’t populated with any text. This will probably change in the future. And the layout dropdown is there just for the looks for now ;)
DevLog 4 Today I have started implementing the layouts feature. There’s not much to really say. The graphs can be vertically adjusted in size, their color and type can be changed and there is a whole new edit mode for that. And that’s what I did for 5h today… (I really hate frontend :D) The design of the whole thing is unfinished but hey, it works. Even though some features (mainly saving and loading layouts) are missing its turning out great. I will continue developing this feature for the time being.
DevLog 5 - Introducing the Layouts feature! So for the past few days I was implementing a layouts feature for the Graphs view in my app. Features: Adding layouts Removing layouts Managing layouts change what graphs they display change the properties of those graphs aka their number of gridlines, color and type How many graphs there are and what sizes they have You can do all of that in the Edit Mode . This mode is accessible via the layout selection dropdown. In edit mode you have options to change the graphs as said, remove the layout you’re editing, to save it as a new one or to save it (basically override the last one). All of this is persistent between sessions. Note that the UI in the screenshots is probably gonna be changed in the future and is just a development placeholder :)
DevLog 6 - Windows support and the first rewrite! Windows support There’s not really much to say about this. You just get a handle on the game’s memory. This was vibecoded but it’s below 100 lines of windows specific code, so I’m gonna allow it. (It was just the 2 function that handle updating the telemetry and the rest is the same.) Rewrite After adding windows support, and sending it to a friend to test, I have discovered a massive problem. The app just didn’t work on a lower resolution. Since I have a QHD monitor, I didn’t notice it. Also when I started writing the app, I did it in pure React without any UI libraries, then I started to use Antd and then MUI and it became a mess. So I have done some research and decided to rewrite the app using ShadcnUI. I did this because Shadcn has one massive advantage - the code that you use is in your codebase. This means that you can modify the components however you want. It is also one of the more popular ones out there. For icons, I will be using Tabular, because they have a lot of them, and I like their look.
DevLog 7 This will be just a quick update on how things are looking right now, what’s happening, and the overall state of the project. Good news The rewrite is complete The sole UI library is now ShadCN. There have also been some minor bugfixes and ux improvements. The main being that the app is now working on lower resolutions. We’ve got a readme. It’s basic, but its there. Also I have added installation instructions and released the 1st alpha version. You can find it in the releases! Both windows and linux packages are there! Bad news I will take a break for the next few days. I will be working on a smaller project for android and I hope that by the time I return I will be full of energy and ideas! What’s next I will continue working on the graph view. Mainly saving and loading reference laps, and overall better UI and UX.
Devlog 8 Do you guys remember how I said that I will take a break ? Yeah… That didn’t happen. Instead I have made a plan for myself on how I am gonna continue in the tool’s development. Da plan The plan Is pretty simple: Design the app in Figma, then build it! I have also made a list of features that will be added. You can find the plan on Github. You can also suggest features if you’re interested! …oh and before making the plan I have implemented a pretty cool logging feature. Basically it records the currently selected driver and saves all his data to a file along with the lap time and date. It does this only for laps that the game considers valid (aka gives a lap time to.)
Devlog 9 - THE REDESIGN For the past few days I’ve been working on a new design for the app. I am not the best designer and to be real I didn’t enjoy it :D. Designing is just too illogical for me. There’s not really much more to say about this. Enjoy the design:
Devlog 10 - We are in the double digits 🎊 UI Redesign Progress I am slowly redesigning the app to look like the design I made. I started with the sidebar and then the top control panel. All that went well. The Graphs… 😅 But then I got to the Graphs . *Oh, the graphs… *I wanted to redo the backend for them because the multiple-thread approach was just straight up stupid. It was a pain to develop and would be a pain to maintain. So, in my infinite wisdom , I have gone for just a simple async function. That means that right now the frontend is requesting each data point instead of subscribing to a stream. After that, I needed to revise the frontend graph component itself. At first I just wanted to make a non-messy implementation of the old version. However, it turned out that the HTML <canvas> element is really slow. And I mean realllllllllly slow. So after I wasted like 2 hours trying to optimize the design with no success, I rage quit and went to watch a movie. WebGL to the Rescue But I don’t give up that easily. After the movie, I reimplemented the graph view with WebGL through Pixi.js , which wasn’t even that hard like I expected and overall had much better performance. Well… at least after I fixed one very stupid bug . The Bug That Ate 10 GB of RAM I had forgotten everything from the first GraphView.tsx implementation, so I was just mindlessly copying over the code and renaming the variables to what I thought they meant when I first made it. Then I got to the part which draws the lap (aka the big loop over all the points-up to 10,000 points at a time). There was an error on one of the variables. It was the length of some array. I just renamed it to the main array length because… *what other thing would it be, right? *Well…It was the length of the values array , which was always 1 or 2 .So I accidentally turned 1 × 10,000 iterations into 10,000^2 iterations . Somehow the app still wasn’t lagging that much. It just took like 10 GB of RAM . The Result Thankfully, the new WebGL + Pixi.js approach is way more efficient , so after fixing that bug the graph rendering performs much better. It still isn’t perfect on the UI side of things but I am getting there!
Devlog 11 Hello guys. I have some good news and some bad news… Let’s start with the not so good news. After thinking about it, I have decided, that I don’t really enjoy working on this project. It’s not that the project it self is bad, it’s more about the tech stack I chose… Don’t get me wrong typescript and react are both phenomenal choices and great tools but, I guess the web is just not for me. I realized that I like the lower end of the spectrum better. So I have decided to cut this project short. The map view will not be included in the final ship for the time being and the profile stats also will not be there. On the bright side, I have started working on the championships page with that nearing its completion. Next I will start to work on the onboarding and settings pages.
Devlog 12 This will be more of like a quick update on the championships feature. So what has happened is that I have implemented the feature, and assumed that the data will be there for all players… which there isn’t. The other players show up and everything but the details like tire data, damage data and fuel data just isn’t there. So I am kinda stuck if I should just scrap the feature or recreate it into a personal data panel which would just not be fun I think. Also the damages data is very very limited, so I just don’t know what to do.
Devlog 13 Okay so I might have found a solution for me not liking react and web technologies but still wanting to finish this project. And I don’t like it…. but it has to be done. But before I tell you what it is you have to understand my problems. The good React in combination with typescript is a very easy thing to understand. They are everywhere, the skill of knowing these is very valuable. They have a huge ecosystem because they are everywhere. And I am sure that I have forgotten many other cool and interesting features and perks but I picked them for mainly these 3. The Bad They are slow (in comparison to something like rust) They rely too heavily on browsers (I mean it’s basically their runtime) You have to be “hacky” to do some things. They are not suitable to develop desktop apps I mean in hindsight those are so obvious but until you are balls deep into some specific project you don’t really think about those. The main problem is that the performance is, for the lack of a better word, sh*t. And normally that isn’t a problem however when you are processing a memory object of about 300kb 60 times per second it adds up fast. Even on my pretty beefy PC (r7 9800x3d and n5070ti) it hardly gets 30 fps. I know this could probably be fixed with “more hacky workarounds” but I am tired of those. The solution I am going to REWRITE The project I have spent 70h on already in some rust native GUI framework such as ICED. I have not yet decided which one to chose and I will do that research tomorrow and report back Literally me RN ⬇️
Devlog 14 I have done some research and decided that moving forward the app will use eGPU as the main GUI library. I have chosen this over the competitors due to a few reasons. The main being that its rendered natively and that its a intermediate mode library. This will make it very easy to work with the graphs and hopefully other stuff too. I am enjoying working with it so far. There are some concepts that I really like, like that everything that has state is just a simple struct that is initialized somewhere and you do most of the implementation. The widget system is also pretty cool. I was at first worried that I would hate it due to my experiences from TKInter that was forced on me in school :D but its pretty intuitive how they did it. Going further I will need to think about the architecture of the app a bit to not have it fall apart. Right now I am thinking that one thread will be the main “logger thread” which will gather data from the telemetry and then there will be the UI thread. I think that is what pretty much everyone is doing so it might work . With this approach i am worried that its gonna be a pain, but what isn’t these days… I don’t really have that much more to say so at least enjoy this screenshot of a pretty much not working app Fun fact: due to how the lib works there is a bug now that you have to move your cursor on the app for it to log data :DDD
Devlog 15 For the last few days, I have been remaking the UI in EGUI and I am enjoying it so far. I’ve been working on the graphs in the graph view and also the sidebar. The sidebar is turning out very well and I am also pretty pleased with the graphs. I have only this for now, so enjoy :D
Devlog 16 Another 6 hours, another devlog… Hi people. For the last 2 days I took a bit of a break from the project. I have played Approximately up with the boys and it was so fun. Y’all should try the game. It has a free demo 😉 But we are not here to talk about games, are we… I am continuing the implementation of the frontend and its coming along nicely. I’ve just noticed one thing, making the UI itself in egui is kinda slow however the state is very easy. Whilst this not being completely ideal i can push trough that. Since the last devlog, I have finished the implementation of the sidebar, and started working on the telemetry page. I have the graphs sorted and now I am working on the top bar. It’s having a couple of issues at the moment but nothing hard to fix really. I am hopefully gonna continue tomorrow and have the page finished by the end of the week. Welp, I guess that’s it for today. Everybody have a beautiful day, and bye bye!
Devlog 17 Hello guys. Its me again :D I am continuing to rewrite the UI into egui. I have completed the Graph view’s UI and now I am moving onto implementing it. One thing I have noticed is just how much more “code efficient” egui is. I understand that I didn’t make the logic behind the code yet but even with that I made the same thing with 3k less lines of code. Here is how the layout edit mode is looking for now.
Devlog 18 - 100h on the project So it’s been a hundred hours huh ? I also can’t believe it! I have also just now finished* the graph view which will be newly called Telemetry (page) Now I will move onto making the car info page previously known as the championship view. I expect this to be very easy!
Devlog 19 Hello hello! Today I have some exciting news. The rewrite is complete That’s right, after about 30 hours of porting this code from tauri into EGUI it is finally finished! So let’s take a look at some stats, shall we ? | | Tauri | EGUI | |----------------------|-------------|--------------- | | Dev time | 80h | 30h | | Lines of code written | 6k | 3k | | Enjoyability | suboptimal | above average | And some perofrmance stuff as well: | | Tauri | EGUI | |----------------------|-------------|--------------- | | Ram idle | ~700Mb | ~150Mb | | CPU % idle | ~5% | ~5% | | FPS under load | ~29fps | stable 60 | Some other perks also include that EGUI doesn’t need a browser installed on the system to work. Overall I think this was a very successful rewrite! I wouldn’t do it again tho Next I will refactor the code a bit, do a bit off the good ’ol cleanup and then get to work on the map feature.
Devlog 20 So I have been polishing up the current features a bit and they are far from done. I am starting to question if i will make it to shipping this app one day :D. Anyway I have fixed numerous bugs, added an settings page and implemnted although very crudly a lap logger. But there is still a lot work that needs to be done. I have also added persistancy so the app remembers your choices. I am almost ready to replace the main branch with the fully rusted version, but like I said more work has to be done to go trough with that! I have probably never shown how the Car info page turned out and IMO it did really well. (The empty space is for inputs. That will be implemented soon!)
Devlog 21 For the past few days I have been working on a new feature. The map page. It is turning out great, however it has a lot of bugs. These will get fix over the next few days. I promise :) There have also been changes made to the lap logging system and some other systems as well. As you can see on the image you select 2 saved laps and can crosscompare the lines you drove. Obviously this is completly useless if you loaded 2 different track like I did here. This will get checked for and prohibited in the future. Next I will add the underlying lap overlay which I will somehow extract from the game or from somewhere else. I don’t really know yet. Well that is it for today. Have a great day and bye bye!
Devlog 22 Hiiiiiiiiiiiii I have some huge news to tell you. I have just made the MOST complex addition yet. And I love it! I have completely overhauled the accessing and managing the telemetry! I have designed a thread safe way to have it run on a separate thread and be accessible from *every place in the app. One unified API for everything! I now store the current lap and the last lap for each of the cars. Tho this takes up a massive 140mb of just floats (in the worst case scenario) I believe its worth the RAM! (Let’s be real, we have saved over 400mb from the tauri implementation so we can now use some of that!) Next I will continue on further implementing these features around the tool. Anyway have a nice day people and bye bye. Some context to that meme: I have a type in my app that is literally Arc<Mutex<[([f64; TelemetryValueType::Max as usize], Option); 104]»
Devlog 23 - More Refactoring Hi! In the past few days I have been making some core architectural changes to the project and I would like to explain them now. Telemetry Provider I have finally decided on how I am gonna handle telemetry in the long term. It’s a pretty simple concept but the implementation is pretty hard. I have one object (the TelemetryProvider struct) that is in charge of getting and managing the telemetry. Right now it logs data from all cars and stores the best, last and current laps. If you wish it can save only your laps or laps of everybody. Each lap is a json file about 500kB - 1MB in size and holds all the data that can be displayed in the app. Notably the position ( so you can load that lap directly into the map page ) and the data displayed by the graphs (so you can load it as a reference there as well.) Pointer to this struct is distributed to pages that need it so they can access it! The provider has a core logging loop that is running on another thread so the whole UI doesn’t have to redraw each time you log new data. (About 60 times a second.) State and Settings Providers Next, I have implemented a StateProvider and an SettingsProvider . These two are basically a drop in replacement of what was stored in the Sidebar and SettingsPage respectively. Difference between the two is that the StateProvider isn’t stored between app restarts. Similarly to how the TelemetryProvider works, each of the pages that need these values get a shared pointer (or an Arc in rust) and can access the values. What’s next Going further I will keep my focus on the map page. Finish it, and then start polishing the app for the final ship! Wish me luck and have a nice day!
Devlog 24 HI! All of the time on this devlog was basically just driving in circles. And I mean that. I have recorded all of the outsides and insides of all tracks in the game to get the data for the map page. It was very teidius and very boring. Like very very boring. There are 31 tracks in LMU (including each layout) and on every one of them I had to do an out lap, the ouside, another out lap and the inside. So 4laps for each. That is about 15min per layout. Yeah it was a long one. And the recordings aren’t perfect either! I will now have to somehow process them all to get them ready for the ship. You can watch the timelapses of this process here if you wish. https://lapse.hackclub.com/timelapse/OQcismBwxbBB https://lapse.hackclub.com/timelapse/le3Lta0RxcUA https://lapse.hackclub.com/timelapse/XRf98OimmUk9 Anyway. Have a nice day!
Devlog 25 I know I have just made a devlog like yesterday but holy s*** the track references work so well. They are practically perfect . Besides the references I have also implemented the delta time between the 2 cars! That has really tied the page together. If I can say so myself, we are getting pretty close to the final ship . There is not much needed to implement. The obvious are bugfixes, and some simple onboarding. But really, that’s it! Everyone who is following or caring about this project can expect a ship in the next week or so. In my final devlog I will also do a writeup on this project as a whole, from the coarse beginnings in Dyoxys, trough Tauri, to the sweet home of EGUI. There will also be a trailer video and a demo for all the raters :D Anyway for now you can have this preview of the map page! Stay tuned!
Devlog 26 Hiiiii For the past few hours I have been working on polishing the app and get it to a shippable state overall. There is still work left to do, but I am getting there. I have set up a simple packager, and a simple script to use it. It automatically compiles the release version of the app and packages it into a windows installer a Debian .deb package and a pacman package. I have also (after like 2 hours of struggeling with it) added an Icon for the app. So now it looks nice!There has been a lot of new bugfixes as well and the app has been tested by my friend so it should be somwhat usable, tho the setup UX should be improved upon. If you wish you can download the app from here: https://github.com/Karlito05/TelemetryLMU/releases/tag/v0.2.3 Well that is all I have for you all today, so have a nice one :)
Devlog 27 For the past few hours I have been polishing the app up. The main you’ll probably see are the onboarding dialogs. A global one pops up when you first launch the app and then one for each page when you first enter them. Another change I have done is that I made the ghosts on the map page be based on time and not data point index.
Devlog 28 Today is gonna be a big day, because I will ship the project. There is a few things left to do tho. Mainly the readme and the demo video! In my last and next devlog I will also make a write up on the story of the whole project so far. Besides that I have yesterday refactored the whole codebase so now there aren’t just 5 monolithic files. I went for a more react like approach with the structure being divided into pages and components. Sadly there isn’t enough time until the ship to touch up on some old UI and UX problems in the edit view of the graphs, neither is there time to add more fields. This will be done in the near future! Overall I am very happy how the app turned out. But this is not the end of the development this is just the end of the stardance journey!
Devlog 29 - The end So this is the last one, huh. Here is the full write up on this project as I promised. Chapter 1 - The beginnings This project started about 3 months ago. I started experimenting with just getting the data and plotting it. Just for fun as an exercise to learn rust. Then I realized that there actually isn’t a proper working telemetry tool that works on linux. So I did some research… and I decided that I am going to make the app in Dioxus. Chapter 2 - The Dioxus era This leads us to the shortest of eras. The Dioxus era. Nothing really happened here and quite frankly I don’t even remember it that much. There aren’t really any git commits because I didn’t have that setup yet. One thing i remember tho is that I couldn’t figure out how to draw the garphs, because Dioxus is based on web technologies but weirdly becuase you are writing HTLM like syntax but in rust. And that was the main reason I decided to switch to Tauri. Chapter 3 - The Tauri era At first Tauri was the best framework ever made for me. That is because I already kinda knew react, it was simple to understand and I could really lean into the split frontend and backend architecture. This sadly proved very inefficient for the graph view which needs to render thousands of points each frame. Since it was too much for the basic HTML canvas I have switched to using WebGL with numerous downsampling techniques. This was just a bandaid fix though. I have also ran into bunch of architectural issues with the whole split frontend and backend thing. Accessing the telemetry data proved to be very difficult and inefficient. I remember that I ran each of the graphs on a separate thread. This was so stupid. I don’t even remember how I could’ve come up with such a stupid idea :D. It just led to memory leaks and threads uncontrollably spinning up and not stopping. I am sure that all of that could’ve been easily avoided with simpler architecture but at that point I was at my lowest point of this project, so I didn’t even have the energy to do it. I also had the state of the frontend so fragmented which didn’t help. And the whole retained mode GUI thing just wasn’t well suited for this kind of app. And that is when I decided to do a complete rewrite in pure rust! Chapter 4 - The sweet EGUI I didn’t know it at the time, but this was the best idea on what to do with the project. I remember that I was very split between just shipping it half done and finishing it just because of how bad the development experience with Tauri was (sorry Tauri devs, it’s not a you thing, it’s a me thing). It took about 30h to fully rewrite the app with EGUI, which looking back at it isn’t too bad. It felt like ages though. It didn’t help that almost none of the work in this “chapter” did AI. Which at the end of the day is better! Although my style of writing EGUI code was let’s say original… I have just put everything into one file and that grew very fast :D. I had like 5 files that were about 800 lines each. That has since luckily changed. (I have adopted more of a React style file structure.) Anyway at the end of the rewrite I kinda started loving EGUI and that hasn’t stopped since. I continued to develop the Map page in EASY which was pretty easy. But then I needed the track limits data for the map page. This was a bit of a roadblock… First I have tried to extract the data directly from the game, however this was inaccurate and the track width was missing entirely. So then I tried to download an up to date image of the top down view of the track and extract the inside and outside line from it and match it to the in game data. This partially worked better, still not great tho. So there was only one option left. And that was to painfully drive each layout of each track by hand. This took almost 7h of just driving in circles. After that it was smooth and buggy sailing until the ship. Everyone who read this, have a beautiful day.
Ships:
Telemetry LMU An application for both Windows and Linux to visualize the telemetry data from Le Mans Ultimate What it does: This application collects, stores, and visualizes data from a racing simulator called Le Mans Ultimate. The main goal: Allow users to analyze their driving and learn from their data through an easy-to-use interface. The requirements: Performance, nice and simple UI, expandability, minimal setup. Results: Main goal: Achieved. (I wouldn’t be shipping this app otherwise) Performance: On average the app uses 4% of CPU and 250Mb of RAM under full load. That is less RAM usage than running Spotify in the background. Nice and simple UI: This is personal preference, however in my opinion I think i succeeded. Expandability: The architecture of the app is very modular so this also isn’t a problem. Setup: On windows there is none (except installing the app), on linux there is one dependency (this is sadly unavoidable.) Some stats: 200+ hours of development time (including the time before Stardance) 250+ commits 6 000+ lines of Rust...
|
1793152635.3407772
|
1793239035.3407772
|
|
15698
|
Health/productivity desk assistant by @zmalkani | Health/productivity desk assistant by @zmalkani | Stardance...
|
zmalkani
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T16:18:21Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a hackpad that will be a desk assistant. To be a good student athlete, balancing schoolwork and practice/nutrition/etc is crucial. This device will have built-in distraction-free pomodoro study sessions, as well as food/water reminders to stay fuelled while focused in on schoolwork.", "repo": "https://github.com/zmalkani/health-productivity-desk-assistant", "demo": ""}]...
|
[{"post_id": 6493, "ts": "2026 [{"post_id": 6493, "ts": "2026-06-10T22:14:30Z", "hours": 2.2722, "text": "I finished my fusion model for the case, as well as my PCB design for my hackpad. Uses 3 switches, an encoder, and an OLED."}]...
|
Title: Health/productivity desk assistant by @zmal Title: Health/productivity desk assistant by @zmalkani | Stardance
Devlogs:
I finished my fusion model for the case, as well as my PCB design for my hackpad. Uses 3 switches, an encoder, and an OLED.
Ships:
I made a hackpad that will be a desk assistant. To be a good student athlete, balancing schoolwork and practice/nutrition/etc is crucial. This device will have built-in distraction-free pomodoro study sessions, as well as food/water reminders to stay fuelled while focused in on schoolwork....
|
1793112696.6094563
|
1793199096.6094563
|
|
15699
|
OpenAtlas by @Jack_ | Stardance
|
Jack_
|
1
|
23.0
|
434
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T07:17:32Z", "hours": 23.0, "multiplier": 19.03, "payout": 434, "blessing": "neutral", "text": "NOTE: This project is NOT available or usable on mobile. Please skip if you are on mobile. OpenAtlas is a personal knowledge management system I built from scratch. It is both a browser extension that lets you save any webpage you’re viewing with one click, and a full web dashboard where you can organize those saved pages into projects, edit them, and manage your account. It’s built with a Node/Express backend, SQLite for storage, a React frontend, and a vanilla JS browser extension, and the entire thing was built and deployed by me with no templates, frameworks, or otherwise used. The biggest challenges were spread across nearly every layer of the stack. Early on, learning how to build a genuinely secure authentication system was the hardest thing: making sure passwords were properly hashed and never stored or exposed in a vulnerable way. SQL and database design caused a surprising number of headaches later on, to the point where I had to rewrite large chunks of the server and database logic because requests weren’t reliably pushing to or pulling from the database. As the project grew past 40+ files, keeping the codebase organized became challenging, with so many imports and figuring out where things lived started to genuinely be difficuly. Deploying the project also lead to a host of problems: learning what actually has to legally exist in a Terms of Service and Privacy Policy, understanding CORS well enough to configure it correctly rather than just disabling protections, and more. Despite all that, I created this project. I would love for you to give me feedback.", "repo": "https://github.com/Jack-Jacobson/OpenAtlas", "demo": "https://openatlas.jackjacobson2011.com/about"}]...
|
[{"post_id": 28751, "ts": "202 [{"post_id": 28751, "ts": "2026-07-15T06:47:20Z", "hours": 1.965, "text": "OVERVIEW: Most of this time was spent adding detailed documentation. I added a table or api endpoints, detailed info on how to run locally, info on security and the tech stack, and put a lot of work in it. My readme is 300 lines long and I am very proud of it. I also made a file tree with info about it which is pretty cool. Also fixed all bugs I could find. NEXT STEPS: Ship! CHALLENGES: Readmes are hard to write. Making tables are really annoying and take forever."}, {"post_id": 28697, "ts": "2026-07-15T03:16:58Z", "hours": 2.1306, "text": "OVERVIEW: This is a major update with a lot of time working that wasn’t tracked. I have made a projects page for each project, involving editing the project, and viewing more details. Ive updated the UI a bit. Ive added a privacy policy and a TOS. And I redid the organization of the project to include pages (e.g openatlas.jackjacobson2011.com/privacy). I am preparing to launch the project soon, and have applied for the extension in the firefox add on store. I also have double checked security and have published the project on my website, where the frontend and backend now live. NEXT STEPS: Write readme Get on other extension stores CHALLENGES: Learning what legally has to be in a TOS and privacy policy Learning about CORS and its best practices Dealing with firefox"}, {"post_id": 27921, "ts": "2026-07-13T21:01:11Z", "hours": 1.3669, "text": "NOTE ABOUT INACTIVITY: I have had some stuff in my life that has kept me from working on this project. It has been 23 days, but this will get back on track. I cant wait to finish this and release it for everyone! OVERVIEW: Added a working inspector, a lot of bug fixes, and functioning projects. NEXT STEPS: AI Project pages Improved UI CHALLENGES: A lot of bugs I have limited cybersecurity knowledge so I had to do a lot of research to ensure my site is secure"}, {"post_id": 12712, "ts": "2026-06-20T19:21:39Z", "hours": 4.8539, "text": "OVERVIEW: Once again, I am very sorry for the long time between devlogs. This came with a suprising amount of bugs that took a suprising amount of time to fix. But, now the other two pages of OpenAtlas work! You can log out and delete your account, save to projects, sort by projects, and have everything secure and deletable at the click of a button. NEXT STEPS: Make projects page more detailed Make project AI-detectable (waiting on more nest resources for that) General UI improvments Add functionality to inspector CHALLENGES: The majority of problems came from SQL. Had to redo a lot of server and database code because it was having so many issues pulling and pushing to the database with my api. Organization is also starting to prove to be a massive problem as this project grows with 40+ files, its hard to keep track of what is where and imports and such"}, {"post_id": 11059, "ts": "2026-06-18T02:58:24Z", "hours": 1.5622, "text": "OVERVIEW: I have regained motivation, ig the backend just kinda bored me with all the problems and such. But also, made the extension actually good! The styling matches the website now, and you can now login to the extension. I also added so the resources are saved with your user in mind, so you can later recall only your resources, which is vital functionality. NEXT STEPS: Add more UI pages Add categorizing CHALLENGES: Using my API and modifying it to have the correct data has been really fun and interesting. Even further learning about SQL has also been fun."}, {"post_id": 10885, "ts": "2026-06-17T20:53:50Z", "hours": 6.2556, "text": "OVERVIEW: First of all, I apologize for the massive amount of time without a devlog. Recently I have felt a bit burnt out with this project and have been spending a lot of time with only a little bit to show for it. However, that being said, a true signup and sign in system has now been implemented! You can sign up with an account, the password is encrypted so I can’t see it, and it is securely stored in a database where you can now log in with those credentials at any time. I have the framework for preferences set up and more. Also, this stardance platform has had massive improvements these last week or two, so thanks everyone at HackClub for your great work! NEXT STEPS: storing user-specific entries, and connecting the extension to specific accounts Further UI pages Setting to delete your data from the database CHALLENGES: The majority of the reason for this taking so long has been learning how to securely do the system, the last thing i want is to release a project where I can see your password, or where the password itself is stored in a vulnerable way, or where personal info is stored. Learning the right way to do this has been amazing This has also required me to expand my sql skills, and learning how to interact with databases better than I have been"}, {"post_id": 8426, "ts": "2026-06-14T00:23:28Z", "hours": 2.4375, "text": "OVERVIEW: Began work on front end! Nothing is functional atm, and it doesn’t look great, but the framework is there. All of the projects and middle stuff are placeholders. It does look workable though. And also I actually figured out newlines?!?!?!?!?! Thanks random guy on slack NEXT STEPS: Improve looks Other pages Improve extension design CHALLENGES: - Variables in css, they should be helpful for later editing of design, and was very interesting to learn. For this devlog I decided to also highlight some challenges that have been persistent throughout the projects, those are below. Error messages. In an effort to improve the opensource-ness of my project, I have been working to include fallbacks and useful error messages. It is not only helpful for my own debugging, but for everyone else trying to use or replicate my project! Proper naming conventions for variables and functions are also part of this effort for me, in the past I just make everything camel case, but recently have been trying to do better with this."}, {"post_id": 7874, "ts": "2026-06-13T04:16:09Z", "hours": 1.0258, "text": "OVERVIEW: Linked server to a database! I am using sqlite to store all data, which was really fun to learn. Whenever the server receives a packet, it pushes it to the database, which updates in real time. Also set up framework to have get requests from the database, so data can be read. Also turns out I lied about being able to use devlogs correctly, my method for newlines in these devlogs just stopped working, its great. NEXT STEPS: Begin webui, I decided to use react after some research because it appears to be much more useful of a skill than just vanilla html, css, and js, which is what I used for webos. Improve extension design CHALLENGES: I learned a lot about databases which was really interesting, however I found it difficult to figure out how bits worked in the database as well as learning how sql requests work It was also difficult to be able to see the database, it isnt a necessity for the project but is really nice so you can actually see the state of the project data"}, {"post_id": 7796, "ts": "2026-06-13T00:39:16Z", "hours": 1.2139, "text": "OVERVIEW: This time was spent creating the basis for what OpenAtlas will become. I created a basic extension, imported it into firefox, and made it communicate with my server. I learned a lot about how extensions work. It should also be backwards compatible with Chrome. I can’t wait to learn about databases. Also, I finally figured out how to properly format devlogs, HackClub please make this easier, just make newlines be newlines, I am begging you! NEXT STEPS: Create and figure out how to use databases Start WebUI Improve extension design CHALLENGES: Learning how to use a manifest in my extension and how important they are Learning how javascript can interact with a browser through various commands Learning how servers work and can be interacted with"}]...
|
Title: OpenAtlas by @Jack_ | Stardance
Devlogs:
O Title: OpenAtlas by @Jack_ | Stardance
Devlogs:
OVERVIEW: This time was spent creating the basis for what OpenAtlas will become. I created a basic extension, imported it into firefox, and made it communicate with my server. I learned a lot about how extensions work. It should also be backwards compatible with Chrome. I can’t wait to learn about databases. Also, I finally figured out how to properly format devlogs, HackClub please make this easier, just make newlines be newlines, I am begging you! NEXT STEPS: Create and figure out how to use databases Start WebUI Improve extension design CHALLENGES: Learning how to use a manifest in my extension and how important they are Learning how javascript can interact with a browser through various commands Learning how servers work and can be interacted with
OVERVIEW: Linked server to a database! I am using sqlite to store all data, which was really fun to learn. Whenever the server receives a packet, it pushes it to the database, which updates in real time. Also set up framework to have get requests from the database, so data can be read. Also turns out I lied about being able to use devlogs correctly, my method for newlines in these devlogs just stopped working, its great. NEXT STEPS: Begin webui, I decided to use react after some research because it appears to be much more useful of a skill than just vanilla html, css, and js, which is what I used for webos. Improve extension design CHALLENGES: I learned a lot about databases which was really interesting, however I found it difficult to figure out how bits worked in the database as well as learning how sql requests work It was also difficult to be able to see the database, it isnt a necessity for the project but is really nice so you can actually see the state of the project data
OVERVIEW: Began work on front end! Nothing is functional atm, and it doesn’t look great, but the framework is there. All of the projects and middle stuff are placeholders. It does look workable though. And also I actually figured out newlines?!?!?!?!?! Thanks random guy on slack NEXT STEPS: Improve looks Other pages Improve extension design CHALLENGES: - Variables in css, they should be helpful for later editing of design, and was very interesting to learn. For this devlog I decided to also highlight some challenges that have been persistent throughout the projects, those are below. Error messages. In an effort to improve the opensource-ness of my project, I have been working to include fallbacks and useful error messages. It is not only helpful for my own debugging, but for everyone else trying to use or replicate my project! Proper naming conventions for variables and functions are also part of this effort for me, in the past I just make everything camel case, but recently have been trying to do better with this.
OVERVIEW: First of all, I apologize for the massive amount of time without a devlog. Recently I have felt a bit burnt out with this project and have been spending a lot of time with only a little bit to show for it. However, that being said, a true signup and sign in system has now been implemented! You can sign up with an account, the password is encrypted so I can’t see it, and it is securely stored in a database where you can now log in with those credentials at any time. I have the framework for preferences set up and more. Also, this stardance platform has had massive improvements these last week or two, so thanks everyone at HackClub for your great work! NEXT STEPS: storing user-specific entries, and connecting the extension to specific accounts Further UI pages Setting to delete your data from the database CHALLENGES: The majority of the reason for this taking so long has been learning how to securely do the system, the last thing i want is to release a project where I can see your password, or where the password itself is stored in a vulnerable way, or where personal info is stored. Learning the right way to do this has been amazing This has also required me to expand my sql skills, and learning how to interact with databases better than I have been
OVERVIEW: I have regained motivation, ig the backend just kinda bored me with all the problems and such. But also, made the extension actually good! The styling matches the website now, and you can now login to the extension. I also added so the resources are saved with your user in mind, so you can later recall only your resources, which is vital functionality. NEXT STEPS: Add more UI pages Add categorizing CHALLENGES: Using my API and modifying it to have the correct data has been really fun and interesting. Even further learning about SQL has also been fun.
OVERVIEW: Once again, I am very sorry for the long time between devlogs. This came with a suprising amount of bugs that took a suprising amount of time to fix. But, now the other two pages of OpenAtlas work! You can log out and delete your account, save to projects, sort by projects, and have everything secure and deletable at the click of a button. NEXT STEPS: Make projects page more detailed Make project AI-detectable (waiting on more nest resources for that) General UI improvments Add functionality to inspector CHALLENGES: The majority of problems came from SQL. Had to redo a lot of server and database code because it was having so many issues pulling and pushing to the database with my api. Organization is also starting to prove to be a massive problem as this project grows with 40+ files, its hard to keep track of what is where and imports and such
NOTE ABOUT INACTIVITY: I have had some stuff in my life that has kept me from working on this project. It has been 23 days, but this will get back on track. I cant wait to finish this and release it for everyone! OVERVIEW: Added a working inspector, a lot of bug fixes, and functioning projects. NEXT STEPS: AI Project pages Improved UI CHALLENGES: A lot of bugs I have limited cybersecurity knowledge so I had to do a lot of research to ensure my site is secure
OVERVIEW: This is a major update with a lot of time working that wasn’t tracked. I have made a projects page for each project, involving editing the project, and viewing more details. Ive updated the UI a bit. Ive added a privacy policy and a TOS. And I redid the organization of the project to include pages (e.g openatlas.jackjacobson2011.com/privacy). I am preparing to launch the project soon, and have applied for the extension in the firefox add on store. I also have double checked security and have published the project on my website, where the frontend and backend now live. NEXT STEPS: Write readme Get on other extension stores CHALLENGES: Learning what legally has to be in a TOS and privacy policy Learning about CORS and its best practices Dealing with firefox
OVERVIEW: Most of this time was spent adding detailed documentation. I added a table or api endpoints, detailed info on how to run locally, info on security and the tech stack, and put a lot of work in it. My readme is 300 lines long and I am very proud of it. I also made a file tree with info about it which is pretty cool. Also fixed all bugs I could find. NEXT STEPS: Ship! CHALLENGES: Readmes are hard to write. Making tables are really annoying and take forever.
Ships:
NOTE: This project is NOT available or usable on mobile. Please skip if you are on mobile. OpenAtlas is a personal knowledge management system I built from scratch. It is both a browser extension that lets you save any webpage you’re viewing with one click, and a full web dashboard where you can organize those saved pages into projects, edit them, and manage your account. It’s built with a Node/Express backend, SQLite for storage, a React frontend, and a vanilla JS browser extension, and the entire thing was built and deployed by me with no templates, frameworks, or otherwise used. The biggest challenges were spread across nearly every layer of the stack. Early on, learning how to build a genuinely secure authentication system was the hardest thing: making sure passwords were properly hashed and never stored or exposed in a vulnerable way. SQL and database design caused a surprising number of headaches later on, to the point where I had to rewrite large chunks of the server and database logic because requests weren’t reliably pushing to or pulling from the database. As the project grew past 40+ files, keeping the codebase organized became challenging, with so many imports and figuring out where things lived started to genuinely be difficuly. Deploying the project also lead to a host of problems: learning what actually has to legally exist in a Terms of Service and Privacy Policy, understanding CORS well enough to configure it correctly rather than just disabling protections, and more. Despite all that, I created this project. I would love for you to give me feedback....
|
1793220626.472539
|
1793307026.472539
|
|
15700
|
AMAZENG by @nael_sify | Stardance
|
nael_sify
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-10T23:27:54Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i’ve made a maze generator but the twist is that i added alghorithms for maze solving that was the most challenging part of the project", "repo": "https://github.com/godofcode1/codingmazes", "demo": "https://godofcode1.itch.io/alghomazics"}]...
|
[{"post_id": 6467, "ts": "2026 [{"post_id": 6467, "ts": "2026-06-10T21:35:37Z", "hours": 0.9903, "text": "Devlog-01 soo i was working on maze generation and solving alghorithms,for them like BFS or DFS and two others they’re the most efficient out of all of them soo that’s what i did for the past here’s some of my results"}]...
|
Title: AMAZENG by @nael_sify | Stardance
Devlogs: Title: AMAZENG by @nael_sify | Stardance
Devlogs:
Devlog-01 soo i was working on maze generation and solving alghorithms,for them like BFS or DFS and two others they’re the most efficient out of all of them soo that’s what i did for the past here’s some of my results
Ships:
i’ve made a maze generator but the twist is that i added alghorithms for maze solving that was the most challenging part of the project...
|
1793141462.2786622
|
1793227862.2786622
|
|
15701
|
Lively by @naver | Stardance
|
naver
|
1
|
2.0
|
14
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T09:25:57Z", "hours": 2.0, "multiplier": 8.58, "payout": 14, "blessing": "neutral", "text": "I made a audio visualizer using python with the Turtle library as visualization. This project sparked up on me when ı saw another example of audio visualization made by Scott W Harden who has a excellent blog on using a image and a html page including javascript to visualize the image without adding a hefty gui. The hardest part of this project was understanding the logic behind the code and writing it in a way so others with no understanding of the code may easily apprehend the code i think i did a half decent job at that . But be informed AI was used to make the code (using code from Scott W Hardens blog and looking through other codes, getting the ideas i like). Since this will be my first time shipping a project be harsh because what will i do if i don’t learn.(Sorry for my English)", "repo": "https://github.com/20Cuneyt10/lively", "demo": "https://20cuneyt10.github.io/lively/"}]...
|
[{"post_id": 7968, "ts": "2026 [{"post_id": 7968, "ts": "2026-06-13T09:12:30Z", "hours": 1.3467, "text": "Added the explanation for the README currently working on adding comments for the code to make it more readable. Image down below is just the web demo you can access through my github profile or just https://20cuneyt10.github.io/lively/ I’m planning to add a variable corner to so you can experiment on the web demo"}, {"post_id": 6890, "ts": "2026-06-11T15:31:00Z", "hours": 0.3358, "text": "This is a project I started after my exams to play around with how Python interacts with sound. I want to implement 3D objects and games into this scope soon so I can at least call it a project, rather than just me learning the fundamentals of sound waves and how an ADC works."}]...
|
Title: Lively by @naver | Stardance
Devlogs:
This Title: Lively by @naver | Stardance
Devlogs:
This is a project I started after my exams to play around with how Python interacts with sound. I want to implement 3D objects and games into this scope soon so I can at least call it a project, rather than just me learning the fundamentals of sound waves and how an ADC works.
Added the explanation for the README currently working on adding comments for the code to make it more readable. Image down below is just the web demo you can access through my github profile or just https://20cuneyt10.github.io/lively/ I’m planning to add a variable corner to so you can experiment on the web demo
Ships:
I made a audio visualizer using python with the Turtle library as visualization. This project sparked up on me when ı saw another example of audio visualization made by Scott W Harden who has a excellent blog on using a image and a html page including javascript to visualize the image without adding a hefty gui. The hardest part of this project was understanding the logic behind the code and writing it in a way so others with no understanding of the code may easily apprehend the code i think i did a half decent job at that . But be informed AI was used to make the code (using code from Scott W Hardens blog and looking through other codes, getting the ideas i like). Since this will be my first time shipping a project be harsh because what will i do if i don’t learn.(Sorry for my English)...
|
1793130823.2966697
|
1793217223.2966697
|
|
15702
|
Is there a launch ? by @ROBIN_ | Stardance
|
ROBIN_
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T21:16:04Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my first big website, Is there a launch is a website where i can see what when and where a launch will be ! I used a api : Launch data via The Space Devs and it work well ! I just had some diffculties about the hero thing but now, it’s fixed !", "repo": "https://github.com/ROBINSLDPRT/Is-there-a-launch-", "demo": "https://is-there-a-launch.netlify.app/"}]...
|
[{"post_id": 45423, "ts": "202 [{"post_id": 45423, "ts": "2026-08-11T21:12:51Z", "hours": 0.3514, "text": "Final version ! Everything is fixed and i even added a research bar ! I’m proud of my hud because i diddn’t really understood the hero thing but i did it ! And on top of that my website is now published !"}, {"post_id": 6475, "ts": "2026-06-10T21:51:01Z", "hours": 0.4422, "text": "Working on the esthetics but after i will do the api for the upcoming launches :)"}]...
|
Title: Is there a launch ? by @ROBIN_ | Stardance
Title: Is there a launch ? by @ROBIN_ | Stardance
Devlogs:
Working on the esthetics but after i will do the api for the upcoming launches :)
Final version ! Everything is fixed and i even added a research bar ! I’m proud of my hud because i diddn’t really understood the hero thing but i did it ! And on top of that my website is now published !
Ships:
This is my first big website, Is there a launch is a website where i can see what when and where a launch will be ! I used a api : Launch data via The Space Devs and it work well ! I just had some diffculties about the hero thing but now, it’s fixed !...
|
1793263766.2232537
|
1793350166.2232537
|
|
15729
|
(i)Pad by @CharlieCatMeow | Stardance
|
CharlieCatMeow
|
1
|
7.0
|
36
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T11:54:15Z", "hours": 7.0, "multiplier": 5.0, "payout": 36, "blessing": "neutral", "text": "(i)Pad The (i)Pad (pun intended) is a Macropad (hence the name) featuring 8 keys, one rotary encoder, 6 LED’s and one OLED display. You can choose between three layers. The layer is shown on the OLED display. The light of the first LED also changes color based on the layer. The other LEDs play a little animation every time you interact with the (i)Pad. It works well. This is my first hardware project so everything was a bit confusing at first. I learned a lot in these 20 hours and had a lot of fun.", "repo": "https://github.com/CharlieTheCatMeow/HackPad", "demo": ""}]...
|
[{"post_id": 58135, "ts": "202 [{"post_id": 58135, "ts": "2026-08-30T14:22:01Z", "hours": 4.3003, "text": "It works! (i)Pad Devlog #7 I did it! I did a thing! Behold, my creation. Anyway, yeah, this is it. In all its glory. It took quite a lot of time to write the firmware but I finally got one I’m happy with. It has 4 layers: Base: Playback things, also open Spotify Layer 1: A bunch of function keys Layer 2: Opening task manager and other stuff that may be useful Layer 3: Resizing windows and stuff. The OLED display It just displays the current layer. Also a small box that bounces around. The LEDs The first LED indicates the layer. The rest of them play a wave animation every time a key is pressed. CAD designing The knob was quite annoying to print because of tolerances and stuff but after 4 attempts it works now. Fusion360 was really laggy while designing the knob for some reason. I also finally figured out why the plate wasn’t working, I fixed that now. Took me ages. Soldering Turns out soldering wasn’t that difficult. I made plenty of mistakes but it worked in the end."}, {"post_id": 56809, "ts": "2026-08-28T18:49:48Z", "hours": 2.9386, "text": "(i)Pad Devlog #6 It was in fact not the final design. While creating the CAD model, I forgot to account for the pin headers that would go between the OLED screen and the PCB. I tried desperately to fix clearance issues and I think I now have a solution that works (kinda) It still collides with the screen a bit but i can bend the screen back. I hope that’s fine. I cannot figure out where the heck the screen is hitting the plate. I had to reprint the plate 3 times and it still only semi-works."}, {"post_id": 8626, "ts": "2026-06-14T10:42:55Z", "hours": 2.22, "text": "Devlog #5: Final design finished (I hope) Finally finished my own Macropad! What is included: 8 keys one rotary encoder one OLED display 6 LEDs Took me 13 hours in total and I am very happy with the result. I can hopefully get this approved and shipped. I learned a lot about designing a PCB and how electronics work. KiCAD was really confusing at first but I figured it out."}, {"post_id": 8119, "ts": "2026-06-13T15:34:05Z", "hours": 2.1881, "text": "Devlog #4: Starting my final design This is supposed to become my last design. I added 8 LEDs in total as well as an OLED screen. The LED wiring was really cramped, I hope I can fix that somehow. Everything else went really well. The design is not yet finished, I still have to change the PCB a bit, finish the shell and create the firmware."}, {"post_id": 8025, "ts": "2026-06-13T12:00:20Z", "hours": 4.5722, "text": "Devlog #3: Remade my design and added some stuff I realized that I may have messed up the case. I decided to completely remake my Hackpad. I also added some things: Rotary encoder Two LEDs Sandwich mount Things I struggled with: the firmware (I spent half an hour trying to fix an error and realized I was editing the wrong file) making the assembly in Fusion I got the hang of KiCAD and am able to smoothly produce designs. I learned some new things about KiCAD along the way. Took too long for my liking though…"}, {"post_id": 7602, "ts": "2026-06-12T18:27:54Z", "hours": 3.0783, "text": "Devlog #2: Finally finished a design Made my own case, PCB and firmware I finished my second Hackpad. It took quite some time. Getting the hang of KiCAD was pretty difficult. What I learned: turning the PCB into a 3d model Building a case for the Hackpad Creating firmware using QMK If anyone could review this and give me some feedback (first time doing this) it would be greatly appreciated :D Edit: What I just realized: I designed the case the wrong way, so I’ll have to redesign it. (I didn’t know what I was doing and made a plateless mount)"}, {"post_id": 6973, "ts": "2026-06-11T18:17:38Z", "hours": 1.1111, "text": "Devlog #1: First Hackpad (getting the hang of it) This is my first devlog (and project) ever :D I decided to start with the Hackpad as it seemed the most interesting. I had some knowledge in Fusion360 so it was pretty useful. Took me longer than I would like, but I got through the guide. I’m still kind of confused witht he KiCAD software, so that needs working on. I learned a lot about how GitHub works (first time as well) and creating PCB’s. A very fun first hour, hope I can create some more Macropads in the future"}]...
|
Title: (i)Pad by @CharlieCatMeow | Stardance
Devl Title: (i)Pad by @CharlieCatMeow | Stardance
Devlogs:
Devlog #1: First Hackpad (getting the hang of it) This is my first devlog (and project) ever :D I decided to start with the Hackpad as it seemed the most interesting. I had some knowledge in Fusion360 so it was pretty useful. Took me longer than I would like, but I got through the guide. I’m still kind of confused witht he KiCAD software, so that needs working on. I learned a lot about how GitHub works (first time as well) and creating PCB’s. A very fun first hour, hope I can create some more Macropads in the future
Devlog #2: Finally finished a design Made my own case, PCB and firmware I finished my second Hackpad. It took quite some time. Getting the hang of KiCAD was pretty difficult. What I learned: turning the PCB into a 3d model Building a case for the Hackpad Creating firmware using QMK If anyone could review this and give me some feedback (first time doing this) it would be greatly appreciated :D Edit: What I just realized: I designed the case the wrong way, so I’ll have to redesign it. (I didn’t know what I was doing and made a plateless mount)
Devlog #3: Remade my design and added some stuff I realized that I may have messed up the case. I decided to completely remake my Hackpad. I also added some things: Rotary encoder Two LEDs Sandwich mount Things I struggled with: the firmware (I spent half an hour trying to fix an error and realized I was editing the wrong file) making the assembly in Fusion I got the hang of KiCAD and am able to smoothly produce designs. I learned some new things about KiCAD along the way. Took too long for my liking though…
Devlog #4: Starting my final design This is supposed to become my last design. I added 8 LEDs in total as well as an OLED screen. The LED wiring was really cramped, I hope I can fix that somehow. Everything else went really well. The design is not yet finished, I still have to change the PCB a bit, finish the shell and create the firmware.
Devlog #5: Final design finished (I hope) Finally finished my own Macropad! What is included: 8 keys one rotary encoder one OLED display 6 LEDs Took me 13 hours in total and I am very happy with the result. I can hopefully get this approved and shipped. I learned a lot about designing a PCB and how electronics work. KiCAD was really confusing at first but I figured it out.
(i)Pad Devlog #6 It was in fact not the final design. While creating the CAD model, I forgot to account for the pin headers that would go between the OLED screen and the PCB. I tried desperately to fix clearance issues and I think I now have a solution that works (kinda) It still collides with the screen a bit but i can bend the screen back. I hope that’s fine. I cannot figure out where the heck the screen is hitting the plate. I had to reprint the plate 3 times and it still only semi-works.
It works! (i)Pad Devlog #7 I did it! I did a thing! Behold, my creation. Anyway, yeah, this is it. In all its glory. It took quite a lot of time to write the firmware but I finally got one I’m happy with. It has 4 layers: Base: Playback things, also open Spotify Layer 1: A bunch of function keys Layer 2: Opening task manager and other stuff that may be useful Layer 3: Resizing windows and stuff. The OLED display It just displays the current layer. Also a small box that bounces around. The LEDs The first LED indicates the layer. The rest of them play a wave animation every time a key is pressed. CAD designing The knob was quite annoying to print because of tolerances and stuff but after 4 attempts it works now. Fusion360 was really laggy while designing the knob for some reason. I also finally figured out why the plate wasn’t working, I fixed that now. Took me ages. Soldering Turns out soldering wasn’t that difficult. I made plenty of mistakes but it worked in the end.
Ships:
(i)Pad The (i)Pad (pun intended) is a Macropad (hence the name) featuring 8 keys, one rotary encoder, 6 LED’s and one OLED display. You can choose between three layers. The layer is shown on the OLED display. The light of the first LED also changes color based on the layer. The other LEDs play a little animation every time you interact with the (i)Pad. It works well. This is my first hardware project so everything was a bit confusing at first. I learned a lot in these 20 hours and had a lot of fun....
|
1793242426.9539707
|
1793328826.9539707
|
|
15747
|
SAT Math Tutoring Help Extension by @charliem | St SAT Math Tutoring Help Extension by @charliem | Stardance...
|
charliem
|
1
|
0.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T14:55:07Z", "hours": 0.0, "multiplier": 8.58, "payout": 9, "blessing": "neutral", "text": "Note: even thoughit says it only took 1h i moved around folders and really took closer to 5h, look at screenshot. What I made I built the Math SAT Browser Extension Tutor (with cursor), a lightweight in-browser assistant that provides real-time AI-driven guidance on any SAT practice site. By running models entirely locally, the tool allows students to scan an infinite number of math problems without encountering subscription barriers or API rate limits. Also provides a cool plant that grows with you as you study to encourage staying focused. After study session khan academy links to topics scanned will be provided for further help. What was challenging LaTeX Corruption: Local models frequently produced “glued” prose or broken LaTeX syntax which required extensive regex-based repair modules to normalize text and equation formatting. What we’re proud of User Engagement: The integration of session-based tracking and “plant health” focus mechanics provides a tangible and gamified incentive for students to stay on task. Performance: By utilizing local Ollama models with a multi-stage extraction and cleanup process, we achieved a high-speed tutoring experience that functions locally without heavy reliance on external API latency. How to test the project To test the extension, you will need to clone the repository from the GitHub link. Local Setup: Since the extension runs locally, ensure you have Ollama installed and the qwen2.5vl:7b and qwen2.5:7b models pulled. Then navigate to any SAT practice site of your choice, open the extension sidebar, and use the scan feature on a math problem to initiate the AI tutoring session.", "repo": "https://github.com/Cm30V/satmathextension", "demo": "https://github.com/Cm30V/satmathextension/releases/tag/zip%2Fcrx"}]...
|
[{"post_id": 9574, "ts": "2026 [{"post_id": 9574, "ts": "2026-06-15T23:03:24Z", "hours": 0.0, "text": "Added cleaning up of AI output to handle corrupt REGEX. Scraped Khan Academy’s website so after you finish your study session the AI gives you links to topics you needed help on"}]...
|
Title: SAT Math Tutoring Help Extension by @charli Title: SAT Math Tutoring Help Extension by @charliem | Stardance
Devlogs:
Added cleaning up of AI output to handle corrupt REGEX. Scraped Khan Academy’s website so after you finish your study session the AI gives you links to topics you needed help on
Ships:
Note: even thoughit says it only took 1h i moved around folders and really took closer to 5h, look at screenshot. What I made I built the Math SAT Browser Extension Tutor (with cursor), a lightweight in-browser assistant that provides real-time AI-driven guidance on any SAT practice site. By running models entirely locally, the tool allows students to scan an infinite number of math problems without encountering subscription barriers or API rate limits. Also provides a cool plant that grows with you as you study to encourage staying focused. After study session khan academy links to topics scanned will be provided for further help. What was challenging LaTeX Corruption: Local models frequently produced “glued” prose or broken LaTeX syntax which required extensive regex-based repair modules to normalize text and equation formatting. What we’re proud of User Engagement: The integration of session-based tracking and “plant health” focus mechanics provides a tangible and gamified incentive for students to stay on task. Performance: By utilizing local Ollama models with a multi-stage extraction and cleanup process, we achieved a high-speed tutoring experience that functions locally without heavy reliance on external API latency. How to test the project To test the extension, you will need to clone the repository from the GitHub link. Local Setup: Since the extension runs locally, ensure you have Ollama installed and the qwen2.5vl:7b and qwen2.5:7b models pulled. Then navigate to any SAT practice site of your choice, open the extension sidebar, and use the scan feature on a math problem to initiate the AI tutoring session....
|
1793249577.8138182
|
1793335977.8138182
|
|
15765
|
Quorumly by @anay_208 | Stardance
|
anay_208
|
1
|
8.31
|
106
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T22:06:00Z", "hours": 7.0, "multiplier": 15.9, "payout": 106, "blessing": "neutral", "text": "I made an open-source alternative to when2meet, with a better UI and no ads at all. How it works, you create a meeting, send the link to your team members, and they can select the time they’re available at. you can use it to find the best time for meeting! I’m proud of being able to actually ship a project after long time, with a UI which I find quite satisfying. The hardest part I’d say is the UI only, I spent significant time on UI, Its probably not perfect, but one of the best I’ve ever got. To test my project, just visit: https://quorumly.vercel.app/ , and you can quickly test it.", "repo": "https://github.com/anay-208/quorumly", "demo": "https://quorumly.vercel.app/"}]...
|
[{"post_id": 27005, "ts": "202 [{"post_id": 27005, "ts": "2026-07-12T04:31:35Z", "hours": 1.3136, "text": "The project is now open for contributions: https://github.com/anay-208/quorumly"}, {"post_id": 17189, "ts": "2026-06-27T21:58:08Z", "hours": 0.3472, "text": "after bug fixes, I’m finally done with first version of the app"}, {"post_id": 17144, "ts": "2026-06-27T20:38:08Z", "hours": 0.3786, "text": "After using some AI with Figma Screenshots, I was able to Cook Something!"}, {"post_id": 17130, "ts": "2026-06-27T20:11:44Z", "hours": 1.3144, "text": "So I did spend time trying to make things without figma and it didn’t work out well(AI really does’nt help that well)"}, {"post_id": 13172, "ts": "2026-06-21T15:40:34Z", "hours": 0.6842, "text": "So, I finally completed the home page. Now the only thing pending is using better-auth anonymous authentication or smth similar to allow users to select their availability"}, {"post_id": 9899, "ts": "2026-06-16T12:01:25Z", "hours": 2.3336, "text": "After Prompting AI for some improvements, and improving the overall UI and UX, Home page is completed! Its not live yet in prod, but PR created: https://github.com/anay-208/quorumly/pull/1"}, {"post_id": 7667, "ts": "2026-06-12T20:15:06Z", "hours": 0.7083, "text": "So I manage to code the UI for desktop too, button is non functional and it seems a bit weird, the sizes and all but now I’m working on fixing it, and deploying my app"}, {"post_id": 7439, "ts": "2026-06-12T11:51:54Z", "hours": 0.5231, "text": "Coded UI for mobile. Just btns and some final touches are left"}, {"post_id": 7420, "ts": "2026-06-12T11:13:07Z", "hours": 0.2733, "text": "I changed the UI a bit to improve UX. Why add friction with an extra button when they can just simply do it here"}, {"post_id": 6419, "ts": "2026-06-10T19:56:01Z", "hours": 0.2569, "text": "Created The figma design for the hero section. Looking forward for your feedback."}]...
|
Title: Quorumly by @anay_208 | Stardance
Devlogs: Title: Quorumly by @anay_208 | Stardance
Devlogs:
Created The figma design for the hero section. Looking forward for your feedback.
I changed the UI a bit to improve UX. Why add friction with an extra button when they can just simply do it here
Coded UI for mobile. Just btns and some final touches are left
So I manage to code the UI for desktop too, button is non functional and it seems a bit weird, the sizes and all but now I’m working on fixing it, and deploying my app
After Prompting AI for some improvements, and improving the overall UI and UX, Home page is completed! Its not live yet in prod, but PR created: https://github.com/anay-208/quorumly/pull/1
So, I finally completed the home page. Now the only thing pending is using better-auth anonymous authentication or smth similar to allow users to select their availability
So I did spend time trying to make things without figma and it didn’t work out well(AI really does’nt help that well)
After using some AI with Figma Screenshots, I was able to Cook Something!
after bug fixes, I’m finally done with first version of the app
The project is now open for contributions: https://github.com/anay-208/quorumly
Ships:
I made an open-source alternative to when2meet, with a better UI and no ads at all. How it works, you create a meeting, send the link to your team members, and they can select the time they’re available at. you can use it to find the best time for meeting! I’m proud of being able to actually ship a project after long time, with a UI which I find quite satisfying. The hardest part I’d say is the UI only, I spent significant time on UI, Its probably not perfect, but one of the best I’ve ever got. To test my project, just visit: https://quorumly.vercel.app/ , and you can quickly test it....
|
1793267577.8490534
|
1793353977.8490534
|
|
15787
|
Maglev Train by @ABN | Stardance
|
ABN
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T17:46:46Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I designed and made a maglev train at home, using simple fridge magnets to make it float above the track. The biggest challenge was getting the train to float even while not in motion, which required redesigns to add as much magnetic repulsion as possible. I am proud of making a functional design as a CAD beginner and being able to turn my half-formed ideas into something tangible. If you plan on printing these parts yourself, check the Github for magnet and STL info!", "repo": "https://github.com/abn3000/Maglev-Train", "demo": ""}]...
|
[{"post_id": 14512, "ts": "202 [{"post_id": 14512, "ts": "2026-06-23T17:31:40Z", "hours": 0.4264, "text": "It can fly! I updated the Onshape and reprinted the train with five magnet holes and a new spacing pattern. This means that, at all times, there is at least three magnets’ worth of propulsion. A big improvement from the previous zero, wouldn’t you say? You can see in the image below that the ends are elevated above the track. When hit with the launcher, it maintains its inertia to spin around at a stable height."}, {"post_id": 14035, "ts": "2026-06-23T00:36:48Z", "hours": 0.3333, "text": "Printed the train, but it won’t float! I’ve made a severe and continuous lapse in my judgement. The train’s magnet holes are spaced the same as the track… which means each magnet of the train can rest in the spaces between the magnets on the track. So if I launch it (using the handy popsicle stick launcher pictured on the right), it will seem to float while in motion, but then abruptly stop. Back to the CADing board. ✌"}, {"post_id": 12787, "ts": "2026-06-20T22:11:36Z", "hours": 0.2836, "text": "Want to try a maglev demo? My CAD for the train now has a working public simulation! The link to the Onshape is here; try dragging the train around: https://cad.onshape.com/documents/ca7f9dd15de26119312515e9/w/9644ee87d97acfb09d4b386d/e/605830fbe88ced165cf9d9ec?renderMode=0&uiState=6a370fd0e043ec08ef4c39ab Let me know what you think! It’s time to get printing…"}, {"post_id": 12139, "ts": "2026-06-19T20:46:04Z", "hours": 0.4836, "text": "I’m starting out with an Onshape CAD for my Maglev Train. I don’t really have a fully fledged idea here, so I might need to put some pen to paper in my next devlog! I’m a beginner at computer aided design, and just got started with my school’s robotics club, so this might be a bit difficult for me. There is a large community of people who are willing to help, though I am not affiliated with any design related servers as part of their administration or promotional teams. I just think they’re useful resources for anyone interested. I hope to totally rework the CAD and get everything functional and ready to go soon enough. Catch you later!"}]...
|
Title: Maglev Train by @ABN | Stardance
Devlogs:
Title: Maglev Train by @ABN | Stardance
Devlogs:
I’m starting out with an Onshape CAD for my Maglev Train. I don’t really have a fully fledged idea here, so I might need to put some pen to paper in my next devlog! I’m a beginner at computer aided design, and just got started with my school’s robotics club, so this might be a bit difficult for me. There is a large community of people who are willing to help, though I am not affiliated with any design related servers as part of their administration or promotional teams. I just think they’re useful resources for anyone interested. I hope to totally rework the CAD and get everything functional and ready to go soon enough. Catch you later!
Want to try a maglev demo? My CAD for the train now has a working public simulation! The link to the Onshape is here; try dragging the train around: https://cad.onshape.com/documents/ca7f9dd15de26119312515e9/w/9644ee87d97acfb09d4b386d/e/605830fbe88ced165cf9d9ec?renderMode=0&uiState=6a370fd0e043ec08ef4c39ab Let me know what you think! It’s time to get printing…
Printed the train, but it won’t float! I’ve made a severe and continuous lapse in my judgement. The train’s magnet holes are spaced the same as the track… which means each magnet of the train can rest in the spaces between the magnets on the track. So if I launch it (using the handy popsicle stick launcher pictured on the right), it will seem to float while in motion, but then abruptly stop. Back to the CADing board. ✌
It can fly! I updated the Onshape and reprinted the train with five magnet holes and a new spacing pattern. This means that, at all times, there is at least three magnets’ worth of propulsion. A big improvement from the previous zero, wouldn’t you say? You can see in the image below that the ends are elevated above the track. When hit with the launcher, it maintains its inertia to spin around at a stable height.
Ships:
I designed and made a maglev train at home, using simple fridge magnets to make it float above the track. The biggest challenge was getting the train to float even while not in motion, which required redesigns to add as much magnetic repulsion as possible. I am proud of making a functional design as a CAD beginner and being able to turn my half-formed ideas into something tangible. If you plan on printing these parts yourself, check the Github for magnet and STL info!...
|
1793116109.0877938
|
1793202509.0877938
|
|
15796
|
blowupthenoobs' website by @blowupthenoobs | S blowupthenoobs' website by @blowupthenoobs | Stardance...
|
blowupthenoobs
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T18:48:48Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Got the main stuff laid out on the home page. Still need to integrate some stuff like the art portfolio widgets and whatnot, but that’s going to come in when my google drive clone thingy is further along in completion. Other stuff like the discord widget and nuggets of wisdom are intended to be further worked on, but it is in a good state for right now I think.", "repo": "https://github.com/blowupthenoobs/PortfolioSite", "demo": "https://blowupthenoobs.dev/"}]...
|
[{"post_id": 63382, "ts": "202 [{"post_id": 63382, "ts": "2026-09-07T05:28:55Z", "hours": 0.995, "text": "Finished the basic mockup and such with a couple working features, so I should hopefully be able to qualify for the pulse mission."}, {"post_id": 63360, "ts": "2026-09-07T04:23:56Z", "hours": 0.9889, "text": "Almost finished the mockup. Added random scrolling thing cuz I saw it in someone else’s personal site, lol (It was a thing I was thinking of putting in anyways though. Scrolling’s a nice touch for it tho.)"}, {"post_id": 63337, "ts": "2026-09-07T03:19:28Z", "hours": 1.8997, "text": "Added a music detection widget (powered by a discord-based api)"}, {"post_id": 63215, "ts": "2026-09-06T21:57:32Z", "hours": 2.135, "text": "Finally got to actually working on the main page, lol."}]...
|
Title: blowupthenoobs' website by @blowuptheno Title: blowupthenoobs' website by @blowupthenoobs | Stardance
Devlogs:
Finally got to actually working on the main page, lol.
Added a music detection widget (powered by a discord-based api)
Almost finished the mockup. Added random scrolling thing cuz I saw it in someone else’s personal site, lol (It was a thing I was thinking of putting in anyways though. Scrolling’s a nice touch for it tho.)
Finished the basic mockup and such with a couple working features, so I should hopefully be able to qualify for the pulse mission.
Ships:
Got the main stuff laid out on the home page. Still need to integrate some stuff like the art portfolio widgets and whatnot, but that’s going to come in when my google drive clone thingy is further along in completion. Other stuff like the discord widget and nuggets of wisdom are intended to be further worked on, but it is in a good state for right now I think....
|
1793148444.4276977
|
1793234844.4276977
|
|
15804
|
Crunchyroll Multi Sub by @AndyNoob | Stardance
|
AndyNoob
|
1
|
46.9
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T22:15:32Z", "hours": 46.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Alright, it’s been a pretty long ride, so let me try to sum this up. - The idea for this extension sprang forth when I was trying to watch Frieren. For context, on Crunchyroll dubbed shows, there are two types of subtitles (for the most part, AD subs also exist but are very uncommon), closed caption and on screen translation subtitles: closed caption captures only character dialogues (generally), whereas the on screen translation subs translate signs and such on screen, typically using ASS subtitles (so fancy typesetting texts). - As it so turned out, you can’t pick both subtitles at the same time, which makes it really annoying for me to hear what the dialogues are saying if there are a lot of sound effects and BGM. So, I decided to look into how I can render both types of subtitles. - After a long course of development, and many hurdles (mostly related to Crunchyroll’s internal API being very not external developer friendly, I wonder why…), I was able to ship this little extension, which currently has about 200 or so active users? - -TLDR: Crunchyroll default subtitle system sucks so I made it better. Also if you don’t have Crunchyroll just watch this slightly outdated demo video: https://www.youtube.com/watch?v=C6fvmeJ0SoM", "repo": "https://github.com/AndyNoob/crunchyroll-dual-subs", "demo": "https://chromewebstore.google.com/detail/crunchyroll-dual-subs/mahcmkjllaabldhminilhldfiickigmi"}]...
|
[{"post_id": 79415, "ts": "202 [{"post_id": 79415, "ts": "2026-10-13T21:22:25Z", "hours": 0.9047, "text": "NEW FEATURE ALERT - Due to popular requests (one person on Github who opened an issue), I have added a spanking new feature to move subtitles up and down. LIFE CHANGING, I know. - Rahaha, more stuff incoming. Also the more I work on tis the more I realize my code sucks."}, {"post_id": 72422, "ts": "2026-09-22T22:05:42Z", "hours": 1.7556, "text": "Yoo - Kind of forgot to post this one. Basically, I just made it so the subtitles loaded from the original audio are marked as [original] , you can pick either or. - That’s about it. Yay"}, {"post_id": 39304, "ts": "2026-08-02T06:02:52Z", "hours": 9.5822, "text": "Been a minute. - Let’s see what I worked on… Mostly fixing minor issues. LIke subtitles being unmovable. And after that fixed it teleporting to Narnia when being moved. While I was doing that, I actually finished the subtitle editor in last devlog that I actually didn’t finish. - Aside from the UI, there’s also numerous minor bugs that sometimes causes the side bar to malfunction. And some that causes the extension to not load. All that good stuff. - The biggest update, however, is that the extension, using a very, very sneaky method, now loads additional subtitles for dubbed episodes. Typically, the majority of subtitles are made for the original audio language (Japanese mostly), and they are usually drag-and-drop ready for other audio languages. The idea is nothing new, but I had to brainstorm a new way of achieving that. - Essentially, the extension “mimics” the Crunchyroll player by making a stream request to the original audio language, and capturing the subtitles. All before the actual player starts its own stream request. This way, we don’t trigger the concurrent stream limit. Pretty neat! - Also added a on/off switch because you never know when this might break. Peak CSS right here haha."}, {"post_id": 33250, "ts": "2026-07-23T00:31:38Z", "hours": 7.1061, "text": "Worked on a bunch of stuff, mostly random issues: extension broken on Opera, extension randomly not updating subtitles, features of extension randomly bricking if you do a specific set of stuff (like adding and deleting masks really fast). - Other than that, I added a new subtitle style editor. I thought it was gonna be a 30min quick change. And then it ended up being like 4 hours long. The font selector is so damn annoying to add because there’s really only one way to do it, and that’s through Google. And of course it’s going to be a pain in the rear when it’s Google. - Whatever, at least it looks good."}, {"post_id": 29868, "ts": "2026-07-17T00:59:24Z", "hours": 3.2006, "text": "Fixed a bunnnnnch of issues as an aftermath of the last devlog… Took a minute but I finally released 0.12.0 (and immediately realized there’s more bugs. Also cleaned up the README and made it look real fancy."}, {"post_id": 28206, "ts": "2026-07-14T10:49:37Z", "hours": 7.2869, "text": "Ok, it’s been a minute, so let me go over the changes. (also i finally figured out you need to shift + enter to do new line bruh) Firstly, in preparation for the subtitle masking feature, I changed the extension popup to be a side bar/panel instead. This way, you can keep it open while you interact with the page. Secondly, I swapped the old “Reset subtitle position” button (which didn’t even work LMAO) with the new “Edit subtitle configuration” button. When you click it, a new section expands. This is where my other project (move-it) plays in! (see video). When you add a mask, it will block out subtitles using the CSS clip-path property, which is pretty neat! I also fixed a bunch of random issues along the way, so yay!"}, {"post_id": 25032, "ts": "2026-07-08T23:35:26Z", "hours": 6.48, "text": "Forgot to post devlogs ngl… Anyways, I fixed a bunch of weird bugs and compatibility issues with other extensions and userscripts. And then, I spent a few hours restyling the scoped options menu. Look at it moveee- Anyways, the moving part is made with a see through ::after element that is moved using the CSS transform: translateX element. I am able to move it programmatically by changing a CSS property/variable that translateX reads from. And then, I slapped a fancy transition on there. Works like a charm! (I had considered doing slide effect on the actual options, but that seemed like too much work haha.)"}, {"post_id": 10370, "ts": "2026-06-17T01:40:31Z", "hours": 3.7725, "text": "Working on the prerequisite parts of implementing a subtitle masking feature (hide subtitle base on defined areas). Also released 0.11.0 of the extension. Out on chrome already but firefox will probably be another month :sigh:"}, {"post_id": 8287, "ts": "2026-06-13T19:39:02Z", "hours": 0.7133, "text": "Nice… negative notes. The users’ll absolutely adore this."}, {"post_id": 7889, "ts": "2026-06-13T05:08:58Z", "hours": 3.8869, "text": "IT MOVESSS!! What’s happening here is that the extension loads JSON data from an unlisted Gist and reads the developer notes that I put down every 5 hours. Once it does, it populates the popup with those notes. The “1 new notes” thing isn’t actively updated yet, so I’ll implement that next. Just need to keep track of opened notes using their slug. Only took 4 hrs 🫠"}, {"post_id": 7250, "ts": "2026-06-12T02:53:56Z", "hours": 2.3333, "text": "Currently trying to add a dev note/changelog system by loading a gist that I have loaded on my system as a git repo and then symlinked as a file in my actual project. I actually did not know you could do that, learned it from Claude ha! Anyways, adding a new section to the popup menu, so I had to make some space. My solution: SMOOOOTH drop down. Note how the border-radius on the bottom of the overlay settings change from 0 to rounded at different speed depending on if the drop down is retracting vs. extending. CSS is a pain in the rear even when AI is helping…"}]...
|
Title: Crunchyroll Multi Sub by @AndyNoob | Starda Title: Crunchyroll Multi Sub by @AndyNoob | Stardance
Devlogs:
Currently trying to add a dev note/changelog system by loading a gist that I have loaded on my system as a git repo and then symlinked as a file in my actual project. I actually did not know you could do that, learned it from Claude ha! Anyways, adding a new section to the popup menu, so I had to make some space. My solution: SMOOOOTH drop down. Note how the border-radius on the bottom of the overlay settings change from 0 to rounded at different speed depending on if the drop down is retracting vs. extending. CSS is a pain in the rear even when AI is helping…
IT MOVESSS!! What’s happening here is that the extension loads JSON data from an unlisted Gist and reads the developer notes that I put down every 5 hours. Once it does, it populates the popup with those notes. The “1 new notes” thing isn’t actively updated yet, so I’ll implement that next. Just need to keep track of opened notes using their slug. Only took 4 hrs 🫠
Nice… negative notes. The users’ll absolutely adore this.
Working on the prerequisite parts of implementing a subtitle masking feature (hide subtitle base on defined areas). Also released 0.11.0 of the extension. Out on chrome already but firefox will probably be another month :sigh:
Forgot to post devlogs ngl… Anyways, I fixed a bunch of weird bugs and compatibility issues with other extensions and userscripts. And then, I spent a few hours restyling the scoped options menu. Look at it moveee- Anyways, the moving part is made with a see through ::after element that is moved using the CSS transform: translateX element. I am able to move it programmatically by changing a CSS property/variable that translateX reads from. And then, I slapped a fancy transition on there. Works like a charm! (I had considered doing slide effect on the actual options, but that seemed like too much work haha.)
Ok, it’s been a minute, so let me go over the changes. (also i finally figured out you need to shift + enter to do new line bruh) Firstly, in preparation for the subtitle masking feature, I changed the extension popup to be a side bar/panel instead. This way, you can keep it open while you interact with the page. Secondly, I swapped the old “Reset subtitle position” button (which didn’t even work LMAO) with the new “Edit subtitle configuration” button. When you click it, a new section expands. This is where my other project (move-it) plays in! (see video). When you add a mask, it will block out subtitles using the CSS clip-path property, which is pretty neat! I also fixed a bunch of random issues along the way, so yay!
Fixed a bunnnnnch of issues as an aftermath of the last devlog… Took a minute but I finally released 0.12.0 (and immediately realized there’s more bugs. Also cleaned up the README and made it look real fancy.
Worked on a bunch of stuff, mostly random issues: extension broken on Opera, extension randomly not updating subtitles, features of extension randomly bricking if you do a specific set of stuff (like adding and deleting masks really fast). - Other than that, I added a new subtitle style editor. I thought it was gonna be a 30min quick change. And then it ended up being like 4 hours long. The font selector is so damn annoying to add because there’s really only one way to do it, and that’s through Google. And of course it’s going to be a pain in the rear when it’s Google. - Whatever, at least it looks good.
Been a minute. - Let’s see what I worked on… Mostly fixing minor issues. LIke subtitles being unmovable. And after that fixed it teleporting to Narnia when being moved. While I was doing that, I actually finished the subtitle editor in last devlog that I actually didn’t finish. - Aside from the UI, there’s also numerous minor bugs that sometimes causes the side bar to malfunction. And some that causes the extension to not load. All that good stuff. - The biggest update, however, is that the extension, using a very, very sneaky method, now loads additional subtitles for dubbed episodes. Typically, the majority of subtitles are made for the original audio language (Japanese mostly), and they are usually drag-and-drop ready for other audio languages. The idea is nothing new, but I had to brainstorm a new way of achieving that. - Essentially, the extension “mimics” the Crunchyroll player by making a stream request to the original audio language, and capturing the subtitles. All before the actual player starts its own stream request. This way, we don’t trigger the concurrent stream limit. Pretty neat! - Also added a on/off switch because you never know when this might break. Peak CSS right here haha.
Yoo - Kind of forgot to post this one. Basically, I just made it so the subtitles loaded from the original audio are marked as [original] , you can pick either or. - That’s about it. Yay
NEW FEATURE ALERT - Due to popular requests (one person on Github who opened an issue), I have added a spanking new feature to move subtitles up and down. LIFE CHANGING, I know. - Rahaha, more stuff incoming. Also the more I work on tis the more I realize my code sucks.
Ships:
Alright, it’s been a pretty long ride, so let me try to sum this up. - The idea for this extension sprang forth when I was trying to watch Frieren. For context, on Crunchyroll dubbed shows, there are two types of subtitles (for the most part, AD subs also exist but are very uncommon), closed caption and on screen translation subtitles: closed caption captures only character dialogues (generally), whereas the on screen translation subs translate signs and such on screen, typically using ASS subtitles (so fancy typesetting texts). - As it so turned out, you can’t pick both subtitles at the same time, which makes it really annoying for me to hear what the dialogues are saying if there are a lot of sound effects and BGM. So, I decided to look into how I can render both types of subtitles. - After a long course of development, and many hurdles (mostly related to Crunchyroll’s internal API being very not external developer friendly, I wonder why…), I was able to ship this little extension, which currently has about 200 or so active users? - -TLDR: Crunchyroll default subtitle system sucks so I made it better. Also if you don’t have Crunchyroll just watch this slightly outdated demo video: https://www.youtube.com/watch?v=C6fvmeJ0SoM...
|
1793148944.4409976
|
1793235344.4409976
|
|
15809
|
Website by @clara_123_satter | Stardance
|
clara_123_satter
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T02:51:57Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is the homepage for my website. Obviously, its not finished, but I am pretty happy with the way it looks so far. I was honestly suprised by how easy it was to learn css, but I did have some trouble with the buttons. In the future, I would like to add to the blog sections and add animations to the buttons when they are pressed", "repo": "https://github.com/QwertyShmerty-8/website", "demo": "https://qwertyshmerty-8.github.io/website/"}]...
|
[{"post_id": 24495, "ts": "202 [{"post_id": 24495, "ts": "2026-07-08T02:17:30Z", "hours": 2.1511, "text": "Just finished the homepage for my website! I also created separate pages for my blog, projects and about me using buttons. I also spent a significant amount of time planning and creating graphics"}, {"post_id": 24193, "ts": "2026-07-07T16:32:05Z", "hours": 0.8728, "text": "I am currently trying to set up the homepage for my website. I decided to create a basic homepage that links to an about me, blog and personal projects page. My main focus is to make a visually appealing website that showcases my personality. My first focus was setting up the welcome banner. I am using the a star is born font, and I copy pasted screenshots of the letters I needed into canva to create a transparent png of the website banner."}]...
|
Title: Website by @clara_123_satter | Stardance
D Title: Website by @clara_123_satter | Stardance
Devlogs:
I am currently trying to set up the homepage for my website. I decided to create a basic homepage that links to an about me, blog and personal projects page. My main focus is to make a visually appealing website that showcases my personality. My first focus was setting up the welcome banner. I am using the a star is born font, and I copy pasted screenshots of the letters I needed into canva to create a transparent png of the website banner.
Just finished the homepage for my website! I also created separate pages for my blog, projects and about me using buttons. I also spent a significant amount of time planning and creating graphics
Ships:
This is the homepage for my website. Obviously, its not finished, but I am pretty happy with the way it looks so far. I was honestly suprised by how easy it was to learn css, but I did have some trouble with the buttons. In the future, I would like to add to the blog sections and add animations to the buttons when they are pressed...
|
1793123594.0494454
|
1793209994.0494454
|
|
15818
|
PSim - Particle Simulator by @etaiami09-cmd | Star PSim - Particle Simulator by @etaiami09-cmd | Stardance...
|
etaiami09-cmd
|
1
|
64.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T21:25:14Z", "hours": 64.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PSimUltimate Is Ready! I made a particle simulator desktop application in C++ with heavy extension support. Overview PSimUltimate models real physics, but also allows you to inject your own behavior. Using a simple development API that even someone with no C++ experience can understand, you can create, compile and load your own custom modules to the simulator and watch the behavior you’ve coded in action. PSim even ships with 2 of these modules built into the binary, and 3 more modules that you can load dynamically. PSimUltimate also comes with a very simple UI, one that anyone could be comfortable with within minutes. How it works PSimUltimate has documentation for creating your own modules, and compiling them is very simple with a few commands. You can then load the modules, and PSim knows how to run your module and follow its physics. PSimUltimate is written in modern C++, using Raylib and Dear ImGui to provide a clean UI and good support in multiple platforms. While it only ships a Windows binary, you can easily follow the instructions in README.md to compile in other platforms. How to try it You can download the PSimUltimate installation wizard in this page . For more instructions and information, including information on support for other platforms, check out README.md in the source code. Challenges I’ve faced This project took a lot of effort to complete. It is the largest single solo project I have worked on since I started programming, and it included a lot of technical software design and infrastructure that I had to familiarize myself with, like dynamic libraries and using and altering 3rd party libraries (I altered portable file dialogs and Dear ImGui to suit my needs). I also had to deal with moving to a new computer, and then when that computer broke down due to a faulty motherboard, I had to move back to my old computer. I also started a full-time internship at a tech company. All that, coupled with some massive life changes, made it much harder to work on this project. But I enjoyed making it nonetheless, and I’m proud to show off what I’ve created.", "repo": "https://github.com/etaiami09-cmd/PSimUltimate", "demo": "https://github.com/etaiami09-cmd/PSimUltimate/releases/tag/v1.0"}]...
|
[{"post_id": 65606, "ts": "202 [{"post_id": 65606, "ts": "2026-09-10T20:55:45Z", "hours": 7.9922, "text": "Devlog #13 - Time To Ship! PSimUltimate is finally ready to ship. I have put a lot of effort into this project, and I feel genuinely proud of my what I have achieved. While working on this project I have gotten a new computer, lost that computer due to a faulty motherboard, got an internship at a tech company, and started working there full time. Suffice to say, I haven’t had much time to work on PSim in the last month. But I did. I spent time polishing what I have already created and now I feel content with my product. What I’ve done since the last devlog PSimUltimate now has a logo, designed by me. I have also run PSim on WSL and fixed various issues that only appeared on Linux. There is now a way to use your mouse to set the next particle’s position There is now a menu for editing particle data - you can delete a particle and change its position, velocity, mass, etc. PSim is now ready for release. I’m happy and proud to present it and show what I’ve done, and I hope other people receive it well. Thank you all for your support!"}, {"post_id": 48457, "ts": "2026-08-16T20:12:07Z", "hours": 4.1594, "text": "Half Devlog - Short Update: Sorry for not posting for a while. My computer broke and I’m waiting for the repair. Hopefully I’ll be back next week! Thank you for your patience."}, {"post_id": 32968, "ts": "2026-07-22T13:52:27Z", "hours": 8.5469, "text": "Devlog #12 - Solid, Boring Progress I’ve spent the last few days making regular feature updates to PSim. Here are the highlights: 1. Unload Modules Until now, if a user loaded a module and didn’t want it anymore, he would have to reopen the app. Additionally, there was no way to unload the built-in modules. I added an options tooltip in the module order GUI that allows the user to unload a module and everything it has registered. 2. Confirm Action Menu If a user is about to do an action which might lead to loss of data (close the window, override a save file), we want to confirm they know about the potential consequences and accept it. For this, I created an interface for creating a blocking modal that forces the user to either confirm an action or cancel it. 3. Graphics Handlers Behavior Improved The default should obviously be for graphics callbacks to have what they draw to the screen be projected into the actual intended buffer - that is, not anywhere in the top menu bar or the left-hand control panel. This is also already where particles are drawn, so a particle at 0, 0 is drawn in the top-left corner where the top menu bar and control panel intersect. This math had to be applied to every single thing drawn by a graphics callback, and I decided to fix it by calling graphics callbacks while in a raylib 2D mode that offsets everything so that 0, 0 is where a particle at 0,0 is drawn. 4. DPI Scaling I switched to a new laptop this week, and went from a 14 Inch 1080p screen to a 14 Inch 1440p screen. Suddenly, the menu became much smaller, because the program was drawing by pixel instead of by the system’s default scaling (which, on my new laptop, is 200%). I fixed this by making Raylib scale everything by the user’s system DPI. 5. Module Internal Serialization If a module has any internal state that should be preserved when a save file is written, it can now register a callback that returns a std::string and a callback that accepts one, and those can be used to serialize and deserialize its internal state. 6. Extended Module API Documentation I’ve now written documentation for everything but the feature discussed in point 5. 7. New Particle Target I’ve added a cross target placed in the position where a new particle would be placed according to the Position buffer, to ease on visualizing the new particle. This cross is customizeable in the settings menu and you can change width, length and color."}, {"post_id": 27577, "ts": "2026-07-13T09:02:19Z", "hours": 5.8525, "text": "Devlog #11 - Adding A Settings Page, A Config System, And More Module API Yesterday I wrote about my commitment to making PSim an actual, usable desktop application that doesn’t feel limiting to the user. What I did yesterday was create an error notification system, so if something goes wrong the user can understand why and code has a standard philosophy to handle issues. Today, I put my focus on improving the user experience by adding a settings page to PSim. The Layout Personally, when I think of a settings page in a desktop application, I usually imagine a blocking pop-up (as in, a subwindow inside the application window that while opened, does not let you touch anything outside of it) with a few tabs for different categories of settings. ImGui actually has great support for this, with OpenPopup to create one. the smaller, left-side portion of the settings page is a tab-selection area, and the right-side portion is the tab which is selected. There are 4 tabs: General Simulation Modules - modules can register custom settings About - basically just the full text of the MIT License + a link to the project’s GitHub page The Config System Personally, when I change a setting on a desktop application, I generally expect that change to still be in effect when I close and reopen it. To do this, PSim needs to get to the target platform’s app data folder, create a folder for itself if one doesn’t already exist, and then save whatever information it needs there. Now, this is obviously annoying to have to re-write every time you want to save something as simple as what FPS the user wants, so I wrote a template system to save and access binary settings files on the fly. I now had a way to make it so arbitrary settings stay the same every time I open the app. Now, I need to make it so modules have the same privilege. I created 3 new functions in the module API, writeConfig , readConfig , and registerSwitch . Each of these does as the name implies, and it allows you to add on-off switches (support for more will come later) and read/write configs to disk. Conclusion It may have taken 6 hours of work, but I managed to create a fully-functional settings UI with module support to my first desktop application. This is an important piece of architechture and makes it much easier to add more features in the future and expand the app into something I can be very proud of. Thank you very much for reading! Please enjoy this proof-of-concept video of me changing settings and reopening the app."}, {"post_id": 27058, "ts": "2026-07-12T08:08:01Z", "hours": 3.7278, "text": "Devlog #10 - Don’t Hate The User One of the most important unwritten (though I’m sure it is written somewhere) rules of writing good software is responsible error handling. I’m writing a desktop application, and personally, when I’m using a desktop application, I don’t like it when it suddenly crashes with no useful error message. This is especially possible in a desktop application written in C++, where irresponsible coding practices can lead to segfaults and other crashes without so much as a Java-style “NullPointerException”. It would be incredibly frustrating for the user to lose progress and not even know why. Another potentially frustrutaing situation is when the program fails silently. It doesn’t quite crash, but when you ask a program to do something and it just doesn’t do it, that can be frustrating. When a program can’t satisfy an action the user wants it to make, it should make it as clear as possible that it’s aware of its failure, and attempt to clarify what went wrong. What I’ve Been Doing Until Now Up until now I have handled runtime errors by… well… not handling them. I wrote my application under the assumption that everything works smoothly, every module loaded by the user exports the correct signature, every file opened by the user is well-formed, and every file the user wants to write to has the necessary permissions. If any of this went wrong, the program entered undefined behavior. Most likely, it will crash. My Solution Whenever the user requests an action by the program, for example, trying to open a saved simulation state JSON, the program goes through the following steps: Make sure the file is actually opened Make sure the file is correctly-formed JSON syntax Make sure the actual data in the file aligns with PSimUltimate’s requirements and constraints Actually deserialize the file If any of these goes wrong, the deserialization process immidiately ends and an error notification is pushed to the bottom-right corner of the screen. If multiple things are wrong about the data in the file, only the first thing in the deserialization order is written. There can be up to 3 error notifications displayed at once, with any more notifications being queued for when those are closed by the user . This solves the issue of responsible, user-friendly error handling, and is an important piece of infrastructure for a usable desktop application."}, {"post_id": 25930, "ts": "2026-07-10T13:04:03Z", "hours": 1.7719, "text": "Devlog #9 - Expanding The Module Developer API Before I begin this devlog, I would like to apologize for being inactive over the past week. I have had quite a busy week, and I did not have much of an opportunity to work on PSimUltimate unfortunately. What I Have Been Working On I’ve been putting more attention to the module API, modules are the most important part of PSim, and their API should be more advanced than the very basic one that currently exists. I’ve split the API into 5 different sections: Physics Behavior - callbacks into force, velocity, and positions of particles User Input - adding new keyboard shortcuts, reading mouse positions, reading which keys are being pressed Graphical Behavior - being able to draw stuff on the screen GUI - adding buttons, settings pages, descriptions, and more for specific modules. Other Modules - modules should be able to register dependencies and force certain modules to be either lower or higher than them on the callback order. I have been hard at work (when I can) on designing and implementing these needs. So far I have made some progress, but there is still much to do and research, and I’m sorry it’s not so juicy for a week’s worth of progress. Either way, thank you for reading, attached is an example of custom buttons that can be registered by modules in the top bar, and please keep following the project for more updates."}, {"post_id": 19922, "ts": "2026-07-01T11:10:57Z", "hours": 3.965, "text": "Devlog #8 - I Need Your Help This devlog is not so focused on what I’ve been doing since the last one, but what I have been doing is pretty cool, so I’ll go over it: PSim uses Dear ImGui as the backend for its GUI. Up until now, the font size in the GUI has been way too small (13px) and the GUI sidebar could not be resized in any way. I had to make it so resizing is possible and the font is more readable, because I want the app to be properly useable. The first thing I did switch fonts from Dear ImGui’s default non-scalable font to Dear ImGui’s default scalable version, ProggyForever. This took a few minutes but the big challenge was getting resizing to do exactly what I wanted. Despite Dear ImGui usually having exactly the correct amount of features, there is no option to make resizing only possible from one side or disable the completely free bottom-right resize grip. I had to go directly into Dear ImGui’s source code and manually disable those things myself, which was a first for me. What I Need Help With Right now whenever I try to do anything I realize that I don’t actually have a good feel for what’s missing and what needs improvement. If anyone reading this could spare some time of their day to install my application and play around with it, maybe write a module. I have added proper documentation for modules to make the whole process much easier, so hopefully someone will be able to help me find issues and missing features. You can get the release on GitHub . Thank you for reading and thank you for helping out!"}, {"post_id": 17653, "ts": "2026-06-28T15:14:57Z", "hours": 1.375, "text": "Devlog #7 - Steady Progress Is Not Interesting Sorry for the low logged time, I’ve actually been working for several hours but I forgot to install wakatime after switching to CLion. What I’ve Been Working On One of the most important things when working with multiple modules that work on a callback-based system is the ability to reorder modules so some callbacks get called before others. Imagine this: You have a module foo which clamps all particles to the window border so they can never escape the boundaries of the window. You also have module bar which increments the X position of each particle by 3, each frame. Say foo gets registered after bar , particles will get clamped to the border AND THEN move 3 pixels, breaking the behavior both module authors likely intended. The Solution Create a GUI which allows the user to reorder modules by, so a module placed after another module gets called last. Implementation Challenges I had to learn how std::list works (a linked list was the obvious choice for this use case), and let me tell you, it is by far one of the worst STL containers I’ve had to work with, and anyone who writes C++ code knows that MEANS somethimg. Conclusion Again, not much to write about today, but steady progress just isn’t all that interesting. Thanks for reading!"}, {"post_id": 14586, "ts": "2026-06-23T19:08:32Z", "hours": 1.7331, "text": "Mini Devlog - How Writing Unit Tests Made Me Fight C++ For An Hour Whenever I spend some time fighting with C++ instead of actually being productive, I feel like I at least need to get a devlog out of it, so here goes. Background I’ve been writing unit tests for my particle simulator, and one thing I’ve noticed is that I have no code to protect global state when a single module is registered more than once, which leads to weird and unintended behavior. My solution is lazy: silent failure. If a module already exists when addModule(const std::string& name) is called through the module interface function registerModule(const std::string& name) (You can read about why these are separated in an earlier blog post, it’s very cool!), the function just doesn’t register it again. Simple enough, but I wanted to implement it in “correct” C++. The Implementation (Where Things Went Wrong) What I did was create a function in module.cpp with internal linkage called getModuleByName which returns a std::optional<Module&> . Well, apparently for the C++ standard that amounts to heresy, since up until C++26 the committee never managed to agree on how to handle std::optional s that contain references. Well, I thought, I am already compiling with -std=c++26 in my project, so this should work. But it didn’t. I needed an updated libc++ implementation, which I managed to get through MinGW. I spent 30 more minutes fighting with CMake as it insisted to link against MSVC’s headers, but eventually I did manage to get it to compile. A normal programmer would have just used std::optional<Module*> but I am definitely not normal. Was it worth it? probably not. Especially when it’s all for a function which only has internal linkage and is only used in one place. But I like to think that writing code I’m comfortable with will help maintain the codebase in the future."}, {"post_id": 14286, "ts": "2026-06-23T10:40:41Z", "hours": 2.7964, "text": "Devlog #6 - Adding Testing To My Particle Simulator I’ve been working on adding unit testing to my project. It was important for me to add unit tests for several reasons: I have never written unit tests in C++, so it’s a good learning experience I genuinely want this project to end up as a polished desktop application, and that’s not really possible without following best practices. Tests are important. Parts of my application are already extremely vulnerable to bugs It’s easier to catch bugs through unit tests than through actual use of the application Catch2 as the framework I chose Catch2 as my framework because it seemed easy to work with and not too verbose. Current sensitive parts of the application Position , Velocity , and Force are all independent wrappers around Vec2<float> . It is extremely important to me that these have proper arithmetic, but are not implicitly convertible, since that is almost definitely not intended behavior. This is why I wrote almost 200 lines of code’s worth of unit tests to make sure that the typing system is strong and acts the way I want it to. Catching bugs easily through unit testing While a user will most likely eventually stumble upon any bug worth fixing, I don’t really have any users yet! I would like to ship an app that isn’t obviously broken, and to do that, I need unit tests that stress the logic of my program to make sure it can survive users messing with it. Current progress on writing tests I’ve written fairly extensive tests to enforce the Vec2<float> variants type system, and to enforce particles working and ticking correctly and interacting with modules correctly. I still have many more tests to write, and I expect to spend the next couple of hours doing that. Thank you for reading!"}, {"post_id": 11527, "ts": "2026-06-18T20:30:02Z", "hours": 1.4006, "text": "Mini Devlog - Just Spent An Hour Fighting With The C++ Standard Library + Live Showcase! I just finished spending 8 hours on a massive refactor and new features, so I thought it would be nice to sit for a little while and play around with the program and fix some errors, and generally try to make the code a little safer. I’ve spent the past hour looking at various crashes i’ve had and tryint to pinpoint and debug them, and pretty much every single one of them came down to the fact that I keep forgetting that std::vector<T>::resize(n) does not have the same functionality as std::vector<T>::clear(); std::vector<T>::reserve(n) . This should be a very simple concept, and yet it’s apperently riddled my program with bugs. That’s all solved now, and you can try release 0.1.4 here with an example boxing module! Happy programming! Also, here’s a live demo of the program in action. The recording doesn’t capture the file dialog opening up, but you can tell it’s there before the particles spawn and when I load in the module."}, {"post_id": 11357, "ts": "2026-06-18T15:58:33Z", "hours": 8.3031, "text": "Devlog #5 - I spent 8 hours overengineering my desktop application to avoid spaghetti code A few days ago I wrote about how my small desktop app was already suffering from spaghetti code due to interaction between its modules. I had originally set out to create an application with just 3 modes: Gravity, Electrostatic movement, and chemical bonds. But this has a big problem: The scope is small, making development uninteresting and the actual application pointless to users. The Change In order to solve my spaghetti code problem, I came up with a solution: Instead of implementing 3 different modes, implement an interface that allows you to add as many modes as you want. The Process My first step was to decide what the public API should be for creating a new module. I settled for this: What the module author needs The module author may want to intercept a few different things: Change Force, Velocity and Position values every frame when they are being evaluated Add an attribute for a particle (like how a particle needs a charge in electrostatics) Add a universal physical constant (like Coulomb’s constant or the gravitational constant) Render something on top of the application What I need to do I built a module system to register all of the above, plus a psim_module_api.hpp header for the module author. It defines a C-ABI entry point that calls a C++ init function the author provides. I was almost done with the entire process when I discovered that Windows apparently doesn’t properly support the ability of DLLs to access functions in the main program by linking against them at compile time, and had to rewrite a large chunk from scratch. All the user has to do is include the header and define a void initializePSimModule() which is forward-declared by the header and called by the entry point after populating the function pointer table. Then we just use user-friendly functions to register anything the module might need. An example module is shown in the screenshots, along with its source code. This module creates constants for boundaries that particles cannot cross, effectively boxing them in a rectangle. I rewrote the Gravity and Electric modules in the module system. They are part of the core application, so I’m not loading them dynamically every time, but they use the same API as dynamic extensions. This makes it essentially impossible to create spaghetti code around the different modes, and now all I have to do to load a new module into the program is call loadModule(const std::string& path) . The final flow is something like this: The module entry point is a function that receives a function pointer table to all the C-ABI functions that the module uses under the hood. It populates the module’s function pointer table (the one I added because of Windows) and then calls the main initialization function implemented by the module author. To put things in perspective, here is what happens when you register a constant: You call registerConstant(...) with a std::string and a std::function => they’re destructured into C-friendly structs => the module finds _regConstant(const char* module, size_t moduleLen, ..., PSIM_Constant_Change_Callback) in the pointer table and calls it => the main program restructures the C parameters back into C++ types => the main program calls the real registration function. And this is precisely the hard part: The module author can believe that he’s dealing with the same exact std::span<Particle> that is passed to him by the main program, but in reality that span was destructured into a Particle* and a size_t and was then restructured, all before his callback was even called. This took me 8 hours, and out of everything I’ve done with PSimUltimate for now, this has definitely been the most valuable learning experience. I learned how to expose C++ APIs while maintaining a stable C ABI backend. Very cool!"}, {"post_id": 9226, "ts": "2026-06-15T14:32:40Z", "hours": 3.5978, "text": "Devlog - 04 - Fast JSON Serialization And Deserialization I need a way to save the simulation’s state. My options were few: Create a custom binary format (pretty easy, but not readable) Create a custom text format (hard but readable) Use an existing JSON library and format state into a JSON (very easy, very readable) Option 3 is naturally the best one, so that’s the one I went with. I used nlohmann/json as my JSON library, and for now I have just gone with the native approach of manually looping through the particles to build an object tree and walking the object tree to deserialize files. Now, I know that technically this part of the application doesn’t really require any form of optimization, since even with 1,000 particles and O3 compiler optimizations this native approach takes a small enough time that there isn’t even one frame of overhead. But I still didn’t want to leave performance on the table for no reason. I started with a 10000 particle serialization benchmark. It originally took 100ms to serialize and write to disk with O3 optimizations. After a few changes, mainly first formatting the json object to a std::string and then piping it to a std::ofstream to reduce OS overhead, I quickly reached about 40ms for building an object tree and writing to disk. I got similar results without really adding any optimizations to the deserialization process. Now, this is definitely fast enough for the kind of application that PSimUltimate is, but it still seems slow. People manage to write gigabytes of JSON per second, why is my process so slow? Well, turns out the main reason is the fact that nlohmann/json is, well, pretty slow to build an object tree with. Every single item in the tree is a heap-allocated object, which means both malloc and free overhead and cache-unfriendliness. You can see in the benchmark that serializeState and deserializeState both take a couple milliseconds despite not doing anything but set up the work for the other functions, and this is because of the time it takes to malloc and free the object trees. Theoretically, there are ways to write faster nlohmann/json code that doesn’t rely on as many heap allocations, but it’s not really worth it for me to do spend time looking into it and designing it right now, so this is good enough for me for now."}, {"post_id": 9148, "ts": "2026-06-15T10:03:31Z", "hours": 0.3217, "text": "(Advice Welcome) Devlog - 03 - How to design extensible architechture for my particle simulator desktop application I tried making a simple refactor - when I was first experimenting with the code, Whenever electrostatics were disabled the vector of charges for each particle was reset. This is obviously not great behavior for when you want to be able to quickly toggle modes on and off, so I tried making it so toggling electrostatics simply switches whether the simulation notices them or not, and not whether the data exists. This took 4 different attempts at compilation and playing around before I arrived at the expected behavior - and all I was doing was just deleting some code! It became clear that even though my application is still tiny (under 1k lines of code) and even though I have only 2 modes (gravity and electrostatics), I already have spaghetti code. Now I need to do one thing: design a safe and extensible architechture for adding new types of forces. The first thing that needs to happen is deciding how each mode interacts with the particles. This is the easiest part: Each mode is told to calculate the force for which it is responsible for every particle, and those forces get added to an array of forces, and then the sum force for each particle is used to determine its new position. This alone means there will never be any meaningful spaghetti code. Now comes the hard part: deciding how modes should be declared and added to the application. There are two approaches: Create an interface for modes which is known at compile time. This will lead to better performance due to optimizations, faster startup times, and more control for me over how the application works. Create an interface for modes which is registered dynamically at startup, this approach allows for 3rd-party extensions in the form of dll files that are dropped into some folder in the install directory. This leads to slower startup times, less optimizations due to the need of a stable ABI, and an overall increase in architechture size. I don’t know what I should choose, but I would love to have someone’s input on which would be better for my project."}, {"post_id": 7542, "ts": "2026-06-12T16:19:21Z", "hours": 3.0608, "text": "Devlog - 02 - Before Shabbos Since the last blogpost I have been working on cleaning up the existing codebase, improving some APIs and laying down the groundwork for electrostatic movement. I spent over an hour splitting the GUI rendering process into multiple independent files that are each much smaller than the monolithic “graphical.cpp” from before, which allowed for a cleaner structure which enabled me to think about the code more cleanly and refactor it further. I created a generic Holder struct which runs some function when constructed (and can receive arguments for that function when constructed) and calls another function when it goes out of scope. This is useful in ImGui because very often you have stuff like ImGui::BeginGroup() which must be followed with ImGui::EndGroup() which can easily be forgotten and also leads to unclean and spaghetti code. Instead, All that needs to be done now is a declaration of a GroupHolder variable, and then ImGui::EndGroup() is automatically called when that variable goes out of scope. I moved a bunch of constants from graphical.cpp to a PSimImpl namespace which allows them to be accessed from anywhere without polluting the global namespace. Additionally, I spent some time laying down the groundwork for electrostatic movement, which includes a Force type, which is a strongly typed wrapper around Vec2. I need these to be strongly typed so Force cannot be accidentally converted to Position or Velocity, but I also wanted to be able to explicitly (or implicitly) convert a Vec2 to one of its wrappers. This took a while to get right and eventually lead to the line of code in the screenshot. One more thing: I noticed that currently this website has no way to actually find the GitHub page for other people’s projects, so here’s the link to mine: https://etaiami09-cmd/PSimUltimate Enjoy!"}, {"post_id": 6808, "ts": "2026-06-11T12:46:37Z", "hours": 4.9311, "text": "Devlog - 01 This project is a remake of my first C++ project, which was an electrostatic particle simulator. This time, I’m looking to do a bit more - the simulator will have multiple modes which can be switched on or off, and instead of trying to reinvent the wheel by making a GUI with raw SFML, I’m using ImGui and binding it to raylib for the particles. So far, I’ve spent multiple hours (I started before linking the project) setting up the project with CMake, an install wizard, and external libraries. Additionally, so far I have implemented the ability to toggle gravity and the simulation, and there is a button to toggle electrostatics, even though electrostatics are not implemented yet. I also have a menu for spawning new particles, an about page, and a menu for editing constants (like gravity)."}]...
|
Title: PSim - Particle Simulator by @etaiami09-cmd Title: PSim - Particle Simulator by @etaiami09-cmd | Stardance
Devlogs:
Devlog - 01 This project is a remake of my first C++ project, which was an electrostatic particle simulator. This time, I’m looking to do a bit more - the simulator will have multiple modes which can be switched on or off, and instead of trying to reinvent the wheel by making a GUI with raw SFML, I’m using ImGui and binding it to raylib for the particles. So far, I’ve spent multiple hours (I started before linking the project) setting up the project with CMake, an install wizard, and external libraries. Additionally, so far I have implemented the ability to toggle gravity and the simulation, and there is a button to toggle electrostatics, even though electrostatics are not implemented yet. I also have a menu for spawning new particles, an about page, and a menu for editing constants (like gravity).
Devlog - 02 - Before Shabbos Since the last blogpost I have been working on cleaning up the existing codebase, improving some APIs and laying down the groundwork for electrostatic movement. I spent over an hour splitting the GUI rendering process into multiple independent files that are each much smaller than the monolithic “graphical.cpp” from before, which allowed for a cleaner structure which enabled me to think about the code more cleanly and refactor it further. I created a generic Holder struct which runs some function when constructed (and can receive arguments for that function when constructed) and calls another function when it goes out of scope. This is useful in ImGui because very often you have stuff like ImGui::BeginGroup() which must be followed with ImGui::EndGroup() which can easily be forgotten and also leads to unclean and spaghetti code. Instead, All that needs to be done now is a declaration of a GroupHolder variable, and then ImGui::EndGroup() is automatically called when that variable goes out of scope. I moved a bunch of constants from graphical.cpp to a PSimImpl namespace which allows them to be accessed from anywhere without polluting the global namespace. Additionally, I spent some time laying down the groundwork for electrostatic movement, which includes a Force type, which is a strongly typed wrapper around Vec2. I need these to be strongly typed so Force cannot be accidentally converted to Position or Velocity, but I also wanted to be able to explicitly (or implicitly) convert a Vec2 to one of its wrappers. This took a while to get right and eventually lead to the line of code in the screenshot. One more thing: I noticed that currently this website has no way to actually find the GitHub page for other people’s projects, so here’s the link to mine: https://etaiami09-cmd/PSimUltimate Enjoy!
(Advice Welcome) Devlog - 03 - How to design extensible architechture for my particle simulator desktop application I tried making a simple refactor - when I was first experimenting with the code, Whenever electrostatics were disabled the vector of charges for each particle was reset. This is obviously not great behavior for when you want to be able to quickly toggle modes on and off, so I tried making it so toggling electrostatics simply switches whether the simulation notices them or not, and not whether the data exists. This took 4 different attempts at compilation and playing around before I arrived at the expected behavior - and all I was doing was just deleting some code! It became clear that even though my application is still tiny (under 1k lines of code) and even though I have only 2 modes (gravity and electrostatics), I already have spaghetti code. Now I need to do one thing: design a safe and extensible architechture for adding new types of forces. The first thing that needs to happen is deciding how each mode interacts with the particles. This is the easiest part: Each mode is told to calculate the force for which it is responsible for every particle, and those forces get added to an array of forces, and then the sum force for each particle is used to determine its new position. This alone means there will never be any meaningful spaghetti code. Now comes the hard part: deciding how modes should be declared and added to the application. There are two approaches: Create an interface for modes which is known at compile time. This will lead to better performance due to optimizations, faster startup times, and more control for me over how the application works. Create an interface for modes which is registered dynamically at startup, this approach allows for 3rd-party extensions in the form of dll files that are dropped into some folder in the install directory. This leads to slower startup times, less optimizations due to the need of a stable ABI, and an overall increase in architechture size. I don’t know what I should choose, but I would love to have someone’s input on which would be better for my project.
Devlog - 04 - Fast JSON Serialization And Deserialization I need a way to save the simulation’s state. My options were few: Create a custom binary format (pretty easy, but not readable) Create a custom text format (hard but readable) Use an existing JSON library and format state into a JSON (very easy, very readable) Option 3 is naturally the best one, so that’s the one I went with. I used nlohmann/json as my JSON library, and for now I have just gone with the native approach of manually looping through the particles to build an object tree and walking the object tree to deserialize files. Now, I know that technically this part of the application doesn’t really require any form of optimization, since even with 1,000 particles and O3 compiler optimizations this native approach takes a small enough time that there isn’t even one frame of overhead. But I still didn’t want to leave performance on the table for no reason. I started with a 10000 particle serialization benchmark. It originally took 100ms to serialize and write to disk with O3 optimizations. After a few changes, mainly first formatting the json object to a std::string and then piping it to a std::ofstream to reduce OS overhead, I quickly reached about 40ms for building an object tree and writing to disk. I got similar results without really adding any optimizations to the deserialization process. Now, this is definitely fast enough for the kind of application that PSimUltimate is, but it still seems slow. People manage to write gigabytes of JSON per second, why is my process so slow? Well, turns out the main reason is the fact that nlohmann/json is, well, pretty slow to build an object tree with. Every single item in the tree is a heap-allocated object, which means both malloc and free overhead and cache-unfriendliness. You can see in the benchmark that serializeState and deserializeState both take a couple milliseconds despite not doing anything but set up the work for the other functions, and this is because of the time it takes to malloc and free the object trees. Theoretically, there are ways to write faster nlohmann/json code that doesn’t rely on as many heap allocations, but it’s not really worth it for me to do spend time looking into it and designing it right now, so this is good enough for me for now.
Devlog #5 - I spent 8 hours overengineering my desktop application to avoid spaghetti code A few days ago I wrote about how my small desktop app was already suffering from spaghetti code due to interaction between its modules. I had originally set out to create an application with just 3 modes: Gravity, Electrostatic movement, and chemical bonds. But this has a big problem: The scope is small, making development uninteresting and the actual application pointless to users. The Change In order to solve my spaghetti code problem, I came up with a solution: Instead of implementing 3 different modes, implement an interface that allows you to add as many modes as you want. The Process My first step was to decide what the public API should be for creating a new module. I settled for this: What the module author needs The module author may want to intercept a few different things: Change Force, Velocity and Position values every frame when they are being evaluated Add an attribute for a particle (like how a particle needs a charge in electrostatics) Add a universal physical constant (like Coulomb’s constant or the gravitational constant) Render something on top of the application What I need to do I built a module system to register all of the above, plus a psim_module_api.hpp header for the module author. It defines a C-ABI entry point that calls a C++ init function the author provides. I was almost done with the entire process when I discovered that Windows apparently doesn’t properly support the ability of DLLs to access functions in the main program by linking against them at compile time, and had to rewrite a large chunk from scratch. All the user has to do is include the header and define a void initializePSimModule() which is forward-declared by the header and called by the entry point after populating the function pointer table. Then we just use user-friendly functions to register anything the module might need. An example module is shown in the screenshots, along with its source code. This module creates constants for boundaries that particles cannot cross, effectively boxing them in a rectangle. I rewrote the Gravity and Electric modules in the module system. They are part of the core application, so I’m not loading them dynamically every time, but they use the same API as dynamic extensions. This makes it essentially impossible to create spaghetti code around the different modes, and now all I have to do to load a new module into the program is call loadModule(const std::string& path) . The final flow is something like this: The module entry point is a function that receives a function pointer table to all the C-ABI functions that the module uses under the hood. It populates the module’s function pointer table (the one I added because of Windows) and then calls the main initialization function implemented by the module author. To put things in perspective, here is what happens when you register a constant: You call registerConstant(...) with a std::string and a std::function => they’re destructured into C-friendly structs => the module finds _regConstant(const char* module, size_t moduleLen, ..., PSIM_Constant_Change_Callback) in the pointer table and calls it => the main program restructures the C parameters back into C++ types => the main program calls the real registration function. And this is precisely the hard part: The module author can believe that he’s dealing with the same exact std::span<Particle> that is passed to him by the main program, but in reality that span was destructured into a Particle* and a size_t and was then restructured, all before his callback was even called. This took me 8 hours, and out of everything I’ve done with PSimUltimate for now, this has definitely been the most valuable learning experience. I learned how to expose C++ APIs while maintaining a stable C ABI backend. Very cool!
Mini Devlog - Just Spent An Hour Fighting With The C++ Standard Library + Live Showcase! I just finished spending 8 hours on a massive refactor and new features, so I thought it would be nice to sit for a little while and play around with the program and fix some errors, and generally try to make the code a little safer. I’ve spent the past hour looking at various crashes i’ve had and tryint to pinpoint and debug them, and pretty much every single one of them came down to the fact that I keep forgetting that std::vector<T>::resize(n) does not have the same functionality as std::vector<T>::clear(); std::vector<T>::reserve(n) . This should be a very simple concept, and yet it’s apperently riddled my program with bugs. That’s all solved now, and you can try release 0.1.4 here with an example boxing module! Happy programming! Also, here’s a live demo of the program in action. The recording doesn’t capture the file dialog opening up, but you can tell it’s there before the particles spawn and when I load in the module.
Devlog #6 - Adding Testing To My Particle Simulator I’ve been working on adding unit testing to my project. It was important for me to add unit tests for several reasons: I have never written unit tests in C++, so it’s a good learning experience I genuinely want this project to end up as a polished desktop application, and that’s not really possible without following best practices. Tests are important. Parts of my application are already extremely vulnerable to bugs It’s easier to catch bugs through unit tests than through actual use of the application Catch2 as the framework I chose Catch2 as my framework because it seemed easy to work with and not too verbose. Current sensitive parts of the application Position , Velocity , and Force are all independent wrappers around Vec2<float> . It is extremely important to me that these have proper arithmetic, but are not implicitly convertible, since that is almost definitely not intended behavior. This is why I wrote almost 200 lines of code’s worth of unit tests to make sure that the typing system is strong and acts the way I want it to. Catching bugs easily through unit testing While a user will most likely eventually stumble upon any bug worth fixing, I don’t really have any users yet! I would like to ship an app that isn’t obviously broken, and to do that, I need unit tests that stress the logic of my program to make sure it can survive users messing with it. Current progress on writing tests I’ve written fairly extensive tests to enforce the Vec2<float> variants type system, and to enforce particles working and ticking correctly and interacting with modules correctly. I still have many more tests to write, and I expect to spend the next couple of hours doing that. Thank you for reading!
Mini Devlog - How Writing Unit Tests Made Me Fight C++ For An Hour Whenever I spend some time fighting with C++ instead of actually being productive, I feel like I at least need to get a devlog out of it, so here goes. Background I’ve been writing unit tests for my particle simulator, and one thing I’ve noticed is that I have no code to protect global state when a single module is registered more than once, which leads to weird and unintended behavior. My solution is lazy: silent failure. If a module already exists when addModule(const std::string& name) is called through the module interface function registerModule(const std::string& name) (You can read about why these are separated in an earlier blog post, it’s very cool!), the function just doesn’t register it again. Simple enough, but I wanted to implement it in “correct” C++. The Implementation (Where Things Went Wrong) What I did was create a function in module.cpp with internal linkage called getModuleByName which returns a std::optional<Module&> . Well, apparently for the C++ standard that amounts to heresy, since up until C++26 the committee never managed to agree on how to handle std::optional s that contain references. Well, I thought, I am already compiling with -std=c++26 in my project, so this should work. But it didn’t. I needed an updated libc++ implementation, which I managed to get through MinGW. I spent 30 more minutes fighting with CMake as it insisted to link against MSVC’s headers, but eventually I did manage to get it to compile. A normal programmer would have just used std::optional<Module*> but I am definitely not normal. Was it worth it? probably not. Especially when it’s all for a function which only has internal linkage and is only used in one place. But I like to think that writing code I’m comfortable with will help maintain the codebase in the future.
Devlog #7 - Steady Progress Is Not Interesting Sorry for the low logged time, I’ve actually been working for several hours but I forgot to install wakatime after switching to CLion. What I’ve Been Working On One of the most important things when working with multiple modules that work on a callback-based system is the ability to reorder modules so some callbacks get called before others. Imagine this: You have a module foo which clamps all particles to the window border so they can never escape the boundaries of the window. You also have module bar which increments the X position of each particle by 3, each frame. Say foo gets registered after bar , particles will get clamped to the border AND THEN move 3 pixels, breaking the behavior both module authors likely intended. The Solution Create a GUI which allows the user to reorder modules by, so a module placed after another module gets called last. Implementation Challenges I had to learn how std::list works (a linked list was the obvious choice for this use case), and let me tell you, it is by far one of the worst STL containers I’ve had to work with, and anyone who writes C++ code knows that MEANS somethimg. Conclusion Again, not much to write about today, but steady progress just isn’t all that interesting. Thanks for reading!
Devlog #8 - I Need Your Help This devlog is not so focused on what I’ve been doing since the last one, but what I have been doing is pretty cool, so I’ll go over it: PSim uses Dear ImGui as the backend for its GUI. Up until now, the font size in the GUI has been way too small (13px) and the GUI sidebar could not be resized in any way. I had to make it so resizing is possible and the font is more readable, because I want the app to be properly useable. The first thing I did switch fonts from Dear ImGui’s default non-scalable font to Dear ImGui’s default scalable version, ProggyForever. This took a few minutes but the big challenge was getting resizing to do exactly what I wanted. Despite Dear ImGui usually having exactly the correct amount of features, there is no option to make resizing only possible from one side or disable the completely free bottom-right resize grip. I had to go directly into Dear ImGui’s source code and manually disable those things myself, which was a first for me. What I Need Help With Right now whenever I try to do anything I realize that I don’t actually have a good feel for what’s missing and what needs improvement. If anyone reading this could spare some time of their day to install my application and play around with it, maybe write a module. I have added proper documentation for modules to make the whole process much easier, so hopefully someone will be able to help me find issues and missing features. You can get the release on GitHub . Thank you for reading and thank you for helping out!
Devlog #9 - Expanding The Module Developer API Before I begin this devlog, I would like to apologize for being inactive over the past week. I have had quite a busy week, and I did not have much of an opportunity to work on PSimUltimate unfortunately. What I Have Been Working On I’ve been putting more attention to the module API, modules are the most important part of PSim, and their API should be more advanced than the very basic one that currently exists. I’ve split the API into 5 different sections: Physics Behavior - callbacks into force, velocity, and positions of particles User Input - adding new keyboard shortcuts, reading mouse positions, reading which keys are being pressed Graphical Behavior - being able to draw stuff on the screen GUI - adding buttons, settings pages, descriptions, and more for specific modules. Other Modules - modules should be able to register dependencies and force certain modules to be either lower or higher than them on the callback order. I have been hard at work (when I can) on designing and implementing these needs. So far I have made some progress, but there is still much to do and research, and I’m sorry it’s not so juicy for a week’s worth of progress. Either way, thank you for reading, attached is an example of custom buttons that can be registered by modules in the top bar, and please keep following the project for more updates.
Devlog #10 - Don’t Hate The User One of the most important unwritten (though I’m sure it is written somewhere) rules of writing good software is responsible error handling. I’m writing a desktop application, and personally, when I’m using a desktop application, I don’t like it when it suddenly crashes with no useful error message. This is especially possible in a desktop application written in C++, where irresponsible coding practices can lead to segfaults and other crashes without so much as a Java-style “NullPointerException”. It would be incredibly frustrating for the user to lose progress and not even know why. Another potentially frustrutaing situation is when the program fails silently. It doesn’t quite crash, but when you ask a program to do something and it just doesn’t do it, that can be frustrating. When a program can’t satisfy an action the user wants it to make, it should make it as clear as possible that it’s aware of its failure, and attempt to clarify what went wrong. What I’ve Been Doing Until Now Up until now I have handled runtime errors by… well… not handling them. I wrote my application under the assumption that everything works smoothly, every module loaded by the user exports the correct signature, every file opened by the user is well-formed, and every file the user wants to write to has the necessary permissions. If any of this went wrong, the program entered undefined behavior. Most likely, it will crash. My Solution Whenever the user requests an action by the program, for example, trying to open a saved simulation state JSON, the program goes through the following steps: Make sure the file is actually opened Make sure the file is correctly-formed JSON syntax Make sure the actual data in the file aligns with PSimUltimate’s requirements and constraints Actually deserialize the file If any of these goes wrong, the deserialization process immidiately ends and an error notification is pushed to the bottom-right corner of the screen. If multiple things are wrong about the data in the file, only the first thing in the deserialization order is written. There can be up to 3 error notifications displayed at once, with any more notifications being queued for when those are closed by the user . This solves the issue of responsible, user-friendly error handling, and is an important piece of infrastructure for a usable desktop application.
Devlog #11 - Adding A Settings Page, A Config System, And More Module API Yesterday I wrote about my commitment to making PSim an actual, usable desktop application that doesn’t feel limiting to the user. What I did yesterday was create an error notification system, so if something goes wrong the user can understand why and code has a standard philosophy to handle issues. Today, I put my focus on improving the user experience by adding a settings page to PSim. The Layout Personally, when I think of a settings page in a desktop application, I usually imagine a blocking pop-up (as in, a subwindow inside the application window that while opened, does not let you touch anything outside of it) with a few tabs for different categories of settings. ImGui actually has great support for this, with OpenPopup to create one. the smaller, left-side portion of the settings page is a tab-selection area, and the right-side portion is the tab which is selected. There are 4 tabs: General Simulation Modules - modules can register custom settings About - basically just the full text of the MIT License + a link to the project’s GitHub page The Config System Personally, when I change a setting on a desktop application, I generally expect that change to still be in effect when I close and reopen it. To do this, PSim needs to get to the target platform’s app data folder, create a folder for itself if one doesn’t already exist, and then save whatever information it needs there. Now, this is obviously annoying to have to re-write every time you want to save something as simple as what FPS the user wants, so I wrote a template system to save and access binary settings files on the fly. I now had a way to make it so arbitrary settings stay the same every time I open the app. Now, I need to make it so modules have the same privilege. I created 3 new functions in the module API, writeConfig , readConfig , and registerSwitch . Each of these does as the name implies, and it allows you to add on-off switches (support for more will come later) and read/write configs to disk. Conclusion It may have taken 6 hours of work, but I managed to create a fully-functional settings UI with module support to my first desktop application. This is an important piece of architechture and makes it much easier to add more features in the future and expand the app into something I can be very proud of. Thank you very much for reading! Please enjoy this proof-of-concept video of me changing settings and reopening the app.
Devlog #12 - Solid, Boring Progress I’ve spent the last few days making regular feature updates to PSim. Here are the highlights: 1. Unload Modules Until now, if a user loaded a module and didn’t want it anymore, he would have to reopen the app. Additionally, there was no way to unload the built-in modules. I added an options tooltip in the module order GUI that allows the user to unload a module and everything it has registered. 2. Confirm Action Menu If a user is about to do an action which might lead to loss of data (close the window, override a save file), we want to confirm they know about the potential consequences and accept it. For this, I created an interface for creating a blocking modal that forces the user to either confirm an action or cancel it. 3. Graphics Handlers Behavior Improved The default should obviously be for graphics callbacks to have what they draw to the screen be projected into the actual intended buffer - that is, not anywhere in the top menu bar or the left-hand control panel. This is also already where particles are drawn, so a particle at 0, 0 is drawn in the top-left corner where the top menu bar and control panel intersect. This math had to be applied to every single thing drawn by a graphics callback, and I decided to fix it by calling graphics callbacks while in a raylib 2D mode that offsets everything so that 0, 0 is where a particle at 0,0 is drawn. 4. DPI Scaling I switched to a new laptop this week, and went from a 14 Inch 1080p screen to a 14 Inch 1440p screen. Suddenly, the menu became much smaller, because the program was drawing by pixel instead of by the system’s default scaling (which, on my new laptop, is 200%). I fixed this by making Raylib scale everything by the user’s system DPI. 5. Module Internal Serialization If a module has any internal state that should be preserved when a save file is written, it can now register a callback that returns a std::string and a callback that accepts one, and those can be used to serialize and deserialize its internal state. 6. Extended Module API Documentation I’ve now written documentation for everything but the feature discussed in point 5. 7. New Particle Target I’ve added a cross target placed in the position where a new particle would be placed according to the Position buffer, to ease on visualizing the new particle. This cross is customizeable in the settings menu and you can change width, length and color.
Half Devlog - Short Update: Sorry for not posting for a while. My computer broke and I’m waiting for the repair. Hopefully I’ll be back next week! Thank you for your patience.
Devlog #13 - Time To Ship! PSimUltimate is finally ready to ship. I have put a lot of effort into this project, and I feel genuinely proud of my what I have achieved. While working on this project I have gotten a new computer, lost that computer due to a faulty motherboard, got an internship at a tech company, and started working there full time. Suffice to say, I haven’t had much time to work on PSim in the last month. But I did. I spent time polishing what I have already created and now I feel content with my product. What I’ve done since the last devlog PSimUltimate now has a logo, designed by me. I have also run PSim on WSL and fixed various issues that only appeared on Linux. There is now a way to use your mouse to set the next particle’s position There is now a menu for editing particle data - you can delete a particle and change its position, velocity, mass, etc. PSim is now ready for release. I’m happy and proud to present it and show what I’ve done, and I hope other people receive it well. Thank you all for your support!
Ships:
PSimUltimate Is Ready! I made a particle simulator desktop application in C++ with heavy extension support. Overview PSimUltimate models real physics, but also allows you to inject your own behavior. Using a simple development API that even someone with no C++ experience can understand, you can create, compile and load your own custom modules to the simulator and watch the behavior you’ve coded in action. PSim even ships with 2 of these modules built into the binary, and 3 more modules that you can load dynamically. PSimUltimate also comes with a very simple UI, one that anyone could be comfortable with within minutes. How it works PSimUltimate has documentation for creating your own modules, and compiling them is very simple with a few commands. You can then load the modules, and PSim knows how to run your module and follow its physics. PSimUltimate is written in modern C++, using Raylib and Dear ImGui to provide a clean UI and good support in multiple platforms. While it only ships a Windows binary, you can easily follow the instructions in README.md to compile in other platforms. How to try it You can download the PSimUltimate installation wizard in this page . For more instructions and information, including information on support for other platforms, check out README.md in the source code. Challenges I’ve faced This project took a lot of effort to complete. It is the largest single solo project I have worked on since I started programming, and it included a lot of technical software design and infrastructure that I had to familiarize myself with, like dynamic libraries and using and altering 3rd party libraries (I altered portable file dialogs and Dear ImGui to suit my needs). I also had to deal with moving to a new computer, and then when that computer broke down due to a faulty motherboard, I had to move back to my old computer. I also started a full-time internship at a tech company. All that, coupled with some massive life changes, made it much harder to work on this project. But I enjoyed making it nonetheless, and I’m proud to show off what I’ve created....
|
1793137778.9823291
|
1793224178.9823291
|
|
15825
|
My very own WebOS by @Justin76 | Stardance
|
Justin76
|
1
|
5.3
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T22:34:55Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created an OS with 3 windows and 2 apps. The 2 apps are a app with an embed link to a TikTok that I like, and the offline app goes to a photo of a car in real-life that I saw recently and thought was interesting. The main challenge of my OS was the guide not being exact or having multiple interpretations during some parts but at the same time I also think that helped me go off on my own and try hard to fix problems I encountered. The thing I am the proudest of overall was even creating this OS. When it comes to creativity, I find myself on the less creative side but as someone just starting Star dance, I am glad I took the push to try and create something and worked hard to make this work. The way the OS works is it opens with the introduction window which is movable through the steering wheel and can be closed with the red button and opened with the CarOS name. Second there’s the apps which can be opened my clicking on them and closed the same way as the introduction with the red button. Overall, I am very proud of my project and look forward to working on a different hardware project which will start posting Devlogs for soon😉", "repo": "https://github.com/JustinluvsRockets/Car-OS", "demo": "https://justinluvsrockets.github.io/Car-OS/"}]...
|
[{"post_id": 10845, "ts": "202 [{"post_id": 10845, "ts": "2026-06-17T19:50:51Z", "hours": 0.305, "text": "Fixed the issues in the code causing the demo link to not function. At first I wanted to organize my Github through folders but me placing the index.html in a folder caused Github to not be able to find the images and for the site to not work. In the end I was able to fix this by removing the index.html from the folder."}, {"post_id": 10281, "ts": "2026-06-16T22:26:27Z", "hours": 0.26, "text": "Final Devlog for this project. As I was tidying up the code I was dissatisfied with the current fonts of a couple of the windows, so I decided to change them for the better. I also finished up creating folders for my GitHub Repository and organized my GitHub, so it looks a lot cleaner and a lot smoother for anyone who wants to try my OS p.s if you try my OS Subaru>every car ever made"}, {"post_id": 10168, "ts": "2026-06-16T19:41:17Z", "hours": 4.2242, "text": "Ive Finished my first OS. CarOS a OS based on cars and the best mode of transportation. I decided to make two apps one with a TikTok edit I liked and another with a real life car I saw that looked cool. Overall, it took a long time of debugging and fixing issues I faced."}, {"post_id": 7053, "ts": "2026-06-11T20:22:30Z", "hours": 0.7992, "text": "The start of my first WebOS I added an embed link to a TikTok I thought was nice. So far, it’s pretty grim but I’m planning to add a lot more in part two."}]...
|
Title: My very own WebOS by @Justin76 | Stardance
Title: My very own WebOS by @Justin76 | Stardance
Devlogs:
The start of my first WebOS I added an embed link to a TikTok I thought was nice. So far, it’s pretty grim but I’m planning to add a lot more in part two.
Ive Finished my first OS. CarOS a OS based on cars and the best mode of transportation. I decided to make two apps one with a TikTok edit I liked and another with a real life car I saw that looked cool. Overall, it took a long time of debugging and fixing issues I faced.
Final Devlog for this project. As I was tidying up the code I was dissatisfied with the current fonts of a couple of the windows, so I decided to change them for the better. I also finished up creating folders for my GitHub Repository and organized my GitHub, so it looks a lot cleaner and a lot smoother for anyone who wants to try my OS p.s if you try my OS Subaru>every car ever made
Fixed the issues in the code causing the demo link to not function. At first I wanted to organize my Github through folders but me placing the index.html in a folder caused Github to not be able to find the images and for the site to not work. In the end I was able to fix this by removing the index.html from the folder.
Ships:
I created an OS with 3 windows and 2 apps. The 2 apps are a app with an embed link to a TikTok that I like, and the offline app goes to a photo of a car in real-life that I saw recently and thought was interesting. The main challenge of my OS was the guide not being exact or having multiple interpretations during some parts but at the same time I also think that helped me go off on my own and try hard to fix problems I encountered. The thing I am the proudest of overall was even creating this OS. When it comes to creativity, I find myself on the less creative side but as someone just starting Star dance, I am glad I took the push to try and create something and worked hard to make this work. The way the OS works is it opens with the introduction window which is movable through the steering wheel and can be closed with the red button and opened with the CarOS name. Second there’s the apps which can be opened my clicking on them and closed the same way as the introduction with the red button. Overall, I am very proud of my project and look forward to working on a different hardware project which will start posting Devlogs for soon😉...
|
1793137986.683517
|
1793224386.683517
|
|
15838
|
WillOS by @Gooderswills | Stardance
|
Gooderswills
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T13:44:21Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I was able to make a working webos with draggable windows, my own app and the ability to write in the notes app", "repo": "https://github.com/Gooderswills/willOS", "demo": "https://willos.wgdev.uk/"}]...
|
[{"post_id": 45150, "ts": "202 [{"post_id": 45150, "ts": "2026-08-11T13:41:59Z", "hours": 0.8117, "text": "I completed the tutorial up to part 4 which means I was able to add my own notes app with a pre added note and where you can write a note yourself, I also deployed it under my own domain willos.wgdev.uk"}, {"post_id": 38850, "ts": "2026-08-01T12:35:29Z", "hours": 1.5931, "text": "I decided to start this project over again because I was not happy with what I done the first time I attempted it so I started the tutorial again, this time I finished part 3 and have the basis of my site, in the future I will be adding more apps, making it more personalised etc. I also completed the readme and ensured that all features work as intended so far. In the future I will be updating it more to make it better and more unique to me"}, {"post_id": 13136, "ts": "2026-06-21T14:15:16Z", "hours": 1.5686, "text": "I followed the tutorial to get a basic site with content on it, was able to add a couple links, images and used some css to make it look semi good :) Will move on to js next"}]...
|
Title: WillOS by @Gooderswills | Stardance
Devlog Title: WillOS by @Gooderswills | Stardance
Devlogs:
I followed the tutorial to get a basic site with content on it, was able to add a couple links, images and used some css to make it look semi good :) Will move on to js next
I decided to start this project over again because I was not happy with what I done the first time I attempted it so I started the tutorial again, this time I finished part 3 and have the basis of my site, in the future I will be adding more apps, making it more personalised etc. I also completed the readme and ensured that all features work as intended so far. In the future I will be updating it more to make it better and more unique to me
I completed the tutorial up to part 4 which means I was able to add my own notes app with a pre added note and where you can write a note yourself, I also deployed it under my own domain willos.wgdev.uk
Ships:
I was able to make a working webos with draggable windows, my own app and the ability to write in the notes app...
|
1793263922.1097074
|
1793350322.1097074
|
|
15866
|
Caffeine Crashout by @maxverpoopen | Stardance
|
maxverpoopen
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T23:20:50Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "FRC game for preseason competition", "repo": "", "demo": "https://cad.onshape.com/documents/330c04cc0a0c762ea2d9572d/w/0a85b8c1de986d9136d2614d/e/b13cf1ad77d9016ae75c3147"}]...
|
[{"post_id": 22480, "ts": "202 [{"post_id": 22480, "ts": "2026-07-04T23:19:22Z", "hours": 2.7969, "text": "final devlog? my devlogs so far have been, lackluster to say the least, but it’s now time to explain! To give some context, im a part of frc team 4550, and one thing that we do every year is to hold a preseason competition in november or so, in which we develop our very own game. We split our team into two separate teams, working to develop their own solutions to this novel game, and invite other local teams as well to compete, so newer members can get experience with making robots overall. As a senior member, we get the chance to make the game ourselves, so here is a potential option to it. PRESENTING: CAFFEINE CRASHOUT Basically the goal of the game is to take these balls (fuel from the 2026 game, called “beans”) and deliver them into these scoring grids (so essentially charged up), but the major catch is that you kinda have to reach up and over the field wall to kind of score into these scoring areas, where the closer the scoring platform is, the lesser points it is. From the image, there are 3 L1 areas, 6 L2 areas, and 9 L3 areas. The holding limit is 3 balls (as accordance to the multiple game piece limit FIRST put out for 2027), and since the balls are 2026 fuel, the hope is for me is that it promotes teams to try and develop something that reaches over and goes down, since fuel is relatively bouncy to shoot or drop from above. In addition, there are human player stations, where you can get fuel from, there are some fuel on the ground that you can use for auto, etc. I’m aware that this isn’t like good game design, but what I want is to try and promote some more complex designs from freshman members, which can hopefully promote better designs and complexity from the build season starting in January. One problem I have with this is that I have zero clue what an endgame structure should be, that could go in the middle of the field, as it is quite empty right now. Another thing I’m considering is whether I should add apriltags, considering the complexity it needs to set something up for this specific field layout, mess with the AprilTagFieldLayout json, blah blah blah. Doubt anyone will see this, but if you do, plz give me some ideas for the endgame (also ik my cad is terrible im strategy/programming)"}, {"post_id": 8344, "ts": "2026-06-13T21:26:10Z", "hours": 1.8464, "text": "Working on scoring elements and grid"}, {"post_id": 6505, "ts": "2026-06-10T22:39:40Z", "hours": 0.6375, "text": "Field, barriers, and human player station"}]...
|
Title: Caffeine Crashout by @maxverpoopen | Starda Title: Caffeine Crashout by @maxverpoopen | Stardance
Devlogs:
Field, barriers, and human player station
Working on scoring elements and grid
final devlog? my devlogs so far have been, lackluster to say the least, but it’s now time to explain! To give some context, im a part of frc team 4550, and one thing that we do every year is to hold a preseason competition in november or so, in which we develop our very own game. We split our team into two separate teams, working to develop their own solutions to this novel game, and invite other local teams as well to compete, so newer members can get experience with making robots overall. As a senior member, we get the chance to make the game ourselves, so here is a potential option to it. PRESENTING: CAFFEINE CRASHOUT Basically the goal of the game is to take these balls (fuel from the 2026 game, called “beans”) and deliver them into these scoring grids (so essentially charged up), but the major catch is that you kinda have to reach up and over the field wall to kind of score into these scoring areas, where the closer the scoring platform is, the lesser points it is. From the image, there are 3 L1 areas, 6 L2 areas, and 9 L3 areas. The holding limit is 3 balls (as accordance to the multiple game piece limit FIRST put out for 2027), and since the balls are 2026 fuel, the hope is for me is that it promotes teams to try and develop something that reaches over and goes down, since fuel is relatively bouncy to shoot or drop from above. In addition, there are human player stations, where you can get fuel from, there are some fuel on the ground that you can use for auto, etc. I’m aware that this isn’t like good game design, but what I want is to try and promote some more complex designs from freshman members, which can hopefully promote better designs and complexity from the build season starting in January. One problem I have with this is that I have zero clue what an endgame structure should be, that could go in the middle of the field, as it is quite empty right now. Another thing I’m considering is whether I should add apriltags, considering the complexity it needs to set something up for this specific field layout, mess with the AprilTagFieldLayout json, blah blah blah. Doubt anyone will see this, but if you do, plz give me some ideas for the endgame (also ik my cad is terrible im strategy/programming)
Ships:
FRC game for preseason competition...
|
1793134105.446322
|
1793220505.446322
|
|
15955
|
My very own WebOS by @shravanv | Stardance
|
shravanv
|
1
|
7.2
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T17:44:41Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my very own WebOS, with multiple apps and features. I added a calculator, a mock browser, and a camera. This is my first coding project that I have ever attempted and I am really proud of it.", "repo": "https://github.com/Shravan50/Star-dance-", "demo": "https://star-dance-ruby.vercel.app"}]...
|
[{"post_id": 18682, "ts": "202 [{"post_id": 18682, "ts": "2026-06-29T21:24:39Z", "hours": 1.2019, "text": "I just made the OS look better!!! I created a new drawing pad feature and made the OS look more futuristic and go along with the theme."}, {"post_id": 11399, "ts": "2026-06-18T17:42:53Z", "hours": 0.4367, "text": "This is my last devlog on this project and I will be moving onto my next step in learning coding. My journey will be tough but I will get there. In my last devlog, I fixed a lot of bugs that there were."}, {"post_id": 10826, "ts": "2026-06-17T19:27:06Z", "hours": 2.1256, "text": "I finally got more apps and fixed the camera on my WebOS. I’m learning more about HTML and Java integrations, especially through the .innerText command in Java. New features I added was a working calculator, it actually didn’t take that long because of the forums online guiding me through it. I also added a mock browser which doesn’t work, but its supposed to be like that because this OS is on a browser. I also fixed the Camera being non-centered as well as added the camera being automatically turned off. I added a new notes app which was really simple. These 2 hours were mostly centered around me learning and experimenting and encountering bugs that I wanted fix by myself. Added a name feature on the homescreen as well which personalizes the OS a little. That’s it for now, but I hope to learn much more in the coming days."}, {"post_id": 10297, "ts": "2026-06-16T22:51:45Z", "hours": 3.6428, "text": "I am working on a WebOS as this is my first time coding anything, I used HTML and Java to create this personalized in-browser experience. I made a camera app and some other quality of life improvements in the code. ~3 hours 30 mins were spent on mostly me learning the IDE and then figuring out debugging. Features: Working Camera: It isn’t centered yet, but it works. Time tracker: Has a clock"}]...
|
Title: My very own WebOS by @shravanv | Stardance
Title: My very own WebOS by @shravanv | Stardance
Devlogs:
I am working on a WebOS as this is my first time coding anything, I used HTML and Java to create this personalized in-browser experience. I made a camera app and some other quality of life improvements in the code. ~3 hours 30 mins were spent on mostly me learning the IDE and then figuring out debugging. Features: Working Camera: It isn’t centered yet, but it works. Time tracker: Has a clock
I finally got more apps and fixed the camera on my WebOS. I’m learning more about HTML and Java integrations, especially through the .innerText command in Java. New features I added was a working calculator, it actually didn’t take that long because of the forums online guiding me through it. I also added a mock browser which doesn’t work, but its supposed to be like that because this OS is on a browser. I also fixed the Camera being non-centered as well as added the camera being automatically turned off. I added a new notes app which was really simple. These 2 hours were mostly centered around me learning and experimenting and encountering bugs that I wanted fix by myself. Added a name feature on the homescreen as well which personalizes the OS a little. That’s it for now, but I hope to learn much more in the coming days.
This is my last devlog on this project and I will be moving onto my next step in learning coding. My journey will be tough but I will get there. In my last devlog, I fixed a lot of bugs that there were.
I just made the OS look better!!! I created a new drawing pad feature and made the OS look more futuristic and go along with the theme.
Ships:
I made my very own WebOS, with multiple apps and features. I added a calculator, a mock browser, and a camera. This is my first coding project that I have ever attempted and I am really proud of it....
|
1793137868.0738847
|
1793224268.0738847
|
|
15985
|
Orcapad by @Right_Bright | Stardance
|
Right_Bright
|
1
|
22.16
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T01:14:45Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is Orcapad (I realized I should’ve probably done the initial ship a while ago)! Orcapad is built for Onshape, made by an Onshape fan. It features: An OLED with a dynamic LVGL-based GUI for keyboard layer info, and active RGB mode/color (when on the RGB keyboard layer) 8 keys for custom macros on each layer to streamline workflow 5 RGB LEDs forming a dynamically updating LED status bar 9 more RGB LEDs for vibes & looks! Orca theming because orcas are awesome This is the first project I’ve actually started & finished, from scratch, with so many first-times, and I loved* every part of it! *ignoring all the hours I spent withering in front of my computer because of silly mistakes TT", "repo": "https://github.com/Right-Bright/Orcapad", "demo": ""}]...
|
[{"post_id": 52749, "ts": "202 [{"post_id": 52749, "ts": "2026-08-23T02:36:56Z", "hours": 3.1617, "text": "Just wanted to say I didn’t mean to put the project back into the review queue… The parts are on the way and I’ll work on an actual demo when I get the parts"}, {"post_id": 36731, "ts": "2026-07-28T23:55:11Z", "hours": 10.9558, "text": "Updates QMK/Firmware It’s pretty much done (other than Raw HID)!! It compiles and passes all QMK Lint checks (which verifies compliance with licenses & QMK standards) LVGL Quick story time: Once upon a time I discovered LVGL through the QMK docs. QMK sent me to V8.2 of the LVGL docs. I said nu-uh and started using the newest version of LVGL. Fun twist: QMK uses V8.2 of LVGL :). Conclusion: I spent at least 4ish hours converting the code because some of the features I was using aren’t in LVGL V8.2 TT. Integration The actual integration was relatively easy, I basically just update certain variables regularly in QMK Compiling The only majorly annoying issue I dealt with while compiling was that LVGL re-defines PRINTF_SUPPORT_LONG_LONG after QMK without checking if it is already defined, so I had to play around with un-defining it in the right spot to fix the warning. There were of course also a plethora of other issues that I ironed out (such as compiling the custom font and images properly) :) ! Next Up! Raw HID"}, {"post_id": 29920, "ts": "2026-07-17T03:00:58Z", "hours": 10.8914, "text": "Updates LVGL GUI The GUI is pretty much all done! The changes are: the home screen now has two animated orcas spinning in circles! (I really really love this feature!) An RGB screen with: an rgb mode indicator/an rgb color indicator 3 live information labels with saturation, value (brightness), and hue/animation speed resized & repositioned layer & volume indicators from the home screen The rgb screen will switch between showing the current mode & animation speed, and color & hue. This allows me to use the space more effectively to show useful information. It took me a little bit of time to get the animation source images compiled properly, and I used Inkscape to make sure the original image downscaled and rotated while staying recognizable (and made a few adjustments in paint). Next QMK integration! I also want to properly set up my coding workspace to have autocomplete and all that for QMK."}, {"post_id": 27000, "ts": "2026-07-12T04:08:33Z", "hours": 16.9633, "text": "Updates LVGL Simulator It took me at least 2 days to get the lvgl simulator working TT. I settled on Visual Studio (also tried Codeblocks and VSCode) because it worked for demos, but it took me forever to get my own code running. TLDR I turned of a setting and it broke it… I just needed to add: lv_delay_ms(lv_timer_handler()); lv_refr_now(NULL); It worked immediately :) Lets just say it was a very bittersweet moment GUI Progress I have the home screen pretty much done, and I’m starting to feel very comfortable coding in LVGL! So far I have: infinite scroll list to show active layer (still need to apply style for the active one) -Has circular scrolling, which took quite some trial and error. I was doing a very roundabout way with manual calculations to get nice animated snapping. But I learned about flags and now the active layer’s button is flagged, which made everything much easier! volume slider (still deciding on it as I would need to mess with Raw HID for it) FYI: The buttons in the GIF are just to test out & showcase how I plan to integrate the layer indicator in QMK Next create RGB info screen actually integrate into QMK"}, {"post_id": 15938, "ts": "2026-06-25T21:52:43Z", "hours": 7.6339, "text": "I have quite a few QMK firmware developments! First off, I am quite amateur at programming, and I’ve never touched C before. So, there have been a lot of new things to learn, which is really good because I’ve been meaning to get more familiar with programming and different languages. Also, I finally decided that I was going to create the Orcapad to streamline my Onshape workflow by populating it with shortcuts. Ok, so currently I have: 4 keyboard layers (three for shortcuts, one for the lEDs) RGB light layers so that I can easily change the LED bar to indicate what layer is on 2 custom keycodes (one to cycle through layers, one to cycle through static RBG colors) An encoder map to simplify customizing it Hopefully all that is set and I don’t have to fix anything :) :) :) :) To be added I still need to add support for the OLED screen, and on that note, I decided to dive into LVGL so I could create a more sophisticated user experience (over standard quantum painter and the basic functionality), and (again) to really help me get more familiar with C. Finishing thoughts :) So far my experience has surprisingly not been too painful, just very time consuming, but for all I know none of what I’ve written so far works TT. Very excited about how its turning out so far though!"}, {"post_id": 10724, "ts": "2026-06-17T16:21:48Z", "hours": 5.8586, "text": "Since my last devlog, I realized that I connected part of the keyboard matrix to the 3.3v output pin, so I had to update the PCB once again (and remove one of the keys since I didn’t have enough pins…again). The PCB is finally completely finished!! I also have a good chunk of the CAD for the case done :). For the case I have 3 printed layers, the bottom that holds the PCB, a middle diffusion layer for the LEDs (just a very thin layer of white PLA that I hope will look nice), and the top layer to make sure everything can be assembled easily. Up next: add finishing touches to the case, add mounting hardware/interface, introduce myself to QMK for the firmware."}, {"post_id": 8498, "ts": "2026-06-14T03:57:16Z", "hours": 5.815, "text": "Long overdue devlog, but tldr: I finished the schematic for the PCB and just about finished the layout and tracing of the board! I essentially worked on the PCB over two days, so the first day I was getting oriented with general PCB design (this is my first PCB), KiCad, keyboard matrixes, etc… For some reason it took me some time to get used to footprints/symbols/and libraries and how to assign them properly, but I got around to it! I also realized I had to get rid of one of my planned rotary encoders because I didn’t have enough pins for it. Then on the second day, I organized the PCB and completed the tracing. Halfway through I decided to add LEDs to the top of every key switch for aesthetics, and to add some more complexity for me. Overall I enjoyed designing it a lot more than I expected to, which was a pleasant surprise. Next up: touch up the PCB (ground fill, rounded corners, silkscreen decor…), and start on the CAD for the case."}]...
|
Title: Orcapad by @Right_Bright | Stardance
Devlo Title: Orcapad by @Right_Bright | Stardance
Devlogs:
Long overdue devlog, but tldr: I finished the schematic for the PCB and just about finished the layout and tracing of the board! I essentially worked on the PCB over two days, so the first day I was getting oriented with general PCB design (this is my first PCB), KiCad, keyboard matrixes, etc… For some reason it took me some time to get used to footprints/symbols/and libraries and how to assign them properly, but I got around to it! I also realized I had to get rid of one of my planned rotary encoders because I didn’t have enough pins for it. Then on the second day, I organized the PCB and completed the tracing. Halfway through I decided to add LEDs to the top of every key switch for aesthetics, and to add some more complexity for me. Overall I enjoyed designing it a lot more than I expected to, which was a pleasant surprise. Next up: touch up the PCB (ground fill, rounded corners, silkscreen decor…), and start on the CAD for the case.
Since my last devlog, I realized that I connected part of the keyboard matrix to the 3.3v output pin, so I had to update the PCB once again (and remove one of the keys since I didn’t have enough pins…again). The PCB is finally completely finished!! I also have a good chunk of the CAD for the case done :). For the case I have 3 printed layers, the bottom that holds the PCB, a middle diffusion layer for the LEDs (just a very thin layer of white PLA that I hope will look nice), and the top layer to make sure everything can be assembled easily. Up next: add finishing touches to the case, add mounting hardware/interface, introduce myself to QMK for the firmware.
I have quite a few QMK firmware developments! First off, I am quite amateur at programming, and I’ve never touched C before. So, there have been a lot of new things to learn, which is really good because I’ve been meaning to get more familiar with programming and different languages. Also, I finally decided that I was going to create the Orcapad to streamline my Onshape workflow by populating it with shortcuts. Ok, so currently I have: 4 keyboard layers (three for shortcuts, one for the lEDs) RGB light layers so that I can easily change the LED bar to indicate what layer is on 2 custom keycodes (one to cycle through layers, one to cycle through static RBG colors) An encoder map to simplify customizing it Hopefully all that is set and I don’t have to fix anything :) :) :) :) To be added I still need to add support for the OLED screen, and on that note, I decided to dive into LVGL so I could create a more sophisticated user experience (over standard quantum painter and the basic functionality), and (again) to really help me get more familiar with C. Finishing thoughts :) So far my experience has surprisingly not been too painful, just very time consuming, but for all I know none of what I’ve written so far works TT. Very excited about how its turning out so far though!
Updates LVGL Simulator It took me at least 2 days to get the lvgl simulator working TT. I settled on Visual Studio (also tried Codeblocks and VSCode) because it worked for demos, but it took me forever to get my own code running. TLDR I turned of a setting and it broke it… I just needed to add: lv_delay_ms(lv_timer_handler()); lv_refr_now(NULL); It worked immediately :) Lets just say it was a very bittersweet moment GUI Progress I have the home screen pretty much done, and I’m starting to feel very comfortable coding in LVGL! So far I have: infinite scroll list to show active layer (still need to apply style for the active one) -Has circular scrolling, which took quite some trial and error. I was doing a very roundabout way with manual calculations to get nice animated snapping. But I learned about flags and now the active layer’s button is flagged, which made everything much easier! volume slider (still deciding on it as I would need to mess with Raw HID for it) FYI: The buttons in the GIF are just to test out & showcase how I plan to integrate the layer indicator in QMK Next create RGB info screen actually integrate into QMK
Updates LVGL GUI The GUI is pretty much all done! The changes are: the home screen now has two animated orcas spinning in circles! (I really really love this feature!) An RGB screen with: an rgb mode indicator/an rgb color indicator 3 live information labels with saturation, value (brightness), and hue/animation speed resized & repositioned layer & volume indicators from the home screen The rgb screen will switch between showing the current mode & animation speed, and color & hue. This allows me to use the space more effectively to show useful information. It took me a little bit of time to get the animation source images compiled properly, and I used Inkscape to make sure the original image downscaled and rotated while staying recognizable (and made a few adjustments in paint). Next QMK integration! I also want to properly set up my coding workspace to have autocomplete and all that for QMK.
Updates QMK/Firmware It’s pretty much done (other than Raw HID)!! It compiles and passes all QMK Lint checks (which verifies compliance with licenses & QMK standards) LVGL Quick story time: Once upon a time I discovered LVGL through the QMK docs. QMK sent me to V8.2 of the LVGL docs. I said nu-uh and started using the newest version of LVGL. Fun twist: QMK uses V8.2 of LVGL :). Conclusion: I spent at least 4ish hours converting the code because some of the features I was using aren’t in LVGL V8.2 TT. Integration The actual integration was relatively easy, I basically just update certain variables regularly in QMK Compiling The only majorly annoying issue I dealt with while compiling was that LVGL re-defines PRINTF_SUPPORT_LONG_LONG after QMK without checking if it is already defined, so I had to play around with un-defining it in the right spot to fix the warning. There were of course also a plethora of other issues that I ironed out (such as compiling the custom font and images properly) :) ! Next Up! Raw HID
Just wanted to say I didn’t mean to put the project back into the review queue… The parts are on the way and I’ll work on an actual demo when I get the parts
Ships:
This is Orcapad (I realized I should’ve probably done the initial ship a while ago)! Orcapad is built for Onshape, made by an Onshape fan. It features: An OLED with a dynamic LVGL-based GUI for keyboard layer info, and active RGB mode/color (when on the RGB keyboard layer) 8 keys for custom macros on each layer to streamline workflow 5 RGB LEDs forming a dynamically updating LED status bar 9 more RGB LEDs for vibes & looks! Orca theming because orcas are awesome This is the first project I’ve actually started & finished, from scratch, with so many first-times, and I loved* every part of it! *ignoring all the hours I spent withering in front of my computer because of silly mistakes TT...
|
1793112790.0071833
|
1793199190.0071833
|
|
16010
|
A simple pygame creation by @CharlesTang | Stardan A simple pygame creation by @CharlesTang | Stardance...
|
CharlesTang
|
1
|
27.07
|
35
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T23:57:44Z", "hours": 26.0, "multiplier": 1.36, "payout": 35, "blessing": "neutral", "text": "What we have here is a simple little game you can play with one, or two players. It is made with pygame, so it isn’t fancy, but thats all part of the process. While designing, I found this philosophy useful: “Keep it simple, Stupid” I think this project is very important because it taught me github, and how to use A*. This is the first of many programming projects I will attempt to create, and I worked all summer on this. It doesn’t really matter if it doesn’t do bad, I improved at programming, thats what matters.", "repo": "https://github.com/Tupolev114/Square_game", "demo": "https://github.com/Tupolev114/Square_game/releases/tag/V1.5"}]...
|
[{"post_id": 78500, "ts": "202 [{"post_id": 78500, "ts": "2026-10-11T00:17:25Z", "hours": 1.0694, "text": "Chapter II: Square Game Reborn has officially started! based on some feedback given by others, I decided to take square game to the next level by added more UI, visual effects, and increase Playability. Hope you all enjoy! Square Game reborn is essentially just the original square game, but better."}, {"post_id": 71264, "ts": "2026-09-20T15:26:57Z", "hours": 2.0075, "text": "Houston we have landed! Its been a great journey and I learned how to use github, its not a complex project but I like it."}, {"post_id": 62236, "ts": "2026-09-05T14:39:50Z", "hours": 8.1878, "text": "Release 1.3 is out! No more lag and I fixed many bugs, website also updated."}, {"post_id": 48985, "ts": "2026-08-17T15:58:18Z", "hours": 4.6469, "text": "Release 1.2 is officially out! I added shields, and cooldown displays for UI, as well as fixed dashing. Stay tuned for 1.3, where the PvE mode will feel more human!"}, {"post_id": 44140, "ts": "2026-08-09T18:19:45Z", "hours": 2.2258, "text": "After many weeks, I now have a reliable, working navigation system for PvE. it even works on diagonals (red squares were for debugging)"}, {"post_id": 41603, "ts": "2026-08-05T22:08:15Z", "hours": 3.2619, "text": "Houston, I now officially have a website to play the game on! It took me a while to figure out Github and everything else but I learned that patience is more important than knowing Github. Overall it was a learning experience."}, {"post_id": 37576, "ts": "2026-07-30T12:24:43Z", "hours": 0.8433, "text": "I learned A* with the help of AI and made a semi-working A* algorithm. Its not perfect but its getting somewhere"}, {"post_id": 36047, "ts": "2026-07-27T21:27:26Z", "hours": 3.0744, "text": "I spent a bit of time debugging, and made some progress on A*, but there are still things that need to be fixed"}, {"post_id": 35225, "ts": "2026-07-26T15:01:54Z", "hours": 1.5647, "text": "Devlog #1: Houston we are ready for liftoff! I got my documents verified and time tracked, so now I will work on A* for PvE mode."}]...
|
Title: A simple pygame creation by @CharlesTang | Title: A simple pygame creation by @CharlesTang | Stardance
Devlogs:
Devlog #1: Houston we are ready for liftoff! I got my documents verified and time tracked, so now I will work on A* for PvE mode.
I spent a bit of time debugging, and made some progress on A*, but there are still things that need to be fixed
I learned A* with the help of AI and made a semi-working A* algorithm. Its not perfect but its getting somewhere
Houston, I now officially have a website to play the game on! It took me a while to figure out Github and everything else but I learned that patience is more important than knowing Github. Overall it was a learning experience.
After many weeks, I now have a reliable, working navigation system for PvE. it even works on diagonals (red squares were for debugging)
Release 1.2 is officially out! I added shields, and cooldown displays for UI, as well as fixed dashing. Stay tuned for 1.3, where the PvE mode will feel more human!
Release 1.3 is out! No more lag and I fixed many bugs, website also updated.
Houston we have landed! Its been a great journey and I learned how to use github, its not a complex project but I like it.
Chapter II: Square Game Reborn has officially started! based on some feedback given by others, I decided to take square game to the next level by added more UI, visual effects, and increase Playability. Hope you all enjoy! Square Game reborn is essentially just the original square game, but better.
Ships:
What we have here is a simple little game you can play with one, or two players. It is made with pygame, so it isn’t fancy, but thats all part of the process. While designing, I found this philosophy useful: “Keep it simple, Stupid” I think this project is very important because it taught me github, and how to use A*. This is the first of many programming projects I will attempt to create, and I worked all summer on this. It doesn’t really matter if it doesn’t do bad, I improved at programming, thats what matters....
|
1793148543.8374584
|
1793234943.8374584
|
|
16022
|
My first slack bot! by @Shafi | Stardance
|
Shafi
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T18:00:38Z", "hours": 1.0, "multiplier": 1.08, "payout": 1, "blessing": "neutral", "text": "This was a very good beginner project, and I hope to make more in the future!", "repo": "https://github.com/suisbetter/Slack-Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 13126, "ts": "202 [{"post_id": 13126, "ts": "2026-06-21T13:53:29Z", "hours": 0.6547, "text": "My first Slack Bot is going well, I’m just waiting for the container from Nest."}]...
|
Title: My first slack bot! by @Shafi | Stardance
Title: My first slack bot! by @Shafi | Stardance
Devlogs:
My first Slack Bot is going well, I’m just waiting for the container from Nest.
Ships:
This was a very good beginner project, and I hope to make more in the future!...
|
1793274869.8778138
|
1793361269.8778138
|
|
16025
|
MediaPipe Hand Mouse but In java by @ShauryaMathur MediaPipe Hand Mouse but In java by @ShauryaMathur | Stardance...
|
ShauryaMathur
|
1
|
8.0
|
85
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T16:08:02Z", "hours": 8.0, "multiplier": 10.19, "payout": 85, "blessing": "neutral", "text": "StarkMouse - High-Performance Hand Tracking System AP Computer Science A Final Project StarkMouse is an advanced gesture-controlled cursor controller that allows users to operate their computer mouse hands-free. Using MediaPipe and OpenCV on a native C++ backend combined with a Java Swing overlay HUD, the application tracks hand movements, applies coordinate smoothing, and detects finger-pinch gestures to trigger mouse actions. 1. How to Use the Program Prerequisites Java Runtime Environment (JRE) / JDK 17 or higher A working Webcam Windows OS (64-bit) for native dynamic library compatibility ( stark_mouse_jni.dll and opencv_world3416.dll must be in the project root directory) How to Build and Run To build the project and execute the MainApp entry point: Open a terminal in the root directory. Compile and package the application: mvn package Run the generated executable JAR containing all dependencies: java -jar target/stark-mouse-1.0.0-jar-with-dependencies.jar Controls and Gestures Mouse Movement : Hold your hand in front of the webcam. Your cursor will follow the position of the base of your middle finger This anchor was specifically chosen to prevent cursor jumping when fingers pinch. Left Click / Click-and-Drag : Pinch your Thumb and Index Finger together. Releasing the pinch releases the mouse button. Right Click : Pinch your Thumb and Middle Finger together. Mouse Scrolling (Scroll Mode) : Pinch your Thumb and Pinky Finger together. While holding the pinch, move your hand vertically: Moving your hand up scrolls up. Moving your hand down scrolls down. While scrolling, mouse cursor movement is locked to prevent cursor drift. Toggle HUD Overlay (Ctrl+Shift+G) : Press this global hotkey to show or hide the Swing HUD window displaying the camera feed and landmarks. Repositioning HUD : Click and drag anywhere on the HUD panel to move the floating window across your desktop screen. 2. Problems Encountered During Development The “java being anti cv” bottleneck : Initially we planned on using a method called convex hulling to detect fingers as before libraries such as mediapipe that was a common finger detection method. We then realised that convexHull was terrible and we became primary sources as to why libraries such as MediaPipe have been developed. We then tried to bend the rules of the project by calling a python script running mediapipe detection. Our idea was quickly shut down. Our final option was taking the c++ library that was wrapped for python and creating a Java Native Interface from it using a tool called bezelisk. This process took a total of 5 hours, 10 gigabites of Shaurya Mathur’s hotspot and our mental stanities. Once we finally got bezel instealled and working with our library we learned that c++ itself is annoying. Initially, running the Mediapipe tracker and the JNI JVM invocation on the same thread blocked the Swing event thread, resulting in a frozen UI. We resolved this by spawning a separate native execution thread ( std::thread ) in the DLL, calling AttachCurrentThread to register it with the Java VM, and passing frames asynchronously.", "repo": "https://github.com/T-Perm/Ap-CSA-Final-Jarvis", "demo": "https://github.com/T-Perm/Ap-CSA-Final-Jarvis/releases/tag/v1.0.0"}]...
|
[{"post_id": 8128, "ts": "2026 [{"post_id": 8128, "ts": "2026-06-13T15:57:43Z", "hours": 2.9525, "text": "I finally finished the project and submitted it to my teacher. I genuinely got a 95% compared to others who had just recreated games as their project. I’m not mad but rather disappointed that lack of creativity is being celebrated. Its okay tho because here are the changes Change 1: No detecting how many fingers are held up but rather distance between fingers Change 2: JavaSwing UI with a jarvis style bootup Change 3: fixed double clicking and related problems"}, {"post_id": 6531, "ts": "2026-06-10T23:50:19Z", "hours": 5.3514, "text": "My CSA final project is due in an hour. Instead of working on a game in (Trigger warning) java s*ing I’m building an app that turns your gestures into mouse commands. I started with a group of 3 but I have been the only one who has done any work. Its due in 6 hours wish me luck"}]...
|
Title: MediaPipe Hand Mouse but In java by @Shaury Title: MediaPipe Hand Mouse but In java by @ShauryaMathur | Stardance
Devlogs:
My CSA final project is due in an hour. Instead of working on a game in (Trigger warning) java s*ing I’m building an app that turns your gestures into mouse commands. I started with a group of 3 but I have been the only one who has done any work. Its due in 6 hours wish me luck
I finally finished the project and submitted it to my teacher. I genuinely got a 95% compared to others who had just recreated games as their project. I’m not mad but rather disappointed that lack of creativity is being celebrated. Its okay tho because here are the changes Change 1: No detecting how many fingers are held up but rather distance between fingers Change 2: JavaSwing UI with a jarvis style bootup Change 3: fixed double clicking and related problems
Ships:
StarkMouse - High-Performance Hand Tracking System AP Computer Science A Final Project StarkMouse is an advanced gesture-controlled cursor controller that allows users to operate their computer mouse hands-free. Using MediaPipe and OpenCV on a native C++ backend combined with a Java Swing overlay HUD, the application tracks hand movements, applies coordinate smoothing, and detects finger-pinch gestures to trigger mouse actions. 1. How to Use the Program Prerequisites Java Runtime Environment (JRE) / JDK 17 or higher A working Webcam Windows OS (64-bit) for native dynamic library compatibility ( stark_mouse_jni.dll and opencv_world3416.dll must be in the project root directory) How to Build and Run To build the project and execute the MainApp entry point: Open a terminal in the root directory. Compile and package the application: mvn package Run the generated executable JAR containing all dependencies: java -jar target/stark-mouse-1.0.0-jar-with-dependencies.jar Controls and Gestures Mouse Movement : Hold your hand in front of the webcam. Your cursor will follow the position of the base of your middle finger This anchor was specifically chosen to prevent cursor jumping when fingers pinch. Left Click / Click-and-Drag : Pinch your Thumb and Index Finger together. Releasing the pinch releases the mouse button. Right Click : Pinch your Thumb and Middle Finger together. Mouse Scrolling (Scroll Mode) : Pinch your Thumb and Pinky Finger together. While holding the pinch, move your hand vertically: Moving your hand up scrolls up. Moving your hand down scrolls down. While scrolling, mouse cursor movement is locked to prevent cursor drift. Toggle HUD Overlay (Ctrl+Shift+G) : Press this global hotkey to show or hide the Swing HUD window displaying the camera feed and landmarks. Repositioning HUD : Click and drag anywhere on the HUD panel to move the floating window across your desktop screen. 2. Problems Encountered During Development The “java being anti cv” bottleneck : Initially we planned on using a method called convex hulling to detect fingers as before libraries such as mediapipe that was a common finger detection method. We then realised that convexHull was terrible and we became primary sources as to why libraries such as MediaPipe have been developed. We then tried to bend the rules of the project by calling a python script running mediapipe detection. Our idea was quickly shut down. Our final option was taking the c++ library that was wrapped for python and creating a Java Native Interface from it using a tool called bezelisk. This process took a total of 5 hours, 10 gigabites of Shaurya Mathur’s hotspot and our mental stanities. Once we finally got bezel instealled and working with our library we learned that c++ itself is annoying. Initially, running the Mediapipe tracker and the JNI JVM invocation on the same thread blocked the Swing event thread, resulting in a frozen UI. We resolved this by spawning a separate native execution thread ( std::thread ) in the DLL, calling AttachCurrentThread to register it with the Java VM, and passing frames asynchronously....
|
1793123514.491949
|
1793209914.491949
|
|
16045
|
Ohne-Bot by @Rodrigo_Todescatto2010 | Stardance
|
Rodrigo_Todescatto2010
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T22:07:40Z", "hours": 0.0, "multiplier": 1.02, "payout": 0, "blessing": "neutral", "text": "I made a simple Slack bot, it has 5 commands: /dsb-teststring: Prints a string saying the bot is working /dsb-pingpong: Tests the time the bot takes to respond to a command /dsb-funcatfact: Prints out fun cat facts /dsb-extremelyfunnyjoke: Prints out a joke /dsb-help: Prints all commands and their usage", "repo": "https://github.com/RodX2010/Ohne-Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0APH2MMHH7"}]...
|
[{"post_id": 7108, "ts": "2026 [{"post_id": 7108, "ts": "2026-06-11T21:35:40Z", "hours": 0.4394, "text": "Hello world! Here it is, Ohne Bot. A simple yet funny bot! It doesn’t do anything that special but cmon, it’s funny! (even if it’s not, please act like it is…)"}]...
|
Title: Ohne-Bot by @Rodrigo_Todescatto2010 | Stard Title: Ohne-Bot by @Rodrigo_Todescatto2010 | Stardance
Devlogs:
Hello world! Here it is, Ohne Bot. A simple yet funny bot! It doesn’t do anything that special but cmon, it’s funny! (even if it’s not, please act like it is…)
Ships:
I made a simple Slack bot, it has 5 commands: /dsb-teststring: Prints a string saying the bot is working /dsb-pingpong: Tests the time the bot takes to respond to a command /dsb-funcatfact: Prints out fun cat facts /dsb-extremelyfunnyjoke: Prints out a joke /dsb-help: Prints all commands and their usage...
|
1793127307.2800324
|
1793213707.2800324
|
|
16064
|
Pistons by @EndLess9 | Stardance
|
EndLess9
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T00:19:16Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’m proud to showcase my first CAD project for Hack club. I decided to make a piston since it’ beginner friendly and incorporates a lot of tools that I learned in my basic training for Onshape.", "repo": "https://github.com/EndLessDude/Onshape-Piston", "demo": "https://cad.onshape.com/documents/6b9c6c0743535657905d2399/w/5c75fbc38a07ae5a80378a6e/e/a781c21170eb18971778938e?renderMode=0&uiState=6a2d8ba4d621c391c3f06010"}]...
|
[{"post_id": 15368, "ts": "202 [{"post_id": 15368, "ts": "2026-06-24T23:59:47Z", "hours": 0.6569, "text": "Changes: Added the gudgeon pin Made a connecting rod carving for design Made the rod bearing Curved the sides of the rod bearing for better looks"}, {"post_id": 8179, "ts": "2026-06-13T17:01:28Z", "hours": 0.365, "text": "Made a cylinder Removed the inside of the cylinder Made the piston rings Created valve pockets"}]...
|
Title: Pistons by @EndLess9 | Stardance
Devlogs:
Title: Pistons by @EndLess9 | Stardance
Devlogs:
Made a cylinder Removed the inside of the cylinder Made the piston rings Created valve pockets
Changes: Added the gudgeon pin Made a connecting rod carving for design Made the rod bearing Curved the sides of the rod bearing for better looks
Ships:
I’m proud to showcase my first CAD project for Hack club. I decided to make a piston since it’ beginner friendly and incorporates a lot of tools that I learned in my basic training for Onshape....
|
1793138360.516742
|
1793224760.516742
|
|
16100
|
Text Fill by @StarCoder | Stardance
|
StarCoder
|
1
|
9.0
|
156
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T04:35:47Z", "hours": 9.0, "multiplier": 17.96, "payout": 156, "blessing": "neutral", "text": "I made a project called TextFill. TextFill is a tool created in Python where users can create shortcuts that will automatically fill in with replacement text. For example, if a user creates a shortcut /email , and sets the replacement text to [email protected] , then whenever they type /email, it will automatically fill in as long as the app is running and replacing. There are two versions of the app. One is the UI version, that supports both Windows and Mac. The second is a menu bar version that only supports Mac. The UI version contains the base functionality of adding, removing, and clearing shortcuts, while also including modifying shortcuts and a settings page. The menubar version contains only the base functionality, as well as a button to show all shortcuts. The menu bar version is basically a streamlined version, for users who are on Mac, and don’t care too much about the settings. The menubar version is recommended for ease of use, as it lives on the Mac menubar, and won’t interfere with any work. You can also easily toggle the replacer on and off. This tool is best for people who type certain things repeatedly. For example, if a person has to fill in a sheet with either Accepted or Declined, then that person can easily create shortcuts like /a and /d, so it makes their job much easier. The main QoL improvements are Making repetitive tasks shorter and more efficient A settings panel where users can easily modify their preferences depending on their usual tasks An automatic save/load system that makes sure users never lose their shortcuts There were many challenges I faced while creating this project. I was still pretty new to Python when I started this project, and only knew basic things, like conditions or statements. Luckily, I’ve been coding in Unity (C#) for a long time, so it set a base that allowed me to learn the simple things like functions pretty easily. Many challenges I faced were with the UI, as in Unity, it is fairly easy to create basic UI without any code, but in Python, I had to use Tkinter for everything. It became even more difficult with making the menubar version, though I was able to figure them all out. I’m personally proud of the menu bar version, because I think it’s perfect for people who just want the main functionality, and don’t want to be bothered by a seperate window. To test my project, you can go to my GitHub release page which contains downloads for both versions. My README contains detailed instructions on how to download and run the app. (Below is a screenshot of my menu bar version) Thank you.", "repo": "https://github.com/StarCoder369/TextFill", "demo": "https://github.com/StarCoder369/TextFill/releases"}]...
|
[{"post_id": 18113, "ts": "202 [{"post_id": 18113, "ts": "2026-06-29T03:39:43Z", "hours": 3.1442, "text": "Text Fill Devlog 3 (Made in Python) It’s been more than a week since my last devlog. This is mostly because of me working on other projects, and also that there really wasn’t much to show. It was mostly just figuring out the syntax and bug fixing, so I decided to wait until I finished. This should be my last devlog before my ship, and I have added something which I think is a great improvement. Project Recap For those who don’t know my project, it’s called Text Fill, and it is a tool that I am making in Python, where you can define shortcuts and phrases, so when you type in the shortcut, it automatically replaces it with the phrase. For example, if you have set a shortcut to /email , and the phrase to [email protected] , when you type in /email anywhere with the program running in the background, it will automatically replace it with the phrase This is useful if you have to type a specific phrase very often. My Big Change ( I use a mac ) I had shown my project to my brother, and he liked the idea, but just randomly mentioned that it would be cool if it would show up on the menu bar, where things like the time and wifi are. I thought it would be cool and did some research, and realized that it was possible. I chose to use a package called Rumps, which allowed me to do this, and I basically made a completely new version of my app. Luckily, the old functionality code could be kept, I just had to change the UI. I also made this version much more simpler and streamlined you could say, mainly because I wasn’t able to add half of the functionality using Rumps(It’s probably possible, I just wasn’t able to), and it just didn’t feel right having something piled with unnecessary features in the menu bar. Two Versions So now, I have two versions of the app. One supports Windows + Mac, and has it’s own separate window. The second version is on the menu bar, and it’s much more streamlined, but also only for Mac. So I made both available on my Github page as a Github Release which you can try out using the demo link. Permissions Unfortunately, my project requires a lot of permissions that have to be manually enabled by the user, which makes the Quick Start, not very ‘Quick’. I tried to make the process simple, but I couldn’t really do anything since devices don’t just trust random apps. So it takes a few more minutes then it would have without permissions, but I made sure to include a detailed README so no one gets stuck. I’m going to ship my project probably by the end of the day, and hopefully it’ll get accepted. Thanks for reading until here! Belows a screenshot of how it looks in the menu bar!"}, {"post_id": 12062, "ts": "2026-06-19T17:48:55Z", "hours": 2.9614, "text": "Text Fill Devlog 2 (Made in Python) So it’s been a week since my last devlog since I was focusing on my main project, but I have made some good progress. For those who don’t know my project, it’s called Text Fill, and it is a tool that I am making in Python, where you can define shortcuts and phrases, so when you type in the shortcut, it automatically replaces it with the phrase. For example, if you have set a shortcut to /num , and the phrase to 123456789 , when you type in /num anywhere with the program running in the background, it will automatically replace it with 123456789 . This is useful if you have to type a specific phrase all the time like your email, so you can set a shortcut to /e or /email or anything else you want, to make it fill in the phrase. What I’ve added So since the last devlog, this is what I have added: UI for everything using Tkinter. Settings menu Now though this isn’t much, it took me a long time as I had to learn Python in the process. The UI is still quite basic and uses default colors, and I might make it look better later. The settings menu contains the following options: Backspace Delay Type Delay Delete Speed Type Speed More will be added in the future I decided not to make a website, as I felt like an app felt better. A demo will probably be coming in a week or two, and I would appreciate any suggestions or feedback. Below, there is a short video showing me using my tool. (It works everywhere, not only in a code editor, I just did it in the vscode since it was open)"}, {"post_id": 7767, "ts": "2026-06-12T23:52:39Z", "hours": 2.5881, "text": "Text Fill Made using Python I am making a text shortcut fill tool where users can set shortcuts which will automatically fill in when typed. This is for the Frictionless mission. Ex: user sets shortcut ‘/email’ with the value ‘ [email protected] ’. With this set, while the code is running in the background, if they type ‘/email’, then it will automatically fill in to ‘ [email protected] ’. I am using this project as an opportunity to get better at Python, as I am still a beginner, and am wanting to learn more. I have also made a GitHub repository, where the latest code has been published. What I already have Menu Manager Add Shortcuts Remove Shortcuts Modify Shortcuts Clear Shortcuts Show Shortcuts Basic save/load system using JSON file stored locally The actual text fill functionality What I plan to add Settings (A place where users can define certain values like filling speed, fill delay, etc.) UI (I want this to have UI, and I might even try to make a website) If you have any feedback or suggestions please let me know so I can improve. Thanks for reading!"}]...
|
Title: Text Fill by @StarCoder | Stardance
Devlog Title: Text Fill by @StarCoder | Stardance
Devlogs:
Text Fill Made using Python I am making a text shortcut fill tool where users can set shortcuts which will automatically fill in when typed. This is for the Frictionless mission. Ex: user sets shortcut ‘/email’ with the value ‘ [email protected] ’. With this set, while the code is running in the background, if they type ‘/email’, then it will automatically fill in to ‘ [email protected] ’. I am using this project as an opportunity to get better at Python, as I am still a beginner, and am wanting to learn more. I have also made a GitHub repository, where the latest code has been published. What I already have Menu Manager Add Shortcuts Remove Shortcuts Modify Shortcuts Clear Shortcuts Show Shortcuts Basic save/load system using JSON file stored locally The actual text fill functionality What I plan to add Settings (A place where users can define certain values like filling speed, fill delay, etc.) UI (I want this to have UI, and I might even try to make a website) If you have any feedback or suggestions please let me know so I can improve. Thanks for reading!
Text Fill Devlog 2 (Made in Python) So it’s been a week since my last devlog since I was focusing on my main project, but I have made some good progress. For those who don’t know my project, it’s called Text Fill, and it is a tool that I am making in Python, where you can define shortcuts and phrases, so when you type in the shortcut, it automatically replaces it with the phrase. For example, if you have set a shortcut to /num , and the phrase to 123456789 , when you type in /num anywhere with the program running in the background, it will automatically replace it with 123456789 . This is useful if you have to type a specific phrase all the time like your email, so you can set a shortcut to /e or /email or anything else you want, to make it fill in the phrase. What I’ve added So since the last devlog, this is what I have added: UI for everything using Tkinter. Settings menu Now though this isn’t much, it took me a long time as I had to learn Python in the process. The UI is still quite basic and uses default colors, and I might make it look better later. The settings menu contains the following options: Backspace Delay Type Delay Delete Speed Type Speed More will be added in the future I decided not to make a website, as I felt like an app felt better. A demo will probably be coming in a week or two, and I would appreciate any suggestions or feedback. Below, there is a short video showing me using my tool. (It works everywhere, not only in a code editor, I just did it in the vscode since it was open)
Text Fill Devlog 3 (Made in Python) It’s been more than a week since my last devlog. This is mostly because of me working on other projects, and also that there really wasn’t much to show. It was mostly just figuring out the syntax and bug fixing, so I decided to wait until I finished. This should be my last devlog before my ship, and I have added something which I think is a great improvement. Project Recap For those who don’t know my project, it’s called Text Fill, and it is a tool that I am making in Python, where you can define shortcuts and phrases, so when you type in the shortcut, it automatically replaces it with the phrase. For example, if you have set a shortcut to /email , and the phrase to [email protected] , when you type in /email anywhere with the program running in the background, it will automatically replace it with the phrase This is useful if you have to type a specific phrase very often. My Big Change ( I use a mac ) I had shown my project to my brother, and he liked the idea, but just randomly mentioned that it would be cool if it would show up on the menu bar, where things like the time and wifi are. I thought it would be cool and did some research, and realized that it was possible. I chose to use a package called Rumps, which allowed me to do this, and I basically made a completely new version of my app. Luckily, the old functionality code could be kept, I just had to change the UI. I also made this version much more simpler and streamlined you could say, mainly because I wasn’t able to add half of the functionality using Rumps(It’s probably possible, I just wasn’t able to), and it just didn’t feel right having something piled with unnecessary features in the menu bar. Two Versions So now, I have two versions of the app. One supports Windows + Mac, and has it’s own separate window. The second version is on the menu bar, and it’s much more streamlined, but also only for Mac. So I made both available on my Github page as a Github Release which you can try out using the demo link. Permissions Unfortunately, my project requires a lot of permissions that have to be manually enabled by the user, which makes the Quick Start, not very ‘Quick’. I tried to make the process simple, but I couldn’t really do anything since devices don’t just trust random apps. So it takes a few more minutes then it would have without permissions, but I made sure to include a detailed README so no one gets stuck. I’m going to ship my project probably by the end of the day, and hopefully it’ll get accepted. Thanks for reading until here! Belows a screenshot of how it looks in the menu bar!
Ships:
I made a project called TextFill. TextFill is a tool created in Python where users can create shortcuts that will automatically fill in with replacement text. For example, if a user creates a shortcut /email , and sets the replacement text to [email protected] , then whenever they type /email, it will automatically fill in as long as the app is running and replacing. There are two versions of the app. One is the UI version, that supports both Windows and Mac. The second is a menu bar version that only supports Mac. The UI version contains the base functionality of adding, removing, and clearing shortcuts, while also including modifying shortcuts and a settings page. The menubar version contains only the base functionality, as well as a button to show all shortcuts. The menu bar version is basically a streamlined version, for users who are on Mac, and don’t care too much about the settings. The menubar version is recommended for ease of use, as it lives on the Mac menubar, and won’t interfere with any work. You can also easily toggle the replacer on and off. This tool is best for people who type certain things repeatedly. For example, if a person has to fill in a sheet with either Accepted or Declined, then that person can easily create shortcuts like /a and /d, so it makes their job much easier. The main QoL improvements are Making repetitive tasks shorter and more efficient A settings panel where users can easily modify their preferences depending on their usual tasks An automatic save/load system that makes sure users never lose their shortcuts There were many challenges I faced while creating this project. I was still pretty new to Python when I started this project, and only knew basic things, like conditions or statements. Luckily, I’ve been coding in Unity (C#) for a long time, so it set a base that allowed me to learn the simple things like functions pretty easily. Many challenges I faced were with the UI, as in Unity, it is fairly easy to create basic UI without any code, but in Python, I had to use Tkinter for everything. It became even more difficult with making the menubar version, though I was able to figure them all out. I’m personally proud of the menu bar version, because I think it’s perfect for people who just want the main functionality, and don’t want to be bothered by a seperate window. To test my project, you can go to my GitHub release page which contains downloads for both versions. My README contains detailed instructions on how to download and run the app. (Below is a screenshot of my menu bar version) Thank you....
|
1793123307.0185616
|
1793209707.0185616
|
|
16138
|
Ping Pong Game by @Kingobingo | Stardance
|
Kingobingo
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T17:42:43Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple ping pong game you can play in the browser using html and javascript.", "repo": "https://github.com/DevsKingandEsther/PingPongGame", "demo": "https://drive.google.com/file/d/136c9VCNfynnpiodukjzyv0H4rhlS3phU/view?usp=sharing"}]...
|
[{"post_id": 11520, "ts": "202 [{"post_id": 11520, "ts": "2026-06-18T20:19:13Z", "hours": 0.3017, "text": "Ping Pong game. Trying to add a 3 second countdown after a point is scored."}]...
|
Title: Ping Pong Game by @Kingobingo | Stardance
Title: Ping Pong Game by @Kingobingo | Stardance
Devlogs:
Ping Pong game. Trying to add a 3 second countdown after a point is scored.
Ships:
I made a simple ping pong game you can play in the browser using html and javascript....
|
1793274792.2910948
|
1793361192.2910948
|
|
16140
|
My very own WebOS by @sircheetodust | Stardance
|
sircheetodust
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T22:20:05Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is unnamed OS. Feature list: Custom window system Allows window resizing Easier app creation(one JavaScript command) Completely custom notepad app(No Pad - -) Saving to browser’s localstorage so that notes are saved even through reloads and closing and reopening the website Loading screen simulator Game of the year, source code in its folder This is my first project for hack club so any feedback is appreciated", "repo": "https://github.com/word9317/webOs", "demo": "https://word9317.github.io/webOs/"}]...
|
[{"post_id": 7727, "ts": "2026 [{"post_id": 7727, "ts": "2026-06-12T21:55:44Z", "hours": 0.54, "text": "Updated the readme to be more comprehensive"}, {"post_id": 7697, "ts": "2026-06-12T21:05:35Z", "hours": 1.0128, "text": "Added a notepad app I added NoPad –, it has saving that persists through reloads and text that tells you if its saved or not!"}, {"post_id": 7559, "ts": "2026-06-12T17:14:15Z", "hours": 1.1333, "text": "Added a new app! Ever since i migrated to a new window system, adding apps is so much easier. You create your app as an html file and just add a shortcut to the desktop to open it. I added a very fun game called loading screen simulator. I am going to make some more apps soon!"}, {"post_id": 7204, "ts": "2026-06-12T00:58:04Z", "hours": 1.5847, "text": "Lots of work was done! I redid the background and also completely revised the window system. Now the window has maximizing. Window system is polished so that apps can be launched via a javascript command(scripts are revised versions of scripts i used in a previous project)"}, {"post_id": 7078, "ts": "2026-06-11T21:07:39Z", "hours": 1.6397, "text": "Created a basic window system. Added widgets. Going to continue with the tutorial and then customize it"}]...
|
Title: My very own WebOS by @sircheetodust | Stard Title: My very own WebOS by @sircheetodust | Stardance
Devlogs:
Created a basic window system. Added widgets. Going to continue with the tutorial and then customize it
Lots of work was done! I redid the background and also completely revised the window system. Now the window has maximizing. Window system is polished so that apps can be launched via a javascript command(scripts are revised versions of scripts i used in a previous project)
Added a new app! Ever since i migrated to a new window system, adding apps is so much easier. You create your app as an html file and just add a shortcut to the desktop to open it. I added a very fun game called loading screen simulator. I am going to make some more apps soon!
Added a notepad app I added NoPad –, it has saving that persists through reloads and text that tells you if its saved or not!
Updated the readme to be more comprehensive
Ships:
This is unnamed OS. Feature list: Custom window system Allows window resizing Easier app creation(one JavaScript command) Completely custom notepad app(No Pad - -) Saving to browser’s localstorage so that notes are saved even through reloads and closing and reopening the website Loading screen simulator Game of the year, source code in its folder This is my first project for hack club so any feedback is appreciated...
|
1793220750.7387896
|
1793307150.7387896
|
|
16159
|
captcha slover by @azure | Stardance
|
azure
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T06:05:08Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a captcha solver using yolo and pyautogui. one of the biggest challenges was compute, i don’t own a GPU so trying to run the model locally wasn’t possible but google collab was giving me issues even when tunnels worked sometimes it wouldn’t bind to port. I’m proud of how it turned out in the end not the most accurate project but a fun make. you’ll need to clone the project and put notebook into google collab or modify it for local use when the notebook works just copy the 1st link you see and paste it into the URL in the autocaptcha.py", "repo": "https://github.com/BraedynL0530/autocaptcha", "demo": "https://github.com/BraedynL0530/autocaptcha/tree/master"}]...
|
[{"post_id": 7254, "ts": "2026 [{"post_id": 7254, "ts": "2026-06-12T03:07:18Z", "hours": 1.1364, "text": "devlog 2 fixxing ocr and double click cordinates. I realized that it wasnt a traing issue most of the time rather the ocr just sucks so i cropped the header to help. and i also had client side cordinates for the header so ocr was bugging i fixxed it by adjusting for its pov. same with click cordinates. also for some reason it clicks the same square twice to i decied to filter out over lapping classes to fix it using iou. it has improved the accuracy but still not as accurate as id like"}, {"post_id": 6624, "ts": "2026-06-11T03:30:24Z", "hours": 1.1469, "text": "devlog 1 adding on fixxing the tunnel not connecting to port 8000/ 502 gateway error i needed a time .sleep after debugging with curl, also. ocr struggles with all the text so i cropped it for purely ocr, with a test script to find each corner and the width/height of it. need to fine tune model for more items as of now it doesnt know what to click and is only good at items in dataset and the full item not pieces of it."}]...
|
Title: captcha slover by @azure | Stardance
Devlo Title: captcha slover by @azure | Stardance
Devlogs:
devlog 1 adding on fixxing the tunnel not connecting to port 8000/ 502 gateway error i needed a time .sleep after debugging with curl, also. ocr struggles with all the text so i cropped it for purely ocr, with a test script to find each corner and the width/height of it. need to fine tune model for more items as of now it doesnt know what to click and is only good at items in dataset and the full item not pieces of it.
devlog 2 fixxing ocr and double click cordinates. I realized that it wasnt a traing issue most of the time rather the ocr just sucks so i cropped the header to help. and i also had client side cordinates for the header so ocr was bugging i fixxed it by adjusting for its pov. same with click cordinates. also for some reason it clicks the same square twice to i decied to filter out over lapping classes to fix it using iou. it has improved the accuracy but still not as accurate as id like
Ships:
i made a captcha solver using yolo and pyautogui. one of the biggest challenges was compute, i don’t own a GPU so trying to run the model locally wasn’t possible but google collab was giving me issues even when tunnels worked sometimes it wouldn’t bind to port. I’m proud of how it turned out in the end not the most accurate project but a fun make. you’ll need to clone the project and put notebook into google collab or modify it for local use when the notebook works just copy the 1st link you see and paste it into the URL in the autocaptcha.py...
|
1792878705.9697392
|
1793742705.9697392
|
|
16168
|
ChickenBot Slack Bot by @Adammm | Stardance
|
Adammm
|
1
|
2.27
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T23:44:39Z", "hours": 2.0, "multiplier": 2.15, "payout": 4, "blessing": "neutral", "text": "I made a slack bot The most complecated part was making it run 24/7. The best part of making this bot was intergrating AI gemini api into the bot so it is possible to talk with AI via the bot. Pls dm if any problems", "repo": "https://github.com/Halcyon28/ChcknBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BA54WCAGK"}]...
|
[{"post_id": 16125, "ts": "202 [{"post_id": 16125, "ts": "2026-06-26T06:52:57Z", "hours": 0.2667, "text": "Bug fixes"}, {"post_id": 7739, "ts": "2026-06-12T22:25:47Z", "hours": 0.8375, "text": "Adding gemini AI to the bot"}, {"post_id": 7046, "ts": "2026-06-11T20:16:03Z", "hours": 0.7906, "text": "test log"}]...
|
Title: ChickenBot Slack Bot by @Adammm | Stardance Title: ChickenBot Slack Bot by @Adammm | Stardance
Devlogs:
test log
Adding gemini AI to the bot
Bug fixes
Ships:
I made a slack bot The most complecated part was making it run 24/7. The best part of making this bot was intergrating AI gemini api into the bot so it is possible to talk with AI via the bot. Pls dm if any problems...
|
1793220796.11053
|
1793307196.11053
|
|
16172
|
My very own 'Pokedex' by @Sashish | Starda My very own 'Pokedex' by @Sashish | Stardance...
|
Sashish
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T21:28:49Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Its as simple at it gets, a real life Pokedex. It works just as you would think, animal in frame, click scan and you have your identification. I learned a lot while making this, I am happy with how it turned out, I will continue to add more features. Please let me know if something does not work or is bugged.", "repo": "https://github.com/Cosmis-SS/stardance-webos", "demo": "https://stardance-webos-brown.vercel.app/"}]...
|
[{"post_id": 12154, "ts": "202 [{"post_id": 12154, "ts": "2026-06-19T21:06:44Z", "hours": 2.5864, "text": "The very very basics are now down, at least it will scan and identify the animal, next steps will mostly be to add a log animals the user has scanned!"}, {"post_id": 10398, "ts": "2026-06-17T02:42:06Z", "hours": 0.2928, "text": "Right now its a very basic and quick mock up for the UI of a IRL ‘Pokedex’ right now its for North American animals, later it will push into recognizing stars in the sky and etc."}]...
|
Title: My very own 'Pokedex' by @Sashish | Title: My very own 'Pokedex' by @Sashish | Stardance
Devlogs:
Right now its a very basic and quick mock up for the UI of a IRL ‘Pokedex’ right now its for North American animals, later it will push into recognizing stars in the sky and etc.
The very very basics are now down, at least it will scan and identify the animal, next steps will mostly be to add a log animals the user has scanned!
Ships:
Its as simple at it gets, a real life Pokedex. It works just as you would think, animal in frame, click scan and you have your identification. I learned a lot while making this, I am happy with how it turned out, I will continue to add more features. Please let me know if something does not work or is bugged....
|
1793116440.855647
|
1793202840.855647
|
|
16190
|
Apollo mission simulator by @prajithvishnur | Star Apollo mission simulator by @prajithvishnur | Stardance...
|
prajithvishnur
|
1
|
1.0
|
15
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T02:48:52Z", "hours": 1.0, "multiplier": 15.2, "payout": 15, "blessing": "neutral", "text": "I think I have finished version one of the game. I am now going to ship. I hope you all enjoy it, and I can’t wait for the feedback!!!", "repo": "https://github.com/prajith-vishnu/apollo13-mission-critical", "demo": "https://prajith-vishnu.github.io/apollo13-mission-critical/"}]...
|
[{"post_id": 8891, "ts": "2026 [{"post_id": 8891, "ts": "2026-06-14T20:06:57Z", "hours": 0.5925, "text": "Got a lot of scenarios for the game built. It’s going pretty well, also hosting it on git."}, {"post_id": 6893, "ts": "2026-06-11T15:40:09Z", "hours": 0.3906, "text": "created a start screen that i think looks rlly cool. hope to turn this into an awesome space game."}]...
|
Title: Apollo mission simulator by @prajithvishnur Title: Apollo mission simulator by @prajithvishnur | Stardance
Devlogs:
created a start screen that i think looks rlly cool. hope to turn this into an awesome space game.
Got a lot of scenarios for the game built. It’s going pretty well, also hosting it on git.
Ships:
I think I have finished version one of the game. I am now going to ship. I hope you all enjoy it, and I can’t wait for the feedback!!!...
|
1793278141.4837754
|
1793364541.4837754
|
|
16191
|
Macondo Esoteric Compiler by @vitamin | Stardance
|
vitamin
|
1
|
5.64
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T21:57:07Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a compiler that transforms esoteric code into clean and optimized C. It was pretty difficult for me to create an algorithm to parse and coalesce tokens instead of using a slightly worse string swapping type. I’m really proud that the emitted C code is optimized specifically so GCC can easily fold constants and having a well-optimized compiler overall. (sorry if this is your second time seeing this) Note: Was previously shipped to Macondo but got permanently rejected (no re-ship) by FraudSquad with no note/notice or any reasoning, tried to reach out but got no responses or answers. All hours and working time (much more than the 3 hours that appear here) are logged via Hackatime, Github repo timestamps, and Macondo journals.", "repo": "https://github.com/vktryyy/macondo-compiler", "demo": "https://macondo-compiler-v3.streamlit.app/"}]...
|
[{"post_id": 28642, "ts": "202 [{"post_id": 28642, "ts": "2026-07-15T00:43:59Z", "hours": 2.3806, "text": "If the demo displays “😴-Zzzz: This app has gone to sleep due to inactivity. Would you like to wake it back up?”, click the blue button below that says “Yes, get this app back up!” until it redirects you to this screen (attached image) with changing emoji’s and wait until the demo is ready to view and use. This happens because I’m using the free community tier of streamlit.app, so it automatically puts the app to sleep to save recourses and bandwidth for other community users who are also deploying websites/apps on the free tier."}, {"post_id": 13309, "ts": "2026-06-21T19:48:05Z", "hours": 0.2572, "text": "THIS PROJECT IS JUST A RE-SHIP FOR MY ORIGINAL PROJECT ON MACONDO, READ THE SHIP LOG. A reason why there’s only a handful of DevLogs is because this project was already finished and journaled on Macondo, so I didn’t have much to put here. All hours and working time (much more than the 3 hours that appear here) are logged via Hackatime, Github repo timestamps, and Macondo journals."}, {"post_id": 11587, "ts": "2026-06-18T21:27:03Z", "hours": 0.2897, "text": "print(“DevLog #2:”) the updates: token coalescing: instead of spamming the CPU, consecutive instructions like NEXT NEXT NEXT get compressed into a clean ptr += 3; . compiler integration: connected the frontend to local GCC/Clang compilers via subprocess , wrapped it in an automated -O3 pipeline, and added a 4-second timeout to kill infinite loops. to-do: teach the IR to recognize loop-clearing patterns (turning [-] into an immediate *ptr = 0; )."}, {"post_id": 10417, "ts": "2026-06-17T03:41:16Z", "hours": 2.8561, "text": "print(“DevLog #1:”) 65,000-Byte typo. Macondo (the language I created) sets up a standard 65KB memory array for the Brainf*** runtime, or at least it was supposed to. While hardcoding the C template, my finger slipped somehow (probably while I was drinking tea) and wrote this instead: char mem[65Z536] = {0} Calling ‘gg’ on itself. While debugging the subprocess execution that fires off GCC, SOMEONE must have accidentally hit some vim shortcuts or typed out their frustration into the source code. Right before checking the GCC return code, there was a standalone ‘gg’ sitting in the script. cmd = [“gcc”, “-O3”, tmp_name, “-o”, outfile] res = subprocess.run(cmd) gg # <— been here the whole time, unaware. if res.returncode == 0:"}]...
|
Title: Macondo Esoteric Compiler by @vitamin | Sta Title: Macondo Esoteric Compiler by @vitamin | Stardance
Devlogs:
print(“DevLog #1:”) 65,000-Byte typo. Macondo (the language I created) sets up a standard 65KB memory array for the Brainf*** runtime, or at least it was supposed to. While hardcoding the C template, my finger slipped somehow (probably while I was drinking tea) and wrote this instead: char mem[65Z536] = {0} Calling ‘gg’ on itself. While debugging the subprocess execution that fires off GCC, SOMEONE must have accidentally hit some vim shortcuts or typed out their frustration into the source code. Right before checking the GCC return code, there was a standalone ‘gg’ sitting in the script. cmd = [“gcc”, “-O3”, tmp_name, “-o”, outfile] res = subprocess.run(cmd) gg # <— been here the whole time, unaware. if res.returncode == 0:
print(“DevLog #2:”) the updates: token coalescing: instead of spamming the CPU, consecutive instructions like NEXT NEXT NEXT get compressed into a clean ptr += 3; . compiler integration: connected the frontend to local GCC/Clang compilers via subprocess , wrapped it in an automated -O3 pipeline, and added a 4-second timeout to kill infinite loops. to-do: teach the IR to recognize loop-clearing patterns (turning [-] into an immediate *ptr = 0; ).
THIS PROJECT IS JUST A RE-SHIP FOR MY ORIGINAL PROJECT ON MACONDO, READ THE SHIP LOG. A reason why there’s only a handful of DevLogs is because this project was already finished and journaled on Macondo, so I didn’t have much to put here. All hours and working time (much more than the 3 hours that appear here) are logged via Hackatime, Github repo timestamps, and Macondo journals.
If the demo displays “😴-Zzzz: This app has gone to sleep due to inactivity. Would you like to wake it back up?”, click the blue button below that says “Yes, get this app back up!” until it redirects you to this screen (attached image) with changing emoji’s and wait until the demo is ready to view and use. This happens because I’m using the free community tier of streamlit.app, so it automatically puts the app to sleep to save recourses and bandwidth for other community users who are also deploying websites/apps on the free tier.
Ships:
I made a compiler that transforms esoteric code into clean and optimized C. It was pretty difficult for me to create an algorithm to parse and coalesce tokens instead of using a slightly worse string swapping type. I’m really proud that the emitted C code is optimized specifically so GCC can easily fold constants and having a well-optimized compiler overall. (sorry if this is your second time seeing this) Note: Was previously shipped to Macondo but got permanently rejected (no re-ship) by FraudSquad with no note/notice or any reasoning, tried to reach out but got no responses or answers. All hours and working time (much more than the 3 hours that appear here) are logged via Hackatime, Github repo timestamps, and Macondo journals....
|
1793224547.7387068
|
1793310947.7387068
|
|
16193
|
prism by @olaiwonismail | Stardance
|
olaiwonismail
|
1
|
11.38
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T17:46:48Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Built Prism, a virtual mic that cleans your audio in real time and feeds it to Discord/Zoom/OBS(basically various apps) as a microphone. CPU-only AI noise removal (RNNoise, GTCRN, DeepFilterNet3), switchable live with a strength slider and noise meter. Hardest part was keeping it real-time: matching block sizes, resampling, and STFT timing so the denoisers stay phase-aligned under ~40ms latency else its give a very choppy audio. Proud that it all runs on my potato pc’s CPU with low idle usage. To test: install VB-Audio Virtual Cable, run the app, then pick “CABLE Output” as your mic in any app. Disclaimer -GTCRN isn’t in the latest exe release yet but you can use the other models", "repo": "https://github.com/Olaiwonismail/prism", "demo": "https://olaiwonismail.github.io/prism/"}]...
|
[{"post_id": 10654, "ts": "202 [{"post_id": 10654, "ts": "2026-06-17T14:48:22Z", "hours": 2.3792, "text": "-progress is slow just came back from the hospital Was able to add a way for you to demo it in your browser -added a fastapi endpoint that runs the denoiser on the uploaded audio -wired the apps webpage to the api so people can try it without having to install the app the app is only availbale to use on windows btw (linux and mac support coming soon)"}, {"post_id": 8207, "ts": "2026-06-13T17:31:39Z", "hours": 0.2792, "text": "added this to the site so users can understand how it works"}, {"post_id": 8143, "ts": "2026-06-13T16:12:36Z", "hours": 1.2011, "text": "i added ultra‑light GTCRN model support i updated the website to show v0.1.0 available for download"}, {"post_id": 7760, "ts": "2026-06-12T23:26:44Z", "hours": 1.5822, "text": "created a website for prism where people can download this project and read more about it(see the roadmap, read release notes) added MIT license created an executable(.exe) for prism dropped v0.1.0 ,it’s on the GitHub releases pages"}, {"post_id": 7311, "ts": "2026-06-12T05:47:09Z", "hours": 1.5156, "text": "Added DeepFilterNet (ONNX) as an optional denoiser, swappable via config alongside RNNoise Added adjustable noise removal slider (0-100%) with separate on/off toggle Added noise meter: shows how much noise is being removed + estimated room noise floor phase 2 done I guess 🎉 will improve the ui plan to use tauri later on but for now tkinter will do"}, {"post_id": 6946, "ts": "2026-06-11T17:27:39Z", "hours": 0.7703, "text": "Built Phase 2 (features i added) RNNoise AI noise removal Fixed the WO Mic crash Fixed your voice getting clipped at the start of words"}, {"post_id": 6909, "ts": "2026-06-11T16:10:52Z", "hours": 0.94, "text": "built a minimal Tkinter UI for Prism: a small window with an on/off toggle for filtering, a dropdown to switch between microphones, a live level meter with gate status, and a status line. To support it, the audio code was refactored from a blocking loop into a controllable AudioEngine that can start, stop, and switch mics at runtime — a stopgap until the Tauri UI, but the engine part is permanent. currently i’m in my hostel and there is a lot of noise in the background the images show a before and after the filtering of noise"}, {"post_id": 6843, "ts": "2026-06-11T14:23:58Z", "hours": 1.1961, "text": "Added safe mic auto-detection. Prism now validates the input device instead of blindly using the Windows default — it rejects VB-Cable and Sound Mapper pseudo-devices (which cause a feedback loop where Prism listens to its own output), falls back to the first real microphone, and exits with a clear help message if no mic exists. no ui yet 🤧"}, {"post_id": 6668, "ts": "2026-06-11T05:36:56Z", "hours": 1.2961, "text": "One afternoon I was giving a presentation in my rooom, and the room came with me , a ceiling fan , my roomate watching tiktoks in the background, the low hum a room always has. All of it rode my mic straight into the call. I couldn’t mute (I was the one talking), and I couldn’t fix the room. So the idea for Prism was simple and a little stubborn: your voice should be the only thing that leaves your microphone progress so far: -work on the project structure, -Capture physical mic input -Route processed audio to virtual cable output (VB-Audio) -High-pass filter (the processing layer for now)"}]...
|
Title: prism by @olaiwonismail | Stardance
Devlog Title: prism by @olaiwonismail | Stardance
Devlogs:
One afternoon I was giving a presentation in my rooom, and the room came with me , a ceiling fan , my roomate watching tiktoks in the background, the low hum a room always has. All of it rode my mic straight into the call. I couldn’t mute (I was the one talking), and I couldn’t fix the room. So the idea for Prism was simple and a little stubborn: your voice should be the only thing that leaves your microphone progress so far: -work on the project structure, -Capture physical mic input -Route processed audio to virtual cable output (VB-Audio) -High-pass filter (the processing layer for now)
Added safe mic auto-detection. Prism now validates the input device instead of blindly using the Windows default — it rejects VB-Cable and Sound Mapper pseudo-devices (which cause a feedback loop where Prism listens to its own output), falls back to the first real microphone, and exits with a clear help message if no mic exists. no ui yet 🤧
built a minimal Tkinter UI for Prism: a small window with an on/off toggle for filtering, a dropdown to switch between microphones, a live level meter with gate status, and a status line. To support it, the audio code was refactored from a blocking loop into a controllable AudioEngine that can start, stop, and switch mics at runtime — a stopgap until the Tauri UI, but the engine part is permanent. currently i’m in my hostel and there is a lot of noise in the background the images show a before and after the filtering of noise
Built Phase 2 (features i added) RNNoise AI noise removal Fixed the WO Mic crash Fixed your voice getting clipped at the start of words
Added DeepFilterNet (ONNX) as an optional denoiser, swappable via config alongside RNNoise Added adjustable noise removal slider (0-100%) with separate on/off toggle Added noise meter: shows how much noise is being removed + estimated room noise floor phase 2 done I guess 🎉 will improve the ui plan to use tauri later on but for now tkinter will do
created a website for prism where people can download this project and read more about it(see the roadmap, read release notes) added MIT license created an executable(.exe) for prism dropped v0.1.0 ,it’s on the GitHub releases pages
i added ultra‑light GTCRN model support i updated the website to show v0.1.0 available for download
added this to the site so users can understand how it works
-progress is slow just came back from the hospital Was able to add a way for you to demo it in your browser -added a fastapi endpoint that runs the denoiser on the uploaded audio -wired the apps webpage to the api so people can try it without having to install the app the app is only availbale to use on windows btw (linux and mac support coming soon)
Ships:
Built Prism, a virtual mic that cleans your audio in real time and feeds it to Discord/Zoom/OBS(basically various apps) as a microphone. CPU-only AI noise removal (RNNoise, GTCRN, DeepFilterNet3), switchable live with a strength slider and noise meter. Hardest part was keeping it real-time: matching block sizes, resampling, and STFT timing so the denoisers stay phase-aligned under ~40ms latency else its give a very choppy audio. Proud that it all runs on my potato pc’s CPU with low idle usage. To test: install VB-Audio Virtual Cable, run the app, then pick “CABLE Output” as your mic in any app. Disclaimer -GTCRN isn’t in the latest exe release yet but you can use the other models...
|
1793246011.9978921
|
1793332411.9978921
|
|
16211
|
uwuOS by @blazfoxx | Stardance
|
blazfoxx
|
1
|
14.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T23:42:44Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A fully working OS with a music player, video feed, drawing app, etc… Has a cool load in asking your name and remembers it when you login next time. It also has an idle screen!", "repo": "https://github.com/blazfxx/uwuOS", "demo": "https://uwu-os.vercel.app/"}]...
|
[{"post_id": 13965, "ts": "202 [{"post_id": 13965, "ts": "2026-06-22T22:31:10Z", "hours": 4.765, "text": "devlog 6 spotlight search: weather app: pulls real weather from open-meteo (free, no api key). asks for ur location, shows temp, condition, high low and wind. falls back to new york if u dont allow location backgrounds: u can paste an image url in settings now and itll become ur wallpaper mobile support, hopefully u can drag the dock icons to reorder them now music player :)"}, {"post_id": 7839, "ts": "2026-06-13T02:26:44Z", "hours": 2.2592, "text": "devlog 5 added: widgets idle screen added with a clock settings: the wallpaper picker. u can: pick a background color from swatches or go custom with a color picker change how long before the idle screen kicks in (30s to 5 min, or never) make the idle clock small medium or large toggle the date and the hint text on the idle screen give the idle screen its own background change ur name everything saves so its all still how u left it when u come back todo for next time: remember open windows and positions on refresh music player maybe idle screen wallpapers instead of just colors"}, {"post_id": 7426, "ts": "2026-06-12T11:31:10Z", "hours": 2.3217, "text": "devlog #4 big one today. built a whole shorts app and gave the OS a memory shorts: its like tiktok but in my OS lol. it pulls actual live videos from youtube channels i picked (carterpcs, yahya alhihi, miwu science) thru their rss feeds. hid all the ugly yt player controls so it just loops clean like a real short I also added GLOBAL likes. found a free counter api so when someone likes a video, everyone who visits the site sees that count go up. u also cant relike stuff bc ur device gets remembered. theres comments too with a slide up panel, and an add button where u can paste any shorts link and itll join ur feed the OS knows who u are now. first time u load in it asks “what should we call you” on its own lil screen after boot, and next time it goes “Welcome back, [name]… UwU~” which I rly like lol comments post as name#tag (like discord) so if two people are both named alex they dont get mixed up also: updated the welcome window with my actual pfp and about me (entrepreneur surviving school, saving for a mac mini yeah yeah) videos pause when u close the window now bugs ig yt embeds kept playing audio after closing the window. used postMessage pauseVideo my html edit broke the sketch icon and my desktop exploded lol todo for next time: remember open windows and positions on refresh custom wallpaper picker (still lol) maybe a music player"}, {"post_id": 7161, "ts": "2026-06-11T23:17:53Z", "hours": 1.0842, "text": "day 2 notes actually save now. used cookies so when u refresh ur notes are still there. made a dock windows are resizable now too todo for next time: more apps custom wallpaper picker"}, {"post_id": 6790, "ts": "2026-06-11T11:33:30Z", "hours": 3.8922, "text": "uwuOS dev log day 1 ok so today i started building my own OS in the browser… ig made a boot screen first with a little loading bar that fills up fake progress lol. got windows working too. you can drag them around by the header which was lowkey the hardest part. also made them stack properly so when you click one it comes to the front. apps so far: welcome screen (links to my github, blazfxx) notes app where u can type stuff and add it to a list about window that does basically nothing but it looks official went with a dark theme bugs ig close button wasnt clickable bc the drag code was eating the clicks. fixed it clock kept was not clocking todo for next time: save notes so they dont disappear on refresh maybe a dock at the bottom resizing windows Accidently ended up spending a lot of time redoing the UI like non stop…. yeah im horrible with UIs 🌹"}]...
|
Title: uwuOS by @blazfoxx | Stardance
Devlogs:
uw Title: uwuOS by @blazfoxx | Stardance
Devlogs:
uwuOS dev log day 1 ok so today i started building my own OS in the browser… ig made a boot screen first with a little loading bar that fills up fake progress lol. got windows working too. you can drag them around by the header which was lowkey the hardest part. also made them stack properly so when you click one it comes to the front. apps so far: welcome screen (links to my github, blazfxx) notes app where u can type stuff and add it to a list about window that does basically nothing but it looks official went with a dark theme bugs ig close button wasnt clickable bc the drag code was eating the clicks. fixed it clock kept was not clocking todo for next time: save notes so they dont disappear on refresh maybe a dock at the bottom resizing windows Accidently ended up spending a lot of time redoing the UI like non stop…. yeah im horrible with UIs 🌹
day 2 notes actually save now. used cookies so when u refresh ur notes are still there. made a dock windows are resizable now too todo for next time: more apps custom wallpaper picker
devlog #4 big one today. built a whole shorts app and gave the OS a memory shorts: its like tiktok but in my OS lol. it pulls actual live videos from youtube channels i picked (carterpcs, yahya alhihi, miwu science) thru their rss feeds. hid all the ugly yt player controls so it just loops clean like a real short I also added GLOBAL likes. found a free counter api so when someone likes a video, everyone who visits the site sees that count go up. u also cant relike stuff bc ur device gets remembered. theres comments too with a slide up panel, and an add button where u can paste any shorts link and itll join ur feed the OS knows who u are now. first time u load in it asks “what should we call you” on its own lil screen after boot, and next time it goes “Welcome back, [name]… UwU~” which I rly like lol comments post as name#tag (like discord) so if two people are both named alex they dont get mixed up also: updated the welcome window with my actual pfp and about me (entrepreneur surviving school, saving for a mac mini yeah yeah) videos pause when u close the window now bugs ig yt embeds kept playing audio after closing the window. used postMessage pauseVideo my html edit broke the sketch icon and my desktop exploded lol todo for next time: remember open windows and positions on refresh custom wallpaper picker (still lol) maybe a music player
devlog 5 added: widgets idle screen added with a clock settings: the wallpaper picker. u can: pick a background color from swatches or go custom with a color picker change how long before the idle screen kicks in (30s to 5 min, or never) make the idle clock small medium or large toggle the date and the hint text on the idle screen give the idle screen its own background change ur name everything saves so its all still how u left it when u come back todo for next time: remember open windows and positions on refresh music player maybe idle screen wallpapers instead of just colors
devlog 6 spotlight search: weather app: pulls real weather from open-meteo (free, no api key). asks for ur location, shows temp, condition, high low and wind. falls back to new york if u dont allow location backgrounds: u can paste an image url in settings now and itll become ur wallpaper mobile support, hopefully u can drag the dock icons to reorder them now music player :)
Ships:
A fully working OS with a music player, video feed, drawing app, etc… Has a cool load in asking your name and remembers it when you login next time. It also has an idle screen!...
|
1793256622.8023736
|
1793343022.8023736
|
|
16233
|
See-TreePiO by @Aryana | Stardance
|
Aryana
|
1
|
142.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T06:32:43Z", "hours": 142.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a project that can detect tree/plant species and temperature to determine whether it is dead or not. It displays the result on an LCD in the back, and will start the process of scanning a tree/plant once a button is pressed. The wiring is enclosed in a 3D printed prototype. The most difficult thing I did in this project was likely trying to fit it all in the enclosure. There were a lot of wires here and there, and the button was also quite difficult to fit in, as I needed to solder it on. However, this project was really fun to do, as it helped me gain knowledge about the environment around me, and I got to practice my software and hardware skills. I am really proud of myself, as I completed this project from start to finish, and didn’t give up. To test my project, all you have to do is plug in the battery pack, wait for a minute or so, point the prototype at the tree you want to scan, press the button, and wait for the results. Sometimes, it will take a little longer to get the results, resulting from a difficulty figuring out either the temperature or species of that particular plant/tree.", "repo": "https://github.com/dawinner395/tree-health-scanner", "demo": ""}]...
|
[{"post_id": 69981, "ts": "202 [{"post_id": 69981, "ts": "2026-09-18T05:40:56Z", "hours": 0.35, "text": "I completed the prototype by combining the enclosure with the prototype. I encased the sensors and the LCD. The prototype is finally complete!"}, {"post_id": 69965, "ts": "2026-09-18T04:18:13Z", "hours": 1.5167, "text": "I combined the parts in the bottom half of the prototype, and fit it in the encolsure."}, {"post_id": 67575, "ts": "2026-09-13T18:30:05Z", "hours": 1.3167, "text": "I researched the different types of prevalent trees in California and their temperatures during different seasons. I plan to add this to my database, as I hadn’t previously done this. I used many websites, but Our City Forest was the most helpful."}, {"post_id": 66887, "ts": "2026-09-12T20:45:05Z", "hours": 0.9333, "text": "I fixed the issues that the prototype was facing. I also added a button. The main thing I did was make the prototype able to function without the computer nearby, which can make it so that anyone in the world can use it with a battery pack."}, {"post_id": 64447, "ts": "2026-09-08T20:39:44Z", "hours": 12.0014, "text": "I 3D printed the top half of the housing for the prototype. Next, I will print the bottom half."}, {"post_id": 48288, "ts": "2026-08-16T16:26:44Z", "hours": 10.6833, "text": "I build a CAD of the structure that will house the prototype. I left holes for all the different parts, and will print it later today."}, {"post_id": 36195, "ts": "2026-07-28T03:59:06Z", "hours": 1.7667, "text": "I connected the database to the Raspberry Pi, and tested it out using a house plant. It worked really well, and the next step is to test it outside with a real tree."}, {"post_id": 35375, "ts": "2026-07-26T18:41:48Z", "hours": 1.8333, "text": "I researched about how to use the specific PlantNet API database with the Raspberry Pi and hook that database to a Machine Learning algorthim. I am finally ready to actually make the Machine Learning algorithm and get my hands dirty now that I have the information I need to continue on with the project."}, {"post_id": 32105, "ts": "2026-07-21T01:22:30Z", "hours": 0.3333, "text": "I researched more about the tree datasets, and I found one that has plenty of accurate information: PlantNet API."}, {"post_id": 31560, "ts": "2026-07-20T02:06:06Z", "hours": 0.6333, "text": "I researched the different datasets I can use for the project, as well as the amount of tree data each have in them. I still need to do some more research, but as of now, creating a dataset is the best option if I want to get a wide, accurate range of data. I haven’t found any datasets that match the amount of data I can collect by myself in my neighborhood."}, {"post_id": 29878, "ts": "2026-07-17T01:24:55Z", "hours": 0.6, "text": "I tested the camera and battery pack that came. They both worked really well. Now, I can start inputting the ML algrothm."}, {"post_id": 28665, "ts": "2026-07-15T01:45:42Z", "hours": 3.7747, "text": "I fiinshed the Machine Learning book."}, {"post_id": 28079, "ts": "2026-07-14T03:24:59Z", "hours": 1.0333, "text": "I read Chapters 14 and 15 of the Machine Learning book. The parts will come tomorrow."}, {"post_id": 27961, "ts": "2026-07-13T22:13:23Z", "hours": 0.6833, "text": "I read Chapter 13 of the Machine Learning book."}, {"post_id": 27279, "ts": "2026-07-12T18:33:41Z", "hours": 1.65, "text": "I planned the way I am going to connect the ArduCam to the Raspberry Pi with the thermal sensor. I realized I might have to solder some wires together so that more than one wire can fit on one pin on the Pi. I planned the way the wires are going to connect to the Pi and how I am going to integrate ML into the Pi using the camera and thermal sensor."}, {"post_id": 26242, "ts": "2026-07-10T22:09:55Z", "hours": 1.7667, "text": "I researched more about using the ArduCam with the Raspberry Pi 5. I found troubleshooting techniques and what I need to do after I get the camera (the setup)."}, {"post_id": 25652, "ts": "2026-07-10T02:04:39Z", "hours": 1.6847, "text": "I read Chapters 11 and 12 of the Machine Learning book."}, {"post_id": 25543, "ts": "2026-07-09T21:16:12Z", "hours": 1.5167, "text": "I watched a video about using the ArduCam with the Raspberry Pi 5."}, {"post_id": 25481, "ts": "2026-07-09T19:38:18Z", "hours": 1.2369, "text": "I read Chapters 9 and 10 of the Machine Learning book."}, {"post_id": 25077, "ts": "2026-07-09T01:30:27Z", "hours": 0.4, "text": "I read Chapter 8 of the Machine Learning book. I will stop watching the AI on the Edge videos because they are not accessible on YouTube after Lesson 31. The parts will come day after tomorrow, so I plan to finish reading this book by then."}, {"post_id": 24895, "ts": "2026-07-08T19:02:48Z", "hours": 2.1167, "text": "I watched Lesson 31 of the AI on the Edge videos."}, {"post_id": 24517, "ts": "2026-07-08T03:43:40Z", "hours": 2.1914, "text": "I watched Lesson 30 of the AI on the Edge videos."}, {"post_id": 24471, "ts": "2026-07-08T01:31:47Z", "hours": 1.9167, "text": "I watched Lesson 29 of the AI on the Edge videos."}, {"post_id": 24422, "ts": "2026-07-07T23:28:04Z", "hours": 3.2, "text": "I watched Lesson 28 of the AI on the Edge videos."}, {"post_id": 24308, "ts": "2026-07-07T19:58:17Z", "hours": 2.1003, "text": "I watched Lesson 27 of the AI on the Edge videos."}, {"post_id": 23795, "ts": "2026-07-06T23:03:10Z", "hours": 2.7667, "text": "I watched Lesson 26 of the AI on the Edge videos."}, {"post_id": 23280, "ts": "2026-07-06T04:18:00Z", "hours": 2.3625, "text": "I watched Lesson 25 of the AI on the Edge videos."}, {"post_id": 23236, "ts": "2026-07-06T01:55:59Z", "hours": 3.1667, "text": "I watched Lesson 24 of the AI on the Edge videos."}, {"post_id": 23150, "ts": "2026-07-05T22:46:20Z", "hours": 0.9167, "text": "I read chapters 6 and 7 of the Machine Learning book. I’m just reading and watching the videos until the parts arrive in three or four days. Then, I will work on the technical aspect of the prototype. I have some free time now, so I thought I would learn about Machine Learning and using the Raspberry Pi in the time I have instead of wasting it."}, {"post_id": 22461, "ts": "2026-07-04T22:37:08Z", "hours": 2.0494, "text": "I watched Lesson 23 of the AI on the Edge videos."}, {"post_id": 22380, "ts": "2026-07-04T20:34:29Z", "hours": 3.2, "text": "I watched Lesson 22 of the AI on the Edge videos."}, {"post_id": 21779, "ts": "2026-07-03T21:41:25Z", "hours": 1.5, "text": "I watched Lesson 21 of the AI on the Edge videos."}, {"post_id": 21716, "ts": "2026-07-03T20:11:28Z", "hours": 1.9, "text": "I watched Lesson 20 of the AI on the Edge videos."}, {"post_id": 21285, "ts": "2026-07-03T04:02:15Z", "hours": 2.8383, "text": "I watched Lesson 19 of the AI on the Edge videos."}, {"post_id": 21215, "ts": "2026-07-03T01:11:38Z", "hours": 2.3, "text": "I watched Lesson 18 of the AI on the Edge videos."}, {"post_id": 21101, "ts": "2026-07-02T21:55:09Z", "hours": 3.7, "text": "I watched Lesson 17 of the AI on the Edge videos."}, {"post_id": 20495, "ts": "2026-07-02T03:07:09Z", "hours": 1.9072, "text": "I watched Lesson 16 of the AI on the Edge videos."}, {"post_id": 20442, "ts": "2026-07-02T01:11:45Z", "hours": 2.3333, "text": "I watched Lesson 15 of the AI on the Edge videos."}, {"post_id": 20318, "ts": "2026-07-01T21:43:50Z", "hours": 3.6667, "text": "I watched Lesson 14 of the AI on the Edge videos."}, {"post_id": 19770, "ts": "2026-07-01T04:50:30Z", "hours": 2.7167, "text": "I watched Lesson 13 of the AI on the Edge videos."}, {"post_id": 19679, "ts": "2026-07-01T02:07:59Z", "hours": 1.4167, "text": "I watched Lesson 12 of the AI on the Edge videos."}, {"post_id": 19634, "ts": "2026-07-01T00:35:15Z", "hours": 1.6167, "text": "I read chapters 5 and 6 of the Machine Learning book."}, {"post_id": 19586, "ts": "2026-06-30T22:40:26Z", "hours": 1.6167, "text": "I watched Lesson 11 of the AI on the Edge videos."}, {"post_id": 19523, "ts": "2026-06-30T21:02:23Z", "hours": 1.0494, "text": "I watched Lesson 10 of the AI on the Edge videos."}, {"post_id": 19468, "ts": "2026-06-30T19:58:25Z", "hours": 2.1, "text": "I watched Lesson 9 of the AI on the Edge videos."}, {"post_id": 19018, "ts": "2026-06-30T05:48:49Z", "hours": 2.7, "text": "I watched Lesson 8 of the AI on the Edge videos."}, {"post_id": 18914, "ts": "2026-06-30T03:06:50Z", "hours": 0.75, "text": "I finished reading Chapter 4 of the Machine Learning book. I am also taking more notes on the book now."}, {"post_id": 18878, "ts": "2026-06-30T02:18:01Z", "hours": 0.9, "text": "I sent an email to Ms. Mint (the one I met previosuly) asking if we could meet again for some feedback on my project idea. I also converted my paper plan onto a document and calendar so I can keep track of any deadlines I might have for the project."}, {"post_id": 18760, "ts": "2026-06-29T23:18:51Z", "hours": 4.0, "text": "I watched Lesson 7 of the AI on the Edge videos."}, {"post_id": 17910, "ts": "2026-06-28T20:55:18Z", "hours": 1.2, "text": "I watched Lesson 6 of the AI on the Edge videos."}, {"post_id": 17840, "ts": "2026-06-28T19:40:59Z", "hours": 1.0667, "text": "I watched Lesson 5 of AI on the Edge. In the previous DevLog about the AI on the Edge videos, I actually watched Lesson 4, not Lesson 3."}, {"post_id": 17786, "ts": "2026-06-28T18:35:28Z", "hours": 1.7667, "text": "I made a plan on how to spend my time during this summer, as a lot of time will be dedicated to the ML aspect of my project."}, {"post_id": 17345, "ts": "2026-06-28T02:58:04Z", "hours": 2.0833, "text": "I watched Lesson 3 of the AI on the Edge videos."}, {"post_id": 17217, "ts": "2026-06-27T22:37:39Z", "hours": 3.05, "text": "I finished the 3rd lesson of the AI on the Edge."}, {"post_id": 17106, "ts": "2026-06-27T19:33:57Z", "hours": 1.5667, "text": "I watched the Lesson 2 of the AI on the Edge Raspberry Pi videos."}, {"post_id": 16603, "ts": "2026-06-27T00:34:57Z", "hours": 1.5, "text": "I watched a video about using the Raspberry Pi 5 with ML. Though the Machine Learning book is helpful (and I will keep reading it), I felt that it was not enough to help me with this specific project."}, {"post_id": 16000, "ts": "2026-06-25T23:50:46Z", "hours": 0.9333, "text": "I researched exactly what camera and battery pack to buy (to power the Raspberry Pi). I added them to the cart and will buy it as soon as possible to further develop the prototype. I can’t wait to see how it works with the thermal sensor!"}, {"post_id": 15917, "ts": "2026-06-25T21:22:07Z", "hours": 1.0667, "text": "I just researched about how to combine a thermal sensor with a camera. I found a helpful video and took notes on that video. I also found the specific type of camera I can use, which is a standard Raspberry Pi Camera Module, as well as the connector."}, {"post_id": 15877, "ts": "2026-06-25T20:08:12Z", "hours": 0.6167, "text": "Instead of physically testing the prototypes out (because my dog accidentally stepped on the ultrasonic sensor prototype), I just researched a bit more about the two sensors. I researched the benefits and downsides of each sensor, as well as how accurae they are at specifcally detecting dead trees. I found that people have used ultrasonic sensors before to detect dead trees, but no one has used thermal sensors in the way that I am before to do so. Therefore, I will stick with using a thermal sensor for this prototype. I will have to do more research about the actual pairing between a thermal sensor, a camera, and ML, but the book will help me a lot in the coding of the ML portion."}, {"post_id": 15231, "ts": "2026-06-24T18:49:08Z", "hours": 0.5333, "text": "I compared the 2 prototypes to see which sensor is more accurate (with research, not actual testing). I found that the thermal sensor is more accurate, especially when paired with a camera and an ML algorithm. However, the pairing will be new to me because of the Raspberry Pi. I am more used to working with Aruinos, but through research and practice, I will be able to implement ML. Also, the book I am reading is going to help increase my knowledge on ML. In a future DevLog, I might just test this research just to be sure the thermal sensor is the right choice."}, {"post_id": 14069, "ts": "2026-06-23T01:29:08Z", "hours": 2.3667, "text": "I created the new prototype using the ultrasonic sensor. I coded it, and it successfully functions properly. However, when I tested it with a tree, it didn’t detect it correctly (it said it was dead, not healthy). When I tested it a few more times, it showed accurate readings. I still need to compare the two prototypes together."}, {"post_id": 13982, "ts": "2026-06-22T23:01:27Z", "hours": 0.7219, "text": "I started taking notes on how to work with a thermal sensor, a camera, and ML. I found that it might be hard to integrate all 3 of these things, so I started looking in a different path. I found that I could use ultrasonic distance sensors to detect the unique ultrasonic waves emitted from trees. Therefore, I will start creating a prototype using the ultrasonic sensor and compare the 2 prototypes together."}, {"post_id": 13915, "ts": "2026-06-22T20:24:35Z", "hours": 1.6833, "text": "I copied the code from Command Prompt to GitHub so I have a way to store it somewhere safe. I also double-checkked that the code was correct, and fixed any errors."}, {"post_id": 13555, "ts": "2026-06-22T06:01:12Z", "hours": 3.0333, "text": "I interviewed a tree expert, Ms. Mint, who works at a local farm. She brought up some interesting points, and helped me narrow down what sensors I want to use for my project. She said that using a thermal sensor would be a good idea becuase of its accuracy and easy use. However, when I interviewed her, I had to record the video on my phone instead of on this Hackatime. Therefore, I screen recorded the video and that is the video shown here on this Devlog. I was also with a few other people interested in Ms. Mint’s work, so it wasn’t a one-on-one session, more of a broader overview with a lot of Q-and-A. Overall, this experience was really nice because I got to meet a curator of a nature center, feel the nature all around me, see the difference between dead and healthy trees, and get feedback on my idea."}, {"post_id": 13494, "ts": "2026-06-22T02:51:43Z", "hours": 1.1878, "text": "I wired the thermal sensor, the LCD, the Raspberry Pi, and the LCD backpack. At first, the wiring was not working, so I switched to planning the wiring on paper. Once I finished that, I used a soldering iron to combine two wires to fit in one slot. This is the completed wiring."}, {"post_id": 13467, "ts": "2026-06-22T01:34:43Z", "hours": 0.4833, "text": "I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML."}, {"post_id": 13450, "ts": "2026-06-22T01:01:41Z", "hours": 2.55, "text": "I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML."}, {"post_id": 13342, "ts": "2026-06-21T21:15:14Z", "hours": 0.4833, "text": "I have started reading a book about Machine Learning, its history, and how to train/use it to the best of my ability. I have been taking some notes and answering some questions presented in the book. I have gotten through the first 2 chapters so far and plan to finish the book in the next few weeks. This book will really help me use ML in my project, as well as use it in other projects that I may decide to pursue."}, {"post_id": 12793, "ts": "2026-06-20T22:25:53Z", "hours": 0.8169, "text": "I created the code for the basic part of the prototype. The code makes the prototype able to detect the thermal signature of a Redwood Tree and determine whether it is dead or healthy. In the future, I wil re-make the code to incorporate a camera and a Machine Learning algorithm that can be used for more accurate and broader readings, not just for Redwood trees."}, {"post_id": 12756, "ts": "2026-06-20T21:19:55Z", "hours": 1.4667, "text": "Researched about the different techniques and sensors I could use for this project. I found that using a thermal sensor with Machine Learning algorithms and a camera would be the best for my project."}, {"post_id": 12708, "ts": "2026-06-20T19:07:36Z", "hours": 0.6164, "text": "Testing and editing the code and the wiring of the prototype"}]...
|
Title: See-TreePiO by @Aryana | Stardance
Devlogs Title: See-TreePiO by @Aryana | Stardance
Devlogs:
Testing and editing the code and the wiring of the prototype
Researched about the different techniques and sensors I could use for this project. I found that using a thermal sensor with Machine Learning algorithms and a camera would be the best for my project.
I created the code for the basic part of the prototype. The code makes the prototype able to detect the thermal signature of a Redwood Tree and determine whether it is dead or healthy. In the future, I wil re-make the code to incorporate a camera and a Machine Learning algorithm that can be used for more accurate and broader readings, not just for Redwood trees.
I have started reading a book about Machine Learning, its history, and how to train/use it to the best of my ability. I have been taking some notes and answering some questions presented in the book. I have gotten through the first 2 chapters so far and plan to finish the book in the next few weeks. This book will really help me use ML in my project, as well as use it in other projects that I may decide to pursue.
I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML.
I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML.
I wired the thermal sensor, the LCD, the Raspberry Pi, and the LCD backpack. At first, the wiring was not working, so I switched to planning the wiring on paper. Once I finished that, I used a soldering iron to combine two wires to fit in one slot. This is the completed wiring.
I interviewed a tree expert, Ms. Mint, who works at a local farm. She brought up some interesting points, and helped me narrow down what sensors I want to use for my project. She said that using a thermal sensor would be a good idea becuase of its accuracy and easy use. However, when I interviewed her, I had to record the video on my phone instead of on this Hackatime. Therefore, I screen recorded the video and that is the video shown here on this Devlog. I was also with a few other people interested in Ms. Mint’s work, so it wasn’t a one-on-one session, more of a broader overview with a lot of Q-and-A. Overall, this experience was really nice because I got to meet a curator of a nature center, feel the nature all around me, see the difference between dead and healthy trees, and get feedback on my idea.
I copied the code from Command Prompt to GitHub so I have a way to store it somewhere safe. I also double-checkked that the code was correct, and fixed any errors.
I started taking notes on how to work with a thermal sensor, a camera, and ML. I found that it might be hard to integrate all 3 of these things, so I started looking in a different path. I found that I could use ultrasonic distance sensors to detect the unique ultrasonic waves emitted from trees. Therefore, I will start creating a prototype using the ultrasonic sensor and compare the 2 prototypes together.
I created the new prototype using the ultrasonic sensor. I coded it, and it successfully functions properly. However, when I tested it with a tree, it didn’t detect it correctly (it said it was dead, not healthy). When I tested it a few more times, it showed accurate readings. I still need to compare the two prototypes together.
I compared the 2 prototypes to see which sensor is more accurate (with research, not actual testing). I found that the thermal sensor is more accurate, especially when paired with a camera and an ML algorithm. However, the pairing will be new to me because of the Raspberry Pi. I am more used to working with Aruinos, but through research and practice, I will be able to implement ML. Also, the book I am reading is going to help increase my knowledge on ML. In a future DevLog, I might just test this research just to be sure the thermal sensor is the right choice.
Instead of physically testing the prototypes out (because my dog accidentally stepped on the ultrasonic sensor prototype), I just researched a bit more about the two sensors. I researched the benefits and downsides of each sensor, as well as how accurae they are at specifcally detecting dead trees. I found that people have used ultrasonic sensors before to detect dead trees, but no one has used thermal sensors in the way that I am before to do so. Therefore, I will stick with using a thermal sensor for this prototype. I will have to do more research about the actual pairing between a thermal sensor, a camera, and ML, but the book will help me a lot in the coding of the ML portion.
I just researched about how to combine a thermal sensor with a camera. I found a helpful video and took notes on that video. I also found the specific type of camera I can use, which is a standard Raspberry Pi Camera Module, as well as the connector.
I researched exactly what camera and battery pack to buy (to power the Raspberry Pi). I added them to the cart and will buy it as soon as possible to further develop the prototype. I can’t wait to see how it works with the thermal sensor!
I watched a video about using the Raspberry Pi 5 with ML. Though the Machine Learning book is helpful (and I will keep reading it), I felt that it was not enough to help me with this specific project.
I watched the Lesson 2 of the AI on the Edge Raspberry Pi videos.
I finished the 3rd lesson of the AI on the Edge.
I watched Lesson 3 of the AI on the Edge videos.
I made a plan on how to spend my time during this summer, as a lot of time will be dedicated to the ML aspect of my project.
I watched Lesson 5 of AI on the Edge. In the previous DevLog about the AI on the Edge videos, I actually watched Lesson 4, not Lesson 3.
I watched Lesson 6 of the AI on the Edge videos.
I watched Lesson 7 of the AI on the Edge videos.
I sent an email to Ms. Mint (the one I met previosuly) asking if we could meet again for some feedback on my project idea. I also converted my paper plan onto a document and calendar so I can keep track of any deadlines I might have for the project.
I finished reading Chapter 4 of the Machine Learning book. I am also taking more notes on the book now.
I watched Lesson 8 of the AI on the Edge videos.
I watched Lesson 9 of the AI on the Edge videos.
I watched Lesson 10 of the AI on the Edge videos.
I watched Lesson 11 of the AI on the Edge videos.
I read chapters 5 and 6 of the Machine Learning book.
I watched Lesson 12 of the AI on the Edge videos.
I watched Lesson 13 of the AI on the Edge videos.
I watched Lesson 14 of the AI on the Edge videos.
I watched Lesson 15 of the AI on the Edge videos.
I watched Lesson 16 of the AI on the Edge videos.
I watched Lesson 17 of the AI on the Edge videos.
I watched Lesson 18 of the AI on the Edge videos.
I watched Lesson 19 of the AI on the Edge videos.
I watched Lesson 20 of the AI on the Edge videos.
I watched Lesson 21 of the AI on the Edge videos.
I watched Lesson 22 of the AI on the Edge videos.
I watched Lesson 23 of the AI on the Edge videos.
I read chapters 6 and 7 of the Machine Learning book. I’m just reading and watching the videos until the parts arrive in three or four days. Then, I will work on the technical aspect of the prototype. I have some free time now, so I thought I would learn about Machine Learning and using the Raspberry Pi in the time I have instead of wasting it.
I watched Lesson 24 of the AI on the Edge videos.
I watched Lesson 25 of the AI on the Edge videos.
I watched Lesson 26 of the AI on the Edge videos.
I watched Lesson 27 of the AI on the Edge videos.
I watched Lesson 28 of the AI on the Edge videos.
I watched Lesson 29 of the AI on the Edge videos.
I watched Lesson 30 of the AI on the Edge videos.
I watched Lesson 31 of the AI on the Edge videos.
I read Chapter 8 of the Machine Learning book. I will stop watching the AI on the Edge videos because they are not accessible on YouTube after Lesson 31. The parts will come day after tomorrow, so I plan to finish reading this book by then.
I read Chapters 9 and 10 of the Machine Learning book.
I watched a video about using the ArduCam with the Raspberry Pi 5.
I read Chapters 11 and 12 of the Machine Learning book.
I researched more about using the ArduCam with the Raspberry Pi 5. I found troubleshooting techniques and what I need to do after I get the camera (the setup).
I planned the way I am going to connect the ArduCam to the Raspberry Pi with the thermal sensor. I realized I might have to solder some wires together so that more than one wire can fit on one pin on the Pi. I planned the way the wires are going to connect to the Pi and how I am going to integrate ML into the Pi using the camera and thermal sensor.
I read Chapter 13 of the Machine Learning book.
I read Chapters 14 and 15 of the Machine Learning book. The parts will come tomorrow.
I fiinshed the Machine Learning book.
I tested the camera and battery pack that came. They both worked really well. Now, I can start inputting the ML algrothm.
I researched the different datasets I can use for the project, as well as the amount of tree data each have in them. I still need to do some more research, but as of now, creating a dataset is the best option if I want to get a wide, accurate range of data. I haven’t found any datasets that match the amount of data I can collect by myself in my neighborhood.
I researched more about the tree datasets, and I found one that has plenty of accurate information: PlantNet API.
I researched about how to use the specific PlantNet API database with the Raspberry Pi and hook that database to a Machine Learning algorthim. I am finally ready to actually make the Machine Learning algorithm and get my hands dirty now that I have the information I need to continue on with the project.
I connected the database to the Raspberry Pi, and tested it out using a house plant. It worked really well, and the next step is to test it outside with a real tree.
I build a CAD of the structure that will house the prototype. I left holes for all the different parts, and will print it later today.
I 3D printed the top half of the housing for the prototype. Next, I will print the bottom half.
I fixed the issues that the prototype was facing. I also added a button. The main thing I did was make the prototype able to function without the computer nearby, which can make it so that anyone in the world can use it with a battery pack.
I researched the different types of prevalent trees in California and their temperatures during different seasons. I plan to add this to my database, as I hadn’t previously done this. I used many websites, but Our City Forest was the most helpful.
I combined the parts in the bottom half of the prototype, and fit it in the encolsure.
I completed the prototype by combining the enclosure with the prototype. I encased the sensors and the LCD. The prototype is finally complete!
Ships:
I made a project that can detect tree/plant species and temperature to determine whether it is dead or not. It displays the result on an LCD in the back, and will start the process of scanning a tree/plant once a button is pressed. The wiring is enclosed in a 3D printed prototype. The most difficult thing I did in this project was likely trying to fit it all in the enclosure. There were a lot of wires here and there, and the button was also quite difficult to fit in, as I needed to solder it on. However, this project was really fun to do, as it helped me gain knowledge about the environment around me, and I got to practice my software and hardware skills. I am really proud of myself, as I completed this project from start to finish, and didn’t give up. To test my project, all you have to do is plug in the battery pack, wait for a minute or so, point the prototype at the tree you want to scan, press the button, and wait for the results. Sometimes, it will take a little longer to get the results, resulting from a difficulty figuring out either the temperature or species of that particular plant/tree....
|
1793145370.0283284
|
1793231770.0283284
|
|
16234
|
Meow-Net by @SynthReaper | Stardance
|
SynthReaper
|
1
|
43.17
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T11:33:20Z", "hours": 42.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? MeowNet: Feline management cockpit and zero-knowledge community coordination platform. Features: Live mapping, regional chapters, and volunteer tracking systems. Safety: Emergency registry with dispatch tools and supply chain inventories. Privacy: Browser AES-GCM-256 client-side encrypted dashboard for medical records. AI Helper: Integrated assistant using Gemini, OpenAI, and Anthropic models. What was challenging? UX Fix: Implemented keyless server-side defaults for instant dashboard access. DB Spoofing: Users could bypass client logic to verify their own hours. DB Fix: Refactored Row-Level Security policies to enforce admin-only scopes. ReDoS Flaws: Text sanitization utility triggered regex security vulnerability flags. Code Fix: Replaced regex with a safe, linear O(N) scanner. What are you proud of? Clean Code: Zero warnings and zero vulnerabilities found during build analysis. Theme Sync: Leaflet map tiles that dynamically update between dark/warm modes. Action AI: Chat bubbles that extract JSON to render database commit buttons. What should people know so they can test your project? General: Register a volunteer account to log sightings and take quizzes use features.", "repo": "https://github.com/SynthReaper/MeowNet", "demo": "https://meownet-sr.vercel.app/"}]...
|
[{"post_id": 23005, "ts": "202 [{"post_id": 23005, "ts": "2026-07-05T18:26:46Z", "hours": 1.1719, "text": "DOM XSS Sanitization: Hardened volunteer-supplied image URLs across profile and reports pages by sanitizing them through the getSafeImageSrc filter. Log Cat UI Polish: Swapped the dashed file uploader for a clean image preview with a delete trigger, converted checkboxes to styled pills, and added tooltips."}, {"post_id": 22787, "ts": "2026-07-05T11:27:44Z", "hours": 18.9175, "text": "v0.9.0 (Social Impact & Field Coordination) : Introduced the Volunteer Management System (VMS) for hours/skills tracking, the Emergency Case Registry (ECR) for incident map and dispatch, the Supply Chain Registry for inventory control, and Regional Chapters coverage. Added zero-knowledge vault unlock bypass to allow AI Helper default messaging, and hardened RLS policies on skills/hours. v0.8.0 - v0.8.2 (Refactoring, Welfare Score & Heatmaps) : Deployed a dynamic Cat Welfare Score calculator (0-100) on cat details page. Added point marker density heatmaps. Consolidated 61 database migration files down to 5. Swept static analysis findings (cognitive complexity reduction, flattened nested ternaries, and readonly props rules). v0.7.0 (Security Hardening & Documentation) : Secured API proxy routes against model param SSRF. Hardened security headers, added missing routes to API docs, and corrected database schemas description. v0.6.0 (Cryptographic Verification & Certificates) : Implemented dynamic Certificate Verification Portal. Secured volunteer certificates with HMAC-SHA256 signatures validated server-side. Added a dispute queue panel on staff audit logs. v0.5.0 (Admin & Maintenance Mode) : Released maintenance mode gate configurations, dynamic gamification engines, and supreme admin management console views."}, {"post_id": 17081, "ts": "2026-06-27T18:50:36Z", "hours": 6.97, "text": "v0.4.0 (Auth, Queries & Docs): Added a sliding auth segmented toggle (AuthTabs), three-tier support query escalation pipeline, Clerk OTP failure popups, and comprehensive judge docs. v0.3.0 & v0.2.0 (Analytics & Credentials): Built charts and maps for Admin/Moderator dashboards, targeted announcement notice board routing, and direct DB auth bypassing Clerk. v0.1.0 (Launch): Released the core Next.js 16 platform with a 3D WebGL globe, PostGIS fuzzed location map, and HuggingFace FastAPI breed classification service."}, {"post_id": 15407, "ts": "2026-06-25T01:27:13Z", "hours": 15.8278, "text": "MeowNet is a fun, real-time platform that connects cat guardians to map colonies, log sightings, and coordinate TNR & rescue efforts."}]...
|
Title: Meow-Net by @SynthReaper | Stardance
Devlo Title: Meow-Net by @SynthReaper | Stardance
Devlogs:
MeowNet is a fun, real-time platform that connects cat guardians to map colonies, log sightings, and coordinate TNR & rescue efforts.
v0.4.0 (Auth, Queries & Docs): Added a sliding auth segmented toggle (AuthTabs), three-tier support query escalation pipeline, Clerk OTP failure popups, and comprehensive judge docs. v0.3.0 & v0.2.0 (Analytics & Credentials): Built charts and maps for Admin/Moderator dashboards, targeted announcement notice board routing, and direct DB auth bypassing Clerk. v0.1.0 (Launch): Released the core Next.js 16 platform with a 3D WebGL globe, PostGIS fuzzed location map, and HuggingFace FastAPI breed classification service.
v0.9.0 (Social Impact & Field Coordination) : Introduced the Volunteer Management System (VMS) for hours/skills tracking, the Emergency Case Registry (ECR) for incident map and dispatch, the Supply Chain Registry for inventory control, and Regional Chapters coverage. Added zero-knowledge vault unlock bypass to allow AI Helper default messaging, and hardened RLS policies on skills/hours. v0.8.0 - v0.8.2 (Refactoring, Welfare Score & Heatmaps) : Deployed a dynamic Cat Welfare Score calculator (0-100) on cat details page. Added point marker density heatmaps. Consolidated 61 database migration files down to 5. Swept static analysis findings (cognitive complexity reduction, flattened nested ternaries, and readonly props rules). v0.7.0 (Security Hardening & Documentation) : Secured API proxy routes against model param SSRF. Hardened security headers, added missing routes to API docs, and corrected database schemas description. v0.6.0 (Cryptographic Verification & Certificates) : Implemented dynamic Certificate Verification Portal. Secured volunteer certificates with HMAC-SHA256 signatures validated server-side. Added a dispute queue panel on staff audit logs. v0.5.0 (Admin & Maintenance Mode) : Released maintenance mode gate configurations, dynamic gamification engines, and supreme admin management console views.
DOM XSS Sanitization: Hardened volunteer-supplied image URLs across profile and reports pages by sanitizing them through the getSafeImageSrc filter. Log Cat UI Polish: Swapped the dashed file uploader for a clean image preview with a delete trigger, converted checkboxes to styled pills, and added tooltips.
Ships:
What did you make? MeowNet: Feline management cockpit and zero-knowledge community coordination platform. Features: Live mapping, regional chapters, and volunteer tracking systems. Safety: Emergency registry with dispatch tools and supply chain inventories. Privacy: Browser AES-GCM-256 client-side encrypted dashboard for medical records. AI Helper: Integrated assistant using Gemini, OpenAI, and Anthropic models. What was challenging? UX Fix: Implemented keyless server-side defaults for instant dashboard access. DB Spoofing: Users could bypass client logic to verify their own hours. DB Fix: Refactored Row-Level Security policies to enforce admin-only scopes. ReDoS Flaws: Text sanitization utility triggered regex security vulnerability flags. Code Fix: Replaced regex with a safe, linear O(N) scanner. What are you proud of? Clean Code: Zero warnings and zero vulnerabilities found during build analysis. Theme Sync: Leaflet map tiles that dynamically update between dark/warm modes. Action AI: Chat bubbles that extract JSON to render database commit buttons. What should people know so they can test your project? General: Register a volunteer account to log sightings and take quizzes use features....
|
1793202891.4862452
|
1793289291.4862452
|
|
16242
|
Drone Interceptor by @aarav_patel0436 | Stardance
|
aarav_patel0436
|
1
|
35.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T19:15:00Z", "hours": 35.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Drone Interceptor because I wanted to see if I could make a computer actually understand where a drone is in 3D space and aim a physical tracking system at it. It started as a simple idea: detect a drone with a camera, estimate its position, and move a turret to follow it. But the project slowly turned into a much bigger journey through computer vision, electronics, firmware, controls, PCB design, and a lot of debugging. The first version used YOLOv8 to detect drones from a webcam. From there, I added camera calibration, depth estimation, 3D position tracking, prediction arrows, and live turret control using a Raspberry Pi Pico 2. I tested pan and tilt tracking with a stepper motor and servo, and eventually got the turret tracking system and depth perception working together. The hardest part was definitely the hardware. I originally tried to hack into a commercial drone controller by sending joystick-like signals from my computer through a Pico. After a lot of testing, voltage measurements, broken controller moments, resistor changes, and late-night debugging, I realized that approach was too fragile. So I pivoted: instead of fighting the controller, I designed my own custom PCBs while still reusing the small Snaptain SP350 drone frame, motors, and propellers. I’m proud of this project because it became more than just code. It has real firmware, real electronics, real CAD, real PCB files, simulation videos, and a working tracking pipeline. I also made demo simulations that show how the drone tracking, following, orbiting, and standoff behavior would work, so the project can be understood even while I’m waiting for the PCBs to arrive. Right now, the turret tracking and depth perception system work, the code is organized, the README has setup instructions and demo links, and the custom PCB fabrication files are ready. The next step is assembling the PCBs when they arrive and continuing the flight-control side on real hardware.", "repo": "https://github.com/aaravpatel0/DroneInterception", "demo": ""}]...
|
[{"post_id": 14501, "ts": "202 [{"post_id": 14501, "ts": "2026-06-23T17:21:00Z", "hours": 9.3503, "text": "Today I finished the main code and PCB design work for the drone tracking and interception project. The software side is now working, including the turret tracking system and the depth perception setup. I tested the camera-based tracking, servo movement, and position estimation, and the system is able to detect and follow the target properly. A big part of the project also changed direction. At first, I was trying to hack into a commercial drone controller and control the drone that way, but that turned out to be unreliable and difficult to build on. After testing, debugging, and experimenting with different control methods, I pivoted to designing my own custom PCBs for the drone instead. I am still using the original drone frame, but the electronics will be custom-made so I can control the motors and hardware much more directly. I also finished designing the custom PCBs for the project. One board is for the drone-side control hardware, and the other is for the turret/control setup that connects the computer, camera, stepper, servos, and control electronics together in a cleaner and more organized way. After a lot of debugging, redesigning, and checking the layouts, the boards are ready to be manufactured. At this point, most of the major development work is complete. The code is finished, the tracking and depth perception systems have been tested, and the PCB files are ready. Now I just need to wait for the custom PCBs to arrive so I can assemble the hardware, test everything together, and finish the final version of the project. I couldn’t post all my videos and screenshots in this one post, but hopefully everyone will be able to see them in the future."}, {"post_id": 12253, "ts": "2026-06-20T00:41:36Z", "hours": 21.5931, "text": "Finally, I’m getting close to finishing both the turret and the drone-control system.On the turret side, the vision tracking pipeline is working with the servo. The detector can find the drone, estimate its position in the camera frame, and send movement commands to the tracking hardware. The next major step is testing the full pan-and-tilt behavior together, so the turret can smoothly follow a moving drone instead of only proving that one axis works. This will involve tuning the tracking response, reducing jitter, and making sure the servo and pan mechanism move accurately without overshooting.On the drone-control side, this was a huge milestone. After accidentally damaging the drone controller board, repairing it, and spending hours debugging different circuit designs, I finally got computer-based control working through a Raspberry Pi Pico 2. The Pico acts as a ground-station hardware bridge: it receives control commands from the computer over USB and converts them into analog joystick-like signals that the drone remote can understand.One of the biggest problems was that the original joystick potentiometers were still physically connected to the controller board, so they were pulling the signal voltage back toward center. After testing with a voltmeter, I found that the Pico was sending the correct signal, but the controller board was loading it down. Changing the resistor value in the filter circuit gave the Pico enough authority over the signal line while still keeping the output controlled and smooth.At this point, the system can successfully influence the drone remote from the computer. The next step is to finish testing all control channels, verify the voltage ranges with the multimeter, and then move into careful live movement tests. This is the first time the project has connected the detection/tracking software to real hardware control in a way that actually works."}, {"post_id": 8980, "ts": "2026-06-14T23:19:58Z", "hours": 4.0464, "text": "After taking a brief pause from this project during finals week, I’m excited to share that I finally got real-time drone tracking working. The system can now detect my drone from a live camera feed using a custom-trained YOLOv8 model and draw reliable bounding boxes around it. From there, I calculate the center of the drone’s bounding box, compare it to the center of the camera frame, and use that offset to track where the drone is moving. I also started mapping that position onto a 3D graph using OpenCV, with only one camera instead of a multi-camera setup. This took quite a bit of math and debugging. I had to work through monocular camera geometry, pixel offsets, scaling, and OpenCV visualization before the tracking started making sense. I also trained and tested my own drone detection model, then built the pipeline so the model can run live, pick the highest-confidence drone detection, and output useful position/error data in real time. The next step is connecting this tracking system to the physical turret. The code now calculates horizontal and vertical error values from the drone’s position in the frame, which can be sent to an Arduino to control pan and tilt movement. Currently I’m working on “hacking” into this small drone I own, and doing some resoldering and rewiring so that this store-bought drone can be controlled digitally though my Arduino instead of through a human with its remote. Then using this digital control system, I can then intercept the larger flying drone and take it down."}]...
|
Title: Drone Interceptor by @aarav_patel0436 | Sta Title: Drone Interceptor by @aarav_patel0436 | Stardance
Devlogs:
After taking a brief pause from this project during finals week, I’m excited to share that I finally got real-time drone tracking working. The system can now detect my drone from a live camera feed using a custom-trained YOLOv8 model and draw reliable bounding boxes around it. From there, I calculate the center of the drone’s bounding box, compare it to the center of the camera frame, and use that offset to track where the drone is moving. I also started mapping that position onto a 3D graph using OpenCV, with only one camera instead of a multi-camera setup. This took quite a bit of math and debugging. I had to work through monocular camera geometry, pixel offsets, scaling, and OpenCV visualization before the tracking started making sense. I also trained and tested my own drone detection model, then built the pipeline so the model can run live, pick the highest-confidence drone detection, and output useful position/error data in real time. The next step is connecting this tracking system to the physical turret. The code now calculates horizontal and vertical error values from the drone’s position in the frame, which can be sent to an Arduino to control pan and tilt movement. Currently I’m working on “hacking” into this small drone I own, and doing some resoldering and rewiring so that this store-bought drone can be controlled digitally though my Arduino instead of through a human with its remote. Then using this digital control system, I can then intercept the larger flying drone and take it down.
Finally, I’m getting close to finishing both the turret and the drone-control system.On the turret side, the vision tracking pipeline is working with the servo. The detector can find the drone, estimate its position in the camera frame, and send movement commands to the tracking hardware. The next major step is testing the full pan-and-tilt behavior together, so the turret can smoothly follow a moving drone instead of only proving that one axis works. This will involve tuning the tracking response, reducing jitter, and making sure the servo and pan mechanism move accurately without overshooting.On the drone-control side, this was a huge milestone. After accidentally damaging the drone controller board, repairing it, and spending hours debugging different circuit designs, I finally got computer-based control working through a Raspberry Pi Pico 2. The Pico acts as a ground-station hardware bridge: it receives control commands from the computer over USB and converts them into analog joystick-like signals that the drone remote can understand.One of the biggest problems was that the original joystick potentiometers were still physically connected to the controller board, so they were pulling the signal voltage back toward center. After testing with a voltmeter, I found that the Pico was sending the correct signal, but the controller board was loading it down. Changing the resistor value in the filter circuit gave the Pico enough authority over the signal line while still keeping the output controlled and smooth.At this point, the system can successfully influence the drone remote from the computer. The next step is to finish testing all control channels, verify the voltage ranges with the multimeter, and then move into careful live movement tests. This is the first time the project has connected the detection/tracking software to real hardware control in a way that actually works.
Today I finished the main code and PCB design work for the drone tracking and interception project. The software side is now working, including the turret tracking system and the depth perception setup. I tested the camera-based tracking, servo movement, and position estimation, and the system is able to detect and follow the target properly. A big part of the project also changed direction. At first, I was trying to hack into a commercial drone controller and control the drone that way, but that turned out to be unreliable and difficult to build on. After testing, debugging, and experimenting with different control methods, I pivoted to designing my own custom PCBs for the drone instead. I am still using the original drone frame, but the electronics will be custom-made so I can control the motors and hardware much more directly. I also finished designing the custom PCBs for the project. One board is for the drone-side control hardware, and the other is for the turret/control setup that connects the computer, camera, stepper, servos, and control electronics together in a cleaner and more organized way. After a lot of debugging, redesigning, and checking the layouts, the boards are ready to be manufactured. At this point, most of the major development work is complete. The code is finished, the tracking and depth perception systems have been tested, and the PCB files are ready. Now I just need to wait for the custom PCBs to arrive so I can assemble the hardware, test everything together, and finish the final version of the project. I couldn’t post all my videos and screenshots in this one post, but hopefully everyone will be able to see them in the future.
Ships:
I built Drone Interceptor because I wanted to see if I could make a computer actually understand where a drone is in 3D space and aim a physical tracking system at it. It started as a simple idea: detect a drone with a camera, estimate its position, and move a turret to follow it. But the project slowly turned into a much bigger journey through computer vision, electronics, firmware, controls, PCB design, and a lot of debugging. The first version used YOLOv8 to detect drones from a webcam. From there, I added camera calibration, depth estimation, 3D position tracking, prediction arrows, and live turret control using a Raspberry Pi Pico 2. I tested pan and tilt tracking with a stepper motor and servo, and eventually got the turret tracking system and depth perception working together. The hardest part was definitely the hardware. I originally tried to hack into a commercial drone controller by sending joystick-like signals from my computer through a Pico. After a lot of testing, voltage measurements, broken controller moments, resistor changes, and late-night debugging, I realized that approach was too fragile. So I pivoted: instead of fighting the controller, I designed my own custom PCBs while still reusing the small Snaptain SP350 drone frame, motors, and propellers. I’m proud of this project because it became more than just code. It has real firmware, real electronics, real CAD, real PCB files, simulation videos, and a working tracking pipeline. I also made demo simulations that show how the drone tracking, following, orbiting, and standoff behavior would work, so the project can be understood even while I’m waiting for the PCBs to arrive. Right now, the turret tracking and depth perception system work, the code is organized, the README has setup instructions and demo links, and the custom PCB fabrication files are ready. The next step is assembling the PCBs when they arrive and continuing the flight-control side on real hardware....
|
1793137991.7886677
|
1793224391.7886677
|
|
16311
|
SerwinOS by @serwin_dev | Stardance
|
serwin_dev
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T10:13:58Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The first ship actually contains very limited features but more will be added soon I have added some interesting easter eggs into the website and i hope it would be funny and enjoyable I didn’t find this challenging – i followed the guide to set up the dragging mechanism and then, i poured some of my creativity to add more windows", "repo": "https://github.com/Serwindev/serwinOS", "demo": "https://serwindev.github.io/serwinOS/"}]...
|
[{"post_id": 18249, "ts": "202 [{"post_id": 18249, "ts": "2026-06-29T10:11:52Z", "hours": 1.0, "text": "I have finished the website for it’s first SHIP It may not be perfect but it will be improved continually and more features will be added on next ships This first ship actually contains very limited windows and very basic UI The reason is that, the first ship in this mission will not be rated and i don’t want to spend much time on first ship – for the next ships, i will work more and more features will be added. But i have done my best to include some easter eggs into this website..! make sure to find them"}, {"post_id": 17666, "ts": "2026-06-28T15:32:56Z", "hours": 1.6525, "text": "Today’s progress I actually gonna ship within next devlog for a prototype The prototype contains three windows About Information Notes All the three apps will be kinda very basic – after the ship, i will work on the project and polish it Reason: The first ship into the mission will not have any payouts and so, I’m limiting the work."}, {"post_id": 9854, "ts": "2026-06-16T09:43:30Z", "hours": 0.9347, "text": "In this 1 hour, I worked through the Jam and made some basic windows and top bar I almost followed the whole Jam to get some rough idea..!! After this, i would get into the my own customization and also add some more windows. Stay tuned for more updates – this webOS will focus only on me – personal portfolio."}]...
|
Title: SerwinOS by @serwin_dev | Stardance
Devlog Title: SerwinOS by @serwin_dev | Stardance
Devlogs:
In this 1 hour, I worked through the Jam and made some basic windows and top bar I almost followed the whole Jam to get some rough idea..!! After this, i would get into the my own customization and also add some more windows. Stay tuned for more updates – this webOS will focus only on me – personal portfolio.
Today’s progress I actually gonna ship within next devlog for a prototype The prototype contains three windows About Information Notes All the three apps will be kinda very basic – after the ship, i will work on the project and polish it Reason: The first ship into the mission will not have any payouts and so, I’m limiting the work.
I have finished the website for it’s first SHIP It may not be perfect but it will be improved continually and more features will be added on next ships This first ship actually contains very limited windows and very basic UI The reason is that, the first ship in this mission will not be rated and i don’t want to spend much time on first ship – for the next ships, i will work more and more features will be added. But i have done my best to include some easter eggs into this website..! make sure to find them
Ships:
The first ship actually contains very limited features but more will be added soon I have added some interesting easter eggs into the website and i hope it would be funny and enjoyable I didn’t find this challenging – i followed the guide to set up the dragging mechanism and then, i poured some of my creativity to add more windows...
|
1793274529.1945364
|
1793360929.1945364
|
|
16328
|
BeatRide by @sam_vdstockt | Stardance
|
sam_vdstockt
|
1
|
19.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T15:11:39Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made BeatRide. A game that turns your favorite songs into games!", "repo": "https://github.com/vanderstocktesmee-lab/BeatRide", "demo": "https://beatride.netlify.app"}]...
|
[{"post_id": 47540, "ts": "202 [{"post_id": 47540, "ts": "2026-08-15T14:48:11Z", "hours": 9.5072, "text": "THIS IS MY LAST DEVLOG!! I added the main function of BeatRide, so the map is made based of the music u put on. It was so much work and struggle, but it’s ready to ship! BeatRide is good, but it still isn’t what i fully want. See this as the basics. I’m gonna ship it now and later i’ll work on more functions and make it a lot bettter!"}, {"post_id": 34582, "ts": "2026-07-25T13:04:31Z", "hours": 5.7686, "text": "Omg i worked so much. Those 5 hours aren’t even real. I worked way more but i was on linux so the hackatime thingy wasn’t on. But i’m soooo happy with the result. So now u can finally really import songs by using Spotify or u can just uplaud an mp3 file!! So then it detects the bpm and u go faster and slower based on ur bpm and it’s just so cool. I also added that like even tough it has the same bpm; ur gonna go way faster on techno music then rock and roll. It is so good now the only thing left is music based obstacles and music based parcours. ts gonna take so long so i’m thinking of just vibecoding it all 😭 But yeah i’m also thinking of adding a 24/7 radio station to the website so u don’t even need to choose music."}, {"post_id": 16332, "ts": "2026-06-26T15:58:50Z", "hours": 0.8314, "text": "New functions today: -Obstacels: I added simple obstacles that spawn randomly; those obstacles will be based off the musics once we have more. I didn’t add much other things because of the intense heat here in Belgium. So i also worked a lot on a simple thing like this. But now the big steps are beginning!! Now we have a simpole racing game i will tryu to collaborate it with music so it influences the gameplay. Stay tuned!!"}, {"post_id": 14950, "ts": "2026-06-24T09:05:25Z", "hours": 1.7814, "text": "Today i added some new functions!! -Jumping; You can now jump with the car -Drifting; i made some drifting mechanics but it will be better. Does someone know good ways for realistic drifting? -I haven’t done it yet; But today i will add obstacles in the game. Beatride is still a basic racing game right now, but stay tuned because i’m really working on it and it will be really good!! I fixed some thing today with a bussines called VoltRadio (check them out!!) and because of them i probably can get a VoltRadio API key for the music and lyrics because they are a 24/7 radio station. So people are gonna have the option to use their own songs or use the songs of VoltRadio. And VoltRadio has all the lyrics so for lyrics obstacles i can also use a Voltradio API key i think!!"}, {"post_id": 8194, "ts": "2026-06-13T17:15:42Z", "hours": 0.3783, "text": "Today was a short coding time: bc i have exams monday. But i just added that now tyou can’t just explore the whoole map and you gotta stay on the road. I also got some good sings; i playedthe game myself for 10mins even tho it doen’t have cool things. It’s just a simple car on a road. So those are good sings."}, {"post_id": 7535, "ts": "2026-06-12T16:09:07Z", "hours": 1.1717, "text": "I didn’t work a lot today bc of exams and i used ai a lot. Today’s anchievements are nothing special; i just started and this is the first thime i worked on it. I just have the basics of a boring racing game and the graphics are like scratch graphics lol. It’s just some shapes shaped like a car thats driving on a map with a road. Nothing music related. The big changes will happen in the summer bc i have exams rn. Oh yh, i also worked like an hour in school on a whole plan and roadmap of what i want to achieve for BeatRide."}]...
|
Title: BeatRide by @sam_vdstockt | Stardance
Devl Title: BeatRide by @sam_vdstockt | Stardance
Devlogs:
I didn’t work a lot today bc of exams and i used ai a lot. Today’s anchievements are nothing special; i just started and this is the first thime i worked on it. I just have the basics of a boring racing game and the graphics are like scratch graphics lol. It’s just some shapes shaped like a car thats driving on a map with a road. Nothing music related. The big changes will happen in the summer bc i have exams rn. Oh yh, i also worked like an hour in school on a whole plan and roadmap of what i want to achieve for BeatRide.
Today was a short coding time: bc i have exams monday. But i just added that now tyou can’t just explore the whoole map and you gotta stay on the road. I also got some good sings; i playedthe game myself for 10mins even tho it doen’t have cool things. It’s just a simple car on a road. So those are good sings.
Today i added some new functions!! -Jumping; You can now jump with the car -Drifting; i made some drifting mechanics but it will be better. Does someone know good ways for realistic drifting? -I haven’t done it yet; But today i will add obstacles in the game. Beatride is still a basic racing game right now, but stay tuned because i’m really working on it and it will be really good!! I fixed some thing today with a bussines called VoltRadio (check them out!!) and because of them i probably can get a VoltRadio API key for the music and lyrics because they are a 24/7 radio station. So people are gonna have the option to use their own songs or use the songs of VoltRadio. And VoltRadio has all the lyrics so for lyrics obstacles i can also use a Voltradio API key i think!!
New functions today: -Obstacels: I added simple obstacles that spawn randomly; those obstacles will be based off the musics once we have more. I didn’t add much other things because of the intense heat here in Belgium. So i also worked a lot on a simple thing like this. But now the big steps are beginning!! Now we have a simpole racing game i will tryu to collaborate it with music so it influences the gameplay. Stay tuned!!
Omg i worked so much. Those 5 hours aren’t even real. I worked way more but i was on linux so the hackatime thingy wasn’t on. But i’m soooo happy with the result. So now u can finally really import songs by using Spotify or u can just uplaud an mp3 file!! So then it detects the bpm and u go faster and slower based on ur bpm and it’s just so cool. I also added that like even tough it has the same bpm; ur gonna go way faster on techno music then rock and roll. It is so good now the only thing left is music based obstacles and music based parcours. ts gonna take so long so i’m thinking of just vibecoding it all 😭 But yeah i’m also thinking of adding a 24/7 radio station to the website so u don’t even need to choose music.
THIS IS MY LAST DEVLOG!! I added the main function of BeatRide, so the map is made based of the music u put on. It was so much work and struggle, but it’s ready to ship! BeatRide is good, but it still isn’t what i fully want. See this as the basics. I’m gonna ship it now and later i’ll work on more functions and make it a lot bettter!
Ships:
I made BeatRide. A game that turns your favorite songs into games!...
|
1793246080.64859
|
1793332480.64859
|
|
16334
|
FUNNY MIC! by @purpld | Stardance
|
purpld
|
1
|
25.0
|
437
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T04:06:33Z", "hours": 25.0, "multiplier": 18.35, "payout": 437, "blessing": "neutral", "text": "I made an easily configurable microphone hot swapping tool! Inspired by the lovingly horrible microphone of the Logitech C922 webcam. My project allows you to configure a microphone (for example, your webcam’s mic) and record a hotkey, and then swap whenever and wherever (and quickly!) by holding down your hotkey. Your system’s default microphone will be set to your chosen device when held, and return to whatever it was previously when you let go. And it works on both Windows and Linux! This seems quite simple on paper, and it probably SHOULD be, but a couple of things made this actually quite challenging: I wanted FUNNY MIC to be cross-platform! Nobody should be stopped from having horrible mic quality. Audio APIs on different OS’s, however, are VERY different! I learned how to use conditional compilation in Rust, and most importantly, how to use it wisely, to make an internal API that works and changes depending on your platform. This also meant I had to learn how these platform-specific APIs work and how to use them! Most importantly, this was my first time using Tauri as the backend framework for a Rust project! That in and of itself was quite challenging, but I’ve found that Tauri is nice to work with! I also chose React as my frontend UI framework, which I have used before, but it has been quite some time. I’m proud of this silly little over-engineered thing I managed to make with the tools that I’ve been given! I think this is a program that I’ll actually be continuing to use too (to mess with my friends, of course), which is nice. To test this project, you will need to download and run an installer for your platform. If you’re on NixOS, please see the README for more instructions; I’ve included a package for you too!", "repo": "https://github.com/hpenney2/funnymic", "demo": "https://github.com/hpenney2/funnymic/releases/latest"}]...
|
[{"post_id": 17282, "ts": "202 [{"post_id": 17282, "ts": "2026-06-28T00:21:22Z", "hours": 7.7528, "text": "V1! (last devlog before ship?) Wew, I should have probably made a devlog in between my last one! Windows support I have added Windows support! Fun fact, I hate working with the Windows API, and I’ve just learned that! In fairness, it’s a littleee bit awkward working with an API that is very obviously native to C, even if the Rust library gives it some Rustiness, but still, I dislike it. Greatly. Anyways, the important part is it works! And I had to use an undocumented Windows API to do a basic task (setting the default audio device). Nice. Cool! Awesome. (i’ve been trying to switch to Linux for a reason) Thankfully, someone already implemented that in the com-policy-config crate so I don’t have to find and try to convert a header file myself. Saving the config! After Windows support was done, the rest was relatively easy! Tauri has another plugin that makes it a little bit easier to manage a JSON store file and make it accessible to anything that has an AppHandle . config.json now stores the selected swap device and keybind, and these get automatically reloaded on startup. Lovely! oh hey uh, how are we building this thing, exactly? I use NixOS as my main operating system, so I already made a default.nix and shell.nix for running here. However, it doesn’t seem I can properly compile the regular bundles for .deb., .rpm, and AppImages (easily, anyway), and it would be tedious for every release anyways! Thankfully, tauri-action already exists, too! I made a GitHub Actions workflow that will compile and publish installers for both Windows and Linux when I make a new release. It’s pretty neat stuff, actually! README, After All This also means I finally took the time to make a nice README. It was nice to take a small step back to kind of overview this project. A fun little over-engineered thing this is, something that could have stayed a CLI app with only Linux support and nobody would have blinked, but here we are! It’s definitely been good practice for both my backend (Rust!) and frontend skills. I will definitely be using Tauri again in the future! Hello, from v1.0.0! (and Windows!)"}, {"post_id": 16471, "ts": "2026-06-26T20:22:37Z", "hours": 11.2572, "text": "“It’ll be easy!” NO IT WON’T BE ASDSFSDGDG ahem. What I mean to say is that the UI is done and ready! I think it looks relatively nice, simple, and most importantly, is functional . I, somehow, managed to log 11 HOURS , of which a significiant part of was not doing the UI, actually! It was literally just trying to get the global shortcut functionality to work again! Wayland doesn’t like you doing that, actually I use KDE Plasma as my desktop environment, which uses Wayland by default as of Plasma 6. I want to support all systems, and that obviously includes my own, but the Global Shortcut plugin for Tauri, as it turns out, only natively supports X11. Ah. At first, I tried using this pull request by patching it into my dependencies, so the Tauri plugin would use that instead of the normal crate. This worked actually! Until I tried using unregister_all() , at which point it crashes the xdg-desktop-portal with a SIGABRT, somehow, for some reason. I have no idea if that’s an issue with my system (I tried updating!) but I couldn’t find a way around it, so I ended up scrapping that plan (using an unreviewed, unmerged PR probably isn’t a great idea anyway…). What now? After what I said about rdev in the last devlog, I ended up writing a key handler module that would fallback to rdev when detecting Wayland (inspired by how murmur ended up doing this as well). Except… I wrote all this, spent a couple of hours getting everything working, and then somehow, by having moved the callback function for shortcuts into the Rust code (where I previously was trying it from the frontend in TypeScript), it… WORKS?! With the default Tauri plugin, which is only supposed to work on X11. This requires some more testing (is this a KDE Plasma specific thing?! or Xwayland??), so I’m keeping the keys module I made around for now just in case. Good news! The good news is that this means it works! The really only last two bits I need are Windows support and saving the config . Should this have taken this long? Probably not. I attribute that to still wandering my way through Rust and literally never having used Tauri before (lol). A good amount of time was spent getting the UI working in a way that I was happy with, too! With that said, here’s a quick recording of everything working!"}, {"post_id": 14685, "ts": "2026-06-23T21:31:56Z", "hours": 4.2236, "text": "UI TIME! This is my first time using Tauri ! As I’ve learned with a previous project, UI and Rust are still a bit iffy, sadly. Tauri effectively parallels Electron while offering much better performance, especially as you still use Rust for the backend while allowing the ease of use of HTML + CSS + JS/TS for the frontend! It uses native WebViews instead of Chromium, which gets rid of one of my biggest frustrations with Electron, that being including and running a whole browser for what’s often a single page. Of course, this is, uh, maybe is not the best project to showcase how great those features are considering there is effectively one (1) main feature here (lol), but this is a learning experience and an excuse to continue more Rust! I’m adding UI because running from the terminal is not the best UX, and this will make it easier to change the config (which you couldn’t do before after starting!) and handle everything more gracefully. I will say that, so far, the developer experience with Tauri has felt great. Automatic hot reloading is enabled by default on both the TypeScript frontend AND the Rust backend (which will auto-rebuild), super neat! Getting everything set up with Nix was… less great, but not Tauri’s fault. I also chose to use React for this project, as it’s been quite some time since I’ve really worked with it. Oh, yeah, also I made a logo in Aseprite! I mainly needed this for a tray icon. Modeled after the one and only Logitech C920 PRO HD Webcam , with its glorious (read as: bad (read as: loud = funny)) microphone. Now that the project has been refactored for Tauri, I need to port the old code to the new “backend”. I’ll build the config UI around this once that’s done! Also, Tauri actually has a global shortcut plugin, so I can replace rdev with this for a (hopefully) less janky handling system. (it’s awfully hard to find info about global key handling, probably because that’s misused for malware more often than not…)"}, {"post_id": 6694, "ts": "2026-06-11T06:51:26Z", "hours": 1.925, "text": "INITIAL PROTOTYPE I almost forgot I was going to make this! I made an initial prototype for funnymic, which (for now, at least) is a CLI tool to hot swap to a microphone only when holding down a key (like a very, very bad and comically loud C922 webcam mic, perhaps lol). This initial prototype only works on Linux. My TODO is to Make this faster if possible (maybe some async jank happening right now) Add Windows support Make it actually configurable This also is an excuse for me to learn more Rust! I’m likely going to work on most projects in Rust to continue learning (when it makes sense)."}]...
|
Title: FUNNY MIC! by @purpld | Stardance
Devlogs: Title: FUNNY MIC! by @purpld | Stardance
Devlogs:
INITIAL PROTOTYPE I almost forgot I was going to make this! I made an initial prototype for funnymic, which (for now, at least) is a CLI tool to hot swap to a microphone only when holding down a key (like a very, very bad and comically loud C922 webcam mic, perhaps lol). This initial prototype only works on Linux. My TODO is to Make this faster if possible (maybe some async jank happening right now) Add Windows support Make it actually configurable This also is an excuse for me to learn more Rust! I’m likely going to work on most projects in Rust to continue learning (when it makes sense).
UI TIME! This is my first time using Tauri ! As I’ve learned with a previous project, UI and Rust are still a bit iffy, sadly. Tauri effectively parallels Electron while offering much better performance, especially as you still use Rust for the backend while allowing the ease of use of HTML + CSS + JS/TS for the frontend! It uses native WebViews instead of Chromium, which gets rid of one of my biggest frustrations with Electron, that being including and running a whole browser for what’s often a single page. Of course, this is, uh, maybe is not the best project to showcase how great those features are considering there is effectively one (1) main feature here (lol), but this is a learning experience and an excuse to continue more Rust! I’m adding UI because running from the terminal is not the best UX, and this will make it easier to change the config (which you couldn’t do before after starting!) and handle everything more gracefully. I will say that, so far, the developer experience with Tauri has felt great. Automatic hot reloading is enabled by default on both the TypeScript frontend AND the Rust backend (which will auto-rebuild), super neat! Getting everything set up with Nix was… less great, but not Tauri’s fault. I also chose to use React for this project, as it’s been quite some time since I’ve really worked with it. Oh, yeah, also I made a logo in Aseprite! I mainly needed this for a tray icon. Modeled after the one and only Logitech C920 PRO HD Webcam , with its glorious (read as: bad (read as: loud = funny)) microphone. Now that the project has been refactored for Tauri, I need to port the old code to the new “backend”. I’ll build the config UI around this once that’s done! Also, Tauri actually has a global shortcut plugin, so I can replace rdev with this for a (hopefully) less janky handling system. (it’s awfully hard to find info about global key handling, probably because that’s misused for malware more often than not…)
“It’ll be easy!” NO IT WON’T BE ASDSFSDGDG ahem. What I mean to say is that the UI is done and ready! I think it looks relatively nice, simple, and most importantly, is functional . I, somehow, managed to log 11 HOURS , of which a significiant part of was not doing the UI, actually! It was literally just trying to get the global shortcut functionality to work again! Wayland doesn’t like you doing that, actually I use KDE Plasma as my desktop environment, which uses Wayland by default as of Plasma 6. I want to support all systems, and that obviously includes my own, but the Global Shortcut plugin for Tauri, as it turns out, only natively supports X11. Ah. At first, I tried using this pull request by patching it into my dependencies, so the Tauri plugin would use that instead of the normal crate. This worked actually! Until I tried using unregister_all() , at which point it crashes the xdg-desktop-portal with a SIGABRT, somehow, for some reason. I have no idea if that’s an issue with my system (I tried updating!) but I couldn’t find a way around it, so I ended up scrapping that plan (using an unreviewed, unmerged PR probably isn’t a great idea anyway…). What now? After what I said about rdev in the last devlog, I ended up writing a key handler module that would fallback to rdev when detecting Wayland (inspired by how murmur ended up doing this as well). Except… I wrote all this, spent a couple of hours getting everything working, and then somehow, by having moved the callback function for shortcuts into the Rust code (where I previously was trying it from the frontend in TypeScript), it… WORKS?! With the default Tauri plugin, which is only supposed to work on X11. This requires some more testing (is this a KDE Plasma specific thing?! or Xwayland??), so I’m keeping the keys module I made around for now just in case. Good news! The good news is that this means it works! The really only last two bits I need are Windows support and saving the config . Should this have taken this long? Probably not. I attribute that to still wandering my way through Rust and literally never having used Tauri before (lol). A good amount of time was spent getting the UI working in a way that I was happy with, too! With that said, here’s a quick recording of everything working!
V1! (last devlog before ship?) Wew, I should have probably made a devlog in between my last one! Windows support I have added Windows support! Fun fact, I hate working with the Windows API, and I’ve just learned that! In fairness, it’s a littleee bit awkward working with an API that is very obviously native to C, even if the Rust library gives it some Rustiness, but still, I dislike it. Greatly. Anyways, the important part is it works! And I had to use an undocumented Windows API to do a basic task (setting the default audio device). Nice. Cool! Awesome. (i’ve been trying to switch to Linux for a reason) Thankfully, someone already implemented that in the com-policy-config crate so I don’t have to find and try to convert a header file myself. Saving the config! After Windows support was done, the rest was relatively easy! Tauri has another plugin that makes it a little bit easier to manage a JSON store file and make it accessible to anything that has an AppHandle . config.json now stores the selected swap device and keybind, and these get automatically reloaded on startup. Lovely! oh hey uh, how are we building this thing, exactly? I use NixOS as my main operating system, so I already made a default.nix and shell.nix for running here. However, it doesn’t seem I can properly compile the regular bundles for .deb., .rpm, and AppImages (easily, anyway), and it would be tedious for every release anyways! Thankfully, tauri-action already exists, too! I made a GitHub Actions workflow that will compile and publish installers for both Windows and Linux when I make a new release. It’s pretty neat stuff, actually! README, After All This also means I finally took the time to make a nice README. It was nice to take a small step back to kind of overview this project. A fun little over-engineered thing this is, something that could have stayed a CLI app with only Linux support and nobody would have blinked, but here we are! It’s definitely been good practice for both my backend (Rust!) and frontend skills. I will definitely be using Tauri again in the future! Hello, from v1.0.0! (and Windows!)
Ships:
I made an easily configurable microphone hot swapping tool! Inspired by the lovingly horrible microphone of the Logitech C922 webcam. My project allows you to configure a microphone (for example, your webcam’s mic) and record a hotkey, and then swap whenever and wherever (and quickly!) by holding down your hotkey. Your system’s default microphone will be set to your chosen device when held, and return to whatever it was previously when you let go. And it works on both Windows and Linux! This seems quite simple on paper, and it probably SHOULD be, but a couple of things made this actually quite challenging: I wanted FUNNY MIC to be cross-platform! Nobody should be stopped from having horrible mic quality. Audio APIs on different OS’s, however, are VERY different! I learned how to use conditional compilation in Rust, and most importantly, how to use it wisely, to make an internal API that works and changes depending on your platform. This also meant I had to learn how these platform-specific APIs work and how to use them! Most importantly, this was my first time using Tauri as the backend framework for a Rust project! That in and of itself was quite challenging, but I’ve found that Tauri is nice to work with! I also chose React as my frontend UI framework, which I have used before, but it has been quite some time. I’m proud of this silly little over-engineered thing I managed to make with the tools that I’ve been given! I think this is a program that I’ll actually be continuing to use too (to mess with my friends, of course), which is nice. To test this project, you will need to download and run an installer for your platform. If you’re on NixOS, please see the README for more instructions; I’ve included a package for you too!...
|
1793231420.0837016
|
1793317820.0837016
|
|
16341
|
FeraSetu by @himanshu-singh7 | Stardance
|
himanshu-singh7
|
1
|
46.13
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T07:31:59Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i make ferasetu the name itself sayes a bridge between shopkeepers and customer . um it was easy not too much hard but it takes me a month to build and the challanging part was that i have to find an vps which is free (as i am student and with no money my parents dont give me money ) first i used amd 1 gb then leapcell and now cloudflare worker and for frontend we are using appwriter and for auth we are using appwriter and for databse we use d1 and for image we are thinking to use appwriter databse and for ai usage we used sarvam which is free and we added oauth and many othe it taken an month to build but i later know about hacktime then i connect to it and it is showing 7 hours only . yess i am proud of it as i take survey from other shopkeeper they are interested for this and yes i am proud of it as i work very hard for this . nothing people should know only website link or read readme.md", "repo": "https://github.com/rahul-gound/ferasetu", "demo": "https://ferasetu.com"}]...
|
[{"post_id": 67120, "ts": "202 [{"post_id": 67120, "ts": "2026-09-13T05:35:53Z", "hours": 27.5597, "text": "added new lanfing page ui , added working login and sign up page using workos added pricing and working : cashfree transaction , ferasetu email (only some part is left),ai router and more , giving subdoamin . making website templates with new logo and sitemap.xml"}, {"post_id": 27104, "ts": "2026-07-12T11:28:16Z", "hours": 10.3003, "text": "i was improving ui and making it fast and i was learning python added d1 database and sooner to add custom domain finding bug"}, {"post_id": 8559, "ts": "2026-06-14T07:04:06Z", "hours": 1.2658, "text": "i was fixing the ui and added and fixed admin page"}, {"post_id": 7930, "ts": "2026-06-13T07:08:19Z", "hours": 1.3117, "text": "we fixed ui and added smtp and google oauth"}, {"post_id": 7876, "ts": "2026-06-13T04:17:05Z", "hours": 5.9444, "text": "Devlog #1 — Building FeraSetu for Stardance Today I started preparing FeraSetu as my Stardance project. FeraSetu is a web app for local shopkeepers. The idea is simple: many small shops still take orders through calls or WhatsApp, and managing products, orders, invoices, and customers manually becomes confusing. I wanted to build a simple digital bridge for them. The main goal of FeraSetu is to help a shopkeeper create an online shop, add products, receive orders, manage invoices, and view basic business activity from one dashboard. What I worked on I focused on making the project clear and organized for shipping. I reviewed the current project structure and separated the frontend and backend parts. The frontend uses React, Vite, and TypeScript. The backend uses Node.js, Express, and TypeScript. The project also has pages for dashboard, products, orders, analytics, AI assistant, website builder, and public shop pages. I also worked on planning the README so that reviewers can understand the project quickly. Instead of only writing a big startup-style description, I want the README to explain what the project does, how to run it, what features are working, and what I learned while building it. Current features Right now, FeraSetu is planned around these main features: Shopkeeper dashboard Product management Order management Public shop page Website builder with templates Basic invoice system Feedback/survey page AI assistant for shop-related help The public shop page is important because it shows the real purpose of the project. A shopkeeper should be able to publish a small online store that customers can visit. Why I am building this I am building FeraSetu because I think local shops need simple tools. Many shopkeepers do not need a huge e-commerce system. They need something easy: add products, share a shop link, get orders, and manage them. I want FeraSetu to feel practical, not overcomplicated. Problems I noticed One problem is that the project has many ideas, so I need to keep the MVP focused. If I try to build everything at once, it can become messy. For Stardance, I will focus on the core flow: Create or open a shopkeeper dashboard Add products View/manage orders Publish a public shop page Show clear setup instructions in the README What I learned I learned that a good project is not only about writing code. It also needs clear documentation, clean structure, and a working demo. If someone opens the GitHub repo, they should quickly understand what the project is and how to run it. I also learned that writing a README is part of building the product, not just extra work. Next steps Next, I want to: Improve the README Add screenshots Make the frontend cleaner Test the backend endpoints Make sure the public shop page looks good on mobile Record what I built during each devlog FeraSetu is still a work in progress, but I want to keep improving it step by step and ship a real working project for Stardance."}]...
|
Title: FeraSetu by @himanshu-singh7 | Stardance
D Title: FeraSetu by @himanshu-singh7 | Stardance
Devlogs:
Devlog #1 — Building FeraSetu for Stardance Today I started preparing FeraSetu as my Stardance project. FeraSetu is a web app for local shopkeepers. The idea is simple: many small shops still take orders through calls or WhatsApp, and managing products, orders, invoices, and customers manually becomes confusing. I wanted to build a simple digital bridge for them. The main goal of FeraSetu is to help a shopkeeper create an online shop, add products, receive orders, manage invoices, and view basic business activity from one dashboard. What I worked on I focused on making the project clear and organized for shipping. I reviewed the current project structure and separated the frontend and backend parts. The frontend uses React, Vite, and TypeScript. The backend uses Node.js, Express, and TypeScript. The project also has pages for dashboard, products, orders, analytics, AI assistant, website builder, and public shop pages. I also worked on planning the README so that reviewers can understand the project quickly. Instead of only writing a big startup-style description, I want the README to explain what the project does, how to run it, what features are working, and what I learned while building it. Current features Right now, FeraSetu is planned around these main features: Shopkeeper dashboard Product management Order management Public shop page Website builder with templates Basic invoice system Feedback/survey page AI assistant for shop-related help The public shop page is important because it shows the real purpose of the project. A shopkeeper should be able to publish a small online store that customers can visit. Why I am building this I am building FeraSetu because I think local shops need simple tools. Many shopkeepers do not need a huge e-commerce system. They need something easy: add products, share a shop link, get orders, and manage them. I want FeraSetu to feel practical, not overcomplicated. Problems I noticed One problem is that the project has many ideas, so I need to keep the MVP focused. If I try to build everything at once, it can become messy. For Stardance, I will focus on the core flow: Create or open a shopkeeper dashboard Add products View/manage orders Publish a public shop page Show clear setup instructions in the README What I learned I learned that a good project is not only about writing code. It also needs clear documentation, clean structure, and a working demo. If someone opens the GitHub repo, they should quickly understand what the project is and how to run it. I also learned that writing a README is part of building the product, not just extra work. Next steps Next, I want to: Improve the README Add screenshots Make the frontend cleaner Test the backend endpoints Make sure the public shop page looks good on mobile Record what I built during each devlog FeraSetu is still a work in progress, but I want to keep improving it step by step and ship a real working project for Stardance.
we fixed ui and added smtp and google oauth
i was fixing the ui and added and fixed admin page
i was improving ui and making it fast and i was learning python added d1 database and sooner to add custom domain finding bug
added new lanfing page ui , added working login and sign up page using workos added pricing and working : cashfree transaction , ferasetu email (only some part is left),ai router and more , giving subdoamin . making website templates with new logo and sitemap.xml
Ships:
i make ferasetu the name itself sayes a bridge between shopkeepers and customer . um it was easy not too much hard but it takes me a month to build and the challanging part was that i have to find an vps which is free (as i am student and with no money my parents dont give me money ) first i used amd 1 gb then leapcell and now cloudflare worker and for frontend we are using appwriter and for auth we are using appwriter and for databse we use d1 and for image we are thinking to use appwriter databse and for ai usage we used sarvam which is free and we added oauth and many othe it taken an month to build but i later know about hacktime then i connect to it and it is showing 7 hours only . yess i am proud of it as i take survey from other shopkeeper they are interested for this and yes i am proud of it as i work very hard for this . nothing people should know only website link or read readme.md...
|
1793119962.2584918
|
1793206362.2584918
|
|
16345
|
Slackbot by @Zizik | Stardance
|
Zizik
|
1
|
4.0
|
29
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T16:45:15Z", "hours": 4.0, "multiplier": 5.98, "payout": 29, "blessing": "neutral", "text": "Ship checkout the version 1.0 devlog definitely because I got through everything inside it so here will be some shorter version of the devlog here are all the commands that my bot does: Available Commands: /zizik-ping - Check bot latency /zizik-catfact - Get a cat fact /zizik-joke - Get a random joke /zizik-translatetomylanguage - Translate text to my language /zizik-translator - First specify your language and then type the text after a space. /zizik-isssatellites - Get the current ISS location Well I had a lot of struggeles along the way like for example not copying the tokens right inside the nest or that I could not copy inside nest and I still can not or that I had problems with even getting the code right for the first time and everything else just spiraled out of my way really that is amybe why this bot is okay but like I think has some cool features so yeah it was very okay i would definitely say but i thought that it will be faster but it was not at all so I will see how everyone will like it! Yeah and i had a giant problem with me naming things differently because it wa the first time I was actually doing something a little harder and I hope that I at least did something that soemone might enjoy! AI was used for troubleshooting images in readme and soem terminal problems!", "repo": "https://github.com/UltraZizik/slackbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BAELQSNJV"}]...
|
[{"post_id": 8151, "ts": "2026 [{"post_id": 8151, "ts": "2026-06-13T16:24:27Z", "hours": 0.3042, "text": "Version 1.0 Well this was a journey from learning how to set this bot up or how to set him on the Nest so it runs 24/7 and learning so much more in the process. The bot has 4 of the commands from the tutorial and 3 mine : [5:59 PM]:robot_face: Available Commands: /zizik-ping - Check bot latency /zizik-catfact - Get a cat fact /zizik-joke - Get a random joke /zizik-translatetomylanguage - Translate text to my language /zizik-translator - First specify your language and then type the text after a space. /zizik-isssatellites - Get the current ISS location This is the final devlog for this bot or maybe I will return to this and add new things but who knows! Now I will tell you what I been through becasue I ran into many problems through this journey: I didn’t know where to communicate with the bot so i found it online and connected after that I had some problems with the tokens because yeah iInamed them tokens.env not .env so I figured it out with AI because Github had memory of me uploading this code that has things that shouldn’t be shared but overall I found the issue and resolved it. My second problem was that I couldn’t paste anything when I was in ssh to my nest so I badly copied the tokens-YEAH- and I figured it out after like half an hour and the second I used AI even though it was absolutely useless. Third problem was that I don’t really know how to code in javascript even though I did something(minecraft related) it was not the same at all only what iknew were const and console.log() and some other little things so I used a little bit of AI and other projects for brainstorming on how to ´make user specify the language in the translator and rewrited the code better for me so I understand what I typed and made thats why in the translation you have so much comments because I had to tell myself what it does so I don’t forget it anytime in the near future! That are overall my problems because I really enjoyed this somehow and it was great my bot does a lot and means a lot to me. I stated everywhere my AI usage and in readme.md there was some too but not much and I tried to rewrite most of it so it sound like me more and so it speaks to my experience from it more! Now if everything will be allright i will move onto other project maybe the hadkpad or something on my own!"}, {"post_id": 8110, "ts": "2026-06-13T15:17:46Z", "hours": 2.2261, "text": "So today was very productive Firstly I made a transalator that translates to Czech That was very great easy and fast. Only thing that like I didnt know how was what api to use for translator and well I used Google translate Same goes for the second command that translates everything into anything and I found it really hard to make the logic on how to see the first command that specifies the language and well I found it in other project and well I modified it a little and typed what everything does so I can use something or undesrstand something like this better in the future The third just tells you where ISS satellites are which is kind of insane that I thought about this and yeah I got inspired by others that put mars pictures and etc so I put satelite commands in there! Overall this was the most productive day but the most stressfull to and I will ship it after I make some solid README. I knew absolutely nothing about this from the start and well my ssh and knowledge in this was really bad I was always mainly making modpacks or etc. It was absolutely different and overall I would say even thought it took me soo long than some other people it was still great experince and i learned so much from this which is absolutely insane!"}, {"post_id": 7601, "ts": "2026-06-12T18:25:30Z", "hours": 1.1717, "text": "Slackbot update! So it begings with me badly copying the token from the original code! For some reason ctrl+v does not work when in ssh… I still dont know why? It is how it is so I had to type all of the tokens and commands with my hand and got bored of it so I imported the .env file because why the hell not and it copied badly :) after that I got myself into big troubles with that I made the folders and everything in different spots so i had to learn how to move file and etc. the time I got into this… I somehow misread the thing and yeah my commands were not unique so it colided with others and after some time I figured it out! I still dont know how? Now the next time I will do this I will make something new and maybe more fun for me than learning something from linux, some dumb mistakes because I didnt understand some things or thought that it is easy and yeah I used lots of AI for troubleshooting but im not ashamed to say so because troubleshooting is so boring and i dont want to sit here for hours more trying to figure it out! Overall I enjoyed todays run more than yesterday it was fun, good and it made sense so next time I will make it do something maybe more fun or more useful but after that I will be moving onto some different project! :)"}, {"post_id": 7027, "ts": "2026-06-11T19:47:17Z", "hours": 0.3869, "text": "Slackbot Well this was some kind of experience I didn’t knew I needed but I worked on this and got into some troubles like big ones! First one was that fucking Tokens didn’t work for me! I had to put path inside the config of dotenv because I don’t fucking know why but I had to do it… Second was git or more of a GitHub issue so I literally named the .env file differently as an absolute idiot and brought me pain😓 because the file was not hidden from GitHub and it remembered so I had to use ai and ask it on how to erase the memory of that thing.😕 Third was the same as first but on nest and I didn’t figure out how to fix this one somehow? But I made to work: /dsb-ping /dsb-catfact /dsb-joke And tried to make one myself Overall I had a good time with this but I was struggling a lot and I think this is not my cup of tea really like I think I will try something different next time but I want to make this work and get this mission done! As everyone says you always need to learn something you don’t like or you don’t understand so yeah I made that today👍 Sometimes in the future my devlog will maybe improve and I will improve with it as well"}]...
|
Title: Slackbot by @Zizik | Stardance
Devlogs:
Sl Title: Slackbot by @Zizik | Stardance
Devlogs:
Slackbot Well this was some kind of experience I didn’t knew I needed but I worked on this and got into some troubles like big ones! First one was that fucking Tokens didn’t work for me! I had to put path inside the config of dotenv because I don’t fucking know why but I had to do it… Second was git or more of a GitHub issue so I literally named the .env file differently as an absolute idiot and brought me pain😓 because the file was not hidden from GitHub and it remembered so I had to use ai and ask it on how to erase the memory of that thing.😕 Third was the same as first but on nest and I didn’t figure out how to fix this one somehow? But I made to work: /dsb-ping /dsb-catfact /dsb-joke And tried to make one myself Overall I had a good time with this but I was struggling a lot and I think this is not my cup of tea really like I think I will try something different next time but I want to make this work and get this mission done! As everyone says you always need to learn something you don’t like or you don’t understand so yeah I made that today👍 Sometimes in the future my devlog will maybe improve and I will improve with it as well
Slackbot update! So it begings with me badly copying the token from the original code! For some reason ctrl+v does not work when in ssh… I still dont know why? It is how it is so I had to type all of the tokens and commands with my hand and got bored of it so I imported the .env file because why the hell not and it copied badly :) after that I got myself into big troubles with that I made the folders and everything in different spots so i had to learn how to move file and etc. the time I got into this… I somehow misread the thing and yeah my commands were not unique so it colided with others and after some time I figured it out! I still dont know how? Now the next time I will do this I will make something new and maybe more fun for me than learning something from linux, some dumb mistakes because I didnt understand some things or thought that it is easy and yeah I used lots of AI for troubleshooting but im not ashamed to say so because troubleshooting is so boring and i dont want to sit here for hours more trying to figure it out! Overall I enjoyed todays run more than yesterday it was fun, good and it made sense so next time I will make it do something maybe more fun or more useful but after that I will be moving onto some different project! :)
So today was very productive Firstly I made a transalator that translates to Czech That was very great easy and fast. Only thing that like I didnt know how was what api to use for translator and well I used Google translate Same goes for the second command that translates everything into anything and I found it really hard to make the logic on how to see the first command that specifies the language and well I found it in other project and well I modified it a little and typed what everything does so I can use something or undesrstand something like this better in the future The third just tells you where ISS satellites are which is kind of insane that I thought about this and yeah I got inspired by others that put mars pictures and etc so I put satelite commands in there! Overall this was the most productive day but the most stressfull to and I will ship it after I make some solid README. I knew absolutely nothing about this from the start and well my ssh and knowledge in this was really bad I was always mainly making modpacks or etc. It was absolutely different and overall I would say even thought it took me soo long than some other people it was still great experince and i learned so much from this which is absolutely insane!
Version 1.0 Well this was a journey from learning how to set this bot up or how to set him on the Nest so it runs 24/7 and learning so much more in the process. The bot has 4 of the commands from the tutorial and 3 mine : [5:59 PM]:robot_face: Available Commands: /zizik-ping - Check bot latency /zizik-catfact - Get a cat fact /zizik-joke - Get a random joke /zizik-translatetomylanguage - Translate text to my language /zizik-translator - First specify your language and then type the text after a space. /zizik-isssatellites - Get the current ISS location This is the final devlog for this bot or maybe I will return to this and add new things but who knows! Now I will tell you what I been through becasue I ran into many problems through this journey: I didn’t know where to communicate with the bot so i found it online and connected after that I had some problems with the tokens because yeah iInamed them tokens.env not .env so I figured it out with AI because Github had memory of me uploading this code that has things that shouldn’t be shared but overall I found the issue and resolved it. My second problem was that I couldn’t paste anything when I was in ssh to my nest so I badly copied the tokens-YEAH- and I figured it out after like half an hour and the second I used AI even though it was absolutely useless. Third problem was that I don’t really know how to code in javascript even though I did something(minecraft related) it was not the same at all only what iknew were const and console.log() and some other little things so I used a little bit of AI and other projects for brainstorming on how to ´make user specify the language in the translator and rewrited the code better for me so I understand what I typed and made thats why in the translation you have so much comments because I had to tell myself what it does so I don’t forget it anytime in the near future! That are overall my problems because I really enjoyed this somehow and it was great my bot does a lot and means a lot to me. I stated everywhere my AI usage and in readme.md there was some too but not much and I tried to rewrite most of it so it sound like me more and so it speaks to my experience from it more! Now if everything will be allright i will move onto other project maybe the hadkpad or something on my own!
Ships:
Ship checkout the version 1.0 devlog definitely because I got through everything inside it so here will be some shorter version of the devlog here are all the commands that my bot does: Available Commands: /zizik-ping - Check bot latency /zizik-catfact - Get a cat fact /zizik-joke - Get a random joke /zizik-translatetomylanguage - Translate text to my language /zizik-translator - First specify your language and then type the text after a space. /zizik-isssatellites - Get the current ISS location Well I had a lot of struggeles along the way like for example not copying the tokens right inside the nest or that I could not copy inside nest and I still can not or that I had problems with even getting the code right for the first time and everything else just spiraled out of my way really that is amybe why this bot is okay but like I think has some cool features so yeah it was very okay i would definitely say but i thought that it will be faster but it was not at all so I will see how everyone will like it! Yeah and i had a giant problem with me naming things differently because it wa the first time I was actually doing something a little harder and I hope that I at least did something that soemone might enjoy! AI was used for troubleshooting images in readme and soem terminal problems!...
|
1793119958.4588552
|
1793206358.4588552
|
|
16351
|
Ecosystem Contributions S1 by @Q-Shadow | Stardanc Ecosystem Contributions S1 by @Q-Shadow | Stardance...
|
Q-Shadow
|
1
|
16.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T12:13:10Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Project Description: Ecosystem Contributions S1 What I Made: Instead of building a traditional standalone game or app, I built infrastructure fixes for the foundational deep-tech libraries that power the global AI stack. Whenever I hit a wall or encountered downtime while working on local AI models, I shifted focus to diagnosing issue trackers, investigating open bugs, and writing native performance patches. Over the course of the season, I authored and submitted critical upstream Pull Requests and code reviews directly to PyTorch , TensorFlow , and JAX , alongside reviewing technical code for ecosystem tooling like Hoppscotch . ⚡ What Was Challenging: The primary challenge lay in working deeply within the low-level architecture of modern hardware backends—navigating CPU SIMD vectorization paths and CUDA parallel device execution layers. Debugging silent framework miscompilations (like C++ template types or implicit signed integer promotions breaking tensor math) required a deep understanding of compiler behaviors, IEEE 754 floating-point standards, and strict multi-backend performance invariants. Ensuring that these critical bug fixes didn’t introduce compile-time regressions or runtime memory overhead meant writing highly specialized, production-ready C++17 and Python codebases under the scrutiny of core framework maintainers. What I Am Proud Of: I am incredibly proud of engineering robust fixes for long-standing mathematical edge cases that could cause critical models to diverge in production. Specifically, resolving the torch.sign NaN propagation flaw across CPU register paths and GPU lambdas, fixing silent uint8 miscompilations inside torch.compile, and eliminating XLA-compiled loss scaling trajectory divergence inside TensorFlow’s distributed multi-worker training loops. Contributing code that successfully passes through intensive open-source CI checks and gets merged by core engineering teams at Google and Meta is an incredibly rewarding milestone. How People Can Test This: Because these are upstream contributions to core machine learning frameworks, you don’t boot up a traditional user interface to test them. Instead, you can pull the latest master/main branches of PyTorch , TensorFlow , and JAX to see these native patches in action. Alternatively, you can directly inspect the codebase modifications, optimization benchmarks, and regression testing harnesses by reviewing my public pull requests on GitHub: PyTorch PR #184874, #187024, and #186930; TensorFlow PR #119354 and #121366; and JAX PR #38617. This was just Season 1—the foundations are laid, the upstream pipelines are open, and the engineering caliber is only scaling up from here.", "repo": "https://github.com/Kinetic-Labs-GT/Ecosystem-Contributions", "demo": "https://github.com/Kinetic-Labs-GT"}]...
|
[{"post_id": 12500, "ts": "202 [{"post_id": 12500, "ts": "2026-06-20T12:44:10Z", "hours": 1.0278, "text": "ID: JAX PR-1 I have made a PR which fixes an issue in jax-ml/jax repo. Pull Request (PR) URL: https://github.com/jax-ml/jax/pull/38617 Issue URL: https://github.com/jax-ml/jax/issues/38615"}, {"post_id": 11845, "ts": "2026-06-19T08:42:18Z", "hours": 4.1075, "text": "ID: Hoppscotch CR-1, 2 Reviewed 2 PRs in the Hoppscotch repo. URLs: https://github.com/hoppscotch/hoppscotch/pull/6381 https://github.com/hoppscotch/hoppscotch/pull/6447"}, {"post_id": 9999, "ts": "2026-06-16T15:15:32Z", "hours": 1.2681, "text": "ID: Tensor Flow PR-1 Summary This PR resolves an optimization trajectory divergence bug (detailed in #120986) that occurs when utilizing tf.nn.compute_average_loss inside a distributed multi-worker training loop ( MultiWorkerMirroredStrategy ) wrapped with XLA compilation ( jit_compile=True ). Root Cause Analysis The optimization trajectory splits between the non-XLA (reference) and XLA-compiled execution arms because of how active strategy contexts are evaluated across the function tracing boundary. Historically, compute_average_loss relied exclusively on distribute_lib.get_strategy().num_replicas_in_sync to infer the global batch size scaling constant. This utility queries the thread-local strategy_stack maintained by the eager runtime context. However, during the graph tracing initialization phase of tf.function(jit_compile=True) , this eager stack handle can become isolated or masked inside the polymorphic function builder thread space. Furthermore, if a trace is evaluated prematurely or during initialization steps, the stack can appear empty to the compilation tracer frame. When this handle is masked or evaluates to empty, compute_average_loss silently falls back to a default global_batch_size = 1 . Under XLA, this value is permanently constant-folded and baked directly into the HLO binary graph. During actual parallel execution inside strategy.run() , the underlying math executes math_ops.reduce_sum(per_example_loss) / 1 instead of dividing by the correct num_replicas_in_sync (e.g., 2 ). This permanently doubles the gradient magnitude on the XLA arm, causing stateful optimizers like Adam to immediately diverge. Implementation Details Context Resolution Pipeline : Added a new private utility helper _get_num_replicas_in_sync() inside tensorflow/python/ops/nn_impl_distribute.py . This helper modifies the strategy discovery topology to prioritize checking the lightweight, per-thread active environment handle distribute_lib.get_replica_context() . This context is guaranteed to be populated inside strategy.run() and cleanly survives the Python frame switches involved in XLA function tracing. Defensive Invariants : Added type and range validation assertions to ensure the resolved replica integer count is a strictly positive Python int to catch structural strategy bugs prior to HLO constant generation. Caller Redirection : Refactored compute_average_loss to route dynamic scaling factor discovery through the new _get_num_replicas_in_sync() pipeline. Testing Harness expansion : Appended comprehensive unit and integration regression test suites ( TestGetNumReplicasInSync and TestComputeAverageLossXLAContextMasking ) directly to tensorflow/python/ops/nn_loss_scaling_utilities_test.py to formally mock context-masking behavior and assert proper scalar output reductions under isolated tracing simulation environments. Verification Status Syntactic and AST structural verification passes cleanly via py_compile checks. Code style preserves the 2-space baseline indentation layout standard to the internal package architecture."}, {"post_id": 9858, "ts": "2026-06-16T09:58:16Z", "hours": 3.4183, "text": "ID: PyTorch PR-1 I have force-pushed an updated, compile-safe implementation to address the logical and architectural edge cases across both the CPU and CUDA backends. Core Changes & Fixes: Compile-Time Branching (CPU & CUDA): Added C++17 if constexpr (std::is_integral_v<scalar_t>) branching to decouple the type dispatch loops. This completely isolates the NaN-preservation logic to floating-point types ( float , double , Half , BFloat16 ). As a result, integral type paths completely elide the isnan guards at compile time, eliminating template instantiation errors and preserving the highly optimized native fast paths. CUDA Host-to-Device Fix: Inside sign_kernel_cuda , the host-side at::_isnan utility inside the GPU_LAMBDA has been replaced with the device-safe qualified c10::isnan intrinsic. This resolves the NVCC __host__ to __device__ namespace violation completely. Validation: The updated files have been verified locally. Both spin lint and lintrunner -a pass with zero code style or formatting errors, and local target compilation succeeds perfectly. The PR is now fully production-ready and structurally sound."}, {"post_id": 6846, "ts": "2026-06-11T14:31:27Z", "hours": 0.5814, "text": "ID: PyTorch PR-2 Another lint error fixed."}, {"post_id": 6826, "ts": "2026-06-11T13:32:05Z", "hours": 0.4167, "text": "ID: PyTorch PR-2 Fixed the lint error in PyTorch PR-2."}, {"post_id": 6762, "ts": "2026-06-11T10:18:22Z", "hours": 1.2864, "text": "ID: PyTorch PR-2 Summary of Upstream Work Investigated and resolved a silent miscompilation bug in torch.compile where abs() operations on unsigned integer tensors (such as uint8 ) routed through the C++ codegen produced incorrect downstream graph results (Fixes #187018). Engineering Execution Root Cause Diagnostics: Identified that the TorchInductor CPU codegen emitted std::abs({x}) unconditionally for scalar paths. In C++, std::abs lacks an overload for unsigned types, triggering implicit signed integer promotion that broke critical downstream unsigned wrap-around semantics during negation and reduction. Fix: Modified CppOverrides.abs() within torch/_inductor/codegen/cpp.py to handle types explicitly. Unsigned integers now bypass C++ math entirely as an identity operation ( x ), signed integers utilize a typed ternary bypass to avoid implicit promotion, and floating-point paths preserve the standard std::abs({x}) fallback. Validation & Testing: Authored a targeted regression unit test ( test_uint8_abs_codegen_issue_187018 ) within test/inductor/test_torchinductor.py under CpuTests . Verified that eager and compiled outputs now align flawlessly with strict parity."}, {"post_id": 6706, "ts": "2026-06-11T07:30:19Z", "hours": 3.6128, "text": "ID: PyTorch PR-1 This patch resolves a critical numerical divergence inside the PyTorch core library regarding how torch.sign handles NaN (Not a Number) floating-point elements. By replacing relational comparison dependencies with an explicit NaN-interception architecture, this modification ensures strict adherence to modern IEEE 754 floating-point standards and unifies execution parity across both CPU (SIMD Vectorized) and GPU (CUDA Threaded) runtimes. Engineering Deconstruction 1. The Architectural Flaw (The Root Cause) Previously, both the CPU and CUDA hardware backend kernels computed the numerical sign of a tensor element using raw relational comparison arithmetic expressions equivalent to: $$\\text{Result} = (0 < a) - (a < 0)$$ According to the IEEE 754 specification , any relational comparison operations evaluated directly against a NaN element must return false . Because of this constraint, when a NaN entered the execution block: $0 < \\text{NaN} \\implies \\text{false} \\ (0)$ $\\text{NaN} < 0 \\implies \\text{false} \\ (0)$ $\\text{Result} = 0 - 0 = 0$ This configuration silently swallowed the arithmetic NaN state, transforming an undefined input value into a normal, valid 0 tracking tensor, which broke expected downstream behavior in mathematical gradients and loss validation. 2. The Multi-Backend System Fix To fix this without degrading processing speeds, the implementation handles the problem at the hardware compilation level for both devices: Advanced CPU Kernel Path ( UnaryOpsKernel.cpp ) : Scalar Fallback : Integrated an immediate type-safe intercept layer using at::_isnan(a) . If true, the branch bypasses relational arithmetic entirely and returns the original NaN element. SIMD Vectorization : Packaged hardware registers to calculate masks using self_vec.isnan() . It applies a precise bitwise rewrite step via Vectorized<scalar_t>::blendv to preserve original uncorrupted data lanes right before register return. Parallel GPU Kernel Path ( UnarySignKernels.cu ) : Upgraded the global device execution lambda ( []GPU_LAMBDA ) to intercept thread blocks via at::_isnan(a) before the variable drops down into the low-level c10::signum(a) macro block."}]...
|
Title: Ecosystem Contributions S1 by @Q-Shadow | S Title: Ecosystem Contributions S1 by @Q-Shadow | Stardance
Devlogs:
ID: PyTorch PR-1 This patch resolves a critical numerical divergence inside the PyTorch core library regarding how torch.sign handles NaN (Not a Number) floating-point elements. By replacing relational comparison dependencies with an explicit NaN-interception architecture, this modification ensures strict adherence to modern IEEE 754 floating-point standards and unifies execution parity across both CPU (SIMD Vectorized) and GPU (CUDA Threaded) runtimes. Engineering Deconstruction 1. The Architectural Flaw (The Root Cause) Previously, both the CPU and CUDA hardware backend kernels computed the numerical sign of a tensor element using raw relational comparison arithmetic expressions equivalent to: $$\text{Result} = (0 < a) - (a < 0)$$ According to the IEEE 754 specification , any relational comparison operations evaluated directly against a NaN element must return false . Because of this constraint, when a NaN entered the execution block: $0 < \text{NaN} \implies \text{false} \ (0)$ $\text{NaN} < 0 \implies \text{false} \ (0)$ $\text{Result} = 0 - 0 = 0$ This configuration silently swallowed the arithmetic NaN state, transforming an undefined input value into a normal, valid 0 tracking tensor, which broke expected downstream behavior in mathematical gradients and loss validation. 2. The Multi-Backend System Fix To fix this without degrading processing speeds, the implementation handles the problem at the hardware compilation level for both devices: Advanced CPU Kernel Path ( UnaryOpsKernel.cpp ) : Scalar Fallback : Integrated an immediate type-safe intercept layer using at::_isnan(a) . If true, the branch bypasses relational arithmetic entirely and returns the original NaN element. SIMD Vectorization : Packaged hardware registers to calculate masks using self_vec.isnan() . It applies a precise bitwise rewrite step via Vectorized<scalar_t>::blendv to preserve original uncorrupted data lanes right before register return. Parallel GPU Kernel Path ( UnarySignKernels.cu ) : Upgraded the global device execution lambda ( []GPU_LAMBDA ) to intercept thread blocks via at::_isnan(a) before the variable drops down into the low-level c10::signum(a) macro block.
ID: PyTorch PR-2 Summary of Upstream Work Investigated and resolved a silent miscompilation bug in torch.compile where abs() operations on unsigned integer tensors (such as uint8 ) routed through the C++ codegen produced incorrect downstream graph results (Fixes #187018). Engineering Execution Root Cause Diagnostics: Identified that the TorchInductor CPU codegen emitted std::abs({x}) unconditionally for scalar paths. In C++, std::abs lacks an overload for unsigned types, triggering implicit signed integer promotion that broke critical downstream unsigned wrap-around semantics during negation and reduction. Fix: Modified CppOverrides.abs() within torch/_inductor/codegen/cpp.py to handle types explicitly. Unsigned integers now bypass C++ math entirely as an identity operation ( x ), signed integers utilize a typed ternary bypass to avoid implicit promotion, and floating-point paths preserve the standard std::abs({x}) fallback. Validation & Testing: Authored a targeted regression unit test ( test_uint8_abs_codegen_issue_187018 ) within test/inductor/test_torchinductor.py under CpuTests . Verified that eager and compiled outputs now align flawlessly with strict parity.
ID: PyTorch PR-2 Fixed the lint error in PyTorch PR-2.
ID: PyTorch PR-2 Another lint error fixed.
ID: PyTorch PR-1 I have force-pushed an updated, compile-safe implementation to address the logical and architectural edge cases across both the CPU and CUDA backends. Core Changes & Fixes: Compile-Time Branching (CPU & CUDA): Added C++17 if constexpr (std::is_integral_v<scalar_t>) branching to decouple the type dispatch loops. This completely isolates the NaN-preservation logic to floating-point types ( float , double , Half , BFloat16 ). As a result, integral type paths completely elide the isnan guards at compile time, eliminating template instantiation errors and preserving the highly optimized native fast paths. CUDA Host-to-Device Fix: Inside sign_kernel_cuda , the host-side at::_isnan utility inside the GPU_LAMBDA has been replaced with the device-safe qualified c10::isnan intrinsic. This resolves the NVCC __host__ to __device__ namespace violation completely. Validation: The updated files have been verified locally. Both spin lint and lintrunner -a pass with zero code style or formatting errors, and local target compilation succeeds perfectly. The PR is now fully production-ready and structurally sound.
ID: Tensor Flow PR-1 Summary This PR resolves an optimization trajectory divergence bug (detailed in #120986) that occurs when utilizing tf.nn.compute_average_loss inside a distributed multi-worker training loop ( MultiWorkerMirroredStrategy ) wrapped with XLA compilation ( jit_compile=True ). Root Cause Analysis The optimization trajectory splits between the non-XLA (reference) and XLA-compiled execution arms because of how active strategy contexts are evaluated across the function tracing boundary. Historically, compute_average_loss relied exclusively on distribute_lib.get_strategy().num_replicas_in_sync to infer the global batch size scaling constant. This utility queries the thread-local strategy_stack maintained by the eager runtime context. However, during the graph tracing initialization phase of tf.function(jit_compile=True) , this eager stack handle can become isolated or masked inside the polymorphic function builder thread space. Furthermore, if a trace is evaluated prematurely or during initialization steps, the stack can appear empty to the compilation tracer frame. When this handle is masked or evaluates to empty, compute_average_loss silently falls back to a default global_batch_size = 1 . Under XLA, this value is permanently constant-folded and baked directly into the HLO binary graph. During actual parallel execution inside strategy.run() , the underlying math executes math_ops.reduce_sum(per_example_loss) / 1 instead of dividing by the correct num_replicas_in_sync (e.g., 2 ). This permanently doubles the gradient magnitude on the XLA arm, causing stateful optimizers like Adam to immediately diverge. Implementation Details Context Resolution Pipeline : Added a new private utility helper _get_num_replicas_in_sync() inside tensorflow/python/ops/nn_impl_distribute.py . This helper modifies the strategy discovery topology to prioritize checking the lightweight, per-thread active environment handle distribute_lib.get_replica_context() . This context is guaranteed to be populated inside strategy.run() and cleanly survives the Python frame switches involved in XLA function tracing. Defensive Invariants : Added type and range validation assertions to ensure the resolved replica integer count is a strictly positive Python int to catch structural strategy bugs prior to HLO constant generation. Caller Redirection : Refactored compute_average_loss to route dynamic scaling factor discovery through the new _get_num_replicas_in_sync() pipeline. Testing Harness expansion : Appended comprehensive unit and integration regression test suites ( TestGetNumReplicasInSync and TestComputeAverageLossXLAContextMasking ) directly to tensorflow/python/ops/nn_loss_scaling_utilities_test.py to formally mock context-masking behavior and assert proper scalar output reductions under isolated tracing simulation environments. Verification Status Syntactic and AST structural verification passes cleanly via py_compile checks. Code style preserves the 2-space baseline indentation layout standard to the internal package architecture.
ID: Hoppscotch CR-1, 2 Reviewed 2 PRs in the Hoppscotch repo. URLs: https://github.com/hoppscotch/hoppscotch/pull/6381 https://github.com/hoppscotch/hoppscotch/pull/6447
ID: JAX PR-1 I have made a PR which fixes an issue in jax-ml/jax repo. Pull Request (PR) URL: https://github.com/jax-ml/jax/pull/38617 Issue URL: https://github.com/jax-ml/jax/issues/38615
Ships:
Project Description: Ecosystem Contributions S1 What I Made: Instead of building a traditional standalone game or app, I built infrastructure fixes for the foundational deep-tech libraries that power the global AI stack. Whenever I hit a wall or encountered downtime while working on local AI models, I shifted focus to diagnosing issue trackers, investigating open bugs, and writing native performance patches. Over the course of the season, I authored and submitted critical upstream Pull Requests and code reviews directly to PyTorch , TensorFlow , and JAX , alongside reviewing technical code for ecosystem tooling like Hoppscotch . ⚡ What Was Challenging: The primary challenge lay in working deeply within the low-level architecture of modern hardware backends—navigating CPU SIMD vectorization paths and CUDA parallel device execution layers. Debugging silent framework miscompilations (like C++ template types or implicit signed integer promotions breaking tensor math) required a deep understanding of compiler behaviors, IEEE 754 floating-point standards, and strict multi-backend performance invariants. Ensuring that these critical bug fixes didn’t introduce compile-time regressions or runtime memory overhead meant writing highly specialized, production-ready C++17 and Python codebases under the scrutiny of core framework maintainers. What I Am Proud Of: I am incredibly proud of engineering robust fixes for long-standing mathematical edge cases that could cause critical models to diverge in production. Specifically, resolving the torch.sign NaN propagation flaw across CPU register paths and GPU lambdas, fixing silent uint8 miscompilations inside torch.compile, and eliminating XLA-compiled loss scaling trajectory divergence inside TensorFlow’s distributed multi-worker training loops. Contributing code that successfully passes through intensive open-source CI checks and gets merged by core engineering teams at Google and Meta is an incredibly rewarding milestone. How People Can Test This: Because these are upstream contributions to core machine learning frameworks, you don’t boot up a traditional user interface to test them. Instead, you can pull the latest master/main branches of PyTorch , TensorFlow , and JAX to see these native patches in action. Alternatively, you can directly inspect the codebase modifications, optimization benchmarks, and regression testing harnesses by reviewing my public pull requests on GitHub: PyTorch PR #184874, #187024, and #186930; TensorFlow PR #119354 and #121366; and JAX PR #38617. This was just Season 1—the foundations are laid, the upstream pipelines are open, and the engineering caliber is only scaling up from here....
|
1793220517.2798998
|
1793306917.2798998
|
|
16381
|
PIANO by @dravenlancaster79 | Stardance
|
dravenlancaster79
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T18:18:03Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "After many hours of leaning and tutorials(and many idea shifts), the piano is finished with a playable demo in wokwi! there was many struggles, the first of which being making multiple inputs and outputs, the next was getting each button connected to its own tone, after many hours of research it was finally finished and ready to go!", "repo": "https://github.com/dravenlancaster79-creator/DATHFINDER-piano", "demo": ""}]...
|
[{"post_id": 8234, "ts": "2026 [{"post_id": 8234, "ts": "2026-06-13T18:14:12Z", "hours": 0.6117, "text": "finished some firmare nd part searching !!!"}, {"post_id": 7661, "ts": "2026-06-12T20:05:09Z", "hours": 0.9747, "text": "So today so far ive been doing lots of reaserch and tests because when I use one input(button) and one output(light) everything works, but as soon as I add another in/out combo everything breaks has everything on and the buttons turn the lights off which is strange, idk if its code placement or what, ive been rewriting the code using INT instead of uint8_t(i did reaserch appearentlt its better but still breakin) SUCSESS IS AHEAD!!!"}, {"post_id": 7227, "ts": "2026-06-12T02:00:00Z", "hours": 0.4158, "text": "Currently made a Schematic,pcb design, as well as a 3d model! ran into issues with Arduino IDE But i hope to fix it so my hours will be logged soon, if not, going to resort to using VS code and transferring it to Arduino"}]...
|
Title: PIANO by @dravenlancaster79 | Stardance
De Title: PIANO by @dravenlancaster79 | Stardance
Devlogs:
Currently made a Schematic,pcb design, as well as a 3d model! ran into issues with Arduino IDE But i hope to fix it so my hours will be logged soon, if not, going to resort to using VS code and transferring it to Arduino
So today so far ive been doing lots of reaserch and tests because when I use one input(button) and one output(light) everything works, but as soon as I add another in/out combo everything breaks has everything on and the buttons turn the lights off which is strange, idk if its code placement or what, ive been rewriting the code using INT instead of uint8_t(i did reaserch appearentlt its better but still breakin) SUCSESS IS AHEAD!!!
finished some firmare nd part searching !!!
Ships:
After many hours of leaning and tutorials(and many idea shifts), the piano is finished with a playable demo in wokwi! there was many struggles, the first of which being making multiple inputs and outputs, the next was getting each button connected to its own tone, after many hours of research it was finally finished and ready to go!...
|
1793109344.5089676
|
1793195744.5089676
|
|
16409
|
Space tide by @singhabhyuday180 | Stardance
|
singhabhyuday180
|
1
|
4.0
|
12
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T09:51:43Z", "hours": 4.0, "multiplier": 3.0, "payout": 12, "blessing": "neutral", "text": "So I’ve made Space-tide the official language for Stardance. Space-tide is a language with less grammar and easy word formation. Even a 5 year old can comprehend the rules of Space-tide and speak this beautiful language. Oh, it was a tough job (okay, maybe not that tough) and the toughest part being the dictionary which led to an unusual amount of time spent on JSON. Yeah, that’s it I guess.", "repo": "https://github.com/AbhyudayS-07/Space-tide", "demo": "https://gregarious-pothos-4d89e8.netlify.app/"}]...
|
[{"post_id": 25830, "ts": "202 [{"post_id": 25830, "ts": "2026-07-10T09:42:19Z", "hours": 0.9778, "text": "Hey Everyone, finally Space-tide is over. Yep I did cheat a little like I did not complete the AI translator but its alright and that’s for another day. SO all that I’ve included in Space-tide is: The dictionary The rules Made the webpage Hosted it on netlify Added the rules and dictionary on the website P.S.: The website ain’t that good for I’m a newbie here so forgive me for that. Check it out at - https://gregarious-pothos-4d89e8.netlify.app/"}, {"post_id": 11870, "ts": "2026-06-19T10:22:55Z", "hours": 1.9981, "text": "Phase 1: Done The translator is almost done. Everything I’ve made till now : i. Word dictionary (about 90 words) ii. Rules for word formation iii. A basic word-by-word translator that translates English to Space-tide Things that are to be added: i. A translator for translating phrases ii. Using AI to translate iii. Building a translator to convert space-tide to English iv. A space-tide word builder Hopefuly it would be complete by this sunday."}, {"post_id": 7383, "ts": "2026-06-12T09:47:31Z", "hours": 0.945, "text": "SO right now I’m building a completely new language- Space Tide with very specific purpose - Elegance and simplicity. Lets see how it looks like."}]...
|
Title: Space tide by @singhabhyuday180 | Stardance Title: Space tide by @singhabhyuday180 | Stardance
Devlogs:
SO right now I’m building a completely new language- Space Tide with very specific purpose - Elegance and simplicity. Lets see how it looks like.
Phase 1: Done The translator is almost done. Everything I’ve made till now : i. Word dictionary (about 90 words) ii. Rules for word formation iii. A basic word-by-word translator that translates English to Space-tide Things that are to be added: i. A translator for translating phrases ii. Using AI to translate iii. Building a translator to convert space-tide to English iv. A space-tide word builder Hopefuly it would be complete by this sunday.
Hey Everyone, finally Space-tide is over. Yep I did cheat a little like I did not complete the AI translator but its alright and that’s for another day. SO all that I’ve included in Space-tide is: The dictionary The rules Made the webpage Hosted it on netlify Added the rules and dictionary on the website P.S.: The website ain’t that good for I’m a newbie here so forgive me for that. Check it out at - https://gregarious-pothos-4d89e8.netlify.app/
Ships:
So I’ve made Space-tide the official language for Stardance. Space-tide is a language with less grammar and easy word formation. Even a 5 year old can comprehend the rules of Space-tide and speak this beautiful language. Oh, it was a tough job (okay, maybe not that tough) and the toughest part being the dictionary which led to an unusual amount of time spent on JSON. Yeah, that’s it I guess....
|
1793141403.459414
|
1793227803.459414
|
|
16442
|
Booksole by @anujkishan918 | Stardance
|
anujkishan918
|
1
|
22.0
|
418
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T14:56:17Z", "hours": 22.0, "multiplier": 19.39, "payout": 418, "blessing": "neutral", "text": "BOOKSOLE is an interactive platform based on the idea of the retro game-console for Choose your own adventure books like the ones from goosebumps which are my favorite now you can play these books directly in your browser. The idea behind the application was to allow the users to feel that they were inserting a cartridge into the old game console, not just opening some document reader. The whole project is done using only one HTML-file and comprises such features as a library, ability to import TXT- and EPUB-formatted books, parser of branch stories, save slots, achievements, journal, searching and many more. The main difficulties in the process of development of BOOKSOLE were to develop an adaptable parser that could parse various gamebooks with different styles, page numbering and endings, and to coordinate all the features of the application. It was difficult to create a proper parser because of different styles of writing the gamebooks and to develop something that would be able to correctly parse all the books. One of the other problems is connected with application state management. Due to the presence of saves, achievements, endings found, journal and statistic information the application had to keep track of all of these at once. A user interface design was yet another crucial aspect of the project. Instead of working on a common reader app, I aimed at creating the whole process to be similar to playing with an old retro game console. This includes such elements as a booting process, cartridge library, achievements display, saving slots system, and several themed menus, all of which have the same aesthetic design. Moreover, the latest version of the software contains a redesign of an introductory animation, which involves changing a mere placeholder to a wider screen space, better pixel art and more sprites. There are a lot of aspects in my project I am particularly proud of, but the most noteworthy is the number of features implemented in just one HTML file. The process of development changed a simple reader program into a complex platform with progression, collectibles, searchable stories, saving system, paths tracking, and library management of several books. Besides, I believe that I achieved success in terms of presentation: whereas many other IF programs are concerned only with their functionality, BOOKSOLE is more playful and nostalgic. For testing the project, it is necessary to firstly download the html file from Github and open the downloaded HTML file ,Watch or skip through the intro and go straight to the boot screen with the help of a special button. After loading the system, you should import an acceptable TXT or EPUB file and open the cartridge with the imported gamebook. You can begin playing and making choices. You can try forming save slots, achieving accomplishments, finding keywords, and exploring story lines. All found endings will be registered in the journal, and all visited places will appear on the map of endings.", "repo": "https://github.com/Anuj981-blip/Booksole", "demo": "https://anuj981-blip.github.io/Booksole/"}]...
|
[{"post_id": 10640, "ts": "202 [{"post_id": 10640, "ts": "2026-06-17T14:30:37Z", "hours": 4.1536, "text": "Introduction Cutscene Redesign This build focused exclusively on overhauling the intro cutscene that plays before the BOOKSOLE boot sequence. At the start of development, BOOKSOLE was already a complete self-contained HTML application featuring a retro game-console styled gamebook reader, cartridge library, EPUB/TXT importers, branching-choice reader, save slots, achievements, journal, and search functionality. The only unfinished-looking component was the opening cutscene, which functioned correctly but felt more like a placeholder than a polished introduction.The original cutscene ran on a 480×270 canvas with 3× pixel scaling. Characters were built from simple flat rectangles with very little detail, while backgrounds consisted mostly of solid colors and basic shapes. Rather than patching the existing artwork, the entire rendering system was rebuilt. The canvas size was increased to 640×360 while maintaining the 16:9 aspect ratio, and logical pixel size was increased from 3px to 4px. This provided significantly more room for detail while preserving the chunky pixel-art style.A major part of the redesign was expanding the color palette. The original palette contained around 25 colors, which limited shading options. The new palette contains roughly 60 colors organized by material type, allowing characters, props, and environments to use highlights, shadows, and depth. Every major sprite was rebuilt with proper shading and detail. New assets such as the moon, roof, curtains, chimney, mailbox, and ground elements were added, alongside three new creatures: a ventriloquist dummy, a haunted mask with glowing eyes, and a sinister garden gnome.Because the larger canvas changed the coordinate system substantially, all seven intro scenes were rebuilt from scratch rather than modified. These scenes include the title card, Victor spying on his neighbors, Victor’s laboratory, the package delivery, Max opening the package, the digital vortex sequence, and the final library reveal.A significant amount of work came from visual issues that automated testing could not detect. Screenshot reviews revealed problems such as furniture partially covering characters’ faces, fan letters floating unrealistically above a mailbox, an incorrectly proportioned hand holding the cartridge, and perspective lines that unintentionally converged behind a character’s head. These issues were corrected through scene-by-scene layout adjustments. The computer monitor in Victor’s lab was also redesigned so its display resembled actual code instead of loading bars.Another major improvement involved the dialogue system. The original dialogue box occupied a large opaque panel that obscured much of the artwork. It was replaced with a slimmer translucent gradient banner that automatically adjusts to the amount of text being displayed, allowing players to see more of each scene while maintaining readability.A final narrative pass strengthened the ending by moving previously hidden monsters into the foreground and adding narration that draws attention to them. Additional in-universe book titles, including The Babysitter’s Basement and Camp Deadlake, were added as flavor text to reinforce the horror-book atmosphere.Testing combined headless runtime simulation with manual screenshot review. Automated testing successfully identified runtime issues, while screenshot reviews were essential for catching visual composition problems. The intro remains a scripted sequence with click-to-advance dialogue and a SKIP INTRO option that jumps directly to the boot sequence. No changes were made to the library, parser, reader, saves, achievements, journal, or search systems; this update was focused entirely on improving the quality and presentation of the seven-scene introduction."}, {"post_id": 9930, "ts": "2026-06-16T13:31:06Z", "hours": 5.4014, "text": "BOOKSOLE v0.5 — It Finally Feels Like a Real Thing For a while, BOOKSOLE could load interactive books, parse them, and let you navigate choices, but it still felt like a tool. Functional, but not something with an identity. This update was about changing that. The biggest addition is the new library system. Instead of dropping straight into a book, you now land in a cartridge-style library where every story lives on a shelf. You can browse covers, check metadata, see your progress, and launch a book like you’re pulling a game off an old console rack. That shift sounds small, but it completely changed how the project feels. The other thing I spent an unreasonable amount of time on was the intro sequence. I could have gone with a simple splash screen, but instead I ended up building a fully animated pixel-art opening scene from scratch. Every character, prop, and background element is drawn procedurally on a canvas. Max, Victor, the mysterious cartridge, the old CRT aesthetic—it’s all there. Was it necessary? Absolutely not. But it was fun, and BOOKSOLE is the kind of project where atmosphere matters. After the intro, the application now boots like a retro console. There’s a fake startup sequence, loading messages, scanlines, pulsing graphics, and all the little details that make it feel like you’re powering on a strange forgotten machine rather than opening a web app. I also added a proper book details screen. Books now have their own dedicated page with cover art, author information, descriptions, tags, and progress statistics. It makes imported stories feel more like collectibles and less like files sitting in a folder. On the gameplay side, save slots finally arrived. This was something I wanted from the beginning because gamebooks are all about experimentation. Sometimes you want to make the reckless choice just to see what happens. Multiple save slots make that possible without destroying a perfectly good run. To support replayability even more, I built an ending discovery system. BOOKSOLE now keeps track of endings you’ve found and visualizes them through a simple ending map. Good endings, bad endings, weird endings—you can slowly fill out your collection as you explore different routes. There’s also a lightweight achievement system now. Nothing too serious, just a way to track things like choices made, pages visited, endings discovered, and total runs. It’s a small thing, but it reinforces the idea that reading these books is closer to playing a game than reading a novel. Another feature I’m surprisingly happy with is the journal. While testing branching stories, I kept finding myself taking notes elsewhere. So now BOOKSOLE has a built-in journal where players can leave thoughts, theories, and route notes while they play. It feels especially useful for mystery stories or books with hidden paths. A few quality-of-life improvements made it in too: Search across story pages Adjustable font sizes Backtracking through visited pages Import/export support for saves and progress Better organization of runs and statistics Looking at the project now, it finally feels like the original vision is starting to come together. The idea was never to build another ebook reader. The idea was to build a fictional retro console dedicated entirely to interactive fiction. A place where opening a book feels like inserting a cartridge. Version 0.5 is probably the first release where that idea actually comes across. Next up, I’m focusing on better EPUB support, smarter metadata extraction, richer achievement systems, and generally making the stories themselves feel more alive inside the platform. But for now, I’m pretty happy with where BOOKSOLE is. It’s weird. It’s overly nostalgic. And it’s finally starting to feel like its own thing."}, {"post_id": 9276, "ts": "2026-06-15T16:03:12Z", "hours": 5.5922, "text": "Added a new Home Screen and an intro story"}, {"post_id": 8809, "ts": "2026-06-14T17:12:37Z", "hours": 4.4892, "text": "Devlog 2 Added a boot screen and implemented a proper parser. I tested it with Give Yourself Goosebumps #15: Don’t Feed the Vampire , and it worked very well. This was a major milestone and greatly increased my confidence in the project. My next goal is to add support for user-created stories so that players can create and share their own interactive adventures. This will make the project more flexible and allow the community to contribute new content."}, {"post_id": 7677, "ts": "2026-06-12T20:31:04Z", "hours": 1.9189, "text": "When Books Become Cartridges A self-hosted, browser-based book console where your CYOA novels are the game. I’ve been thinking about what it would look like if the “Give Yourself Goosebumps” series never stopped being a game. You’d pick up the book, flip to a page, make a choice, flip again — and the whole time it felt less like reading and more like playing. The book was the cartridge. You were the console. That’s the idea behind Booksole. What is it? Booksole is a , single-file HTML app (for now)that turns choose-your-own-adventure books into playable games — complete with save slots, multiple playthroughs, auto-generated achievements, and an endings tracker. You drop in a plain .txt copy of your book. The app parses it, maps out all the branching paths, counts the endings, and boots it up like a game cartridge being slotted into a console. No server. No sign-up. No subscription. Just a file in a browser. The whole thing runs locally. Your books never leave your device. The Inspiration R.L. Stine’s Give Yourself Goosebumps series was my first experience with non-linear storytelling. You weren’t just reading — you were playing. Every “turn to page 52” was a decision with consequences. Some paths led to victory. Most led to something horrible. And the thrill was in finding all of them. Modern games have achievements, save states, completion trackers. Why don’t books? Stardance answers that question. It treats your book like a game ROM. It reads the branching structure, builds a graph of every page and decision, and wraps the whole thing in an interface that feels like a retro console — monospace font, dark terminal aesthetic, endings map, achievement popups. Every book you upload gets its own automatically generated achievement list based on its structure: find your first ending, reach a good ending, discover all the bad endings, finish in three choices or fewer. The game figures out what’s achievable by analyzing the book itself at parse time. v0.1 — What’s in it Cartridge loading — drop a .txt file and the parser scans for page markers and “turn to page X” instructions, rebuilds the branching tree, and launches Multiple save slots — run through the book multiple times simultaneously, each as a separate playthrough Endings map — a dot grid showing every ending in the book, colored by type (good / bad / neutral), filling in as you discover them Auto-generated achievements — built from graph analysis at load time, no hand-crafting needed Achievement toasts — unlock notifications that feel like a game, not a reading app Session stats choices made, pages visited, play throughs started, endings found Persistent saves everything lives in localStorage, survives page reloads the entire app is one .html file, no build step, no dependencies, no installing any software If any one has any suggestions on any features to add or any technologies that could be incorporated to make the development or the user experience easier please do give feedback"}]...
|
Title: Booksole by @anujkishan918 | Stardance
Dev Title: Booksole by @anujkishan918 | Stardance
Devlogs:
When Books Become Cartridges A self-hosted, browser-based book console where your CYOA novels are the game. I’ve been thinking about what it would look like if the “Give Yourself Goosebumps” series never stopped being a game. You’d pick up the book, flip to a page, make a choice, flip again — and the whole time it felt less like reading and more like playing. The book was the cartridge. You were the console. That’s the idea behind Booksole. What is it? Booksole is a , single-file HTML app (for now)that turns choose-your-own-adventure books into playable games — complete with save slots, multiple playthroughs, auto-generated achievements, and an endings tracker. You drop in a plain .txt copy of your book. The app parses it, maps out all the branching paths, counts the endings, and boots it up like a game cartridge being slotted into a console. No server. No sign-up. No subscription. Just a file in a browser. The whole thing runs locally. Your books never leave your device. The Inspiration R.L. Stine’s Give Yourself Goosebumps series was my first experience with non-linear storytelling. You weren’t just reading — you were playing. Every “turn to page 52” was a decision with consequences. Some paths led to victory. Most led to something horrible. And the thrill was in finding all of them. Modern games have achievements, save states, completion trackers. Why don’t books? Stardance answers that question. It treats your book like a game ROM. It reads the branching structure, builds a graph of every page and decision, and wraps the whole thing in an interface that feels like a retro console — monospace font, dark terminal aesthetic, endings map, achievement popups. Every book you upload gets its own automatically generated achievement list based on its structure: find your first ending, reach a good ending, discover all the bad endings, finish in three choices or fewer. The game figures out what’s achievable by analyzing the book itself at parse time. v0.1 — What’s in it Cartridge loading — drop a .txt file and the parser scans for page markers and “turn to page X” instructions, rebuilds the branching tree, and launches Multiple save slots — run through the book multiple times simultaneously, each as a separate playthrough Endings map — a dot grid showing every ending in the book, colored by type (good / bad / neutral), filling in as you discover them Auto-generated achievements — built from graph analysis at load time, no hand-crafting needed Achievement toasts — unlock notifications that feel like a game, not a reading app Session stats choices made, pages visited, play throughs started, endings found Persistent saves everything lives in localStorage, survives page reloads the entire app is one .html file, no build step, no dependencies, no installing any software If any one has any suggestions on any features to add or any technologies that could be incorporated to make the development or the user experience easier please do give feedback
Devlog 2 Added a boot screen and implemented a proper parser. I tested it with Give Yourself Goosebumps #15: Don’t Feed the Vampire , and it worked very well. This was a major milestone and greatly increased my confidence in the project. My next goal is to add support for user-created stories so that players can create and share their own interactive adventures. This will make the project more flexible and allow the community to contribute new content.
Added a new Home Screen and an intro story
BOOKSOLE v0.5 — It Finally Feels Like a Real Thing For a while, BOOKSOLE could load interactive books, parse them, and let you navigate choices, but it still felt like a tool. Functional, but not something with an identity. This update was about changing that. The biggest addition is the new library system. Instead of dropping straight into a book, you now land in a cartridge-style library where every story lives on a shelf. You can browse covers, check metadata, see your progress, and launch a book like you’re pulling a game off an old console rack. That shift sounds small, but it completely changed how the project feels. The other thing I spent an unreasonable amount of time on was the intro sequence. I could have gone with a simple splash screen, but instead I ended up building a fully animated pixel-art opening scene from scratch. Every character, prop, and background element is drawn procedurally on a canvas. Max, Victor, the mysterious cartridge, the old CRT aesthetic—it’s all there. Was it necessary? Absolutely not. But it was fun, and BOOKSOLE is the kind of project where atmosphere matters. After the intro, the application now boots like a retro console. There’s a fake startup sequence, loading messages, scanlines, pulsing graphics, and all the little details that make it feel like you’re powering on a strange forgotten machine rather than opening a web app. I also added a proper book details screen. Books now have their own dedicated page with cover art, author information, descriptions, tags, and progress statistics. It makes imported stories feel more like collectibles and less like files sitting in a folder. On the gameplay side, save slots finally arrived. This was something I wanted from the beginning because gamebooks are all about experimentation. Sometimes you want to make the reckless choice just to see what happens. Multiple save slots make that possible without destroying a perfectly good run. To support replayability even more, I built an ending discovery system. BOOKSOLE now keeps track of endings you’ve found and visualizes them through a simple ending map. Good endings, bad endings, weird endings—you can slowly fill out your collection as you explore different routes. There’s also a lightweight achievement system now. Nothing too serious, just a way to track things like choices made, pages visited, endings discovered, and total runs. It’s a small thing, but it reinforces the idea that reading these books is closer to playing a game than reading a novel. Another feature I’m surprisingly happy with is the journal. While testing branching stories, I kept finding myself taking notes elsewhere. So now BOOKSOLE has a built-in journal where players can leave thoughts, theories, and route notes while they play. It feels especially useful for mystery stories or books with hidden paths. A few quality-of-life improvements made it in too: Search across story pages Adjustable font sizes Backtracking through visited pages Import/export support for saves and progress Better organization of runs and statistics Looking at the project now, it finally feels like the original vision is starting to come together. The idea was never to build another ebook reader. The idea was to build a fictional retro console dedicated entirely to interactive fiction. A place where opening a book feels like inserting a cartridge. Version 0.5 is probably the first release where that idea actually comes across. Next up, I’m focusing on better EPUB support, smarter metadata extraction, richer achievement systems, and generally making the stories themselves feel more alive inside the platform. But for now, I’m pretty happy with where BOOKSOLE is. It’s weird. It’s overly nostalgic. And it’s finally starting to feel like its own thing.
Introduction Cutscene Redesign This build focused exclusively on overhauling the intro cutscene that plays before the BOOKSOLE boot sequence. At the start of development, BOOKSOLE was already a complete self-contained HTML application featuring a retro game-console styled gamebook reader, cartridge library, EPUB/TXT importers, branching-choice reader, save slots, achievements, journal, and search functionality. The only unfinished-looking component was the opening cutscene, which functioned correctly but felt more like a placeholder than a polished introduction.The original cutscene ran on a 480×270 canvas with 3× pixel scaling. Characters were built from simple flat rectangles with very little detail, while backgrounds consisted mostly of solid colors and basic shapes. Rather than patching the existing artwork, the entire rendering system was rebuilt. The canvas size was increased to 640×360 while maintaining the 16:9 aspect ratio, and logical pixel size was increased from 3px to 4px. This provided significantly more room for detail while preserving the chunky pixel-art style.A major part of the redesign was expanding the color palette. The original palette contained around 25 colors, which limited shading options. The new palette contains roughly 60 colors organized by material type, allowing characters, props, and environments to use highlights, shadows, and depth. Every major sprite was rebuilt with proper shading and detail. New assets such as the moon, roof, curtains, chimney, mailbox, and ground elements were added, alongside three new creatures: a ventriloquist dummy, a haunted mask with glowing eyes, and a sinister garden gnome.Because the larger canvas changed the coordinate system substantially, all seven intro scenes were rebuilt from scratch rather than modified. These scenes include the title card, Victor spying on his neighbors, Victor’s laboratory, the package delivery, Max opening the package, the digital vortex sequence, and the final library reveal.A significant amount of work came from visual issues that automated testing could not detect. Screenshot reviews revealed problems such as furniture partially covering characters’ faces, fan letters floating unrealistically above a mailbox, an incorrectly proportioned hand holding the cartridge, and perspective lines that unintentionally converged behind a character’s head. These issues were corrected through scene-by-scene layout adjustments. The computer monitor in Victor’s lab was also redesigned so its display resembled actual code instead of loading bars.Another major improvement involved the dialogue system. The original dialogue box occupied a large opaque panel that obscured much of the artwork. It was replaced with a slimmer translucent gradient banner that automatically adjusts to the amount of text being displayed, allowing players to see more of each scene while maintaining readability.A final narrative pass strengthened the ending by moving previously hidden monsters into the foreground and adding narration that draws attention to them. Additional in-universe book titles, including The Babysitter’s Basement and Camp Deadlake, were added as flavor text to reinforce the horror-book atmosphere.Testing combined headless runtime simulation with manual screenshot review. Automated testing successfully identified runtime issues, while screenshot reviews were essential for catching visual composition problems. The intro remains a scripted sequence with click-to-advance dialogue and a SKIP INTRO option that jumps directly to the boot sequence. No changes were made to the library, parser, reader, saves, achievements, journal, or search systems; this update was focused entirely on improving the quality and presentation of the seven-scene introduction.
Ships:
BOOKSOLE is an interactive platform based on the idea of the retro game-console for Choose your own adventure books like the ones from goosebumps which are my favorite now you can play these books directly in your browser. The idea behind the application was to allow the users to feel that they were inserting a cartridge into the old game console, not just opening some document reader. The whole project is done using only one HTML-file and comprises such features as a library, ability to import TXT- and EPUB-formatted books, parser of branch stories, save slots, achievements, journal, searching and many more. The main difficulties in the process of development of BOOKSOLE were to develop an adaptable parser that could parse various gamebooks with different styles, page numbering and endings, and to coordinate all the features of the application. It was difficult to create a proper parser because of different styles of writing the gamebooks and to develop something that would be able to correctly parse all the books. One of the other problems is connected with application state management. Due to the presence of saves, achievements, endings found, journal and statistic information the application had to keep track of all of these at once. A user interface design was yet another crucial aspect of the project. Instead of working on a common reader app, I aimed at creating the whole process to be similar to playing with an old retro game console. This includes such elements as a booting process, cartridge library, achievements display, saving slots system, and several themed menus, all of which have the same aesthetic design. Moreover, the latest version of the software contains a redesign of an introductory animation, which involves changing a mere placeholder to a wider screen space, better pixel art and more sprites. There are a lot of aspects in my project I am particularly proud of, but the most noteworthy is the number of features implemented in just one HTML file. The process of development changed a simple reader program into a complex platform with progression, collectibles, searchable stories, saving system, paths tracking, and library management of several books. Besides, I believe that I achieved success in terms of presentation: whereas many other IF programs are concerned only with their functionality, BOOKSOLE is more playful and nostalgic. For testing the project, it is necessary to firstly download the html file from Github and open the downloaded HTML file ,Watch or skip through the intro and go straight to the boot screen with the help of a special button. After loading the system, you should import an acceptable TXT or EPUB file and open the cartridge with the imported gamebook. You can begin playing and making choices. You can try forming save slots, achieving accomplishments, finding keywords, and exploring story lines. All found endings will be registered in the journal, and all visited places will appear on the map of endings....
|
1792878773.1638021
|
1793742773.1638021
|
|
16467
|
Brainf*ck IDE by @MarioS271 | Stardance
|
MarioS271
|
1
|
30.0
|
539
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T10:01:36Z", "hours": 30.0, "multiplier": 18.23, "payout": 539, "blessing": "neutral", "text": "Brainf * ck IDE Hello and welcome to my project: an IDE for the brainf * ck programming language! What is it Brainf * ck IDE is a text editor, interpreter and debugger for brainf * ck. It is a powerful tool for developing brain * ck applications (if you wanna do that for some reason) How to use it The editor has two modes, Normal and Debug . Normally, youre in normal mode, but you can switch between normal and debug by using the DEBUG button. The editor is divided into three panels and a menubar. The three panels are: Editor Panel (Top Left) Output Panel (Top Right) Tape Panel (Bottom) Known Issues Maximizing the window and resizing it larger than a specific size causes the contents to dissapear, to reverse just make the window smaller again Resizing the window smaller than the size of a popup causes a heap corruption I would recommend avoiding resizing the window unless absolutely necessary 😅 If you’re interested in the details, feel free to read the rest on the GitHub Repo . :)", "repo": "https://github.com/MarioS271/brainfuck_ide", "demo": "https://github.com/MarioS271/brainfuck_ide/releases/tag/v1.2.1"}]...
|
[{"post_id": 11570, "ts": "202 [{"post_id": 11570, "ts": "2026-06-18T21:09:08Z", "hours": 0.4989, "text": "Whoops Had a small bug in the left arrow key in normal editing mode and popups weren’t resizing and re-positioning correctly, fixed all that :) FINAL RELEASE BABYYYY (hopefully)"}, {"post_id": 11526, "ts": "2026-06-18T20:29:28Z", "hours": 5.8544, "text": "Finally, the debugger is working properly . If you’ve tried a beta version, especially v1.1.0, you might have noticed the debugger being broken and kinda weird. I noticed that too, so I decided to rewrite it! (technically, I rewrote it twice but oh well) Why it needed a rewrite Before, the debugger worked by executing the next step in-place and jumping in loops by moving the cursor to the matching bracket. The problem was: to jump backwards when looping, you had to keep a history which could pretty quickly get filled if you were debugging enough and overall the system was too overengineered for what it was supposed to do. The new architecture The new debugger does almost the same that the live tape preview already does. The live tape preview has one caveat that doesn’t allow it to be directly used for the debugger though: we cannot track loop iterations on the cursor position alone, as we always just compute until the cursor. If we’re before a loop’s end, we’re only computing the first iteration. If we move past the loop, the whole loop gets computed in one move.Instead of the cursor pos, the debugger uses an instruction counter. It basically counts how many brainf * ck instructions it should run, which solves all problems here. Why this works Take this program: ++++++++ [ > ++++ [ > ++ > +++ > +++ > + <<<< - ] > + > + > - >> + [ < ] < - ] >> . > ---.+++++++..+++. >> . < -. < .+++.------.--------. >> +. > ++. Say we wanna run 40 instructions. We first step over the initial ++++++++[>++++[>++>+++>+++>+<<<<- (33 instructions), and then we get to the first ] . When we do, the current cell is non-zero, meaning we jump back to the instruction after the highlighted bracket ( ++++++++[>++++ [ >++>+++>+++>+<<<<- ). The jump is one instruction. Then we run >++>++ and reach 40. Notice how we’re in the second iteration when it ends. If we now move the cursor forward by one, we tell the tape generator “execute 41 instructions”. The same as before happens now (execute first bit, jump back, continue executing - but one instruction more than before this time) but we land in the second iteration again."}, {"post_id": 10201, "ts": "2026-06-16T20:23:44Z", "hours": 4.6389, "text": "Popups are finished! (almost) After a little bit of work, a popup system (which I gotta say is written kinda well compared to all the other code) is in place! Currently, there are: Exit Confirmation Popup Save File Dialog Load File Dialog One last thing is still missing though: The please press a button popup for inputs ( , ). Technical Details The popup system works by using a sub-struct inside of the global state struct ( state.popup ). It contains data such as whether a popup is active, if it accepts text input and handlers for drawing and the confirm button. There’s a base func ( create_popup_base() ) that draws a new basic outline for the popup. After that, only the contents of the popup get refreshed via the custom handler set via setting a function pointer ( state.popup.refresh_handler ). The popup also “captures” input. There’s a seperate if for state.popup.active before the main input validation which processes inputs and then skips the normal input processing."}, {"post_id": 9244, "ts": "2026-06-15T15:03:22Z", "hours": 3.7889, "text": "The debugger works!! After hours of work (mainly debugging and patching up code), it finally works! :DD The power of the debugger You can use the debugger to step forward and backward in your brainf * ck program. While stepping, a live program counter display (labelled “PC”) shows the current program counter index, while the tape in the bottom panel shows the current state of each cell, which cell is currently selected by the data pointer and what the cell contains, in both decimal and ASCII format. The following is just for if you’re interested in the technical details ;) Why I wanted to wipe my drive several times while making this (Problem 1) The first main problem in writing the debugger was stepping backward. You’d think its just “do the instruction in reverse, like when you back-step a - , just do a + instead” but the problem arises when, for example, you read in something using , and the info got overwritten. How do you reverse to something that got destroyed? Well, you don’t. The Solution to the Back-Stepping problem I implemented backward stepping by just recomputing the entire tape from scratch on every backstep. Yes, it’s probably not the best way, but it works. Problem 2 Loops. Once. Again. The jumping around of loops in brainf * ck is not the simplest thing to correctly compute, especially when only partially executing a program. When you land on a [ or a ] , you also need to account for nested loops. You can probably imagine that that can definitely cause some headaches."}, {"post_id": 8947, "ts": "2026-06-14T21:29:52Z", "hours": 3.0733, "text": "Live tape preview is done! While writing or editing code or by literally just moving your cursor, you now get a live preview of the programs “tape” (basically it’s entire data it works with). There is one big problem with the current system however. If you’re interested, feel free to read the following. The big Issue Loops. You see, in brainf * ck, loops work by using [ to jump to the matching ] if the current cell is zero and by using ] to jump to the matching [ if the cell is non-zero. This behaviour is actually not that pleasant to simulate when you’re only executing to a specific point in the program, because the “simulator” (the thing that interprets the bit of brainf * ck code up until your cursor and then generates a tape from that) can’t see the matching closing ] as it comes after the cursor. This means the loop will never really execute. But, when you navigate past the entire loop block, the cells jump to a completely different state (as seen in the video at around 0:08 ). How am I going to solve it then? I’ve decided that I dont want to “solve” it by somehow making loops work in live preview. I’ve decided live preview should only be relatively basic. For serious loop-involved debugging, I wanna introduce a special “Debug Mode”. In this mode, you’ll be able to step through your code, have chars printed into the output panel live AND also have the cursor/program pointer correctly jump around."}, {"post_id": 8714, "ts": "2026-06-14T14:06:09Z", "hours": 0.9819, "text": "Menubar Navigation, Code Running and Output Display works!! 🎉 :) Today, the IDE ran its first program! (and yes, of course, it was a hello world program) What changed? As already mentioned in the last post, I’ve rewritten part of the menubar rendering and also implemented output field rendering. Also, I’ve refactored the run_brainfuck function to be compatible with the UI. Changes in the run_brainfuck(...) function Before, it just stubbornly printed to stdout and read from stdin which of course kinda conflicts with the UI. To solve this, I made it write into an output buffer and accept a function pointer for a function that needs to return an int of which char was read in. The actual reading in will be handled by the pointed to function, which will probably be a “Please press a button” popup. What’s next Looking forward to getting the tape reel and then popups (including file saving/loading, exit confirm and please press a button) to work!"}, {"post_id": 7738, "ts": "2026-06-12T22:24:42Z", "hours": 1.9525, "text": "Great News! The editor is now fully working! I’ve managed to implement everything from syntax highlighting to special keys such as delete, home and end. Nice! What now? I’m also working on getting the menubar to work, which’ll require rewriting a little part of the menubar rendering, as currently, the text entries get printed in one go with the spaces. If I somehow wanna highlight the text only, I gotta draw it all seperately."}, {"post_id": 7365, "ts": "2026-06-12T08:38:10Z", "hours": 1.3817, "text": "Typing works!! not Another Memory Violation :) Gonna debug that one too i guess On the flip side, I got syntax highlighting working!"}, {"post_id": 7314, "ts": "2026-06-12T05:59:01Z", "hours": 0.4856, "text": "This was literally me after opening my code today On a side note: I’ve cleaned up the codebase a little and split stuff into separate files for readability, like moving the editor draw function along with all its helpers into a separate file. I’m about to start working on finishing the editor panel now. :)"}, {"post_id": 7038, "ts": "2026-06-11T19:57:39Z", "hours": 1.5256, "text": "holy productivity spike I got the editor fully working!!! :) After wanting to throw my computer from a comically large height (multiple times), it finally runs: proper arrow-key navigation, a fully working cursor, soft wraps, line numbers, and so on. Vertical scrolling is now fully functional aswell. Even some comfort features like using the Home and End keys work! Fun stuff I found out in the process In the process of getting this to work I also discovered things like the fact that the pdcurses getch() macro implicitly refreshes the stdscr and then… doesnt… flush it 😐 Anything still borked? Some things also still don’t work fully, which kinda bothers me. The main example of this is navigating the cursor vertically into soft-wrapped lines; because of how I wrote the row up/down logic - which is to check in the editor buffer where the next or previous line feed is and then navigate based on that - I can’t just say “oh theres a soft line wrap lets just detect that instead of a \\n ” because the rendering (which does the soft line wrapping) and the I/O loop don’t communicate with each other Sure, I could fix it by adding a shared data structure which contains all line wrappings, but for now, I just wanna get the more important stuff running. Any plans now? Anyways, I’m planning to finish the editor fully by adding writing text (wild concept, i know!) and syntax highlighting next. Stay tuned to find out how much I continue to suffer! :’)"}, {"post_id": 6959, "ts": "2026-06-11T17:48:58Z", "hours": 0.7281, "text": "No more Access Violation! Also, I managed to get the editor drawing going! :) The interesting thing about the access violation fix is: I have no clue what caused it - it just kinda went away?? But oh well, the error is not happening anymore :D Whats working now? I so far mainly implemented colored line numbers and soft wrapping. The implementation for vertical scrolling however isn’t written yet, that’s the plan next. Also, I’ll probably implement cursor navigation with that in one go. I also made some small optimizations to the main loop plus a few fixes and adjustments here and there."}, {"post_id": 6930, "ts": "2026-06-11T16:40:49Z", "hours": 2.2344, "text": "I managed to prove why C is the most memory safe language that exists!! This gets triggered by literally just resizing the window and I have zero idea why :’) On a side note though, I’ve been working on the editor panel a little and it’s slowly coming together. Anyways, looking forward to debugging hell for that one overflow or nullpointer (or whatever the hell this is)!"}, {"post_id": 6777, "ts": "2026-06-11T10:56:05Z", "hours": 1.02, "text": "Panel borders are done and working! :D How annonying was it? The tricky part was getting the layout constants to line up correctly (it gets pretty annoying if you’re trying to find where you accidentally forgot to add one to a value) Got there in the end though. Anything else? Also cleaned up the repo. I also added a git submodule so that PDCurses actually gets cloned too if you pass the --recurse-submodules when cloning. Now the foundation is solid and I can actually start on the editor itself next session. :) I also included a lil preview of how it looks rn :)"}, {"post_id": 6754, "ts": "2026-06-11T09:43:15Z", "hours": 1.4886, "text": "Introducing: Brainf * ck IDE - a TUI-based IDE for writing and running brainf * ck, built in C using PDCurses. The IDE has a panelized layout: code editor on the left, output on the right, and a live tape viewer along the bottom so you can actually watch memory change in real time while writing code! The screenshot is mocked up manually for now, the code for drawing doesn’t exist yet 😅 Whats already started So far I’ve got the interpreter written and a few basic rendering steps working, including the top menubar. How it works The brainf * ck interpreter is actually really simple: you need a loop to iterate through a program buffer, then check for any “special” chars like < , + , … and then just increment/decrement values or do some simple logic depending on which char it is. Next, I’ll try to do the panel borders and some panel setup. Looking forward to how much stuff will break! :)"}]...
|
Title: Brainf*ck IDE by @MarioS271 | Stardance
De Title: Brainf*ck IDE by @MarioS271 | Stardance
Devlogs:
Introducing: Brainf * ck IDE - a TUI-based IDE for writing and running brainf * ck, built in C using PDCurses. The IDE has a panelized layout: code editor on the left, output on the right, and a live tape viewer along the bottom so you can actually watch memory change in real time while writing code! The screenshot is mocked up manually for now, the code for drawing doesn’t exist yet 😅 Whats already started So far I’ve got the interpreter written and a few basic rendering steps working, including the top menubar. How it works The brainf * ck interpreter is actually really simple: you need a loop to iterate through a program buffer, then check for any “special” chars like < , + , … and then just increment/decrement values or do some simple logic depending on which char it is. Next, I’ll try to do the panel borders and some panel setup. Looking forward to how much stuff will break! :)
Panel borders are done and working! :D How annonying was it? The tricky part was getting the layout constants to line up correctly (it gets pretty annoying if you’re trying to find where you accidentally forgot to add one to a value) Got there in the end though. Anything else? Also cleaned up the repo. I also added a git submodule so that PDCurses actually gets cloned too if you pass the --recurse-submodules when cloning. Now the foundation is solid and I can actually start on the editor itself next session. :) I also included a lil preview of how it looks rn :)
I managed to prove why C is the most memory safe language that exists!! This gets triggered by literally just resizing the window and I have zero idea why :’) On a side note though, I’ve been working on the editor panel a little and it’s slowly coming together. Anyways, looking forward to debugging hell for that one overflow or nullpointer (or whatever the hell this is)!
No more Access Violation! Also, I managed to get the editor drawing going! :) The interesting thing about the access violation fix is: I have no clue what caused it - it just kinda went away?? But oh well, the error is not happening anymore :D Whats working now? I so far mainly implemented colored line numbers and soft wrapping. The implementation for vertical scrolling however isn’t written yet, that’s the plan next. Also, I’ll probably implement cursor navigation with that in one go. I also made some small optimizations to the main loop plus a few fixes and adjustments here and there.
holy productivity spike I got the editor fully working!!! :) After wanting to throw my computer from a comically large height (multiple times), it finally runs: proper arrow-key navigation, a fully working cursor, soft wraps, line numbers, and so on. Vertical scrolling is now fully functional aswell. Even some comfort features like using the Home and End keys work! Fun stuff I found out in the process In the process of getting this to work I also discovered things like the fact that the pdcurses getch() macro implicitly refreshes the stdscr and then… doesnt… flush it 😐 Anything still borked? Some things also still don’t work fully, which kinda bothers me. The main example of this is navigating the cursor vertically into soft-wrapped lines; because of how I wrote the row up/down logic - which is to check in the editor buffer where the next or previous line feed is and then navigate based on that - I can’t just say “oh theres a soft line wrap lets just detect that instead of a \n ” because the rendering (which does the soft line wrapping) and the I/O loop don’t communicate with each other Sure, I could fix it by adding a shared data structure which contains all line wrappings, but for now, I just wanna get the more important stuff running. Any plans now? Anyways, I’m planning to finish the editor fully by adding writing text (wild concept, i know!) and syntax highlighting next. Stay tuned to find out how much I continue to suffer! :’)
This was literally me after opening my code today On a side note: I’ve cleaned up the codebase a little and split stuff into separate files for readability, like moving the editor draw function along with all its helpers into a separate file. I’m about to start working on finishing the editor panel now. :)
Typing works!! not Another Memory Violation :) Gonna debug that one too i guess On the flip side, I got syntax highlighting working!
Great News! The editor is now fully working! I’ve managed to implement everything from syntax highlighting to special keys such as delete, home and end. Nice! What now? I’m also working on getting the menubar to work, which’ll require rewriting a little part of the menubar rendering, as currently, the text entries get printed in one go with the spaces. If I somehow wanna highlight the text only, I gotta draw it all seperately.
Menubar Navigation, Code Running and Output Display works!! 🎉 :) Today, the IDE ran its first program! (and yes, of course, it was a hello world program) What changed? As already mentioned in the last post, I’ve rewritten part of the menubar rendering and also implemented output field rendering. Also, I’ve refactored the run_brainfuck function to be compatible with the UI. Changes in the run_brainfuck(...) function Before, it just stubbornly printed to stdout and read from stdin which of course kinda conflicts with the UI. To solve this, I made it write into an output buffer and accept a function pointer for a function that needs to return an int of which char was read in. The actual reading in will be handled by the pointed to function, which will probably be a “Please press a button” popup. What’s next Looking forward to getting the tape reel and then popups (including file saving/loading, exit confirm and please press a button) to work!
Live tape preview is done! While writing or editing code or by literally just moving your cursor, you now get a live preview of the programs “tape” (basically it’s entire data it works with). There is one big problem with the current system however. If you’re interested, feel free to read the following. The big Issue Loops. You see, in brainf * ck, loops work by using [ to jump to the matching ] if the current cell is zero and by using ] to jump to the matching [ if the cell is non-zero. This behaviour is actually not that pleasant to simulate when you’re only executing to a specific point in the program, because the “simulator” (the thing that interprets the bit of brainf * ck code up until your cursor and then generates a tape from that) can’t see the matching closing ] as it comes after the cursor. This means the loop will never really execute. But, when you navigate past the entire loop block, the cells jump to a completely different state (as seen in the video at around 0:08 ). How am I going to solve it then? I’ve decided that I dont want to “solve” it by somehow making loops work in live preview. I’ve decided live preview should only be relatively basic. For serious loop-involved debugging, I wanna introduce a special “Debug Mode”. In this mode, you’ll be able to step through your code, have chars printed into the output panel live AND also have the cursor/program pointer correctly jump around.
The debugger works!! After hours of work (mainly debugging and patching up code), it finally works! :DD The power of the debugger You can use the debugger to step forward and backward in your brainf * ck program. While stepping, a live program counter display (labelled “PC”) shows the current program counter index, while the tape in the bottom panel shows the current state of each cell, which cell is currently selected by the data pointer and what the cell contains, in both decimal and ASCII format. The following is just for if you’re interested in the technical details ;) Why I wanted to wipe my drive several times while making this (Problem 1) The first main problem in writing the debugger was stepping backward. You’d think its just “do the instruction in reverse, like when you back-step a - , just do a + instead” but the problem arises when, for example, you read in something using , and the info got overwritten. How do you reverse to something that got destroyed? Well, you don’t. The Solution to the Back-Stepping problem I implemented backward stepping by just recomputing the entire tape from scratch on every backstep. Yes, it’s probably not the best way, but it works. Problem 2 Loops. Once. Again. The jumping around of loops in brainf * ck is not the simplest thing to correctly compute, especially when only partially executing a program. When you land on a [ or a ] , you also need to account for nested loops. You can probably imagine that that can definitely cause some headaches.
Popups are finished! (almost) After a little bit of work, a popup system (which I gotta say is written kinda well compared to all the other code) is in place! Currently, there are: Exit Confirmation Popup Save File Dialog Load File Dialog One last thing is still missing though: The please press a button popup for inputs ( , ). Technical Details The popup system works by using a sub-struct inside of the global state struct ( state.popup ). It contains data such as whether a popup is active, if it accepts text input and handlers for drawing and the confirm button. There’s a base func ( create_popup_base() ) that draws a new basic outline for the popup. After that, only the contents of the popup get refreshed via the custom handler set via setting a function pointer ( state.popup.refresh_handler ). The popup also “captures” input. There’s a seperate if for state.popup.active before the main input validation which processes inputs and then skips the normal input processing.
Finally, the debugger is working properly . If you’ve tried a beta version, especially v1.1.0, you might have noticed the debugger being broken and kinda weird. I noticed that too, so I decided to rewrite it! (technically, I rewrote it twice but oh well) Why it needed a rewrite Before, the debugger worked by executing the next step in-place and jumping in loops by moving the cursor to the matching bracket. The problem was: to jump backwards when looping, you had to keep a history which could pretty quickly get filled if you were debugging enough and overall the system was too overengineered for what it was supposed to do. The new architecture The new debugger does almost the same that the live tape preview already does. The live tape preview has one caveat that doesn’t allow it to be directly used for the debugger though: we cannot track loop iterations on the cursor position alone, as we always just compute until the cursor. If we’re before a loop’s end, we’re only computing the first iteration. If we move past the loop, the whole loop gets computed in one move.Instead of the cursor pos, the debugger uses an instruction counter. It basically counts how many brainf * ck instructions it should run, which solves all problems here. Why this works Take this program: ++++++++ [ > ++++ [ > ++ > +++ > +++ > + <<<< - ] > + > + > - >> + [ < ] < - ] >> . > ---.+++++++..+++. >> . < -. < .+++.------.--------. >> +. > ++. Say we wanna run 40 instructions. We first step over the initial ++++++++[>++++[>++>+++>+++>+<<<<- (33 instructions), and then we get to the first ] . When we do, the current cell is non-zero, meaning we jump back to the instruction after the highlighted bracket ( ++++++++[>++++ [ >++>+++>+++>+<<<<- ). The jump is one instruction. Then we run >++>++ and reach 40. Notice how we’re in the second iteration when it ends. If we now move the cursor forward by one, we tell the tape generator “execute 41 instructions”. The same as before happens now (execute first bit, jump back, continue executing - but one instruction more than before this time) but we land in the second iteration again.
Whoops Had a small bug in the left arrow key in normal editing mode and popups weren’t resizing and re-positioning correctly, fixed all that :) FINAL RELEASE BABYYYY (hopefully)
Ships:
Brainf * ck IDE Hello and welcome to my project: an IDE for the brainf * ck programming language! What is it Brainf * ck IDE is a text editor, interpreter and debugger for brainf * ck. It is a powerful tool for developing brain * ck applications (if you wanna do that for some reason) How to use it The editor has two modes, Normal and Debug . Normally, youre in normal mode, but you can switch between normal and debug by using the DEBUG button. The editor is divided into three panels and a menubar. The three panels are: Editor Panel (Top Left) Output Panel (Top Right) Tape Panel (Bottom) Known Issues Maximizing the window and resizing it larger than a specific size causes the contents to dissapear, to reverse just make the window smaller again Resizing the window smaller than the size of a popup causes a heap corruption I would recommend avoiding resizing the window unless absolutely necessary 😅 If you’re interested in the details, feel free to read the rest on the GitHub Repo . :)...
|
1793112637.8730183
|
1793199037.8730183
|
|
16472
|
DuckyPaste by @ZiggyZonko | Stardance
|
ZiggyZonko
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T04:34:16Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple clipboard tool that is backed up by a .json file to prevent loss of entries. The app features a pinning, searching and deleting system to not only store pasted content, but manage them. I created this to categorise and sort my pasted content rather than the usual windows / linux clipboard ( which I actually didn’t know existed prior 😿 ). The sorting by topic is coming in a future update…. The Qol improvements I created: Pinning of entries to help hold on to important content. Deletion of entries, I’m unsure if there is a simple way to delete clipboard entries within the built-in clipboards. Easy to find (as I had no idea about Windows+V). All backed up in a stored .json file in the /db folder, meaning you can easily sort through that if data the application stops. Additionally, the searching of entries helps be organised with your entries, locating important content quickly.", "repo": "https://github.com/ZiggyZonko/DuckyPaste", "demo": "https://github.com/ZiggyZonko/DuckyPaste/releases/tag/1.0"}]...
|
[{"post_id": 8642, "ts": "2026 [{"post_id": 8642, "ts": "2026-06-14T11:22:05Z", "hours": 0.5542, "text": "Implemented a tray icon with a show and quit button, so it runs in the background and picks up on your clipboard when it’s merely running as a task. I also fixed the pinning button, so when pinned, the entry adds a pin emoji 📌 and places it at the top of the list. Release 1.0 is being shipped soon…."}, {"post_id": 8019, "ts": "2026-06-13T11:45:29Z", "hours": 0.555, "text": "Added a working delete button and fixed a few bugs associated with the search bar and the history array, soon to be finalised"}, {"post_id": 7452, "ts": "2026-06-12T12:46:53Z", "hours": 1.0428, "text": "Created a json saving and loading system so you can close down the application and still have the clipboard saved. Added a search bar and pinning button, search bar functionality is added while pinning is not. More to come!"}, {"post_id": 6773, "ts": "2026-06-11T10:50:23Z", "hours": 1.0197, "text": "I created the basis of the clipboard, overiding duplicates, adding a nice aesthetic and consolidating the foundation of DuckyPaste."}]...
|
Title: DuckyPaste by @ZiggyZonko | Stardance
Devl Title: DuckyPaste by @ZiggyZonko | Stardance
Devlogs:
I created the basis of the clipboard, overiding duplicates, adding a nice aesthetic and consolidating the foundation of DuckyPaste.
Created a json saving and loading system so you can close down the application and still have the clipboard saved. Added a search bar and pinning button, search bar functionality is added while pinning is not. More to come!
Added a working delete button and fixed a few bugs associated with the search bar and the history array, soon to be finalised
Implemented a tray icon with a show and quit button, so it runs in the background and picks up on your clipboard when it’s merely running as a task. I also fixed the pinning button, so when pinned, the entry adds a pin emoji 📌 and places it at the top of the list. Release 1.0 is being shipped soon….
Ships:
I made a simple clipboard tool that is backed up by a .json file to prevent loss of entries. The app features a pinning, searching and deleting system to not only store pasted content, but manage them. I created this to categorise and sort my pasted content rather than the usual windows / linux clipboard ( which I actually didn’t know existed prior 😿 ). The sorting by topic is coming in a future update…. The Qol improvements I created: Pinning of entries to help hold on to important content. Deletion of entries, I’m unsure if there is a simple way to delete clipboard entries within the built-in clipboards. Easy to find (as I had no idea about Windows+V). All backed up in a stored .json file in the /db folder, meaning you can easily sort through that if data the application stops. Additionally, the searching of entries helps be organised with your entries, locating important content quickly....
|
1793145350.1880214
|
1793231750.1880214
|
|
16479
|
Sending you a letter by @BayerischKind | Stardance
|
BayerischKind
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T08:23:36Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hand detection was a fun thing to learn, and i would love to create more fun projects using mediapipe.", "repo": "https://github.com/jashbrook123/ascii-webcam", "demo": "https://github.com/jashbrook123/finished-ascii-cam"}]...
|
[{"post_id": 12414, "ts": "202 [{"post_id": 12414, "ts": "2026-06-20T08:09:29Z", "hours": 0.6797, "text": "Finished some edge cases for crashes and made slightly more efficient. Will now also output as ascii webcam (using OBS cam) so can be used on zoom meetings and such."}, {"post_id": 7123, "ts": "2026-06-11T22:05:33Z", "hours": 1.0197, "text": "Hand detection, rotate to turn up/down resolution and then close a fist to swap rendering."}]...
|
Title: Sending you a letter by @BayerischKind | St Title: Sending you a letter by @BayerischKind | Stardance
Devlogs:
Hand detection, rotate to turn up/down resolution and then close a fist to swap rendering.
Finished some edge cases for crashes and made slightly more efficient. Will now also output as ascii webcam (using OBS cam) so can be used on zoom meetings and such.
Ships:
Hand detection was a fun thing to learn, and i would love to create more fun projects using mediapipe....
|
1793112897.3612163
|
1793199297.3612163
|