|
29192
|
my APOD site by @stashm10 | Stardance
|
stashm10
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T06:13:36Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Built NASA-Pulse, a site that fetches NASA’s Astronomy Picture of the Day and displays the title, image/video, and explanation, updated daily. Used Vite + vanilla JS, deployed via GitHub Actions to GitHub Pages. The trickiest part was debugging a “stuck loading” bug that turned out not to be my code at all. NASA’s own API servers were timing out. Confirmed it by hitting the raw API URL directly and seeing the same timeout. Fixed it by adding a 15s timeout with one automatic retry so the site fails faster and recovers on its own more often instead of hanging. Proudest of getting the full pipeline working end to end local dev, GitHub Secrets for the API key, and auto-deploy on every push since this was my first time setting up real CI/CD instead of just running things locally. To test it: just visit the live link, it fetches today’s picture automatically. Occasionally NASA’s API itself is slow (their servers, not the site), so a refresh usually fixes it if it takes a moment.", "repo": "https://github.com/Stashm10/NASA-Pulse", "demo": "https://stashm10.github.io/NASA-Pulse/"}]...
|
[{"post_id": 19807, "ts": "202 [{"post_id": 19807, "ts": "2026-07-01T06:11:02Z", "hours": 1.2664, "text": "Devlog #1: Building NASA-Pulse What I built A little site that pulls NASA’s Astronomy Picture of the Day and shows it with the title, image (or video), and explanation. Nothing crazy complicated on paper, but it ended up teaching me a lot more than I expected going in. Live here: https://stashm10.github.io/NASA-Pulse/ This was my first time actually setting up a full pipeline from scratch –> Vite for the build, GitHub for version control, GitHub Actions for CI/CD, and GitHub Pages for hosting. I’d used git before but never wired together a real automated deploy flow, so that part alone was a good learning curve. Currently, this website is a little slow in terms of loading speed. After deploying, the site would sometimes work fine and sometimes just hang on “Loading…” for a minute before failing. Turns out NASA’s own API servers were timing out, not a bug in my code. Confirmed it by hitting the raw API URL directly and getting a server timeout error. Ended up adding a timeout + automatic retry so the site fails faster and recovers on its own more often instead of just hanging. What I’d do differently Honestly, not much. Going step by step through GitHub setup -> local scaffolding -> coding -> deployment in that order made debugging way easier than if I’d tried to do everything at once. Testing locally before pushing saved me from pushing broken code multiple times. What’s next A few ideas I want to come back to: Add a date picker so I can browse past APOD entries, not just today’s Handle the “already have a token but rate-limited” case more gracefully, maybe cache the day’s response so repeated visits don’t hit the API again Clean up mobile styling a bit more — the zigzag decorative strips are hidden below 600px right now, but I want to double check the rest of the layout holds up on smaller screens Maybe swap in a search-by-date feature or a “random APOD” button for fun Takeaways This was a good first real end-to-end project AND not just “write some code” but actually shipping something live, dealing with a flaky third-party API, and setting up a deploy pipeline that runs itself going forward. Small project, but it covered a surprising amount of ground."}]...
|
Title: my APOD site by @stashm10 | Stardance
Devl Title: my APOD site by @stashm10 | Stardance
Devlogs:
Devlog #1: Building NASA-Pulse What I built A little site that pulls NASA’s Astronomy Picture of the Day and shows it with the title, image (or video), and explanation. Nothing crazy complicated on paper, but it ended up teaching me a lot more than I expected going in. Live here: https://stashm10.github.io/NASA-Pulse/ This was my first time actually setting up a full pipeline from scratch –> Vite for the build, GitHub for version control, GitHub Actions for CI/CD, and GitHub Pages for hosting. I’d used git before but never wired together a real automated deploy flow, so that part alone was a good learning curve. Currently, this website is a little slow in terms of loading speed. After deploying, the site would sometimes work fine and sometimes just hang on “Loading…” for a minute before failing. Turns out NASA’s own API servers were timing out, not a bug in my code. Confirmed it by hitting the raw API URL directly and getting a server timeout error. Ended up adding a timeout + automatic retry so the site fails faster and recovers on its own more often instead of just hanging. What I’d do differently Honestly, not much. Going step by step through GitHub setup -> local scaffolding -> coding -> deployment in that order made debugging way easier than if I’d tried to do everything at once. Testing locally before pushing saved me from pushing broken code multiple times. What’s next A few ideas I want to come back to: Add a date picker so I can browse past APOD entries, not just today’s Handle the “already have a token but rate-limited” case more gracefully, maybe cache the day’s response so repeated visits don’t hit the API again Clean up mobile styling a bit more — the zigzag decorative strips are hidden below 600px right now, but I want to double check the rest of the layout holds up on smaller screens Maybe swap in a search-by-date feature or a “random APOD” button for fun Takeaways This was a good first real end-to-end project AND not just “write some code” but actually shipping something live, dealing with a flaky third-party API, and setting up a deploy pipeline that runs itself going forward. Small project, but it covered a surprising amount of ground.
Ships:
Built NASA-Pulse, a site that fetches NASA’s Astronomy Picture of the Day and displays the title, image/video, and explanation, updated daily. Used Vite + vanilla JS, deployed via GitHub Actions to GitHub Pages. The trickiest part was debugging a “stuck loading” bug that turned out not to be my code at all. NASA’s own API servers were timing out. Confirmed it by hitting the raw API URL directly and seeing the same timeout. Fixed it by adding a 15s timeout with one automatic retry so the site fails faster and recovers on its own more often instead of hanging. Proudest of getting the full pipeline working end to end local dev, GitHub Secrets for the API key, and auto-deploy on every push since this was my first time setting up real CI/CD instead of just running things locally. To test it: just visit the live link, it fetches today’s picture automatically. Occasionally NASA’s API itself is slow (their servers, not the site), so a refresh usually fixes it if it takes a moment....
|
1793440530.630726
|
1793526930.630726
|
|
38135
|
Fantasy Championship by @iamsrijitbanerjee | Stard Fantasy Championship by @iamsrijitbanerjee | Stardance...
|
iamsrijitbanerjee
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T16:26:52Z", "hours": 0.0, "multiplier": 1.48, "payout": 0, "blessing": "neutral", "text": "I built the Sorare World Cup Cyber Terminal, a mobile-responsive tournament dashboard powered by HTML5, CSS3, vanilla JavaScript, and a Supabase cloud backend that automatically tracks a multi-round 5-a-side fantasy football league. The biggest challenge was engineering a dynamic scoring system that adaptively scales point distributions when participant counts shift between 5 and 6 players, alongside building a streak algorithm that calculates consecutive win, podium, and last-place bonuses across uneven matchdays without breaking database sync. I am most proud of the interactive FUT-style manager cards that compute live custom ratings (VIC, POD, FRM, VIS) upon tapping a club row, the post-match press room quote banner, and the seamless phone-friendly admin portal. To test the project, explore the main dashboard to view the final Hall of Champions podium, toggle through the milestone matrices and FUT dossiers, or navigate to /admin.html to broadcast test scores and watch the terminal update live!", "repo": "https://github.com/iamsrijitbanerjee/fantasy-championship", "demo": "https://fantasycontest.netlify.app/"}]...
|
[{"post_id": 38070, "ts": "202 [{"post_id": 38070, "ts": "2026-07-31T08:30:41Z", "hours": 0.0, "text": "Check out the webiste in different aesthetics. I have been working on the website since the start of the world cup, it uses supabase integration and raw html, here are my last few updates that i could log: Fetching data from admin.html(back panel score updating page), supabase correspondence fixed(data storing table provider) along with new FUT manager cards dossier introduction(each player/manager has his own FUT card based on his performances both recent and historical). Flexible number of participants ensured(from strict 3 to any number, currently sitting at 6). Also winners announced from first phase(based on managers’ real 2026 world cup fantasy team performance data)"}, {"post_id": 33007, "ts": "2026-07-22T15:31:27Z", "hours": 0.0, "text": "Building this website was a fun challenge especially when I was dealing with the math logic of the tracking terminal. At first I had all my code for the project in one file, which became incredibly messy. My biggest recent win with the tracking terminal was refactoring the project into separate clean HTML files CSS files and JavaScript files for the website. This made debugging the tracking terminal much easier. I also spent a lot of time completely rewriting the CSS for the website from scratch. I wanted to move from generic layouts and build a clean dashboard for the project that felt personal to my league. The technical hurdle with the tracking was writing the JavaScript to make the Supabase database dynamically adjust the points scale depending on whether 5 or 6 managers submitted scores that week in the tracking terminal. After tweaking the array sorting logic and fixing a few silent database bugs, in the tracking terminal the live sync is finally running perfectly."}]...
|
Title: Fantasy Championship by @iamsrijitbanerjee Title: Fantasy Championship by @iamsrijitbanerjee | Stardance
Devlogs:
Building this website was a fun challenge especially when I was dealing with the math logic of the tracking terminal. At first I had all my code for the project in one file, which became incredibly messy. My biggest recent win with the tracking terminal was refactoring the project into separate clean HTML files CSS files and JavaScript files for the website. This made debugging the tracking terminal much easier. I also spent a lot of time completely rewriting the CSS for the website from scratch. I wanted to move from generic layouts and build a clean dashboard for the project that felt personal to my league. The technical hurdle with the tracking was writing the JavaScript to make the Supabase database dynamically adjust the points scale depending on whether 5 or 6 managers submitted scores that week in the tracking terminal. After tweaking the array sorting logic and fixing a few silent database bugs, in the tracking terminal the live sync is finally running perfectly.
Check out the webiste in different aesthetics. I have been working on the website since the start of the world cup, it uses supabase integration and raw html, here are my last few updates that i could log: Fetching data from admin.html(back panel score updating page), supabase correspondence fixed(data storing table provider) along with new FUT manager cards dossier introduction(each player/manager has his own FUT card based on his performances both recent and historical). Flexible number of participants ensured(from strict 3 to any number, currently sitting at 6). Also winners announced from first phase(based on managers’ real 2026 world cup fantasy team performance data)
Ships:
I built the Sorare World Cup Cyber Terminal, a mobile-responsive tournament dashboard powered by HTML5, CSS3, vanilla JavaScript, and a Supabase cloud backend that automatically tracks a multi-round 5-a-side fantasy football league. The biggest challenge was engineering a dynamic scoring system that adaptively scales point distributions when participant counts shift between 5 and 6 players, alongside building a streak algorithm that calculates consecutive win, podium, and last-place bonuses across uneven matchdays without breaking database sync. I am most proud of the interactive FUT-style manager cards that compute live custom ratings (VIC, POD, FRM, VIS) upon tapping a club row, the post-match press room quote banner, and the seamless phone-friendly admin portal. To test the project, explore the main dashboard to view the final Hall of Champions podium, toggle through the milestone matrices and FUT dossiers, or navigate to /admin.html to broadcast test scores and watch the terminal update live!...
|
1793440537.391843
|
1793526937.391843
|
|
1435
|
My first slack bot! by @gopuabhayan5 | Stardance
|
gopuabhayan5
|
1
|
0.39
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-20T14:08:36Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a resilient Slack bot running as a continuous background service—overcoming tough systemd path configuration challenges—which can be tested by simply cloning the repository and setting up your environment tokens.", "repo": "https://github.com/Gopuabhayan/slack_bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?_gl=1*11p1q1c*_gcl_au*MTIxMjkzNjY3MS4xNzg0NDY1MzAyLi0uLS4xNzg0NDY1MzIwLjc4NzczNDQyNi4xNzg0NDY1MzIxLjE3ODQ0NzY3MDY."}]...
|
[{"post_id": 40605, "ts": "202 [{"post_id": 40605, "ts": "2026-08-04T08:17:15Z", "hours": 0.3892, "text": "i add one more command"}, {"post_id": 31339, "ts": "2026-07-19T17:28:11Z", "hours": 0.4956, "text": "i am working on slack bot"}]...
|
Title: My first slack bot! by @gopuabhayan5 | Star Title: My first slack bot! by @gopuabhayan5 | Stardance
Devlogs:
i am working on slack bot
i add one more command
Ships:
I built a resilient Slack bot running as a continuous background service—overcoming tough systemd path configuration challenges—which can be tested by simply cloning the repository and setting up your environment tokens....
|
1793440547.8030226
|
1793526947.8030226
|
|
10226
|
CatOS by @RandomDroid | Stardance
|
RandomDroid
|
1
|
14.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T10:30:06Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "CatOS is a relatively simple website for the WebOS 1 project where you can log in (you don’t need the password or username, it autofills), and access a landing with 2 apps. One app is a map, and the other is the fishcounter. The new feature that the guide didn’t list is the login screen and loading screen (and maybe the fish counter, nothing can predict the fish counter) I struggled a lot with the CSS, especially at the start. For some reason I remembered flexbox being a lot more of a pain than it was, and was averse to using it (when I started using it, things were 100 times easier) Overall, this was my first return to coding after a few months of being swamped with schoolwork. I didn’t do everything perfectly the first time, but every mistake is an chance for improvement.", "repo": "https://github.com/RandomDroid1/CatOS", "demo": "https://randomdroid1.github.io/CatOS/"}]...
|
[{"post_id": 18241, "ts": "202 [{"post_id": 18241, "ts": "2026-06-29T09:55:14Z", "hours": 2.3364, "text": "CatOS Log 4 Added the fish app, you can click the fish to make the number go up. Fixed the CSS on the mock login page, it is now flexbox, it took a solid minute. fixed some funky bugs, there was one where the Map window didn’t want to go over the Fish window, but only when it was first opened Appreciated the Fish 5.Made it so the welcome window also could be moved forward by tapping Overall I am ready to ship pretty soon, I’ve put off a lot of the cool plans I have since this is a fixed payout, and am very excited for WebOS 2. I think I did fairly good here, and just took a while since I was rusty at basically everything (and should move a lot faster on WebOS 2 since I have a much clearer idea of where I want to go, and what I want to do) (I am adding a fun value to my website that activates random events) I will also fix the really niche bug where if you widen the website, stick a window really far out, and then narrow it back down, the window gets stuck. It’s not very important it just annoys me."}, {"post_id": 17077, "ts": "2026-06-27T18:45:39Z", "hours": 2.51, "text": "CatOS Log 3 Added a new app! It’s a little map of everywhere I’ve made a sale on my etsy shop, yay. Added and made it fairly easy to add more window icons onto the top bar, where they get a little highlight if the window is open I spent a lot of time with the css, but like I did it properly this time with flexbox so it shouldn’t be a problem in the future I have very little left to do, I just need to fix the css on the start screen, and add one more app"}, {"post_id": 16417, "ts": "2026-06-26T18:24:37Z", "hours": 5.0311, "text": "CatOS Devlog 2 Added a tooltip on the login page that tells you that you don’t need the username & password, and if you just start typing it will autofill Added main landing page once you login Added a background image to the landing page (I forgot about the background-image property so it took me a second, I got it eventually) Added a welcome window (and did the css better than in the login screen, it still took a lot of finagling though) Made the welcome window not able to be dragged off screen and not highlight text when you dragged it Added the top bar and all that (I spent a while messing with how exactly it looks but I like it now)"}, {"post_id": 10291, "ts": "2026-06-16T22:35:57Z", "hours": 4.1731, "text": "CatOS devlog 1 Hello! CatOS is a WebOS that will be used for a puzzle game I am going to have my friends do. For the sake of this I will have everything be essentially auto-done and more of a narrative deal. Most of the time spent here was spent on the login page (I made it that no matter what you type in it types the correct password and username), and I am ready to move onto the landing after. I lowkey forgot everything I learned about HTML and CSS, but am remembering it now. I spent a lot of time going back-and-forth on what to do and how to do it since I did not go in with a plan (a dastardly error) CSS also genuinely hurt me because I spent a long time making everything look good on different screen sizes, I discovered some new tech (clamps and CQH & CQW) that will help me do stuff a lot faster in the future. (I normally spam flexbox but it wouldn’t work for exactly what I want here). Unfortunately all the time I spent on this can’t be demo’ed in the screenshot, I promise 4 hours wasn’t just for this I intentionally tried to make the login screen look fairly old, though whether that just made it ugly is up for debate lol."}]...
|
Title: CatOS by @RandomDroid | Stardance
Devlogs: Title: CatOS by @RandomDroid | Stardance
Devlogs:
CatOS devlog 1 Hello! CatOS is a WebOS that will be used for a puzzle game I am going to have my friends do. For the sake of this I will have everything be essentially auto-done and more of a narrative deal. Most of the time spent here was spent on the login page (I made it that no matter what you type in it types the correct password and username), and I am ready to move onto the landing after. I lowkey forgot everything I learned about HTML and CSS, but am remembering it now. I spent a lot of time going back-and-forth on what to do and how to do it since I did not go in with a plan (a dastardly error) CSS also genuinely hurt me because I spent a long time making everything look good on different screen sizes, I discovered some new tech (clamps and CQH & CQW) that will help me do stuff a lot faster in the future. (I normally spam flexbox but it wouldn’t work for exactly what I want here). Unfortunately all the time I spent on this can’t be demo’ed in the screenshot, I promise 4 hours wasn’t just for this I intentionally tried to make the login screen look fairly old, though whether that just made it ugly is up for debate lol.
CatOS Devlog 2 Added a tooltip on the login page that tells you that you don’t need the username & password, and if you just start typing it will autofill Added main landing page once you login Added a background image to the landing page (I forgot about the background-image property so it took me a second, I got it eventually) Added a welcome window (and did the css better than in the login screen, it still took a lot of finagling though) Made the welcome window not able to be dragged off screen and not highlight text when you dragged it Added the top bar and all that (I spent a while messing with how exactly it looks but I like it now)
CatOS Log 3 Added a new app! It’s a little map of everywhere I’ve made a sale on my etsy shop, yay. Added and made it fairly easy to add more window icons onto the top bar, where they get a little highlight if the window is open I spent a lot of time with the css, but like I did it properly this time with flexbox so it shouldn’t be a problem in the future I have very little left to do, I just need to fix the css on the start screen, and add one more app
CatOS Log 4 Added the fish app, you can click the fish to make the number go up. Fixed the CSS on the mock login page, it is now flexbox, it took a solid minute. fixed some funky bugs, there was one where the Map window didn’t want to go over the Fish window, but only when it was first opened Appreciated the Fish 5.Made it so the welcome window also could be moved forward by tapping Overall I am ready to ship pretty soon, I’ve put off a lot of the cool plans I have since this is a fixed payout, and am very excited for WebOS 2. I think I did fairly good here, and just took a while since I was rusty at basically everything (and should move a lot faster on WebOS 2 since I have a much clearer idea of where I want to go, and what I want to do) (I am adding a fun value to my website that activates random events) I will also fix the really niche bug where if you widen the website, stick a window really far out, and then narrow it back down, the window gets stuck. It’s not very important it just annoys me.
Ships:
CatOS is a relatively simple website for the WebOS 1 project where you can log in (you don’t need the password or username, it autofills), and access a landing with 2 apps. One app is a map, and the other is the fishcounter. The new feature that the guide didn’t list is the login screen and loading screen (and maybe the fish counter, nothing can predict the fish counter) I struggled a lot with the CSS, especially at the start. For some reason I remembered flexbox being a lot more of a pain than it was, and was averse to using it (when I started using it, things were 100 times easier) Overall, this was my first return to coding after a few months of being swamped with schoolwork. I didn’t do everything perfectly the first time, but every mistake is an chance for improvement....
|
1793440551.8005657
|
1793526951.8005657
|
|
31338
|
Spotify player by @MegaBlackMB | Stardance
|
MegaBlackMB
|
1
|
2.14
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T14:41:20Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I am making a Spotifycontroler with NFC in a Retrofuture look.", "repo": "https://github.com/MegaBlackMB/Spotify-player", "demo": ""}]...
|
[{"post_id": 24183, "ts": "202 [{"post_id": 24183, "ts": "2026-07-07T16:12:33Z", "hours": 1.1364, "text": "I designet the faceplate. made the trays biger to fit the CD’s properly and I startet with the Feet."}, {"post_id": 23699, "ts": "2026-07-06T20:11:56Z", "hours": 1.05, "text": "I worked on finishing the drawers. In the proces I removed A LOT of Magnets. 36 Magnets for 8 drawers are clearly to mutch :) I also changet the Diskholder. Insted of 2-4 Magnets on the disk its only one now."}, {"post_id": 23643, "ts": "2026-07-06T18:39:14Z", "hours": 0.3264, "text": "I engeniert and designet the Disktray wher the disks for the player are storet. The first idea was to make it swing open like a twistet Staircase, but then it would only fit 4 Disks and I cant put it in a small shelf. The new Design has 8 disks an a traysystem where the disks slide out of the front. I only logt 19 minutes because I cant figure out how to start a working screenrecording."}]...
|
Title: Spotify player by @MegaBlackMB | Stardance
Title: Spotify player by @MegaBlackMB | Stardance
Devlogs:
I engeniert and designet the Disktray wher the disks for the player are storet. The first idea was to make it swing open like a twistet Staircase, but then it would only fit 4 Disks and I cant put it in a small shelf. The new Design has 8 disks an a traysystem where the disks slide out of the front. I only logt 19 minutes because I cant figure out how to start a working screenrecording.
I worked on finishing the drawers. In the proces I removed A LOT of Magnets. 36 Magnets for 8 drawers are clearly to mutch :) I also changet the Diskholder. Insted of 2-4 Magnets on the disk its only one now.
I designet the faceplate. made the trays biger to fit the CD’s properly and I startet with the Feet.
Ships:
I am making a Spotifycontroler with NFC in a Retrofuture look....
|
1793440554.7828002
|
1793526954.7828002
|
|
25094
|
CareerSwipe by @callooloo | Stardance
|
callooloo
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T05:39:34Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Tinder but for your career. The analytics part was a challenge but I got it done", "repo": "https://github.com/calloolooh-ai/careerswipe", "demo": "https://careerswipe-black.vercel.app"}]...
|
[{"post_id": 24078, "ts": "202 [{"post_id": 24078, "ts": "2026-07-07T12:18:17Z", "hours": 3.3481, "text": "Finished the backend, frontend, and polishes"}]...
|
Title: CareerSwipe by @callooloo | Stardance
Devl Title: CareerSwipe by @callooloo | Stardance
Devlogs:
Finished the backend, frontend, and polishes
Ships:
Tinder but for your career. The analytics part was a challenge but I got it done...
|
1793440565.6470034
|
1793526965.6470034
|
|
35855
|
Yolo_baseball_track by @Okaj_Chang | Stardance
|
Okaj_Chang
|
1
|
16.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T05:43:57Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This project specializes in detecting baseballs in high-resolution and high-speed pitching videos, recognizing pitcher arm-swing release points, tracking motion trajectories, and reconstructing 3D WebGL spatial visualizations. Because a baseball occupies only a tiny pixel region (often just a dozen pixels) and moves at extremely high speeds, traditional object detectors suffer from missed detections, background interference, or fragmented trajectories.", "repo": "https://github.com/enkaichang/Yolo_baseball", "demo": "https://enkaichang.github.io/Yolo_baseball/"}]...
|
[{"post_id": 32795, "ts": "202 [{"post_id": 32795, "ts": "2026-07-22T05:39:03Z", "hours": 8.2236, "text": "Gemini help me build a data visualization website. It can import .csv tracking data and show the trajectory of the baseball analyed by yolo model. Users can upload their own baseball pitching video on the website. They can also download the result video which includes the small trajectory window in the bottom-right."}, {"post_id": 31237, "ts": "2026-07-19T14:15:32Z", "hours": 0.7353, "text": "I optimize the program. I upload the source code to Github."}, {"post_id": 31031, "ts": "2026-07-19T02:53:56Z", "hours": 5.7283, "text": "To overcome the challenge of detecting small baseballs against complex backgrounds (pitcher’s mound, crowd, grass), run.py implements the following pre-processing techniques: Dynamic Image Sharpening: Calculates difference maps via Gaussian Blur and addWeighted to sharpen localized high-frequency edge features of fast-moving baseballs. MOG2 Background Subtraction & Sky ROI Mask (Optional): Utilizes BackgroundSubtractorMOG2 to extract dynamic foregrounds and sky masks for background noise suppression. Dynamic Local ROI Cropping: When a ball is detected in the previous frame, the subsequent frame dynamically crops a 500×500 pixel window centered at the ball’s coordinates for YOLO inference. If the trajectory is lost for over 30 consecutive frames, it resets to default initial bounds, dramatically accelerating inference speed and eliminating background false positives."}, {"post_id": 29357, "ts": "2026-07-16T07:56:11Z", "hours": 0.6342, "text": "把原先使用黑邊填滿邊界的方式改成直接裁切,試圖解決棒球占整體比例太低的問題"}, {"post_id": 29292, "ts": "2026-07-16T03:20:27Z", "hours": 0.9011, "text": "試圖修復棒球追蹤與背景混淆問題"}]...
|
Title: Yolo_baseball_track by @Okaj_Chang | Starda Title: Yolo_baseball_track by @Okaj_Chang | Stardance
Devlogs:
試圖修復棒球追蹤與背景混淆問題
把原先使用黑邊填滿邊界的方式改成直接裁切,試圖解決棒球占整體比例太低的問題
To overcome the challenge of detecting small baseballs against complex backgrounds (pitcher’s mound, crowd, grass), run.py implements the following pre-processing techniques: Dynamic Image Sharpening: Calculates difference maps via Gaussian Blur and addWeighted to sharpen localized high-frequency edge features of fast-moving baseballs. MOG2 Background Subtraction & Sky ROI Mask (Optional): Utilizes BackgroundSubtractorMOG2 to extract dynamic foregrounds and sky masks for background noise suppression. Dynamic Local ROI Cropping: When a ball is detected in the previous frame, the subsequent frame dynamically crops a 500×500 pixel window centered at the ball’s coordinates for YOLO inference. If the trajectory is lost for over 30 consecutive frames, it resets to default initial bounds, dramatically accelerating inference speed and eliminating background false positives.
I optimize the program. I upload the source code to Github.
Gemini help me build a data visualization website. It can import .csv tracking data and show the trajectory of the baseball analyed by yolo model. Users can upload their own baseball pitching video on the website. They can also download the result video which includes the small trajectory window in the bottom-right.
Ships:
This project specializes in detecting baseballs in high-resolution and high-speed pitching videos, recognizing pitcher arm-swing release points, tracking motion trajectories, and reconstructing 3D WebGL spatial visualizations. Because a baseball occupies only a tiny pixel region (often just a dozen pixels) and moves at extremely high speeds, traditional object detectors suffer from missed detections, background interference, or fragmented trajectories....
|
1793440568.3451154
|
1793526968.3451154
|
|
20643
|
Peek by @Shiladitya | Stardance
|
Shiladitya
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T06:58:51Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Peek Move files between devices through nothing but a browser tab. Peek is a zero-install, no-account file transfer tool built for the messiest setups — library PCs, lab machines, kiosks, a friend’s laptop, a locked-down work computer. If it has a browser, it can send and receive. Open a tab, scan a code, transfer, walk away. Nothing is left behind. Why Peek You know the moment: you need to get a file onto (or off of) a computer that isn’t yours. No USB stick. No login to your cloud drive. No permission to install anything. Emailing it to yourself feels wrong, and that USB port might be disabled anyway. Peek is the answer to “I just need to move this one file, right now, safely.” What it does 📲 Pair in seconds with a QR code One device opens Peek and picks files. The other device scans the QR — that’s the whole handshake. No usernames, no passwords, no setup. 🔒 Encrypted end-to-end Files are encrypted in your browser before they ever leave. The decryption key lives in the link itself (the part after #) and is never sent to any server. Even the people running Peek can’t see your files. ⚡ Direct when possible, relayed when not When both devices can talk directly, your files take the fast lane — peer to peer. When a network blocks that, Peek falls back to a relay that only ever carries scrambled data. Either way it just works. ↔️ Two-way in one session It’s not one-and-done. Once two devices are paired, files flow both directions — send some over, get some back, all in the same room. ⏳ Temporary by design Sessions expire automatically (60 minutes) and either side can end them instantly. Nothing lingers on the shared computer afterward — no history, no leftover files, no trace. 👀 Peek links — share a file with anyone Generate a short-lived link to a single file. Send it over chat, email, anywhere. PDFs and images preview right in the browser; everything else (zips, notebooks, archives, any file type up to 50MB) downloads securely. Optional “burn after viewing” deletes it the moment it’s opened. 📋 Clipboard sync Need to move a chunk of text, a password, a snippet? Sync the clipboard between the two devices without touching a file at all. Built for risky places ┌──────────────────┬────────────────────────────────────────────────────────────┐ │ │ │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No install │ The receiving side is just a web page. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No account │ Nothing to sign up for, nothing to log into. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No trace │ Sessions self-destruct; nothing saved on the host machine. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ Encrypted always │ Your key stays in your browser, never on a server. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ Short-lived │ Everything expires on a timer, or kill it on demand. │ └──────────────────┴────────────────────────────────────────────────────────────┘ The 3-step flow Pick your files on the sending device. Scan the QR on the receiving device. Transfer, then close. Send, receive, end the session. Done. Peek is for the in-between moments — the borrowed computer, the public terminal, the quick handoff — where every other option is too slow, too permanent, or too risky.", "repo": "https://github.com/Bappaditya-kuilya/Peek", "demo": "https://peekapp.vercel.app"}]...
|
[{"post_id": 10477, "ts": "202 [{"post_id": 10477, "ts": "2026-06-17T06:58:12Z", "hours": 12.1914, "text": "Peek Move files between devices through nothing but a browser tab. Peek is a zero-install, no-account file transfer tool built for the messiest setups — library PCs, lab machines, kiosks, a friend’s laptop, a locked-down work computer. If it has a browser, it can send and receive. Open a tab, scan a code, transfer, walk away. Nothing is left behind. Why Peek You know the moment: you need to get a file onto (or off of) a computer that isn’t yours. No USB stick. No login to your cloud drive. No permission to install anything. Emailing it to yourself feels wrong, and that USB port might be disabled anyway. Peek is the answer to “I just need to move this one file, right now, safely.” What it does 📲 Pair in seconds with a QR code One device opens Peek and picks files. The other device scans the QR — that’s the whole handshake. No usernames, no passwords, no setup. 🔒 Encrypted end-to-end Files are encrypted in your browser before they ever leave. The decryption key lives in the link itself (the part after #) and is never sent to any server. Even the people running Peek can’t see your files. ⚡ Direct when possible, relayed when not When both devices can talk directly, your files take the fast lane — peer to peer. When a network blocks that, Peek falls back to a relay that only ever carries scrambled data. Either way it just works. ↔️ Two-way in one session It’s not one-and-done. Once two devices are paired, files flow both directions — send some over, get some back, all in the same room. ⏳ Temporary by design Sessions expire automatically (60 minutes) and either side can end them instantly. Nothing lingers on the shared computer afterward — no history, no leftover files, no trace. 👀 Peek links — share a file with anyone Generate a short-lived link to a single file. Send it over chat, email, anywhere. PDFs and images preview right in the browser; everything else (zips, notebooks, archives, any file type up to 50MB) downloads securely. Optional “burn after viewing” deletes it the moment it’s opened. 📋 Clipboard sync Need to move a chunk of text, a password, a snippet? Sync the clipboard between the two devices without touching a file at all. Built for risky places ┌──────────────────┬────────────────────────────────────────────────────────────┐ │ │ │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No install │ The receiving side is just a web page. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No account │ Nothing to sign up for, nothing to log into. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No trace │ Sessions self-destruct; nothing saved on the host machine. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ Encrypted always │ Your key stays in your browser, never on a server. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ Short-lived │ Everything expires on a timer, or kill it on demand. │ └──────────────────┴────────────────────────────────────────────────────────────┘ The 3-step flow Pick your files on the sending device. Scan the QR on the receiving device. Transfer, then close. Send, receive, end the session. Done. Peek is for the in-between moments — the borrowed computer, the public terminal, the quick handoff — where every other option is too slow, too permanent, or too risky."}]...
|
Title: Peek by @Shiladitya | Stardance
Devlogs:
P Title: Peek by @Shiladitya | Stardance
Devlogs:
Peek Move files between devices through nothing but a browser tab. Peek is a zero-install, no-account file transfer tool built for the messiest setups — library PCs, lab machines, kiosks, a friend’s laptop, a locked-down work computer. If it has a browser, it can send and receive. Open a tab, scan a code, transfer, walk away. Nothing is left behind. Why Peek You know the moment: you need to get a file onto (or off of) a computer that isn’t yours. No USB stick. No login to your cloud drive. No permission to install anything. Emailing it to yourself feels wrong, and that USB port might be disabled anyway. Peek is the answer to “I just need to move this one file, right now, safely.” What it does 📲 Pair in seconds with a QR code One device opens Peek and picks files. The other device scans the QR — that’s the whole handshake. No usernames, no passwords, no setup. 🔒 Encrypted end-to-end Files are encrypted in your browser before they ever leave. The decryption key lives in the link itself (the part after #) and is never sent to any server. Even the people running Peek can’t see your files. ⚡ Direct when possible, relayed when not When both devices can talk directly, your files take the fast lane — peer to peer. When a network blocks that, Peek falls back to a relay that only ever carries scrambled data. Either way it just works. ↔️ Two-way in one session It’s not one-and-done. Once two devices are paired, files flow both directions — send some over, get some back, all in the same room. ⏳ Temporary by design Sessions expire automatically (60 minutes) and either side can end them instantly. Nothing lingers on the shared computer afterward — no history, no leftover files, no trace. 👀 Peek links — share a file with anyone Generate a short-lived link to a single file. Send it over chat, email, anywhere. PDFs and images preview right in the browser; everything else (zips, notebooks, archives, any file type up to 50MB) downloads securely. Optional “burn after viewing” deletes it the moment it’s opened. 📋 Clipboard sync Need to move a chunk of text, a password, a snippet? Sync the clipboard between the two devices without touching a file at all. Built for risky places ┌──────────────────┬────────────────────────────────────────────────────────────┐ │ │ │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No install │ The receiving side is just a web page. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No account │ Nothing to sign up for, nothing to log into. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No trace │ Sessions self-destruct; nothing saved on the host machine. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ Encrypted always │ Your key stays in your browser, never on a server. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ Short-lived │ Everything expires on a timer, or kill it on demand. │ └──────────────────┴────────────────────────────────────────────────────────────┘ The 3-step flow Pick your files on the sending device. Scan the QR on the receiving device. Transfer, then close. Send, receive, end the session. Done. Peek is for the in-between moments — the borrowed computer, the public terminal, the quick handoff — where every other option is too slow, too permanent, or too risky.
Ships:
Peek Move files between devices through nothing but a browser tab. Peek is a zero-install, no-account file transfer tool built for the messiest setups — library PCs, lab machines, kiosks, a friend’s laptop, a locked-down work computer. If it has a browser, it can send and receive. Open a tab, scan a code, transfer, walk away. Nothing is left behind. Why Peek You know the moment: you need to get a file onto (or off of) a computer that isn’t yours. No USB stick. No login to your cloud drive. No permission to install anything. Emailing it to yourself feels wrong, and that USB port might be disabled anyway. Peek is the answer to “I just need to move this one file, right now, safely.” What it does 📲 Pair in seconds with a QR code One device opens Peek and picks files. The other device scans the QR — that’s the whole handshake. No usernames, no passwords, no setup. 🔒 Encrypted end-to-end Files are encrypted in your browser before they ever leave. The decryption key lives in the link itself (the part after #) and is never sent to any server. Even the people running Peek can’t see your files. ⚡ Direct when possible, relayed when not When both devices can talk directly, your files take the fast lane — peer to peer. When a network blocks that, Peek falls back to a relay that only ever carries scrambled data. Either way it just works. ↔️ Two-way in one session It’s not one-and-done. Once two devices are paired, files flow both directions — send some over, get some back, all in the same room. ⏳ Temporary by design Sessions expire automatically (60 minutes) and either side can end them instantly. Nothing lingers on the shared computer afterward — no history, no leftover files, no trace. 👀 Peek links — share a file with anyone Generate a short-lived link to a single file. Send it over chat, email, anywhere. PDFs and images preview right in the browser; everything else (zips, notebooks, archives, any file type up to 50MB) downloads securely. Optional “burn after viewing” deletes it the moment it’s opened. 📋 Clipboard sync Need to move a chunk of text, a password, a snippet? Sync the clipboard between the two devices without touching a file at all. Built for risky places ┌──────────────────┬────────────────────────────────────────────────────────────┐ │ │ │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No install │ The receiving side is just a web page. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No account │ Nothing to sign up for, nothing to log into. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ No trace │ Sessions self-destruct; nothing saved on the host machine. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ Encrypted always │ Your key stays in your browser, never on a server. │ ├──────────────────┼────────────────────────────────────────────────────────────┤ │ Short-lived │ Everything expires on a timer, or kill it on demand. │ └──────────────────┴────────────────────────────────────────────────────────────┘ The 3-step flow Pick your files on the sending device. Scan the QR on the receiving device. Transfer, then close. Send, receive, end the session. Done. Peek is for the in-between moments — the borrowed computer, the public terminal, the quick handoff — where every other option is too slow, too permanent, or too risky....
|
1793440574.164206
|
1793526974.164206
|
|
22565
|
In This Economy!? by @OrangePainting | Stardance
|
OrangePainting
|
1
|
48.0
|
593
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T11:27:44Z", "hours": 48.0, "multiplier": 16.7, "payout": 593, "blessing": "neutral", "text": "I made an incremental clicker game where you experience the harsh results of applying to jobs. Work hard, apply a lot, and complete projects to maximize your chances of landing an offer! This game was created for The Very Serious Juniper Dev Game Jam, which meant I had 7 days to create a game with the theme “spin to win.” It was challenging to bring this all together in 7 or so days, but the community I had in-person and online helped me finish this project. I have had this game playtested a few times to be able to find soooo many bugs, graphical issues, and suggestions. Because of this, I am very proud of what I have made. Please play it on itch.io using the buttons, and feel free to check out the code in Github. This entire game was made using the Godot Game Engine.", "repo": "https://github.com/OrangePainting/in-this-economy", "demo": "https://orangepainting.itch.io/in-this-economy"}]...
|
[{"post_id": 17537, "ts": "202 [{"post_id": 17537, "ts": "2026-06-28T11:22:04Z", "hours": 0.3436, "text": "Final Devlog There was some issues with linking my game, but now everything is set, and I even did some more optimizations. Please play my game on itch.io, and you can see the github with all my code linked as well."}, {"post_id": 17031, "ts": "2026-06-27T17:18:33Z", "hours": 6.6281, "text": "In This Economy!? - Devlog 5 Yay, it’s done. Please play it and provide feedback so that I can make the game better in the future! Itch.io page is finished up Added 2 more tracks Added some more sound effects Added a tutorial at the beginning of the game Fixed some more bugs and graphical issues Game works on mobile, and desktop (mouse and spacebar works) Added achievements to track the player’s progress Added another minigame project, each with their own win and death screens now. Some Final QOL stuff to finish There are some minor graphical issues, but they are mainly unnoticable. I also plan to improve the performance of the game in the backend after this project is shipped :) Thanks!"}, {"post_id": 16124, "ts": "2026-06-26T06:51:54Z", "hours": 20.3653, "text": "In This Economy!? - Devlog 4 I did a ton of more changes again, but mainly it’s just Quality of Life stuff, mainly from my friends playtesting the game for me: Big Changes: 2 More music tracks and 10 more paper sounds added Added a start screen that players can type into Added a new project minigame to balance out the game in general Smaller Changes: The game is more balanced Replaced the Quit button with a Credits button because this game will be played on the web Changed the projects tab to be more understandable"}, {"post_id": 14705, "ts": "2026-06-23T22:06:09Z", "hours": 12.3967, "text": "[PLACEHOLDER] - Devlog 3 I added a bunch of things, because I’m nearing the deadline (only 2 days left :0) Big changes: Added a lot of SFX and Music, mostly done by me but also sourced from online Added more art for projects and the background using Aseprite Added Title Screen with start and quit buttons Added End Screen for when you win the game Made my first project for the projects tab Made more active UI How To Play section is complete Updated the layout entirely QOL stuff: Added settings for Music and SFX in the settings section Added Credits Entire project is organized to make things easier to access Scrolling background in the main menu, along with custom shader and particle animations just for fun Better animations so that things don’t suddenly appear or disappear Still have a lot more things to do, but it should be doable yay."}, {"post_id": 13377, "ts": "2026-06-21T22:19:18Z", "hours": 6.6122, "text": "[PLACEHOLDER] - Devlog 2 Added more functionality: There is now a tab system that players can click through Base upgrades are now available, and are functional Changed a few sprites to make disabled button sprites, and fit the theme more of applying to jobs I plan to add more places to spin, as that’s a key mechanic for this game. I want it to be as accessible too, so a tutorial is also necessary to make at some point."}, {"post_id": 12243, "ts": "2026-06-20T00:12:47Z", "hours": 1.9492, "text": "[PLACEHOLDER] - Devlog 1 Currently don’t have much done, but added some basic spin functionality, along with some pass and fail results. There isn’t much else yet, but I plan to add some upgrades and make the sprites a little better before the 7th day. Don’t have a name yet."}]...
|
Title: In This Economy!? by @OrangePainting | Star Title: In This Economy!? by @OrangePainting | Stardance
Devlogs:
[PLACEHOLDER] - Devlog 1 Currently don’t have much done, but added some basic spin functionality, along with some pass and fail results. There isn’t much else yet, but I plan to add some upgrades and make the sprites a little better before the 7th day. Don’t have a name yet.
[PLACEHOLDER] - Devlog 2 Added more functionality: There is now a tab system that players can click through Base upgrades are now available, and are functional Changed a few sprites to make disabled button sprites, and fit the theme more of applying to jobs I plan to add more places to spin, as that’s a key mechanic for this game. I want it to be as accessible too, so a tutorial is also necessary to make at some point.
[PLACEHOLDER] - Devlog 3 I added a bunch of things, because I’m nearing the deadline (only 2 days left :0) Big changes: Added a lot of SFX and Music, mostly done by me but also sourced from online Added more art for projects and the background using Aseprite Added Title Screen with start and quit buttons Added End Screen for when you win the game Made my first project for the projects tab Made more active UI How To Play section is complete Updated the layout entirely QOL stuff: Added settings for Music and SFX in the settings section Added Credits Entire project is organized to make things easier to access Scrolling background in the main menu, along with custom shader and particle animations just for fun Better animations so that things don’t suddenly appear or disappear Still have a lot more things to do, but it should be doable yay.
In This Economy!? - Devlog 4 I did a ton of more changes again, but mainly it’s just Quality of Life stuff, mainly from my friends playtesting the game for me: Big Changes: 2 More music tracks and 10 more paper sounds added Added a start screen that players can type into Added a new project minigame to balance out the game in general Smaller Changes: The game is more balanced Replaced the Quit button with a Credits button because this game will be played on the web Changed the projects tab to be more understandable
In This Economy!? - Devlog 5 Yay, it’s done. Please play it and provide feedback so that I can make the game better in the future! Itch.io page is finished up Added 2 more tracks Added some more sound effects Added a tutorial at the beginning of the game Fixed some more bugs and graphical issues Game works on mobile, and desktop (mouse and spacebar works) Added achievements to track the player’s progress Added another minigame project, each with their own win and death screens now. Some Final QOL stuff to finish There are some minor graphical issues, but they are mainly unnoticable. I also plan to improve the performance of the game in the backend after this project is shipped :) Thanks!
Final Devlog There was some issues with linking my game, but now everything is set, and I even did some more optimizations. Please play my game on itch.io, and you can see the github with all my code linked as well.
Ships:
I made an incremental clicker game where you experience the harsh results of applying to jobs. Work hard, apply a lot, and complete projects to maximize your chances of landing an offer! This game was created for The Very Serious Juniper Dev Game Jam, which meant I had 7 days to create a game with the theme “spin to win.” It was challenging to bring this all together in 7 or so days, but the community I had in-person and online helped me finish this project. I have had this game playtested a few times to be able to find soooo many bugs, graphical issues, and suggestions. Because of this, I am very proud of what I have made. Please play it on itch.io using the buttons, and feel free to check out the code in Github. This entire game was made using the Godot Game Engine....
|
1793440581.6880486
|
1793526981.6880486
|
|
31985
|
TerminalFolio #2 by @dxnkey | Stardance
|
dxnkey
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T08:46:11Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built an aviation-themed portfolio that turns my projects, skills, experience, and contact page into an airport terminal. I started by copying a Framer template one to one, which was lowkey so annoying but so worth it! Each section works like a gate, while my projects appear as flights in a live departure board. I really want to renovate the UI again and maybe ship this project one more time.", "repo": "https://github.com/guptaronav/terminalfolio", "demo": "https://guptaronav.github.io/terminalfolio"}]...
|
[{"post_id": 24069, "ts": "202 [{"post_id": 24069, "ts": "2026-07-07T11:53:52Z", "hours": 0.3358, "text": "My portfolio is an airport now! Plain HTML, CSS, and one JS file — no framework, no build step, nothing to npm install. I love the look and feel of this site because it doesn’t feel like too much but I also don’t think that it’s too generic. I’m really happy with how this has turned out! Cleared for takeoff at guptaronav.github.io/terminalfolio!!"}]...
|
Title: TerminalFolio #2 by @dxnkey | Stardance
De Title: TerminalFolio #2 by @dxnkey | Stardance
Devlogs:
My portfolio is an airport now! Plain HTML, CSS, and one JS file — no framework, no build step, nothing to npm install. I love the look and feel of this site because it doesn’t feel like too much but I also don’t think that it’s too generic. I’m really happy with how this has turned out! Cleared for takeoff at guptaronav.github.io/terminalfolio!!
Ships:
I built an aviation-themed portfolio that turns my projects, skills, experience, and contact page into an airport terminal. I started by copying a Framer template one to one, which was lowkey so annoying but so worth it! Each section works like a gate, while my projects appear as flights in a live departure board. I really want to renovate the UI again and maybe ship this project one more time....
|
1793440587.7465699
|
1793526987.7465699
|
|
29599
|
Holy Moley by @GeorgeSun | Stardance
|
GeorgeSun
|
4
|
99.0
|
1613
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-30T22:24:01Z", "hours": 20.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Me and my friends made a game about a little mole that fights demons! There are 14 different levels, an inventory system, main menu, health system, map/quick travel system, shop system, and four different items. There are also two bossfights that multiple different attacks and are quite challenging. The most challenging part about this was making the enemy pathfinding as there were many bugs and glitches during the creation process. I am most proud of how polished the game is because the game feels very reactive and fun to play. There has been many changes since the last ship which I feel make the game a lot more complete such as the mole village where there are NPC moles for you to talk to. The game has side quests for you to accomplish now which give you exclusive unlocks that help you along your adventure. Since the first few ships, I have listened to a lot of the feedback given. I have added mobile controls, a new settings menu, a more complete progression system with a more informative tutorial. There is now a level editor and level browser so that now you can create and play other people’s levels! Click try project below to play on web or on PC!", "repo": "https://github.com/Geofoods/Holy-Moly", "demo": "https://bryanjietang-boop.itch.io/holy-moly"}, {"ship_num": 2, "ts": "2026-10-07T23:43:28Z", "hours": 65.0, "multiplier": 19.59, "payout": 1513, "blessing": "neutral", "text": "Me and my friends made a game about a little mole that fights demons! There are 14 different levels, an inventory system, main menu, health system, map/quick travel system, shop system, and four different items. There are also two bossfights that multiple different attacks and are quite challenging. The most challenging part about this was making the enemy pathfinding as there were many bugs and glitches during the creation process. I am most proud of how polished the game is because the game feels very reactive and fun to play. There has been many changes since the last ship which I feel make the game a lot more complete such as the mole village where there are NPC moles for you to talk to. The game has side quests for you to accomplish now which give you exclusive unlocks that help you along your adventure. Click try project below to play on web or on PC!", "repo": "https://github.com/Geofoods/Holy-Moly", "demo": "https://bryanjietang-boop.itch.io/holy-moly"}, {"ship_num": 3, "ts": "2026-09-03T22:02:25Z", "hours": 2.0, "multiplier": 12.89, "payout": 24, "blessing": "neutral", "text": "Me and my friends made a game about a little mole that fights demons! There are nine different levels, inventory system, main menu, health system, and many different intricate systems such as the parry system! The most challenging part about this was making the enemy pathfinding as there were many bugs and glitches during the creation process. I am most proud of how polished the game is because the game feels very reactive and fun to play. I am also proud of the fact that this is now available on mobile and can be played on Andriod and Iphone! (although not available on the app store. You can play my project with the demo link! The Android version is downloadable, you just have to give it permissions. IOS needs an apple developer license however so it will take a while.", "repo": "https://github.com/Geofoods/Holy-Moly", "demo": "https://bryanjietang-boop.itch.io/holy-moly"}, {"ship_num": 4, "ts": "2026-07-10T14:24:37Z", "hours": 12.0, "multiplier": 12.93, "payout": 76, "blessing": "neutral", "text": "Me and my friends made a game about a little mole that fights demons! There are nine different levels, inventory system, main menu, health system, and many different intricate systems such as the parry system! The most challenging part about this was making the enemy pathfinding as there were many bugs and glitches during the creation process. I am most proud of how polished the game is because the game feels very reactive and fun to play. You can play my project with the demo link!", "repo": "https://github.com/Geofoods/Holy-Moly", "demo": "https://bryanjietang-boop.itch.io/holy-moly"}]...
|
[{"post_id": 85138, "ts": "202 [{"post_id": 85138, "ts": "2026-10-30T22:11:52Z", "hours": 2.5983, "text": "I changed up the colour palette for the main menu and also added a menu for when you beat a custom level"}, {"post_id": 82122, "ts": "2026-10-24T00:29:19Z", "hours": 9.1569, "text": "I created a level editor so that everyone can make their own levels. You can create blocks, enemies, checkpoints, chests, items, decorations, and spawnpoints! You can even change the background, music, and VFX! After you have created your level, you can upload your levels to the public server so that everyone can play your level. You can also sort levels by date, likes, downloads, and keywords!"}, {"post_id": 80043, "ts": "2026-10-16T01:49:13Z", "hours": 8.5842, "text": "I polished the map menu to be more consistent to the rest of the menus in the game. I also added more selection to the shop where now you can also sell things in the shop. There are also two new weapons which is the miner’s pickaxe and the wizard’s staff which is the first ranged weapon. I also am currently working on a multiplayer battle mode."}, {"post_id": 77696, "ts": "2026-10-07T23:19:00Z", "hours": 3.3469, "text": "I made my final bugfixes and a few optimizations for web, I think you guys will really enjoy the game!"}, {"post_id": 77189, "ts": "2026-10-06T00:18:02Z", "hours": 10.3744, "text": "This will probably be the final devlog as the game is super close to being finished! I added houses that the mole can enter and also added an extra phase to the corrupted snail boss. There are also new quests for you to partipate in and there are more points for you to quick travel from. I also added in some more music and sound effects and more polishing. You can also now save and erase game data"}, {"post_id": 75730, "ts": "2026-09-30T21:36:11Z", "hours": 9.2133, "text": "I created a new boss called the corrupted snail which will be the final boss and also reworked the corrupted heart as well. I also added some extra story and dialogue and added a new map with quick travel so that you can travel from mole village to the shopkeeper"}, {"post_id": 73767, "ts": "2026-09-25T21:55:35Z", "hours": 7.4275, "text": "I added extra polishing to the arena such as a new enemy spawning animation, and reworked the hornets which is the new enemy that dashes into you. I also added some story and dialogue."}, {"post_id": 72415, "ts": "2026-09-22T21:35:48Z", "hours": 10.3656, "text": "I changed the colours to make the visuals more aesthetic. I also added mole village where you can talk to other moles. I also revamped the tutorial so that the player learns the controls better"}, {"post_id": 70715, "ts": "2026-09-19T17:16:05Z", "hours": 8.8269, "text": "There are now new enemies such as hornets and I have been working on a lot of new levels for my open world 2d platformer called Holy Moly!"}, {"post_id": 69410, "ts": "2026-09-17T00:24:37Z", "hours": 7.6839, "text": "I want to make this an Open World 2D Platformer Game so I have it so that you can travel between levels freely without select screen. I also changed the lighting and added various QOL features"}, {"post_id": 68317, "ts": "2026-09-14T22:37:20Z", "hours": 5.8411, "text": "Made a new shop UI, cave system, and a dynamic camera. I also changed the block breaking physics so that the dirt particles have physics and also added ranged weapons and a grappling hook"}, {"post_id": 64521, "ts": "2026-09-09T00:01:03Z", "hours": 2.0364, "text": "I created a world system where are the levels are connected and also added a damage indicator when hitting enemies and how much damage you inflicted. I also tweaked the combat system so now there is an aerial attack when you attack in the air which is faster than ground attacking"}, {"post_id": 52028, "ts": "2026-08-22T02:07:00Z", "hours": 1.5547, "text": "I ported my Game onto Android and Apple phones and added mobile support!"}, {"post_id": 23539, "ts": "2026-07-06T15:49:12Z", "hours": 10.8819, "text": "Finished the game with 9 levels, end screen, win screen, and boss at the end. You can play the game right now!"}, {"post_id": 20425, "ts": "2026-07-02T00:51:13Z", "hours": 0.8114, "text": "Added a cave parallax background, the player sprite animations and the health indicator"}]...
|
Title: Holy Moley by @GeorgeSun | Stardance
Devlo Title: Holy Moley by @GeorgeSun | Stardance
Devlogs:
Added a cave parallax background, the player sprite animations and the health indicator
Finished the game with 9 levels, end screen, win screen, and boss at the end. You can play the game right now!
I ported my Game onto Android and Apple phones and added mobile support!
I created a world system where are the levels are connected and also added a damage indicator when hitting enemies and how much damage you inflicted. I also tweaked the combat system so now there is an aerial attack when you attack in the air which is faster than ground attacking
Made a new shop UI, cave system, and a dynamic camera. I also changed the block breaking physics so that the dirt particles have physics and also added ranged weapons and a grappling hook
I want to make this an Open World 2D Platformer Game so I have it so that you can travel between levels freely without select screen. I also changed the lighting and added various QOL features
There are now new enemies such as hornets and I have been working on a lot of new levels for my open world 2d platformer called Holy Moly!
I changed the colours to make the visuals more aesthetic. I also added mole village where you can talk to other moles. I also revamped the tutorial so that the player learns the controls better
I added extra polishing to the arena such as a new enemy spawning animation, and reworked the hornets which is the new enemy that dashes into you. I also added some story and dialogue.
I created a new boss called the corrupted snail which will be the final boss and also reworked the corrupted heart as well. I also added some extra story and dialogue and added a new map with quick travel so that you can travel from mole village to the shopkeeper
This will probably be the final devlog as the game is super close to being finished! I added houses that the mole can enter and also added an extra phase to the corrupted snail boss. There are also new quests for you to partipate in and there are more points for you to quick travel from. I also added in some more music and sound effects and more polishing. You can also now save and erase game data
I made my final bugfixes and a few optimizations for web, I think you guys will really enjoy the game!
I polished the map menu to be more consistent to the rest of the menus in the game. I also added more selection to the shop where now you can also sell things in the shop. There are also two new weapons which is the miner’s pickaxe and the wizard’s staff which is the first ranged weapon. I also am currently working on a multiplayer battle mode.
I created a level editor so that everyone can make their own levels. You can create blocks, enemies, checkpoints, chests, items, decorations, and spawnpoints! You can even change the background, music, and VFX! After you have created your level, you can upload your levels to the public server so that everyone can play your level. You can also sort levels by date, likes, downloads, and keywords!
I changed up the colour palette for the main menu and also added a menu for when you beat a custom level
Ships:
Me and my friends made a game about a little mole that fights demons! There are nine different levels, inventory system, main menu, health system, and many different intricate systems such as the parry system! The most challenging part about this was making the enemy pathfinding as there were many bugs and glitches during the creation process. I am most proud of how polished the game is because the game feels very reactive and fun to play. You can play my project with the demo link!
Me and my friends made a game about a little mole that fights demons! There are nine different levels, inventory system, main menu, health system, and many different intricate systems such as the parry system! The most challenging part about this was making the enemy pathfinding as there were many bugs and glitches during the creation process. I am most proud of how polished the game is because the game feels very reactive and fun to play. I am also proud of the fact that this is now available on mobile and can be played on Andriod and Iphone! (although not available on the app store. You can play my project with the demo link! The Android version is downloadable, you just have to give it permissions. IOS needs an apple developer license however so it will take a while.
Me and my friends made a game about a little mole that fights demons! There are 14 different levels, an inventory system, main menu, health system, map/quick travel system, shop system, and four different items. There are also two bossfights that multiple different attacks and are quite challenging. The most challenging part about this was making the enemy pathfinding as there were many bugs and glitches during the creation process. I am most proud of how polished the game is because the game feels very reactive and fun to play. There has been many changes since the last ship which I feel make the game a lot more complete such as the mole village where there are NPC moles for you to talk to. The game has side quests for you to accomplish now which give you exclusive unlocks that help you along your adventure. Click try project below to play on web or on PC!
Me and my friends made a game about a little mole that fights demons! There are 14 different levels, an inventory system, main menu, health system, map/quick travel system, shop system, and four different items. There are also two bossfights that multiple different attacks and are quite challenging. The most challenging part about this was making the enemy pathfinding as there were many bugs and glitches during the creation process. I am most proud of how polished the game is because the game feels very reactive and fun to play. There has been many changes since the last ship which I feel make the game a lot more complete such as the mole village where there are NPC moles for you to talk to. The game has side quests for you to accomplish now which give you exclusive unlocks that help you along your adventure. Since the first few ships, I have listened to a lot of the feedback given. I have added mobile controls, a new settings menu, a more complete progression system with a more informative tutorial. There is now a level editor and level browser so that now you can create and play other people’s levels! Click try project below to play on web or on PC!...
|
1793440594.5625021
|
1793526994.5625021
|
|
29123
|
RapidOCR AUR package by @aaronliu0130 | Stardance
|
aaronliu0130
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T02:30:42Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "totally rapidly shipped! (it took almost a week. wow that RapidOCR dev does a lot) copied, my AUR comment I pinned You may notice that the official repositories have yet to package python-installer 1.0.1+. We require that version due to a bug that blocks upgrades, related to symlinks. To get this package to build, simply bump python-installer yourself: Fetch the PKGBUILD for python-installer. You can do this through a helper (e.g. paru -G python-installer ) or by simple cloning ( git clone https://gitlab.archlinux.org/archlinux/packaging/packages/python-installer.git ). Open the PKGBUILD file and change line 8 to pkgver=1.0.1 . Replace line 39 with b2sums=('9101f90e108894c675b605123a372b45b43b4720fb1ac2eee18ea15d7759e8e1e0adeccc0da006fb3bba25e5094310158206182527ff82249a3aecacf08fcb39') (or update the checksum yourself). cd to the directory for python-installer’s PKGBUILD and run makepkg -si .", "repo": "https://github.com/aaronliu0130/python-rapidocr_AUR", "demo": "https://aur.archlinux.org/packages/python-rapidocr"}]...
|
[{"post_id": 21787, "ts": "202 [{"post_id": 21787, "ts": "2026-07-03T22:00:30Z", "hours": 3.1747, "text": "so, one/two weeks/worth in one devlog, come at me. usually to accommodate a new upstream update, all you need is to put in the checksum for the new tarball download. but this time RapidOCR decided to finally replace their deprecated setup.py building with PEP 517 (a.k.a. normal Python packaging). they also used to rely on the user downloading a zip file of the models for the bundled configuration from the artifacts for v1.1.0—no way to tell when you’d need to redownload that! it seems upstream relied on the user only needing to download from PyPI, which to be fair is the vast majority of usecases—lucky for non-Arch-ers, not lucky for me. ⁂ so figuring out the commands to replace python setup.py build with was the easy part: it’s called “standards-based packaging” because the command is python -m build --wheel --no-isolation no matter what exactly the pyproject.toml does. one small problem: the build needs a version, which RapidOCR provides dynamically by reading the latest tag from git. as you may realize, git information is not included in the tarball downloads typically used for such large repos, including in this package. thankfully this was even easier to patch out than setup.py’s behavior to fetch the version from PyPI (what) ⁂ next was the new way to download models. apparently all it took for the change was someone to complain that the process was “opaque” (not the word I’d use). it’s true that it was difficult to verify… but at least it was easier to wrap your head around than its replacement: a 133-line Python script! i tried to follow its code around but eventually my feeble line decided its takings were excessively HIGH (ooh the G in the font is cool). so i exercized the reverse-engineer’s first approach: run it and see what it does. it downloaded three models and from my reading of the code, it seemed to reference a default_models.yaml. sure enough, all the download links were in there. thus the obvious approach was to also download these links and update them every release. and it worked! after the minor hiccup of needing a MANIFEST.in to tell python -m installer to also ship the model files in the wheel we would install. ⁂ it’s through this yaml-reading that I discovered how RapidOCR in fact supported a ton of different models. there were nearly 300 options mentioned by default_models.yaml alone! ordinarily python-rapidocr would be able to search this directory of models and download them, but on Arch it’s installed into a system directory that it cannot modify. same for the config file. so I thought I could simply get at least the configuration part to work by symlinking it from /etc (and thus improve the discoverability of this feature). it turned out this would break upgrading the package, and only on Arch would it break upgrading the package. i first heard this “attempting to write {config file} outside the target directory” bug in a vague comment raised by another AUR user who used Claude to give a completely incorrect blathering on how to fix it, which is exactly why I somehow decided to run Claude myself. I wouldn’t have been able to discover the issue’s location by myself… as the bug was in fact within python -m installer ! the 1.0.0 release used Path.resolve() to validate paths. if said path actually did exist on the system as a symlink, resolve() would output the ultimate target of that symlink instead of only eliminating ./ s and ../ s. and thus python -m installer followed the symlink to /etc/ which was decidedly outside /usr/. the solution is to force people to build the 1.0.1 release (which accidentally fixed this bug by optimizing the resolve() step) because Arch for some reason hasn’t yet shipped this update from May… because though its PMs are all hella chill and nice, the sole maintainer is kinda on vacation vote me for package maintainer"}]...
|
Title: RapidOCR AUR package by @aaronliu0130 | Sta Title: RapidOCR AUR package by @aaronliu0130 | Stardance
Devlogs:
so, one/two weeks/worth in one devlog, come at me. usually to accommodate a new upstream update, all you need is to put in the checksum for the new tarball download. but this time RapidOCR decided to finally replace their deprecated setup.py building with PEP 517 (a.k.a. normal Python packaging). they also used to rely on the user downloading a zip file of the models for the bundled configuration from the artifacts for v1.1.0—no way to tell when you’d need to redownload that! it seems upstream relied on the user only needing to download from PyPI, which to be fair is the vast majority of usecases—lucky for non-Arch-ers, not lucky for me. ⁂ so figuring out the commands to replace python setup.py build with was the easy part: it’s called “standards-based packaging” because the command is python -m build --wheel --no-isolation no matter what exactly the pyproject.toml does. one small problem: the build needs a version, which RapidOCR provides dynamically by reading the latest tag from git. as you may realize, git information is not included in the tarball downloads typically used for such large repos, including in this package. thankfully this was even easier to patch out than setup.py’s behavior to fetch the version from PyPI (what) ⁂ next was the new way to download models. apparently all it took for the change was someone to complain that the process was “opaque” (not the word I’d use). it’s true that it was difficult to verify… but at least it was easier to wrap your head around than its replacement: a 133-line Python script! i tried to follow its code around but eventually my feeble line decided its takings were excessively HIGH (ooh the G in the font is cool). so i exercized the reverse-engineer’s first approach: run it and see what it does. it downloaded three models and from my reading of the code, it seemed to reference a default_models.yaml. sure enough, all the download links were in there. thus the obvious approach was to also download these links and update them every release. and it worked! after the minor hiccup of needing a MANIFEST.in to tell python -m installer to also ship the model files in the wheel we would install. ⁂ it’s through this yaml-reading that I discovered how RapidOCR in fact supported a ton of different models. there were nearly 300 options mentioned by default_models.yaml alone! ordinarily python-rapidocr would be able to search this directory of models and download them, but on Arch it’s installed into a system directory that it cannot modify. same for the config file. so I thought I could simply get at least the configuration part to work by symlinking it from /etc (and thus improve the discoverability of this feature). it turned out this would break upgrading the package, and only on Arch would it break upgrading the package. i first heard this “attempting to write {config file} outside the target directory” bug in a vague comment raised by another AUR user who used Claude to give a completely incorrect blathering on how to fix it, which is exactly why I somehow decided to run Claude myself. I wouldn’t have been able to discover the issue’s location by myself… as the bug was in fact within python -m installer ! the 1.0.0 release used Path.resolve() to validate paths. if said path actually did exist on the system as a symlink, resolve() would output the ultimate target of that symlink instead of only eliminating ./ s and ../ s. and thus python -m installer followed the symlink to /etc/ which was decidedly outside /usr/. the solution is to force people to build the 1.0.1 release (which accidentally fixed this bug by optimizing the resolve() step) because Arch for some reason hasn’t yet shipped this update from May… because though its PMs are all hella chill and nice, the sole maintainer is kinda on vacation vote me for package maintainer
Ships:
totally rapidly shipped! (it took almost a week. wow that RapidOCR dev does a lot) copied, my AUR comment I pinned You may notice that the official repositories have yet to package python-installer 1.0.1+. We require that version due to a bug that blocks upgrades, related to symlinks. To get this package to build, simply bump python-installer yourself: Fetch the PKGBUILD for python-installer. You can do this through a helper (e.g. paru -G python-installer ) or by simple cloning ( git clone https://gitlab.archlinux.org/archlinux/packaging/packages/python-installer.git ). Open the PKGBUILD file and change line 8 to pkgver=1.0.1 . Replace line 39 with b2sums=('9101f90e108894c675b605123a372b45b43b4720fb1ac2eee18ea15d7759e8e1e0adeccc0da006fb3bba25e5094310158206182527ff82249a3aecacf08fcb39') (or update the checksum yourself). cd to the directory for python-installer’s PKGBUILD and run makepkg -si ....
|
1793440606.6102247
|
1793527006.6102247
|
|
33000
|
JJK CURSED INTERFACE by @Mokshgna | Stardance
|
Mokshgna
|
1
|
0.38
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-09T13:51:17Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I built an interactive Jujutsu Kaisen-inspired web experience that uses MediaPipe hand tracking and Three.js particle effects. Different hand gestures activate different cursed techniques, such as Red , Infinite Void , Hollow Purple , and Malevolent Shrine , each with its own unique visual effects. What was challenging? The biggest challenge was combining real-time hand tracking with 3D particle animations while keeping everything responsive and smooth. Tuning gesture detection and creating distinct particle effects for each technique also took a lot of experimentation. What are you proud of? I’m proud that I was able to create an immersive anime-inspired experience entirely in the browser. Seeing hand gestures trigger different cursed techniques in real time made the project feel interactive and rewarding to build. What should people know so they can test your project? Allow camera access when prompted, as the project uses your webcam to detect hand gestures. Hold your hand clearly in front of the camera and try different finger positions to activate the various cursed techniques.", "repo": "https://github.com/mokshgna13-glitch/jjk", "demo": "https://mokshgna13-glitch.github.io/jjk/"}]...
|
[{"post_id": 25638, "ts": "202 [{"post_id": 25638, "ts": "2026-07-10T01:31:43Z", "hours": 0.3794, "text": "I am a fan of JJK and made this interactive domain website"}, {"post_id": 25274, "ts": "2026-07-09T13:13:41Z", "hours": 0.3689, "text": "being a JJK fan I made this cool jjk domain web"}]...
|
Title: JJK CURSED INTERFACE by @Mokshgna | Stardan Title: JJK CURSED INTERFACE by @Mokshgna | Stardance
Devlogs:
being a JJK fan I made this cool jjk domain web
I am a fan of JJK and made this interactive domain website
Ships:
What did you make? I built an interactive Jujutsu Kaisen-inspired web experience that uses MediaPipe hand tracking and Three.js particle effects. Different hand gestures activate different cursed techniques, such as Red , Infinite Void , Hollow Purple , and Malevolent Shrine , each with its own unique visual effects. What was challenging? The biggest challenge was combining real-time hand tracking with 3D particle animations while keeping everything responsive and smooth. Tuning gesture detection and creating distinct particle effects for each technique also took a lot of experimentation. What are you proud of? I’m proud that I was able to create an immersive anime-inspired experience entirely in the browser. Seeing hand gestures trigger different cursed techniques in real time made the project feel interactive and rewarding to build. What should people know so they can test your project? Allow camera access when prompted, as the project uses your webcam to detect hand gestures. Hold your hand clearly in front of the camera and try different finger positions to activate the various cursed techniques....
|
1793440612.3007438
|
1793527012.3007438
|
|
40168
|
DOTDVN.ME by @Dotdvn | Stardance
|
Dotdvn
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-27T17:15:58Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built DOTDVN, a modern and minimal personal portfolio website that showcases who I am as a developer and IoT enthusiast. The website features a split-screen hero section, smooth animations, responsive layouts, social links, and an About section designed with custom HTML, CSS, and a small amount of JavaScript. The biggest challenge was creating a clean, premium-looking UI while keeping the code lightweight and fully responsive. I’m especially proud of the typography, animations, and overall visual identity that reflects my personal brand. To test the project, simply open the deployed website and explore the landing page, About section, responsive layout, and interactive hover animations. AI Usage: I used ChatGPT as a coding assistant for brainstorming ideas, refining the design, debugging, and improving the README and documentation. The website structure, customization, styling, and overall implementation were done and personalized by me.", "repo": "https://github.com/dotdvn/DotDvn-Portfolio", "demo": "https://dotdvn.me"}]...
|
[{"post_id": 35252, "ts": "202 [{"post_id": 35252, "ts": "2026-07-26T15:36:46Z", "hours": 1.3603, "text": "Dev Log #1 Built the first version of my personal portfolio website with a clean, minimal design. Added my branding, social links, while focusing on a modern layout inspired by technology and IoT. Next: Responsive design, project showcase, animations. 🚀 The website is live on https://dotdvn.me"}]...
|
Title: DOTDVN.ME by @Dotdvn | Stardance
Devlogs:
Title: DOTDVN.ME by @Dotdvn | Stardance
Devlogs:
Dev Log #1 Built the first version of my personal portfolio website with a clean, minimal design. Added my branding, social links, while focusing on a modern layout inspired by technology and IoT. Next: Responsive design, project showcase, animations. 🚀 The website is live on https://dotdvn.me
Ships:
I built DOTDVN, a modern and minimal personal portfolio website that showcases who I am as a developer and IoT enthusiast. The website features a split-screen hero section, smooth animations, responsive layouts, social links, and an About section designed with custom HTML, CSS, and a small amount of JavaScript. The biggest challenge was creating a clean, premium-looking UI while keeping the code lightweight and fully responsive. I’m especially proud of the typography, animations, and overall visual identity that reflects my personal brand. To test the project, simply open the deployed website and explore the landing page, About section, responsive layout, and interactive hover animations. AI Usage: I used ChatGPT as a coding assistant for brainstorming ideas, refining the design, debugging, and improving the README and documentation. The website structure, customization, styling, and overall implementation were done and personalized by me....
|
1793440617.9311683
|
1793527017.9311683
|
|
39195
|
KLoy Personal Site by @kollthesimp | Stardance
|
kollthesimp
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T18:32:36Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I finished V1 of my personal site using HTML and CSS, I added a title, some text, a link, and an image.", "repo": "https://github.com/kollthesimp/KLoy-Personal-Site", "demo": "https://kollthesimp.github.io/KLoy-Personal-Site/"}]...
|
[{"post_id": 34193, "ts": "202 [{"post_id": 34193, "ts": "2026-07-24T18:29:44Z", "hours": 0.8647, "text": "I Made V1 of my personal website using HTML and CSS."}]...
|
Title: KLoy Personal Site by @kollthesimp | Starda Title: KLoy Personal Site by @kollthesimp | Stardance
Devlogs:
I Made V1 of my personal website using HTML and CSS.
Ships:
I finished V1 of my personal site using HTML and CSS, I added a title, some text, a link, and an image....
|
1793440627.419105
|
1793527027.419105
|
|
71292
|
BB GUN by @techkunjappan | Stardance
|
techkunjappan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BB GUN by @techkunjappan | Stardance
|
1792925240.2817469
|
1793530040.2817469
|
|
71293
|
My awesome macropad! by @gospa420 | Stardance
|
gospa420
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @gospa420 | Stardan Title: My awesome macropad! by @gospa420 | Stardance...
|
1792925241.608856
|
1793530041.608856
|
|
71294
|
My awesome macropad! by @taliarehwalim | Stardance
|
taliarehwalim
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @taliarehwalim | St Title: My awesome macropad! by @taliarehwalim | Stardance...
|
1792925242.4615316
|
1793530042.4615316
|
|
56458
|
R-Baiter by @JP | Stardance
|
JP
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: R-Baiter by @JP | Stardance
|
1792666043.2180152
|
1793530043.2180152
|
|
71295
|
My awesome macropad! by @yoitzsilbool | Stardance
|
yoitzsilbool
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yoitzsilbool | Sta Title: My awesome macropad! by @yoitzsilbool | Stardance...
|
1792925243.3120983
|
1793530043.3120983
|
|
71296
|
Stem racing by @vishwaksen_reddy01 | Stardance
|
vishwaksen_reddy01
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Stem racing by @vishwaksen_reddy01 | Starda Title: Stem racing by @vishwaksen_reddy01 | Stardance...
|
1792925244.1683507
|
1793530044.1683507
|
|
71297
|
Random Stuff by @luckshitha-premkumar | Stardance
|
luckshitha-premkumar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Random Stuff by @luckshitha-premkumar | Sta Title: Random Stuff by @luckshitha-premkumar | Stardance...
|
1792925245.0009253
|
1793530045.0009253
|
|
71298
|
Sirene by @Shaww | Stardance
|
Shaww
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Sirene by @Shaww | Stardance
|
1792925245.8240166
|
1793530045.8240166
|
|
33759
|
Personal Site by @sevennn_39 | Stardance
|
sevennn_39
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T17:48:08Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This was another pretty simple website because that’s really where I’m comfortable in coding, but it was kinda challenging getting the images and stuff to translate between the preview browser and actual Github Pages thing. I liked talking about all my different interests and stuff lol, I’m afraid my project might have ended up a bit cringe :P", "repo": "https://github.com/sevennn39/normal-man", "demo": "https://sevennn39.github.io/normal-man/"}]...
|
[{"post_id": 35342, "ts": "202 [{"post_id": 35342, "ts": "2026-07-26T17:43:22Z", "hours": 0.8944, "text": "Done! It’s still pretty basic but it’s been fun 👍"}, {"post_id": 34759, "ts": "2026-07-25T18:55:05Z", "hours": 1.2881, "text": "Getting down the bare bones, I’ll do some styling later but it’s coming along well!"}]...
|
Title: Personal Site by @sevennn_39 | Stardance
D Title: Personal Site by @sevennn_39 | Stardance
Devlogs:
Getting down the bare bones, I’ll do some styling later but it’s coming along well!
Done! It’s still pretty basic but it’s been fun 👍
Ships:
This was another pretty simple website because that’s really where I’m comfortable in coding, but it was kinda challenging getting the images and stuff to translate between the preview browser and actual Github Pages thing. I liked talking about all my different interests and stuff lol, I’m afraid my project might have ended up a bit cringe :P...
|
1793443655.3460412
|
1793530055.3460412
|
|
40368
|
Written Snapshots by @ReuTheNetizen | Stardance
|
ReuTheNetizen
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-27T08:21:45Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Written Snapshots is a personal digital journal designed to look and feel like a tangible, physical scrapbook. I built this to log my learning growth as I dive deeper into electronics and software. This is the very first website I have built completely from scratch and deployed! While setting up the initial layout, using HTML, was smooth sailing, but things got tricky whenI tried implementing more complex design details. Building a CSS paperclip from scratch was a notable challenge, but pushing through it taught me so much about advanced styling. While CSS was my biggest hurdle, it was also the most rewarding part of the project. I am incredibly proud of how closely the final product matches my original vision for the scrapbook aesthetic. It had a lot of fun playing around with different CSS elements. I should note I used Google Gemini to brainstorm fonts, refine color palettes, and check occasional syntax patterns. However, I wrote the implementation myself. With no doubt I can say less than 30% of the codebase is AI sourced. Ultimately, this was an amazing learning experience for web design, and coding with HTML and CSS. I want to keep improving my frontend development skills with projects similar to this. Please check it out and let me know what you think! I hope you enjoy it.", "repo": "https://github.com/ReuTheCoder/a-written-snapshot", "demo": "https://reuthecoder.github.io/a-written-snapshot/"}]...
|
[{"post_id": 35617, "ts": "202 [{"post_id": 35617, "ts": "2026-07-27T04:46:48Z", "hours": 0.8356, "text": "Devlog 03 I gotta go to bed soon, however, I would say my website is finished and I have successfully completed my challenge! Completed Work At first I went for a more pink and orange-ish color palette (as I was mimicking the color palette on my Canva design) and felt it gave a warm, cozy feeling. However, my favorite color is blue, so in an attempt to make the website more personal to me I experimented around with the colors - which ended up taking a bit longer than expected. Afterwards, I learned that it was possible to make elements, like a paperclip, completely out of CSS, so I spent the rest of my time adding a paper clip to the archived section of my website. I also made a few small formatting changes to the html (like adding line breaks and fixing typos, for instance) to polish up the design a bit more. I also added a favicon. Although I could add some more elements, I feel like I have completed my main objective and would like to use my remaining time to prep my website for submission! Next Steps I will definitely try to consistently make small future updates to the site where I will add more logs and scrapbook elements to the site. I’m thinking of making it messier with doodles, polaroids, and scrap paper scattered around the margins. I’m also debating the font as I feel it lacks some readability but it also matches my rushed handwriting well. Thanks for reading!"}, {"post_id": 35586, "ts": "2026-07-27T03:40:35Z", "hours": 1.0947, "text": "Devlog 02 I decided to go with the scrapbook theme as I feel like it would be more fun to implement. The layout is actually inspired by a Canva design I made for a school project where I found that I could make a decent looking scrapbook design without adding a bunch of fancy elements. A few simple shapes, rotated and colored nicely produced a cohesive design. An hour later…I got the bulk of the css complete. All I have now is polish, although I’m pretty happy with how it is already. I think I have been able to get a “scrapbook” vibe without having to add a lot of textures. The layout is actually inspired by a Canva design I did for one for a project where I found adding simple shapes can create a nice-looking scrapbook design without adding a bunch of paper elements. Completed Work An hour later, I have gotten the bulk of the CSS complete, and I am pretty happy with how it turned out.. I think I was able to get a “scrapbook vibe” without having to add a lot of texture. I really like how the navigation turned out. At first it was a band at the top of the website, but I decided to remove the title from it and make it part of the “hero” section of my website and then use a flex box to center and format the navigation links, which I feel really improved the design. Next Steps The time I have allotted for this project is running out…I’m just going to do some touch ups and I think I will be ready to ship! Thanks for reading!"}, {"post_id": 35557, "ts": "2026-07-27T02:21:30Z", "hours": 1.3372, "text": "Devlog 01 After attending Jenin’s Personal Site Workshop, I felt inspired to jump back into web design and push my limits. I am challenging myself to build a completely new website from scratch by the end of this evening, meaning I only have about 5 hours to do it. Using what I learned from the workshop and a bit of past experimentation with HTML/CSS on w3schools, the clock is officially ticking. Project Vision I don’t want to reveal too much personal information, but I still want to make a website that feels personal to me. At the same time, I need to keep it simple. I am constraining this design to all fit on one webpage and avoiding javascript usage so I actually have a chance at finishing this in one evening. I had a general idea of what I wanted to make: a semi-anonymous digital journal website with monthly updates. A website I could use to quickly see my growth without having to read a lot of details. Yet - planning the html for the website was a bit of a challenge. I came up with two website drafts I scrapped mid-way before settling on an idea and finally finishing the html. The picture I took shows my general html outline. I have written each entry in greater detail on a separate document. Next Steps Next up is the CSS. I’m debating on doing a notebook style (line paper background, website looks like it’s all contained in a notebook) or a scrapbook style (a little bit more work but I can add some fun elements). Thanks for reading!"}]...
|
Title: Written Snapshots by @ReuTheNetizen | Stard Title: Written Snapshots by @ReuTheNetizen | Stardance
Devlogs:
Devlog 01 After attending Jenin’s Personal Site Workshop, I felt inspired to jump back into web design and push my limits. I am challenging myself to build a completely new website from scratch by the end of this evening, meaning I only have about 5 hours to do it. Using what I learned from the workshop and a bit of past experimentation with HTML/CSS on w3schools, the clock is officially ticking. Project Vision I don’t want to reveal too much personal information, but I still want to make a website that feels personal to me. At the same time, I need to keep it simple. I am constraining this design to all fit on one webpage and avoiding javascript usage so I actually have a chance at finishing this in one evening. I had a general idea of what I wanted to make: a semi-anonymous digital journal website with monthly updates. A website I could use to quickly see my growth without having to read a lot of details. Yet - planning the html for the website was a bit of a challenge. I came up with two website drafts I scrapped mid-way before settling on an idea and finally finishing the html. The picture I took shows my general html outline. I have written each entry in greater detail on a separate document. Next Steps Next up is the CSS. I’m debating on doing a notebook style (line paper background, website looks like it’s all contained in a notebook) or a scrapbook style (a little bit more work but I can add some fun elements). Thanks for reading!
Devlog 02 I decided to go with the scrapbook theme as I feel like it would be more fun to implement. The layout is actually inspired by a Canva design I made for a school project where I found that I could make a decent looking scrapbook design without adding a bunch of fancy elements. A few simple shapes, rotated and colored nicely produced a cohesive design. An hour later…I got the bulk of the css complete. All I have now is polish, although I’m pretty happy with how it is already. I think I have been able to get a “scrapbook” vibe without having to add a lot of textures. The layout is actually inspired by a Canva design I did for one for a project where I found adding simple shapes can create a nice-looking scrapbook design without adding a bunch of paper elements. Completed Work An hour later, I have gotten the bulk of the CSS complete, and I am pretty happy with how it turned out.. I think I was able to get a “scrapbook vibe” without having to add a lot of texture. I really like how the navigation turned out. At first it was a band at the top of the website, but I decided to remove the title from it and make it part of the “hero” section of my website and then use a flex box to center and format the navigation links, which I feel really improved the design. Next Steps The time I have allotted for this project is running out…I’m just going to do some touch ups and I think I will be ready to ship! Thanks for reading!
Devlog 03 I gotta go to bed soon, however, I would say my website is finished and I have successfully completed my challenge! Completed Work At first I went for a more pink and orange-ish color palette (as I was mimicking the color palette on my Canva design) and felt it gave a warm, cozy feeling. However, my favorite color is blue, so in an attempt to make the website more personal to me I experimented around with the colors - which ended up taking a bit longer than expected. Afterwards, I learned that it was possible to make elements, like a paperclip, completely out of CSS, so I spent the rest of my time adding a paper clip to the archived section of my website. I also made a few small formatting changes to the html (like adding line breaks and fixing typos, for instance) to polish up the design a bit more. I also added a favicon. Although I could add some more elements, I feel like I have completed my main objective and would like to use my remaining time to prep my website for submission! Next Steps I will definitely try to consistently make small future updates to the site where I will add more logs and scrapbook elements to the site. I’m thinking of making it messier with doodles, polaroids, and scrap paper scattered around the margins. I’m also debating the font as I feel it lacks some readability but it also matches my rushed handwriting well. Thanks for reading!
Ships:
Written Snapshots is a personal digital journal designed to look and feel like a tangible, physical scrapbook. I built this to log my learning growth as I dive deeper into electronics and software. This is the very first website I have built completely from scratch and deployed! While setting up the initial layout, using HTML, was smooth sailing, but things got tricky whenI tried implementing more complex design details. Building a CSS paperclip from scratch was a notable challenge, but pushing through it taught me so much about advanced styling. While CSS was my biggest hurdle, it was also the most rewarding part of the project. I am incredibly proud of how closely the final product matches my original vision for the scrapbook aesthetic. It had a lot of fun playing around with different CSS elements. I should note I used Google Gemini to brainstorm fonts, refine color palettes, and check occasional syntax patterns. However, I wrote the implementation myself. With no doubt I can say less than 30% of the codebase is AI sourced. Ultimately, this was an amazing learning experience for web design, and coding with HTML and CSS. I want to keep improving my frontend development skills with projects similar to this. Please check it out and let me know what you think! I hope you enjoy it....
|
1793443660.4177337
|
1793530060.4177337
|
|
38708
|
Pong by @Mapplect | Stardance
|
Mapplect
|
1
|
7.0
|
16
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T21:55:54Z", "hours": 7.0, "multiplier": 2.32, "payout": 16, "blessing": "neutral", "text": "I made a Pong game in Python. The most challenging thing was organizing my code and handling the multiple different game states/functions I have. I’m glad that I tried to make it more than your standard game of pong. All the instructions to play it are on my Github.", "repo": "https://github.com/tg257225-oss/Pong", "demo": "https://github.com/tg257225-oss/Pong/releases/tag/V.1.0.0"}]...
|
[{"post_id": 34162, "ts": "202 [{"post_id": 34162, "ts": "2026-07-24T17:54:10Z", "hours": 3.3378, "text": "It’s done!!! The game is finally done after hours of work. There is a complete main menu now, with 3 different modes to choose from. ‘Normal’ - normal pong, nothing much else to say. ‘Speed’ - every time the ball collides with something (the wall or a paddle), its speed increases by a certain factor until someone scores a point, after which it is reset back to its original value. ‘Large Paddles’ - just gives each player larger paddles, nothing more than that. I added an AI (always paddle 2) just in case people wanted to play by themselves. It simply follows the y value of the ball (as long as its heading towards the paddle and past half of the screen). I had to change the size of the AI’s paddle in the ‘Large Paddles’ game or else it would’ve been impossible to score (still larger than the other gamemodes). I also decreased its speed. It SHOULD be possible for anyone to beat the AI in all three gamemodes, I did it myself. But, if people have trouble with it, I’ll try and balance it a bit more. Toggling on the AI uses simple states like I did for the gamemodes, ai_state = \"false/true\" , and changing the value depending on what ‘button’ the user clicks. I wish I could get the text for the gamemodes ON the button/rectangle, but the Turtle library makes ts too difficult for no reason. Since you can’t exactly make buttons with Turtle, I added a click sound when each rectangle is pressed so it feels like you’re actually doing something ( pygame my beloved). I have had lots of fun with this project and wish to make more games in Python!"}, {"post_id": 33767, "ts": "2026-07-23T23:05:48Z", "hours": 1.6033, "text": "So many functions… The Work So Far: The base game is entirely done. The paddles move, the ball moves, and there’s a scoring system. Turns out I didn’t have to do anything advanced to fix the issue with the ball, just needed to use time.sleep to make the frames more consistent. I’ve started on the main menu (works by using game_state values to switch between the games), currently it only brings you to the base game. I’m going to work on other variations soon. Next Course of Action: More variations to the basic pong game. Maybe polish the GUI up a bit more, I don’t know."}, {"post_id": 33649, "ts": "2026-07-23T18:43:01Z", "hours": 1.1553, "text": "We’ve got some movement!! The Work So Far: The paddles can now move! The left paddle is controlled using ‘W’ and ‘S’ and the right paddle is controlled using the ‘Up’ and ‘Down’ arrow keys. Originally, my basic movement functions only allowed for one paddle to move at a time, which was not ideal. The movement was also very choppy (moving about 15 pixels per key press). So, I made a dictionary of all the possible key presses (false means the key is not touched and true means its being held down), created press/release functions which change the value of the key presses in the dictionary accordingly, and added event listeners. These event listeners were .onkeypress and .onkeyrelease . They execute movement functions the moment a key is pressed/released ( def pad_move(): if keys_pressed[\"w\"]: y = pad_1.ycor() y += 5 pad_1.sety(y)) . I used the function .ontimer to loop the movement function every 16 milliseconds, making the paddles move smoother. I added boundaries to the window so the ball didn’t fly into oblivion. At one point, I accidentally made the balls too fast (literally saw them for a second and then they were gone). Lowkey want to incorporate that into one of the modes I’ll make in the future. There are also boundaries for the paddles so they don’t go too far off the screen. I did these through a bunch of compound conditionals (I love logic so much dude). Next Course of Action: Sometimes, when the ball moves across the screen, it slows down considerably and doesn’t speed back up until it collides with either the walls or the paddles. Thinking of making a function like I did with the paddles to see if it’ll fix it. Haven’t seen any other issues but that. Need to work on the point system and probably a start menu to choose the different modes."}, {"post_id": 33551, "ts": "2026-07-23T16:14:27Z", "hours": 0.7431, "text": "Wanted to continue my Python journey here on Stardance (been doing a bunch of stuff for Beest) so I decided to make a game. The Work So Far: Nothing much, made the window for the Pong game using the turtle library in Python. I’ve only used pygame so far for an MP3 player so its nice to use another library. Named the window ‘Pong’ (cuz what else would I name it?). Made both paddles and the ball using .shape . I wanted to make the paddles have rounded edges but I’ll have to figure that out later. Next Course of Action: Making the paddles and ball move. I wanted to add an animated background, too. Maybe add some special modes to change up the gameplay."}]...
|
Title: Pong by @Mapplect | Stardance
Devlogs:
Wan Title: Pong by @Mapplect | Stardance
Devlogs:
Wanted to continue my Python journey here on Stardance (been doing a bunch of stuff for Beest) so I decided to make a game. The Work So Far: Nothing much, made the window for the Pong game using the turtle library in Python. I’ve only used pygame so far for an MP3 player so its nice to use another library. Named the window ‘Pong’ (cuz what else would I name it?). Made both paddles and the ball using .shape . I wanted to make the paddles have rounded edges but I’ll have to figure that out later. Next Course of Action: Making the paddles and ball move. I wanted to add an animated background, too. Maybe add some special modes to change up the gameplay.
We’ve got some movement!! The Work So Far: The paddles can now move! The left paddle is controlled using ‘W’ and ‘S’ and the right paddle is controlled using the ‘Up’ and ‘Down’ arrow keys. Originally, my basic movement functions only allowed for one paddle to move at a time, which was not ideal. The movement was also very choppy (moving about 15 pixels per key press). So, I made a dictionary of all the possible key presses (false means the key is not touched and true means its being held down), created press/release functions which change the value of the key presses in the dictionary accordingly, and added event listeners. These event listeners were .onkeypress and .onkeyrelease . They execute movement functions the moment a key is pressed/released ( def pad_move(): if keys_pressed["w"]: y = pad_1.ycor() y += 5 pad_1.sety(y)) . I used the function .ontimer to loop the movement function every 16 milliseconds, making the paddles move smoother. I added boundaries to the window so the ball didn’t fly into oblivion. At one point, I accidentally made the balls too fast (literally saw them for a second and then they were gone). Lowkey want to incorporate that into one of the modes I’ll make in the future. There are also boundaries for the paddles so they don’t go too far off the screen. I did these through a bunch of compound conditionals (I love logic so much dude). Next Course of Action: Sometimes, when the ball moves across the screen, it slows down considerably and doesn’t speed back up until it collides with either the walls or the paddles. Thinking of making a function like I did with the paddles to see if it’ll fix it. Haven’t seen any other issues but that. Need to work on the point system and probably a start menu to choose the different modes.
So many functions… The Work So Far: The base game is entirely done. The paddles move, the ball moves, and there’s a scoring system. Turns out I didn’t have to do anything advanced to fix the issue with the ball, just needed to use time.sleep to make the frames more consistent. I’ve started on the main menu (works by using game_state values to switch between the games), currently it only brings you to the base game. I’m going to work on other variations soon. Next Course of Action: More variations to the basic pong game. Maybe polish the GUI up a bit more, I don’t know.
It’s done!!! The game is finally done after hours of work. There is a complete main menu now, with 3 different modes to choose from. ‘Normal’ - normal pong, nothing much else to say. ‘Speed’ - every time the ball collides with something (the wall or a paddle), its speed increases by a certain factor until someone scores a point, after which it is reset back to its original value. ‘Large Paddles’ - just gives each player larger paddles, nothing more than that. I added an AI (always paddle 2) just in case people wanted to play by themselves. It simply follows the y value of the ball (as long as its heading towards the paddle and past half of the screen). I had to change the size of the AI’s paddle in the ‘Large Paddles’ game or else it would’ve been impossible to score (still larger than the other gamemodes). I also decreased its speed. It SHOULD be possible for anyone to beat the AI in all three gamemodes, I did it myself. But, if people have trouble with it, I’ll try and balance it a bit more. Toggling on the AI uses simple states like I did for the gamemodes, ai_state = "false/true" , and changing the value depending on what ‘button’ the user clicks. I wish I could get the text for the gamemodes ON the button/rectangle, but the Turtle library makes ts too difficult for no reason. Since you can’t exactly make buttons with Turtle, I added a click sound when each rectangle is pressed so it feels like you’re actually doing something ( pygame my beloved). I have had lots of fun with this project and wish to make more games in Python!
Ships:
I made a Pong game in Python. The most challenging thing was organizing my code and handling the multiple different game states/functions I have. I’m glad that I tried to make it more than your standard game of pong. All the instructions to play it are on my Github....
|
1793443671.133207
|
1793530071.133207
|
|
35505
|
my introduction!!! by @974 | Stardance
|
974
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-25T21:42:48Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? : My personal website for the Stardance Hack Club challenge, a retro desktop-style page with About, Projects, and Skills sections. What was challenging? : Getting used to HTML and CSS together, structuring sections properly, and figuring out why my image wasn’t showing up (file name had to match exactly). Deploying with GitHub Pages also took a few tries. What are you proud of? : Having a fully working, deployed site that I actually understand — not just copied code. I also like how the retro design turned out. Also proud of myself that the link is working thanks to the tutorial :)) What should people know to test your project? : Just visit the live link and click through the nav buttons (About, Projects, Skills) to see each section.", "repo": "https://github.com/facxts/my-personal-page", "demo": "https://facxts.github.io/my-personal-page/"}]...
|
[{"post_id": 34832, "ts": "202 [{"post_id": 34832, "ts": "2026-07-25T20:54:29Z", "hours": 0.2761, "text": "finished my project hehe silly me heres my page if you would like to see: https://facxts.github.io/my-personal-page/"}]...
|
Title: my introduction!!! by @974 | Stardance
Dev Title: my introduction!!! by @974 | Stardance
Devlogs:
finished my project hehe silly me heres my page if you would like to see: https://facxts.github.io/my-personal-page/
Ships:
What did you make? : My personal website for the Stardance Hack Club challenge, a retro desktop-style page with About, Projects, and Skills sections. What was challenging? : Getting used to HTML and CSS together, structuring sections properly, and figuring out why my image wasn’t showing up (file name had to match exactly). Deploying with GitHub Pages also took a few tries. What are you proud of? : Having a fully working, deployed site that I actually understand — not just copied code. I also like how the retro design turned out. Also proud of myself that the link is working thanks to the tutorial :)) What should people know to test your project? : Just visit the live link and click through the nav buttons (About, Projects, Skills) to see each section....
|
1793443679.5750794
|
1793530079.5750794
|
|
28187
|
Autonomous Multi-UAV Graph Explorer by @jachym_fuk Autonomous Multi-UAV Graph Explorer by @jachym_fukal | Stardance...
|
jachym_fukal
|
1
|
11.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T15:22:18Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Built at ETH Hackathon Munich 2026 in 48 hours by @jachym_fukal and @srijan : a multi-UAV coordination algorithm where three autonomous drones explore and surveil an unknown 3D graph together. The hardest part was fixing oscillation — drones kept bouncing between the same two nodes forever. We solved it with a departure-tick penalty that discourages reversing course. Biggest win: 100% completion rate across all 6 test graphs with a total score of 1538.7. To test it, clone the repo and run uv run run_eval.py --submission my_solution.py --graphs graphs/train.", "repo": "https://github.com/srijan-81/3d-graph-explorer", "demo": "https://youtu.be/JeqkcZoLkZo"}]...
|
[{"post_id": 18385, "ts": "202 [{"post_id": 18385, "ts": "2026-06-29T14:57:43Z", "hours": 11.4036, "text": "How We Taught Three UAVs to Explore the Unknown in 48 Hours — ETH Hackathon Munich This weekend @srijan and I competed at the ETH Hackathon Munich, taking on the ATS GmbH challenge: coordinate three autonomous UAVs to explore and surveil an unknown 3D graph as efficiently as possible. The score is the total flight distance of the slowest drone — so balancing all three agents matters as much as raw speed. What we built We implemented a greedy frontier-based exploration algorithm where drones bid on uncovered nodes using a makespan-balanced auction. To cover the graph efficiently, we used k=4 hop sensor footprints and soft Voronoi territory partitioning so drones naturally split the space without stepping on each other’s toes. The hard parts The trickiest bug was oscillation — a drone would arrive at node B, making A look like the best frontier, then immediately go back to A, and repeat forever. We fixed this with a departure-tick penalty that decays over 5 ticks, discouraging drones from reversing course. Performance was another challenge: naively running BFS for every frontier on every agent every tick was way too slow on graphs with 7000+ nodes. Caching coverage values once per tick made it viable. Result 100% completion rate across all 6 training graphs, with a total suite score of 1538.7 — just above our 1500 target, but we’re happy with it as a first hackathon submission!"}]...
|
Title: Autonomous Multi-UAV Graph Explorer by @jac Title: Autonomous Multi-UAV Graph Explorer by @jachym_fukal | Stardance
Devlogs:
How We Taught Three UAVs to Explore the Unknown in 48 Hours — ETH Hackathon Munich This weekend @srijan and I competed at the ETH Hackathon Munich, taking on the ATS GmbH challenge: coordinate three autonomous UAVs to explore and surveil an unknown 3D graph as efficiently as possible. The score is the total flight distance of the slowest drone — so balancing all three agents matters as much as raw speed. What we built We implemented a greedy frontier-based exploration algorithm where drones bid on uncovered nodes using a makespan-balanced auction. To cover the graph efficiently, we used k=4 hop sensor footprints and soft Voronoi territory partitioning so drones naturally split the space without stepping on each other’s toes. The hard parts The trickiest bug was oscillation — a drone would arrive at node B, making A look like the best frontier, then immediately go back to A, and repeat forever. We fixed this with a departure-tick penalty that decays over 5 ticks, discouraging drones from reversing course. Performance was another challenge: naively running BFS for every frontier on every agent every tick was way too slow on graphs with 7000+ nodes. Caching coverage values once per tick made it viable. Result 100% completion rate across all 6 training graphs, with a total suite score of 1538.7 — just above our 1500 target, but we’re happy with it as a first hackathon submission!
Ships:
Built at ETH Hackathon Munich 2026 in 48 hours by @jachym_fukal and @srijan : a multi-UAV coordination algorithm where three autonomous drones explore and surveil an unknown 3D graph together. The hardest part was fixing oscillation — drones kept bouncing between the same two nodes forever. We solved it with a departure-tick penalty that discourages reversing course. Biggest win: 100% completion rate across all 6 test graphs with a total score of 1538.7. To test it, clone the repo and run uv run run_eval.py --submission my_solution.py --graphs graphs/train....
|
1793443682.8263063
|
1793530082.8263063
|
|
28027
|
LARPARDY! by @purpld | Stardance
|
purpld
|
1
|
73.0
|
1320
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T16:36:45Z", "hours": 73.0, "multiplier": 18.16, "payout": 1320, "blessing": "neutral", "text": "I made a Discord activity trivia game inspired by the Jeopardy game show called LARPARDY! that you can easily play with your friends without leaving Discord! I am very proud of how far this project has come because it was very challenging for me. The frontend is based on Vue.js, which before this, I had never used before. I wanted to try something non-React and I’ve come to REALLY love Vue. I had to write multiplayer netcode entirely by myself! I used Socket.IO to handle the networking itself, but I had to write ALL of the state management and syncing code. There were certainly some difficulties in doing so! I also have not worked with Redis before, which was my database of choice for state management. It is… quite different from other databases, so writing code to interact with it was a learning experience.", "repo": "https://github.com/hpenney2/larpardy", "demo": "https://discord.com/discovery/applications/1521015095738499083"}]...
|
[{"post_id": 55618, "ts": "202 [{"post_id": 55618, "ts": "2026-08-27T16:13:45Z", "hours": 0.9681, "text": "Last devlog before ship (proper this time!) Discovery I set up a Discord server for the game, so LARPARDY! is now on Discord’s discovery (App Directory)! This is now used for the demo link for the game. README (please) Just spent some time redoing the (ancient) README and making it look pretty and detailed. I took some screenshots and added them here. They also show up on Discord! :D"}, {"post_id": 55384, "ts": "2026-08-27T05:50:58Z", "hours": 1.6658, "text": "SHIP IT! LARPARDY! is now verified on Discord! I spent a short while writing a basic Terms of Service and Privacy Policy (as required by Discord) and verifying all the details. Live deployment I’ve also deployed a production version of the game server to my home lab! It’s exposed through a Cloudflare Tunnel, because I’m behind CGNAT (i.e., I don’t have my own public IP). Spending all that time setting up Docker for this project all that time ago made this VERY easy, which was the entire point. I’m glad nothing broke in the process… lol Discovery The last thing I want to do is set up Discovery on Discord, so reviewers (and anybody, for that matter!) can just search up LARPARDY! in Discord, and it should come up. I pretty much just need to make a support server and write the details, and then… LET’S SHIP IT! I dunno if anybody reads these things, but if you do, thank you. :D"}, {"post_id": 55338, "ts": "2026-08-27T02:45:01Z", "hours": 10.4778, "text": "IT’S READY! I am very happy to say that I’m done with the main game! I wanted to split this into a couple of devlogs, but Stardance was having some issues syncing time earlier so I kept working. (I think it’s actually been up for a little bit… oops) Buzzing -> Judging Judging now is fully functional! Either someone gets the clue right, everyone gets it wrong, or not everybody buzzes in and we move on. I’ve also introduced something called Hostless Mode , which allows the game host to play (where normally they could not). This plays more like most online versions of the gameshow, where you can buzz in, reveal the answer, and then that’s that (instead of everyone getting a chance to buzz in if the first person is wrong). This also gives a way to play singleplayer, which should make it more accessible. All of this took a lot of careful logic work to make sure that everything works as expected (hence the VERY long log time, plus several other things), no matter how you’re playing! End of Line The game, also, can finally end, now that clues get marked off. I made a simple leaderboard that shows when the game is over, and then you can return to the lobby! See the photo below. GAMEPLAY! You can watch a short gameplay example with a host (right) + 2 players (left) below! You’re expected to play with voice (or a text channel, if you wish), so this demo just showcases the flow of the game. I logged a lot of time on this one because there was also a lot of testing and fixing small bugs, especially when making the judging system. A lot can get weird when managing so much state!"}, {"post_id": 54560, "ts": "2026-08-25T16:07:03Z", "hours": 7.4739, "text": "Questions, and MORE boring serverside stuffs Oof, sorry, it’s been a while since I’ve been able to work on this project, and the clock is ticking! Clues! Clues can now actually be selected and that will be reflected to the server and all players. You can also see a bit of the buzzer work I started, which is actually much more of a pain than it would seem. Why? Well that’s because we now have to talk about: SYNCING TIME OVER THE NETWORK The server running the game has a system time. Your computer, phone, or whatever, also has its own system time which could vary entirely from the server’s. If the server wants to schedule an event (say, when you should be allowed to buzz in), how does it tell the client when that is without an offset? Using Unix timestamps is common, but without knowing how offset the client is from the server, we don’t actually really know when that timestamp is in reality (since EITHER could be offset from reality, if not both), and we don’t want mismatched times to cause weird problems. The solution that I went with is that the client will periodically (every 1 second for now) send a “ping” message to the server with its current timestamp. The server will reply with that time as well as it’s own timestamp. Upon receiving that reply, it can then do three things: Calculate the round trip time (i.e., ping!) from the original time we sent and the time it is now. Estimate the server time as we’re processing this by adding the server time + half of the ping Calculate our time offset from the server by subtracting our time from that estimate I admit that I did NOT figure this out on my own. Google is nice. But this does actually kind of serve as the basis for how things like the Network Time Protocol (NTP) work. Reminder that all of that is just so we can show when the buzzer is allowed to be pressed accurately. Spectating Also, I added a fix so late players aren’t actually awkwardly added in the middle of a game and are instead in a kind of “spectator” state; since they’re still connected, they receive all the game state events and so on. If all actual players leave, the game will reset (which also means I now have a function to reset the state, and for showing alerts!)."}, {"post_id": 32606, "ts": "2026-07-21T21:45:43Z", "hours": 6.9744, "text": "A REAL BOARD! A trickier task than it sounds like, but I needed some clues finally! The default testing board was uh… not exactly “production ready” in my opinion (lol). This was tricky particularly because, well, where am I going to get clues from? You kinda need a LOT of clues for a good Jeopardy game, and while UGC is something I want to make, I would like a default mode, too, and there is certainly no way that I was going to try to make a bunch of clues by myself. (respectfully, I don’t think I am also smart enough to do that lol) Jepp I found a little project called jepp which exposes a LOT of existing Jeopardy clues through an API. I didn’t want to bother that API too much though, and there is an SQLite DB dump publicly available, so LARPARDY now uses that instead. With a little bit of SQL later (and, uh, remembering how to use SQL lol)… we have many, many clues! The only thing is that the database does not store the value of clues, so it’ll be a bit random. A $1000 clue might end up being super easy lol, but I think that’s some jank I’m okay with. Player list Ooh also, I made a proper player list now! I did want literal podiums, which I may still do at some point, but I’m happy with this for the time being. This can now also react to changes in the game like points or who’s turn it is!"}, {"post_id": 30376, "ts": "2026-07-17T21:09:53Z", "hours": 9.8342, "text": "BEEEG DEVLOG Wowwee! I’ve gotta remember to make devlogs more often. Seriously. Here’s a list of changes that I’ve made since my last devlog! The basics of the board are implemented! You can’t interact with it yet, but the template to do so is there, and it now exists on the server-side too and the client reads from that state. The board is also animated now. When someone selects a clue, it will highlight the category and the clue, you can hover clues, and, my favorite bit, the categories get revealed one by one when the game starts! That last part actually kind of sucked to implement lol. I prepared for this when making the lobby’s ready up system and made the state that it uses to work a bit dynamic because I knew that I would need it! The state stores readyForNextState , which for some states (like when we’re in the lobby) allow unreadying, but for others, simply act as a marker of whether a specific client is ready to move on. This is probably actually really important because if we just ran a timer on the server, a NUMBER of things could go wrong, most importantly being that a laggy client could get desynced VERY quickly and have a bad time. Alongside this, there is an intro now! I spent a good bit of time in Aseprite and messing with FL Studio to make some art and an intro track, both for the logo and so I finally have some artwork to add in the Discord Developer Portal, so there aren’t anymore blank assets. It’s not perfect (i am NOT an artist lol) See pictures below! psst , I also made a “think” music track for if the final round is enabled! It’s not in the game yet, though. I made a number of styling fixes. The board in particular looks much better on different screen sizes now, even on my phone. Reminder to use relative sizes when able, not px ! The server now registers the activity entry point command as having an APP_HANDLER handler, which means that the server must respond to interactions now, rather than Discord autolaunching the activity. The benefit of this is that we have control over whether a message gets sent to the channel it was started in (and when), or if we even launch the activity at all (disallow banned users? anything is possible…)! The rich presence actually has meaningful details now lol, rather than placeholder text. NOWWW what? I am going to, FINALLY, FOR REAL THIS TIME, (lol) actually start making the game logic. (It’s about time!) More updates sooooon!"}, {"post_id": 29136, "ts": "2026-07-15T20:22:28Z", "hours": 2.0267, "text": "I prototyped the game board last night! This took a while to get the styling right as I want this to work well on all screen sizes, hopefully including mobile devices. It’s still a little rough on very small sizes (e.g., my phone), but one step at a time! I still want to add little “podiums” at the bottom for our players. After that, I’m going to be working on getting the board working on the serverside, so that actually becomes part of the game state."}, {"post_id": 28080, "ts": "2026-07-14T03:29:38Z", "hours": 8.6656, "text": "socket.io is cool, BUT So. 8 hour devlog, my bad, but I’m going to start by talking about the thing that I’ve been mostly fighting with today. The networking backend that I’m using for LARPARDY is Socket.IO , which works similarly to (and usually on top of) WebSockets, but with a lot more quality of life features and ease of use for specifically these kinds of situations. I have been fighting for a few hours today trying to figure out why I could not, for the life of me, get socket.emit to work on the client. It was, in fact, one setting, retries , in the client config, stopping it from working, for SOME reason. Oops. Anyways… PROGRESS! (GAME!) Progress has been steady! Most of the changes that I’ve been making have been making the client more workable as I make new components, and actually more planning out the infrastructure. I’ve designed some new UI elements, moved where some state is stored, and so on. I have a bad habit of overplanning, or rather, being too worried about planning big projects like these, because I like to avoid having to do cleanup work later (like the cleanup that I’m doing on the client right now). It’s not strictly a bad habit, but sometimes it’s better to just write the code rather than spend hours deliberating about micro-optimizations with yourself. I believe I am now ACTUALLY at the point where I can begin properly building the UI for the game board and the frontend & backend aspects around that. This was more hidden work (and… fighting with the socket.io client, apparently) so I don’t have too much to show this time either, sadly. BUT, I did finally design and prototype the lobby! So you do get something fun to look at while I work on everything lol"}, {"post_id": 23977, "ts": "2026-07-07T07:00:57Z", "hours": 8.9547, "text": "it’s REDISin’ time! wait is that… not the line from the movie? (also SORRY this should have been at least a couple devlogs lol, please forgive me) I’ve finally been working on the state management for LARPARDY! This turns out to be a MUCH harder task than I originally thought it would be, particularly because I’m trying to make sure that this will be safe and work well in a real environment. Redis First of all, instead of keeping state in the server’s memory, I have added a Redis DB to the project. This is part of why I wanted Docker set up, as this is now just in the docker-compose.yml ! I have NEVER personally used Redis before, so some time of the time from this devlog was admittedly stumbling my way through figuring out how to use Redis correctly. CORRECTLY is the key word, to be clear. I’m building basically a wrapper class around the Redis database, StateManager , which abstracts away the nasty database stuff so the main code doesn’t have to worry about actually interacting with Redis. It was, kind of a pain to write actually (lol?), because I was worried about race conditions basically the entire time, since this code needs to run async (i.e., something else might do something to a thing while we’re also trying to do something with that thing). I HOPE that the state management code is bug free for now, but we’ll see. (please…) Client The client has now also been updated to listen for new game states. I also finally figured out how to set up Rich Presence, so it will show that you’re playing LARPARDY on your profile! In addition, I made it so in-game avatars will highlight green when someone is speaking (like Discord), and I added waiting UI for when a player has joined but hasn’t fully connected yet, AND for when you are still connectin#. so NOWW can we start to make the actual game? yyyyyYES! I think so. I hope, anyway (lol). I believe my next step will be making a basic lobby/waiting UI that lets you start the game, and then finally start to implement the actual game. I AM EXCITEEEEDD (there’s not a ton to look at since this was mostly backend work. sorry! i’ll have more next time :3)"}, {"post_id": 21340, "ts": "2026-07-03T07:04:15Z", "hours": 1.2911, "text": "oops… I wasted some time on accident, woops. I thought Discord’s proxy verification meant that the discordsays.com proxy would send these headers to verify that an actual Discord client had connected with them, but uh, I checked the flowchart again and I got that wrong. Hm. Thankfully, I didn’t get too far into implementing that. Regardless, trying to implement that still encouraged me to do a small bit of cleanup, which was properly declaring the environment variable. A certified moment. (YES I am going to abuse the fact that I figured out that you can use custom emotes here. i am so sorry) smol devlog"}, {"post_id": 21309, "ts": "2026-07-03T05:10:37Z", "hours": 7.3028, "text": "I HATE DOCKER i love Docker!! So, I didn’t even write a devlog yesterday because I spent the entirety of the time that I did have setting up a Dockerfile and docker-compose.yml for LARPARDY. …why did it take that long Because I’ve never used Docker before! Well, I have, to run services on my PC and my homelab server, but I’ve never used it for my own projects before. Specifically, I want to go ahead and set up Docker because I know that I’m going to need a database (or possibly two! SQL + Redis), and running everything together in a container will make both development AND deployment much easier for me. I’ve never used it before, so this is, uh, a learning experience, to say the least. oh also, pnpm Oh. Also. pnpm has a bug. Apparently. I’m using pnpm as the package manager for both the server and the client (since they’re both TypeScript projects). Both projects are stored in a monorepo (literally meaning just a repo with multiple projects, basically), which makes it easy to manage for me and keeps my commits together. Nicely, pnpm recommends a Dockerfile for this exact scenario ! I reconfigured the project to use pnpm ‘s workspaces feature (which… is seperate from package.json ’s workspaces, for some reason ) so that this would work. pnpm deploy is supposed to copy the project with it’s own node_modules since workspaces use a shared one. The problem is that, when it rewrites workspace dependencies (because I have a shared package for both the server & client), it links it to the wrong source, which no longer exists after it’s copied! I tried to debug and get this working for ACTUAL AGES before I gave up and just wrote commands that manually copy the files instead. I figured that there HAS to be a way to get this working, considering the documentation itself recommends this build file. But noooope. It doesn’t seem so (cite: this GitHub issue which has been open since… 2023??? ). so what did you actually do The Docker config works now, and that’s the important thing! I currently have the client build into an nginx image, but I’m either going to drop this entirely or have the server serve the client files itself. This will allow me to implement Discord proxy header verification too, if I decide to."}, {"post_id": 19750, "ts": "2026-07-01T04:19:16Z", "hours": 1.7331, "text": "Socket.IO! As for perhaps one of the most important bits… this is Socket.IO ! I had to figure out how to get this working with Fastify first ( thank you random GitHub commenter ) since that’s my web framework of choice for the backend (for anything not going through Socket.IO), but here’s a basic implementation of it working! what it do? Socket.IO works similarly to (and if it’s available, on top of) WebSockets, where there’s a persistent connection with bi-directional communication between the client and the server. Socket.IO adds some extra fancy things on top of that, such as fallbacks when WebSockets aren’t available and rooms, and in general will make my life easier (lol). This part is, of course, very important for getting a game handled by the backend to work! This will also allow us to do multiplayer. Discord gives you an instance ID for each activity that players are playing together, so I’ll use this to make the rooms, that way players in the same voice channel will end up in the same game!"}, {"post_id": 19673, "ts": "2026-07-01T01:46:04Z", "hours": 5.8181, "text": "ho boy… I’ve wanted to make a Discord Activity basically since the feature began being teased… so, no better time than the present, right? I saw some guys playing Jeopardy the other night and I realized that I feel like the online ways of playing Jeopardy are kinda… uh, bad? I thought I should fix that. I’ve been getting a lot more comfortable with frontend development recently (I’m normally more comfy with backend stuff!), so now this is really going to test my ability to handle FULL STACK development. With that said, I’ve been playing around since last night and I have a working setup with (stable) communication with the Discord client via the SDK. (hooray!) Currently, it just shows the name and avatar of connected players. don’t you love React? Me too! Unfortunately, I am lying. I’m trying Vue.js for the first time for this project. There is a LOT that I’m planning that is very new to me for this project. I expect to need Redis, Socket.IO, and (of course) the Discord activities SDK, none of which I’ve ever used. So, here we go? the name. dude. what. why I didn’t originally have a name for this (the README still remains “Untitled Jeopardy Clone” for now), so I was using the name “Leopardy” as a placeholder. Someone recommened me to switch to LARPARDY. I couldn’t say no. I wish I did. …anyways, next up is actually making some sort of game state work. I’m going to start working on the backend!"}]...
|
Title: LARPARDY! by @purpld | Stardance
Devlogs:
Title: LARPARDY! by @purpld | Stardance
Devlogs:
ho boy… I’ve wanted to make a Discord Activity basically since the feature began being teased… so, no better time than the present, right? I saw some guys playing Jeopardy the other night and I realized that I feel like the online ways of playing Jeopardy are kinda… uh, bad? I thought I should fix that. I’ve been getting a lot more comfortable with frontend development recently (I’m normally more comfy with backend stuff!), so now this is really going to test my ability to handle FULL STACK development. With that said, I’ve been playing around since last night and I have a working setup with (stable) communication with the Discord client via the SDK. (hooray!) Currently, it just shows the name and avatar of connected players. don’t you love React? Me too! Unfortunately, I am lying. I’m trying Vue.js for the first time for this project. There is a LOT that I’m planning that is very new to me for this project. I expect to need Redis, Socket.IO, and (of course) the Discord activities SDK, none of which I’ve ever used. So, here we go? the name. dude. what. why I didn’t originally have a name for this (the README still remains “Untitled Jeopardy Clone” for now), so I was using the name “Leopardy” as a placeholder. Someone recommened me to switch to LARPARDY. I couldn’t say no. I wish I did. …anyways, next up is actually making some sort of game state work. I’m going to start working on the backend!
Socket.IO! As for perhaps one of the most important bits… this is Socket.IO ! I had to figure out how to get this working with Fastify first ( thank you random GitHub commenter ) since that’s my web framework of choice for the backend (for anything not going through Socket.IO), but here’s a basic implementation of it working! what it do? Socket.IO works similarly to (and if it’s available, on top of) WebSockets, where there’s a persistent connection with bi-directional communication between the client and the server. Socket.IO adds some extra fancy things on top of that, such as fallbacks when WebSockets aren’t available and rooms, and in general will make my life easier (lol). This part is, of course, very important for getting a game handled by the backend to work! This will also allow us to do multiplayer. Discord gives you an instance ID for each activity that players are playing together, so I’ll use this to make the rooms, that way players in the same voice channel will end up in the same game!
I HATE DOCKER i love Docker!! So, I didn’t even write a devlog yesterday because I spent the entirety of the time that I did have setting up a Dockerfile and docker-compose.yml for LARPARDY. …why did it take that long Because I’ve never used Docker before! Well, I have, to run services on my PC and my homelab server, but I’ve never used it for my own projects before. Specifically, I want to go ahead and set up Docker because I know that I’m going to need a database (or possibly two! SQL + Redis), and running everything together in a container will make both development AND deployment much easier for me. I’ve never used it before, so this is, uh, a learning experience, to say the least. oh also, pnpm Oh. Also. pnpm has a bug. Apparently. I’m using pnpm as the package manager for both the server and the client (since they’re both TypeScript projects). Both projects are stored in a monorepo (literally meaning just a repo with multiple projects, basically), which makes it easy to manage for me and keeps my commits together. Nicely, pnpm recommends a Dockerfile for this exact scenario ! I reconfigured the project to use pnpm ‘s workspaces feature (which… is seperate from package.json ’s workspaces, for some reason ) so that this would work. pnpm deploy is supposed to copy the project with it’s own node_modules since workspaces use a shared one. The problem is that, when it rewrites workspace dependencies (because I have a shared package for both the server & client), it links it to the wrong source, which no longer exists after it’s copied! I tried to debug and get this working for ACTUAL AGES before I gave up and just wrote commands that manually copy the files instead. I figured that there HAS to be a way to get this working, considering the documentation itself recommends this build file. But noooope. It doesn’t seem so (cite: this GitHub issue which has been open since… 2023??? ). so what did you actually do The Docker config works now, and that’s the important thing! I currently have the client build into an nginx image, but I’m either going to drop this entirely or have the server serve the client files itself. This will allow me to implement Discord proxy header verification too, if I decide to.
oops… I wasted some time on accident, woops. I thought Discord’s proxy verification meant that the discordsays.com proxy would send these headers to verify that an actual Discord client had connected with them, but uh, I checked the flowchart again and I got that wrong. Hm. Thankfully, I didn’t get too far into implementing that. Regardless, trying to implement that still encouraged me to do a small bit of cleanup, which was properly declaring the environment variable. A certified moment. (YES I am going to abuse the fact that I figured out that you can use custom emotes here. i am so sorry) smol devlog
it’s REDISin’ time! wait is that… not the line from the movie? (also SORRY this should have been at least a couple devlogs lol, please forgive me) I’ve finally been working on the state management for LARPARDY! This turns out to be a MUCH harder task than I originally thought it would be, particularly because I’m trying to make sure that this will be safe and work well in a real environment. Redis First of all, instead of keeping state in the server’s memory, I have added a Redis DB to the project. This is part of why I wanted Docker set up, as this is now just in the docker-compose.yml ! I have NEVER personally used Redis before, so some time of the time from this devlog was admittedly stumbling my way through figuring out how to use Redis correctly. CORRECTLY is the key word, to be clear. I’m building basically a wrapper class around the Redis database, StateManager , which abstracts away the nasty database stuff so the main code doesn’t have to worry about actually interacting with Redis. It was, kind of a pain to write actually (lol?), because I was worried about race conditions basically the entire time, since this code needs to run async (i.e., something else might do something to a thing while we’re also trying to do something with that thing). I HOPE that the state management code is bug free for now, but we’ll see. (please…) Client The client has now also been updated to listen for new game states. I also finally figured out how to set up Rich Presence, so it will show that you’re playing LARPARDY on your profile! In addition, I made it so in-game avatars will highlight green when someone is speaking (like Discord), and I added waiting UI for when a player has joined but hasn’t fully connected yet, AND for when you are still connectin#. so NOWW can we start to make the actual game? yyyyyYES! I think so. I hope, anyway (lol). I believe my next step will be making a basic lobby/waiting UI that lets you start the game, and then finally start to implement the actual game. I AM EXCITEEEEDD (there’s not a ton to look at since this was mostly backend work. sorry! i’ll have more next time :3)
socket.io is cool, BUT So. 8 hour devlog, my bad, but I’m going to start by talking about the thing that I’ve been mostly fighting with today. The networking backend that I’m using for LARPARDY is Socket.IO , which works similarly to (and usually on top of) WebSockets, but with a lot more quality of life features and ease of use for specifically these kinds of situations. I have been fighting for a few hours today trying to figure out why I could not, for the life of me, get socket.emit to work on the client. It was, in fact, one setting, retries , in the client config, stopping it from working, for SOME reason. Oops. Anyways… PROGRESS! (GAME!) Progress has been steady! Most of the changes that I’ve been making have been making the client more workable as I make new components, and actually more planning out the infrastructure. I’ve designed some new UI elements, moved where some state is stored, and so on. I have a bad habit of overplanning, or rather, being too worried about planning big projects like these, because I like to avoid having to do cleanup work later (like the cleanup that I’m doing on the client right now). It’s not strictly a bad habit, but sometimes it’s better to just write the code rather than spend hours deliberating about micro-optimizations with yourself. I believe I am now ACTUALLY at the point where I can begin properly building the UI for the game board and the frontend & backend aspects around that. This was more hidden work (and… fighting with the socket.io client, apparently) so I don’t have too much to show this time either, sadly. BUT, I did finally design and prototype the lobby! So you do get something fun to look at while I work on everything lol
I prototyped the game board last night! This took a while to get the styling right as I want this to work well on all screen sizes, hopefully including mobile devices. It’s still a little rough on very small sizes (e.g., my phone), but one step at a time! I still want to add little “podiums” at the bottom for our players. After that, I’m going to be working on getting the board working on the serverside, so that actually becomes part of the game state.
BEEEG DEVLOG Wowwee! I’ve gotta remember to make devlogs more often. Seriously. Here’s a list of changes that I’ve made since my last devlog! The basics of the board are implemented! You can’t interact with it yet, but the template to do so is there, and it now exists on the server-side too and the client reads from that state. The board is also animated now. When someone selects a clue, it will highlight the category and the clue, you can hover clues, and, my favorite bit, the categories get revealed one by one when the game starts! That last part actually kind of sucked to implement lol. I prepared for this when making the lobby’s ready up system and made the state that it uses to work a bit dynamic because I knew that I would need it! The state stores readyForNextState , which for some states (like when we’re in the lobby) allow unreadying, but for others, simply act as a marker of whether a specific client is ready to move on. This is probably actually really important because if we just ran a timer on the server, a NUMBER of things could go wrong, most importantly being that a laggy client could get desynced VERY quickly and have a bad time. Alongside this, there is an intro now! I spent a good bit of time in Aseprite and messing with FL Studio to make some art and an intro track, both for the logo and so I finally have some artwork to add in the Discord Developer Portal, so there aren’t anymore blank assets. It’s not perfect (i am NOT an artist lol) See pictures below! psst , I also made a “think” music track for if the final round is enabled! It’s not in the game yet, though. I made a number of styling fixes. The board in particular looks much better on different screen sizes now, even on my phone. Reminder to use relative sizes when able, not px ! The server now registers the activity entry point command as having an APP_HANDLER handler, which means that the server must respond to interactions now, rather than Discord autolaunching the activity. The benefit of this is that we have control over whether a message gets sent to the channel it was started in (and when), or if we even launch the activity at all (disallow banned users? anything is possible…)! The rich presence actually has meaningful details now lol, rather than placeholder text. NOWWW what? I am going to, FINALLY, FOR REAL THIS TIME, (lol) actually start making the game logic. (It’s about time!) More updates sooooon!
A REAL BOARD! A trickier task than it sounds like, but I needed some clues finally! The default testing board was uh… not exactly “production ready” in my opinion (lol). This was tricky particularly because, well, where am I going to get clues from? You kinda need a LOT of clues for a good Jeopardy game, and while UGC is something I want to make, I would like a default mode, too, and there is certainly no way that I was going to try to make a bunch of clues by myself. (respectfully, I don’t think I am also smart enough to do that lol) Jepp I found a little project called jepp which exposes a LOT of existing Jeopardy clues through an API. I didn’t want to bother that API too much though, and there is an SQLite DB dump publicly available, so LARPARDY now uses that instead. With a little bit of SQL later (and, uh, remembering how to use SQL lol)… we have many, many clues! The only thing is that the database does not store the value of clues, so it’ll be a bit random. A $1000 clue might end up being super easy lol, but I think that’s some jank I’m okay with. Player list Ooh also, I made a proper player list now! I did want literal podiums, which I may still do at some point, but I’m happy with this for the time being. This can now also react to changes in the game like points or who’s turn it is!
Questions, and MORE boring serverside stuffs Oof, sorry, it’s been a while since I’ve been able to work on this project, and the clock is ticking! Clues! Clues can now actually be selected and that will be reflected to the server and all players. You can also see a bit of the buzzer work I started, which is actually much more of a pain than it would seem. Why? Well that’s because we now have to talk about: SYNCING TIME OVER THE NETWORK The server running the game has a system time. Your computer, phone, or whatever, also has its own system time which could vary entirely from the server’s. If the server wants to schedule an event (say, when you should be allowed to buzz in), how does it tell the client when that is without an offset? Using Unix timestamps is common, but without knowing how offset the client is from the server, we don’t actually really know when that timestamp is in reality (since EITHER could be offset from reality, if not both), and we don’t want mismatched times to cause weird problems. The solution that I went with is that the client will periodically (every 1 second for now) send a “ping” message to the server with its current timestamp. The server will reply with that time as well as it’s own timestamp. Upon receiving that reply, it can then do three things: Calculate the round trip time (i.e., ping!) from the original time we sent and the time it is now. Estimate the server time as we’re processing this by adding the server time + half of the ping Calculate our time offset from the server by subtracting our time from that estimate I admit that I did NOT figure this out on my own. Google is nice. But this does actually kind of serve as the basis for how things like the Network Time Protocol (NTP) work. Reminder that all of that is just so we can show when the buzzer is allowed to be pressed accurately. Spectating Also, I added a fix so late players aren’t actually awkwardly added in the middle of a game and are instead in a kind of “spectator” state; since they’re still connected, they receive all the game state events and so on. If all actual players leave, the game will reset (which also means I now have a function to reset the state, and for showing alerts!).
IT’S READY! I am very happy to say that I’m done with the main game! I wanted to split this into a couple of devlogs, but Stardance was having some issues syncing time earlier so I kept working. (I think it’s actually been up for a little bit… oops) Buzzing -> Judging Judging now is fully functional! Either someone gets the clue right, everyone gets it wrong, or not everybody buzzes in and we move on. I’ve also introduced something called Hostless Mode , which allows the game host to play (where normally they could not). This plays more like most online versions of the gameshow, where you can buzz in, reveal the answer, and then that’s that (instead of everyone getting a chance to buzz in if the first person is wrong). This also gives a way to play singleplayer, which should make it more accessible. All of this took a lot of careful logic work to make sure that everything works as expected (hence the VERY long log time, plus several other things), no matter how you’re playing! End of Line The game, also, can finally end, now that clues get marked off. I made a simple leaderboard that shows when the game is over, and then you can return to the lobby! See the photo below. GAMEPLAY! You can watch a short gameplay example with a host (right) + 2 players (left) below! You’re expected to play with voice (or a text channel, if you wish), so this demo just showcases the flow of the game. I logged a lot of time on this one because there was also a lot of testing and fixing small bugs, especially when making the judging system. A lot can get weird when managing so much state!
SHIP IT! LARPARDY! is now verified on Discord! I spent a short while writing a basic Terms of Service and Privacy Policy (as required by Discord) and verifying all the details. Live deployment I’ve also deployed a production version of the game server to my home lab! It’s exposed through a Cloudflare Tunnel, because I’m behind CGNAT (i.e., I don’t have my own public IP). Spending all that time setting up Docker for this project all that time ago made this VERY easy, which was the entire point. I’m glad nothing broke in the process… lol Discovery The last thing I want to do is set up Discovery on Discord, so reviewers (and anybody, for that matter!) can just search up LARPARDY! in Discord, and it should come up. I pretty much just need to make a support server and write the details, and then… LET’S SHIP IT! I dunno if anybody reads these things, but if you do, thank you. :D
Last devlog before ship (proper this time!) Discovery I set up a Discord server for the game, so LARPARDY! is now on Discord’s discovery (App Directory)! This is now used for the demo link for the game. README (please) Just spent some time redoing the (ancient) README and making it look pretty and detailed. I took some screenshots and added them here. They also show up on Discord! :D
Ships:
I made a Discord activity trivia game inspired by the Jeopardy game show called LARPARDY! that you can easily play with your friends without leaving Discord! I am very proud of how far this project has come because it was very challenging for me. The frontend is based on Vue.js, which before this, I had never used before. I wanted to try something non-React and I’ve come to REALLY love Vue. I had to write multiplayer netcode entirely by myself! I used Socket.IO to handle the networking itself, but I had to write ALL of the state management and syncing code. There were certainly some difficulties in doing so! I also have not worked with Redis before, which was my database of choice for state management. It is… quite different from other databases, so writing code to interact with it was a learning experience....
|
1793443686.8133142
|
1793530086.8133142
|
|
49104
|
Ronaldo OS by @Srithan | Stardance
|
Srithan
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T11:16:42Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Ronaldo OS, a football-themed WebOS inspired by Cristiano Ronaldo. It runs directly in the browser and includes draggable windows, a live clock, a CR7 Journal, and an interactive CR7 career timeline. The biggest challenge was turning the separate HTML, CSS, and JavaScript pieces into one working desktop experience and getting everything deployed through GitHub Pages. I’m most proud of creating something that feels like an actual themed operating system rather than just a normal webpage. People testing it should try opening the CR7 Journal and CR7 Timeline, dragging the windows around, and interacting with the different applications.", "repo": "https://github.com/Srithan7211/RonaldoOS", "demo": "https://srithan7211.github.io/RonaldoOS/"}]...
|
[{"post_id": 54943, "ts": "202 [{"post_id": 54943, "ts": "2026-08-26T11:12:21Z", "hours": 0.6478, "text": "I finished the main development of Ronaldo OS and moved the project from Codespaces to a live GitHub Pages deployment. I completed the HTML structure, JavaScript interactions, and CSS styling, and connected the different parts of the WebOS together. The OS now has a Ronaldo-themed desktop, live clock, draggable windows, CR7 Journal, and an interactive CR7 career timeline. I also added my own football-themed design and background instead of simply following the guide’s example. The biggest milestone was finally deploying Ronaldo OS successfully to GitHub Pages and testing the live version in the browser. The project is now functional and publicly accessible."}, {"post_id": 52838, "ts": "2026-08-23T06:10:39Z", "hours": 1.0456, "text": "I’ve moved from the basic HTML structure into making Ronaldo OS actually interactive. I finished the main JavaScript logic for the project, which is a big step from the static structure I had in my first devlog. The OS now has the foundation needed for its windows and applications to respond to user interactions. I also continued building the CR7 Journal and CR7 Timeline so they can function as actual applications inside the WebOS rather than just being placeholders. The next stage is to polish the interface, improve the individual applications, and make the whole experience feel more like a real football-themed operating system."}, {"post_id": 52786, "ts": "2026-08-23T04:03:19Z", "hours": 0.3428, "text": "I started building my own WebOS for the Hack Club WebOS Jam. I wanted to make something different from a generic desktop, so I decided to build the entire OS around football and create a Ronaldo-themed experience. I started by creating the basic desktop structure, including the top bar, football mode indicator, clock, desktop icons, and my first welcome window. I also added the first two applications I want to build: CR7 Journal and CR7 Timeline. I’m now working on turning these basic elements into a fully interactive WebOS with draggable windows and football-themed applications."}]...
|
Title: Ronaldo OS by @Srithan | Stardance
Devlogs Title: Ronaldo OS by @Srithan | Stardance
Devlogs:
I started building my own WebOS for the Hack Club WebOS Jam. I wanted to make something different from a generic desktop, so I decided to build the entire OS around football and create a Ronaldo-themed experience. I started by creating the basic desktop structure, including the top bar, football mode indicator, clock, desktop icons, and my first welcome window. I also added the first two applications I want to build: CR7 Journal and CR7 Timeline. I’m now working on turning these basic elements into a fully interactive WebOS with draggable windows and football-themed applications.
I’ve moved from the basic HTML structure into making Ronaldo OS actually interactive. I finished the main JavaScript logic for the project, which is a big step from the static structure I had in my first devlog. The OS now has the foundation needed for its windows and applications to respond to user interactions. I also continued building the CR7 Journal and CR7 Timeline so they can function as actual applications inside the WebOS rather than just being placeholders. The next stage is to polish the interface, improve the individual applications, and make the whole experience feel more like a real football-themed operating system.
I finished the main development of Ronaldo OS and moved the project from Codespaces to a live GitHub Pages deployment. I completed the HTML structure, JavaScript interactions, and CSS styling, and connected the different parts of the WebOS together. The OS now has a Ronaldo-themed desktop, live clock, draggable windows, CR7 Journal, and an interactive CR7 career timeline. I also added my own football-themed design and background instead of simply following the guide’s example. The biggest milestone was finally deploying Ronaldo OS successfully to GitHub Pages and testing the live version in the browser. The project is now functional and publicly accessible.
Ships:
I built Ronaldo OS, a football-themed WebOS inspired by Cristiano Ronaldo. It runs directly in the browser and includes draggable windows, a live clock, a CR7 Journal, and an interactive CR7 career timeline. The biggest challenge was turning the separate HTML, CSS, and JavaScript pieces into one working desktop experience and getting everything deployed through GitHub Pages. I’m most proud of creating something that feels like an actual themed operating system rather than just a normal webpage. People testing it should try opening the CR7 Journal and CR7 Timeline, dragging the windows around, and interacting with the different applications....
|
1793443696.4974127
|
1793530096.4974127
|
|
50767
|
My very own WebOS by @Dexpate | Stardance
|
Dexpate
|
1
|
2.65
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-25T12:08:57Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The Origin Story of V.A.Y.U. Every great software begins with a spark of frustration or a wild “what if?” thought. For V.A.Y.U. the question was simple: Why must a portfolio or project showcase look like every other dull static scrolling website on the internet? As a developer who loves low-level systems programming, clean web design and building things from scratch Dennis wanted something that felt alive. Not only a page of text. A living environment—a digital space that shows how a real programmer thinks. So V.A.Y.U. (Personal Web Operating System) was born. Phase 1: Laying the Foundations The journey began with HTML5, CSS3 and Vanilla JavaScript. Than using heavy frontend frameworks the core architecture of V.A.Y.U. Was built from scratch. The Desktop Environment: The first challenge was building a working desktop. A translucent blurred top bar (filter) was designed with a live clock to give it a real modern OS feel. The Window Manager (z-index & Dragging): Creating windows was simple. Making them act like a real OS was hard. Dennis built a custom dragging system that followed mouse coordinates (clientX/clientY) and handled CSS transforms. With a z-index layering (biggestIndex) clicking any window or icon lifts it to the front so windows never hide behind the top bar. Phase 2: Building the Native App Ecosystem A desktop is nothing without apps to run on it. Over iterations Dennis expanded V.A.Y.U. From a simple welcome screen into a feature-rich operating system: V.A.Y.U. Logs (Notes App): A dynamic notes manager that fills itself from JavaScript objects with a clean interactive sidebar. Tech Stack Showcase: A window that lists developer architectures, system tools and project goals. Terminal CLI (>_): A command-line interface that handles real system commands such as help, bio, skills, projects and clear. Sketchpad App: A tribute to his love of drawing with an HTML5 canvas where visitors can sketch directly inside the OS. VibePlayer (Music & Video Apps): media players with custom audio and video streams, progress bars and volume sliders. StickyPad: A scratchpad that uses browser memory (localStorage) to auto‑save temporary code ideas. Code Playground & StardustMiner: A multi‑language snippet sandbox (JavaScript, Python, C++). An interactive hacking minigame where users mine “stardust” points. Settings Control Center: A hub that cycles wallpapers, shows system specs and toggles between classic looks and a futuristic Neon Mode. Phase 3: The Philosophy Behind V.A.Y.U. V.A.Y.U. Is not a set of code snippets inside window divs; it reflects Dennis’s journey, as a student and builder. Balancing school, board exam prep and late‑night coding V.A.Y.U. Shows disciplined execution. Each feature was added deliberately pushing what plain web technologies can do without weight. Today, V.A.Y.U. Stands fully realized: a glassmorphism‑styled interactive operating system that runs right inside the browser. It shows that with logic, creativity and steady pace a blank screen can become an entire digital universe.", "repo": "https://github.com/dennispathe123/vayu-webos", "demo": "https://dennispathe123.github.io/vayu-webos/"}]...
|
[{"post_id": 66401, "ts": "202 [{"post_id": 66401, "ts": "2026-09-12T06:48:21Z", "hours": 1.6533, "text": "Spent today fixing a bunch of annoying bugs that made the OS feel broken whenever I tried using it. The dock was totally messed up—the icons were invisible because of some dumb CSS hover and pointer-events bug, so I had no idea what I was clicking on. Fixed it so the emojis and app names actually stay visible at the bottom, and added little glowing blue dots under them so I know what’s open. Made minimize and maximize work properly. Before this, closing and opening windows would glitch out and reset their spots, which was super annoying. Fixed the window dragging. If I dragged a window too high, the header would get stuck under the top bar forever. Added a quick check in the code so it physically can’t go above 38px now. Added real sound to VibePlayer. I didn’t want to mess with broken MP3 links or CORS errors, so I used the browser’s built-in AudioContext to make raw synth beeps using oscillators. You can slide the pitch slider and it actually changes live. Had to fight Git for a bit because my local repo was out of sync with GitHub, but rebased it, pushed everything, and updated the README. Feels way smoother to click around now!"}, {"post_id": 54391, "ts": "2026-08-25T12:04:09Z", "hours": 0.2603, "text": "During this project I built V.A.Y.U. From the ground up. V.A.Y.U. Is an operating system that runs right in your web browser. I used HTML5, CSS3 and Vanilla JavaScript to make V.A.Y.U. Feel like a desktop. It has windows you can move icons you can click and apps that work like a real computer. Desktop. Top Bar: I made a desktop grid that keeps all the icons lined up neatly. There is a top bar at the top of the screen that uses a blur effect. This top bar has a clock, a way to change the wallpaper and a button to switch to Neon Theme Mode. Window Management System: I worked hard on the window management. I added layers so windows sit on top of each other correctly. I also added custom drag mechanics and smooth animations moving apps around the screen feels natural. Complete Native App Suite: V.A.Y.U. Logs (Notes App): This is a notes app. It uses JavaScript to pull in notes and shows them in a sidebar. Projects Showcase: This window lets you see my tech stack and what I want to build Terminal CLI: This is a command-line tool. You can type commands like help, bio, skills, projects and clear to make it work. Sketchpad App: I built a drawing tool using an HTML5 canvas so you can sketch things out. VibePlayer (Music & Video Stream Apps): These are media players. You can play music or videos using custom controls, volume sliders and progress bars. StickyPad: This is a scratchpad. It saves your code notes to your browser memory so you do not lose them. Stardustminer: The Playground is a sandbox where you can see code snippets. StardustMiner is a hacking game that you can play. Settings Control Center: This is the control panel. You can use the Settings Control Center to change how the system looks, cycle, through wallpapers or check system diagnostics."}, {"post_id": 53854, "ts": "2026-08-24T15:37:44Z", "hours": 0.3389, "text": "During this batch I built V.A.Y.U.—a browser‑based personal operating system that I coded from scratch with HTML5, CSS3 and Vanilla JavaScript.V.A.Y.U. Goes beyond a portfolio. V.A.Y.U. Creates a real desktop feel with custom windows, movable UI parts, a clock in the top bar and apps that look and act like real ones:Desktop & Top Bar: A clean dark‑mode desktop, a translucent blurred top bar that uses backdrop‑filter, a clock that stays up‑to‑date and a wallpaper changer.Window Management System: I added z‑index layers and custom event listeners so windows glide smoothly come to the front when clicked and open or close without a glitch.Custom App Suite:V.A.Y.U. Logs (Notes App): A notes manager that builds itself from JavaScript objects with a sidebar.Tech Stack Showcase: A window that shows my tech stack and the structure of my projects.Terminal CLI: A working command line that accepts commands such as help, bio, skills, projects and clear.Sketchpad App: An HTML5 drawing canvas that lets me sketch and prototype, on the fly.Settings Control Center: A main panel where I can change the look set wallpaper cycles and check OS diagnostics."}, {"post_id": 49498, "ts": "2026-08-18T11:24:00Z", "hours": 0.3231, "text": "completed the my app in the vayuos"}]...
|
Title: My very own WebOS by @Dexpate | Stardance
Title: My very own WebOS by @Dexpate | Stardance
Devlogs:
completed the my app in the vayuos
During this batch I built V.A.Y.U.—a browser‑based personal operating system that I coded from scratch with HTML5, CSS3 and Vanilla JavaScript.V.A.Y.U. Goes beyond a portfolio. V.A.Y.U. Creates a real desktop feel with custom windows, movable UI parts, a clock in the top bar and apps that look and act like real ones:Desktop & Top Bar: A clean dark‑mode desktop, a translucent blurred top bar that uses backdrop‑filter, a clock that stays up‑to‑date and a wallpaper changer.Window Management System: I added z‑index layers and custom event listeners so windows glide smoothly come to the front when clicked and open or close without a glitch.Custom App Suite:V.A.Y.U. Logs (Notes App): A notes manager that builds itself from JavaScript objects with a sidebar.Tech Stack Showcase: A window that shows my tech stack and the structure of my projects.Terminal CLI: A working command line that accepts commands such as help, bio, skills, projects and clear.Sketchpad App: An HTML5 drawing canvas that lets me sketch and prototype, on the fly.Settings Control Center: A main panel where I can change the look set wallpaper cycles and check OS diagnostics.
During this project I built V.A.Y.U. From the ground up. V.A.Y.U. Is an operating system that runs right in your web browser. I used HTML5, CSS3 and Vanilla JavaScript to make V.A.Y.U. Feel like a desktop. It has windows you can move icons you can click and apps that work like a real computer. Desktop. Top Bar: I made a desktop grid that keeps all the icons lined up neatly. There is a top bar at the top of the screen that uses a blur effect. This top bar has a clock, a way to change the wallpaper and a button to switch to Neon Theme Mode. Window Management System: I worked hard on the window management. I added layers so windows sit on top of each other correctly. I also added custom drag mechanics and smooth animations moving apps around the screen feels natural. Complete Native App Suite: V.A.Y.U. Logs (Notes App): This is a notes app. It uses JavaScript to pull in notes and shows them in a sidebar. Projects Showcase: This window lets you see my tech stack and what I want to build Terminal CLI: This is a command-line tool. You can type commands like help, bio, skills, projects and clear to make it work. Sketchpad App: I built a drawing tool using an HTML5 canvas so you can sketch things out. VibePlayer (Music & Video Stream Apps): These are media players. You can play music or videos using custom controls, volume sliders and progress bars. StickyPad: This is a scratchpad. It saves your code notes to your browser memory so you do not lose them. Stardustminer: The Playground is a sandbox where you can see code snippets. StardustMiner is a hacking game that you can play. Settings Control Center: This is the control panel. You can use the Settings Control Center to change how the system looks, cycle, through wallpapers or check system diagnostics.
Spent today fixing a bunch of annoying bugs that made the OS feel broken whenever I tried using it. The dock was totally messed up—the icons were invisible because of some dumb CSS hover and pointer-events bug, so I had no idea what I was clicking on. Fixed it so the emojis and app names actually stay visible at the bottom, and added little glowing blue dots under them so I know what’s open. Made minimize and maximize work properly. Before this, closing and opening windows would glitch out and reset their spots, which was super annoying. Fixed the window dragging. If I dragged a window too high, the header would get stuck under the top bar forever. Added a quick check in the code so it physically can’t go above 38px now. Added real sound to VibePlayer. I didn’t want to mess with broken MP3 links or CORS errors, so I used the browser’s built-in AudioContext to make raw synth beeps using oscillators. You can slide the pitch slider and it actually changes live. Had to fight Git for a bit because my local repo was out of sync with GitHub, but rebased it, pushed everything, and updated the README. Feels way smoother to click around now!
Ships:
The Origin Story of V.A.Y.U. Every great software begins with a spark of frustration or a wild “what if?” thought. For V.A.Y.U. the question was simple: Why must a portfolio or project showcase look like every other dull static scrolling website on the internet? As a developer who loves low-level systems programming, clean web design and building things from scratch Dennis wanted something that felt alive. Not only a page of text. A living environment—a digital space that shows how a real programmer thinks. So V.A.Y.U. (Personal Web Operating System) was born. Phase 1: Laying the Foundations The journey began with HTML5, CSS3 and Vanilla JavaScript. Than using heavy frontend frameworks the core architecture of V.A.Y.U. Was built from scratch. The Desktop Environment: The first challenge was building a working desktop. A translucent blurred top bar (filter) was designed with a live clock to give it a real modern OS feel. The Window Manager (z-index & Dragging): Creating windows was simple. Making them act like a real OS was hard. Dennis built a custom dragging system that followed mouse coordinates (clientX/clientY) and handled CSS transforms. With a z-index layering (biggestIndex) clicking any window or icon lifts it to the front so windows never hide behind the top bar. Phase 2: Building the Native App Ecosystem A desktop is nothing without apps to run on it. Over iterations Dennis expanded V.A.Y.U. From a simple welcome screen into a feature-rich operating system: V.A.Y.U. Logs (Notes App): A dynamic notes manager that fills itself from JavaScript objects with a clean interactive sidebar. Tech Stack Showcase: A window that lists developer architectures, system tools and project goals. Terminal CLI (>_): A command-line interface that handles real system commands such as help, bio, skills, projects and clear. Sketchpad App: A tribute to his love of drawing with an HTML5 canvas where visitors can sketch directly inside the OS. VibePlayer (Music & Video Apps): media players with custom audio and video streams, progress bars and volume sliders. StickyPad: A scratchpad that uses browser memory (localStorage) to auto‑save temporary code ideas. Code Playground & StardustMiner: A multi‑language snippet sandbox (JavaScript, Python, C++). An interactive hacking minigame where users mine “stardust” points. Settings Control Center: A hub that cycles wallpapers, shows system specs and toggles between classic looks and a futuristic Neon Mode. Phase 3: The Philosophy Behind V.A.Y.U. V.A.Y.U. Is not a set of code snippets inside window divs; it reflects Dennis’s journey, as a student and builder. Balancing school, board exam prep and late‑night coding V.A.Y.U. Shows disciplined execution. Each feature was added deliberately pushing what plain web technologies can do without weight. Today, V.A.Y.U. Stands fully realized: a glassmorphism‑styled interactive operating system that runs right inside the browser. It shows that with logic, creativity and steady pace a blank screen can become an entire digital universe....
|
1793443702.3218923
|
1793530102.3218923
|
|
6861
|
Evolution Simulator by @charr2028 | Stardance
|
charr2028
|
1
|
11.0
|
66
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-10T16:39:39Z", "hours": 11.0, "multiplier": 5.97, "payout": 66, "blessing": "neutral", "text": "I have finally finished my evolution simulator! It is browser based and hosted on GitHub pages. I made it using Vanilla JavaScript, HTML, and CSS. The main issue I encountered was major population spikes that I could not for the life of me figure out, but in the end it turned out I was just seriously overcomplicating things lol! I thought it was some kind of bug, but all I needed to do was increase the breeding cooldown. I am very proud of this project, because the making of this was so smooth for one of my bigger projects! Sure there were bugs, but I was fairly easily able to fix most of them with some console logs and elbow grease. There were only a few that I needed some external help identifying, but ChatGPT quickly pointed out the faulty code. Once I knew where the problems were at I could fix them no problem. I’m also proud of how quickly I could whip up my HTML layout and CSS styling, and the movement animation and grid generation too. I thought they would be super hard to do, but then they worked, like, first try lol. I feel like everything is pretty obvious, but just in case… The slider adjusts the speed of the simulation. To regenerate the environment and reset the simulation, refresh the page. There are 5 important colors in the simulator: Red. This is for food sources. Light Blue. This is for water sources. Dark Blue. This is for male pixel creatures. Pink. This is for female pixel creatures. Green. This is for disease cells. (my beautiful plague children <3)", "repo": "https://github.com/P1x3l-W0lf/evolution_simulator", "demo": "https://p1x3l-w0lf.github.io/evolution_simulator/"}]...
|
[{"post_id": 6250, "ts": "2026 [{"post_id": 6250, "ts": "2026-06-10T14:38:36Z", "hours": 0.6667, "text": "I added the speed adjustment slider! Now you don’t have to be bored to tears watching the little pixels crawl around the grid lol! It was harder than I thought it would be. Apparently setInterval does not update the timeout without a bunch of intervention. Also, I got a picture with the disease pixels that I mentioned in my last devlog. Behold my green little plague children!"}, {"post_id": 6003, "ts": "2026-06-10T02:08:53Z", "hours": 4.5697, "text": "I made a lot of changes and forgot to post devlogs…. I also realized that I have been forgetting to update the github repo as I work… oopsies! 😅 ======= This one’s gonna be a long one! I tried making it so only the males could look for mates or produce offspring (Fun Fact: I made it so the males were the one’s who had the babies, just like seahorses!), I added a large breed timeout so that they couldn’t just breed again and again right away, and lots and lots of other ways to reduce the population spikes, but none of them really worked. So instead I introduced a way to quickly kill of large groups so that they wouldn’t fill the whole grid. Disease! ======= To kinda replicate what happens irl when populations of a species get too dense, I added a sickness that targets and kills any of the creatures it comes into contact with. I did not think to get a picture of them for some reason 🤦♀️ but they work very similar to the pixel creatures, except that there is no hunger or thirst factors, they are lime green, and I actually put the effort into giving them a function to assess the surrounding pixels and determine if there is something of interest in that area. If they find something they want to get closer to, namely creatures they want to contaminate, then they will start heading in that direction. ======= The disease helped keep the population lower, but it still let the creatures reproduce too quickly so I also put a cap on how high the population will get before going temporarily infertile. They were still hitting the threshold for infertility very quickly and the population rarely if ever got low enough to fully eliminate the disease. ======= I was kinda tired of wrestling with the crazy overbreeding bugs by now, so I moved on to some other bugs and fine tuning. I gave the creatures the ability to assess their surroundings, just like the disease cells, and get up close to food, water, and eligible mates instead of just completing their respective interactions from a long distance. In doing so I ended up scrapping my initial attempt at a “search” function so that I could optimize my code a bit. I screwed it up so bad that the creatures didn’t even spawn anymore! I tried fixing a few things, but could not for the life of me figure out how to fix the glaring frontend issues. I had ChatGPT take a look at my code, and it pointed out about a gazillion different errors it found. After fixing those up, I got the creatures back and my code working again. The population spikes were a bit better too because one of the errors it pointed out was that I was only checking whether the males’ breed timeout was finished, not the females’, so they could immediately breed with the next male they came across. Adding a cool down to the females helped a ton, plus I made the cooldown drop by 0.5 per second instead of 1 per second. I also added a visual representation of the stats into the HTML page so that users can see the population evolve instead of just taking my word for it lol. All I think it needs now is an option to speed up the simulation since it is pretty slow and can get very boring very quickly."}, {"post_id": 5002, "ts": "2026-06-08T17:29:15Z", "hours": 2.8483, "text": "Added a lot of features, discovered so many bugs ToT I made food and water sources, represented by the big red and blue squares, which the creatures will search for if their hunger or thirst levels get too low. If either of those levels hit zero, the creature dies and gets removed from the board. This introduced some errors because I had to remove the creature from the dictionary holding it, leaving a gap in my numerically organized keys. I tried solving this by adding the deleted key to a list of open keys that will be reused when creating new creatures instead of just randomly generating a new one. I’m still not sure if it worked though, because… The mating feature is so broken. I made it so that the creatures are either AFAB or AMAB, and they are color coded accordingly (pink for female, blue for male). I’m thinking about adding a third gender that can reproduce asexually, but that’s a task for future me lol. Right now they will immediately reproduce with any creature of the opposite gender within range if they’re above critical hunger and thirst levels. This is a problem because now they are making so many babies that they are freezing the window! I need to fix it so that I can properly debug the code and see if my fix for the death errors is actually working. Plus there is a whole wall of error messages in the console before it freezes up, so I need to decipher and fix those too. I’ve got my work cut out for me!"}, {"post_id": 2391, "ts": "2026-06-04T20:56:30Z", "hours": 1.9311, "text": "Added basic pixel creatures! I made them bright pink now instead of just plain white, but also might change that in the future. I created a JS creature class (OOP is so much easier in JS than Python!) so that I could make lots of creatures with less code and I added movement logic. Right now they pick a random direction to go in, and I have them looped so that they will keep going in that direction for a few steps before picking a new one. This prevents them from just moving back and forth and it also makes it look better to have them make a little progress before turning around. I added edge and object detection logic so that they don’t go off the grid and they won’t walk on each other. Now I need to add hunger, thirst, and death detection along with sources of water and food."}, {"post_id": 1849, "ts": "2026-06-04T01:59:11Z", "hours": 1.01, "text": "Started the project, already made a good amount of progress! I haven’t coded in a while so it took me a bit to remember some of the basic things, like using src in the HTML script tag instead of link or href lol (that one always trips me up if it’s been a while!). Other than small setbacks like that, it’s been almost concerningly bug free. I got my CSS settings to make a permanently dark mode grid layout, and I used JS to add 1600 div elements to a container div, creating a 40x40 grid of cells. The white cell is the beginnings of one of the pixel creatures. Right now it doesn’t do anything, but I’m about to start on the movement function to make it walk around the grid so it can eventually look for food, water, and other creature pixels. Wish me luck!"}]...
|
Title: Evolution Simulator by @charr2028 | Stardan Title: Evolution Simulator by @charr2028 | Stardance
Devlogs:
Started the project, already made a good amount of progress! I haven’t coded in a while so it took me a bit to remember some of the basic things, like using src in the HTML script tag instead of link or href lol (that one always trips me up if it’s been a while!). Other than small setbacks like that, it’s been almost concerningly bug free. I got my CSS settings to make a permanently dark mode grid layout, and I used JS to add 1600 div elements to a container div, creating a 40x40 grid of cells. The white cell is the beginnings of one of the pixel creatures. Right now it doesn’t do anything, but I’m about to start on the movement function to make it walk around the grid so it can eventually look for food, water, and other creature pixels. Wish me luck!
Added basic pixel creatures! I made them bright pink now instead of just plain white, but also might change that in the future. I created a JS creature class (OOP is so much easier in JS than Python!) so that I could make lots of creatures with less code and I added movement logic. Right now they pick a random direction to go in, and I have them looped so that they will keep going in that direction for a few steps before picking a new one. This prevents them from just moving back and forth and it also makes it look better to have them make a little progress before turning around. I added edge and object detection logic so that they don’t go off the grid and they won’t walk on each other. Now I need to add hunger, thirst, and death detection along with sources of water and food.
Added a lot of features, discovered so many bugs ToT I made food and water sources, represented by the big red and blue squares, which the creatures will search for if their hunger or thirst levels get too low. If either of those levels hit zero, the creature dies and gets removed from the board. This introduced some errors because I had to remove the creature from the dictionary holding it, leaving a gap in my numerically organized keys. I tried solving this by adding the deleted key to a list of open keys that will be reused when creating new creatures instead of just randomly generating a new one. I’m still not sure if it worked though, because… The mating feature is so broken. I made it so that the creatures are either AFAB or AMAB, and they are color coded accordingly (pink for female, blue for male). I’m thinking about adding a third gender that can reproduce asexually, but that’s a task for future me lol. Right now they will immediately reproduce with any creature of the opposite gender within range if they’re above critical hunger and thirst levels. This is a problem because now they are making so many babies that they are freezing the window! I need to fix it so that I can properly debug the code and see if my fix for the death errors is actually working. Plus there is a whole wall of error messages in the console before it freezes up, so I need to decipher and fix those too. I’ve got my work cut out for me!
I made a lot of changes and forgot to post devlogs…. I also realized that I have been forgetting to update the github repo as I work… oopsies! 😅 ======= This one’s gonna be a long one! I tried making it so only the males could look for mates or produce offspring (Fun Fact: I made it so the males were the one’s who had the babies, just like seahorses!), I added a large breed timeout so that they couldn’t just breed again and again right away, and lots and lots of other ways to reduce the population spikes, but none of them really worked. So instead I introduced a way to quickly kill of large groups so that they wouldn’t fill the whole grid. Disease! ======= To kinda replicate what happens irl when populations of a species get too dense, I added a sickness that targets and kills any of the creatures it comes into contact with. I did not think to get a picture of them for some reason 🤦♀️ but they work very similar to the pixel creatures, except that there is no hunger or thirst factors, they are lime green, and I actually put the effort into giving them a function to assess the surrounding pixels and determine if there is something of interest in that area. If they find something they want to get closer to, namely creatures they want to contaminate, then they will start heading in that direction. ======= The disease helped keep the population lower, but it still let the creatures reproduce too quickly so I also put a cap on how high the population will get before going temporarily infertile. They were still hitting the threshold for infertility very quickly and the population rarely if ever got low enough to fully eliminate the disease. ======= I was kinda tired of wrestling with the crazy overbreeding bugs by now, so I moved on to some other bugs and fine tuning. I gave the creatures the ability to assess their surroundings, just like the disease cells, and get up close to food, water, and eligible mates instead of just completing their respective interactions from a long distance. In doing so I ended up scrapping my initial attempt at a “search” function so that I could optimize my code a bit. I screwed it up so bad that the creatures didn’t even spawn anymore! I tried fixing a few things, but could not for the life of me figure out how to fix the glaring frontend issues. I had ChatGPT take a look at my code, and it pointed out about a gazillion different errors it found. After fixing those up, I got the creatures back and my code working again. The population spikes were a bit better too because one of the errors it pointed out was that I was only checking whether the males’ breed timeout was finished, not the females’, so they could immediately breed with the next male they came across. Adding a cool down to the females helped a ton, plus I made the cooldown drop by 0.5 per second instead of 1 per second. I also added a visual representation of the stats into the HTML page so that users can see the population evolve instead of just taking my word for it lol. All I think it needs now is an option to speed up the simulation since it is pretty slow and can get very boring very quickly.
I added the speed adjustment slider! Now you don’t have to be bored to tears watching the little pixels crawl around the grid lol! It was harder than I thought it would be. Apparently setInterval does not update the timeout without a bunch of intervention. Also, I got a picture with the disease pixels that I mentioned in my last devlog. Behold my green little plague children!
Ships:
I have finally finished my evolution simulator! It is browser based and hosted on GitHub pages. I made it using Vanilla JavaScript, HTML, and CSS. The main issue I encountered was major population spikes that I could not for the life of me figure out, but in the end it turned out I was just seriously overcomplicating things lol! I thought it was some kind of bug, but all I needed to do was increase the breeding cooldown. I am very proud of this project, because the making of this was so smooth for one of my bigger projects! Sure there were bugs, but I was fairly easily able to fix most of them with some console logs and elbow grease. There were only a few that I needed some external help identifying, but ChatGPT quickly pointed out the faulty code. Once I knew where the problems were at I could fix them no problem. I’m also proud of how quickly I could whip up my HTML layout and CSS styling, and the movement animation and grid generation too. I thought they would be super hard to do, but then they worked, like, first try lol. I feel like everything is pretty obvious, but just in case… The slider adjusts the speed of the simulation. To regenerate the environment and reset the simulation, refresh the page. There are 5 important colors in the simulator: Red. This is for food sources. Light Blue. This is for water sources. Dark Blue. This is for male pixel creatures. Pink. This is for female pixel creatures. Green. This is for disease cells. (my beautiful plague children <3)...
|
1793443711.6893375
|
1793530111.6893375
|
|
40185
|
Ballance by @Brandt | Stardance
|
Brandt
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T17:29:40Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a short game, partially inspired by Cobb Can Move, where as you progress the platform gets smaller and more modifiers are added! I speedran making this and was barely able to submit it to GMTK.", "repo": "https://github.com/BranditTheBandit/ballance", "demo": "https://branditthebandit.itch.io/ballance"}]...
|
[{"post_id": 35330, "ts": "202 [{"post_id": 35330, "ts": "2026-07-26T17:25:58Z", "hours": 0.7333, "text": "I finished making the game only a few minutes before the GMTK deadline. It’s kinda buggy but I think that’s reasonable considering this was made in 3 hours. I’ve implemented every modifier (lasers were extremely stressful because they were the most complicated and I did them last, I copied a lot of code from the falling squares) and added a win screen."}, {"post_id": 35280, "ts": "2026-07-26T16:15:12Z", "hours": 0.5333, "text": "Implemented the raining squares modifier! Was though because some flaw in my maths was literally trying to spawn 20000000 squares every frame and it took me like 15 mins to figure out how to fix it"}, {"post_id": 35258, "ts": "2026-07-26T15:41:46Z", "hours": 0.6167, "text": "A bunch of changes, the game now actually feels kinda fun even though it isn’t done! First of all, I gave some visual life to the game - the platform is a bright white and I made it slightly transparent so you can always see the ball, and the ball is a nice blue textured with noise. You can now actually die, the timer was changed to 15s since 10s felt too short, and a bunch of modifiers were added (but not yet implemented)."}, {"post_id": 35224, "ts": "2026-07-26T14:57:54Z", "hours": 1.1683, "text": "The basic system of my game is done. It’s not really playable or fun at all tbh, but it mostly works. I made a global script that holds data about the level, and a screen that uses timers to reveal the level number, the platform size, and any modifiers (which will be added later) The main scene uses another timer to count down from 10 and goes to the next level after that. Currently there is no way to die, but that will be changed. There’s also a weird bug where if you rotate too fast the ball clips through the platform. I think it’s because the rotation doesn’t automatically translate over to physics, and to fix that I’d probably have to do a bunch of complicated maths so I’m just gonna ask AI for that but everything else has been made by me"}]...
|
Title: Ballance by @Brandt | Stardance
Devlogs:
T Title: Ballance by @Brandt | Stardance
Devlogs:
The basic system of my game is done. It’s not really playable or fun at all tbh, but it mostly works. I made a global script that holds data about the level, and a screen that uses timers to reveal the level number, the platform size, and any modifiers (which will be added later) The main scene uses another timer to count down from 10 and goes to the next level after that. Currently there is no way to die, but that will be changed. There’s also a weird bug where if you rotate too fast the ball clips through the platform. I think it’s because the rotation doesn’t automatically translate over to physics, and to fix that I’d probably have to do a bunch of complicated maths so I’m just gonna ask AI for that but everything else has been made by me
A bunch of changes, the game now actually feels kinda fun even though it isn’t done! First of all, I gave some visual life to the game - the platform is a bright white and I made it slightly transparent so you can always see the ball, and the ball is a nice blue textured with noise. You can now actually die, the timer was changed to 15s since 10s felt too short, and a bunch of modifiers were added (but not yet implemented).
Implemented the raining squares modifier! Was though because some flaw in my maths was literally trying to spawn 20000000 squares every frame and it took me like 15 mins to figure out how to fix it
I finished making the game only a few minutes before the GMTK deadline. It’s kinda buggy but I think that’s reasonable considering this was made in 3 hours. I’ve implemented every modifier (lasers were extremely stressful because they were the most complicated and I did them last, I copied a lot of code from the falling squares) and added a win screen.
Ships:
I made a short game, partially inspired by Cobb Can Move, where as you progress the platform gets smaller and more modifiers are added! I speedran making this and was barely able to submit it to GMTK....
|
1793443719.3701537
|
1793530119.3701537
|
|
31732
|
Fragments by @polarizedGale1 | Stardance
|
polarizedGale1
|
1
|
26.0
|
391
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T17:00:35Z", "hours": 26.0, "multiplier": 14.97, "payout": 391, "blessing": "neutral", "text": "I made a procedurally generated maze game with dynamically resizing floors. This was my first time using c in a project exclusively. Before, I used it but mainly as glue code to bind to a rust or odin project. Implementing a more sophisticated generation algorithm and collision was challenging.", "repo": "https://github.com/DhaiShah25/Fragments", "demo": "https://polarizedgale.itch.io/fragments"}]...
|
[{"post_id": 56729, "ts": "202 [{"post_id": 56729, "ts": "2026-08-28T16:29:08Z", "hours": 1.2322, "text": "I fixed the issue where maze generation would break on mazes larger than 15x15 because uint8_t would overflow. Also, I added centered labels and fixed resolution issues like labels appearing offscreen. I removed the old physical buttons meant for touch screens because this is becoming desktop only (web is included for this release but not onwards). Also, mazes now change size depending on which floor they belong to."}, {"post_id": 56672, "ts": "2026-08-28T15:06:33Z", "hours": 4.7328, "text": "I re-implemented the map algorithm to use Prim’s algorithm instead of sidewinder. I also changed it to use cells with bitflags for the walls instead of doubling the map size. Maps can now be dynamically sized instead of using a compile time constant so on different levels I can make them larger or smaller. I also tweaked Prim’s algorithm to generate a braid maze instead of a perfect maze."}, {"post_id": 52468, "ts": "2026-08-22T16:24:07Z", "hours": 5.6569, "text": "I finally got time to work on this again. I cleaned up the code a bit and made maze generation generic over any size. I also collapsed the 2d maze to be 1d to hopefully help with cache locality under certain actions."}, {"post_id": 26912, "ts": "2026-07-11T23:30:58Z", "hours": 4.0783, "text": "I added proper collisions for the maze that is generated. I also added proper font sizing options, fixed web platform compilation, created a GUI start screen, properly modularized the the code to be based off the tile size, and refactored some of the code."}, {"post_id": 26215, "ts": "2026-07-10T21:38:41Z", "hours": 3.3317, "text": "I added working maze generation based off the sidewinder algorithm using bitwise operations for the maze creation. Each level is procedurally generated and randomly places the picture frame fragment in the level. I temporarily removed collisions for moving outside of the map. I now need to add collisions with the maze and to clamp the camera to the screen."}, {"post_id": 25505, "ts": "2026-07-09T20:28:03Z", "hours": 1.2736, "text": "Finished up the starting animation but without any of the proper artwork. Everything is smooth and I refactored the animation code into a function."}, {"post_id": 24995, "ts": "2026-07-08T21:54:53Z", "hours": 2.4094, "text": "I created an animation at the beginning explaining the story before the gameplay would start."}, {"post_id": 24220, "ts": "2026-07-07T17:15:41Z", "hours": 1.0428, "text": "I setup better movement, a basic tutorial flow, and changed some colors. I also changed the font to be rendering Iosevka instead of the default font and sub-setted to minimize bundle size."}, {"post_id": 24145, "ts": "2026-07-07T14:59:24Z", "hours": 0.4497, "text": "Added proper bounds checking for the player. I usually don’t work in c which is why it took a while."}, {"post_id": 23871, "ts": "2026-07-07T02:11:32Z", "hours": 1.8908, "text": "I properly linked raylib using it’s template. This took a while because nix makes stuff very odd to package and build when it requires dependencies. I also got proper 2d movement working."}]...
|
Title: Fragments by @polarizedGale1 | Stardance
D Title: Fragments by @polarizedGale1 | Stardance
Devlogs:
I properly linked raylib using it’s template. This took a while because nix makes stuff very odd to package and build when it requires dependencies. I also got proper 2d movement working.
Added proper bounds checking for the player. I usually don’t work in c which is why it took a while.
I setup better movement, a basic tutorial flow, and changed some colors. I also changed the font to be rendering Iosevka instead of the default font and sub-setted to minimize bundle size.
I created an animation at the beginning explaining the story before the gameplay would start.
Finished up the starting animation but without any of the proper artwork. Everything is smooth and I refactored the animation code into a function.
I added working maze generation based off the sidewinder algorithm using bitwise operations for the maze creation. Each level is procedurally generated and randomly places the picture frame fragment in the level. I temporarily removed collisions for moving outside of the map. I now need to add collisions with the maze and to clamp the camera to the screen.
I added proper collisions for the maze that is generated. I also added proper font sizing options, fixed web platform compilation, created a GUI start screen, properly modularized the the code to be based off the tile size, and refactored some of the code.
I finally got time to work on this again. I cleaned up the code a bit and made maze generation generic over any size. I also collapsed the 2d maze to be 1d to hopefully help with cache locality under certain actions.
I re-implemented the map algorithm to use Prim’s algorithm instead of sidewinder. I also changed it to use cells with bitflags for the walls instead of doubling the map size. Maps can now be dynamically sized instead of using a compile time constant so on different levels I can make them larger or smaller. I also tweaked Prim’s algorithm to generate a braid maze instead of a perfect maze.
I fixed the issue where maze generation would break on mazes larger than 15x15 because uint8_t would overflow. Also, I added centered labels and fixed resolution issues like labels appearing offscreen. I removed the old physical buttons meant for touch screens because this is becoming desktop only (web is included for this release but not onwards). Also, mazes now change size depending on which floor they belong to.
Ships:
I made a procedurally generated maze game with dynamically resizing floors. This was my first time using c in a project exclusively. Before, I used it but mainly as glue code to bind to a rust or odin project. Implementing a more sophisticated generation algorithm and collision was challenging....
|
1793443726.6879659
|
1793530126.6879659
|
|
36518
|
Jarvis Version 2 by @Jhenil | Stardance
|
Jhenil
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-28T14:36:29Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have a Jarvis type assistant. It is made in python. The thing that makes this version separate from the version 1 is that version 1 had hard coded commands whereas this one uses Google Gemini API key to answer questions. It does take like 10 seconds to answer these questions. But it works completely by speech so you have to speak to it. I have made an EXE file for it so you can download it and run it. It will terminate the program if no microphone detected. Challenges that I faced was to actually get the ai part running because I had some basic functions which the program was doing but making it answer random questions using the key was the hard part but at the end I figured it out. Also thought to add a GUI but as I have never made one I faced a lot of challenges and I thought to not add it at the end. Thank you testing and rating my app!", "repo": "https://github.com/JP-code33/Jarvis-Project-V2", "demo": "https://github.com/JP-code33/Jarvis-Project-V2/releases/tag/v1.0.0"}]...
|
[{"post_id": 36402, "ts": "202 [{"post_id": 36402, "ts": "2026-07-28T14:23:37Z", "hours": 0.3117, "text": "Guys at the end I will not be adding GUI to the app because I tried a lot but I wasn’t able to get the GUI running. It got to a starting screen and froze and the app kept running in the background."}, {"post_id": 35322, "ts": "2026-07-26T17:18:38Z", "hours": 1.2264, "text": "Hello, I have decided to add a GUI to this version of Jarvis as it will elevate the whole code and will make it alive. This is the design that I have chosen as I want to keep it simple. Now I am heading to make to work when the Jarvis runs!"}, {"post_id": 34368, "ts": "2026-07-25T00:44:34Z", "hours": 3.9469, "text": "I haven’t been posting much devlog but I was trying to get the ai integration to work but it kept failing but finally I have managed to get it to work. The only problem is that it takes too long to actually speak out the answer. Also you don’t have to type for it you can just ask any question and it will answer. I am currently working on the GUI for the program so it also adds that graphics to the program. If anyone have any tips to get it faster and accurate then I will accept those."}, {"post_id": 30778, "ts": "2026-07-18T17:30:11Z", "hours": 1.1403, "text": "So, as I decided to switch to Python so that the voice feature can be easily made and can be added. Currently I have made that feature where once the program is working then it will listen for the wake up call “Jarvis” then it will activate the system and then it will listen for a command. Right now I have added that it can open Google, YouTube, Facebook. I will be adding more features. Any suggestions accepted."}]...
|
Title: Jarvis Version 2 by @Jhenil | Stardance
De Title: Jarvis Version 2 by @Jhenil | Stardance
Devlogs:
So, as I decided to switch to Python so that the voice feature can be easily made and can be added. Currently I have made that feature where once the program is working then it will listen for the wake up call “Jarvis” then it will activate the system and then it will listen for a command. Right now I have added that it can open Google, YouTube, Facebook. I will be adding more features. Any suggestions accepted.
I haven’t been posting much devlog but I was trying to get the ai integration to work but it kept failing but finally I have managed to get it to work. The only problem is that it takes too long to actually speak out the answer. Also you don’t have to type for it you can just ask any question and it will answer. I am currently working on the GUI for the program so it also adds that graphics to the program. If anyone have any tips to get it faster and accurate then I will accept those.
Hello, I have decided to add a GUI to this version of Jarvis as it will elevate the whole code and will make it alive. This is the design that I have chosen as I want to keep it simple. Now I am heading to make to work when the Jarvis runs!
Guys at the end I will not be adding GUI to the app because I tried a lot but I wasn’t able to get the GUI running. It got to a starting screen and froze and the app kept running in the background.
Ships:
I have a Jarvis type assistant. It is made in python. The thing that makes this version separate from the version 1 is that version 1 had hard coded commands whereas this one uses Google Gemini API key to answer questions. It does take like 10 seconds to answer these questions. But it works completely by speech so you have to speak to it. I have made an EXE file for it so you can download it and run it. It will terminate the program if no microphone detected. Challenges that I faced was to actually get the ai part running because I had some basic functions which the program was doing but making it answer random questions using the key was the hard part but at the end I figured it out. Also thought to add a GUI but as I have never made one I faced a lot of challenges and I thought to not add it at the end. Thank you testing and rating my app!...
|
1793443731.8496683
|
1793530131.8496683
|
|
1815
|
AI Water Footprint Calculator by @Gagnant | Starda AI Water Footprint Calculator by @Gagnant | Stardance...
|
Gagnant
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T12:37:30Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’m so glad for this miniscule goal brooooo just a few months ago I lamented in the fact that all I’d be able to do is scritch and scratch code on paper with my little knowledge of web development. Until my laptop arrived!!!!! I took my time researching into AI because I did use it a lot but along with this research I realized the harm it did to society and delved deeper to see that no matter the model you use as long as AI is involved the processing generates a lot of heat in the data centers and they use so much water to cool them down so until they finalize the closed cool loop system for data centers I figured maybe a calculator would help promote accountability amongst people until I could make something grander, this is my first step. I won’t go far in web dev but just for my own interests. Especially since there are other calculators out there….. Well, I uploaded my written code to AI in a single prompkt for it to guide me on integrating it unto my PC, so I had help so credit to Manus AI too ig.", "repo": "https://github.com/Itz-COCO/AI-WATER-FOOTPRINT", "demo": "https://itz-coco.github.io/AI-WATER-FOOTPRINT/"}]...
|
[{"post_id": 38814, "ts": "202 [{"post_id": 38814, "ts": "2026-08-01T11:40:34Z", "hours": 3.6631, "text": "We use AI a lot but we aren’t accountable for the environmental harm, I made this so we can be more conscious of our usage, I couldn’t name it playfully since I feared no one would take it seriously, but I’m really serious so take your time to use and find out just how much you’re taking from the environment."}]...
|
Title: AI Water Footprint Calculator by @Gagnant | Title: AI Water Footprint Calculator by @Gagnant | Stardance
Devlogs:
We use AI a lot but we aren’t accountable for the environmental harm, I made this so we can be more conscious of our usage, I couldn’t name it playfully since I feared no one would take it seriously, but I’m really serious so take your time to use and find out just how much you’re taking from the environment.
Ships:
I’m so glad for this miniscule goal brooooo just a few months ago I lamented in the fact that all I’d be able to do is scritch and scratch code on paper with my little knowledge of web development. Until my laptop arrived!!!!! I took my time researching into AI because I did use it a lot but along with this research I realized the harm it did to society and delved deeper to see that no matter the model you use as long as AI is involved the processing generates a lot of heat in the data centers and they use so much water to cool them down so until they finalize the closed cool loop system for data centers I figured maybe a calculator would help promote accountability amongst people until I could make something grander, this is my first step. I won’t go far in web dev but just for my own interests. Especially since there are other calculators out there….. Well, I uploaded my written code to AI in a single prompkt for it to guide me on integrating it unto my PC, so I had help so credit to Manus AI too ig....
|
1793443734.8380647
|
1793530134.8380647
|
|
27449
|
My awesome macropad! by @tejasv | Stardance
|
tejasv
|
0
|
10.03
|
0
|
[]
|
[{"post_id": 77386, "ts": "202 [{"post_id": 77386, "ts": "2026-10-06T19:11:04Z", "hours": 1.0164, "text": "yo this is my pcb belnder design"}, {"post_id": 77137, "ts": "2026-10-05T19:06:57Z", "hours": 0.3667, "text": "make a design of rthe case"}, {"post_id": 77124, "ts": "2026-10-05T18:30:49Z", "hours": 1.0478, "text": "worked for : redisgn ht epcb and wire routing"}, {"post_id": 74769, "ts": "2026-09-28T06:26:31Z", "hours": 1.6833, "text": "perfect wiriing with common ground , yepiiieeee!!!"}, {"post_id": 73991, "ts": "2026-09-26T14:14:03Z", "hours": 2.4169, "text": "PARTIAL WIRING COMPLITED , IDENTIFY ERROR"}, {"post_id": 73828, "ts": "2026-09-26T03:34:10Z", "hours": 0.8342, "text": "yo this goat is finalizing , i configure how to wire,"}, {"post_id": 73535, "ts": "2026-09-25T10:39:35Z", "hours": 1.3836, "text": "design thhe placement of the pcb , having so much problem in nwwiring , any suggesstion or help ."}, {"post_id": 73059, "ts": "2026-09-24T09:23:32Z", "hours": 1.2764, "text": "a pcb and design for the hack macro pad challenge"}]...
|
Title: My awesome macropad! by @tejasv | Stardance Title: My awesome macropad! by @tejasv | Stardance
Devlogs:
a pcb and design for the hack macro pad challenge
design thhe placement of the pcb , having so much problem in nwwiring , any suggesstion or help .
yo this goat is finalizing , i configure how to wire,
PARTIAL WIRING COMPLITED , IDENTIFY ERROR
perfect wiriing with common ground , yepiiieeee!!!
worked for : redisgn ht epcb and wire routing
make a design of rthe case
yo this is my pcb belnder design...
|
1792666232.0068264
|
1793530232.0068264
|
|
56510
|
Capprine by @2sen | Stardance
|
2sen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Capprine by @2sen | Stardance
|
1792666405.0225108
|
1793530405.0225108
|
|
5805
|
FORGEBOUND by @Lucid | Stardance
|
Lucid
|
1
|
44.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T02:39:54Z", "hours": 44.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "FORGEBOUND is a game showcasing my skills in the pygame game engine. I feel like this project came quite far but can go further later on. I just wanted to get this project out, might as well ship it before the deadline. I hope I can get back to this project soon and make time for it, but for now here is FORGEBOUND!", "repo": "https://github.com/Obj3c-t/Survival", "demo": "https://github.com/Obj3c-t/Survival/releases/tag/ALPHA"}]...
|
[{"post_id": 85263, "ts": "202 [{"post_id": 85263, "ts": "2026-10-31T01:17:23Z", "hours": 10.0447, "text": "Survival Devlog #5: The Jungle Update & Alpha Boss This is the big update right before our alpha release for Stardance! Finished all the combat stuff from last devlog’s WIP, added the new Jungle biome, tier 7 verdant steel, potion brewing, and the final boss for the alpha: Kro’Gath. BTW I have been gone for a long time, and I may have repeated some things, so please bear with me! Added since last DEVLOG : NEW JUNGLE BIOME: Toxicity bar that builds up from the green fog and poisons you if it hits 100% (stops natural health regen and deals steady damage) Mud pools that cut your movement speed by 40% Solid vine blockades you have to slice through with a sword to get through Jungle herbs, jungle spores, and Verdant Ore NEW ALCHEMIST TABLE & POTIONS: Alchemist table crafted at the workbench with wood and slime gel Antidote (resets toxicity back to 0%) Healing Potion (instantly restores +40 hp) Adrenaline Elixir (+35% speed boost to run through mud) You can drink them by selecting them in your hotbar and left clicking NEW TIER 7 VERDANT STEEL GEAR: Verdant ore requires a Cobalt pickaxe or higher to mine Verdant Armor (80% defense and makes you completely immune to jungle poison) Verdant Sword (lifesteals +2 hp back on every hit) Verdant Pickaxe (super fast swing speed) NEW JUNGLE ENEMIES: Giant Hornets (flying mob that hovers away and shoots toxic stingers) Venus Spore-Traps (hidden turret plant that opens up and shoots 3 needles when you get close) FINAL ALPHA BOSS: KRO’GATH, THE PRIMORDIAL CORE: Phase 1: rooted in the center with an impenetrable siphon shield that absorbs all sword hits and heals him. You have to dodge needle barrages and mine down the 2 Siphon Conduits using your pickaxe Phase 2: his armor shatters and he uproots! Flies around chasing you down ignoring mud, shoots 5 needle fans, and does a fast charge attack that you have to perfect parry to stun him Soft enrage at 25% hp where toxicity starts rising automatically Big boss health bar at the bottom of the screen QOL & DEV TOOLS: Smooth mouse wheel scrolling for the crafting panel (clamped at 500px) Press (backquote) to open the cheat console for testing (spawn krogath, give, heal, mobs count monitor) Next Steps(Short term) : Shipping the Stardance Alpha build! Setting up GitHub pages web version so people can play in browser + desktop .exe download Adding audio, sfx, and background tracks(maybe not in stardance) I wish I could’ve done more for this project, but I simply id not have the time. I hope to transfer this game to a REAL game engine and hopefully make it into something im proud of. For now, here is the game that I have achieved for stardance, and thank you to everyone who tries my game. **Showcase: **"}, {"post_id": 37167, "ts": "2026-07-29T17:47:42Z", "hours": 10.2008, "text": "**Survival Devlog #4: Ice?? This update introduces a new biome, and a new ore/tier progression, as well as bugfixes, QoL updates, and a few more cool things described in this update. Added since last DEVLOG : New Glacial Tundra Biome: Cold bar that makes you take damage if you dont have the Thermal Lantern Slippery Ice physics Cobalt ore, bars, sword and pickaxe Frost Wolf and Ice Golem Miniboss(WIP) NEW BASIC BASE BUILDING SYSTEM: Doors, wood walls, stone walls NEW NIGHT ENEMIES: Zombies, Slimes, Skeletons WIP RN: working on this stuff right now didnt have enough time for the devlog Huge buffs on the Ice Golem, has a chance to spawn when you break a cobalt ore block Combat revamp, making it like those from dark souls, sekiro, deepwoken, etc “GOLEM CORE” item dropped from Ice Golems and needed to craft the cobalt sword cobalt sword will shoot projectiles shield Next Steps(Short term) : Better Combat Integration with Progression(More bosses for items) More to come soon **Showcase: ** https://youtu.be/FZiQl1QMIpw Also, apologies for the rushed devlog, a more detailed one will be released next devlog."}, {"post_id": 30992, "ts": "2026-07-19T00:40:22Z", "hours": 9.8778, "text": "FORGEBOUND Devlog #3: Base early game almost done Lots of progress made since last devlog. Massive overhauls have been made to the desert, with ores spawning in clusters, and in specific areas of the desert. Solarite is much harder to get as it requires an iron pickaxe at minimum to break and collect. Added since last DEVLOG : New Swords with Unique Personalities: Wood swings fast Stone is slow but has wide sweep Copper has critical chance and quicker speed Iron has higher knockback and deals more damage than copper Solarite has a burn effect and has a light that glows when equipped New enemies to make desert harvesting harder: Scorpions(charge at you) Beetles(fly around you and charge at you) for now only drop leather, but will drop more as I add new objects Visual ambient day & night cycle Combat is much more “Juicier” Basic smelting system with more plans to improve HUGE map and resource respawns so you dont run out of any resource Next Steps(Short term) : Biomes alongside progression Improve the generic simple smelting system XP system more meaningful YT SHOWCASE COMING SOON BTW is FORGEBOUND a cool name for this project? This image is ai generated my game does not actually look like this, but its based off of what i currently have in my code"}, {"post_id": 25439, "ts": "2026-07-09T18:25:47Z", "hours": 11.7314, "text": "Survival Devlog #2: major core mechanics done Lots of progress has been made to my survival game, has been quite challenging since im working in pygame. By the way, I know this devlog is really spaced out from my last project, I thought I had made a devlog in between but turns out I didn’t, or I never posted it for whatever reason. Added since last DEVLOG : Collisions with static resources/objects Basic building system for workbench and furnace Harvesting system really basic xp bar meant for a leveling system WORKING drag and drop inventory Improved desert by adding heat damage, adding more ores, and an exclusive ore(solarite) Cows for the basic NPC functions, and damage indicators ITEMS: leather, leather armor, wooden sword, stone sword, stone pickaxe, iron ore, copper ore, solarite ore, workbench, furnace(WIP) Next: Sprites Save/load system structured progression eg. bosses, biomes, ores, meaningful level system bosses day/night cycle YT SHOWCASE: https://youtu.be/OmomLTyvpnw?si=PADnX2eKr5Vvwn6V"}, {"post_id": 3978, "ts": "2026-06-07T03:44:20Z", "hours": 2.2931, "text": "Trying to make my own survival/exploration sandbox like Forager or Don’t Starve in pygame, I got the basic world generation and scrolling map done after quite some time of learning how to do it online."}]...
|
Title: FORGEBOUND by @Lucid | Stardance
Devlogs:
Title: FORGEBOUND by @Lucid | Stardance
Devlogs:
Trying to make my own survival/exploration sandbox like Forager or Don’t Starve in pygame, I got the basic world generation and scrolling map done after quite some time of learning how to do it online.
Survival Devlog #2: major core mechanics done Lots of progress has been made to my survival game, has been quite challenging since im working in pygame. By the way, I know this devlog is really spaced out from my last project, I thought I had made a devlog in between but turns out I didn’t, or I never posted it for whatever reason. Added since last DEVLOG : Collisions with static resources/objects Basic building system for workbench and furnace Harvesting system really basic xp bar meant for a leveling system WORKING drag and drop inventory Improved desert by adding heat damage, adding more ores, and an exclusive ore(solarite) Cows for the basic NPC functions, and damage indicators ITEMS: leather, leather armor, wooden sword, stone sword, stone pickaxe, iron ore, copper ore, solarite ore, workbench, furnace(WIP) Next: Sprites Save/load system structured progression eg. bosses, biomes, ores, meaningful level system bosses day/night cycle YT SHOWCASE: https://youtu.be/OmomLTyvpnw?si=PADnX2eKr5Vvwn6V
FORGEBOUND Devlog #3: Base early game almost done Lots of progress made since last devlog. Massive overhauls have been made to the desert, with ores spawning in clusters, and in specific areas of the desert. Solarite is much harder to get as it requires an iron pickaxe at minimum to break and collect. Added since last DEVLOG : New Swords with Unique Personalities: Wood swings fast Stone is slow but has wide sweep Copper has critical chance and quicker speed Iron has higher knockback and deals more damage than copper Solarite has a burn effect and has a light that glows when equipped New enemies to make desert harvesting harder: Scorpions(charge at you) Beetles(fly around you and charge at you) for now only drop leather, but will drop more as I add new objects Visual ambient day & night cycle Combat is much more “Juicier” Basic smelting system with more plans to improve HUGE map and resource respawns so you dont run out of any resource Next Steps(Short term) : Biomes alongside progression Improve the generic simple smelting system XP system more meaningful YT SHOWCASE COMING SOON BTW is FORGEBOUND a cool name for this project? This image is ai generated my game does not actually look like this, but its based off of what i currently have in my code
**Survival Devlog #4: Ice?? This update introduces a new biome, and a new ore/tier progression, as well as bugfixes, QoL updates, and a few more cool things described in this update. Added since last DEVLOG : New Glacial Tundra Biome: Cold bar that makes you take damage if you dont have the Thermal Lantern Slippery Ice physics Cobalt ore, bars, sword and pickaxe Frost Wolf and Ice Golem Miniboss(WIP) NEW BASIC BASE BUILDING SYSTEM: Doors, wood walls, stone walls NEW NIGHT ENEMIES: Zombies, Slimes, Skeletons WIP RN: working on this stuff right now didnt have enough time for the devlog Huge buffs on the Ice Golem, has a chance to spawn when you break a cobalt ore block Combat revamp, making it like those from dark souls, sekiro, deepwoken, etc “GOLEM CORE” item dropped from Ice Golems and needed to craft the cobalt sword cobalt sword will shoot projectiles shield Next Steps(Short term) : Better Combat Integration with Progression(More bosses for items) More to come soon **Showcase: ** https://youtu.be/FZiQl1QMIpw Also, apologies for the rushed devlog, a more detailed one will be released next devlog.
Survival Devlog #5: The Jungle Update & Alpha Boss This is the big update right before our alpha release for Stardance! Finished all the combat stuff from last devlog’s WIP, added the new Jungle biome, tier 7 verdant steel, potion brewing, and the final boss for the alpha: Kro’Gath. BTW I have been gone for a long time, and I may have repeated some things, so please bear with me! Added since last DEVLOG : NEW JUNGLE BIOME: Toxicity bar that builds up from the green fog and poisons you if it hits 100% (stops natural health regen and deals steady damage) Mud pools that cut your movement speed by 40% Solid vine blockades you have to slice through with a sword to get through Jungle herbs, jungle spores, and Verdant Ore NEW ALCHEMIST TABLE & POTIONS: Alchemist table crafted at the workbench with wood and slime gel Antidote (resets toxicity back to 0%) Healing Potion (instantly restores +40 hp) Adrenaline Elixir (+35% speed boost to run through mud) You can drink them by selecting them in your hotbar and left clicking NEW TIER 7 VERDANT STEEL GEAR: Verdant ore requires a Cobalt pickaxe or higher to mine Verdant Armor (80% defense and makes you completely immune to jungle poison) Verdant Sword (lifesteals +2 hp back on every hit) Verdant Pickaxe (super fast swing speed) NEW JUNGLE ENEMIES: Giant Hornets (flying mob that hovers away and shoots toxic stingers) Venus Spore-Traps (hidden turret plant that opens up and shoots 3 needles when you get close) FINAL ALPHA BOSS: KRO’GATH, THE PRIMORDIAL CORE: Phase 1: rooted in the center with an impenetrable siphon shield that absorbs all sword hits and heals him. You have to dodge needle barrages and mine down the 2 Siphon Conduits using your pickaxe Phase 2: his armor shatters and he uproots! Flies around chasing you down ignoring mud, shoots 5 needle fans, and does a fast charge attack that you have to perfect parry to stun him Soft enrage at 25% hp where toxicity starts rising automatically Big boss health bar at the bottom of the screen QOL & DEV TOOLS: Smooth mouse wheel scrolling for the crafting panel (clamped at 500px) Press (backquote) to open the cheat console for testing (spawn krogath, give, heal, mobs count monitor) Next Steps(Short term) : Shipping the Stardance Alpha build! Setting up GitHub pages web version so people can play in browser + desktop .exe download Adding audio, sfx, and background tracks(maybe not in stardance) I wish I could’ve done more for this project, but I simply id not have the time. I hope to transfer this game to a REAL game engine and hopefully make it into something im proud of. For now, here is the game that I have achieved for stardance, and thank you to everyone who tries my game. **Showcase: **
Ships:
FORGEBOUND is a game showcasing my skills in the pygame game engine. I feel like this project came quite far but can go further later on. I just wanted to get this project out, might as well ship it before the deadline. I hope I can get back to this project soon and make time for it, but for now here is FORGEBOUND!...
|
1793444007.0190747
|
1793530407.0190747
|
|
70714
|
priyanshu's site by @kpk22128 | Stardance
|
kpk22128
|
1
|
3.37
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T03:52:19Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hiii everyone! I’m Priyanshu, and I made my personal project site for the Hack Club StarDance competition using pure HTML, CSS, and minimal vanilla JS (no heavy frameworks or templates yaar, just raw code). The site showcases my hardware build (an ESP32 sound-reactive NeoPixel LED setup), a photo of my late-night messy desk with jumper wires, my real git commits, and an interactive vote counter! What was challenging: Bhai, CSS alignment and making the cards look good without breaking mobile view was a real headache at 3 AM haha. Getting the polaroid picture to look naturally tilted with washi tape and proper box-shadow took a lot of trial and error. Also on the hardware side, I almost blew up a diode on my breadboard by mixing up 5V and GND, but saved it with a capacitor! What I’m proud of: I’m really proud that I built everything from scratch with my own hands instead of copy-pasting some ready-made Bootstrap/Tailwind template. It genuinely looks like a student hacker’s workbench. Also really happy with how the interactive vote button, prompt greeting, and secret build notes turned out! How to test it: Click the “VOTE FOR MY PROJECT” button to see the vote counter increment and trigger the alert! Click the “Say Hi!” button to enter your name. Scroll down and click “Click to view Priyanshu’s secret build notes” to reveal the hidden hardware story! AI Use Declaration: I only used AI to ask for good retro Google Font pairings (it suggested VT323, Comic Neue, and Space Grotesk). Every single line of HTML, CSS, and JS code was completely written by me.", "repo": "https://github.com/priyanshusingh1234/pkssite", "demo": "https://priyanshusingh1234.github.io/pkssite/"}]...
|
[{"post_id": 83569, "ts": "202 [{"post_id": 83569, "ts": "2026-10-28T04:53:38Z", "hours": 1.0147, "text": "again rededigned using my own skills"}, {"post_id": 82551, "ts": "2026-10-25T06:36:31Z", "hours": 2.0978, "text": "completely redesigned."}, {"post_id": 81401, "ts": "2026-10-21T04:12:09Z", "hours": 0.2528, "text": "another section added …"}, {"post_id": 81396, "ts": "2026-10-21T03:35:26Z", "hours": 0.3261, "text": "Made the homepage design using html and css and minimal js. Working on next sections."}]...
|
Title: priyanshu's site by @kpk22128 | Stardan Title: priyanshu's site by @kpk22128 | Stardance
Devlogs:
Made the homepage design using html and css and minimal js. Working on next sections.
another section added …
completely redesigned.
again rededigned using my own skills
Ships:
Hiii everyone! I’m Priyanshu, and I made my personal project site for the Hack Club StarDance competition using pure HTML, CSS, and minimal vanilla JS (no heavy frameworks or templates yaar, just raw code). The site showcases my hardware build (an ESP32 sound-reactive NeoPixel LED setup), a photo of my late-night messy desk with jumper wires, my real git commits, and an interactive vote counter! What was challenging: Bhai, CSS alignment and making the cards look good without breaking mobile view was a real headache at 3 AM haha. Getting the polaroid picture to look naturally tilted with washi tape and proper box-shadow took a lot of trial and error. Also on the hardware side, I almost blew up a diode on my breadboard by mixing up 5V and GND, but saved it with a capacitor! What I’m proud of: I’m really proud that I built everything from scratch with my own hands instead of copy-pasting some ready-made Bootstrap/Tailwind template. It genuinely looks like a student hacker’s workbench. Also really happy with how the interactive vote button, prompt greeting, and secret build notes turned out! How to test it: Click the “VOTE FOR MY PROJECT” button to see the vote counter increment and trigger the alert! Click the “Say Hi!” button to enter your name. Scroll down and click “Click to view Priyanshu’s secret build notes” to reveal the hidden hardware story! AI Use Declaration: I only used AI to ask for good retro Google Font pairings (it suggested VT323, Comic Neue, and Space Grotesk). Every single line of HTML, CSS, and JS code was completely written by me....
|
1793444017.2213113
|
1793530417.2213113
|
|
37868
|
My first slack bot! by @pcb | Stardance
|
pcb
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T02:26:40Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a slack bot called tuffbot,it was challenging when i was trying to do index.js sometimes in the terminal but then it didnt work and i had to do .exit, i am proud that i got a few apis working, people should know they have to be in #bot-spam or #tuffbot to test my bot", "repo": "https://github.com/watchtheads/slackbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BK4RPLTH7"}]...
|
[{"post_id": 33288, "ts": "202 [{"post_id": 33288, "ts": "2026-07-23T02:26:00Z", "hours": 0.8444, "text": "so i fixed some bugs and also added a lil more commands, i requested a nest hackclub server thing so once i hopefully get accepted i will push it and i just put this screenshot cause i dont really have anything else to put"}, {"post_id": 33008, "ts": "2026-07-22T15:31:33Z", "hours": 0.4608, "text": "added a few commands"}]...
|
Title: My first slack bot! by @pcb | Stardance
De Title: My first slack bot! by @pcb | Stardance
Devlogs:
added a few commands
so i fixed some bugs and also added a lil more commands, i requested a nest hackclub server thing so once i hopefully get accepted i will push it and i just put this screenshot cause i dont really have anything else to put
Ships:
i made a slack bot called tuffbot,it was challenging when i was trying to do index.js sometimes in the terminal but then it didnt work and i had to do .exit, i am proud that i got a few apis working, people should know they have to be in #bot-spam or #tuffbot to test my bot...
|
1793444018.3825347
|
1793530418.3825347
|
|
70719
|
Website for my Minecraft Server by @FC-107446 | St Website for my Minecraft Server by @FC-107446 | Stardance...
|
FC-107446
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-24T22:00:21Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Finished!! Lots of fun making this project. I learned a lot about APIs, and my friends are really happy with the website now. I think it looks cool overall. One thing I found challenging was fixing the random tricky syntax errors which popped up. I think I spent 15 hours on this, but most of it was coding straight into the file, so Hackatime was not recording.", "repo": "https://github.com/FC-107446/pi_master_website", "demo": "https://pi-master.coeus1.tech/"}]...
|
[{"post_id": 81905, "ts": "202 [{"post_id": 81905, "ts": "2026-10-22T22:47:20Z", "hours": 0.2983, "text": "Fixed the APIs and secured the admin side of things"}, {"post_id": 81845, "ts": "2026-10-22T18:22:26Z", "hours": 0.2872, "text": "I had an idea: I’ll make a community website page for my Minecraft server. Three-quarters of the way through, I realized Hackatime can’t record time when I’m directly coding on the server’s files. I know that’s not the best way to do it, but I’ve got something against GitHub. To get started on Stardance hours, I uploaded it to GitHub and have been making final changes."}]...
|
Title: Website for my Minecraft Server by @FC-1074 Title: Website for my Minecraft Server by @FC-107446 | Stardance
Devlogs:
I had an idea: I’ll make a community website page for my Minecraft server. Three-quarters of the way through, I realized Hackatime can’t record time when I’m directly coding on the server’s files. I know that’s not the best way to do it, but I’ve got something against GitHub. To get started on Stardance hours, I uploaded it to GitHub and have been making final changes.
Fixed the APIs and secured the admin side of things
Ships:
Finished!! Lots of fun making this project. I learned a lot about APIs, and my friends are really happy with the website now. I think it looks cool overall. One thing I found challenging was fixing the random tricky syntax errors which popped up. I think I spent 15 hours on this, but most of it was coding straight into the file, so Hackatime was not recording....
|
1793444019.5482247
|
1793530419.5482247
|
|
38982
|
My first slack bot! by @ARG_Lightning | Stardance
|
ARG_Lightning
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T16:01:04Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So this was a class slack bot following a lot of the basic commands. It works perfectly fine and the demo link shows a video of the program working. This is my first cloud hosted program of this type. I made websites before but nothing like this.", "repo": "https://github.com/AyushRG10/Slack-Bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BLGFS47MW"}]...
|
[{"post_id": 34091, "ts": "202 [{"post_id": 34091, "ts": "2026-07-24T15:50:15Z", "hours": 0.3636, "text": "Okay, so Sentinel works perfectly well. All commands do not interfere with other apps as well as do their job perfectly. I had some issues with setting up nest, but once I restarted the container, everything went pretty smoothly. The guide was pretty comprehensive and walked through everything pretty well. I had an issue signing into nest though from the terminal. You should use the command ssh @hackclub .app. I think it told me to do something different."}]...
|
Title: My first slack bot! by @ARG_Lightning | Sta Title: My first slack bot! by @ARG_Lightning | Stardance
Devlogs:
Okay, so Sentinel works perfectly well. All commands do not interfere with other apps as well as do their job perfectly. I had some issues with setting up nest, but once I restarted the container, everything went pretty smoothly. The guide was pretty comprehensive and walked through everything pretty well. I had an issue signing into nest though from the terminal. You should use the command ssh @hackclub .app. I think it told me to do something different.
Ships:
So this was a class slack bot following a lot of the basic commands. It works perfectly fine and the demo link shows a video of the program working. This is my first cloud hosted program of this type. I made websites before but nothing like this....
|
1793444020.7161875
|
1793530420.7161875
|
|
38350
|
Srijit Banerjee by @iamsrijitbanerjee | Stardance
|
iamsrijitbanerjee
|
1
|
2.0
|
8
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-23T14:55:20Z", "hours": 2.0, "multiplier": 3.48, "payout": 8, "blessing": "neutral", "text": "I’ve officially shipped the first version of my personal space website—a custom-built interactive hub created entirely from scratch using pure HTML, CSS, and JavaScript. The site brings together my passions as a student, featuring dynamic media rank grids for my favorite movies and series, a polyglot Duolingo vault, and verified STEM credentials. The biggest challenges were fine-tuning section color contrasts, fixing image header delivery issues, and making sure complex layout grids aligned cleanly across all devices. I’m particularly proud of blending functional personal branding with subtle aesthetic touches like floating background math equations, neon glow rings, and responsive animations. To test the site, head over to the interactive “Personalized Deck” in the Vibe Corner: take a shot on the animated football goalpost, test your logic across the tactical chess puzzles, or brew a observation in the tea cup corner. Be sure to click the “View FUT Manager Card” button in the hero header, click any movie poster to visit its IMDb page, and interact with the floating props hovering in the bottom corners of the screen!", "repo": "https://github.com/iamsrijitbanerjee/Srijit-Banerjee.git/", "demo": "https://srijitbanerjee.netlify.app/"}]...
|
[{"post_id": 33505, "ts": "202 [{"post_id": 33505, "ts": "2026-07-23T14:46:26Z", "hours": 0.5561, "text": "In this update, the primary focus was on resolving external asset rendering issues, expanding the interactive deck, and completing the site’s digital footprint grid. The most critical fix involved addressing hotlink restrictions from media hosts like IMDb and Amazon CNDs by implementing a no-referrer meta header in the layout. This allowed all high-resolution film posters, web series covers, and gaming media assets to render smoothly without broken image links or aspect-ratio distortion. Additionally, a custom SVG favicon was introduced, and a subtle neon text-shadow glow was added to highlight my name across the hero section. To complete the digital footprint section, I added dedicated Spotify and Reddit widgets with glowing neon halos alongside the existing social cards. The Duolingo widget icon was also updated to a sleek, monochrome vector design to maintain visual consistency across all network blocks. With the media display bugs resolved and all interactive props fully operational, the project is ready for its final deployment pipeline and cross-device performance testing."}, {"post_id": 33172, "ts": "2026-07-22T20:45:49Z", "hours": 1.13, "text": "Devlog #2: Goalpost Animations, Multi-Puzzle Engine & Expanded Social DeckIn this second development update, the primary focus shifted toward deepening interactivity and refining visual feedback across the personalized deck. The football minigame received a full structural overhaul, transitioning from a basic bounce effect to a dedicated goalpost frame complete with net pattern styling. Clicking the ball now triggers a smooth CSS transform animation that shoots the ball directly into the “Top Bin” target before resetting. Additionally, the single chess conundrum was upgraded into a dynamic multi-puzzle system featuring custom navigation controls, allowing users to toggle seamlessly between different tactical scenarios like Smothered Mates, Queen Sacrifices, and Back-Rank Checkmates.On the UI and networking front, several visual polish passes and link integrations were executed. A subtle neon glow text-shadow was applied to the hero header to make the main title stand out against the radial backdrop. The social media grid was expanded with Spotify and Reddit widgets to complete the box layout, and the Duolingo badge was updated with a clean monochrome owl vector icon. To ensure full functionality, all movie posters, web series cards, gaming overlays, and social widgets were wrapped in explicit link structures, ready for exact external URL mapping, along with a lightweight SVG favicon added to the document head.With the core interactive features fully implemented, the next milestone focuses on deployment readiness and optimization. The short-term plan includes conducting thorough cross-device responsiveness testing, verifying touch interactions on mobile viewports, and populating final project links. Following these final refinements, the site will be pushed to GitHub to establish an automated deployment pipeline for live hosting."}, {"post_id": 33123, "ts": "2026-07-22T18:59:41Z", "hours": 0.5628, "text": "Devlog #1: Building a Custom Personal Site & Interactive Deck. I’ve officially kicked off development on my custom personal website, built completely from scratch using vanilla HTML5, CSS3, and JavaScript. The goal of this project is to create an interactive, cinematic hub that showcases my work as a CS engineering student, STEM Olympiad background, hardware builds, and personal passions. So far, I have established the overall responsive layout, crafted a clean light-mode aesthetic, and built the core interactive elements—including a dynamic typing hero section, a popup FUT manager card modal, a football goal kick minigame with live commentary, and a Mentalist-inspired observation generator. Over the past session, my primary agenda focused on layout alignment, UI refinements, and asset fixes. I resolved poster aspect-ratio inconsistencies across the cinema, web series, and gaming cards to ensure uniform vertical alignment, while wrapping each card in subtle neon glow rings. Furthermore, I aligned the baseline for all widgets in the personalized space, updated the polyglot section with official Duolingo stats and branding, and introduced floating background mathematical symbols to reflect the site’s STEM theme. Looking ahead, my shortlist for the next milestone involves setting up the GitHub repository, establishing a clean deployment pipeline, and testing cross-device responsiveness. I also plan to implement smoother section scroll transitions, add further polish to the chess conundrum puzzle widget, and integrate an embedded feed for my math paradox blog. The core foundation is set, and the next phase will focus on micro-interactions and performance optimization!"}]...
|
Title: Srijit Banerjee by @iamsrijitbanerjee | Sta Title: Srijit Banerjee by @iamsrijitbanerjee | Stardance
Devlogs:
Devlog #1: Building a Custom Personal Site & Interactive Deck. I’ve officially kicked off development on my custom personal website, built completely from scratch using vanilla HTML5, CSS3, and JavaScript. The goal of this project is to create an interactive, cinematic hub that showcases my work as a CS engineering student, STEM Olympiad background, hardware builds, and personal passions. So far, I have established the overall responsive layout, crafted a clean light-mode aesthetic, and built the core interactive elements—including a dynamic typing hero section, a popup FUT manager card modal, a football goal kick minigame with live commentary, and a Mentalist-inspired observation generator. Over the past session, my primary agenda focused on layout alignment, UI refinements, and asset fixes. I resolved poster aspect-ratio inconsistencies across the cinema, web series, and gaming cards to ensure uniform vertical alignment, while wrapping each card in subtle neon glow rings. Furthermore, I aligned the baseline for all widgets in the personalized space, updated the polyglot section with official Duolingo stats and branding, and introduced floating background mathematical symbols to reflect the site’s STEM theme. Looking ahead, my shortlist for the next milestone involves setting up the GitHub repository, establishing a clean deployment pipeline, and testing cross-device responsiveness. I also plan to implement smoother section scroll transitions, add further polish to the chess conundrum puzzle widget, and integrate an embedded feed for my math paradox blog. The core foundation is set, and the next phase will focus on micro-interactions and performance optimization!
Devlog #2: Goalpost Animations, Multi-Puzzle Engine & Expanded Social DeckIn this second development update, the primary focus shifted toward deepening interactivity and refining visual feedback across the personalized deck. The football minigame received a full structural overhaul, transitioning from a basic bounce effect to a dedicated goalpost frame complete with net pattern styling. Clicking the ball now triggers a smooth CSS transform animation that shoots the ball directly into the “Top Bin” target before resetting. Additionally, the single chess conundrum was upgraded into a dynamic multi-puzzle system featuring custom navigation controls, allowing users to toggle seamlessly between different tactical scenarios like Smothered Mates, Queen Sacrifices, and Back-Rank Checkmates.On the UI and networking front, several visual polish passes and link integrations were executed. A subtle neon glow text-shadow was applied to the hero header to make the main title stand out against the radial backdrop. The social media grid was expanded with Spotify and Reddit widgets to complete the box layout, and the Duolingo badge was updated with a clean monochrome owl vector icon. To ensure full functionality, all movie posters, web series cards, gaming overlays, and social widgets were wrapped in explicit link structures, ready for exact external URL mapping, along with a lightweight SVG favicon added to the document head.With the core interactive features fully implemented, the next milestone focuses on deployment readiness and optimization. The short-term plan includes conducting thorough cross-device responsiveness testing, verifying touch interactions on mobile viewports, and populating final project links. Following these final refinements, the site will be pushed to GitHub to establish an automated deployment pipeline for live hosting.
In this update, the primary focus was on resolving external asset rendering issues, expanding the interactive deck, and completing the site’s digital footprint grid. The most critical fix involved addressing hotlink restrictions from media hosts like IMDb and Amazon CNDs by implementing a no-referrer meta header in the layout. This allowed all high-resolution film posters, web series covers, and gaming media assets to render smoothly without broken image links or aspect-ratio distortion. Additionally, a custom SVG favicon was introduced, and a subtle neon text-shadow glow was added to highlight my name across the hero section. To complete the digital footprint section, I added dedicated Spotify and Reddit widgets with glowing neon halos alongside the existing social cards. The Duolingo widget icon was also updated to a sleek, monochrome vector design to maintain visual consistency across all network blocks. With the media display bugs resolved and all interactive props fully operational, the project is ready for its final deployment pipeline and cross-device performance testing.
Ships:
I’ve officially shipped the first version of my personal space website—a custom-built interactive hub created entirely from scratch using pure HTML, CSS, and JavaScript. The site brings together my passions as a student, featuring dynamic media rank grids for my favorite movies and series, a polyglot Duolingo vault, and verified STEM credentials. The biggest challenges were fine-tuning section color contrasts, fixing image header delivery issues, and making sure complex layout grids aligned cleanly across all devices. I’m particularly proud of blending functional personal branding with subtle aesthetic touches like floating background math equations, neon glow rings, and responsive animations. To test the site, head over to the interactive “Personalized Deck” in the Vibe Corner: take a shot on the animated football goalpost, test your logic across the tactical chess puzzles, or brew a observation in the tea cup corner. Be sure to click the “View FUT Manager Card” button in the hero header, click any movie poster to visit its IMDb page, and interact with the floating props hovering in the bottom corners of the screen!...
|
1793444021.8531766
|
1793530421.8531766
|
|
35013
|
My niche website by @naitikcool | Stardance
|
naitikcool
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-29T18:13:45Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a personal website for myself . the most challenging part was to identify the spacing , it took me sm time to just see everytime “is it ok now” . I loved the portfolio section because it looks so cool , dont mind the hero section text , I just wrote for fun , i hope thats okay", "repo": "https://github.com/nAItiklearn/my-personal-webste", "demo": "https://naitiklearn.github.io/my-personal-webste/"}]...
|
[{"post_id": 37178, "ts": "202 [{"post_id": 37178, "ts": "2026-07-29T18:06:00Z", "hours": 0.9411, "text": "devlog #4 , yayy i mostly completed everything i planned , i personally love the portfolio section , let me know if theres a bug or any suggestions. now imma start a new project on frictionless"}, {"post_id": 36611, "ts": "2026-07-28T20:36:19Z", "hours": 2.0997, "text": "devlog #3 - so today i didn’t do much , had extra classes in school, wtv . I did this service section today which is looking pretty decent. im facing word spacing problem. also I wanted to ask one thing , is it allowed to add some pre built elements in our project?"}, {"post_id": 35994, "ts": "2026-07-27T19:58:42Z", "hours": 1.7431, "text": "devlog #2 hi , its day 2 for my website and today i was searching web for designs and saw a great design and got inspired , i saw their code , tried to get the logic and then tried adding in my project , took me 1.5 hours just to do the navigation and terminal section . I learned about class tags . the website still needs a a lot of improvement , which i will do day by day"}, {"post_id": 35400, "ts": "2026-07-26T19:39:00Z", "hours": 2.3508, "text": "hi hi hi , First project , first devlog , so I have made the structure for my website , added this color just for fun , tmw ill add the css . good night"}]...
|
Title: My niche website by @naitikcool | Stardance Title: My niche website by @naitikcool | Stardance
Devlogs:
hi hi hi , First project , first devlog , so I have made the structure for my website , added this color just for fun , tmw ill add the css . good night
devlog #2 hi , its day 2 for my website and today i was searching web for designs and saw a great design and got inspired , i saw their code , tried to get the logic and then tried adding in my project , took me 1.5 hours just to do the navigation and terminal section . I learned about class tags . the website still needs a a lot of improvement , which i will do day by day
devlog #3 - so today i didn’t do much , had extra classes in school, wtv . I did this service section today which is looking pretty decent. im facing word spacing problem. also I wanted to ask one thing , is it allowed to add some pre built elements in our project?
devlog #4 , yayy i mostly completed everything i planned , i personally love the portfolio section , let me know if theres a bug or any suggestions. now imma start a new project on frictionless
Ships:
i made a personal website for myself . the most challenging part was to identify the spacing , it took me sm time to just see everytime “is it ok now” . I loved the portfolio section because it looks so cool , dont mind the hero section text , I just wrote for fun , i hope thats okay...
|
1793444023.0111468
|
1793530423.0111468
|
|
35229
|
EpicTab by @Epicninja3 | Stardance
|
Epicninja3
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T21:16:55Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "EpicTab is a new tab page to make every one of your tabs productive and helpful! EpicTab incorporates many important and useful features, such as the weather and a calendar. EpicTab is made with HTML, JS, and CSS EpicTab has many features, such as a calendar, NASA’s APOD, a flight tracker, a timer, a to-do list, and customizable backgrounds! Check the Github README for a quick guide on how to use this project!", "repo": "https://github.com/epicninja3/EpicTab", "demo": "https://epicninja3.github.io/EpicTab/"}]...
|
[{"post_id": 39815, "ts": "202 [{"post_id": 39815, "ts": "2026-08-03T01:50:57Z", "hours": 1.8142, "text": "some more new features! Wallpaper! You can now change your wallpaper! With the new settings button you can select a file from your computer and set it as your new background. Additionally, some of the text (such as the time) will switch from black to white based on how bright your background is. Greetings! A greeting will appear along with a customizable name. The greeting also changes based on the time of day (ex. good morning, good afternoon…) To-do! Added a to-do list to keep track of your daily tasks! It also has a delete button! Task memory and edit button coming soon!"}, {"post_id": 36616, "ts": "2026-07-28T20:52:53Z", "hours": 3.0589, "text": "New Features! I added a Flight Tracker!!! Simply put the flight number of the flight you want to track, and you will be able to see the following information: Departure + Arrival City and Airport IATA codes (ex. LAX - Los Angeles) Time since departure and time until arrival Airline that the plane is operating under (ex. Emirates or Southwest) The aircraft model (ex. Boeing 737 MAX 8) Flight status (ex. Landed, en-route) I used an API to gather data for the flight tracker. I also added a calendar for general viewing. I may make this more interactive, but for now it is simply a calendar to help users easily check the calendar."}, {"post_id": 33287, "ts": "2026-07-23T02:21:45Z", "hours": 4.84, "text": "I worked on my new tab webpage project and added a few features. I added a Google search bar that searches Google as well as a bookmarks/shortcuts bar underneath. I also incorporated NASA’s Astronomy Picture of the Day in a widget in the left corner, you can expand the caption to read the full details about the image. Additionally, I added a timer in the right corner with a progress bar that decreases as the time runs out. In the middle of my page, I included a small weather widget that displays the current temperature as well as an icon that represents the current weather."}]...
|
Title: EpicTab by @Epicninja3 | Stardance
Devlogs Title: EpicTab by @Epicninja3 | Stardance
Devlogs:
I worked on my new tab webpage project and added a few features. I added a Google search bar that searches Google as well as a bookmarks/shortcuts bar underneath. I also incorporated NASA’s Astronomy Picture of the Day in a widget in the left corner, you can expand the caption to read the full details about the image. Additionally, I added a timer in the right corner with a progress bar that decreases as the time runs out. In the middle of my page, I included a small weather widget that displays the current temperature as well as an icon that represents the current weather.
New Features! I added a Flight Tracker!!! Simply put the flight number of the flight you want to track, and you will be able to see the following information: Departure + Arrival City and Airport IATA codes (ex. LAX - Los Angeles) Time since departure and time until arrival Airline that the plane is operating under (ex. Emirates or Southwest) The aircraft model (ex. Boeing 737 MAX 8) Flight status (ex. Landed, en-route) I used an API to gather data for the flight tracker. I also added a calendar for general viewing. I may make this more interactive, but for now it is simply a calendar to help users easily check the calendar.
some more new features! Wallpaper! You can now change your wallpaper! With the new settings button you can select a file from your computer and set it as your new background. Additionally, some of the text (such as the time) will switch from black to white based on how bright your background is. Greetings! A greeting will appear along with a customizable name. The greeting also changes based on the time of day (ex. good morning, good afternoon…) To-do! Added a to-do list to keep track of your daily tasks! It also has a delete button! Task memory and edit button coming soon!
Ships:
EpicTab is a new tab page to make every one of your tabs productive and helpful! EpicTab incorporates many important and useful features, such as the weather and a calendar. EpicTab is made with HTML, JS, and CSS EpicTab has many features, such as a calendar, NASA’s APOD, a flight tracker, a timer, a to-do list, and customizable backgrounds! Check the Github README for a quick guide on how to use this project!...
|
1793444024.1822348
|
1793530424.1822348
|
|
9621
|
Isles by @derped1 | Stardance
|
derped1
|
1
|
4.0
|
10
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T19:19:36Z", "hours": 4.0, "multiplier": 2.57, "payout": 10, "blessing": "neutral", "text": "Isles is a small Minecraft plugin I made that generates Skyblock-style islands in a grid, with each player getting their own island. I built it for my SMP because I wanted something my friends and I could play for about a week that felt more interesting than starting another normal vanilla world. I’m honestly proud that it lasted that long, because most of my friends are not as into Minecraft anymore. Even though the plugin is simple, it created a good social environment where people could hang out, trade, bridge to each other, and actually interact instead of everyone splitting off and doing their own thing. The hardest part was probably figuring out island placement. I had to find a good middle ground where the islands were far enough apart to feel separate, but not so far that bridging to friends became annoying. That decision ended up mattering a lot because the whole point of Isles is that every island exists in the same physical world, with a center island connecting everything together. What makes Isles different from normal Skyblock is that it is not just a bunch of isolated islands. Everyone is still in the same world, so you can visit your friends, trade with them, and build connections between islands. My favorite part was not really one specific feature, but just seeing the server turn into a place where my friends could mess around together for a week. I would rather people try Isles with their own friends before voting on it instead of just upvoting or downvoting blindly. It is meant to be judged by how it feels to play socially, not just by looking at the code or the idea from the outside.", "repo": "https://github.com/Derpedyea/Isles", "demo": "https://modrinth.com/plugin/isles"}]...
|
[{"post_id": 9370, "ts": "2026 [{"post_id": 9370, "ts": "2026-06-15T18:26:40Z", "hours": 3.0722, "text": "I made some more changes but it was a while ago so I don’t remember exactly. I made a little wiki and the project is basically done as the server is over so I’m going to ship it. I also made gravel obtainable in the center to allow for more dirt."}, {"post_id": 3444, "ts": "2026-06-06T11:53:10Z", "hours": 0.8689, "text": "I made the basic plugin it has islands that generate in a grid around the center which is an array of “asteroids” with resources that players can pvp and bridge too."}]...
|
Title: Isles by @derped1 | Stardance
Devlogs:
I m Title: Isles by @derped1 | Stardance
Devlogs:
I made the basic plugin it has islands that generate in a grid around the center which is an array of “asteroids” with resources that players can pvp and bridge too.
I made some more changes but it was a while ago so I don’t remember exactly. I made a little wiki and the project is basically done as the server is over so I’m going to ship it. I also made gravel obtainable in the center to allow for more dirt.
Ships:
Isles is a small Minecraft plugin I made that generates Skyblock-style islands in a grid, with each player getting their own island. I built it for my SMP because I wanted something my friends and I could play for about a week that felt more interesting than starting another normal vanilla world. I’m honestly proud that it lasted that long, because most of my friends are not as into Minecraft anymore. Even though the plugin is simple, it created a good social environment where people could hang out, trade, bridge to each other, and actually interact instead of everyone splitting off and doing their own thing. The hardest part was probably figuring out island placement. I had to find a good middle ground where the islands were far enough apart to feel separate, but not so far that bridging to friends became annoying. That decision ended up mattering a lot because the whole point of Isles is that every island exists in the same physical world, with a center island connecting everything together. What makes Isles different from normal Skyblock is that it is not just a bunch of isolated islands. Everyone is still in the same world, so you can visit your friends, trade with them, and build connections between islands. My favorite part was not really one specific feature, but just seeing the server turn into a place where my friends could mess around together for a week. I would rather people try Isles with their own friends before voting on it instead of just upvoting or downvoting blindly. It is meant to be judged by how it feels to play socially, not just by looking at the code or the idea from the outside....
|
1793444026.194082
|
1793530426.194082
|
|
41693
|
SonBot! by @exasperadou | Stardance
|
exasperadou
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-30T22:40:43Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first Slack Bot and im really happy. It was really fun learning how to do it and all the process itself. I had some difficulties setting it up with Nest because some commands didnt work, but at the end, i did it. I hope you like it.", "repo": "https://github.com/exasperadou-max/sonbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BLV0ADNEP?skip_today=1"}]...
|
[{"post_id": 37875, "ts": "202 [{"post_id": 37875, "ts": "2026-07-30T21:14:18Z", "hours": 1.98, "text": "Im done with the commands, now i gotta upload the bot to Nest, here is a list of all commands and how to use them"}, {"post_id": 37411, "ts": "2026-07-30T03:17:03Z", "hours": 1.9322, "text": "This has been very fun. I have implemented commands like real-time bitcoin price, random frog and random country. :)"}]...
|
Title: SonBot! by @exasperadou | Stardance
Devlog Title: SonBot! by @exasperadou | Stardance
Devlogs:
This has been very fun. I have implemented commands like real-time bitcoin price, random frog and random country. :)
Im done with the commands, now i gotta upload the bot to Nest, here is a list of all commands and how to use them
Ships:
I made my first Slack Bot and im really happy. It was really fun learning how to do it and all the process itself. I had some difficulties setting it up with Nest because some commands didnt work, but at the end, i did it. I hope you like it....
|
1793444079.8708584
|
1793530479.8708584
|
|
21914
|
MIRA - Machine Intelligence for Recycling by @jere MIRA - Machine Intelligence for Recycling by @jeremy | Stardance...
|
jeremy
|
1
|
105.04
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T14:58:05Z", "hours": 89.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "MIRA — Machine Intelligence for Recycling Automation Project Overview MIRA is a computer-vision system designed to identify recyclable materials and prepare the results for automated sorting. Its purpose is to connect camera and robot arm. For automated trash recycling The system recognizes five material classes: glass, metal, paper, plastic, and trash. it utilizes YOLO11n models for the base and is selftrained on mutiple opensource datasets from various soruces MIRA ia also more than just a model file. It includes a full research pipeline for model training with the following features, registering datasets, merging sources, remapping labels, validating YOLO annotations, creating reproducible splits, training detectors, evaluating results, benchmarking models, and exporting them for different environments. To do that it uses a command-line interface which can run live inference, starts the dashboard, manages datasets and models, launches training, evaluates detectors, compares performance, exports formats, and runs diagnostics. MIRA supports 3 kinds of models FP32 PyTorch model, an ONNX and an INT8 TFLite export. The TFlite versions is meant for rasberry pis though benchmarks are still missing Mira also posses a dedicated website. For information and docs.", "repo": "https://github.com/jeremy341/MIRA-AI", "demo": "https://mira-vision.vercel.app/"}]...
|
[{"post_id": 55660, "ts": "202 [{"post_id": 55660, "ts": "2026-08-27T16:51:22Z", "hours": 10.2483, "text": "MIRA - Revision 2 This phase was just about bug fixin, way to many bugs i dont know where they even came from. Pipeline I first started with the research pipeline for some reason it wasnt really activated like the CLI wasnt running because I initialied the pipeline in the wrong order so I fixed that. Camera Engine After the reviewer came back to me and told me that my camera engine for the dashboard wasnt working I say down and did a whole redesign to make sure it works and looks good. The main bug was just as before that I didnt cover edge cases and initailised the camera engine in the wrong order. #Website I did another redesing of the website though not much changes i just rewrote logic and cleaned up the docs page again. Next Steps So first of all for some reason this devlog is 10 hours idk how its this much prob a kind of bug which I need to analyse. I will now continue cleaning up the entire codebase for bugs and hopefully push it one last time and get accepted"}, {"post_id": 52246, "ts": "2026-08-22T10:43:11Z", "hours": 5.7886, "text": "MIRA - Revision This devlog is about fixing bugs and redoing parts of my website. It seems like my project won’t be approved because of the website and the amount of AI used for it, which I fully understand. There is just one problem: the website was never the focus of MIRA. It is purely aesthetic and was made so people can get a quicker overview of the project. Still, I complied and rewrote around 1000 lines of code, changing spacing, logic and other parts of the website. But it is still not being approved, so the next step is creating a separate, simpler website just for Stardance so the project can finally be approved. Bugs While working on the website, I wanted to test the dashboard and noticed that it didn’t seem to work anymore. I analyzed what was wrong but couldn’t really understand why. The dashboard was my first experience using FastAPI, but from the logic I understood, it should have worked. It just didn’t. So instead of trying to patch it, I decided to redo the whole backend logic of the dashboard and adjust it to work more like MIRA Live. This fixed the bug, but even afterwards I still couldn’t fully figure out what exactly caused the old version to stop working, even after asking AI and going through the code multiple times. As it had been working before Website Redesign Before deciding to create a completely separate website as mentioned above, I tried redesigning and cleaning up the current website as much as possible. I didn’t touch the color palette because I chose it myself for a specific reason, and I honestly can’t identify MIRA with another color scheme anymore. Instead, I removed things I wouldn’t have been able to code myself, like certain slide-in animations and more complicated spacing. I also rewrote parts of the logic that I didn’t properly understand before and replaced them with simpler solutions that I actually understand. Next steps Hopefully i can get approved soon and will be able to finnaly work on the next project. Iam probally goint to try one more time to redesign the website and if that doesnt work I will create a new one which i just think is unecssary, because as I said MIRA is a computer vision model and research pipeline coded mostly by hand and the website was just generated quickly for asthetic reasons and truth be told isnt necessary at all"}, {"post_id": 39514, "ts": "2026-08-02T14:51:06Z", "hours": 2.6247, "text": "Last Devpost Created the Website but a lot of time was lost as for some reason hackatime didnt track I am now finished couldnt bother to write a real devpost this time https://mira-vision.vercel.app/"}, {"post_id": 38961, "ts": "2026-08-01T16:09:09Z", "hours": 8.2483, "text": "MIRA — Day 15: Repository Cleanup, EXP-019, and Reproducible Results This time Instead of adding more features, I concentrated on making the existing software easier to understand, easier to reproduce, and just better overall. The main outcomes were a big repo cleanup, New kaggle results with EXP018/019 reaching all time high of mAP50 of 90% Repository Cleanup and Reliability Improvements I performed another detailed check of the complete codebase. Which highlightes some more issues as a lot of code was Ai generated. The review uncovered problems in both the runtime software and the research CLI/pipeline. I cleaned up third party model files, duplicate documentation, archived ZIP files, and unused assets such as Datasets. The local repo had previously grown to ca 13 GB , largely because of old Git objects. After the cleanup, it was reduced to approximately 520 MB . The README was reduced from roughly ** 900 lines** to approximately 340 lines . It now concentrates on the current installation process, the active perception pipeline, the best available models, dataset origins, known limitations, and reproducibility. Jugend forscht material was moved into the jufo/ directory, while the related-work section was separated into its own document and was put in gitignore for various reasons. EXP-018 and EXP-019 After rebuilding the dataset and correcting the training workflow, I trained YOLO11n on the cleaned and balanced dataset. EXP-018 achieved the following results: Metric Result mAP50 90.6% mAP50-95 82.2% Glass mAP50 90.8% Metal mAP50 94.8% Paper mAP50 88.7% Plastic mAP50 81.1% Trash mAP50 97.5% Compared with EXP-014, which achieved 60.7% mAP50 on the older dataset, this represents an improvement of 29.9 percentage points . I repeated the training as EXP-019 to test whether the result was reproducible. EXP-019 again achieved 90.6% mAP50 on the same clean dataset. So EXP-019 is now the best Model and the final one Model Exports The EXP-019 was exported into multiple formats for later deployment tests: Format Approximate size Intended use FP32 PyTorch 5.5 MB Development and reference inference INT8 TFLite 2.90 MB Resource-constrained edge hardware ONNX 10.1 MB Cross-platform inference and benchmarking The INT8 TFLite version is especially important for the planned Raspberry Pi Zero 2 W deployment. Its smaller size should reduce storage and memory pressure, although its real speed, temperature, and accuracy still need to be measured on the target hardware. Next Steps The next task is to benchmark EXP-019 on the Raspberry Pi Zero 2 W ordered through Stardance. The test will measure: Inference speed and end-to-end latency. Memory usage. Temperature during continuous operation."}, {"post_id": 37701, "ts": "2026-07-30T16:30:22Z", "hours": 9.6736, "text": "MIRA — Day 14: Dataset Rebuild, Failed Kaggle Runs, and JuFo Preparation Today focused on making MIRA scientifically reliable instead of simply adding more features. I completed another full codebase revamp, checked two failed Kaggle training runs, rebuilt the waste dataset, improved the training workflow, and rewrote the Jugend forscht report. Codebase Audit and Bug Fixing I reviewed the complete Python codebase as about 50% is ai generated and I really didnt take the time to verfiy everything. Important fixes included: Repairing dashboard crashes caused by missing runtime fields and an incorrect performance-metrics function call. Preventing camera shutdown from releasing the camera while another thread was still reading from it. Adding bounded shutdown handling so a blocked camera driver cannot freeze the application. Fixing the custom mAP implementation, which previously allowed predictions from one image to match ground-truth boxes from another image. Preventing export: YAML sections from being passed to Ultralytics as invalid training arguments.. Correcting generated Kaggle and Colab dataset YAML files. Dataset Research and Reconstruction I wanted to train new models so yolo11n and the new yolo26n so I created new datasets. I processed TACO, TrashNet, Roboflow, dmedhi, Keremberke, WaRP, and SortWaste. Keremberke was excluded because its class remapping would have cuased generated approximately 45,000 misleading trash annotations and pushed trash to 40% of all annotation which create an imbalance SortWaste was removed after it showed that most pictures were from the same perspective and always plastic. The rebuilt dataset uses only dmedhi, TACO, Roboflow, and SAM-labeled TrashNet . 5,108 training images 415 tabletop validation images 1,375 independent test images 6,898 unique images 12,832 bounding boxes The training split is approximately balanced, with 1,621–1,982 boxes per class . The final zip is ca 3.6GB Failed Kaggle Training Attempts I ran kaggle scripts overnight and in these was the sortwaste dataset included which gave me these results. Also i did the mistake of running yolo11x and not n whihc explains the 26 epochs even though it ran for 9 hours. YOLO26n 188 epochs 29.1% mAP50 Plastic: 59.7% Trash: 5.4% **YOLO11x ** 26 epochs 20.9% mAP50 Trash: 2.3% These runs were not downloaded or treated as valid results. As they were so bad I didnt want to document them in any kind I ran a new kaggle script for yolo11n with the new cleaned datasets which hopefully has better results. Jugend forscht Report Revision I checked the LaTeX report against the official Jugend forscht requirements. The previous version exceeded the page limit and was quite frankly just bad and build on a lot of assumption so a big part of today was just rewriting it Next Steps I am currently waiting for the YOLO11n training results. The YOLO26n run is planned for next week, as the failed training attempts exhausted my available Kaggle usage. Afterwards, I will benchmark the final model on the Raspberry Pi Zero 2 W I ordered through Stardance. Once the edge-hardware evaluation is complete, I can finalize MIRA and begin planning and building the robot arm."}, {"post_id": 34063, "ts": "2026-07-24T14:56:41Z", "hours": 10.1594, "text": "MIRA — Day 13: Backend Bug Cleanup, Test Suite Expansion, and AI Tooling Today was split between fixing silent backend bugs in MIRA-AI, expanding my test suite to 120 passing tests, and configuring my external AI development tools. Backend Bug Cleanup I ran a full diagnostic check across the codebase and resolved 15 specific bugs: Duplicate Camera Service: Found and removed a bug in main.py that was initializing two separate camera service instances on startup. TFLite Tracking Guard: Disabled ByteTrack tracking when running TFLite models in camera_service.py , since TFLite inference doesn’t support ByteTrack tracking. Modern FastAPI Lifecycle: Migrated from deprecated on_event handlers to the modern asynccontextmanager lifespan pattern across my API services. Code Quality: Updated remaining deprecated .dict() calls to .model_dump() for Pydantic v2, fixed an immutable frozenset cleanup bug in my tests, and resolved 183 Ruff linter warnings. Expanding the Test Suite to 120 Tests I wrote new unit test suites for previously uncovered backend modules: Dashboard Models & WebSockets: Added 30+ tests covering Pydantic model serialization and boundary conditions, plus 15+ tests for WebSocket event callbacks and metric queuing. Test Isolation: Fixed a bug in test_logger.py where the root logger was leaking state between test runs, and fixed brittle Python version checks in test_serialization.py . Current Status: My test suite is now sitting at 120 out of 120 passing tests with 0 Ruff lint errors. AI Developer Tooling & DigitalOcean Outside the core MIRA repository, I spent time configuring my external OpenCode AI setup across multiple providers (OpenRouter, local Docker, Ollama, and GitHub Copilot): Fixed an endpoint URL misconfiguration in my OpenRouter settings and tested connectivity across 23 models. Added handling for “reasoning models” that return output in a reasoning field rather than standard content. Researched how to use my $200 DigitalOcean student credit before it expires on July 31st. Since student credits cannot be applied to GPU Droplets, I plan to deploy a 128 GB Memory-Optimized CPU Droplet to run Ollama with 70B models for offloaded testing. Next Steps Hardware Benchmarks: Run real-world FPS and latency tests on a Raspberry Pi Zero 2W. Trash Class Data: Collect targeted training data for the general “Trash” class, which remains my weakest class at 7.1% mAP50. Also go over the website cause it looks pretty ai generated right now"}, {"post_id": 33074, "ts": "2026-07-22T17:30:48Z", "hours": 10.7814, "text": "MIRA — Day 12: Codebase Audit, EXP-017 Results, and Cross-Platform Fixes Before diving into codebase fixes, I finished training EXP-017 on Kaggle using the merged mira_all dataset. It reached 59.3% mAP50 —which is slightly below EXP-014’s 60.7% . This confirmed a key lesson for me: dataset quality and class balance matter far more than sheer image count. After that, I shifted my focus to running a full diagnostic audit of my codebase to clean up bugs and edge cases. Fixing the Health Check My health check command ( mira doctor ) was crashing immediately on Windows with a UnicodeEncodeError due to special status symbols ( ✓ , ✗ , ⚠ ). I replaced them with plain ASCII characters ( [OK] , [!] , [FAIL] ). Added checks for missing camera backends on Linux so the health check runs cleanly end-to-end regardless of the OS. Making Torch and TensorFlow Optional MIRA supports both PyTorch ( .pt ) and TFLite ( .tflite ) models, but requiring both libraries installed was frustrating—PyTorch alone takes up over 800 MB. I refactored my model adapters and dashboard to use lazy-imports. If PyTorch isn’t installed, PyTorch models gracefully report as unsupported without crashing the application. This allows a lightweight setup without forcing massive unnecessary downloads if someone only wants to run TFLite models on edge hardware. Cross-Platform & Service Hardening I cleaned up my startup scripts and hardened my camera service against common edge-case failures: Updated mira.bat with PYTHONUTF8=1 for Windows, and created a native mira.sh for Linux and macOS. Added OS guards around the Windows-specific DirectShow camera backend. Fixed a potential division-by-zero crash when video FPS drops to zero. Switched Linux CPU temperature reads to psutil instead of hardcoding 0°C. Ensured the model object memory is properly freed on shutdown. Security, Pydantic v2, and Edge Cases Security: I restricted CORS in my web dashboard from wildcard access ( * ) to localhost ( 127.0.0.1:8000 ). Pydantic Upgrade: Replaced deprecated .dict() calls with .model_dump() for Pydantic v2 compatibility. Integrity: Explicitly forced UTF-8 encoding on all YAML file reads, and added SHA-256 hash verification to mira download . Current System Status After resolving these issues, my test suite is sitting at 99 out of 99 passing unit tests , my Ruff linter reports 0 errors , and all 17 CLI commands are fully functional. I also prepared my HackClub StarDance submission writeup and updated the main README with current CLI specs and experiment data. Next Steps Hardware Benchmarking: Measure real-world FPS and inference latency on a Raspberry Pi Zero 2W. Trash Class Data: Collect targeted training images to improve the general “Trash” class, which remains my weakest performer (7.1% mAP50). in this pic you can see a sneakpeak to a new feature"}, {"post_id": 31477, "ts": "2026-07-19T21:36:10Z", "hours": 9.485, "text": "MIRA — Day 11: Dashboard Redesign, Dual Modes, and EXP-017 Datasets Today was all about front-end overhauls and preparation for my next training run. I redesigned my web interface, split it into two dedicated operating modes, and finalized my biggest dataset merge yet to prepare for training EXP-017. Clean Light Theme Dashboard I shifted the entire MIRA web dashboard from my old dark theme to a clean light theme with a mutiple colors. JUFO vs. Stardance Modes I introduced two separate dashboard modes that I can select on-the-fly using URL parameters: JUFO Mode ( ?mode=jufo ): A technical view tailored for competition judges, featuring deep metrics, historical training graphs, and real-time backend diagnostics. Stardance Mode ( ?mode=stardance ): An interactive, simplified playground designed for quick live demonstrations with clean control toggles. System Health & Live Settings I replaced my static history table with a real-time System-Health panel displaying CPU, RAM, temperature, and inference latency using animated progress bars. I also added an “Einstellungen” (Settings) tab to Stardance mode, allowing me to adjust model weights (via a dynamic API model picker), confidence thresholds, IoU, and camera resolution directly from the web UI without needing to restart the Flask backend. Threaded Camera Pipeline My camera stream was bottlenecking my inference engine. I decoupled the frame capture from the detection loop by moving the capture process into a dedicated Python threading.Thread . The web stream now runs at a smooth 20 FPS at 320px resolution. I also patched Camera.release() to verify the stream is open before shutting down, preventing a common camera-close crash. Datasets & EXP-017 Preparation I successfully merged all four of my data sources (TACO, TrashNet, Roboflow, and WaRP) into a unified dataset named mira_all . It contains 9,774 images across 5 classes. While generating the ZIP file, I hit an archive path encoding issue that broke folder hierarchies. I solved this by using just the normal windows option to zip files instead of the powershell way which I wanted to test out My current baseline model (EXP-014) is still performing well with an 85.8% F1-score on my field benchmark, though the general “Trash” class remains my weakest spot at 37.6% due to how much random variation “trash” actually has. Pipline I also worked on pipline and am working on making it plug play allowing user to get any 3rd party model plug it in and use the full research pipline to retrain it compare it benchmark it and do a lot of stuff. I also added the option to add custom datasets and expanded on the CLI with mutiple custom commands this is probally, the second last post because I am nearly finished. The ui for the dashboard was made with ne gpt 5.6 sol because I just couldnt come up with a good ui. Next Steps Train EXP-017: Upload the clean mira_all dataset and run training on Kaggle. Logger Analysis: Review the data from my new last_per_class.json file to see which items are being misidentified during continuous live runs."}, {"post_id": 30068, "ts": "2026-07-17T11:02:10Z", "hours": 9.7753, "text": "MIRA — Day 10: Removing Streamlit, Safety, and Purging my LLM Tools I spent the last week cleaning up a massive amount of technical debt. After about 40 commits, touching 168 files, and adding 6,186 lines of code while removing 1,200 lines of old code, the repo is finally much cleaner. The biggest changes were replacing Streamlit with a Flask-SocketIO server, auditing my project for the Jugend Forscht competition, and removing my custom AI development tools (which I built earlier to help me write code). Replacing Streamlit with Flask + SocketIO Streamlit was a bottleneck for real-time video streaming and thread-safe operations because it re-runs the entire script on user interaction. The Architecture: I built a custom Flask and SocketIO dashboard under src/dashboard_flask/ . Live camera frames are captured in a background thread, encoded to JPEG, and pushed over WebSockets. Thread Safety: I implemented four threading locks to prevent race conditions: camera_lock , model_lock , inventory_lock , and config_lock . Bugs Fixed: I resolved an unnecessary BGR-to-RGB conversion that was washing out my live camera colors, and wrapped my configuration updater in config_lock to prevent multi-thread memory corruption. Modularizing my Inference Pipeline To clean up the backend, I consolidated all duplication: I deleted the separate live and debug scripts, merging their logic into a single src/inference_engine.py module. This engine handles the threaded camera feed, YOLO11n prediction loop, and my BYTETrack fallback. All paths, labels, and parameters are now centralized in src/config.py . Purging my Custom AI Tools I built a terminal-based AI coding assistant to help me write and modify code. However, after an architectural review, I decided it does not belong in this repository. The Reason: MIRA stands for Machine Intelligence for Recycling Automation. The codebase should focus strictly on computer vision and robotics, not LLM wrappers. The Separation: I separated all AI coding utilities into a new MIRA-DevTools repository, which I will start as I near the end of MIRA. JUFO Competition Audit & Paper Since this project is for Jugend Forscht, I have been heavily working on my scientific paper (which I realized I haven’t actually mentioned in previous updates). AI Audit: I ran an AI-assisted audit against JUFO evaluation criteria. It originally rated my project at a 6/10 because my paper lacked a deep discussion section and YOLO11n graphs. The Fixes: I expanded my analysis on how the WaRP dataset’s class imbalance skewed my trash predictions, and compiled a 22-page LaTeX report with proper bibliographies and training curves. Quality Assurance: I added 17 unit tests and automated GitHub Actions with Pytest and Ruff. I will translate the paper to English and upload it soon. Next Steps Folder Cleanup: Run git-filter-repo to shrink my 17 GB folder by removing cached datasets before pushing to GitHub. Final Training: Train one last model on my optimized dataset combination once my Kaggle GPU hours reset."}, {"post_id": 28506, "ts": "2026-07-14T20:00:38Z", "hours": 8.2939, "text": "MIRA Day 9: YOLO11 Migration, INT8 Issues, and Dataset Analysis Over the last few days, I focused on improving the project structure, simplifying the codebase, and testing different approaches for the detection pipeline. I made around 15 commits, added roughly 2,200 lines of code, and removed around 1,000 lines that were duplicated or no longer needed. The main changes were migrating from YOLOv8n to YOLO11n, creating an automated benchmark script, and investigating why some dataset combinations performed worse than expected. YOLO11 and Dataset Experiments I moved from YOLOv8n to YOLO11n because it is better suited for edge deployment while keeping the model lightweight. Since MIRA is intended to run on limited hardware, inference speed and efficiency are important. To test different training setups, I trained four model variants using Kaggle T4 GPUs. I compared several datasets: TACO: Outdoor litter images. TrashNet: Clean recycling images from controlled environments. Roboflow Trash Detection: Waste images with bounding box annotations. WaRP: Industrial recycling images from conveyor belt environments. The best results came from combining TACO, TrashNet, and Roboflow. This combination performed better during live camera tests because it contained both clean object images and more realistic trash scenarios. Why WaRP Reduced Performance Adding WaRP unexpectedly reduced the performance of my general “Trash” class. The reason was a dataset imbalance. WaRP contains many detailed recycling categories like plastic, glass, metal, and cardboard, but it has very few examples matching my general trash category. After mapping WaRP’s classes into my five target classes, most additional training data was added to recyclable categories. This caused the model to become more focused on plastic, paper, and glass while becoming less reliable at detecting mixed waste. This showed that more training data does not always mean better results. The distribution and relevance of the data are equally important. INT8 Quantization Problem While testing my INT8 TFLite model, I noticed that the detection rate was almost zero. The model itself was working, but my confidence filtering removed valid detections. After INT8 conversion, the output confidence values changed compared to the original model. Some detections that previously passed a 0.50 confidence threshold were now below it. Because my pipeline still used the old threshold, valid detections were discarded. I updated the benchmark and live detector to automatically use a lower confidence threshold for INT8 models. After this change, detections worked correctly again. Code Cleanup and Fixes I found several duplicated parts in the project, especially multiple versions of the bounding box drawing logic. I centralized these functions and cleaned up configuration and path handling. I also fixed two problems in the live detection system: Tracker dependency issue: The detector previously used BoT-SORT by default, which caused problems if the required package was missing. I changed the fallback system to use BYTETrack first. Double confidence filtering: Confidence filtering was happening both during prediction and again during visualization. I moved this into one centralized post-processing step to avoid removing valid detections. Repository Cleanup The project folder has grown to around 17 GB because of duplicated datasets, training results, logs, and model checkpoints. Before pushing everything to GitHub, I need to clean the Git history, improve the .gitignore , and remove unnecessary files. The goal is to reduce the repository size to below 500 MB. Next Steps Clean the repository and remove large unused files. Train the final model with the improved dataset combination. Generate evaluation graphs and confusion matrices for the final documentation."}, {"post_id": 25966, "ts": "2026-07-10T14:30:48Z", "hours": 8.3986, "text": "MIRA — Day 8: The Invisible Boxes (and Why Two Models Were Lying to Me) BUGS After hours of digging through Ultralytics internals with AI assistance, I found not one but three separate bugs all stacking on top of each other. Bug #1: Tracker Ultralytics 8.4.84 silently switched the default tracker from ByteTrack to something called TRACKTRACK . I never asked for this. Nobody told me. TRACKTRACK has internal confidence thresholds that are absurdly high: track_high_thresh: 0.6 # Only detections >= 0.6 are “real” new_track_thresh: 0.7 # New objects need >= 0.7 to be tracked Here’s the problem: INT8 quantization drops confidence scores by 20-40%. So a detection that would score 0.55 in the original PyTorch model now scores ~0.35 after quantization. TRACKTRACK looks at 0.35, says “too low,” and silently throws it away. No error. No warning. Just… gone. Bug #2: The Double Filter Even if TRACKTRACK somehow kept a box, my drawing function had its own confidence filter set to 0.5. So a box at conf=0.4 that survived the tracker got killed again at the drawing stage. Bug #3: Nothing Stopped the User from Loading the Wrong Model Nothing in the code prevented me from loading mira_classifier_int8.tflite — a classification model — into the detection pipeline. Which i failed to realise. The code just checked if the file ended in .tflite and said “sure, load it as a detector.” It would’ve failed silently or produced garbage. live_detection.py — The Big One I rewrote the core inference loop. Three major changes: Forced ByteTrack everywhere. PyTorch models now explicitly use tracker=\"bytetrack.yaml\" instead of whatever Ultralytics defaults to. No more silent tracker swaps. Bypassed the tracker entirely for INT8 models. TFLite INT8 now uses model.predict() instead of model.track() . No tracker = no threshold filtering = boxes actually appear. Conf is auto-overridden to 0.25 at startup because INT8 models need lower thresholds. Added model validation. If you try to load a classifier model into the detection pipeline, you now get a clear error: ERROR: ‘mira_classifier_int8.tflite’ is a CLASSIFIER model, not a detector. Live detection requires a detection model (.pt or detection .tflite). Use ’mira eval-class –model mira_classifier_int8.tflite –exp ’ instead. No more silent failures. dashboard.py — Same Story, Streamlit Edition The Streamlit dashboard had the exact same tracker and threshold bugs. Fixed identically: ByteTrack forced, INT8 models use predict(), classifier models filtered from the sidebar before you can even select them. cli.py — First Line of Defence Updated cli.py and added mutiple new commands to make it easier to use also made it possible to use in the termnail through a bat file so u can run the scripts in powershell if you want if you just add .\\mira and then commands. Also Added validation in the live subcommand so classifier models get rejected before the subprocess even spawns. Faster error, cleaner output. Folder Cleanup Reality Checked the project size today: 17.3 GB. That’s absurd for a recycling classifier. Most of it is: Failed experiment outputs Raw dataset images that should’ve been gitignored Multiple copies of the same model in different formats Private test data that never should’ve been committed Need to do a serious cleanup before pushing anything. What’s Next Downloading three new datasets to retrain on: SortWaste (WACV 2026) — real conveyor belt images, 87k bounding boxes TACO — waste in wild environments (forests, streets, beaches) NAVER Recycle Trash — 21k images, indoor + outdoor Target: Combine everything into ~20,000 images, retrain with YOLO11n, hit 80%+ mAP50 with actual real-world robustness."}, {"post_id": 22013, "ts": "2026-07-04T07:57:54Z", "hours": 1.6619, "text": "MIRA — Day 7: The “Stage B” Breakthrough (Multi-Object Detection) The Engineering Change: Scrapping the Foundation Stage A (Classification) was a controlled laboratory success, but it failed the “Real World Test”, and wasnt able to accuractly depict objects with a live cam feed, I also hit a major roadblock: my auto-labeling script used Canny Edge detection which, due to table glare and shadows, mistook my entire desk for a single object. This taught me the most important lesson in AI: Garbage In, Garbage Out (GIGO). To save MIRA, I had to delete my original dataset and move to a professional Object Detection architecture ( YOLOv8-Nano ). Data Engineering: Mapping 64 Classes to 5 I forked a high-variance “Wild Trash” dataset containing thousands of images of waste in complex environments (grass, dirt, water). The Problem: The dataset had 64 highly specific classes (e.g., “Aerosol,” “Egg carton,” “Plastic lid”). The Solution: I wrote a custom Class Remapping Engine in Python. This script programmatically rewrote thousands of .txt label files, collapsing 64 sub-categories into MIRA’s 5 core functional classes: Glass , Metal , Paper , Plastic , and Trash . Result: A robust, “Super-Dataset” of ~3,300 images ready for spatial training. Cloud-Accelerated Training Training an object detector on a local CPU would have taken days. I migrated the pipeline to Google Colab , utilizing an NVIDIA Tesla T4 GPU . Strategy: I implemented a patience=0 strategy and tuned the learning rate to 1e-3 to force the model to converge over 100 epochs despite the high variance of the “Wild” data. Outcome: Achieved an mAP50 of 82.3% on the combined dataset. The “Nano” architecture was chosen specifically to ensure the final weights (approx 6MB) can run standalone on a Raspberry Pi. The Live Multi-Object Tracking Engine The most exciting part is the new live_detection.py . MIRA no longer just “names” an image; it locates and tracks items in 3D space. ByteTrack Integration: I enabled the ByteTrack algorithm ( persist=True ). Now, the AI assigns a unique ID to every object. If a bottle is briefly covered by a hand, the Kalman Filter “remembers” its position, preventing the future servos for the robot from jittering. Performance: Latency: ~40ms (Inference) Throughput: ~15.6 FPS Simultaneous Detection: Successfully tested with 3+ materials in the frame at once. Diagnostic: Identifying Edge Cases Testing today revealed a specific weakness: Metal cans in vertical orientation (opening facing the camera). Because the feature profile changes from a cylinder to a dark circle, detection confidence drops. Fix Strategy: I will supplement the dataset with ~50 manual “end-on” photos of cans to patch this “Canonical View Bias” before the hardware build. What’s Next Creating a dashboard to see everything regarding the AI and trying to quantize it further this was highly aided by AI this time as I just couldnt fix and needed AI help to fix it. Just wanted to check how big my folder is and its 17.3 GB i really need to clean it up I still have alot failed experiements and private data inside"}, {"post_id": 20882, "ts": "2026-07-02T16:34:53Z", "hours": 0.9542, "text": "MIRA — Day 6: Post-Training Quantization and Signal Smoothing What I Built Today Today I achieved major optimization milestones, Finally creating the INT8 Quantizatio Post-Training INT8 Quantization I implemented src/quantize.py using TensorFlow’s TFLiteConverter . The script center-crops and resizes 100 representative images from the dataset to dynamically calibrate activation ranges, converting the uncompressed Keras model to full 8-bit integer precision. Compression Summary: Keras Full Model: 23.48 MB Standard TFLite: 8.49 MB Quantized INT8 TFLite: 2.61 MB (9.0x smaller than Keras binary) Zero-Dependency Live TFLite Inference I completely created the live webcam inference stream ( src/live_inference_tflite.py ). By implementing a standard mathematical Softmax and image scaling pipeline in pure NumPy, the script now starts instantly and runs with minimal CPU overhead. Jitter Reduction via Exponential Moving Average (EMA) To prevent erratic jumps in presicion so it jumping from 60 to 70 in a second caused by camera focus and exposure changes, I implemented a temporal smoothing filter on the output probabilities: smoothed_probs = alpha * raw_probs + ( 1 - alpha ) * smoothed_probs Furture plans So after thinking about it I found 2 logical problems in my model. FIrst of all the dataset it trained on is still to limited and there is not enough variaton in objects. Secondly the whole Infracstructer is wrong and at the moment its classifier and not a detecter so Its nor able to detect mutipile objects which is important for the Robot arm its also not able to discern mutipile objects on the same screen. So the next Part will porbally be a long post in which I fix all these bugs and add New featurs"}, {"post_id": 20127, "ts": "2026-07-01T17:32:54Z", "hours": 1.4083, "text": "MIRA — Day 5: Transfer Learning, and Two-Stage Fine-Tuning 1. Summary Since the last update, which was quite a while ago because I needed to learn some more basics, MIRA has evolved. By implementing transfer learning with MobileNetV2, and performing partial layer fine-tuning, overall validation accuracy was raised from 61% to 87.42% , while validation loss dropped from 1.06 to 0.31 . Which is very important. 3. Key Technical Breakthroughs & Refactors The “Paper” Class Feature Extraction Bottleneck In the initial baseline model, paper recall was extremely poor (0.07). The model regularly confused paper with metal or plastic. The Fix: Using the pre-trained ImageNet weights of MobileNetV2 resolved this. The model now extracts high-level semantic texture and edge properties. In EXP-003, paper reached a 96% precision rate . but instead metal got a bit worse and has now reached 77% from its orignal 86% Refactoring src/evaluate.py To prevent difficulties in strcuturing and avoid having multiple different evaluation scripts for each model , I refactored evaluate.py using Python’s argparse library. The script now accepts command-line arguments to evaluate any model dynamically so i can just use a comand and where it should save its finding and it will run the script acording to that: python src/evaluate.py --model mira_fine_tuned_model.keras --exp EXP-003_FineTuning It also dynamically scales the loaded image resolution (224x224 for MobileNetV2 vs. 180x180 for baseline) to avoid input shape mismatches Implementation of Two-Stage Fine-Tuning After training the custom dense classification head on frozen MobileNetV2 features, I wrote train_fine_tune.py to unfreeze the base model from layer 100 onwards (leaving the low-level edge-detection layers 0–99 intact). Recompiling with an ultra-low learning rate ( 1e-5 ) allowed the model to subtly adjust its deep weights to the recycling dataset: This successfully drove validation loss down to 0.3148 , showing that the network is making predictions with significantly higher statistical confidence. Automated Latency Benchmarking I integrated CPU latency tracking directly into the evaluation loop using time.perf_counter() to record inference times in milliseconds per image, This will be used later to see how it performs on small hardware and different I would advise everybody who wants to do something similar to use the resources i linked. 4. Next Milestones Real-time Live Webcam Inference ( src/live_inference.py ): Deploying the mira_fine_tuned_model.keras on a live video stream to evaluate performance and classification stability under varying lighting and structural angles and add these kinds of borders which state what the computer thinks the object i show is Embedded Planning: Utilising INT8 to quantize the model to a fracture of its size to run on a standalone, onboard single-board computer (Raspberry Pi), moving closer to an autonomous physical robot. Which will then be able to automatically sort them. 5. Resources Used Framework Foundation: TensorFlow Image Classification Tutorial Data Pipelines: TensorFlow image_dataset_from_directory API Model Composition: Keras Sequential Model Documentation Conceptual Architecture: 3Blue1Brown Neural Networks Playlist —"}, {"post_id": 16982, "ts": "2026-06-27T15:48:50Z", "hours": 0.9189, "text": "MIRA — Day 4: Evaluate and important results What I Built Today I built evaluate.py and redid all of my images so my data and captured 800 increasing the count from 120 to 800. This allows me to load my 800-image dataset, evaluate it against a validation set, and output a visual Confusion Matrix. Vital Changes & Difficulties Faced 1. The Alphabet-Slice Bug (Deterministic Split vs. Batch Shuffling) When I first ran evaluate.py , my Confusion Matrix looked bizarre: I had 159 test files, but every single one of them had a true label of “plastic” ! To keep my evaluation predictions aligned with the correct labels, I had initially set shuffle=False when loading the directory. Because Keras loads folders alphabetically ( glass -> metal -> paper -> plastic ), disabling shuffling caused it to read the sorted list and simply slice the last 20% for testing. The last 20% of the alphabet was entirely plastic . To fix this, I set shuffle=True so Keras would pull the exact same random validation split as the training script. To prevent the predictions from getting mismatched during shuffling, I refactored the evaluation script to pull images and labels simultaneously, batch-by-batch: y_true = [] y_pred = [] for images , labels in val_ds : preds = model . predict ( images , verbose = 0 ) batch_preds = np . argmax ( preds , axis = 1 ) y_pred . extend ( batch_preds ) y_true . extend ( labels . numpy ()) No matter how randomly Keras shuffles the images, our answers and guesses are extracted at the exact same instant, making mismatching impossible. The Paper vs. Metal Crisis 📊 With the pipeline corrected, I ran the evaluation and got a real, stable baseline accuracy of 61% worse than yestarday which was expected as the images were alot more than before and before them it was just learning the images and not guessing. Across my 159 validation images. The Confusion Matrix revealed a major failure point in my baseline CNN: True Paper Images: 42 Correctly classified as Paper: 3 Misclassified as Metal: 25 (59.5%) My simple 3-layer CNN is nearly blind to paper textures. It looks at white paper or cardboard with bright reflections and thinks: “Ah, a bright shiny reflection! This must be a metal can.” What’s Next Now that I have documented my true baseline and identified its major blind spot, we are ready to implement Transfer Learning (MobileNetV2) . This pre-trained model has seen millions of images and knows how to distinguish between the flat texture of paper/cardboard and the metallic shine of aluminum. Also i noticed that I struggled quite alot with this part so iam going to pause this project a bit to do another project ot solidify my python basics and continue from there onwards. Resources & Documentation Keras Sequential Model API — Documentation used to structure layers, dropout, and data augmentation. Scikit-Learn Classification Report — Reference for evaluating precision and recall. Scikit-Learn Confusion Matrix Display — Documentation used to plot the final matrix."}, {"post_id": 16440, "ts": "2026-06-26T19:11:19Z", "hours": 1.3836, "text": "MIRA — Day 3 Creating Model and training on Limited data What I Built Today Today I built train_baseline.py , the first complete CNN training pipeline for MIRA. The script loads the dataset, applies data augmentation, trains a 3-layer convolutional neural network, plots the accuracy and loss curves, and saves the trained model to disk. I followed the official TensorFlow image classification tutorial and adjusted it to fit the MIRA dataset structure and 4-class recycling problem. model = Sequential ([ data_augmentation , layers . Rescaling ( 1. / 255 ), layers . Conv2D ( 16 , 3 , padding = ' same ' , activation = ' relu ' ), layers . MaxPooling2D (), layers . Conv2D ( 32 , 3 , padding = ' same ' , activation = ' relu ' ), layers . MaxPooling2D (), layers . Conv2D ( 64 , 3 , padding = ' same ' , activation = ' relu ' ), layers . MaxPooling2D (), layers . Dropout ( 0.2 ), layers . Flatten (), layers . Dense ( 128 , activation = ' relu ' ), layers . Dense ( num_classes , name = \" outputs \" ) ]) Difficulty: Image Stretching The first training run loaded images incorrectly, the model was receiving stretched and distorted frames because image_dataset_from_directory resizes images to the target dimensions by default, squashing non-square images. Fixed by adding crop_to_aspect_ratio=True , which crops from the center instead of stretching: train_ds = tf . keras . utils . image_dataset_from_directory ( data_dir , validation_split = 0.2 , subset = \" training \" , seed = 123 , image_size = ( img_height , img_width ), batch_size = batch_size , crop_to_aspect_ratio = True ) Difficulty: Overfitting Early runs showed training accuracy climbing while validation accuracy stayed flat or dropped ,the model was memorizing the training images rather than learning generalizable features. This happens when the dataset is too small relative to the model’s capacity. Fixed with two countermeasures: data augmentation (RandomFlip, RandomRotation, RandomZoom) to artificially vary the training images, and Dropout(0.2) to prevent individual neurons from becoming too specialized. Results val_acc = 0.8235 @ epoch 20 val_loss = 0.4030 @ epoch 20 best val_acc = 0.8824 @ epoch 19 best val_loss = 0.3646 @ epoch 19 dataset = 126 images / 4 classes The high epoch-to-epoch variance in validation accuracy (swings of ±18%) is happening because of the low validation set containing only 17 images, one wrong prediction equals a 5.9% accuracy shift. Results will stabilize further after expanding the dataset. Coming from C/C++ Well nothing to say because I never coded anything like this in C/C++ so this one will be the last Coming from C/C++ What’s Next I will capture 200 images per class (800 total). So my results are actually meaningful and verfiable also in the images I will adjust lighning and more After the dataset is large enough: I will Write evaluate.py , load the saved model, run it on the test set, and compute a full classification report: precision, recall, and F1-score per class. So I get a per class breakdown of the real acuraccy of the certain folder each and not just the total median. Resources Used TensorFlow image classification tutorial TensorFlow image_dataset_from_directory API Keras Sequential model API 3Blue1Brown — Neural Networks series Credits Also wanted to shoutout RUMI where i got insperation for the naming scheme from."}, {"post_id": 16264, "ts": "2026-06-26T13:29:50Z", "hours": 0.9311, "text": "MIRA — Day 3 visualise data set What I Built Today Today I wrote visualize_dataset.py from scratch using the Python os , random , and Matplotlib documentation. The script counts images per class folder, samples up to 5 random images per class, and displays them in a labeled 4×5 grid. This is a sanity check before the model training you cannot train reliably on a dataset you have never inspected. import os import random import cv2 import matplotlib.pyplot as plt DATA_DIR = \" ../data/ \" CLASSES = [ ' glass ' , ' metal ' , ' paper ' , ' plastic ' ] SAMPLES = 5 total_files = 0 for class_name in CLASSES : folder = os . path . join ( DATA_DIR , class_name ) num_files = len ([ f for f in os . listdir ( folder ) if f . lower (). endswith (( ' .jpg ' , ' .jpeg ' , ' .png ' ))]) print ( f \" { class_name : < 10 } : { num_files } images \" ) total_files += num_files print ( f \" { ' Total ' : < 10 } : { total_files } images \" ) fig , axes = plt . subplots ( len ( CLASSES ), SAMPLES , figsize = ( 15 , 10 )) for row , class_name in enumerate ( CLASSES ): folder = os . path . join ( DATA_DIR , class_name ) files = [ f for f in os . listdir ( folder ) if f . lower (). endswith (( ' .jpg ' , ' .jpeg ' , ' .png ' ))] sampled = random . sample ( files , min ( SAMPLES , len ( files ))) for col , filename in enumerate ( sampled ): img = cv2 . imread ( os . path . join ( folder , filename )) img = cv2 . cvtColor ( img , cv2 . COLOR_BGR2RGB ) axes [ row , col ]. imshow ( img ) axes [ row , col ]. axis ( ' off ' ) if col == 0 : axes [ row , col ]. set_ylabel ( class_name , fontsize = 12 ) plt . tight_layout () plt . show () How It Works The script has two distinct parts. First, the counter loop iterates over each class folder using os.listdir() , filters for image file extensions, and accumulates a total. Second, the grid section uses plt.subplots() to create a fixed axes array indexed by axes[row, col] , each cell addressed independently by class row and sample column. random.sample(files, min(SAMPLES, len(files))) guards against crashes when a folder has fewer than 5 images by capping k to whatever is available. So if I only got three it just going to use three and not crash like it would normaly do for this part I ran my Code through ki afterwards and he told me to add it The one conversion that matters: cv2.cvtColor(img, cv2.COLOR_BGR2RGB) before passing to Matplotlib. OpenCV loads images in BGR channel order; Matplotlib expects RGB. Without this, all reds appear blue. I forgot this but when the pictures came out weird i remeberd the tutorial by Tech with Tim where he mentions it mutipile times I would advise everybody to watch his openCV turorial Difficulty Straightforward session. Coming from C/C++, the structure of iterating over a list of strings and using them as both display labels and filesystem paths felt natural immediately. plt.subplots() returning a 2D array of axes objects is the same concept as a 2D array in C — index by row and column. No significant blockers. Resources used: Matplotlib docs: pyplot.subplots , pyplot.imshow , Axes.set_ylabel Python docs: os.path.join , os.listdir OpenCV docs: cvtColor color conversion codes Dataset Status glass : 32 images metal : 31 images paper : 30 images plastic : 33 images Total : 126 images Also all this images are not in the Github at the moment because these aren’t high quality and good images on which i can train my model What’s Next Dataset is captured and verified. Next is the first CNN training pipeline in TensorFlow/Keras, train_baseline.py . This means learning ml and taking my first steps into it . The target for the first run is a accuracy above 75%."}, {"post_id": 15842, "ts": "2026-06-25T19:17:33Z", "hours": 2.1517, "text": "MIRA — Day 2: Dataset Capture Pipeline What I Built Wrote capture_frame.py from scratch using only the OpenCV docs, no tutorials for the code, no AI-generated code. The script opens a live webcam feed and lets me build my own labeled image dataset by pressing keystroke shortcuts to save frames directly into categorized folders. Evolution of the Capture Logic In my first draft, I managed file naming with a manual integer counter. It worked, but had a critical flaw: every time the script restarted, the counter reset to 1 and began overwriting existing files. Also through out this project I have always specified the Data type because i got advice from a friend to do that. Initial counter approach: i = int ( 1 ) if key == ord ( ' 1 ' ): filepath = os . path . join ( glass_folder , f ' frame_ { i } .jpg ' ) cv2 . imwrite ( filepath , frame ) i += 1 I replaced this with timestamp-based naming using datetime.now().strftime(\"%Y%m%d_%H%M%S\") , which ensures every file has a unique name regardless of how many times the script restarts: glass_20260625_143022.jpg glass_20260625_143022.jpg Make it more efficent to scale My first working draft had four separate folder variables and a long if/elif chain, one block per material class. Functional, but not scalable because this would mean: adding a fifth class would mean copy-pasting another entire block. First draft, repetitive structure: glass_folder = \" ../data/glass/ \" metal_folder = \" ../data/metal/ \" if key == ord ( ' 1 ' ): filepath = os . path . join ( glass_folder , f ' glass_ { timestamp } .jpg ' ) cv2 . imwrite ( filepath , frame ) elif key == ord ( ' 2 ' ): filepath = os . path . join ( metal_folder , f ' metal_ { timestamp } .jpg ' ) cv2 . imwrite ( filepath , frame ) Refactored: CLASSES = { ' 1 ' : ( ' glass ' , ' ../data/glass/ ' ), ' 2 ' : ( ' metal ' , ' ../data/metal/ ' ), } key_char = chr ( key ) if key_char in CLASSES : label , folder = CLASSES [ key_char ] filepath = os . path . join ( folder , f ' { label } _ { timestamp } .jpg ' ) cv2 . imwrite ( filepath , frame ) Adding a fifth class now takes one line in the dictionary. The save logic doesn’t change at all which is pretty neat this was quite difficult because I never worked with classes like this but I managed to do it after googling and asking AI how to set up Classes but not providing it any context so I can write it myself. Coming from C/C++ One thing I found difficult to utilise where f strings. I dont know if a equalivent exists in C/C++ but I never used it so it was quite weird utilising them but they’re very convient and this is another positive aspect of the high abstraction. What’s Next The dataset capture pipeline is working. Next session I will write visualize_dataset.py , a script that loads random samples from each class folder, displays them in a grid, and prints the class distribution as a count per folder. This will then be the basis for my CNN pipelane Resources & Documentation OpenCV 4.x Documentation Python Datetime Guide OS Path Management Tech With Tim - OpenCV Python Tutorial Video 3"}, {"post_id": 15216, "ts": "2026-06-24T18:39:47Z", "hours": 2.0128, "text": "MIRA Project - Architecture & Infrastructure Work Completed: Initialized project architecture and created the virtual environment ( .venv ). Structerd the directory ( data/glass , data/metal , data/paper , data/plastic ) in preparation for supervised machine learning pipelines. Wrote and executed a system boot script to test Python and terminal output. Which just utilises time.sleep() and print() . linked the local workspace to GitHub and pushed the first commit. Studied Python syntax, focusing on loops, variables, and type hinting, easy cause I alredy got basics from other languages. Next Step: Studying OpenCV documentation and computer vision fundamentals to create without using AI capture_frame.py . The goal is to build an automated dataset generation script where a keystroke triggers webcam capture and pushes the image directly to the designated categorization folder So i can just make my data set generation easier or maybe I am going to use a public one iam still undecided. Reflection: Python vs. C/C++ The logic of Python is simple, but adjusting to the syntax is quite weird. Coming from lower-level languages that require strict structuring (like C/C++), the “freedom” and abstraction of Python takes some getting used to. First of all, the absence of semicolons ( ; ) to terminate lines and the reliance on indentation for loops and functions feels unusual. However, the freedom makes certain things simpler. For example, Python’s for loops : names : list [ str ] = [ ' Alice ' , ' Bob ' , ' Charlie ' , ' Anni-Frid ' ] for name in names : print ( f ' Hello, { name } ' ) In C, you have to manually manage the loop counter and the array index, which overcomplicates a simple process: for ( int i = 0 ; i < 4 ; i ++ ) { printf ( \"Hello, %s \\n \" , names [ i ]); } Conclusion For a moment I wasn’t sure if this would really be possible but I gained a lot more confidince through learning a bit and I think this will probally be a long term Project because of the Scale and future stuff I have in mind."}]...
|
Title: MIRA - Machine Intelligence for Recycling b Title: MIRA - Machine Intelligence for Recycling by @jeremy | Stardance
Devlogs:
MIRA Project - Architecture & Infrastructure Work Completed: Initialized project architecture and created the virtual environment ( .venv ). Structerd the directory ( data/glass , data/metal , data/paper , data/plastic ) in preparation for supervised machine learning pipelines. Wrote and executed a system boot script to test Python and terminal output. Which just utilises time.sleep() and print() . linked the local workspace to GitHub and pushed the first commit. Studied Python syntax, focusing on loops, variables, and type hinting, easy cause I alredy got basics from other languages. Next Step: Studying OpenCV documentation and computer vision fundamentals to create without using AI capture_frame.py . The goal is to build an automated dataset generation script where a keystroke triggers webcam capture and pushes the image directly to the designated categorization folder So i can just make my data set generation easier or maybe I am going to use a public one iam still undecided. Reflection: Python vs. C/C++ The logic of Python is simple, but adjusting to the syntax is quite weird. Coming from lower-level languages that require strict structuring (like C/C++), the “freedom” and abstraction of Python takes some getting used to. First of all, the absence of semicolons ( ; ) to terminate lines and the reliance on indentation for loops and functions feels unusual. However, the freedom makes certain things simpler. For example, Python’s for loops : names : list [ str ] = [ ' Alice ' , ' Bob ' , ' Charlie ' , ' Anni-Frid ' ] for name in names : print ( f ' Hello, { name } ' ) In C, you have to manually manage the loop counter and the array index, which overcomplicates a simple process: for ( int i = 0 ; i < 4 ; i ++ ) { printf ( "Hello, %s \n " , names [ i ]); } Conclusion For a moment I wasn’t sure if this would really be possible but I gained a lot more confidince through learning a bit and I think this will probally be a long term Project because of the Scale and future stuff I have in mind.
MIRA — Day 2: Dataset Capture Pipeline What I Built Wrote capture_frame.py from scratch using only the OpenCV docs, no tutorials for the code, no AI-generated code. The script opens a live webcam feed and lets me build my own labeled image dataset by pressing keystroke shortcuts to save frames directly into categorized folders. Evolution of the Capture Logic In my first draft, I managed file naming with a manual integer counter. It worked, but had a critical flaw: every time the script restarted, the counter reset to 1 and began overwriting existing files. Also through out this project I have always specified the Data type because i got advice from a friend to do that. Initial counter approach: i = int ( 1 ) if key == ord ( ' 1 ' ): filepath = os . path . join ( glass_folder , f ' frame_ { i } .jpg ' ) cv2 . imwrite ( filepath , frame ) i += 1 I replaced this with timestamp-based naming using datetime.now().strftime("%Y%m%d_%H%M%S") , which ensures every file has a unique name regardless of how many times the script restarts: glass_20260625_143022.jpg glass_20260625_143022.jpg Make it more efficent to scale My first working draft had four separate folder variables and a long if/elif chain, one block per material class. Functional, but not scalable because this would mean: adding a fifth class would mean copy-pasting another entire block. First draft, repetitive structure: glass_folder = " ../data/glass/ " metal_folder = " ../data/metal/ " if key == ord ( ' 1 ' ): filepath = os . path . join ( glass_folder , f ' glass_ { timestamp } .jpg ' ) cv2 . imwrite ( filepath , frame ) elif key == ord ( ' 2 ' ): filepath = os . path . join ( metal_folder , f ' metal_ { timestamp } .jpg ' ) cv2 . imwrite ( filepath , frame ) Refactored: CLASSES = { ' 1 ' : ( ' glass ' , ' ../data/glass/ ' ), ' 2 ' : ( ' metal ' , ' ../data/metal/ ' ), } key_char = chr ( key ) if key_char in CLASSES : label , folder = CLASSES [ key_char ] filepath = os . path . join ( folder , f ' { label } _ { timestamp } .jpg ' ) cv2 . imwrite ( filepath , frame ) Adding a fifth class now takes one line in the dictionary. The save logic doesn’t change at all which is pretty neat this was quite difficult because I never worked with classes like this but I managed to do it after googling and asking AI how to set up Classes but not providing it any context so I can write it myself. Coming from C/C++ One thing I found difficult to utilise where f strings. I dont know if a equalivent exists in C/C++ but I never used it so it was quite weird utilising them but they’re very convient and this is another positive aspect of the high abstraction. What’s Next The dataset capture pipeline is working. Next session I will write visualize_dataset.py , a script that loads random samples from each class folder, displays them in a grid, and prints the class distribution as a count per folder. This will then be the basis for my CNN pipelane Resources & Documentation OpenCV 4.x Documentation Python Datetime Guide OS Path Management Tech With Tim - OpenCV Python Tutorial Video 3
MIRA — Day 3 visualise data set What I Built Today Today I wrote visualize_dataset.py from scratch using the Python os , random , and Matplotlib documentation. The script counts images per class folder, samples up to 5 random images per class, and displays them in a labeled 4×5 grid. This is a sanity check before the model training you cannot train reliably on a dataset you have never inspected. import os import random import cv2 import matplotlib.pyplot as plt DATA_DIR = " ../data/ " CLASSES = [ ' glass ' , ' metal ' , ' paper ' , ' plastic ' ] SAMPLES = 5 total_files = 0 for class_name in CLASSES : folder = os . path . join ( DATA_DIR , class_name ) num_files = len ([ f for f in os . listdir ( folder ) if f . lower (). endswith (( ' .jpg ' , ' .jpeg ' , ' .png ' ))]) print ( f " { class_name : < 10 } : { num_files } images " ) total_files += num_files print ( f " { ' Total ' : < 10 } : { total_files } images " ) fig , axes = plt . subplots ( len ( CLASSES ), SAMPLES , figsize = ( 15 , 10 )) for row , class_name in enumerate ( CLASSES ): folder = os . path . join ( DATA_DIR , class_name ) files = [ f for f in os . listdir ( folder ) if f . lower (). endswith (( ' .jpg ' , ' .jpeg ' , ' .png ' ))] sampled = random . sample ( files , min ( SAMPLES , len ( files ))) for col , filename in enumerate ( sampled ): img = cv2 . imread ( os . path . join ( folder , filename )) img = cv2 . cvtColor ( img , cv2 . COLOR_BGR2RGB ) axes [ row , col ]. imshow ( img ) axes [ row , col ]. axis ( ' off ' ) if col == 0 : axes [ row , col ]. set_ylabel ( class_name , fontsize = 12 ) plt . tight_layout () plt . show () How It Works The script has two distinct parts. First, the counter loop iterates over each class folder using os.listdir() , filters for image file extensions, and accumulates a total. Second, the grid section uses plt.subplots() to create a fixed axes array indexed by axes[row, col] , each cell addressed independently by class row and sample column. random.sample(files, min(SAMPLES, len(files))) guards against crashes when a folder has fewer than 5 images by capping k to whatever is available. So if I only got three it just going to use three and not crash like it would normaly do for this part I ran my Code through ki afterwards and he told me to add it The one conversion that matters: cv2.cvtColor(img, cv2.COLOR_BGR2RGB) before passing to Matplotlib. OpenCV loads images in BGR channel order; Matplotlib expects RGB. Without this, all reds appear blue. I forgot this but when the pictures came out weird i remeberd the tutorial by Tech with Tim where he mentions it mutipile times I would advise everybody to watch his openCV turorial Difficulty Straightforward session. Coming from C/C++, the structure of iterating over a list of strings and using them as both display labels and filesystem paths felt natural immediately. plt.subplots() returning a 2D array of axes objects is the same concept as a 2D array in C — index by row and column. No significant blockers. Resources used: Matplotlib docs: pyplot.subplots , pyplot.imshow , Axes.set_ylabel Python docs: os.path.join , os.listdir OpenCV docs: cvtColor color conversion codes Dataset Status glass : 32 images metal : 31 images paper : 30 images plastic : 33 images Total : 126 images Also all this images are not in the Github at the moment because these aren’t high quality and good images on which i can train my model What’s Next Dataset is captured and verified. Next is the first CNN training pipeline in TensorFlow/Keras, train_baseline.py . This means learning ml and taking my first steps into it . The target for the first run is a accuracy above 75%.
MIRA — Day 3 Creating Model and training on Limited data What I Built Today Today I built train_baseline.py , the first complete CNN training pipeline for MIRA. The script loads the dataset, applies data augmentation, trains a 3-layer convolutional neural network, plots the accuracy and loss curves, and saves the trained model to disk. I followed the official TensorFlow image classification tutorial and adjusted it to fit the MIRA dataset structure and 4-class recycling problem. model = Sequential ([ data_augmentation , layers . Rescaling ( 1. / 255 ), layers . Conv2D ( 16 , 3 , padding = ' same ' , activation = ' relu ' ), layers . MaxPooling2D (), layers . Conv2D ( 32 , 3 , padding = ' same ' , activation = ' relu ' ), layers . MaxPooling2D (), layers . Conv2D ( 64 , 3 , padding = ' same ' , activation = ' relu ' ), layers . MaxPooling2D (), layers . Dropout ( 0.2 ), layers . Flatten (), layers . Dense ( 128 , activation = ' relu ' ), layers . Dense ( num_classes , name = " outputs " ) ]) Difficulty: Image Stretching The first training run loaded images incorrectly, the model was receiving stretched and distorted frames because image_dataset_from_directory resizes images to the target dimensions by default, squashing non-square images. Fixed by adding crop_to_aspect_ratio=True , which crops from the center instead of stretching: train_ds = tf . keras . utils . image_dataset_from_directory ( data_dir , validation_split = 0.2 , subset = " training " , seed = 123 , image_size = ( img_height , img_width ), batch_size = batch_size , crop_to_aspect_ratio = True ) Difficulty: Overfitting Early runs showed training accuracy climbing while validation accuracy stayed flat or dropped ,the model was memorizing the training images rather than learning generalizable features. This happens when the dataset is too small relative to the model’s capacity. Fixed with two countermeasures: data augmentation (RandomFlip, RandomRotation, RandomZoom) to artificially vary the training images, and Dropout(0.2) to prevent individual neurons from becoming too specialized. Results val_acc = 0.8235 @ epoch 20 val_loss = 0.4030 @ epoch 20 best val_acc = 0.8824 @ epoch 19 best val_loss = 0.3646 @ epoch 19 dataset = 126 images / 4 classes The high epoch-to-epoch variance in validation accuracy (swings of ±18%) is happening because of the low validation set containing only 17 images, one wrong prediction equals a 5.9% accuracy shift. Results will stabilize further after expanding the dataset. Coming from C/C++ Well nothing to say because I never coded anything like this in C/C++ so this one will be the last Coming from C/C++ What’s Next I will capture 200 images per class (800 total). So my results are actually meaningful and verfiable also in the images I will adjust lighning and more After the dataset is large enough: I will Write evaluate.py , load the saved model, run it on the test set, and compute a full classification report: precision, recall, and F1-score per class. So I get a per class breakdown of the real acuraccy of the certain folder each and not just the total median. Resources Used TensorFlow image classification tutorial TensorFlow image_dataset_from_directory API Keras Sequential model API 3Blue1Brown — Neural Networks series Credits Also wanted to shoutout RUMI where i got insperation for the naming scheme from.
MIRA — Day 4: Evaluate and important results What I Built Today I built evaluate.py and redid all of my images so my data and captured 800 increasing the count from 120 to 800. This allows me to load my 800-image dataset, evaluate it against a validation set, and output a visual Confusion Matrix. Vital Changes & Difficulties Faced 1. The Alphabet-Slice Bug (Deterministic Split vs. Batch Shuffling) When I first ran evaluate.py , my Confusion Matrix looked bizarre: I had 159 test files, but every single one of them had a true label of “plastic” ! To keep my evaluation predictions aligned with the correct labels, I had initially set shuffle=False when loading the directory. Because Keras loads folders alphabetically ( glass -> metal -> paper -> plastic ), disabling shuffling caused it to read the sorted list and simply slice the last 20% for testing. The last 20% of the alphabet was entirely plastic . To fix this, I set shuffle=True so Keras would pull the exact same random validation split as the training script. To prevent the predictions from getting mismatched during shuffling, I refactored the evaluation script to pull images and labels simultaneously, batch-by-batch: y_true = [] y_pred = [] for images , labels in val_ds : preds = model . predict ( images , verbose = 0 ) batch_preds = np . argmax ( preds , axis = 1 ) y_pred . extend ( batch_preds ) y_true . extend ( labels . numpy ()) No matter how randomly Keras shuffles the images, our answers and guesses are extracted at the exact same instant, making mismatching impossible. The Paper vs. Metal Crisis 📊 With the pipeline corrected, I ran the evaluation and got a real, stable baseline accuracy of 61% worse than yestarday which was expected as the images were alot more than before and before them it was just learning the images and not guessing. Across my 159 validation images. The Confusion Matrix revealed a major failure point in my baseline CNN: True Paper Images: 42 Correctly classified as Paper: 3 Misclassified as Metal: 25 (59.5%) My simple 3-layer CNN is nearly blind to paper textures. It looks at white paper or cardboard with bright reflections and thinks: “Ah, a bright shiny reflection! This must be a metal can.” What’s Next Now that I have documented my true baseline and identified its major blind spot, we are ready to implement Transfer Learning (MobileNetV2) . This pre-trained model has seen millions of images and knows how to distinguish between the flat texture of paper/cardboard and the metallic shine of aluminum. Also i noticed that I struggled quite alot with this part so iam going to pause this project a bit to do another project ot solidify my python basics and continue from there onwards. Resources & Documentation Keras Sequential Model API — Documentation used to structure layers, dropout, and data augmentation. Scikit-Learn Classification Report — Reference for evaluating precision and recall. Scikit-Learn Confusion Matrix Display — Documentation used to plot the final matrix.
MIRA — Day 5: Transfer Learning, and Two-Stage Fine-Tuning 1. Summary Since the last update, which was quite a while ago because I needed to learn some more basics, MIRA has evolved. By implementing transfer learning with MobileNetV2, and performing partial layer fine-tuning, overall validation accuracy was raised from 61% to 87.42% , while validation loss dropped from 1.06 to 0.31 . Which is very important. 3. Key Technical Breakthroughs & Refactors The “Paper” Class Feature Extraction Bottleneck In the initial baseline model, paper recall was extremely poor (0.07). The model regularly confused paper with metal or plastic. The Fix: Using the pre-trained ImageNet weights of MobileNetV2 resolved this. The model now extracts high-level semantic texture and edge properties. In EXP-003, paper reached a 96% precision rate . but instead metal got a bit worse and has now reached 77% from its orignal 86% Refactoring src/evaluate.py To prevent difficulties in strcuturing and avoid having multiple different evaluation scripts for each model , I refactored evaluate.py using Python’s argparse library. The script now accepts command-line arguments to evaluate any model dynamically so i can just use a comand and where it should save its finding and it will run the script acording to that: python src/evaluate.py --model mira_fine_tuned_model.keras --exp EXP-003_FineTuning It also dynamically scales the loaded image resolution (224x224 for MobileNetV2 vs. 180x180 for baseline) to avoid input shape mismatches Implementation of Two-Stage Fine-Tuning After training the custom dense classification head on frozen MobileNetV2 features, I wrote train_fine_tune.py to unfreeze the base model from layer 100 onwards (leaving the low-level edge-detection layers 0–99 intact). Recompiling with an ultra-low learning rate ( 1e-5 ) allowed the model to subtly adjust its deep weights to the recycling dataset: This successfully drove validation loss down to 0.3148 , showing that the network is making predictions with significantly higher statistical confidence. Automated Latency Benchmarking I integrated CPU latency tracking directly into the evaluation loop using time.perf_counter() to record inference times in milliseconds per image, This will be used later to see how it performs on small hardware and different I would advise everybody who wants to do something similar to use the resources i linked. 4. Next Milestones Real-time Live Webcam Inference ( src/live_inference.py ): Deploying the mira_fine_tuned_model.keras on a live video stream to evaluate performance and classification stability under varying lighting and structural angles and add these kinds of borders which state what the computer thinks the object i show is Embedded Planning: Utilising INT8 to quantize the model to a fracture of its size to run on a standalone, onboard single-board computer (Raspberry Pi), moving closer to an autonomous physical robot. Which will then be able to automatically sort them. 5. Resources Used Framework Foundation: TensorFlow Image Classification Tutorial Data Pipelines: TensorFlow image_dataset_from_directory API Model Composition: Keras Sequential Model Documentation Conceptual Architecture: 3Blue1Brown Neural Networks Playlist —
MIRA — Day 6: Post-Training Quantization and Signal Smoothing What I Built Today Today I achieved major optimization milestones, Finally creating the INT8 Quantizatio Post-Training INT8 Quantization I implemented src/quantize.py using TensorFlow’s TFLiteConverter . The script center-crops and resizes 100 representative images from the dataset to dynamically calibrate activation ranges, converting the uncompressed Keras model to full 8-bit integer precision. Compression Summary: Keras Full Model: 23.48 MB Standard TFLite: 8.49 MB Quantized INT8 TFLite: 2.61 MB (9.0x smaller than Keras binary) Zero-Dependency Live TFLite Inference I completely created the live webcam inference stream ( src/live_inference_tflite.py ). By implementing a standard mathematical Softmax and image scaling pipeline in pure NumPy, the script now starts instantly and runs with minimal CPU overhead. Jitter Reduction via Exponential Moving Average (EMA) To prevent erratic jumps in presicion so it jumping from 60 to 70 in a second caused by camera focus and exposure changes, I implemented a temporal smoothing filter on the output probabilities: smoothed_probs = alpha * raw_probs + ( 1 - alpha ) * smoothed_probs Furture plans So after thinking about it I found 2 logical problems in my model. FIrst of all the dataset it trained on is still to limited and there is not enough variaton in objects. Secondly the whole Infracstructer is wrong and at the moment its classifier and not a detecter so Its nor able to detect mutipile objects which is important for the Robot arm its also not able to discern mutipile objects on the same screen. So the next Part will porbally be a long post in which I fix all these bugs and add New featurs
MIRA — Day 7: The “Stage B” Breakthrough (Multi-Object Detection) The Engineering Change: Scrapping the Foundation Stage A (Classification) was a controlled laboratory success, but it failed the “Real World Test”, and wasnt able to accuractly depict objects with a live cam feed, I also hit a major roadblock: my auto-labeling script used Canny Edge detection which, due to table glare and shadows, mistook my entire desk for a single object. This taught me the most important lesson in AI: Garbage In, Garbage Out (GIGO). To save MIRA, I had to delete my original dataset and move to a professional Object Detection architecture ( YOLOv8-Nano ). Data Engineering: Mapping 64 Classes to 5 I forked a high-variance “Wild Trash” dataset containing thousands of images of waste in complex environments (grass, dirt, water). The Problem: The dataset had 64 highly specific classes (e.g., “Aerosol,” “Egg carton,” “Plastic lid”). The Solution: I wrote a custom Class Remapping Engine in Python. This script programmatically rewrote thousands of .txt label files, collapsing 64 sub-categories into MIRA’s 5 core functional classes: Glass , Metal , Paper , Plastic , and Trash . Result: A robust, “Super-Dataset” of ~3,300 images ready for spatial training. Cloud-Accelerated Training Training an object detector on a local CPU would have taken days. I migrated the pipeline to Google Colab , utilizing an NVIDIA Tesla T4 GPU . Strategy: I implemented a patience=0 strategy and tuned the learning rate to 1e-3 to force the model to converge over 100 epochs despite the high variance of the “Wild” data. Outcome: Achieved an mAP50 of 82.3% on the combined dataset. The “Nano” architecture was chosen specifically to ensure the final weights (approx 6MB) can run standalone on a Raspberry Pi. The Live Multi-Object Tracking Engine The most exciting part is the new live_detection.py . MIRA no longer just “names” an image; it locates and tracks items in 3D space. ByteTrack Integration: I enabled the ByteTrack algorithm ( persist=True ). Now, the AI assigns a unique ID to every object. If a bottle is briefly covered by a hand, the Kalman Filter “remembers” its position, preventing the future servos for the robot from jittering. Performance: Latency: ~40ms (Inference) Throughput: ~15.6 FPS Simultaneous Detection: Successfully tested with 3+ materials in the frame at once. Diagnostic: Identifying Edge Cases Testing today revealed a specific weakness: Metal cans in vertical orientation (opening facing the camera). Because the feature profile changes from a cylinder to a dark circle, detection confidence drops. Fix Strategy: I will supplement the dataset with ~50 manual “end-on” photos of cans to patch this “Canonical View Bias” before the hardware build. What’s Next Creating a dashboard to see everything regarding the AI and trying to quantize it further this was highly aided by AI this time as I just couldnt fix and needed AI help to fix it. Just wanted to check how big my folder is and its 17.3 GB i really need to clean it up I still have alot failed experiements and private data inside
MIRA — Day 8: The Invisible Boxes (and Why Two Models Were Lying to Me) BUGS After hours of digging through Ultralytics internals with AI assistance, I found not one but three separate bugs all stacking on top of each other. Bug #1: Tracker Ultralytics 8.4.84 silently switched the default tracker from ByteTrack to something called TRACKTRACK . I never asked for this. Nobody told me. TRACKTRACK has internal confidence thresholds that are absurdly high: track_high_thresh: 0.6 # Only detections >= 0.6 are “real” new_track_thresh: 0.7 # New objects need >= 0.7 to be tracked Here’s the problem: INT8 quantization drops confidence scores by 20-40%. So a detection that would score 0.55 in the original PyTorch model now scores ~0.35 after quantization. TRACKTRACK looks at 0.35, says “too low,” and silently throws it away. No error. No warning. Just… gone. Bug #2: The Double Filter Even if TRACKTRACK somehow kept a box, my drawing function had its own confidence filter set to 0.5. So a box at conf=0.4 that survived the tracker got killed again at the drawing stage. Bug #3: Nothing Stopped the User from Loading the Wrong Model Nothing in the code prevented me from loading mira_classifier_int8.tflite — a classification model — into the detection pipeline. Which i failed to realise. The code just checked if the file ended in .tflite and said “sure, load it as a detector.” It would’ve failed silently or produced garbage. live_detection.py — The Big One I rewrote the core inference loop. Three major changes: Forced ByteTrack everywhere. PyTorch models now explicitly use tracker="bytetrack.yaml" instead of whatever Ultralytics defaults to. No more silent tracker swaps. Bypassed the tracker entirely for INT8 models. TFLite INT8 now uses model.predict() instead of model.track() . No tracker = no threshold filtering = boxes actually appear. Conf is auto-overridden to 0.25 at startup because INT8 models need lower thresholds. Added model validation. If you try to load a classifier model into the detection pipeline, you now get a clear error: ERROR: ‘mira_classifier_int8.tflite’ is a CLASSIFIER model, not a detector. Live detection requires a detection model (.pt or detection .tflite). Use ’mira eval-class –model mira_classifier_int8.tflite –exp ’ instead. No more silent failures. dashboard.py — Same Story, Streamlit Edition The Streamlit dashboard had the exact same tracker and threshold bugs. Fixed identically: ByteTrack forced, INT8 models use predict(), classifier models filtered from the sidebar before you can even select them. cli.py — First Line of Defence Updated cli.py and added mutiple new commands to make it easier to use also made it possible to use in the termnail through a bat file so u can run the scripts in powershell if you want if you just add .\mira and then commands. Also Added validation in the live subcommand so classifier models get rejected before the subprocess even spawns. Faster error, cleaner output. Folder Cleanup Reality Checked the project size today: 17.3 GB. That’s absurd for a recycling classifier. Most of it is: Failed experiment outputs Raw dataset images that should’ve been gitignored Multiple copies of the same model in different formats Private test data that never should’ve been committed Need to do a serious cleanup before pushing anything. What’s Next Downloading three new datasets to retrain on: SortWaste (WACV 2026) — real conveyor belt images, 87k bounding boxes TACO — waste in wild environments (forests, streets, beaches) NAVER Recycle Trash — 21k images, indoor + outdoor Target: Combine everything into ~20,000 images, retrain with YOLO11n, hit 80%+ mAP50 with actual real-world robustness.
MIRA Day 9: YOLO11 Migration, INT8 Issues, and Dataset Analysis Over the last few days, I focused on improving the project structure, simplifying the codebase, and testing different approaches for the detection pipeline. I made around 15 commits, added roughly 2,200 lines of code, and removed around 1,000 lines that were duplicated or no longer needed. The main changes were migrating from YOLOv8n to YOLO11n, creating an automated benchmark script, and investigating why some dataset combinations performed worse than expected. YOLO11 and Dataset Experiments I moved from YOLOv8n to YOLO11n because it is better suited for edge deployment while keeping the model lightweight. Since MIRA is intended to run on limited hardware, inference speed and efficiency are important. To test different training setups, I trained four model variants using Kaggle T4 GPUs. I compared several datasets: TACO: Outdoor litter images. TrashNet: Clean recycling images from controlled environments. Roboflow Trash Detection: Waste images with bounding box annotations. WaRP: Industrial recycling images from conveyor belt environments. The best results came from combining TACO, TrashNet, and Roboflow. This combination performed better during live camera tests because it contained both clean object images and more realistic trash scenarios. Why WaRP Reduced Performance Adding WaRP unexpectedly reduced the performance of my general “Trash” class. The reason was a dataset imbalance. WaRP contains many detailed recycling categories like plastic, glass, metal, and cardboard, but it has very few examples matching my general trash category. After mapping WaRP’s classes into my five target classes, most additional training data was added to recyclable categories. This caused the model to become more focused on plastic, paper, and glass while becoming less reliable at detecting mixed waste. This showed that more training data does not always mean better results. The distribution and relevance of the data are equally important. INT8 Quantization Problem While testing my INT8 TFLite model, I noticed that the detection rate was almost zero. The model itself was working, but my confidence filtering removed valid detections. After INT8 conversion, the output confidence values changed compared to the original model. Some detections that previously passed a 0.50 confidence threshold were now below it. Because my pipeline still used the old threshold, valid detections were discarded. I updated the benchmark and live detector to automatically use a lower confidence threshold for INT8 models. After this change, detections worked correctly again. Code Cleanup and Fixes I found several duplicated parts in the project, especially multiple versions of the bounding box drawing logic. I centralized these functions and cleaned up configuration and path handling. I also fixed two problems in the live detection system: Tracker dependency issue: The detector previously used BoT-SORT by default, which caused problems if the required package was missing. I changed the fallback system to use BYTETrack first. Double confidence filtering: Confidence filtering was happening both during prediction and again during visualization. I moved this into one centralized post-processing step to avoid removing valid detections. Repository Cleanup The project folder has grown to around 17 GB because of duplicated datasets, training results, logs, and model checkpoints. Before pushing everything to GitHub, I need to clean the Git history, improve the .gitignore , and remove unnecessary files. The goal is to reduce the repository size to below 500 MB. Next Steps Clean the repository and remove large unused files. Train the final model with the improved dataset combination. Generate evaluation graphs and confusion matrices for the final documentation.
MIRA — Day 10: Removing Streamlit, Safety, and Purging my LLM Tools I spent the last week cleaning up a massive amount of technical debt. After about 40 commits, touching 168 files, and adding 6,186 lines of code while removing 1,200 lines of old code, the repo is finally much cleaner. The biggest changes were replacing Streamlit with a Flask-SocketIO server, auditing my project for the Jugend Forscht competition, and removing my custom AI development tools (which I built earlier to help me write code). Replacing Streamlit with Flask + SocketIO Streamlit was a bottleneck for real-time video streaming and thread-safe operations because it re-runs the entire script on user interaction. The Architecture: I built a custom Flask and SocketIO dashboard under src/dashboard_flask/ . Live camera frames are captured in a background thread, encoded to JPEG, and pushed over WebSockets. Thread Safety: I implemented four threading locks to prevent race conditions: camera_lock , model_lock , inventory_lock , and config_lock . Bugs Fixed: I resolved an unnecessary BGR-to-RGB conversion that was washing out my live camera colors, and wrapped my configuration updater in config_lock to prevent multi-thread memory corruption. Modularizing my Inference Pipeline To clean up the backend, I consolidated all duplication: I deleted the separate live and debug scripts, merging their logic into a single src/inference_engine.py module. This engine handles the threaded camera feed, YOLO11n prediction loop, and my BYTETrack fallback. All paths, labels, and parameters are now centralized in src/config.py . Purging my Custom AI Tools I built a terminal-based AI coding assistant to help me write and modify code. However, after an architectural review, I decided it does not belong in this repository. The Reason: MIRA stands for Machine Intelligence for Recycling Automation. The codebase should focus strictly on computer vision and robotics, not LLM wrappers. The Separation: I separated all AI coding utilities into a new MIRA-DevTools repository, which I will start as I near the end of MIRA. JUFO Competition Audit & Paper Since this project is for Jugend Forscht, I have been heavily working on my scientific paper (which I realized I haven’t actually mentioned in previous updates). AI Audit: I ran an AI-assisted audit against JUFO evaluation criteria. It originally rated my project at a 6/10 because my paper lacked a deep discussion section and YOLO11n graphs. The Fixes: I expanded my analysis on how the WaRP dataset’s class imbalance skewed my trash predictions, and compiled a 22-page LaTeX report with proper bibliographies and training curves. Quality Assurance: I added 17 unit tests and automated GitHub Actions with Pytest and Ruff. I will translate the paper to English and upload it soon. Next Steps Folder Cleanup: Run git-filter-repo to shrink my 17 GB folder by removing cached datasets before pushing to GitHub. Final Training: Train one last model on my optimized dataset combination once my Kaggle GPU hours reset.
MIRA — Day 11: Dashboard Redesign, Dual Modes, and EXP-017 Datasets Today was all about front-end overhauls and preparation for my next training run. I redesigned my web interface, split it into two dedicated operating modes, and finalized my biggest dataset merge yet to prepare for training EXP-017. Clean Light Theme Dashboard I shifted the entire MIRA web dashboard from my old dark theme to a clean light theme with a mutiple colors. JUFO vs. Stardance Modes I introduced two separate dashboard modes that I can select on-the-fly using URL parameters: JUFO Mode ( ?mode=jufo ): A technical view tailored for competition judges, featuring deep metrics, historical training graphs, and real-time backend diagnostics. Stardance Mode ( ?mode=stardance ): An interactive, simplified playground designed for quick live demonstrations with clean control toggles. System Health & Live Settings I replaced my static history table with a real-time System-Health panel displaying CPU, RAM, temperature, and inference latency using animated progress bars. I also added an “Einstellungen” (Settings) tab to Stardance mode, allowing me to adjust model weights (via a dynamic API model picker), confidence thresholds, IoU, and camera resolution directly from the web UI without needing to restart the Flask backend. Threaded Camera Pipeline My camera stream was bottlenecking my inference engine. I decoupled the frame capture from the detection loop by moving the capture process into a dedicated Python threading.Thread . The web stream now runs at a smooth 20 FPS at 320px resolution. I also patched Camera.release() to verify the stream is open before shutting down, preventing a common camera-close crash. Datasets & EXP-017 Preparation I successfully merged all four of my data sources (TACO, TrashNet, Roboflow, and WaRP) into a unified dataset named mira_all . It contains 9,774 images across 5 classes. While generating the ZIP file, I hit an archive path encoding issue that broke folder hierarchies. I solved this by using just the normal windows option to zip files instead of the powershell way which I wanted to test out My current baseline model (EXP-014) is still performing well with an 85.8% F1-score on my field benchmark, though the general “Trash” class remains my weakest spot at 37.6% due to how much random variation “trash” actually has. Pipline I also worked on pipline and am working on making it plug play allowing user to get any 3rd party model plug it in and use the full research pipline to retrain it compare it benchmark it and do a lot of stuff. I also added the option to add custom datasets and expanded on the CLI with mutiple custom commands this is probally, the second last post because I am nearly finished. The ui for the dashboard was made with ne gpt 5.6 sol because I just couldnt come up with a good ui. Next Steps Train EXP-017: Upload the clean mira_all dataset and run training on Kaggle. Logger Analysis: Review the data from my new last_per_class.json file to see which items are being misidentified during continuous live runs.
MIRA — Day 12: Codebase Audit, EXP-017 Results, and Cross-Platform Fixes Before diving into codebase fixes, I finished training EXP-017 on Kaggle using the merged mira_all dataset. It reached 59.3% mAP50 —which is slightly below EXP-014’s 60.7% . This confirmed a key lesson for me: dataset quality and class balance matter far more than sheer image count. After that, I shifted my focus to running a full diagnostic audit of my codebase to clean up bugs and edge cases. Fixing the Health Check My health check command ( mira doctor ) was crashing immediately on Windows with a UnicodeEncodeError due to special status symbols ( ✓ , ✗ , ⚠ ). I replaced them with plain ASCII characters ( [OK] , [!] , [FAIL] ). Added checks for missing camera backends on Linux so the health check runs cleanly end-to-end regardless of the OS. Making Torch and TensorFlow Optional MIRA supports both PyTorch ( .pt ) and TFLite ( .tflite ) models, but requiring both libraries installed was frustrating—PyTorch alone takes up over 800 MB. I refactored my model adapters and dashboard to use lazy-imports. If PyTorch isn’t installed, PyTorch models gracefully report as unsupported without crashing the application. This allows a lightweight setup without forcing massive unnecessary downloads if someone only wants to run TFLite models on edge hardware. Cross-Platform & Service Hardening I cleaned up my startup scripts and hardened my camera service against common edge-case failures: Updated mira.bat with PYTHONUTF8=1 for Windows, and created a native mira.sh for Linux and macOS. Added OS guards around the Windows-specific DirectShow camera backend. Fixed a potential division-by-zero crash when video FPS drops to zero. Switched Linux CPU temperature reads to psutil instead of hardcoding 0°C. Ensured the model object memory is properly freed on shutdown. Security, Pydantic v2, and Edge Cases Security: I restricted CORS in my web dashboard from wildcard access ( * ) to localhost ( 127.0.0.1:8000 ). Pydantic Upgrade: Replaced deprecated .dict() calls with .model_dump() for Pydantic v2 compatibility. Integrity: Explicitly forced UTF-8 encoding on all YAML file reads, and added SHA-256 hash verification to mira download . Current System Status After resolving these issues, my test suite is sitting at 99 out of 99 passing unit tests , my Ruff linter reports 0 errors , and all 17 CLI commands are fully functional. I also prepared my HackClub StarDance submission writeup and updated the main README with current CLI specs and experiment data. Next Steps Hardware Benchmarking: Measure real-world FPS and inference latency on a Raspberry Pi Zero 2W. Trash Class Data: Collect targeted training images to improve the general “Trash” class, which remains my weakest performer (7.1% mAP50). in this pic you can see a sneakpeak to a new feature
MIRA — Day 13: Backend Bug Cleanup, Test Suite Expansion, and AI Tooling Today was split between fixing silent backend bugs in MIRA-AI, expanding my test suite to 120 passing tests, and configuring my external AI development tools. Backend Bug Cleanup I ran a full diagnostic check across the codebase and resolved 15 specific bugs: Duplicate Camera Service: Found and removed a bug in main.py that was initializing two separate camera service instances on startup. TFLite Tracking Guard: Disabled ByteTrack tracking when running TFLite models in camera_service.py , since TFLite inference doesn’t support ByteTrack tracking. Modern FastAPI Lifecycle: Migrated from deprecated on_event handlers to the modern asynccontextmanager lifespan pattern across my API services. Code Quality: Updated remaining deprecated .dict() calls to .model_dump() for Pydantic v2, fixed an immutable frozenset cleanup bug in my tests, and resolved 183 Ruff linter warnings. Expanding the Test Suite to 120 Tests I wrote new unit test suites for previously uncovered backend modules: Dashboard Models & WebSockets: Added 30+ tests covering Pydantic model serialization and boundary conditions, plus 15+ tests for WebSocket event callbacks and metric queuing. Test Isolation: Fixed a bug in test_logger.py where the root logger was leaking state between test runs, and fixed brittle Python version checks in test_serialization.py . Current Status: My test suite is now sitting at 120 out of 120 passing tests with 0 Ruff lint errors. AI Developer Tooling & DigitalOcean Outside the core MIRA repository, I spent time configuring my external OpenCode AI setup across multiple providers (OpenRouter, local Docker, Ollama, and GitHub Copilot): Fixed an endpoint URL misconfiguration in my OpenRouter settings and tested connectivity across 23 models. Added handling for “reasoning models” that return output in a reasoning field rather than standard content. Researched how to use my $200 DigitalOcean student credit before it expires on July 31st. Since student credits cannot be applied to GPU Droplets, I plan to deploy a 128 GB Memory-Optimized CPU Droplet to run Ollama with 70B models for offloaded testing. Next Steps Hardware Benchmarks: Run real-world FPS and latency tests on a Raspberry Pi Zero 2W. Trash Class Data: Collect targeted training data for the general “Trash” class, which remains my weakest class at 7.1% mAP50. Also go over the website cause it looks pretty ai generated right now
MIRA — Day 14: Dataset Rebuild, Failed Kaggle Runs, and JuFo Preparation Today focused on making MIRA scientifically reliable instead of simply adding more features. I completed another full codebase revamp, checked two failed Kaggle training runs, rebuilt the waste dataset, improved the training workflow, and rewrote the Jugend forscht report. Codebase Audit and Bug Fixing I reviewed the complete Python codebase as about 50% is ai generated and I really didnt take the time to verfiy everything. Important fixes included: Repairing dashboard crashes caused by missing runtime fields and an incorrect performance-metrics function call. Preventing camera shutdown from releasing the camera while another thread was still reading from it. Adding bounded shutdown handling so a blocked camera driver cannot freeze the application. Fixing the custom mAP implementation, which previously allowed predictions from one image to match ground-truth boxes from another image. Preventing export: YAML sections from being passed to Ultralytics as invalid training arguments.. Correcting generated Kaggle and Colab dataset YAML files. Dataset Research and Reconstruction I wanted to train new models so yolo11n and the new yolo26n so I created new datasets. I processed TACO, TrashNet, Roboflow, dmedhi, Keremberke, WaRP, and SortWaste. Keremberke was excluded because its class remapping would have cuased generated approximately 45,000 misleading trash annotations and pushed trash to 40% of all annotation which create an imbalance SortWaste was removed after it showed that most pictures were from the same perspective and always plastic. The rebuilt dataset uses only dmedhi, TACO, Roboflow, and SAM-labeled TrashNet . 5,108 training images 415 tabletop validation images 1,375 independent test images 6,898 unique images 12,832 bounding boxes The training split is approximately balanced, with 1,621–1,982 boxes per class . The final zip is ca 3.6GB Failed Kaggle Training Attempts I ran kaggle scripts overnight and in these was the sortwaste dataset included which gave me these results. Also i did the mistake of running yolo11x and not n whihc explains the 26 epochs even though it ran for 9 hours. YOLO26n 188 epochs 29.1% mAP50 Plastic: 59.7% Trash: 5.4% **YOLO11x ** 26 epochs 20.9% mAP50 Trash: 2.3% These runs were not downloaded or treated as valid results. As they were so bad I didnt want to document them in any kind I ran a new kaggle script for yolo11n with the new cleaned datasets which hopefully has better results. Jugend forscht Report Revision I checked the LaTeX report against the official Jugend forscht requirements. The previous version exceeded the page limit and was quite frankly just bad and build on a lot of assumption so a big part of today was just rewriting it Next Steps I am currently waiting for the YOLO11n training results. The YOLO26n run is planned for next week, as the failed training attempts exhausted my available Kaggle usage. Afterwards, I will benchmark the final model on the Raspberry Pi Zero 2 W I ordered through Stardance. Once the edge-hardware evaluation is complete, I can finalize MIRA and begin planning and building the robot arm.
MIRA — Day 15: Repository Cleanup, EXP-019, and Reproducible Results This time Instead of adding more features, I concentrated on making the existing software easier to understand, easier to reproduce, and just better overall. The main outcomes were a big repo cleanup, New kaggle results with EXP018/019 reaching all time high of mAP50 of 90% Repository Cleanup and Reliability Improvements I performed another detailed check of the complete codebase. Which highlightes some more issues as a lot of code was Ai generated. The review uncovered problems in both the runtime software and the research CLI/pipeline. I cleaned up third party model files, duplicate documentation, archived ZIP files, and unused assets such as Datasets. The local repo had previously grown to ca 13 GB , largely because of old Git objects. After the cleanup, it was reduced to approximately 520 MB . The README was reduced from roughly ** 900 lines** to approximately 340 lines . It now concentrates on the current installation process, the active perception pipeline, the best available models, dataset origins, known limitations, and reproducibility. Jugend forscht material was moved into the jufo/ directory, while the related-work section was separated into its own document and was put in gitignore for various reasons. EXP-018 and EXP-019 After rebuilding the dataset and correcting the training workflow, I trained YOLO11n on the cleaned and balanced dataset. EXP-018 achieved the following results: Metric Result mAP50 90.6% mAP50-95 82.2% Glass mAP50 90.8% Metal mAP50 94.8% Paper mAP50 88.7% Plastic mAP50 81.1% Trash mAP50 97.5% Compared with EXP-014, which achieved 60.7% mAP50 on the older dataset, this represents an improvement of 29.9 percentage points . I repeated the training as EXP-019 to test whether the result was reproducible. EXP-019 again achieved 90.6% mAP50 on the same clean dataset. So EXP-019 is now the best Model and the final one Model Exports The EXP-019 was exported into multiple formats for later deployment tests: Format Approximate size Intended use FP32 PyTorch 5.5 MB Development and reference inference INT8 TFLite 2.90 MB Resource-constrained edge hardware ONNX 10.1 MB Cross-platform inference and benchmarking The INT8 TFLite version is especially important for the planned Raspberry Pi Zero 2 W deployment. Its smaller size should reduce storage and memory pressure, although its real speed, temperature, and accuracy still need to be measured on the target hardware. Next Steps The next task is to benchmark EXP-019 on the Raspberry Pi Zero 2 W ordered through Stardance. The test will measure: Inference speed and end-to-end latency. Memory usage. Temperature during continuous operation.
Last Devpost Created the Website but a lot of time was lost as for some reason hackatime didnt track I am now finished couldnt bother to write a real devpost this time https://mira-vision.vercel.app/
MIRA - Revision This devlog is about fixing bugs and redoing parts of my website. It seems like my project won’t be approved because of the website and the amount of AI used for it, which I fully understand. There is just one problem: the website was never the focus of MIRA. It is purely aesthetic and was made so people can get a quicker overview of the project. Still, I complied and rewrote around 1000 lines of code, changing spacing, logic and other parts of the website. But it is still not being approved, so the next step is creating a separate, simpler website just for Stardance so the project can finally be approved. Bugs While working on the website, I wanted to test the dashboard and noticed that it didn’t seem to work anymore. I analyzed what was wrong but couldn’t really understand why. The dashboard was my first experience using FastAPI, but from the logic I understood, it should have worked. It just didn’t. So instead of trying to patch it, I decided to redo the whole backend logic of the dashboard and adjust it to work more like MIRA Live. This fixed the bug, but even afterwards I still couldn’t fully figure out what exactly caused the old version to stop working, even after asking AI and going through the code multiple times. As it had been working before Website Redesign Before deciding to create a completely separate website as mentioned above, I tried redesigning and cleaning up the current website as much as possible. I didn’t touch the color palette because I chose it myself for a specific reason, and I honestly can’t identify MIRA with another color scheme anymore. Instead, I removed things I wouldn’t have been able to code myself, like certain slide-in animations and more complicated spacing. I also rewrote parts of the logic that I didn’t properly understand before and replaced them with simpler solutions that I actually understand. Next steps Hopefully i can get approved soon and will be able to finnaly work on the next project. Iam probally goint to try one more time to redesign the website and if that doesnt work I will create a new one which i just think is unecssary, because as I said MIRA is a computer vision model and research pipeline coded mostly by hand and the website was just generated quickly for asthetic reasons and truth be told isnt necessary at all
MIRA - Revision 2 This phase was just about bug fixin, way to many bugs i dont know where they even came from. Pipeline I first started with the research pipeline for some reason it wasnt really activated like the CLI wasnt running because I initialied the pipeline in the wrong order so I fixed that. Camera Engine After the reviewer came back to me and told me that my camera engine for the dashboard wasnt working I say down and did a whole redesign to make sure it works and looks good. The main bug was just as before that I didnt cover edge cases and initailised the camera engine in the wrong order. #Website I did another redesing of the website though not much changes i just rewrote logic and cleaned up the docs page again. Next Steps So first of all for some reason this devlog is 10 hours idk how its this much prob a kind of bug which I need to analyse. I will now continue cleaning up the entire codebase for bugs and hopefully push it one last time and get accepted
Ships:
MIRA — Machine Intelligence for Recycling Automation Project Overview MIRA is a computer-vision system designed to identify recyclable materials and prepare the results for automated sorting. Its purpose is to connect camera and robot arm. For automated trash recycling The system recognizes five material classes: glass, metal, paper, plastic, and trash. it utilizes YOLO11n models for the base and is selftrained on mutiple opensource datasets from various soruces MIRA ia also more than just a model file. It includes a full research pipeline for model training with the following features, registering datasets, merging sources, remapping labels, validating YOLO annotations, creating reproducible splits, training detectors, evaluating results, benchmarking models, and exporting them for different environments. To do that it uses a command-line interface which can run live inference, starts the dashboard, manages datasets and models, launches training, evaluates detectors, compares performance, exports formats, and runs diagnostics. MIRA supports 3 kinds of models FP32 PyTorch model, an ONNX and an INT8 TFLite export. The TFlite versions is meant for rasberry pis though benchmarks are still missing Mira also posses a dedicated website. For information and docs....
|
1793444089.534203
|
1793530489.534203
|
|
4741
|
speedMath Training by @viivi | Stardance
|
viivi
|
1
|
17.0
|
128
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T14:50:02Z", "hours": 17.0, "multiplier": 7.43, "payout": 128, "blessing": "neutral", "text": "speedMath Training is a website for training mental math. It’s super simple to use and you can adjust how hard questions do you want. I built this site using React and typescript. I’m aware that similar sites exists already, but none of them was exactly what I wanted so I developed my own. Before this project I had done courses that taught me developing websites with React and those courses included coding simple projects. But speedMath Training is my first own frontend project with React. The site is quite simple, but it wasn’t super easy for me to build it. I had never used Zustand state management solution, but I learned to use it to make state management easier. Other new thing I learned was publishing a site with github pages. It was kind of complicated, because i have separated folders for frontend (this project) and back end (almost empty). But now I get a new site builded and deployed every time i push to the repository. Project README includes more details if someone is interested.", "repo": "https://github.com/ViLP357/speedMathTraining", "demo": "https://vilp357.github.io/speedMathTraining"}]...
|
[{"post_id": 39499, "ts": "202 [{"post_id": 39499, "ts": "2026-08-02T14:30:01Z", "hours": 1.0094, "text": "#11 devlog The final devlog, I guess. I fixed responsive issues and finished readme and now I’m about to ship this project. (Sorry for short devlog, I just wanted to this 1 hour to be counted.)"}, {"post_id": 35369, "ts": "2026-07-26T18:31:08Z", "hours": 1.7008, "text": "#10 devlog It’s (almost) a ready project! I fighted for over an hour to publish it in github pages. But it was worth it because it’s now liveee https://vilp357.github.io/speedMathTraining (pls test). Before shipping I still need to fix some responsive issues and finish readme, but we’re almost there."}, {"post_id": 13709, "ts": "2026-06-22T14:07:19Z", "hours": 3.0169, "text": "#9 devlog, days 10-12 (maybe?) It’s been a while since last devlog, mostly because I haven’t had time to work with this, but also because hasn’t been any big updates. But now it’s time for you… to meet Calc, the mascot of the speedMath Training. I still need to add Calc to the site. I’m also planning to make a buddy for them and together they will cheer you on."}, {"post_id": 8841, "ts": "2026-06-14T18:20:07Z", "hours": 1.3214, "text": "#8 devlog, day 9 The UI is starting to look good and is much better than few days ago. Today I spent most of my time working on the main screen and a significant amount of it was used to do styles for the checkboxes. I don’t know yet much time I want to use for this project, because it has already all the core features I have thought. I have been planning other new projects and I need time for those and I don’t have as much motivation as before for this project. Anyways, things I will do before shipping: -Make it more mobile friendly -Finish styles for components -Fix component placing"}, {"post_id": 7454, "ts": "2026-06-12T12:52:05Z", "hours": 1.5856, "text": "#7 devlog, day 8 Today I finally managed to create a color palette that works with both light and dark mode. This is only beginning of the UI upgrade so more coming later. the most critical things to do next: -move the timer (why is it even there???) -scale content"}, {"post_id": 6317, "ts": "2026-06-10T17:07:57Z", "hours": 1.3153, "text": "#6 devlog day 7 Today I continued working by starting to design UI. The image shows color palettes I have thought. The upper is for light mode and lower is for dark mode. I still have to figure out contrast things. I thought I’d use the green for buttons with either white or black text, but I barely could see the white text so something has to be done? Maybe other color or shadows for text."}, {"post_id": 6224, "ts": "2026-06-10T13:46:13Z", "hours": 1.9433, "text": "#5 devlog, days 5-7 New updates: choose number of questions number generating fixed Daily challenge page How I fixed number generating How I tried before Math.floor(Math.random()*(Math.pow(10,digits[0]))*Math.pow(10, digits[1]-digits[0])) and Math.floor((Math.random() * 10)*(Math.pow(10, digits[0]-1))*Math.pow(10, Math.ceil(Math.random() * digits[1]-digits[0]))) Where digits[0] is minimum number of digits and digits[1] is maximum number of digits How it works now: A function randomNumber gets number of decimals as paramater and the function is called randomNumber(Math.round(Math.random() * (digits[1]-digits[0])) + digits[0]) Problems this fixes: Generating numbers with less digits that minimum generating different number of digits unequally (more digits was much more common) Next thing to do: UI upgrade"}, {"post_id": 2711, "ts": "2026-06-05T13:02:02Z", "hours": 1.4031, "text": "#4 devlog, day 4 Today’s main progress happened with giving players more options to customize questions. Now it’s possible to choose how many digits they want their questions to have. Next thing to do is add question number chooser. There is only one little (big) problem with digits adjuster logic: numbers with more digits tend to be much more common because of the number generating logic. I hope I can find the solution to fix that soon. As you can see from the picture, I added some color to the website, but just to be able to see different component better. Hopefully the final design will be much more better."}, {"post_id": 2275, "ts": "2026-06-04T17:50:25Z", "hours": 1.7203, "text": "#3 devlog, day 3 Today I finally made the timer and now this project could be actually called a “game”. It wasn’t easy to code the timer and make it work as it’s supposed. For some reason updating the timer updated the questions (which happened every second), but it was easy to fix when I figured out why it happened. (Why: the state timer component uses belonged to its parent component, where the questions are created. But when I updated time in timer component, it caused parent component to rerender again too. The way to fix that was to move question creating inside its own state and that way quesions are created only once.) When the timer finally worked, I quickly added simple navigation structure using react router library. Adding that structure required some refactoring, but I will thank myself later for doing it so early. I was also a bit surprised but happy because nothing broke when I moved some components from one to another."}, {"post_id": 1432, "ts": "2026-06-03T13:50:21Z", "hours": 0.9961, "text": "#2 devlog, day2 Now I have worked on this project for 2hr during Stardance. The new feature works now: it is possible to choose which operators you want to be used (and it actually works!). I also realized that division is more tricky to implement, so that’s why I just deleted it. I’m coding this in typescript, because I wanted to challenge myself, but it takes sometimes so long to figure right types even for simple objects. At least I learned a lot of new things, hehe. Tomorrow -Timer"}, {"post_id": 1400, "ts": "2026-06-03T12:34:36Z", "hours": 1.1967, "text": "speedMath training -The first devlog- Starting this project This project is a website where you can practice your mental math skills. The image shows how the site looked before Stardance. Before Stardance, I had only created this project(done set up, configured git) and coded < 5hr. Then I decided to continue working on this later. I feel like Stardance is a great opportunity for me to continue working on this. I’m aware that similar projects already exist, but I feel like none of them are exactly what I want and need. For example, they have bad UI, require users to log in, or are way too complicated. So this is going to be (hopefully) different. Next things I will do: -add timer -add a difficulty adjuster Other things I will/might do later: -improve the UI -add a leaderboard -add cute characters that cheer for you"}]...
|
Title: speedMath Training by @viivi | Stardance
D Title: speedMath Training by @viivi | Stardance
Devlogs:
speedMath training -The first devlog- Starting this project This project is a website where you can practice your mental math skills. The image shows how the site looked before Stardance. Before Stardance, I had only created this project(done set up, configured git) and coded < 5hr. Then I decided to continue working on this later. I feel like Stardance is a great opportunity for me to continue working on this. I’m aware that similar projects already exist, but I feel like none of them are exactly what I want and need. For example, they have bad UI, require users to log in, or are way too complicated. So this is going to be (hopefully) different. Next things I will do: -add timer -add a difficulty adjuster Other things I will/might do later: -improve the UI -add a leaderboard -add cute characters that cheer for you
#2 devlog, day2 Now I have worked on this project for 2hr during Stardance. The new feature works now: it is possible to choose which operators you want to be used (and it actually works!). I also realized that division is more tricky to implement, so that’s why I just deleted it. I’m coding this in typescript, because I wanted to challenge myself, but it takes sometimes so long to figure right types even for simple objects. At least I learned a lot of new things, hehe. Tomorrow -Timer
#3 devlog, day 3 Today I finally made the timer and now this project could be actually called a “game”. It wasn’t easy to code the timer and make it work as it’s supposed. For some reason updating the timer updated the questions (which happened every second), but it was easy to fix when I figured out why it happened. (Why: the state timer component uses belonged to its parent component, where the questions are created. But when I updated time in timer component, it caused parent component to rerender again too. The way to fix that was to move question creating inside its own state and that way quesions are created only once.) When the timer finally worked, I quickly added simple navigation structure using react router library. Adding that structure required some refactoring, but I will thank myself later for doing it so early. I was also a bit surprised but happy because nothing broke when I moved some components from one to another.
#4 devlog, day 4 Today’s main progress happened with giving players more options to customize questions. Now it’s possible to choose how many digits they want their questions to have. Next thing to do is add question number chooser. There is only one little (big) problem with digits adjuster logic: numbers with more digits tend to be much more common because of the number generating logic. I hope I can find the solution to fix that soon. As you can see from the picture, I added some color to the website, but just to be able to see different component better. Hopefully the final design will be much more better.
#5 devlog, days 5-7 New updates: choose number of questions number generating fixed Daily challenge page How I fixed number generating How I tried before Math.floor(Math.random()*(Math.pow(10,digits[0]))*Math.pow(10, digits[1]-digits[0])) and Math.floor((Math.random() * 10)*(Math.pow(10, digits[0]-1))*Math.pow(10, Math.ceil(Math.random() * digits[1]-digits[0]))) Where digits[0] is minimum number of digits and digits[1] is maximum number of digits How it works now: A function randomNumber gets number of decimals as paramater and the function is called randomNumber(Math.round(Math.random() * (digits[1]-digits[0])) + digits[0]) Problems this fixes: Generating numbers with less digits that minimum generating different number of digits unequally (more digits was much more common) Next thing to do: UI upgrade
#6 devlog day 7 Today I continued working by starting to design UI. The image shows color palettes I have thought. The upper is for light mode and lower is for dark mode. I still have to figure out contrast things. I thought I’d use the green for buttons with either white or black text, but I barely could see the white text so something has to be done? Maybe other color or shadows for text.
#7 devlog, day 8 Today I finally managed to create a color palette that works with both light and dark mode. This is only beginning of the UI upgrade so more coming later. the most critical things to do next: -move the timer (why is it even there???) -scale content
#8 devlog, day 9 The UI is starting to look good and is much better than few days ago. Today I spent most of my time working on the main screen and a significant amount of it was used to do styles for the checkboxes. I don’t know yet much time I want to use for this project, because it has already all the core features I have thought. I have been planning other new projects and I need time for those and I don’t have as much motivation as before for this project. Anyways, things I will do before shipping: -Make it more mobile friendly -Finish styles for components -Fix component placing
#9 devlog, days 10-12 (maybe?) It’s been a while since last devlog, mostly because I haven’t had time to work with this, but also because hasn’t been any big updates. But now it’s time for you… to meet Calc, the mascot of the speedMath Training. I still need to add Calc to the site. I’m also planning to make a buddy for them and together they will cheer you on.
#10 devlog It’s (almost) a ready project! I fighted for over an hour to publish it in github pages. But it was worth it because it’s now liveee https://vilp357.github.io/speedMathTraining (pls test). Before shipping I still need to fix some responsive issues and finish readme, but we’re almost there.
#11 devlog The final devlog, I guess. I fixed responsive issues and finished readme and now I’m about to ship this project. (Sorry for short devlog, I just wanted to this 1 hour to be counted.)
Ships:
speedMath Training is a website for training mental math. It’s super simple to use and you can adjust how hard questions do you want. I built this site using React and typescript. I’m aware that similar sites exists already, but none of them was exactly what I wanted so I developed my own. Before this project I had done courses that taught me developing websites with React and those courses included coding simple projects. But speedMath Training is my first own frontend project with React. The site is quite simple, but it wasn’t super easy for me to build it. I had never used Zustand state management solution, but I learned to use it to make state management easier. Other new thing I learned was publishing a site with github pages. It was kind of complicated, because i have separated folders for frontend (this project) and back end (almost empty). But now I get a new site builded and deployed every time i push to the repository. Project README includes more details if someone is interested....
|
1793444096.991776
|
1793530496.991776
|