|
21555
|
My very own WebOS by @lakshya | Stardance
|
lakshya
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T21:46:58Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A space-themed webos that features the apod from nasa as the background and has 2 space-themed apps", "repo": "https://github.com/Lakshya0034/astra-os", "demo": "https://lakshya0034.github.io/astra-os/"}]...
|
[{"post_id": 17178, "ts": "202 [{"post_id": 17178, "ts": "2026-06-27T21:41:21Z", "hours": 0.3908, "text": "Successfully integrated the nasa APOD background on the desktop and added an info card with data pulled from NASA."}, {"post_id": 17150, "ts": "2026-06-27T20:48:29Z", "hours": 1.4836, "text": "Devlog #2 built a terminal with some basic fun commands and a solar system visualiser app with some details about each body. added the api for the launches will try to fetch nasa apod images for the wallpaper background next"}, {"post_id": 17069, "ts": "2026-06-27T18:30:35Z", "hours": 0.7667, "text": "Currently building a launch tracker app. I’m working on using an api to fetch the information"}]...
|
Title: My very own WebOS by @lakshya | Stardance
Title: My very own WebOS by @lakshya | Stardance
Devlogs:
Currently building a launch tracker app. I’m working on using an api to fetch the information
Devlog #2 built a terminal with some basic fun commands and a solar system visualiser app with some details about each body. added the api for the launches will try to fetch nasa apod images for the wallpaper background next
Successfully integrated the nasa APOD background on the desktop and added an info card with data pulled from NASA.
Ships:
A space-themed webos that features the apod from nasa as the background and has 2 space-themed apps...
|
1793137956.8366866
|
1793224356.8366866
|
|
21577
|
One Stage Gearbox FRC by @strixt | Stardance
|
strixt
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T04:44:43Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Cadded a simple 1:~3.4-5 gearbox using FRC components", "repo": "https://github.com/strixt1/Onshape-Gearbox-Project", "demo": ""}]...
|
[{"post_id": 15081, "ts": "202 [{"post_id": 15081, "ts": "2026-06-24T14:39:41Z", "hours": 1.9494, "text": "This is my first attempt at making a gearbox using FRC Components. I started off with a goal of making a gear ratio around 1:3.5 Step down. Motor Power is a Kraken x60. Gears in order go from 14T -> 34T -> 48T. Decided to just make it power a single 4” compliant wheel."}]...
|
Title: One Stage Gearbox FRC by @strixt | Stardanc Title: One Stage Gearbox FRC by @strixt | Stardance
Devlogs:
This is my first attempt at making a gearbox using FRC Components. I started off with a goal of making a gear ratio around 1:3.5 Step down. Motor Power is a Kraken x60. Gears in order go from 14T -> 34T -> 48T. Decided to just make it power a single 4” compliant wheel.
Ships:
Cadded a simple 1:~3.4-5 gearbox using FRC components...
|
1793127195.1802766
|
1793213595.1802766
|
|
21583
|
Basic snake game by @Coolguy | Stardance
|
Coolguy
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-14T18:16:30Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a very basic snake game in godot which pretty much has nothin gto it besides moving, eating, and growing. I know im supposed to have a playable link but i kind of lost the game file. so the code is there in github but it cant really get set up. i dont expect anything from this project because its failed but i just wanna finish it so i can start a new project. Sorry about that.", "repo": "https://github.com/CoolGuy259/Snake-copy", "demo": "https://docs.google.com/document/d/1MdggeiX1E7M01wkhg94ArMpKlyN-cHCLn6hq3hU9TOE/edit?tab=t.0"}]...
|
[{"post_id": 13805, "ts": "202 [{"post_id": 13805, "ts": "2026-06-22T16:59:34Z", "hours": 1.0561, "text": "Ive finally gotten the game working but there’s no textures or anything interesting to the game. It’s just infinite snake😭 I will probably add more but i might not be able to because I’m gonna be out of school. And my snake project is signed into my school computer. but hopefully I will be able to recover it to work on it a bit for the summer"}, {"post_id": 11391, "ts": "2026-06-18T17:15:32Z", "hours": 0.5403, "text": "I had to redo lots of the code and add a ton more code but I’ve finally got it all into Godot. Now i just gotta make it work😭😭"}, {"post_id": 11314, "ts": "2026-06-18T14:40:41Z", "hours": 0.5333, "text": "Ive added the code for movement and ive designed the actual snake tiles. Not sure if the code actually wroks but we will figure it out along the way He looks so friggin derpy 😭😭😭😭"}]...
|
Title: Basic snake game by @Coolguy | Stardance
D Title: Basic snake game by @Coolguy | Stardance
Devlogs:
Ive added the code for movement and ive designed the actual snake tiles. Not sure if the code actually wroks but we will figure it out along the way He looks so friggin derpy 😭😭😭😭
I had to redo lots of the code and add a ton more code but I’ve finally got it all into Godot. Now i just gotta make it work😭😭
Ive finally gotten the game working but there’s no textures or anything interesting to the game. It’s just infinite snake😭 I will probably add more but i might not be able to because I’m gonna be out of school. And my snake project is signed into my school computer. but hopefully I will be able to recover it to work on it a bit for the summer
Ships:
I made a very basic snake game in godot which pretty much has nothin gto it besides moving, eating, and growing. I know im supposed to have a playable link but i kind of lost the game file. so the code is there in github but it cant really get set up. i dont expect anything from this project because its failed but i just wanna finish it so i can start a new project. Sorry about that....
|
1793281986.4551694
|
1793368386.4551694
|
|
21592
|
QUIZ APP by @Grace3 | Stardance
|
Grace3
|
1
|
7.0
|
14
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T00:23:55Z", "hours": 7.0, "multiplier": 2.12, "payout": 14, "blessing": "neutral", "text": "I created a Quiz App with HTML, CSS and JavaScript. It has random questions, answer highlighting, a timer, and audio feedback. The hardest part was the JavaScript", "repo": "https://github.com/Temi-ay/Quiz-App", "demo": "https://temi-ay.github.io/Quiz-App/"}]...
|
[{"post_id": 14018, "ts": "202 [{"post_id": 14018, "ts": "2026-06-23T00:18:24Z", "hours": 5.5222, "text": "Completed the quiz app with a working timer and audio"}, {"post_id": 13385, "ts": "2026-06-21T22:36:10Z", "hours": 1.0778, "text": "Working on a Quiz App . using Java, CSS, and HTML"}]...
|
Title: QUIZ APP by @Grace3 | Stardance
Devlogs:
W Title: QUIZ APP by @Grace3 | Stardance
Devlogs:
Working on a Quiz App . using Java, CSS, and HTML
Completed the quiz app with a working timer and audio
Ships:
I created a Quiz App with HTML, CSS and JavaScript. It has random questions, answer highlighting, a timer, and audio feedback. The hardest part was the JavaScript...
|
1793263793.9986165
|
1793350193.9986165
|
|
21603
|
Caesar Plugin by @fraa2a | Stardance
|
fraa2a
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T00:57:51Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Caesar, a simple Minecraft staff plugin that helps moderators check players, find possible alt accounts using IP history, and use a basic staff mode. One of the hardest parts was fixing a bug where the plugin did not always give players their inventory back correctly after leaving staff mode. I also had to work with a database to save player information like IPs, join history, and client brand. I am proud that the plugin is simple to use but still useful for real server moderation. To test it, put the plugin in a Spigot/Paper server, join with a few accounts, then try /check , /alts , and /staffmode. Staff permissions or op is needed to use the commands.", "repo": "https://github.com/fraa2a/CaesarPlugin", "demo": "https://modrinth.com/plugin/caesar"}]...
|
[{"post_id": 12258, "ts": "202 [{"post_id": 12258, "ts": "2026-06-20T00:48:40Z", "hours": 3.4081, "text": "Today I spent around two hours working on a new feature for Caesar, my Minecraft staff plugin: Staff Mode. The idea is simple: when a staff member runs /staffmode, the plugin saves their current inventory, armor, location, and gamemode. Then it clears their inventory, puts them in creative mode, gives them vanish, and lets them do staff stuff without affecting their normal survival items. At first I tried saving the inventory directly into a YAML file, but restoring it was not working properly. The data was there, but the player was not getting their items back correctly. After debugging it for a while, I changed the system to serialize the inventory into a Base64 string. This makes the saved data easier to store and much more reliable to restore later. Now, when the player exits Staff Mode, Caesar reads the saved data, restores the inventory and armor, teleports the player back, restores their gamemode, disables vanish, and cleans the saved data from the file. This was not a huge feature, but it was a good learning experience."}, {"post_id": 11281, "ts": "2026-06-18T13:32:24Z", "hours": 1.4464, "text": "Today i started making my own Minecraft plugin for admin management implementing an sql database"}]...
|
Title: Caesar Plugin by @fraa2a | Stardance
Devlo Title: Caesar Plugin by @fraa2a | Stardance
Devlogs:
Today i started making my own Minecraft plugin for admin management implementing an sql database
Today I spent around two hours working on a new feature for Caesar, my Minecraft staff plugin: Staff Mode. The idea is simple: when a staff member runs /staffmode, the plugin saves their current inventory, armor, location, and gamemode. Then it clears their inventory, puts them in creative mode, gives them vanish, and lets them do staff stuff without affecting their normal survival items. At first I tried saving the inventory directly into a YAML file, but restoring it was not working properly. The data was there, but the player was not getting their items back correctly. After debugging it for a while, I changed the system to serialize the inventory into a Base64 string. This makes the saved data easier to store and much more reliable to restore later. Now, when the player exits Staff Mode, Caesar reads the saved data, restores the inventory and armor, teleports the player back, restores their gamemode, disables vanish, and cleans the saved data from the file. This was not a huge feature, but it was a good learning experience.
Ships:
I made Caesar, a simple Minecraft staff plugin that helps moderators check players, find possible alt accounts using IP history, and use a basic staff mode. One of the hardest parts was fixing a bug where the plugin did not always give players their inventory back correctly after leaving staff mode. I also had to work with a database to save player information like IPs, join history, and client brand. I am proud that the plugin is simple to use but still useful for real server moderation. To test it, put the plugin in a Spigot/Paper server, join with a few accounts, then try /check , /alts , and /staffmode. Staff permissions or op is needed to use the commands....
|
1793220480.512258
|
1793306880.512258
|
|
21621
|
So Let's Set The Ore On Fire by @jpeisach | St So Let's Set The Ore On Fire by @jpeisach | Stardance...
|
jpeisach
|
1
|
1.67
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T13:30:45Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "26.2 Port of So Let’s Set The Ore On Fire The 26.2 port of SLSTOOF is now available for Fabric and Neoforge on Modrinth and GitHub!", "repo": "https://github.com/jpeisach/slstoof", "demo": "https://modrinth.com/mod/so-lets-set-the-ore-on-fire"}]...
|
[{"post_id": 11922, "ts": "202 [{"post_id": 11922, "ts": "2026-06-19T13:15:37Z", "hours": 0.6675, "text": "26.2 port, actually So the jar actually only contained the code for the mod loader client, and not the common code. Oops. Thanks to some help in the Architectury discord, I found that I needed to upgrade to another “shadow” gradle plugin (on another ID) and also apply some changes. Now everything is correct. Since I messed up, I made a new release (1.0.3), and it also gave me the chance to update the repository information since I changed my GitHub name from ItzSwirlz to JPeisach (I think I’d prefer “jpeisach” but I don’t know if I can be that specific - regardless, the url is case insensitive)."}, {"post_id": 11278, "ts": "2026-06-18T13:27:23Z", "hours": 0.6603, "text": "So Let’s Set The Ore On Fire - 26.2 Port After skipping 26.1 because Architectury (mod loader abstraction library) didn’t have a version available (as far as I knew), and since the update was well.. nothing interesting, since one now exists for 26.2 I took the time to port SLSTOOF (So Let’s Set The Ore On Fire) to 26.2. Mod Introduction SLSTOOF is a mod that adds the other kinds of fire types. In real life, if you light copper on fire, the color actually ends up being a little bit light-blueish. For example, Copper Torches. I think Mojang did this in education edition, but not in Java. They would eventually add it (and I would need to create “aliases” to automatically migrate world blocks from the mod’s copper torch to the game’s copper torch, but that happened pre-Star dance). Iron also lights a bit more “yellowish”, and also, since redstone torches are red, I made redstone fire “red”. Aside from the “fire block” that is made depending on which surface you light the fire on, I also took the time to place in the missing torches and campfires. I also made the redstone campfire emit signal :) You can also see that I put in GameTest tests. For now, I just did basic flame ignition. In the future, I could add more to ensure things like crafting or item drops work. But believe me, this is useful for when you have to make a minor upgrade and don’t want to have to start the game to check if anything broke. 26.2 Porting (this declog) The main headaches were: Java 25 or later Architectury and Gradle The code changes since 1.21.11 Java 25 and later Just some manual configurations like using JAVA_HOME to specify which Java version to use. It took me an embarrassing long time to realize that the “unsupported major class version” errors were because of this. Gradle Gradle was updated to 9.5.0. Architectury Loom (fork of Fabric Loom, which I think helps manages dependencies and mod toolchain but I forgot), had also gotten updates. Same with the Architectury Gradle Plugin. Since obfuscation is no longer a thing, I had to tell gradle to stop complaining about the lack of “mappings” dependency, and I also had to bounce around snapshot versions of Architectury Loom until I found the solution for porting my project, because official docs for porting had not been updated yet and neither had the mod template generator. By combing through Discord messages on the Architectury Discord, and lots of trial and error, I eventually got things to work. Code changes since 1.21.11 Access Wideners: named -> “official” (also required a change in gradle config) RenderTypeRegistry was used to ensure that the blocks that do not take up entire 1x1x1 spaces, like torches and campfires, don’t get registered as such. Otherwise they have a black border above the actual texture. It seems that this is no longer needed, as I can just set the Campfire BlockEntityType list to include my custom campfires - and everything else seems to not be affected. Go Mojang refactoring, I guess? Anyways, it worked out. I think another class was renamed in the Fabric/Neoforge side of things, but I tested everything and all is good. After missing 26.1, I was a little worried - I thought that I may have to switch to Balm, another mod loader abstraction library, in hopes that it would be more up to date. But, probably since college has ended, people had time to work on it and I am now able to deliver only two days after release, which is pretty good. The ported versions of the mod are now available on GitHub and Modrinth for Fabric and NeoForge. Happy porting and world upgrading everyone! (Oh and thanks Zed for not counting the like, hour I think, I spent fighting with Gradle before I switched to IntelliJ, maybe rerunning the Hackatime install script did something, but nevertheless it’s about 37 minutes of actual “code” time)."}]...
|
Title: So Let's Set The Ore On Fire by @jpeisa Title: So Let's Set The Ore On Fire by @jpeisach | Stardance
Devlogs:
So Let’s Set The Ore On Fire - 26.2 Port After skipping 26.1 because Architectury (mod loader abstraction library) didn’t have a version available (as far as I knew), and since the update was well.. nothing interesting, since one now exists for 26.2 I took the time to port SLSTOOF (So Let’s Set The Ore On Fire) to 26.2. Mod Introduction SLSTOOF is a mod that adds the other kinds of fire types. In real life, if you light copper on fire, the color actually ends up being a little bit light-blueish. For example, Copper Torches. I think Mojang did this in education edition, but not in Java. They would eventually add it (and I would need to create “aliases” to automatically migrate world blocks from the mod’s copper torch to the game’s copper torch, but that happened pre-Star dance). Iron also lights a bit more “yellowish”, and also, since redstone torches are red, I made redstone fire “red”. Aside from the “fire block” that is made depending on which surface you light the fire on, I also took the time to place in the missing torches and campfires. I also made the redstone campfire emit signal :) You can also see that I put in GameTest tests. For now, I just did basic flame ignition. In the future, I could add more to ensure things like crafting or item drops work. But believe me, this is useful for when you have to make a minor upgrade and don’t want to have to start the game to check if anything broke. 26.2 Porting (this declog) The main headaches were: Java 25 or later Architectury and Gradle The code changes since 1.21.11 Java 25 and later Just some manual configurations like using JAVA_HOME to specify which Java version to use. It took me an embarrassing long time to realize that the “unsupported major class version” errors were because of this. Gradle Gradle was updated to 9.5.0. Architectury Loom (fork of Fabric Loom, which I think helps manages dependencies and mod toolchain but I forgot), had also gotten updates. Same with the Architectury Gradle Plugin. Since obfuscation is no longer a thing, I had to tell gradle to stop complaining about the lack of “mappings” dependency, and I also had to bounce around snapshot versions of Architectury Loom until I found the solution for porting my project, because official docs for porting had not been updated yet and neither had the mod template generator. By combing through Discord messages on the Architectury Discord, and lots of trial and error, I eventually got things to work. Code changes since 1.21.11 Access Wideners: named -> “official” (also required a change in gradle config) RenderTypeRegistry was used to ensure that the blocks that do not take up entire 1x1x1 spaces, like torches and campfires, don’t get registered as such. Otherwise they have a black border above the actual texture. It seems that this is no longer needed, as I can just set the Campfire BlockEntityType list to include my custom campfires - and everything else seems to not be affected. Go Mojang refactoring, I guess? Anyways, it worked out. I think another class was renamed in the Fabric/Neoforge side of things, but I tested everything and all is good. After missing 26.1, I was a little worried - I thought that I may have to switch to Balm, another mod loader abstraction library, in hopes that it would be more up to date. But, probably since college has ended, people had time to work on it and I am now able to deliver only two days after release, which is pretty good. The ported versions of the mod are now available on GitHub and Modrinth for Fabric and NeoForge. Happy porting and world upgrading everyone! (Oh and thanks Zed for not counting the like, hour I think, I spent fighting with Gradle before I switched to IntelliJ, maybe rerunning the Hackatime install script did something, but nevertheless it’s about 37 minutes of actual “code” time).
26.2 port, actually So the jar actually only contained the code for the mod loader client, and not the common code. Oops. Thanks to some help in the Architectury discord, I found that I needed to upgrade to another “shadow” gradle plugin (on another ID) and also apply some changes. Now everything is correct. Since I messed up, I made a new release (1.0.3), and it also gave me the chance to update the repository information since I changed my GitHub name from ItzSwirlz to JPeisach (I think I’d prefer “jpeisach” but I don’t know if I can be that specific - regardless, the url is case insensitive).
Ships:
26.2 Port of So Let’s Set The Ore On Fire The 26.2 port of SLSTOOF is now available for Fabric and Neoforge on Modrinth and GitHub!...
|
1793245881.2261176
|
1793332281.2261176
|
|
21626
|
LightYears by @sainiavinash234 | Stardance
|
sainiavinash234
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T03:52:26Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Lightyears finds the REAL star whose light left it on the day you were born. What it does: enter your birthday, and the app turns your age into light-years, then locates an actual star at that exact distance from a catalog of 8,800+ real stars (HYG v4.1). The light hitting your eyes tonight genuinely left that star the day you were born. What I built: • Find your star — your age becomes light-years, mapped to a real star (preferring named/bright ones) • 3D galaxy (Three.js) — ~8,800 real stars placed by actual coordinates, coloured by temperature. Drag to look around, scroll to zoom. Your star glows with a pulsing ring • “The universe is watching” — drag a timeline through history and the galaxy lights up the shell of stars at that distance. A star 57 ly away is watching Earth’s 1969 Moon landing RIGHT NOW. Real events + your birthday are pinned on the timeline • Starposts + share cards — pin a message to your star (saved locally per star) and download a beautiful PNG to post anywhere What was challenging: • Smoothly brightening a “shell” of 8,800 stars while dragging — solved with a custom shader using shell-radius uniforms (no geometry rebuilds, buttery smooth) • Getting html-to-image to embed Google Fonts into the share-card PNG — fixed with crossorigin=“anonymous” on the font link What I’m proud of: pure HTML/CSS/JS, no backend, no build step, works on mobile, and the “someone out there is right now watching the day you were born” moment genuinely gives people chills. Real astronomy + real emotion. How to test: open the live demo, enter any birthday, hit “Find my star”. Then try “See who’s watching →” (drag the timeline through Earth’s history) and “Pin a message ✦” (write something and download the share card). Live: https://mrcrackman00.github.io/Lightyears/ Source: https://github.com/mrcrackman00/Lightyears", "repo": "https://github.com/mrcrackman00/Lightyears", "demo": "https://mrcrackman00.github.io/Lightyears/"}]...
|
[{"post_id": 16144, "ts": "202 [{"post_id": 16144, "ts": "2026-06-26T07:31:33Z", "hours": 0.7661, "text": "The breakthrough feature: “The Universe Is Watching” 🛸 This one bends your brain. Light is slow — a star 57 light-years away is RIGHT NOW catching the light that left Earth 57 years ago, in 1969. So someone on a planet there tonight, with a good telescope, would be watching the Moon landing LIVE. Not a recording — live. Added a timeline slider. Drag it and the 3D galaxy lights up the shell of stars at that exact distance, with a headline naming the moment those stars are seeing. Real events are pinned — first flight, penicillin, Moon landing, first iPhone, first black hole photo. Your own birthday gets pinned too. All numbers come straight from the real HYG catalog. The shader takes shell-radius uniforms so brightening the right band of stars while dragging needs zero geometry rebuilds. Live demo: https://mrcrackman00.github.io/Lightyears/"}, {"post_id": 15057, "ts": "2026-06-24T13:37:59Z", "hours": 0.2789, "text": "Shipped the core of Lightyears ⭐ The idea: enter your birthday, and the app turns your age into light-years, then finds a REAL star whose light has been travelling toward Earth for exactly that long. So the light hitting your eyes tonight actually left that star the day you were born. Built it on the HYG v4.1 star catalog — processed 100k+ stars down to a clean JSON of 8,800 worth showing. Dark, cinematic, mobile-first UI. No backend, pure HTML/CSS/JS. Next up: turn the flat result card into a real 3D galaxy you can fly through."}, {"post_id": 15039, "ts": "2026-06-24T12:52:08Z", "hours": 2.6183, "text": "Tonight, a star is showing you the day you were born. Go find it. First ship of Lightyears! Enter your birthday and it finds the real star whose light left it the day you were born your age becomes light-years, mapped to an actual star from a catalog of 8,800+. Includes an interactive 3D galaxy, a “universe is watching” timeline, and downloadable share cards. Live: https://mrcrackman00.github.io/Lightyears/"}]...
|
Title: LightYears by @sainiavinash234 | Stardance
Title: LightYears by @sainiavinash234 | Stardance
Devlogs:
Tonight, a star is showing you the day you were born. Go find it. First ship of Lightyears! Enter your birthday and it finds the real star whose light left it the day you were born your age becomes light-years, mapped to an actual star from a catalog of 8,800+. Includes an interactive 3D galaxy, a “universe is watching” timeline, and downloadable share cards. Live: https://mrcrackman00.github.io/Lightyears/
Shipped the core of Lightyears ⭐ The idea: enter your birthday, and the app turns your age into light-years, then finds a REAL star whose light has been travelling toward Earth for exactly that long. So the light hitting your eyes tonight actually left that star the day you were born. Built it on the HYG v4.1 star catalog — processed 100k+ stars down to a clean JSON of 8,800 worth showing. Dark, cinematic, mobile-first UI. No backend, pure HTML/CSS/JS. Next up: turn the flat result card into a real 3D galaxy you can fly through.
The breakthrough feature: “The Universe Is Watching” 🛸 This one bends your brain. Light is slow — a star 57 light-years away is RIGHT NOW catching the light that left Earth 57 years ago, in 1969. So someone on a planet there tonight, with a good telescope, would be watching the Moon landing LIVE. Not a recording — live. Added a timeline slider. Drag it and the 3D galaxy lights up the shell of stars at that exact distance, with a headline naming the moment those stars are seeing. Real events are pinned — first flight, penicillin, Moon landing, first iPhone, first black hole photo. Your own birthday gets pinned too. All numbers come straight from the real HYG catalog. The shader takes shell-radius uniforms so brightening the right band of stars while dragging needs zero geometry rebuilds. Live demo: https://mrcrackman00.github.io/Lightyears/
Ships:
Lightyears finds the REAL star whose light left it on the day you were born. What it does: enter your birthday, and the app turns your age into light-years, then locates an actual star at that exact distance from a catalog of 8,800+ real stars (HYG v4.1). The light hitting your eyes tonight genuinely left that star the day you were born. What I built: • Find your star — your age becomes light-years, mapped to a real star (preferring named/bright ones) • 3D galaxy (Three.js) — ~8,800 real stars placed by actual coordinates, coloured by temperature. Drag to look around, scroll to zoom. Your star glows with a pulsing ring • “The universe is watching” — drag a timeline through history and the galaxy lights up the shell of stars at that distance. A star 57 ly away is watching Earth’s 1969 Moon landing RIGHT NOW. Real events + your birthday are pinned on the timeline • Starposts + share cards — pin a message to your star (saved locally per star) and download a beautiful PNG to post anywhere What was challenging: • Smoothly brightening a “shell” of 8,800 stars while dragging — solved with a custom shader using shell-radius uniforms (no geometry rebuilds, buttery smooth) • Getting html-to-image to embed Google Fonts into the share-card PNG — fixed with crossorigin=“anonymous” on the font link What I’m proud of: pure HTML/CSS/JS, no backend, no build step, works on mobile, and the “someone out there is right now watching the day you were born” moment genuinely gives people chills. Real astronomy + real emotion. How to test: open the live demo, enter any birthday, hit “Find my star”. Then try “See who’s watching →” (drag the timeline through Earth’s history) and “Pin a message ✦” (write something and download the share card). Live: https://mrcrackman00.github.io/Lightyears/ Source: https://github.com/mrcrackman00/Lightyears...
|
1793292678.0596335
|
1793379078.0596335
|
|
21633
|
my own 3d-prints by @Gabl | Stardance
|
Gabl
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T09:15:57Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Finished learning the basics of 3D-Modelling in both Blender and picoCAD2 by creating both a sheep and a fence in both of them. I am really proud of how the models turned out and have learned much along the way. But this wasn’t without its issues - starting the project I lost like one and a half hour of tracking due to me closing the tracking window - oops. Also my 3D-Printer just pretty much gave up printing nicely and I have no Idea how to fix it, it seems to be Z-Wobble but nothing I did seemed to change anything, its really frustrating. I hope that I can fix that soon. The 3D-Print turned out pretty horrific because of that, and I still haven’t managed to fix that in hours. Also it isn’t like a perfect solution but I painted the different colored parts with a sharpie. The 3D-Models are fine tho and should print perfectly fine on other 3D-Printers, it’s just this Z-wobble issue I am having that makes them look all botched and such. Thanks for reading! an amateur trying to get better", "repo": "https://github.com/gabl18/my-own-3d-prints", "demo": ""}]...
|
[{"post_id": 15554, "ts": "202 [{"post_id": 15554, "ts": "2026-06-25T09:06:53Z", "hours": 0.9669, "text": "Fixed some parts of the picoCAD2 Sheep model (forgot the tail) and also made a picoCAD2 Fence model, organized the directory of my github page. And created a release of it so people can download it. Also got to printing all of the models, but sadly after hours of trying still couldn’t fix the Z-Wobble issues my printer is having so the models came out looking a bit rough. Shouldn’t be an issue for anyone else printing tho."}, {"post_id": 15296, "ts": "2026-06-24T20:52:50Z", "hours": 1.3169, "text": "Hello again! First of all: 3D-Printed the Fence and the blender sheep, although the fence wasn’t very strong and broke in the back (it’s actually perfect like that for my display tho haha) - also idk why the layerline settings got messed up because the print of the sheep turned out really ugly, gonna have to reprint that and also print the picoCAD2 sheep. Second: Actually also made the picoCAD2 sheep, turned out cutie, and didn’t take that long but sadly picoCAD2 can’t export .stl, but my slicer also supports .obj so that’s fine."}, {"post_id": 15061, "ts": "2026-06-24T13:57:35Z", "hours": 1.6836, "text": "Yippie, finished the sheep in Blender, made renders and a scenery next to it - also already exported the Sheep and Fence to .stl, I know the models aren’t very optimized for 3d-printing, but this is just to try and get to know blender a bit more and also have a print of this cutie patootie Well other than that, I will also try to recreate the same model using picoCAD and compare the two, both how long they took me and how the model is in comparison. See ya"}, {"post_id": 14509, "ts": "2026-06-23T17:30:47Z", "hours": 0.8842, "text": "So, I ran into some issues starting this project. I wanted to learn how to use blender a bit and followed a tutorial, due to an error the timelapse didn’t capture using Lookout, so like 1,5h didn’t track. But it’s not that big of a deal, after getting to know blender I started my model I will try to 3d-print, I hope that its not too complex with the stuff around it, but yeah thats it pretty much for now."}]...
|
Title: my own 3d-prints by @Gabl | Stardance
Devl Title: my own 3d-prints by @Gabl | Stardance
Devlogs:
So, I ran into some issues starting this project. I wanted to learn how to use blender a bit and followed a tutorial, due to an error the timelapse didn’t capture using Lookout, so like 1,5h didn’t track. But it’s not that big of a deal, after getting to know blender I started my model I will try to 3d-print, I hope that its not too complex with the stuff around it, but yeah thats it pretty much for now.
Yippie, finished the sheep in Blender, made renders and a scenery next to it - also already exported the Sheep and Fence to .stl, I know the models aren’t very optimized for 3d-printing, but this is just to try and get to know blender a bit more and also have a print of this cutie patootie Well other than that, I will also try to recreate the same model using picoCAD and compare the two, both how long they took me and how the model is in comparison. See ya
Hello again! First of all: 3D-Printed the Fence and the blender sheep, although the fence wasn’t very strong and broke in the back (it’s actually perfect like that for my display tho haha) - also idk why the layerline settings got messed up because the print of the sheep turned out really ugly, gonna have to reprint that and also print the picoCAD2 sheep. Second: Actually also made the picoCAD2 sheep, turned out cutie, and didn’t take that long but sadly picoCAD2 can’t export .stl, but my slicer also supports .obj so that’s fine.
Fixed some parts of the picoCAD2 Sheep model (forgot the tail) and also made a picoCAD2 Fence model, organized the directory of my github page. And created a release of it so people can download it. Also got to printing all of the models, but sadly after hours of trying still couldn’t fix the Z-Wobble issues my printer is having so the models came out looking a bit rough. Shouldn’t be an issue for anyone else printing tho.
Ships:
Finished learning the basics of 3D-Modelling in both Blender and picoCAD2 by creating both a sheep and a fence in both of them. I am really proud of how the models turned out and have learned much along the way. But this wasn’t without its issues - starting the project I lost like one and a half hour of tracking due to me closing the tracking window - oops. Also my 3D-Printer just pretty much gave up printing nicely and I have no Idea how to fix it, it seems to be Z-Wobble but nothing I did seemed to change anything, its really frustrating. I hope that I can fix that soon. The 3D-Print turned out pretty horrific because of that, and I still haven’t managed to fix that in hours. Also it isn’t like a perfect solution but I painted the different colored parts with a sharpie. The 3D-Models are fine tho and should print perfectly fine on other 3D-Printers, it’s just this Z-wobble issue I am having that makes them look all botched and such. Thanks for reading! an amateur trying to get better...
|
1793253139.7565305
|
1793339539.7565305
|
|
21635
|
My very own WebOS by @ayanaj_13 | Stardance
|
ayanaj_13
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-29T02:26:10Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Final DevLog After a lot of debugging, designing, and rebuilding, Velora is finally complete! Velora is my own mini–Web OS that feels interactive and kinda customizable. I worked on building a desktop environment with draggable windows, a clock system, a weather widget, a calculator, settings, themes, and a search system. The biggest part was adding the new apps: 🛰️ Space Explorer - featuring real planet information and space facts. 🕵️ Mystery Files - exploring real historical mysteries. 🎮 Mini Arcade - with working mini-games like Reaction Test, Memory Match, and Puzzle. There were definitely moments where things broke; literally, most of the time, it was just fixing those problems. For now, I think I’m gonna leave Velora off as it is, and I’m really happy with how far it came from the first version.", "repo": "https://github.com/ayanajawaid1-cmd/Velora.git", "demo": ""}]...
|
[{"post_id": 36750, "ts": "202 [{"post_id": 36750, "ts": "2026-07-29T00:40:37Z", "hours": 1.2394, "text": "Devlog #2 Velora is now starting to feel more like an actual desktop environment. Today I focused on the functionality and smoothness of the apps. Current features: 🌤️ Live weather widget with real data 🕒 12/24 hour clock support 🔍 Search system that can open Velora apps and search Google 🎨 Theme switching 🧮 Working calculator 📝 Notes app There were definitely some bugs along the way (especially breaking things while trying to improve them), but fixing those problems has been the most stimulating part of this project. I’m willing to do what it takes to get this up and functioning."}, {"post_id": 32491, "ts": "2026-07-21T18:28:12Z", "hours": 0.0, "text": "Day 1 of building my own web OS 💻I started making something called VELORA, which is basically my attempt at creating my own browser-based operating system from scratch. Right now it doesn’t have much: a live clock, glassy widgets, and—my favorite part—THE WIDGETS ARE DRAGGABLE 😭It’s still very early and definitely not an actual OS yet, but watching it slowly start to look like a real desktop is honestly so cool. I want to add a Start Menu, actual apps, customizable wallpapers, desktop icons, and probably way too many features because I have no idea how to stop adding ideas 💀Anyway, VELORA is officially in development 🚀✨"}]...
|
Title: My very own WebOS by @ayanaj_13 | Stardance Title: My very own WebOS by @ayanaj_13 | Stardance
Devlogs:
Day 1 of building my own web OS 💻I started making something called VELORA, which is basically my attempt at creating my own browser-based operating system from scratch. Right now it doesn’t have much: a live clock, glassy widgets, and—my favorite part—THE WIDGETS ARE DRAGGABLE 😭It’s still very early and definitely not an actual OS yet, but watching it slowly start to look like a real desktop is honestly so cool. I want to add a Start Menu, actual apps, customizable wallpapers, desktop icons, and probably way too many features because I have no idea how to stop adding ideas 💀Anyway, VELORA is officially in development 🚀✨
Devlog #2 Velora is now starting to feel more like an actual desktop environment. Today I focused on the functionality and smoothness of the apps. Current features: 🌤️ Live weather widget with real data 🕒 12/24 hour clock support 🔍 Search system that can open Velora apps and search Google 🎨 Theme switching 🧮 Working calculator 📝 Notes app There were definitely some bugs along the way (especially breaking things while trying to improve them), but fixing those problems has been the most stimulating part of this project. I’m willing to do what it takes to get this up and functioning.
Ships:
Final DevLog After a lot of debugging, designing, and rebuilding, Velora is finally complete! Velora is my own mini–Web OS that feels interactive and kinda customizable. I worked on building a desktop environment with draggable windows, a clock system, a weather widget, a calculator, settings, themes, and a search system. The biggest part was adding the new apps: 🛰️ Space Explorer - featuring real planet information and space facts. 🕵️ Mystery Files - exploring real historical mysteries. 🎮 Mini Arcade - with working mini-games like Reaction Test, Memory Match, and Puzzle. There were definitely moments where things broke; literally, most of the time, it was just fixing those problems. For now, I think I’m gonna leave Velora off as it is, and I’m really happy with how far it came from the first version....
|
1793242581.927498
|
1793328981.927498
|
|
21643
|
My very own WebOS by @Yonkoylaw | Stardance
|
Yonkoylaw
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T01:04:52Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "easy,fun and personal website with my info using HTML and CSS", "repo": "https://github.com/yonkoylaw/CSS", "demo": "https://yonkoylaw.github.io/CSS/"}]...
|
[{"post_id": 15384, "ts": "202 [{"post_id": 15384, "ts": "2026-06-25T00:37:18Z", "hours": 2.0758, "text": "my funny little first project"}]...
|
Title: My very own WebOS by @Yonkoylaw | Stardance Title: My very own WebOS by @Yonkoylaw | Stardance
Devlogs:
my funny little first project
Ships:
easy,fun and personal website with my info using HTML and CSS...
|
1793238549.3531375
|
1793324949.3531375
|
|
21679
|
My awesome macropad! by @karthikeya | Stardance
|
karthikeya
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T15:47:20Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Hackpad using the instructions from the guide. This is my first time using KiCad, so it took me a while, but it worked out. Overall, it was worth it. I’m here to submit it since the form link is broken, so I just shipped it. The URL is not there for my project, so I just added the Hackclub URL as a placeholder.", "repo": "https://github.com/Coder-13-11/My-macropad.git", "demo": ""}]...
|
[{"post_id": 11349, "ts": "202 [{"post_id": 11349, "ts": "2026-06-18T15:41:27Z", "hours": 2.4061, "text": "I am Officially Done with My Hackpad"}]...
|
Title: My awesome macropad! by @karthikeya | Stard Title: My awesome macropad! by @karthikeya | Stardance
Devlogs:
I am Officially Done with My Hackpad
Ships:
I made a Hackpad using the instructions from the guide. This is my first time using KiCad, so it took me a while, but it worked out. Overall, it was worth it. I’m here to submit it since the form link is broken, so I just shipped it. The URL is not there for my project, so I just added the Hackclub URL as a placeholder....
|
1793231401.2328417
|
1793317801.2328417
|
|
21688
|
TacOS by @Perit | Stardance
|
Perit
|
1
|
2.75
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T21:22:35Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hellooo!!!! I’ve created a WebOS called TacOS. When you launch it, you’ll be greeted by the old Windows start screen, but as you can see from the taco bot in the bottom left and the tacos raining down on the screen, this isn’t a normal Windows XP!!! This is TacOS!!! You’ll see three applications on the left, and these applications offer different features! You can try them out! I completed this project in just one day, and although it’s not perfect, I think the idea is good! I hope you like it too. There are still many parts that need improvement; I will develop them over time and bring them to the final version!!", "repo": "https://github.com/mperitv/TacOS", "demo": "https://mperitv.github.io/TacOS/"}]...
|
[{"post_id": 12130, "ts": "202 [{"post_id": 12130, "ts": "2026-06-19T20:25:31Z", "hours": 0.7542, "text": "Update!! Added a text on welcome screen. Increased the volume of pizza sound effect. Now you can click random fact button for random fact and I’ll add more fun facts about tacos next update. And now TacOS Bot can have different dialogues. You can open apps by clicking start button too!"}, {"post_id": 11547, "ts": "2026-06-18T20:52:25Z", "hours": 0.8125, "text": "Update!! 1: Now there are 3 apps called TacOS, NachOS and DominOS!! 2: I added background music now you can hear the TacOS!! 3: The TacOS BOT is speaking and you can close the tabs!!"}, {"post_id": 11427, "ts": "2026-06-18T18:11:05Z", "hours": 1.3578, "text": "Huge Update!! I drew a TacOS Bot on the xp wallpaper and I added it! Next, I added a bar below and changed the welcome screen! And last but not least, it’s really raining TacOS now!!"}, {"post_id": 11332, "ts": "2026-06-18T15:22:54Z", "hours": 0.3172, "text": "I am making TacOS its going to rain tacos soon!! (I don’t think so)"}]...
|
Title: TacOS by @Perit | Stardance
Devlogs:
I am Title: TacOS by @Perit | Stardance
Devlogs:
I am making TacOS its going to rain tacos soon!! (I don’t think so)
Huge Update!! I drew a TacOS Bot on the xp wallpaper and I added it! Next, I added a bar below and changed the welcome screen! And last but not least, it’s really raining TacOS now!!
Update!! 1: Now there are 3 apps called TacOS, NachOS and DominOS!! 2: I added background music now you can hear the TacOS!! 3: The TacOS BOT is speaking and you can close the tabs!!
Update!! Added a text on welcome screen. Increased the volume of pizza sound effect. Now you can click random fact button for random fact and I’ll add more fun facts about tacos next update. And now TacOS Bot can have different dialogues. You can open apps by clicking start button too!
Ships:
Hellooo!!!! I’ve created a WebOS called TacOS. When you launch it, you’ll be greeted by the old Windows start screen, but as you can see from the taco bot in the bottom left and the tacos raining down on the screen, this isn’t a normal Windows XP!!! This is TacOS!!! You’ll see three applications on the left, and these applications offer different features! You can try them out! I completed this project in just one day, and although it’s not perfect, I think the idea is good! I hope you like it too. There are still many parts that need improvement; I will develop them over time and bring them to the final version!!...
|
1793246051.8708093
|
1793332451.8708093
|
|
21694
|
Vokul by @Dragon | Stardance
|
Dragon
|
1
|
21.0
|
273
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T14:29:54Z", "hours": 21.0, "multiplier": 13.21, "payout": 273, "blessing": "neutral", "text": "First every ship in star dance. Vokul is a local CLI based password manager where you can store your passwords safely. It has alot of safety mechanisms behind so you don’t have to worry. Stay tuned to get a new chrome extension as well!", "repo": "https://github.com/DevX-Dragon/vokul", "demo": "https://github.com/DevX-Dragon/vokul/releases/tag/v1.0.0"}]...
|
[{"post_id": 20009, "ts": "202 [{"post_id": 20009, "ts": "2026-07-01T14:27:53Z", "hours": 1.3914, "text": "Publishing Did some final stuff and published to PyPi. Add SECURITY.md and `CONTRIBUTION.md Fix workflow to auto-publish to PyPi. Working a landing website. Added a release Published to PyPI Now install via pip install vokul -- upgrade"}, {"post_id": 19953, "ts": "2026-07-01T12:23:39Z", "hours": 7.8642, "text": "Locked TF in I wasnt able to do any devlogs cause my internet was out and yeah. I did alot of work during the 8 hours, Rewrote the entire vault.py script to optimize the encryption and saving passwords. Used the rich library to enhance the GUI. (took the longest) Researched more about other similar tools and made a work plan for future updates. Setting up workflows for auto publishing. Wrote a proper documentation and an attractive readme."}, {"post_id": 15022, "ts": "2026-06-24T12:26:45Z", "hours": 2.8694, "text": "Debugging So i did few changes with the main vault.py to optimize the script. Like making it load only few saves lists and load them when they’re searched for. And alot of backend optimization. Im currently dont have ideas to add new stuff but lets see"}, {"post_id": 14385, "ts": "2026-06-23T14:31:56Z", "hours": 4.95, "text": "Alot of things (forget to sync the hackatime folder) I moved some files and forgot to sync it to hackatime so the hours is kind of high sorry. This session was mostly debugging and testing and nothing much. Did some security patches and got feedback from some people."}, {"post_id": 13157, "ts": "2026-06-21T15:08:06Z", "hours": 0.5764, "text": "More features and fixing Fixing Commands Fixed some existing commands on how they handle errors. Fixed some ghost bugs in it as well. Quick CLI preview edit Added a purple ASCII art to make it look polished Fix recovery Fixed the auto-recovery function for the vault. (<– not fully confident if it works properly, but yeah)"}, {"post_id": 12611, "ts": "2026-06-20T16:37:59Z", "hours": 1.2003, "text": "New Commands and Features Added some new commands and upgraded already existing commands as well. Commands --memorable flag: Added this flag to vokul generate to make the generated string a memorizable string. (in this case, words) vokul edit: I have vokul add and get . So i added vokul edit so you edit passwords or update your TOTP. vokul delete : A simple command to remove a service entry entirely. vokul export : Allow the user to export their vault to a plain-text JSON file (after re-entering the Master Password). This is a “Right to Leave”—users feel safer using a tool if they know they can easily get their data out of it. Features Dry-Run/Validation: Before committing a save() to the file, added a verification check. If the vault file is corrupted during a write operation (e.g., power failure), Vokul will detect it on the next launch and attempt to restore from the last valid .bak file automatically. Lockdown on Error: If a user enters the wrong master password, added a “Cooldown” timer. After 3 failed attempts, force the process to sleep for 5 seconds, increasing exponentially to prevent brute-force attacks on the vault file. (⚠️: Some of these are still in a WIP stage, will update them later. This is the skeleton that i’ll be building around)"}, {"post_id": 12542, "ts": "2026-06-20T14:20:21Z", "hours": 1.0903, "text": "The Base Features So I have developed most of the base features that should be in a password manager. Like adding , viewing , deleting passwords. Searching for the added services , and proper hashing and salting. Adding TOTP Half made a TOTP service where it can generate your 2FA codes without any other external authenticates. It currently works but has some backend issues. Backup system Also half-made. Added a function where it will save a cache copy of the vault before a service is added. So if the vault gets corrupted the cached vault will replace the corrupted vault. Also added an corrupt-check when starting the script itself. Added more hashing and salting for the cache vault as well to prevent leakings. Assets and Logos (not tracked) I made some logos for the app cause why not. I didnt lapse it so It isnt included in the total hours but it took ~1.5 hours."}, {"post_id": 11971, "ts": "2026-06-19T15:17:37Z", "hours": 0.8528, "text": "First Devlog for vokul!! What is this? This is a local-first password manager made in Python. Im planning on making this cross-device compatible with extension , app for windows/mobile and a CLI too. So this will be a big project. The Plan First I’m going to be making the CLI version which will also act as the backbone for other versions. Next the chrome extension and so and on. Progress Currently build the absolute skeleton for the CLI with basic password saving functions. Passwords are properly salted as well. But will improve the security in the future."}]...
|
Title: Vokul by @Dragon | Stardance
Devlogs:
Firs Title: Vokul by @Dragon | Stardance
Devlogs:
First Devlog for vokul!! What is this? This is a local-first password manager made in Python. Im planning on making this cross-device compatible with extension , app for windows/mobile and a CLI too. So this will be a big project. The Plan First I’m going to be making the CLI version which will also act as the backbone for other versions. Next the chrome extension and so and on. Progress Currently build the absolute skeleton for the CLI with basic password saving functions. Passwords are properly salted as well. But will improve the security in the future.
The Base Features So I have developed most of the base features that should be in a password manager. Like adding , viewing , deleting passwords. Searching for the added services , and proper hashing and salting. Adding TOTP Half made a TOTP service where it can generate your 2FA codes without any other external authenticates. It currently works but has some backend issues. Backup system Also half-made. Added a function where it will save a cache copy of the vault before a service is added. So if the vault gets corrupted the cached vault will replace the corrupted vault. Also added an corrupt-check when starting the script itself. Added more hashing and salting for the cache vault as well to prevent leakings. Assets and Logos (not tracked) I made some logos for the app cause why not. I didnt lapse it so It isnt included in the total hours but it took ~1.5 hours.
New Commands and Features Added some new commands and upgraded already existing commands as well. Commands --memorable flag: Added this flag to vokul generate to make the generated string a memorizable string. (in this case, words) vokul edit: I have vokul add and get . So i added vokul edit so you edit passwords or update your TOTP. vokul delete : A simple command to remove a service entry entirely. vokul export : Allow the user to export their vault to a plain-text JSON file (after re-entering the Master Password). This is a “Right to Leave”—users feel safer using a tool if they know they can easily get their data out of it. Features Dry-Run/Validation: Before committing a save() to the file, added a verification check. If the vault file is corrupted during a write operation (e.g., power failure), Vokul will detect it on the next launch and attempt to restore from the last valid .bak file automatically. Lockdown on Error: If a user enters the wrong master password, added a “Cooldown” timer. After 3 failed attempts, force the process to sleep for 5 seconds, increasing exponentially to prevent brute-force attacks on the vault file. (⚠️: Some of these are still in a WIP stage, will update them later. This is the skeleton that i’ll be building around)
More features and fixing Fixing Commands Fixed some existing commands on how they handle errors. Fixed some ghost bugs in it as well. Quick CLI preview edit Added a purple ASCII art to make it look polished Fix recovery Fixed the auto-recovery function for the vault. (<– not fully confident if it works properly, but yeah)
Alot of things (forget to sync the hackatime folder) I moved some files and forgot to sync it to hackatime so the hours is kind of high sorry. This session was mostly debugging and testing and nothing much. Did some security patches and got feedback from some people.
Debugging So i did few changes with the main vault.py to optimize the script. Like making it load only few saves lists and load them when they’re searched for. And alot of backend optimization. Im currently dont have ideas to add new stuff but lets see
Locked TF in I wasnt able to do any devlogs cause my internet was out and yeah. I did alot of work during the 8 hours, Rewrote the entire vault.py script to optimize the encryption and saving passwords. Used the rich library to enhance the GUI. (took the longest) Researched more about other similar tools and made a work plan for future updates. Setting up workflows for auto publishing. Wrote a proper documentation and an attractive readme.
Publishing Did some final stuff and published to PyPi. Add SECURITY.md and `CONTRIBUTION.md Fix workflow to auto-publish to PyPi. Working a landing website. Added a release Published to PyPI Now install via pip install vokul -- upgrade
Ships:
First every ship in star dance. Vokul is a local CLI based password manager where you can store your passwords safely. It has alot of safety mechanisms behind so you don’t have to worry. Stay tuned to get a new chrome extension as well!...
|
1792882119.512995
|
1793746119.512995
|
|
21720
|
PD biomarkers by @arjundakshin | Stardance
|
arjundakshin
|
1
|
18.0
|
287
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T17:29:50Z", "hours": 18.0, "multiplier": 15.93, "payout": 287, "blessing": "neutral", "text": "I built a glassbox-mirna, a leak-free xai pipeline and a interactive streamlit web application for early stage Parkinson’s disease biomarker discovery. After I got the biomarker I tested drug response against a drug called rasagaline. Using GSE269781 a serum exosome mirna data I ran a 2 tier architecture with elastic net and random forest models validated via outer-loop monte carlo cross validation. Now that I have all the technical stuff out of the way now its time for the why. To be honest… I don’t know I heard about neurodegenerative diseases in science class and just went with the flow. Most people have emotional crazy stories but for me it was just curiosity. And it worked!! I learned complex ML topics(not the full basis tho i need to still learn) and how to make somehting professional. I did use AI for debugging and for the streamlit application not everything tho and I think it turned out well. I’m submitting this project to the science and engineering fair of metro detroit next year and as a freshman I think i did pretty well. (praying for isef wish me good luck)!", "repo": "https://github.com/DrivingStork3952/glassbox-mirna-pd-biomarkers", "demo": "https://arjundakshin.hackclub.app/"}]...
|
[{"post_id": 43406, "ts": "202 [{"post_id": 43406, "ts": "2026-08-08T17:05:00Z", "hours": 1.0028, "text": "I made the final dashboard!!! I’m almost done now; I just have to ship, and voilà. I’ve come a long way with this project. Obviously, I’m not done after the next couple of months; I am going to be adding external validation and more pathway enrichment. But those can’t really be counted as coding hours, so this is what I’m shipping. Tbh, I used a bit of AI for help with the Streamlit dashboard because I’m more of a backend guy, although I know a little bit of HTML and CSS."}, {"post_id": 36612, "ts": "2026-07-28T20:38:55Z", "hours": 2.3675, "text": "I started my streamlit dashboard and am gonna start accounting for batch effect in my therapeutic model. Also I generated more plots and started thinking about poster for the Science Fair. Also make sure to check out my github repo in my project i just finished my readme."}, {"post_id": 33094, "ts": "2026-07-22T18:10:16Z", "hours": 4.7242, "text": "holy frick, it’s been a while since I wrote a devlog. Over the last stretch, I accidentally turned my project into a confusing two-layer setup. I eventually realized I had completely messed up the labels and was kind of just assuming things. The dataset actually has four groups: PD, CONTROL, PD(BASELINE), and PD(RASAGILINE). Once that clicked, my brain was fried for a bit. To reset, I went back to basics and rebuilt the model using just the PD and CONTROL samples. I also added a filter so that any samples with steps: no data get removed. Once I cleaned that up and reran everything, the results were insanely good — way more stable and way more believable than before. On the modeling side, I now have a new training loop built around Elastic Net. I basically ran a Hunger Games-style showdown between a bunch of model types, and Elastic Net absolutely dominated. I hooked this into my cross-validation pipeline and started generating a fresh set of SHAP plots so I can actually see which miRNAs are driving the predictions. Next, I’m planning to move from just “cool metrics” to real biological validation. I want to use tools like TargetScan and KEGG pathway analysis to check whether my top miRNA biomarkers line up with known Parkinson’s-related pathways and targets. If the pathways make sense biologically, that’ll be a huge confidence boost that my model isn’t just overfitting. I’m also planning to build a Streamlit dashboard so the whole pipeline is actually usable and demo-able at the science fair in a couple of months. The idea is to have a clean interface where someone can see performance metrics, SHAP plots, key biomarkers, and maybe even pathway summaries without digging through notebooks. On top of that, I want to generate way more diagnostic plots — ROC curves, precision–recall curves, PCA visualizations, SHAP summary plots, and anything else that helps explain what the model is doing. Basically, I’m trying to turn this into a transparent, glass-box pipeline instead of a black-box model. Overall, even though I went through a mini-labels disaster, I feel like I’m in a really good place now. The pipeline is cleaner, the results are stronger, and I actually understand what’s going on under the hood — honestly, I’m doing awesome."}, {"post_id": 20258, "ts": "2026-07-01T20:08:02Z", "hours": 3.6331, "text": "DevLog 4: PD Biomarkers Today was an absolutely massive workday! I spent 2 hours and 31 minutes fixing two layers of data leakage. 🛠️ Bug Fixes & Refactoring Data Leakage Elimination : Previously, CPM normalization and the gene filter were running on the full dataset before the train-test split. Pipeline Consolidation : Fixed this by nesting CPM normalization, gene filtering, and Boruta feature selection inside the cross-validation fold loops. Notebook Cleanup : Consolidated everything into one clean notebook: 03_nested_cv_evaluation.ipynb . 📊 Model Performance (Leak-Free Pipeline) When I ran the leak-free pipeline, Elastic Net blew everything else out of the water: Elastic Net : 0.992 ± 0.010 AUC-ROC Random Forest : 0.962 AUC-ROC XGBoost : 0.938 AUC-ROC 🧪 The Proof (Permutation Testing) To make sure the 0.992 wasn’t a ghost score, I ran a permutation test with shuffled labels. AUC Collapse : Dropped to chance level (0.43 - 0.48). Feature Reduction : Boruta features dropped from 205 down to just 9 per fold. Conclusion : This proves the biological signal is 100% real. Next Steps & Deliverables Batch Effects : Skipped ComBat for now since Phase 1 is just a single cohort. I will check the GEO metadata for internal batch run dates tomorrow. Diagnostic Plots : Wrapped up the day by generating a clean set of plots, including ROC (real vs. shuffled), PCA, and a SHAP plot flagging hsa-mir-23a as the top biomarker."}, {"post_id": 18672, "ts": "2026-06-29T21:15:03Z", "hours": 1.5444, "text": "I finished my README!!! It took a while(not too long though) and it made my repo look professional ig. The preprocessing bug is still up and running so I’ll spend some more time on that. If you wanna see the repo click here: https://github.com/DrivingStork3952"}, {"post_id": 17265, "ts": "2026-06-28T00:00:51Z", "hours": 1.8703, "text": "Very good progress today I added new git files to make the code run smoother ig. Also I used markdown to write a Readme which was fun(this is my first time with all this documentation and stuff). Also when I was migrating from Google colab to vscode i have to change some parts of my notebook and somehow there’s a bug in preprocessing. So tomorrow I’ll be trying to fix that, I’d say it’s a pretty good workday."}, {"post_id": 14129, "ts": "2026-06-23T03:29:23Z", "hours": 1.7958, "text": "DevLog #2 for PD Biomarkers Yesterday XGboost wasnt really working so today I switched to logistic regression and it worked perfectly. My ROC AUC and AP are now pretty solid and I can trust the biomarkers that my model extract. Tomorrow, I’m going to be try to use Random Forest standard instead of XGboost and maybe see if that makes it better. Also, I’m going to focus on documentation readmes all that. As you can see in the PCA Space plot the controls and the patients are split up pretty well and looks clean. I’m also looking into using TargetScan with Kegg Pathway Analysis to Biologically validate my top 14 biomarkers."}, {"post_id": 13498, "ts": "2026-06-22T02:54:08Z", "hours": 1.1031, "text": "Hi! This is my first parkinson’s project devlog. I started this project around 3 months ago, and I knew nothing about machine learning then. In that time, I learnt everything I needed for my project. So far, I have made a decent pipeline to identify biomarkers. I’m using an NCBI GEO Superseries for training, and I was planning on using a Portuguese cohort for extra real-world data tests. Today, when I was comparing whether to use XGBoost or Random Forest, it gave accuracies of 93-95%, but after more tests, I realized that my AUC rn is around 70%. Tomorrow, I’m going to try switching from XGBoost + Boruta feature selection to Logistic Regression to see if my AUC can be brought up to at least 80."}]...
|
Title: PD biomarkers by @arjundakshin | Stardance
Title: PD biomarkers by @arjundakshin | Stardance
Devlogs:
Hi! This is my first parkinson’s project devlog. I started this project around 3 months ago, and I knew nothing about machine learning then. In that time, I learnt everything I needed for my project. So far, I have made a decent pipeline to identify biomarkers. I’m using an NCBI GEO Superseries for training, and I was planning on using a Portuguese cohort for extra real-world data tests. Today, when I was comparing whether to use XGBoost or Random Forest, it gave accuracies of 93-95%, but after more tests, I realized that my AUC rn is around 70%. Tomorrow, I’m going to try switching from XGBoost + Boruta feature selection to Logistic Regression to see if my AUC can be brought up to at least 80.
DevLog #2 for PD Biomarkers Yesterday XGboost wasnt really working so today I switched to logistic regression and it worked perfectly. My ROC AUC and AP are now pretty solid and I can trust the biomarkers that my model extract. Tomorrow, I’m going to be try to use Random Forest standard instead of XGboost and maybe see if that makes it better. Also, I’m going to focus on documentation readmes all that. As you can see in the PCA Space plot the controls and the patients are split up pretty well and looks clean. I’m also looking into using TargetScan with Kegg Pathway Analysis to Biologically validate my top 14 biomarkers.
Very good progress today I added new git files to make the code run smoother ig. Also I used markdown to write a Readme which was fun(this is my first time with all this documentation and stuff). Also when I was migrating from Google colab to vscode i have to change some parts of my notebook and somehow there’s a bug in preprocessing. So tomorrow I’ll be trying to fix that, I’d say it’s a pretty good workday.
I finished my README!!! It took a while(not too long though) and it made my repo look professional ig. The preprocessing bug is still up and running so I’ll spend some more time on that. If you wanna see the repo click here: https://github.com/DrivingStork3952
DevLog 4: PD Biomarkers Today was an absolutely massive workday! I spent 2 hours and 31 minutes fixing two layers of data leakage. 🛠️ Bug Fixes & Refactoring Data Leakage Elimination : Previously, CPM normalization and the gene filter were running on the full dataset before the train-test split. Pipeline Consolidation : Fixed this by nesting CPM normalization, gene filtering, and Boruta feature selection inside the cross-validation fold loops. Notebook Cleanup : Consolidated everything into one clean notebook: 03_nested_cv_evaluation.ipynb . 📊 Model Performance (Leak-Free Pipeline) When I ran the leak-free pipeline, Elastic Net blew everything else out of the water: Elastic Net : 0.992 ± 0.010 AUC-ROC Random Forest : 0.962 AUC-ROC XGBoost : 0.938 AUC-ROC 🧪 The Proof (Permutation Testing) To make sure the 0.992 wasn’t a ghost score, I ran a permutation test with shuffled labels. AUC Collapse : Dropped to chance level (0.43 - 0.48). Feature Reduction : Boruta features dropped from 205 down to just 9 per fold. Conclusion : This proves the biological signal is 100% real. Next Steps & Deliverables Batch Effects : Skipped ComBat for now since Phase 1 is just a single cohort. I will check the GEO metadata for internal batch run dates tomorrow. Diagnostic Plots : Wrapped up the day by generating a clean set of plots, including ROC (real vs. shuffled), PCA, and a SHAP plot flagging hsa-mir-23a as the top biomarker.
holy frick, it’s been a while since I wrote a devlog. Over the last stretch, I accidentally turned my project into a confusing two-layer setup. I eventually realized I had completely messed up the labels and was kind of just assuming things. The dataset actually has four groups: PD, CONTROL, PD(BASELINE), and PD(RASAGILINE). Once that clicked, my brain was fried for a bit. To reset, I went back to basics and rebuilt the model using just the PD and CONTROL samples. I also added a filter so that any samples with steps: no data get removed. Once I cleaned that up and reran everything, the results were insanely good — way more stable and way more believable than before. On the modeling side, I now have a new training loop built around Elastic Net. I basically ran a Hunger Games-style showdown between a bunch of model types, and Elastic Net absolutely dominated. I hooked this into my cross-validation pipeline and started generating a fresh set of SHAP plots so I can actually see which miRNAs are driving the predictions. Next, I’m planning to move from just “cool metrics” to real biological validation. I want to use tools like TargetScan and KEGG pathway analysis to check whether my top miRNA biomarkers line up with known Parkinson’s-related pathways and targets. If the pathways make sense biologically, that’ll be a huge confidence boost that my model isn’t just overfitting. I’m also planning to build a Streamlit dashboard so the whole pipeline is actually usable and demo-able at the science fair in a couple of months. The idea is to have a clean interface where someone can see performance metrics, SHAP plots, key biomarkers, and maybe even pathway summaries without digging through notebooks. On top of that, I want to generate way more diagnostic plots — ROC curves, precision–recall curves, PCA visualizations, SHAP summary plots, and anything else that helps explain what the model is doing. Basically, I’m trying to turn this into a transparent, glass-box pipeline instead of a black-box model. Overall, even though I went through a mini-labels disaster, I feel like I’m in a really good place now. The pipeline is cleaner, the results are stronger, and I actually understand what’s going on under the hood — honestly, I’m doing awesome.
I started my streamlit dashboard and am gonna start accounting for batch effect in my therapeutic model. Also I generated more plots and started thinking about poster for the Science Fair. Also make sure to check out my github repo in my project i just finished my readme.
I made the final dashboard!!! I’m almost done now; I just have to ship, and voilà. I’ve come a long way with this project. Obviously, I’m not done after the next couple of months; I am going to be adding external validation and more pathway enrichment. But those can’t really be counted as coding hours, so this is what I’m shipping. Tbh, I used a bit of AI for help with the Streamlit dashboard because I’m more of a backend guy, although I know a little bit of HTML and CSS.
Ships:
I built a glassbox-mirna, a leak-free xai pipeline and a interactive streamlit web application for early stage Parkinson’s disease biomarker discovery. After I got the biomarker I tested drug response against a drug called rasagaline. Using GSE269781 a serum exosome mirna data I ran a 2 tier architecture with elastic net and random forest models validated via outer-loop monte carlo cross validation. Now that I have all the technical stuff out of the way now its time for the why. To be honest… I don’t know I heard about neurodegenerative diseases in science class and just went with the flow. Most people have emotional crazy stories but for me it was just curiosity. And it worked!! I learned complex ML topics(not the full basis tho i need to still learn) and how to make somehting professional. I did use AI for debugging and for the streamlit application not everything tho and I think it turned out well. I’m submitting this project to the science and engineering fair of metro detroit next year and as a freshman I think i did pretty well. (praying for isef wish me good luck)!...
|
1793256832.9340267
|
1793343232.9340267
|
|
21726
|
Rocket-Simulator by @MrParrot | Stardance
|
MrParrot
|
1
|
15.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T16:28:44Z", "hours": 15.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ROCKET SIMULATOR A python simulator that allows you to design your own rocket by values and simulate it’s take off and fall back down using basic physics. Features build a custom rocket and choose: -rocket weight -fuel mass -rocket diameter -engine thrust -fuel burn rate -payload mass -engine thrust simulates: -gravity -thrust -fuel consumption -air resistance Acceleration velocity altitude bonus: -summery after the flight -and telematry graphs using tinker How It Works The program guides the user through designing a rocket. After entering all rocket parameters, the simulator calculates the flight second-by-second using physics equations. At the end of the simulation, graphs display: Altitude vs Time Acceleration vs Time Fuel Remaining vs Time Requirements Python 3.x Tkinter IMPORTENT: WITHOUT TINKER AND PYTHON.3 THE PROGRAM WILL CRASH Run python rocket_simulator.py Example Build your rocket. Enter launch code ‘1710’. Watch the simulation. Analyze the flight results and graphs. Technologies Python Tkinter Math Author Created by MrParrot814 [Jonathan-Rich] Project Status First major programming project built for Hack Club StarDance. Physics Simulation ✅ Shipped", "repo": "https://github.com/MrParrot814/Rocket-Simulator", "demo": "https://github.com/MrParrot814"}]...
|
[{"post_id": 13599, "ts": "202 [{"post_id": 13599, "ts": "2026-06-22T08:55:50Z", "hours": 14.5031, "text": "first devlog (: already finished it, i am going to ship soon, but it turned out really cool, it shows you graphs real time and it has been a great project (it is a rocket simulator btw) i think The hardest part was getting the physics calculations for fuel consumption right, but once the graphs started updating in real-time, it was all worth!!"}]...
|
Title: Rocket-Simulator by @MrParrot | Stardance
Title: Rocket-Simulator by @MrParrot | Stardance
Devlogs:
first devlog (: already finished it, i am going to ship soon, but it turned out really cool, it shows you graphs real time and it has been a great project (it is a rocket simulator btw) i think The hardest part was getting the physics calculations for fuel consumption right, but once the graphs started updating in real-time, it was all worth!!
Ships:
ROCKET SIMULATOR A python simulator that allows you to design your own rocket by values and simulate it’s take off and fall back down using basic physics. Features build a custom rocket and choose: -rocket weight -fuel mass -rocket diameter -engine thrust -fuel burn rate -payload mass -engine thrust simulates: -gravity -thrust -fuel consumption -air resistance Acceleration velocity altitude bonus: -summery after the flight -and telematry graphs using tinker How It Works The program guides the user through designing a rocket. After entering all rocket parameters, the simulator calculates the flight second-by-second using physics equations. At the end of the simulation, graphs display: Altitude vs Time Acceleration vs Time Fuel Remaining vs Time Requirements Python 3.x Tkinter IMPORTENT: WITHOUT TINKER AND PYTHON.3 THE PROGRAM WILL CRASH Run python rocket_simulator.py Example Build your rocket. Enter launch code ‘1710’. Watch the simulation. Analyze the flight results and graphs. Technologies Python Tkinter Math Author Created by MrParrot814 [Jonathan-Rich] Project Status First major programming project built for Hack Club StarDance. Physics Simulation ✅ Shipped...
|
1793138180.8390715
|
1793224580.8390715
|
|
21733
|
My Musicpad! by @Omelette | Stardance
|
Omelette
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T02:35:08Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a quick hackpad for funzies and because i got burnt out from another project. This is for listening to music, and I also just wanted an excuse to build a hackpad. I learnt how to use cad and work with the kmk library and programmed with circuitpython. I havent built it yet so im hoping to build it IF THE FORM STARTS WORKING /hj. Anyway this was really fun.", "repo": "https://github.com/CubeShifter/Hackpad", "demo": ""}]...
|
[{"post_id": 11716, "ts": "202 [{"post_id": 11716, "ts": "2026-06-19T02:29:55Z", "hours": 3.6506, "text": "So well I essentially did everything in this one sitting. I already had done the schematics before 6 motnhs ago, so i just had to redo and refine the schematics and design. This still took a while, but atleast it is polished and good. The cad was next, I used the dimensions from the circuit and followed the guide, and managed to make the bottom pretty quickly. I also then did the top, which required a bit of math to see where to put the switch and knob holes. I then added in the screw holes and exported it. I then started working on the firmware, which i used kmk for. I first of all imported the library and got a script working, then i used some moduels to get the media stuff and rotary encoder working. Overall solid 0.5/10 process would do again(was actually really fun to build)."}]...
|
Title: My Musicpad! by @Omelette | Stardance
Devl Title: My Musicpad! by @Omelette | Stardance
Devlogs:
So well I essentially did everything in this one sitting. I already had done the schematics before 6 motnhs ago, so i just had to redo and refine the schematics and design. This still took a while, but atleast it is polished and good. The cad was next, I used the dimensions from the circuit and followed the guide, and managed to make the bottom pretty quickly. I also then did the top, which required a bit of math to see where to put the switch and knob holes. I then added in the screw holes and exported it. I then started working on the firmware, which i used kmk for. I first of all imported the library and got a script working, then i used some moduels to get the media stuff and rotary encoder working. Overall solid 0.5/10 process would do again(was actually really fun to build).
Ships:
I made a quick hackpad for funzies and because i got burnt out from another project. This is for listening to music, and I also just wanted an excuse to build a hackpad. I learnt how to use cad and work with the kmk library and programmed with circuitpython. I havent built it yet so im hoping to build it IF THE FORM STARTS WORKING /hj. Anyway this was really fun....
|
1793264047.498498
|
1793350447.498498
|
|
21735
|
DeskInfo by @mbr | Stardance
|
mbr
|
1
|
18.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T14:03:42Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a tool that sits on your desk and gives useful information to the user such as the time or climate. It also can show a joke or a motivational quote. On top of that, if you connect it to Hackatime through its API you can get stats about your last 7 days coding. It was an overall quite challenging as I’m a rookie, but it has helped me to learn and improve my skills. I’m actually quite proud of how it turned out but I know it could have been better.", "repo": "https://github.com/marcbr23/Desk-Dock", "demo": ""}]...
|
[{"post_id": 71118, "ts": "202 [{"post_id": 71118, "ts": "2026-09-20T10:07:40Z", "hours": 7.3481, "text": "Finally finished my project! I know it has small issues, but I believe that it is a solid hardware project. Features: Time Current, tomorrow’s and in two days climate. (Including interior temperature and humidity with the DHT11). Joke Screen Quote Screen Last 7 days coding info with hackatime’s API. (Most worked on project, most used language and total time.)"}, {"post_id": 19307, "ts": "2026-06-30T16:03:12Z", "hours": 6.6283, "text": "I spent too much time trying to solve an issue. Everything worked well until I added a new API. Then, the most important API, the weather one, stopped working, I spent a lot of time tinkering with AI to try to optimize it. It turned out that renewing and changing the API key solved it 😢. But anyways, from errors, we learn. I also changed the potentiometer to change the screen with a joystick. I’m very close to finishing the code so I’ll leave the breakdown of what’s next below. What’s next? Polishing the overall looks. Designing the case to fit the joystick. Getting the joystick screen change to work consistently. Making the UI more attractive."}, {"post_id": 17286, "ts": "2026-06-28T00:30:10Z", "hours": 1.7053, "text": "3D modeling and advancements. Some new advancements on the project, added a news screen to the dock (it works poorly) and started designing a case. The first prototype failed so new adjustments must be made."}, {"post_id": 16345, "ts": "2026-06-26T16:23:31Z", "hours": 2.6006, "text": "First desk dock DevLog This is the first DevLog about my desk dock posted in Stardance. I will explain what features it has as well as what i’ll be trying to do in the future. The project currently uses a potentiometer, a DHT11 and a CYD ESP32. I used a website called Lopaka to generate the more complex graphics. If you have any implementation ideas, please leave them in the comments, thanks. Current features: Main Page with hour and basic weather info. More detailed weather page. Basic 3-day forecast. Page that has a random joke. Future upgrades: Custom 3D printed case. Some more features. General looks polishing."}]...
|
Title: DeskInfo by @mbr | Stardance
Devlogs:
Firs Title: DeskInfo by @mbr | Stardance
Devlogs:
First desk dock DevLog This is the first DevLog about my desk dock posted in Stardance. I will explain what features it has as well as what i’ll be trying to do in the future. The project currently uses a potentiometer, a DHT11 and a CYD ESP32. I used a website called Lopaka to generate the more complex graphics. If you have any implementation ideas, please leave them in the comments, thanks. Current features: Main Page with hour and basic weather info. More detailed weather page. Basic 3-day forecast. Page that has a random joke. Future upgrades: Custom 3D printed case. Some more features. General looks polishing.
3D modeling and advancements. Some new advancements on the project, added a news screen to the dock (it works poorly) and started designing a case. The first prototype failed so new adjustments must be made.
I spent too much time trying to solve an issue. Everything worked well until I added a new API. Then, the most important API, the weather one, stopped working, I spent a lot of time tinkering with AI to try to optimize it. It turned out that renewing and changing the API key solved it 😢. But anyways, from errors, we learn. I also changed the potentiometer to change the screen with a joystick. I’m very close to finishing the code so I’ll leave the breakdown of what’s next below. What’s next? Polishing the overall looks. Designing the case to fit the joystick. Getting the joystick screen change to work consistently. Making the UI more attractive.
Finally finished my project! I know it has small issues, but I believe that it is a solid hardware project. Features: Time Current, tomorrow’s and in two days climate. (Including interior temperature and humidity with the DHT11). Joke Screen Quote Screen Last 7 days coding info with hackatime’s API. (Most worked on project, most used language and total time.)
Ships:
I made a tool that sits on your desk and gives useful information to the user such as the time or climate. It also can show a joke or a motivational quote. On top of that, if you connect it to Hackatime through its API you can get stats about your last 7 days coding. It was an overall quite challenging as I’m a rookie, but it has helped me to learn and improve my skills. I’m actually quite proud of how it turned out but I know it could have been better....
|
1793148669.6267667
|
1793235069.6267667
|
|
21737
|
Jarvis by @Xavier | Stardance
|
|
1
|
70.0
|
234
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T14:57:50Z", "hours": 70.0, "multiplier": 7.79, "payout": 234, "blessing": "neutral", "text": "Hey everyone! I really enjoyed developing this personal assistant. While it has its limitations, its cool to have a group of programmers sharing ideas and cool concepts. This first part will give a small peek into the errors i ran into during development. Development Environment and Python 3.13 Using Python 3 as the foundation for the backend was the simplest part of the project, but certainly not the easiest. Because Python 3.13 is so new, several critical packages lacked prebuilt wheels. I had to manually check GitHub releases and pull pre-release wheels directly from CI artifacts. I pinned these specific versions to maintain stability. When that became unsustainable, I fell back to Python 3.12, utilizing virtual environment isolation for those specific packages. FastAPI and SSE Streaming Streaming LLM tokens over Server-Sent Events (SSE) is not well-documented, and it caused significant friction. The primary challenge was that the LLM returns a standard generator, while FastAPI’s StreamingResponse requires compatibility with async generators; they do not compose cleanly with synchronous LLM clients. My solution was to wrap the DeepSeek client in an async adapter using asyncio.to_thread(). This ensured the blocking API calls did not stall the event loop, allowing me to yield each token as an SSE-formatted string. Stability and Error Handling Under heavy load, I found that DeepSeek could occasionally return 503 errors. To manage this, I implemented an exponential backoff strategy with a maximum of three retries to maintain stability without overloading the service. A major challenge was ensuring that errors were caught before the SSE stream began, preventing the user from receiving a “half-finished” response. Consequently, I only initialize the stream once the connection is confirmed as alive. Voice Integration and Reliability I chose to integrate ElevenLabs for the voice component to provide a more human-like touch. However, API-based voice services introduce their own reliability constraints. To ensure the assistant remains functional even when hitting the ElevenLabs free-tier limits, I implemented a fallback mechanism. If the API fails, the system reverts to basic browser-based Text-to-Speech (TTS)—a less polished experience, but necessary for overall system reliability. Deployment and Connectivity The backend is currently running locally on my PC and exposed via a Cloudflare Tunnel. I ran into a limitation where every restart of the tunnel generates a new URL. I have had to accept this for now, but I am currently looking for a permanent workaround to ensure a consistent connection point. Now - if you have read this far, you probably want to know what i enjoyed about this project. Building up this backend architecture was certainly not an easy task. For some people this would have been a complete bore, and would’ve been a dreaded chore, but I enjoyed the challenge, and learning opportunity of dealing with Python 3.13 challenges. After I ship this project, I will be working more with python backend, potentially with another webapp. Thanks for reading (:", "repo": "https://github.com/runercode/jarvis", "demo": "https://slim-lasting-pavilion-rec.trycloudflare.com"}]...
|
[{"post_id": 28475, "ts": "202 [{"post_id": 28475, "ts": "2026-07-14T18:47:33Z", "hours": 32.8625, "text": "Final Devlog 🤖 Hey everyone! This is my final devlog for this project. I’ve been working on JARVIS every day, and it’s pretty much been all I’ve been doing. It’s been a challenging but rewarding project, and I’ve learned a ton along the way. Here’s a quick summary of some of the biggest technical challenges I ran into. Dual Database Architecture One of the hardest parts was managing two databases at the same time. Every message gets saved twice: SQLite stores the raw chat history, while ChromaDB stores vector embeddings for semantic memory. Every write has to handle the possibility of ChromaDB being unavailable, and every read has to combine recent chat history with similarity based memory retrieval. If either system breaks, JARVIS still works, but it loses its long term memory. Replacing PyTorch with ONNX PyTorch turned out to be a huge problem for deployment. The sentence-transformers package pulls in roughly 1.5GB of CUDA libraries, while most free hosting platforms only provide 512MB of RAM. I switched to ChromaDB’s ONNX embedding runtime instead, which reduced the model to around 30MB. Getting ChromaDB to consistently use ONNX instead of falling back to PyTorch took a lot of configuration, and if the embedding function changes between deployments, the entire vector database has to be rebuilt. Authentication Even though JARVIS is a personal assistant, I still wanted authentication to be done properly. User accounts use bcrypt password hashing, username validation, password validation, duplicate username checks, and identical login error messages to prevent username enumeration. It’s definitely overkill for a project like this, but it was a great learning experience. Overall, this project taught me a lot about AI systems, deployment, databases, authentication, and building software that actually has to work reliably. I’m really happy with how JARVIS turned out, and I’m excited to keep improving it even after this project is over. The boring stuff is all done now."}, {"post_id": 23101, "ts": "2026-07-05T20:55:36Z", "hours": 11.7422, "text": "Hey everyone! From my last dev-log I have a lot to showcase before the final shipment that is impending. I have used Render - a website used for putting live complicated webapps on the internet as a sort of backbone for everyone to access. This will be the main point of access of this project, and the last milestone I hit. I still have a lot to work on past this such as implementing real note taking, as well as a full AI verbal based communication network. After this is finished, I will be moving on to my next project, a game."}, {"post_id": 20102, "ts": "2026-07-01T16:57:27Z", "hours": 25.4867, "text": "Hey everyone! This is my first official dev-log for my project. This project has so-far since been very fruitful, and i have been able to complete many of the milestones i wanted to reach. Keystone goals: Long term data storage (SQLite) SentenceTransformers (local) For language processing Ai retrieval system (retrieving memory for usage) Vector database (for ai retrievall AI reasoning layer(LLM) User layer(web app) System orchistration(Python backend with fastAPI) I have completed all of the integral parts of the project so far, and will continue to optimize and improve the assistant until it is the best it can be. Now that the original milestones have been reached, i wanted to share the next moving of the goal posts: Full account creation which facilitates the storage of all chat history. Full memory acquisition to store previous chats as well as the ability to use google maps, and google business for deep research Research tab to show active research and knowledge acquisition."}]...
|
Title: Jarvis by @Xavier | Stardance
Devlogs:
Hey Title: Jarvis by @Xavier | Stardance
Devlogs:
Hey everyone! This is my first official dev-log for my project. This project has so-far since been very fruitful, and i have been able to complete many of the milestones i wanted to reach. Keystone goals: Long term data storage (SQLite) SentenceTransformers (local) For language processing Ai retrieval system (retrieving memory for usage) Vector database (for ai retrievall AI reasoning layer(LLM) User layer(web app) System orchistration(Python backend with fastAPI) I have completed all of the integral parts of the project so far, and will continue to optimize and improve the assistant until it is the best it can be. Now that the original milestones have been reached, i wanted to share the next moving of the goal posts: Full account creation which facilitates the storage of all chat history. Full memory acquisition to store previous chats as well as the ability to use google maps, and google business for deep research Research tab to show active research and knowledge acquisition.
Hey everyone! From my last dev-log I have a lot to showcase before the final shipment that is impending. I have used Render - a website used for putting live complicated webapps on the internet as a sort of backbone for everyone to access. This will be the main point of access of this project, and the last milestone I hit. I still have a lot to work on past this such as implementing real note taking, as well as a full AI verbal based communication network. After this is finished, I will be moving on to my next project, a game.
Final Devlog 🤖 Hey everyone! This is my final devlog for this project. I’ve been working on JARVIS every day, and it’s pretty much been all I’ve been doing. It’s been a challenging but rewarding project, and I’ve learned a ton along the way. Here’s a quick summary of some of the biggest technical challenges I ran into. Dual Database Architecture One of the hardest parts was managing two databases at the same time. Every message gets saved twice: SQLite stores the raw chat history, while ChromaDB stores vector embeddings for semantic memory. Every write has to handle the possibility of ChromaDB being unavailable, and every read has to combine recent chat history with similarity based memory retrieval. If either system breaks, JARVIS still works, but it loses its long term memory. Replacing PyTorch with ONNX PyTorch turned out to be a huge problem for deployment. The sentence-transformers package pulls in roughly 1.5GB of CUDA libraries, while most free hosting platforms only provide 512MB of RAM. I switched to ChromaDB’s ONNX embedding runtime instead, which reduced the model to around 30MB. Getting ChromaDB to consistently use ONNX instead of falling back to PyTorch took a lot of configuration, and if the embedding function changes between deployments, the entire vector database has to be rebuilt. Authentication Even though JARVIS is a personal assistant, I still wanted authentication to be done properly. User accounts use bcrypt password hashing, username validation, password validation, duplicate username checks, and identical login error messages to prevent username enumeration. It’s definitely overkill for a project like this, but it was a great learning experience. Overall, this project taught me a lot about AI systems, deployment, databases, authentication, and building software that actually has to work reliably. I’m really happy with how JARVIS turned out, and I’m excited to keep improving it even after this project is over. The boring stuff is all done now.
Ships:
Hey everyone! I really enjoyed developing this personal assistant. While it has its limitations, its cool to have a group of programmers sharing ideas and cool concepts. This first part will give a small peek into the errors i ran into during development. Development Environment and Python 3.13 Using Python 3 as the foundation for the backend was the simplest part of the project, but certainly not the easiest. Because Python 3.13 is so new, several critical packages lacked prebuilt wheels. I had to manually check GitHub releases and pull pre-release wheels directly from CI artifacts. I pinned these specific versions to maintain stability. When that became unsustainable, I fell back to Python 3.12, utilizing virtual environment isolation for those specific packages. FastAPI and SSE Streaming Streaming LLM tokens over Server-Sent Events (SSE) is not well-documented, and it caused significant friction. The primary challenge was that the LLM returns a standard generator, while FastAPI’s StreamingResponse requires compatibility with async generators; they do not compose cleanly with synchronous LLM clients. My solution was to wrap the DeepSeek client in an async adapter using asyncio.to_thread(). This ensured the blocking API calls did not stall the event loop, allowing me to yield each token as an SSE-formatted string. Stability and Error Handling Under heavy load, I found that DeepSeek could occasionally return 503 errors. To manage this, I implemented an exponential backoff strategy with a maximum of three retries to maintain stability without overloading the service. A major challenge was ensuring that errors were caught before the SSE stream began, preventing the user from receiving a “half-finished” response. Consequently, I only initialize the stream once the connection is confirmed as alive. Voice Integration and Reliability I chose to integrate ElevenLabs for the voice component to provide a more human-like touch. However, API-based voice services introduce their own reliability constraints. To ensure the assistant remains functional even when hitting the ElevenLabs free-tier limits, I implemented a fallback mechanism. If the API fails, the system reverts to basic browser-based Text-to-Speech (TTS)—a less polished experience, but necessary for overall system reliability. Deployment and Connectivity The backend is currently running locally on my PC and exposed via a Cloudflare Tunnel. I ran into a limitation where every restart of the tunnel generates a new URL. I have had to accept this for now, but I am currently looking for a permanent workaround to ensure a consistent connection point. Now - if you have read this far, you probably want to know what i enjoyed about this project. Building up this backend architecture was certainly not an easy task. For some people this would have been a complete bore, and would’ve been a dreaded chore, but I enjoyed the challenge, and learning opportunity of dealing with Python 3.13 challenges. After I ship this project, I will be working more with python backend, potentially with another webapp. Thanks for reading (:...
|
1793289065.3349733
|
1793375465.3349733
|
|
21740
|
Cosmic Bounce by @kk_vun | Stardance
|
kk_vun
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T20:58:50Z", "hours": 1.0, "multiplier": 1.19, "payout": 1, "blessing": "neutral", "text": "I made a flappy bird clone but you are a star with fuel", "repo": "https://github.com/kkv-lang/cosmic-bounce", "demo": "https://kkv-lang.github.io/cosmic-bounce/"}]...
|
[{"post_id": 11445, "ts": "202 [{"post_id": 11445, "ts": "2026-06-18T18:30:36Z", "hours": 0.5228, "text": "Finished the core features for Cosmic Bounce! What I did:Built the layout using HTML and styled the space canvas background with CSS.Wrote the game logic in JavaScript, including gravity physics so the star falls.Added features like player lives, XP, an energy fuel gauge, and custom sound effects for jumping and collecting items.Next steps: Testing the game loop and polishing the mechanics!"}]...
|
Title: Cosmic Bounce by @kk_vun | Stardance
Devlo Title: Cosmic Bounce by @kk_vun | Stardance
Devlogs:
Finished the core features for Cosmic Bounce! What I did:Built the layout using HTML and styled the space canvas background with CSS.Wrote the game logic in JavaScript, including gravity physics so the star falls.Added features like player lives, XP, an energy fuel gauge, and custom sound effects for jumping and collecting items.Next steps: Testing the game loop and polishing the mechanics!
Ships:
I made a flappy bird clone but you are a star with fuel...
|
1793220747.0923817
|
1793307147.0923817
|
|
21743
|
Flora by @aahil | Stardance
|
aahil
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T16:58:39Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "2 Key, and rotary encoder, and a custom 3d logo. (I am scared the switches wont fit onto the plate, but ill just sand it down until i can fit it in, not a clean look, but still good enough.)", "repo": "https://github.com/aahvl/flora", "demo": ""}]...
|
[{"post_id": 11380, "ts": "202 [{"post_id": 11380, "ts": "2026-06-18T16:57:13Z", "hours": 8.2283, "text": "This was a previous ship, but I essentially made a whole macropad, with a faceplate, 2 switches, and a rotary encoder."}]...
|
Title: Flora by @aahil | Stardance
Devlogs:
This Title: Flora by @aahil | Stardance
Devlogs:
This was a previous ship, but I essentially made a whole macropad, with a faceplate, 2 switches, and a rotary encoder.
Ships:
2 Key, and rotary encoder, and a custom 3d logo. (I am scared the switches wont fit onto the plate, but ill just sand it down until i can fit it in, not a clean look, but still good enough.)...
|
1793292518.6974
|
1793378918.6974
|
|
21751
|
DawnedEDUWeb by @aamir_pa2009 | Stardance
|
aamir_pa2009
|
1
|
1.28
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T13:45:14Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Dawned Edu OS its meant to show a sunrise as a new beginning and help with studying and making good habits.", "repo": "https://github.com/AamirKPathan/dawnedEDUWeb", "demo": "https://aamirkpathan.github.io/dawnedEDUWeb/"}]...
|
[{"post_id": 20760, "ts": "202 [{"post_id": 20760, "ts": "2026-07-02T13:39:17Z", "hours": 0.2786, "text": "I pinpointed the issue with the spotify login not working, turns out i need premium, and need a backend, so ill probably work on that later."}, {"post_id": 19177, "ts": "2026-06-30T13:15:04Z", "hours": 0.4647, "text": "Just finished my calendar app and added Google as well, finished some style bugs as well."}, {"post_id": 18879, "ts": "2026-06-30T02:20:08Z", "hours": 0.3372, "text": "Finished The Scripting Added Some Apps and i also finished styling. Just debugging and im gonna add an interactable calendar I also have to move the icons from teh taskbar to the main screen."}, {"post_id": 18858, "ts": "2026-06-30T01:53:08Z", "hours": 0.2714, "text": "Just got the HTML done on this gonna work on the CSS next."}]...
|
Title: DawnedEDUWeb by @aamir_pa2009 | Stardance
Title: DawnedEDUWeb by @aamir_pa2009 | Stardance
Devlogs:
Just got the HTML done on this gonna work on the CSS next.
Finished The Scripting Added Some Apps and i also finished styling. Just debugging and im gonna add an interactable calendar I also have to move the icons from teh taskbar to the main screen.
Just finished my calendar app and added Google as well, finished some style bugs as well.
I pinpointed the issue with the spotify login not working, turns out i need premium, and need a backend, so ill probably work on that later.
Ships:
I made Dawned Edu OS its meant to show a sunrise as a new beginning and help with studying and making good habits....
|
1793282135.3869872
|
1793368535.3869872
|
|
21768
|
Hacky by @emmanuell | Stardance
|
emmanuell
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T13:12:53Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A custom mechanical macropad built on the Seeed XIAO RP2040, running QMK/VIA firmware.", "repo": "https://github.com/hacker9335/hacky", "demo": ""}]...
|
[{"post_id": 12012, "ts": "202 [{"post_id": 12012, "ts": "2026-06-19T16:28:16Z", "hours": 0.4033, "text": "uhm dun w everytng irdk how all this wrks so like jus posting this to like ship it"}]...
|
Title: Hacky by @emmanuell | Stardance
Devlogs:
u Title: Hacky by @emmanuell | Stardance
Devlogs:
uhm dun w everytng irdk how all this wrks so like jus posting this to like ship it
Ships:
A custom mechanical macropad built on the Seeed XIAO RP2040, running QMK/VIA firmware....
|
1793278425.8630283
|
1793364825.8630283
|
|
21769
|
The Fantasy Game by @David01966 | Stardance
|
David01966
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-14T10:18:10Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’m making a fantasy dungeonfight rpg game", "repo": "https://github.com/dave01966/the-fantasy-game", "demo": "https://github.com/dave01966/the-fantasy-game/blob/main/main.py"}]...
|
[{"post_id": 28193, "ts": "202 [{"post_id": 28193, "ts": "2026-07-14T10:15:06Z", "hours": 1.9767, "text": "I made some bugfix and added the bow"}, {"post_id": 27560, "ts": "2026-07-13T07:47:26Z", "hours": 3.72, "text": "I builded the first stage and some enmy"}]...
|
Title: The Fantasy Game by @David01966 | Stardance Title: The Fantasy Game by @David01966 | Stardance
Devlogs:
I builded the first stage and some enmy
I made some bugfix and added the bow
Ships:
I’m making a fantasy dungeonfight rpg game...
|
1793130626.739419
|
1793217026.739419
|
|
21770
|
Lumiina by @ANNAHAKI | Stardance
|
ANNAHAKI
|
1
|
4.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T02:47:29Z", "hours": 4.0, "multiplier": 5.0, "payout": 9, "blessing": "neutral", "text": "A BPM MEDITOR WITH CUTE FACES JSJSJS it have like heart noices with a buzzer and it have faces and it reacts to your bpm", "repo": "https://github.com/annaastrs-svg/LUMINAA", "demo": ""}]...
|
[{"post_id": 11661, "ts": "202 [{"post_id": 11661, "ts": "2026-06-19T00:21:25Z", "hours": 0.9986, "text": "i made a pag abput the project and heres a video of it :B https://youtu.be/XRaQxctSIe8?si=IDjz4JvpLNoWaPJm"}, {"post_id": 11449, "ts": "2026-06-18T18:35:01Z", "hours": 2.5514, "text": "I made a BPM mediator with a MAX module an OLED and a ESP32 :B The oled uses I2C and 0x3, SDA uses pin 21 and SCK pin 22, lumin reacts with your bpm depending on it :P"}]...
|
Title: Lumiina by @ANNAHAKI | Stardance
Devlogs:
Title: Lumiina by @ANNAHAKI | Stardance
Devlogs:
I made a BPM mediator with a MAX module an OLED and a ESP32 :B The oled uses I2C and 0x3, SDA uses pin 21 and SCK pin 22, lumin reacts with your bpm depending on it :P
i made a pag abput the project and heres a video of it :B https://youtu.be/XRaQxctSIe8?si=IDjz4JvpLNoWaPJm
Ships:
A BPM MEDITOR WITH CUTE FACES JSJSJS it have like heart noices with a buzzer and it have faces and it reacts to your bpm...
|
1793202477.0805225
|
1793288877.0805225
|
|
21774
|
Father's Day Gift by @amaranthine | Stardance
|
amaranthine
|
1
|
4.0
|
32
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T03:42:11Z", "hours": 4.0, "multiplier": 7.87, "payout": 32, "blessing": "neutral", "text": "made a small interactive father’s day gift for my dad!! It’s a cozy isometric bedroom where someone can click on objects and they reveal personal notes tied to real memories. The hardest part was honestly getting the positioning of objects right bc percentages are kinda weird when css contain feature adds invisible letterboxing and throws off all the coords really proud of the consistent theme and the end result given how close it is to father’s day! to test it: open the site, click the “click here!” button, then click any object in the room (teddy bear, plant, clock, computer, canvas, tea mug, blanket, window, pens, or the photos on the wall). each one has a diff note !!", "repo": "https://github.com/amaranthine0/FathersDayGift", "demo": "https://fathers-day-gift-tawny.vercel.app/"}]...
|
[{"post_id": 12888, "ts": "202 [{"post_id": 12888, "ts": "2026-06-21T03:32:24Z", "hours": 4.0725, "text": "I kinda forgot about father’s day since my summer was so packed, so I decided to lock in tonight to make him something cute and small. Basically, I made web app that allows my dad to look through my room for objects that carry my memories (did not draw the bedroom- found it online) and basically click on it to get small cute notes! Features: click objects to get notes heart cursor purple theme!!!! hovering over hearts on main page makes them spin Most of the time I spent was just for locating where each object was and making it work for all of them, but it was fun! Demo link: https://fathers-day-gift-tawny.vercel.app/"}]...
|
Title: Father's Day Gift by @amaranthine | Sta Title: Father's Day Gift by @amaranthine | Stardance
Devlogs:
I kinda forgot about father’s day since my summer was so packed, so I decided to lock in tonight to make him something cute and small. Basically, I made web app that allows my dad to look through my room for objects that carry my memories (did not draw the bedroom- found it online) and basically click on it to get small cute notes! Features: click objects to get notes heart cursor purple theme!!!! hovering over hearts on main page makes them spin Most of the time I spent was just for locating where each object was and making it work for all of them, but it was fun! Demo link: https://fathers-day-gift-tawny.vercel.app/
Ships:
made a small interactive father’s day gift for my dad!! It’s a cozy isometric bedroom where someone can click on objects and they reveal personal notes tied to real memories. The hardest part was honestly getting the positioning of objects right bc percentages are kinda weird when css contain feature adds invisible letterboxing and throws off all the coords really proud of the consistent theme and the end result given how close it is to father’s day! to test it: open the site, click the “click here!” button, then click any object in the room (teddy bear, plant, clock, computer, canvas, tea mug, blanket, window, pens, or the photos on the wall). each one has a diff note !!...
|
1793220623.9729092
|
1793307023.9729092
|
|
21779
|
BatFlash by @aahil | Stardance
|
aahil
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T14:10:45Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Heyo! I made a Batman batarang that lights up and fits in a case!", "repo": "https://github.com/aahvl/BatFlash", "demo": ""}]...
|
[{"post_id": 11384, "ts": "202 [{"post_id": 11384, "ts": "2026-06-18T17:02:44Z", "hours": 1.1061, "text": "Made the PCB and the Case for it."}]...
|
Title: BatFlash by @aahil | Stardance
Devlogs:
Ma Title: BatFlash by @aahil | Stardance
Devlogs:
Made the PCB and the Case for it.
Ships:
Heyo! I made a Batman batarang that lights up and fits in a case!...
|
1793278319.1310248
|
1793364719.1310248
|
|
21783
|
Portfolio by @mbr | Stardance
|
mbr
|
1
|
9.0
|
113
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T12:48:50Z", "hours": 9.0, "multiplier": 12.02, "payout": 113, "blessing": "neutral", "text": "For my first shipped project I created my personal web portfolio. I added three pages, an “about me” page, a “projects” page and the main one, that brings you to the other two. I’m relatively proud of how it turned out because my HTML and CSS skills weren’t very good. I hope I am able to keep it updated and that this project acts as a starting point for my dev career.", "repo": "https://github.com/marcbr23/marcbr23.github.io", "demo": "https://marcbr23.github.io/"}]...
|
[{"post_id": 15029, "ts": "202 [{"post_id": 15029, "ts": "2026-06-24T12:36:15Z", "hours": 0.8411, "text": "Final adjustments before shipping. I corrected some issues with the file paths and the fonts. The website is ready to ship."}, {"post_id": 14975, "ts": "2026-06-24T09:58:51Z", "hours": 4.4319, "text": "Just completed my web portfolio! Obviously, it should be constantly updated, but the initial version is complete. I finished the projects page and made it (more or less) usable for other devices. What’s new breakdown: Completed the projects page. Made it usable for different devices. What’s next: Shipping! Polish the code Periodical updates"}, {"post_id": 13802, "ts": "2026-06-22T16:57:26Z", "hours": 3.5508, "text": "First Cool Advancements I have finished the main page of my web portfolio (for now!). The main page is divided in two sides that bring you to a “project showcase” page and to an “About Me” page. The “About Me” page is also quite complete. What’s new breakdown: Added hover animations on different elements. Polished the overall look. About me page. What’s next: Making the website usable for different devices. Making the “projects page”"}, {"post_id": 12511, "ts": "2026-06-20T13:06:54Z", "hours": 0.665, "text": "I have started developing my web portfolio."}]...
|
Title: Portfolio by @mbr | Stardance
Devlogs:
I h Title: Portfolio by @mbr | Stardance
Devlogs:
I have started developing my web portfolio.
First Cool Advancements I have finished the main page of my web portfolio (for now!). The main page is divided in two sides that bring you to a “project showcase” page and to an “About Me” page. The “About Me” page is also quite complete. What’s new breakdown: Added hover animations on different elements. Polished the overall look. About me page. What’s next: Making the website usable for different devices. Making the “projects page”
Just completed my web portfolio! Obviously, it should be constantly updated, but the initial version is complete. I finished the projects page and made it (more or less) usable for other devices. What’s new breakdown: Completed the projects page. Made it usable for different devices. What’s next: Shipping! Polish the code Periodical updates
Final adjustments before shipping. I corrected some issues with the file paths and the fonts. The website is ready to ship.
Ships:
For my first shipped project I created my personal web portfolio. I added three pages, an “about me” page, a “projects” page and the main one, that brings you to the other two. I’m relatively proud of how it turned out because my HTML and CSS skills weren’t very good. I hope I am able to keep it updated and that this project acts as a starting point for my dev career....
|
1793141332.873428
|
1793227732.873428
|
|
21786
|
My first slack bot! by @Abdulatif | Stardance
|
Abdulatif
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T11:52:51Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hi, I made a Slack bot for the first time, I even did not know that Slack exists, but with this project I stepped into it. Most challenging part was hosting, but yeah i made it until the end, otherwise I would not be writing this :) I am proud of my project even if it is small and just command but, because it is my first project.", "repo": "https://github.com/Botirsherov/As-cool-bot", "demo": "https://youtu.be/Me9OcB4Q7u4"}]...
|
[{"post_id": 16232, "ts": "202 [{"post_id": 16232, "ts": "2026-06-26T11:31:59Z", "hours": 0.4733, "text": "I created my first project here and it is working. I created Slack bot that runs 24/7. You can try it by As-cool-bot"}]...
|
Title: My first slack bot! by @Abdulatif | Stardan Title: My first slack bot! by @Abdulatif | Stardance
Devlogs:
I created my first project here and it is working. I created Slack bot that runs 24/7. You can try it by As-cool-bot
Ships:
Hi, I made a Slack bot for the first time, I even did not know that Slack exists, but with this project I stepped into it. Most challenging part was hosting, but yeah i made it until the end, otherwise I would not be writing this :) I am proud of my project even if it is small and just command but, because it is my first project....
|
1793130671.5889
|
1793217071.5889
|
|
21797
|
Kursal by @koschi | Stardance
|
koschi
|
1
|
110.0
|
1954
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T15:56:24Z", "hours": 110.0, "multiplier": 17.9, "payout": 1954, "blessing": "neutral", "text": "Hey, I made an introduction video for my friend’s project Kursal, a decentralized messaging app with end-to-end post-quantum encryption. 100% of the visuals were made by myself in Blender, and the sound editing in DaVinci Resolve. No AI were used in the making process of this video. The goal of the video was to showcase the project to the world, and giving it a bit more visibility, even though I honestly just wanted to do it for fun ngl :) Btw they are a few references throughout the video. For exemple the first scene was directly inspired by the movie Tron Legacy’s intro lmao.", "repo": "https://github.com/KursalChat/assets", "demo": "https://www.youtube.com/watch?v=Jhyxh1NrVjo"}]...
|
[{"post_id": 61103, "ts": "202 [{"post_id": 61103, "ts": "2026-09-03T20:32:43Z", "hours": 7.3403, "text": "Well I realized that Stardance doesn’t allow for soundtracks so the video stays muted and you can’t hear the sound effects and everything, which kinda sucks. But anyway I finished the project, the sound editing and added the credit scene at the end for all the sound effects, the musics, the Macbook 3d model and the SVG icons. However the video is 200 MB so that won’t fit in a github description… nor in here. So I’ll have to compress it heavily which will affect the video quality."}, {"post_id": 46828, "ts": "2026-08-14T10:59:01Z", "hours": 3.3008, "text": "Okay sorry for the delay, I had some issues with lapse as it seemed to have somewhat disconnected from my hackatime so it wouldn’t let me select a project to link the lapses to. But I just found out I can just type the name of this project, and even though it says it will create a new folder for that project, it still links to the actual Kursal file. But anyway, enough with that, I started reworking the audio for the 1st scene of the video, this time using royalty free music and sound effect (sadly we had to replace the nintendo switch sound effect to avoid any possible lawsuit lol) and of course all of the artists will be credited at the end of the video. Now I just have to find out what to do for the next scene…"}, {"post_id": 43407, "ts": "2026-08-08T17:05:37Z", "hours": 3.8506, "text": "FINALLY !!! The animation is done, I just finished linking the last two parts with a clean animation and now we just have to render everything and edit it in adobe or Da Vinci with some sound effects and everything and that’s it. Well that makes it seem like it’ll be a fast and easy process but I’m pretty sure it’d be the complete opposite idk why…"}, {"post_id": 42834, "ts": "2026-08-07T19:34:25Z", "hours": 3.9378, "text": "I fixed that last part and started animating the final scene of the whole video, there isn’t much to say about it as there also isn’t much to show, but I will have to include the credits after that, once the video is completely done, including the sound design and everything. Btw I still need to make a proper transition between this and the previous shot, but I’ll do that tomorrow I think."}, {"post_id": 42280, "ts": "2026-08-06T22:16:16Z", "hours": 4.9142, "text": "ok so about that tutorial, well it turned out to be for after effects, not blender, so that sucks. But anyway, I still tried doing it myself, it doesn’t look as good but it’s fine. Don’t worry about the timings, that part was kinda rushed ngl, this is just a proof of concept after all."}, {"post_id": 41506, "ts": "2026-08-05T19:12:05Z", "hours": 11.215, "text": "Managed to show off Kursal’s many color themes. At first I tried using curves and array modifiers to make the laptops move along a bezier curve but sadly because of the way the Macbook’s 3d model has been made, that was pretty hard and even then it was too hard to coordinate its movement with the Kursal screens they were suppose to show, so I had to scrap that idea. Instead, I just duplicated them over 5 layers twice and extended them on the side while the camera zoomed out. Now you might think the camera movement is a bit weird and stuff but don’t worry we’ve got an idea in mind with sound effects, nw. Finally this is just half of the work, as those were only the Dark mode color palets, so I’ll have to do the same with white mode and somehow make a cool animation with a switch that goes from night no day ,or the opposite I don’t really know yet but I remember having seen a tutorial for that in my youtube recommendations a while ago so we’ll see."}, {"post_id": 40414, "ts": "2026-08-03T21:56:11Z", "hours": 4.6669, "text": "fixed the camera movement for that last part and added a few things to make the scene look less empty. And I re-rendered previous scenes to put them all together in order to get an idea of what the whole things looked like. I had to fix some minor stuff like transitions and glitched animations. However I noticed that the last part is way too fast and you can’t read the text so I’ll have to fix that next."}, {"post_id": 39670, "ts": "2026-08-02T19:59:44Z", "hours": 5.5339, "text": "Okay so I remade that last part to get rid of some of some of the animations glitches, it might not be as nice as I envisioned but it is definitely cleaner than my first attempt. Though I think I might have a few tweaks to do concerning the animation’s speed. But that’s it for now."}, {"post_id": 39075, "ts": "2026-08-01T19:21:28Z", "hours": 8.0881, "text": "I hate Blender, I just spent 8 hours straight without break fixing shit Blender messed up, and it’s still not done yet. For some reason it doesn’t want to see the laptop as a single object made up of different pieces, but rather a random arrangement of stuff which cannot move together as one, so rotating it means that half of the components will spin in one direction while the second half will spin in the other. Furthermore for some reason some parts have a habit of straight up vanishing towards outer space, which really doesn’t help with the process. But anyway I still manage to animate the first 3 seconds as I envisioned and the rest is, well… to optimize in the future… But one good news at least is that we’re getting very close to the end. Oh actually no I forgot we still have video editing and sound design to do after that."}, {"post_id": 38339, "ts": "2026-07-31T17:47:50Z", "hours": 5.9503, "text": "Just finished animating a transition between part 2 and part 3, got to play with blender’s geometry nodes a bit but I did need a quick tutorial for that last part ngl"}, {"post_id": 37749, "ts": "2026-07-30T17:40:01Z", "hours": 5.3486, "text": "After some thinking I finally figured out what I’m going to do next, hopefully what will be the last part of the video. For now I replaced the chat instances with actual ones and not just exact copies, and animated the central server to die out once everyone connects together through a decentralized network."}, {"post_id": 36470, "ts": "2026-07-28T16:35:58Z", "hours": 5.8214, "text": "Finally done with the decentralized network animation, which might be the hardest part in the whole introduction video. The connections are a bit weird since a majority of those animations play at the exact same time at the end but I just have to move the keyframes accordingly to what I want so I guess that’s an easy fix no worries."}, {"post_id": 35859, "ts": "2026-07-27T15:57:08Z", "hours": 2.8839, "text": "probably gonna stop here for today so here’s the latest result, good enough for me but probably need a few tweaks either way."}, {"post_id": 35756, "ts": "2026-07-27T12:15:23Z", "hours": 2.1503, "text": "just spent two and a half hours trying to make a single object glowy because every tutorial out there was outdated or made everything glowy even the 2 windows. Why is Blender so complicated I swear."}, {"post_id": 35411, "ts": "2026-07-26T19:53:52Z", "hours": 10.0172, "text": "daaaaamn that was atrocious but here’s the chatting demo section finally fully animated (for now at least…). Special thanks to that indian guy on youtube for the text’s typewriting animation tutorial lmao. Oh btw sorry but I was too lazy to render a proper gooq quality video this is 720p using low render setting, and I just noticed I forgot to get rid of the bar at the beginning but eh whatever who here cares anyway…"}, {"post_id": 24666, "ts": "2026-07-08T12:22:45Z", "hours": 4.3403, "text": "Finally after 6 hours of rendering, we’ve got it. Yeah we brainstormed a bit more and finally found ideas for what we would do next in the video, so we’re doing a demo of 2 instances connecting to each other. Not finished tho, we still need them actually making contact and sending messages, and sound editing it all together, and then scene 2 will be finished."}, {"post_id": 22361, "ts": "2026-07-04T19:55:31Z", "hours": 2.0503, "text": "Rendered all actual scenes I made in Blender together, and put some sound effects in (a bit randomly ngl) using Da Vinci Resolve (if my dumb ahh can’t do video editiong at least I can try sound design… I think). On that point there are some adjustments to make on the sound effects as we do NOT wish to get a cease and desist from Nintendo before the project even gets published in the first place…"}, {"post_id": 20979, "ts": "2026-07-02T18:33:39Z", "hours": 2.2333, "text": "Because of my sheer incompetence in using Da Vinci Resolve, I decided I might be better off sticking with Blender, so I remade that last part in 3d, no sounds yet, but at least that took like half the time I needed to do the same in da vinci resolve. Gotta say, I’m still not happy with how it turned out rn, but I’ll fix it later nw."}, {"post_id": 19974, "ts": "2026-07-01T13:21:22Z", "hours": 7.3172, "text": "Started doing some stuff in Da Vinci Resolve like adding Texts and sounds, has a few Fusion issues to fix which was a nightmare but for now I have a proof of concept if you will, it’s nowhere near clean enough rn but it’s like a draft."}, {"post_id": 13315, "ts": "2026-06-21T20:07:17Z", "hours": 9.4397, "text": "Sketched out the Kursal introduction video script (kinda) and animated the v1 of the first part using Blender 2D animation tool, even though it’s supposed to be used by 2D artists to animate their drawings, but somehow it still works quite well so whatever ig."}]...
|
Title: Kursal by @koschi | Stardance
Devlogs:
Ske Title: Kursal by @koschi | Stardance
Devlogs:
Sketched out the Kursal introduction video script (kinda) and animated the v1 of the first part using Blender 2D animation tool, even though it’s supposed to be used by 2D artists to animate their drawings, but somehow it still works quite well so whatever ig.
Started doing some stuff in Da Vinci Resolve like adding Texts and sounds, has a few Fusion issues to fix which was a nightmare but for now I have a proof of concept if you will, it’s nowhere near clean enough rn but it’s like a draft.
Because of my sheer incompetence in using Da Vinci Resolve, I decided I might be better off sticking with Blender, so I remade that last part in 3d, no sounds yet, but at least that took like half the time I needed to do the same in da vinci resolve. Gotta say, I’m still not happy with how it turned out rn, but I’ll fix it later nw.
Rendered all actual scenes I made in Blender together, and put some sound effects in (a bit randomly ngl) using Da Vinci Resolve (if my dumb ahh can’t do video editiong at least I can try sound design… I think). On that point there are some adjustments to make on the sound effects as we do NOT wish to get a cease and desist from Nintendo before the project even gets published in the first place…
Finally after 6 hours of rendering, we’ve got it. Yeah we brainstormed a bit more and finally found ideas for what we would do next in the video, so we’re doing a demo of 2 instances connecting to each other. Not finished tho, we still need them actually making contact and sending messages, and sound editing it all together, and then scene 2 will be finished.
daaaaamn that was atrocious but here’s the chatting demo section finally fully animated (for now at least…). Special thanks to that indian guy on youtube for the text’s typewriting animation tutorial lmao. Oh btw sorry but I was too lazy to render a proper gooq quality video this is 720p using low render setting, and I just noticed I forgot to get rid of the bar at the beginning but eh whatever who here cares anyway…
just spent two and a half hours trying to make a single object glowy because every tutorial out there was outdated or made everything glowy even the 2 windows. Why is Blender so complicated I swear.
probably gonna stop here for today so here’s the latest result, good enough for me but probably need a few tweaks either way.
Finally done with the decentralized network animation, which might be the hardest part in the whole introduction video. The connections are a bit weird since a majority of those animations play at the exact same time at the end but I just have to move the keyframes accordingly to what I want so I guess that’s an easy fix no worries.
After some thinking I finally figured out what I’m going to do next, hopefully what will be the last part of the video. For now I replaced the chat instances with actual ones and not just exact copies, and animated the central server to die out once everyone connects together through a decentralized network.
Just finished animating a transition between part 2 and part 3, got to play with blender’s geometry nodes a bit but I did need a quick tutorial for that last part ngl
I hate Blender, I just spent 8 hours straight without break fixing shit Blender messed up, and it’s still not done yet. For some reason it doesn’t want to see the laptop as a single object made up of different pieces, but rather a random arrangement of stuff which cannot move together as one, so rotating it means that half of the components will spin in one direction while the second half will spin in the other. Furthermore for some reason some parts have a habit of straight up vanishing towards outer space, which really doesn’t help with the process. But anyway I still manage to animate the first 3 seconds as I envisioned and the rest is, well… to optimize in the future… But one good news at least is that we’re getting very close to the end. Oh actually no I forgot we still have video editing and sound design to do after that.
Okay so I remade that last part to get rid of some of some of the animations glitches, it might not be as nice as I envisioned but it is definitely cleaner than my first attempt. Though I think I might have a few tweaks to do concerning the animation’s speed. But that’s it for now.
fixed the camera movement for that last part and added a few things to make the scene look less empty. And I re-rendered previous scenes to put them all together in order to get an idea of what the whole things looked like. I had to fix some minor stuff like transitions and glitched animations. However I noticed that the last part is way too fast and you can’t read the text so I’ll have to fix that next.
Managed to show off Kursal’s many color themes. At first I tried using curves and array modifiers to make the laptops move along a bezier curve but sadly because of the way the Macbook’s 3d model has been made, that was pretty hard and even then it was too hard to coordinate its movement with the Kursal screens they were suppose to show, so I had to scrap that idea. Instead, I just duplicated them over 5 layers twice and extended them on the side while the camera zoomed out. Now you might think the camera movement is a bit weird and stuff but don’t worry we’ve got an idea in mind with sound effects, nw. Finally this is just half of the work, as those were only the Dark mode color palets, so I’ll have to do the same with white mode and somehow make a cool animation with a switch that goes from night no day ,or the opposite I don’t really know yet but I remember having seen a tutorial for that in my youtube recommendations a while ago so we’ll see.
ok so about that tutorial, well it turned out to be for after effects, not blender, so that sucks. But anyway, I still tried doing it myself, it doesn’t look as good but it’s fine. Don’t worry about the timings, that part was kinda rushed ngl, this is just a proof of concept after all.
I fixed that last part and started animating the final scene of the whole video, there isn’t much to say about it as there also isn’t much to show, but I will have to include the credits after that, once the video is completely done, including the sound design and everything. Btw I still need to make a proper transition between this and the previous shot, but I’ll do that tomorrow I think.
FINALLY !!! The animation is done, I just finished linking the last two parts with a clean animation and now we just have to render everything and edit it in adobe or Da Vinci with some sound effects and everything and that’s it. Well that makes it seem like it’ll be a fast and easy process but I’m pretty sure it’d be the complete opposite idk why…
Okay sorry for the delay, I had some issues with lapse as it seemed to have somewhat disconnected from my hackatime so it wouldn’t let me select a project to link the lapses to. But I just found out I can just type the name of this project, and even though it says it will create a new folder for that project, it still links to the actual Kursal file. But anyway, enough with that, I started reworking the audio for the 1st scene of the video, this time using royalty free music and sound effect (sadly we had to replace the nintendo switch sound effect to avoid any possible lawsuit lol) and of course all of the artists will be credited at the end of the video. Now I just have to find out what to do for the next scene…
Well I realized that Stardance doesn’t allow for soundtracks so the video stays muted and you can’t hear the sound effects and everything, which kinda sucks. But anyway I finished the project, the sound editing and added the credit scene at the end for all the sound effects, the musics, the Macbook 3d model and the SVG icons. However the video is 200 MB so that won’t fit in a github description… nor in here. So I’ll have to compress it heavily which will affect the video quality.
Ships:
Hey, I made an introduction video for my friend’s project Kursal, a decentralized messaging app with end-to-end post-quantum encryption. 100% of the visuals were made by myself in Blender, and the sound editing in DaVinci Resolve. No AI were used in the making process of this video. The goal of the video was to showcase the project to the world, and giving it a bit more visibility, even though I honestly just wanted to do it for fun ngl :) Btw they are a few references throughout the video. For exemple the first scene was directly inspired by the movie Tron Legacy’s intro lmao....
|
1793130695.3635464
|
1793217095.3635464
|
|
21798
|
ERN by @KalebCodes | Stardance
|
KalebCodes
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T18:49:57Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "SHIP: BenchNode (Project ERN V1) Live App: https://ern-notebook.vercel.app/ What is BenchNode? Current university research labs are plagued by outdated tools. Researchers waste hours manually transcribing data between sticky notes, Excel, and clunky legacy software. BenchNode is a lightning-fast, local-first Electronic Research Notebook (ERN) designed specifically for Biomedical Engineering and high-speed data acquisition workflows. It is built to keep researchers in the flow state. Core Features Cmd+K Command Center: Press Cmd+K anywhere in the app to open the global command palette. Search your logs, jump between experiments, or create new trials instantly with full keyboard navigation. Local-First Reliability: Powered by Zustand persistence, your data is saved instantly to your local machine. No database latency, and your data survives browser refreshes automatically. Scientific Rich Text: A custom Tiptap editor tailored for high-speed Markdown. It supports structural formatting so you can write protocols at the speed of thought. Dynamic Metadata: Track active Experiment IDs, Trial Numbers, Environmental Temperatures, and Status flags in a dedicated right-hand drawer alongside your raw data. The Tech Stack Framework: Next.js (App Router) Styling: Tailwind CSS (Scientific Dark Mode aesthetic) State Management: Zustand + Local Storage Middleware Editor: Tiptap (Headless WYSIWYG) Icons: Lucide React Massive thanks to Hack Club and the Stardance event for pushing me to ship this!", "repo": "https://github.com/kaleb973/ERN-Notebook", "demo": "https://ern-notebook.vercel.app/"}]...
|
[{"post_id": 39046, "ts": "202 [{"post_id": 39046, "ts": "2026-08-01T18:38:45Z", "hours": 3.1497, "text": "Devlog: Local storage bugs and building a Cmd+K menu For this update, I wanted to make the app actually usable without a mouse and fix a few state issues before shipping the MVP. What I added Auto-saving: Before this, if you accidentally refreshed the page, you lost all your notes. I hooked up Zustand’s persist middleware so everything auto-saves straight to localStorage as you type. Cmd+K Menu: Built a global command palette from scratch. You can hit Cmd+K , search your notes, use the up/down arrow keys to navigate, and hit enter to jump to an experiment or instantly create a new one. Bugs I ran into 1. Local storage corruption Right after setting up the persist middleware, the app gave me a blank screen and threw a TypeError: notes.filter is not a function error. Zustand was pulling some corrupted object from an old browser cache, which broke the array. I fixed it by changing the storage key to clear the cache, and wrapped my state in an Array.isArray() check so it won’t crash if it reads weird data in the future. 2. React hook order error While testing the command palette, I got the classic React “Rules of Hooks” error. I accidentally put an early return ( if (!isOpen) return null; ) above my last useEffect . Whenever I opened the modal, React freaked out because the number of hooks rendered suddenly changed. I just moved the hook above the early return and it works perfectly now. Everything is stable and the keyboard navigation is feeling really smooth."}, {"post_id": 19767, "ts": "2026-07-01T04:47:29Z", "hours": 5.0881, "text": "I started by making the first base commit for the project, then I built out the README and started shaping the main direction of ERN as a fast electronic research notebook. From there, I added the command palette, updated the environment and .gitignore setup, and built the password gate so the app could have controlled access. After that, I connected the frontend, wired up the live TipTap text editor on the canvas, and then continued refining the writing experience with text formatting tools, BubbleMenu changes, and heading fixes. After the core editor was working, I spent time tightening the interface and making the notebook feel more usable, including several rounds of fixes and rollback/rebuild work around headings and the BubbleMenu. I also went through a couple of test commits while iterating, then finalized the Alpha-1 and Alpha-1b milestones. Most recently, I updated the live demo URL in the README and cleaned up my Git setup so my commits could push correctly with my GitHub noreply email. Right now, the project is synced to origin and ready for the next build-out phase."}]...
|
Title: ERN by @KalebCodes | Stardance
Devlogs:
I Title: ERN by @KalebCodes | Stardance
Devlogs:
I started by making the first base commit for the project, then I built out the README and started shaping the main direction of ERN as a fast electronic research notebook. From there, I added the command palette, updated the environment and .gitignore setup, and built the password gate so the app could have controlled access. After that, I connected the frontend, wired up the live TipTap text editor on the canvas, and then continued refining the writing experience with text formatting tools, BubbleMenu changes, and heading fixes. After the core editor was working, I spent time tightening the interface and making the notebook feel more usable, including several rounds of fixes and rollback/rebuild work around headings and the BubbleMenu. I also went through a couple of test commits while iterating, then finalized the Alpha-1 and Alpha-1b milestones. Most recently, I updated the live demo URL in the README and cleaned up my Git setup so my commits could push correctly with my GitHub noreply email. Right now, the project is synced to origin and ready for the next build-out phase.
Devlog: Local storage bugs and building a Cmd+K menu For this update, I wanted to make the app actually usable without a mouse and fix a few state issues before shipping the MVP. What I added Auto-saving: Before this, if you accidentally refreshed the page, you lost all your notes. I hooked up Zustand’s persist middleware so everything auto-saves straight to localStorage as you type. Cmd+K Menu: Built a global command palette from scratch. You can hit Cmd+K , search your notes, use the up/down arrow keys to navigate, and hit enter to jump to an experiment or instantly create a new one. Bugs I ran into 1. Local storage corruption Right after setting up the persist middleware, the app gave me a blank screen and threw a TypeError: notes.filter is not a function error. Zustand was pulling some corrupted object from an old browser cache, which broke the array. I fixed it by changing the storage key to clear the cache, and wrapped my state in an Array.isArray() check so it won’t crash if it reads weird data in the future. 2. React hook order error While testing the command palette, I got the classic React “Rules of Hooks” error. I accidentally put an early return ( if (!isOpen) return null; ) above my last useEffect . Whenever I opened the modal, React freaked out because the number of hooks rendered suddenly changed. I just moved the hook above the early return and it works perfectly now. Everything is stable and the keyboard navigation is feeling really smooth.
Ships:
SHIP: BenchNode (Project ERN V1) Live App: https://ern-notebook.vercel.app/ What is BenchNode? Current university research labs are plagued by outdated tools. Researchers waste hours manually transcribing data between sticky notes, Excel, and clunky legacy software. BenchNode is a lightning-fast, local-first Electronic Research Notebook (ERN) designed specifically for Biomedical Engineering and high-speed data acquisition workflows. It is built to keep researchers in the flow state. Core Features Cmd+K Command Center: Press Cmd+K anywhere in the app to open the global command palette. Search your logs, jump between experiments, or create new trials instantly with full keyboard navigation. Local-First Reliability: Powered by Zustand persistence, your data is saved instantly to your local machine. No database latency, and your data survives browser refreshes automatically. Scientific Rich Text: A custom Tiptap editor tailored for high-speed Markdown. It supports structural formatting so you can write protocols at the speed of thought. Dynamic Metadata: Track active Experiment IDs, Trial Numbers, Environmental Temperatures, and Status flags in a dedicated right-hand drawer alongside your raw data. The Tech Stack Framework: Next.js (App Router) Styling: Tailwind CSS (Scientific Dark Mode aesthetic) State Management: Zustand + Local Storage Middleware Editor: Tiptap (Headless WYSIWYG) Icons: Lucide React Massive thanks to Hack Club and the Stardance event for pushing me to ship this!...
|
1793278454.2509315
|
1793364854.2509315
|
|
21799
|
Kursal by @Kubik | Stardance
|
Kubik
|
1
|
255.7
|
4494
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T19:31:18Z", "hours": 228.0, "multiplier": 17.91, "payout": 4494, "blessing": "neutral", "text": "I built Kursal! A peer-to-peer, decentralized (means no central server!) and end-to-end encrypted messenger. It’s all coded in Rust for the backend and Svelte for the interface. There’s also a website for it showing a bit everything, it’s cool Basically when you open your client, it connects to other clients and creates a “mesh” of clients, communicating through each other. I think a good comparison is a mix of Bitcoin and Tor? Anyway it took me super long to code, and I hope you enjoy!", "repo": "https://github.com/KursalChat/Kursal", "demo": "https://kursal.chat/download"}]...
|
[{"post_id": 82386, "ts": "202 [{"post_id": 82386, "ts": "2026-10-24T17:55:21Z", "hours": 9.9861, "text": "Hi! Back to small bug fixes and maintaining the code :p Changes: (more) Zero-ize memory for private keys lots of CI workflows (github actions) magic… it now builds two android : aab (play store) and apk CI for Arch! it buiiiilds!! changed crash reports a bit, there’s now a “report on github” button which is easier for me :) IM DOING THAT PLAY STORE RELEASE! IM GOING THROUGH!! Got 12 testers on the private testing, they gotta test for 14 days and then I can submit to the play store! 🤞"}, {"post_id": 79997, "ts": "2026-10-15T20:32:51Z", "hours": 9.325, "text": "Shipped and received ratings, thank you guys! We reached 25 stars on GitHub Changes: various bug fixes… lol (and dependency bumps) iOS build! and signed mac build! meaning you can know open the app on mac without it saying “broken”! (this was a signing issue yes, the app is not actually broken…) got Kursal working for ARCH !! finally, arch users can now open the app :) Still trying to get published on the app store and google play…. damn I did not think it would take that long"}, {"post_id": 73960, "ts": "2026-09-26T12:21:34Z", "hours": 8.3858, "text": "that gotta be the last devlog 😅 Basically i just “routine maintenance” the repo ¯ \\ (ツ) /¯ spent time TRYING getting it on the app store or play store… it’s pain 😭 but i’ll get it eventually!"}, {"post_id": 64991, "ts": "2026-09-09T19:21:46Z", "hours": 6.4067, "text": "Hi! I’m done! (i hope lol) i’m still in the process of publishing to the app store and play store… but heh it takes so long i’ll ship before i’m approved there lol Changes: Few possible vulnerability fixes: only allow LAN devices to reach LAN-specific endpoints Show security codes when added locally Strip more image metadata (like GPS infos) on more formats"}, {"post_id": 59064, "ts": "2026-08-31T17:38:46Z", "hours": 12.395, "text": "for real last devlog lol, mostly “ci” changes, nothing much Changes: improved code blocks! it has colors :) (thanks highlight.js) thanks Tiazzz for translating into Dutch! android + IOS building code updater on mobile opens the mobile store (instead of breaking) I spent a LOT of time on the Google and Apple publishing websites….. it takes time to get an app published…. :/"}, {"post_id": 54519, "ts": "2026-08-25T15:29:28Z", "hours": 11.0444, "text": "okay i think that’s the last devlog before I ship! sorry for that long time devlog but i was in holidays lol Changes: Use autonat on clients to determine if they can act as public relays Complete rework of the onboarding screens Better QR codes :D Bug Fixes: Fixed some potential security issues in the frontend (injections) Rewrite a part of the front-end to group util functions and avoid redundant code AND!! i’m almost done with the camera rewrite! i’m in the process of migrating that to the rust backend but this means native “per-device” code. Almost done! here are the onboarding screens one by one, i cant add more than 4 attachments so you’ll have to try urself to see ;)"}, {"post_id": 51026, "ts": "2026-08-20T14:49:41Z", "hours": 10.2336, "text": "hi! another devlog! i just turned 18 Changes: switched the formatter from prettier to oxfmt (it’s faster!) changed the icon got approved on OpenCollective ! Bug Fixes: avatar transfers now always work even when the other is offline removed some useless code… lol (like migration code) spent lot of time trying to migrate camera to backend but that’s still in the works… soon™"}, {"post_id": 48329, "ts": "2026-08-16T17:17:49Z", "hours": 9.6311, "text": "wow time actually flies! gotta devlog again XD i made cool assets for the app store release Features: you can now delete log files from the app unlimited file transfers (file transfers already existed, but now no size limit!) Bug Fixes stop spamming connections to peers… lol big language loading improvements! now shows the percentage of translation too more avatar work to store it on disk and not in the DB you can now mirror your camera if you want :) defer android permission window thingy for those interested i used a figma template for the phones 3d + a plugin (that was so much pain but it looks great lol)"}, {"post_id": 47315, "ts": "2026-08-15T05:58:52Z", "hours": 10.5314, "text": "more changess!!! and lots of fixes lol oh also i have setup https://status.kursal.chat (but not tracked that time) Performance: improved performance for the database (parallel reading) improved performance (storage & ram) for emojis perf: store avatars in files instead of serialized in the Contact {} struct more performance changes (camera loading, command palette) Bug Fixes: tried keeping less active connections to not blow up the client lol fixed a svelte #each issue… lol"}, {"post_id": 45057, "ts": "2026-08-11T10:00:47Z", "hours": 10.0292, "text": "okay I got some more work in! I’m getting really close to shipping, i’d like to get a demo and a proper app icon first tho Changes better QR code scanning screen! and it works on iOS :D the bluetooth module got improvements! no unwrap left (= cannot panic now) + better transfer speed! compressed all image assets to webp (gained like at least few MB) translated again everything in french lol migrated some localStorage data (file-path association) to the encrypted database"}, {"post_id": 43310, "ts": "2026-08-08T14:38:07Z", "hours": 10.1664, "text": "Lots of work! but no release yet, i’m almost done for beta.6!! :D a major thing i worked on is Github actions release. Now, when I create the draft release, GH actions will build for every platform in parallel and release! Features Contact page complete rework (easier to understand :p), with autocorrect etc Call ringtone (probably temporary, but it’s shipped!) Bug Fixes Smaller offline messages checks Addresses display, general UI improvements Prefer local connections & improved file transfers MacOS .kursal file association"}, {"post_id": 41634, "ts": "2026-08-05T23:40:37Z", "hours": 10.2592, "text": "Released beta.4 and beta.5 with lots of improvements and fixes! I spent uh… some time on trying to make a ring tone (like an hour maybe?) but i cant upload it here :/ but whatever it’s not that good anyway lol Features Updater progress bar (spinner go spinnyyy) Major long-term code improvements: you can now select the number of uses and the time it expires Bug Fixes critical first-contact deadlock fix… (oopsy) Pinned & unread messages improvements More accurate user status and that’s basically it I guess!"}, {"post_id": 40748, "ts": "2026-08-04T14:08:58Z", "hours": 10.1056, "text": "Released beta.3 and currently reworking long-term codes for beta.4! not done yet, but it’s WIP :) Features app now embeds the latest ToS update date, so when you update and last agreed to a previous version it shows a pop up so you can agree again Bug Fixes lots of CI fixes… like really a lot 😅 re-enabled mDNS, kinda forgot to put it back… app displays edge-to-edge on mobile, no weird offset! (normally) grammar fixes in english and french… yeeah!"}, {"post_id": 38297, "ts": "2026-07-31T16:46:21Z", "hours": 9.8047, "text": "Released a beta.2 fixing lots of things and almost done with a beta.3 I think… :D What changed? first, i spent like 4 hours translating everything into french LOL Features Mobile native file sharing (this one is crazy!) Large messages send as file (10k+) In-app log view File caption (sends as msg) Bug Fixes Otp consumption Offline messages edits Contact onboarding mobile self-lock (yeah u couldnt do the onboarding on phone in beta.1 😅) File upload location & UI Less in-app notifications that’s it for this devlog! we’ll see if I ship now or wait a bit more? i really want something to work super well :p"}, {"post_id": 37588, "ts": "2026-07-30T12:50:51Z", "hours": 10.1344, "text": "Okayy! i started publishing clean commits now and working with my github structure. Basically: I code on branches, like feature/some-feature . once it’s done, I squash it to dev. And when I want to release, I just make a branch release/0.1.0 (with the actual version) and change few things there! What changed? DOCKER WORKING! you can now host your relays using it Kursal JS is out too, you can now use the app API! Large messages send as file (10k+) In-app log view File caption (sends as msg) fixes: App focus notifications Contact onboarding mobile self-lock File upload location & UI Less in-app notifications File downloads What next I’m currently working on adding the native “share with” for Kursal to share images and files directly from your OS."}, {"post_id": 36273, "ts": "2026-07-28T08:26:38Z", "hours": 11.1028, "text": "Alright i got the new repo up! What changed? lots of bug fixes (IT OPENS ON ANDROID!) ci improvements got mail sending working from the domain spent lot of time setting the new repo up released the first beta + website update What next? testing… and getting to a stable release :)"}, {"post_id": 34027, "ts": "2026-07-24T13:26:17Z", "hours": 9.9975, "text": "hi! probably last few devlogs before a release?! What changed? more website improvements! added legal pages (boring stuff lol) fixed so many bugs offline messages work now!! and calls too tray icon & background process :) LOTS OF TESTING. and lots of improvements too What next? finish testing and publishing to the repo!"}, {"post_id": 32311, "ts": "2026-07-21T12:19:37Z", "hours": 11.0667, "text": "nothing much changed, again What changed? lots of internal code structure, some logic bugs & stuff Added docker support for hosting a relay! Improved the website and prepared for a beta release (not published yet, will do) More .md docs to explain everything! but more importantly (the only visual changes lol) terminal user interface for the relay! --tui new home for the app! (with stats)"}, {"post_id": 29439, "ts": "2026-07-16T11:58:15Z", "hours": 11.6328, "text": "again, nothing much to see… but lots of internal changes! What changed? complete rust refactor: made macros for frequently used things, organized the code better & stuff like that some quality of life features for the frontend like pasting an image in the chat directly more tutorials explaining kursal (offline messaging, file transfers) What next? i’m preparing everything for a soon-ish release! it’ll be a public beta version and yeah! hope it works"}, {"post_id": 27997, "ts": "2026-07-13T23:28:00Z", "hours": 10.3989, "text": "oops forgot to devlog again… and no new features this time What changed? as i said…. well nothing lots of bug fixes lots of code improvements (refactor stuff…) some UI/UX improvements but like nothing too crazy What next? honestly I cannot tell. I think i’m gonna start to plan the release and finally push to the public repo. gotta get everything ready, more bug fixes and proofread the code I guess! PS: sorry i really got no screenshots to show here so uh… here’s the intro animation when you first open the app!"}, {"post_id": 23055, "ts": "2026-07-05T19:50:56Z", "hours": 9.2908, "text": "I tried getting a feature out…. but nope, only fixed bugs What changed? Added AEC (active echo cancellation) on some platforms: i have to compile FROM these platforms, like cross-compilation straight up does not work… sorry windows Fixed file transfers and improved it’s UI Fixed offline messaging… i hope i had to figure out how to compile audio libs to other platforms… that took me a while…….. thanks opus What next? uhhh good question? more tests maybe? and UI improvements i was thinking about making a background process run, separate from the app that would get messages so you can close the app while that runs… will have to look into it"}, {"post_id": 21137, "ts": "2026-07-02T22:50:54Z", "hours": 4.73, "text": "hi! Started testing Kursal and found…. bugs! so i spent quite some time fixing them… What changed? Connections between peers were unstable: increased timeout + fixed a rate limiter bug Improved the UI with a new “connected nodes” section (see screenshot) Added an option to change the sample rate (defaults to 48 kHz, but you can lower to improve potential lag) and small UI improvements like moving the call bar to the bottom which fits better What next? test. test. test. my goal is to release the app in beta before august and get the first stable version out mid-august… we’ll see!"}, {"post_id": 18715, "ts": "2026-06-29T21:55:38Z", "hours": 11.0786, "text": "yooo 3rd devlog :) sorry i’m not posting very often, i’d like to devlog feature by feature but they really take time… What changed? Fixed vulnerabilities (post-quantum encryption in mailbox system & useless signature removal) Managing nodes in the settings (like viewing and adding connections) A lot of UI improvements a bit everywhere! calls… work in progress! calls is the feature i’ve been working on for a while. I re-used the encryption mechanism of file transfers: make a temporary secret key and then use it. I got SOUND going!! What next? testing offline messaging (my friends were still offline) testing calls (a lot)! improving call UI"}, {"post_id": 16325, "ts": "2026-06-26T15:51:40Z", "hours": 11.7542, "text": "Hello Got a lot of improvements working! Mainly on the front-end but quite a lot on the backend too actually! What changed? Added a CMD+K / CTRL+K search menu (see screenshot): you can search for settings, contacts or even messages! Made the background of the DMG installation on mac Searching messages!! and a few skeletons for when stuff is loading backend fixes… lots of em… like fixed adding a contact What next? still test offline messaging, still didn’t do that somehow"}, {"post_id": 13211, "ts": "2026-06-21T17:18:01Z", "hours": 16.0808, "text": "Hii! First Kursal devlog! This is a project i’ve started during Flavortown but I wasn’t done yet! Sorry kinda didn’t see the time pass lol What changed? Website rebranding! –> https://kursal.chat Spent a lot of time setuping “side-projects” like an uptime manager, translation manager etc Reworked the workflow for building, checking & more Lots of UI/UX changes POSSIBLY working offline messaging… (will test lol) What next? I’m about to test offline messaging, the whole app too actually lol…… hope it all works 🙏"}]...
|
Title: Kursal by @Kubik | Stardance
Devlogs:
Hii! Title: Kursal by @Kubik | Stardance
Devlogs:
Hii! First Kursal devlog! This is a project i’ve started during Flavortown but I wasn’t done yet! Sorry kinda didn’t see the time pass lol What changed? Website rebranding! –> https://kursal.chat Spent a lot of time setuping “side-projects” like an uptime manager, translation manager etc Reworked the workflow for building, checking & more Lots of UI/UX changes POSSIBLY working offline messaging… (will test lol) What next? I’m about to test offline messaging, the whole app too actually lol…… hope it all works 🙏
Hello Got a lot of improvements working! Mainly on the front-end but quite a lot on the backend too actually! What changed? Added a CMD+K / CTRL+K search menu (see screenshot): you can search for settings, contacts or even messages! Made the background of the DMG installation on mac Searching messages!! and a few skeletons for when stuff is loading backend fixes… lots of em… like fixed adding a contact What next? still test offline messaging, still didn’t do that somehow
yooo 3rd devlog :) sorry i’m not posting very often, i’d like to devlog feature by feature but they really take time… What changed? Fixed vulnerabilities (post-quantum encryption in mailbox system & useless signature removal) Managing nodes in the settings (like viewing and adding connections) A lot of UI improvements a bit everywhere! calls… work in progress! calls is the feature i’ve been working on for a while. I re-used the encryption mechanism of file transfers: make a temporary secret key and then use it. I got SOUND going!! What next? testing offline messaging (my friends were still offline) testing calls (a lot)! improving call UI
hi! Started testing Kursal and found…. bugs! so i spent quite some time fixing them… What changed? Connections between peers were unstable: increased timeout + fixed a rate limiter bug Improved the UI with a new “connected nodes” section (see screenshot) Added an option to change the sample rate (defaults to 48 kHz, but you can lower to improve potential lag) and small UI improvements like moving the call bar to the bottom which fits better What next? test. test. test. my goal is to release the app in beta before august and get the first stable version out mid-august… we’ll see!
I tried getting a feature out…. but nope, only fixed bugs What changed? Added AEC (active echo cancellation) on some platforms: i have to compile FROM these platforms, like cross-compilation straight up does not work… sorry windows Fixed file transfers and improved it’s UI Fixed offline messaging… i hope i had to figure out how to compile audio libs to other platforms… that took me a while…….. thanks opus What next? uhhh good question? more tests maybe? and UI improvements i was thinking about making a background process run, separate from the app that would get messages so you can close the app while that runs… will have to look into it
oops forgot to devlog again… and no new features this time What changed? as i said…. well nothing lots of bug fixes lots of code improvements (refactor stuff…) some UI/UX improvements but like nothing too crazy What next? honestly I cannot tell. I think i’m gonna start to plan the release and finally push to the public repo. gotta get everything ready, more bug fixes and proofread the code I guess! PS: sorry i really got no screenshots to show here so uh… here’s the intro animation when you first open the app!
again, nothing much to see… but lots of internal changes! What changed? complete rust refactor: made macros for frequently used things, organized the code better & stuff like that some quality of life features for the frontend like pasting an image in the chat directly more tutorials explaining kursal (offline messaging, file transfers) What next? i’m preparing everything for a soon-ish release! it’ll be a public beta version and yeah! hope it works
nothing much changed, again What changed? lots of internal code structure, some logic bugs & stuff Added docker support for hosting a relay! Improved the website and prepared for a beta release (not published yet, will do) More .md docs to explain everything! but more importantly (the only visual changes lol) terminal user interface for the relay! --tui new home for the app! (with stats)
hi! probably last few devlogs before a release?! What changed? more website improvements! added legal pages (boring stuff lol) fixed so many bugs offline messages work now!! and calls too tray icon & background process :) LOTS OF TESTING. and lots of improvements too What next? finish testing and publishing to the repo!
Alright i got the new repo up! What changed? lots of bug fixes (IT OPENS ON ANDROID!) ci improvements got mail sending working from the domain spent lot of time setting the new repo up released the first beta + website update What next? testing… and getting to a stable release :)
Okayy! i started publishing clean commits now and working with my github structure. Basically: I code on branches, like feature/some-feature . once it’s done, I squash it to dev. And when I want to release, I just make a branch release/0.1.0 (with the actual version) and change few things there! What changed? DOCKER WORKING! you can now host your relays using it Kursal JS is out too, you can now use the app API! Large messages send as file (10k+) In-app log view File caption (sends as msg) fixes: App focus notifications Contact onboarding mobile self-lock File upload location & UI Less in-app notifications File downloads What next I’m currently working on adding the native “share with” for Kursal to share images and files directly from your OS.
Released a beta.2 fixing lots of things and almost done with a beta.3 I think… :D What changed? first, i spent like 4 hours translating everything into french LOL Features Mobile native file sharing (this one is crazy!) Large messages send as file (10k+) In-app log view File caption (sends as msg) Bug Fixes Otp consumption Offline messages edits Contact onboarding mobile self-lock (yeah u couldnt do the onboarding on phone in beta.1 😅) File upload location & UI Less in-app notifications that’s it for this devlog! we’ll see if I ship now or wait a bit more? i really want something to work super well :p
Released beta.3 and currently reworking long-term codes for beta.4! not done yet, but it’s WIP :) Features app now embeds the latest ToS update date, so when you update and last agreed to a previous version it shows a pop up so you can agree again Bug Fixes lots of CI fixes… like really a lot 😅 re-enabled mDNS, kinda forgot to put it back… app displays edge-to-edge on mobile, no weird offset! (normally) grammar fixes in english and french… yeeah!
Released beta.4 and beta.5 with lots of improvements and fixes! I spent uh… some time on trying to make a ring tone (like an hour maybe?) but i cant upload it here :/ but whatever it’s not that good anyway lol Features Updater progress bar (spinner go spinnyyy) Major long-term code improvements: you can now select the number of uses and the time it expires Bug Fixes critical first-contact deadlock fix… (oopsy) Pinned & unread messages improvements More accurate user status and that’s basically it I guess!
Lots of work! but no release yet, i’m almost done for beta.6!! :D a major thing i worked on is Github actions release. Now, when I create the draft release, GH actions will build for every platform in parallel and release! Features Contact page complete rework (easier to understand :p), with autocorrect etc Call ringtone (probably temporary, but it’s shipped!) Bug Fixes Smaller offline messages checks Addresses display, general UI improvements Prefer local connections & improved file transfers MacOS .kursal file association
okay I got some more work in! I’m getting really close to shipping, i’d like to get a demo and a proper app icon first tho Changes better QR code scanning screen! and it works on iOS :D the bluetooth module got improvements! no unwrap left (= cannot panic now) + better transfer speed! compressed all image assets to webp (gained like at least few MB) translated again everything in french lol migrated some localStorage data (file-path association) to the encrypted database
more changess!!! and lots of fixes lol oh also i have setup https://status.kursal.chat (but not tracked that time) Performance: improved performance for the database (parallel reading) improved performance (storage & ram) for emojis perf: store avatars in files instead of serialized in the Contact {} struct more performance changes (camera loading, command palette) Bug Fixes: tried keeping less active connections to not blow up the client lol fixed a svelte #each issue… lol
wow time actually flies! gotta devlog again XD i made cool assets for the app store release Features: you can now delete log files from the app unlimited file transfers (file transfers already existed, but now no size limit!) Bug Fixes stop spamming connections to peers… lol big language loading improvements! now shows the percentage of translation too more avatar work to store it on disk and not in the DB you can now mirror your camera if you want :) defer android permission window thingy for those interested i used a figma template for the phones 3d + a plugin (that was so much pain but it looks great lol)
hi! another devlog! i just turned 18 Changes: switched the formatter from prettier to oxfmt (it’s faster!) changed the icon got approved on OpenCollective ! Bug Fixes: avatar transfers now always work even when the other is offline removed some useless code… lol (like migration code) spent lot of time trying to migrate camera to backend but that’s still in the works… soon™
okay i think that’s the last devlog before I ship! sorry for that long time devlog but i was in holidays lol Changes: Use autonat on clients to determine if they can act as public relays Complete rework of the onboarding screens Better QR codes :D Bug Fixes: Fixed some potential security issues in the frontend (injections) Rewrite a part of the front-end to group util functions and avoid redundant code AND!! i’m almost done with the camera rewrite! i’m in the process of migrating that to the rust backend but this means native “per-device” code. Almost done! here are the onboarding screens one by one, i cant add more than 4 attachments so you’ll have to try urself to see ;)
for real last devlog lol, mostly “ci” changes, nothing much Changes: improved code blocks! it has colors :) (thanks highlight.js) thanks Tiazzz for translating into Dutch! android + IOS building code updater on mobile opens the mobile store (instead of breaking) I spent a LOT of time on the Google and Apple publishing websites….. it takes time to get an app published…. :/
Hi! I’m done! (i hope lol) i’m still in the process of publishing to the app store and play store… but heh it takes so long i’ll ship before i’m approved there lol Changes: Few possible vulnerability fixes: only allow LAN devices to reach LAN-specific endpoints Show security codes when added locally Strip more image metadata (like GPS infos) on more formats
that gotta be the last devlog 😅 Basically i just “routine maintenance” the repo ¯ \ (ツ) /¯ spent time TRYING getting it on the app store or play store… it’s pain 😭 but i’ll get it eventually!
Shipped and received ratings, thank you guys! We reached 25 stars on GitHub Changes: various bug fixes… lol (and dependency bumps) iOS build! and signed mac build! meaning you can know open the app on mac without it saying “broken”! (this was a signing issue yes, the app is not actually broken…) got Kursal working for ARCH !! finally, arch users can now open the app :) Still trying to get published on the app store and google play…. damn I did not think it would take that long
Hi! Back to small bug fixes and maintaining the code :p Changes: (more) Zero-ize memory for private keys lots of CI workflows (github actions) magic… it now builds two android : aab (play store) and apk CI for Arch! it buiiiilds!! changed crash reports a bit, there’s now a “report on github” button which is easier for me :) IM DOING THAT PLAY STORE RELEASE! IM GOING THROUGH!! Got 12 testers on the private testing, they gotta test for 14 days and then I can submit to the play store! 🤞
Ships:
I built Kursal! A peer-to-peer, decentralized (means no central server!) and end-to-end encrypted messenger. It’s all coded in Rust for the backend and Svelte for the interface. There’s also a website for it showing a bit everything, it’s cool Basically when you open your client, it connects to other clients and creates a “mesh” of clients, communicating through each other. I think a good comparison is a mix of Bitcoin and Tor? Anyway it took me super long to code, and I hope you enjoy!...
|
1793148672.4418616
|
1793235072.4418616
|
|
21813
|
Face-Activated Servo by @saanvi_neema | Stardance
|
saanvi_neema
|
1
|
37.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T01:40:45Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a real-time face detection system on the AMD Kria KV260 board that spins a servo motor when a face is detected. The KV260 runs a Python app that uses OpenCV to detect faces from my webcam. Then it sends commands to the Arduino Elegoo Mega 2560, which spins the servo motor. The hardest part was the communication between the KV260 and the Arduino board. The Python side sends the angle (from 0-180) and waits. The Arduino needs some time to boot before it can accept commands. Getting the timing right was difficult. I’m proud of the integration between software and hardware, because this was my first hardware project. Testing it will be difficult, as it works locally (has to be on the local network). But you will need: Flash servo_test.ino onto the Elegoo Mega Connect the Mega to the KV260 via USB (it will appear as /dev/ttyACM0) Run python kria_app.py on the KV260 Open http://kria.local:5000 in a browser on the same network Wait for some time since the Mega needs to initialize", "repo": "https://github.com/saanvi-neema/kv260/tree/master/face-servo", "demo": ""}]...
|
[{"post_id": 26933, "ts": "202 [{"post_id": 26933, "ts": "2026-07-12T00:34:47Z", "hours": 9.2547, "text": "I am working on upgrading my face-servo project to be a face-activated robotics car. When a face is detected, the car should track the face and move toward it. If the face is I’ve already built the car and I am working on getting the Arduino motor shield and the ESP32 camera tracking set up."}, {"post_id": 17037, "ts": "2026-06-27T17:31:42Z", "hours": 11.7411, "text": "Formatted and cleaned up code and improved the Readme. I also tried to make face-detection more accurate, because the algorithm was detecting some objects that weren’t faces as faces. I’ve attached a picture of the app detecting my face (you can see the green box around my face)."}, {"post_id": 13466, "ts": "2026-06-22T01:30:33Z", "hours": 5.2039, "text": "Improved some code and added some test/utility files for fun. Attaching a picture of me recording my demonstration video."}, {"post_id": 13228, "ts": "2026-06-21T17:41:03Z", "hours": 11.2622, "text": "Project is finished – the code is finished and the face activation is working properly! It took a while to get it working, but it works. I wasn’t sure what to put as a screenshot because it’s a hardware project, so I’m attaching a screenshot of the method that was the hardest/took me the longest to figure out."}]...
|
Title: Face-Activated Servo by @saanvi_neema | Sta Title: Face-Activated Servo by @saanvi_neema | Stardance
Devlogs:
Project is finished – the code is finished and the face activation is working properly! It took a while to get it working, but it works. I wasn’t sure what to put as a screenshot because it’s a hardware project, so I’m attaching a screenshot of the method that was the hardest/took me the longest to figure out.
Improved some code and added some test/utility files for fun. Attaching a picture of me recording my demonstration video.
Formatted and cleaned up code and improved the Readme. I also tried to make face-detection more accurate, because the algorithm was detecting some objects that weren’t faces as faces. I’ve attached a picture of the app detecting my face (you can see the green box around my face).
I am working on upgrading my face-servo project to be a face-activated robotics car. When a face is detected, the car should track the face and move toward it. If the face is I’ve already built the car and I am working on getting the Arduino motor shield and the ESP32 camera tracking set up.
Ships:
I built a real-time face detection system on the AMD Kria KV260 board that spins a servo motor when a face is detected. The KV260 runs a Python app that uses OpenCV to detect faces from my webcam. Then it sends commands to the Arduino Elegoo Mega 2560, which spins the servo motor. The hardest part was the communication between the KV260 and the Arduino board. The Python side sends the angle (from 0-180) and waits. The Arduino needs some time to boot before it can accept commands. Getting the timing right was difficult. I’m proud of the integration between software and hardware, because this was my first hardware project. Testing it will be difficult, as it works locally (has to be on the local network). But you will need: Flash servo_test.ino onto the Elegoo Mega Connect the Mega to the KV260 via USB (it will appear as /dev/ttyACM0) Run python kria_app.py on the KV260 Open http://kria.local:5000 in a browser on the same network Wait for some time since the Mega needs to initialize...
|
1793307252.7676501
|
1793393652.7676501
|
|
21839
|
Slowfetch by @tonymac129 | Stardance
|
tonymac129
|
1
|
10.0
|
107
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T20:46:29Z", "hours": 10.0, "multiplier": 10.66, "payout": 107, "blessing": "neutral", "text": "I made Slowfetch, a simple, lightweight, and fast (slow) Fastfetch/Neofetch alternative for Linux operating systems that fetches and displays a list of organized useful system and hardware information and runtime metrics, as well as an ASCII logo of the distro. This is my first Rust project, and I didn’t have any ideas for what to build since I barely knew anything, but through this project, I gained a ton of experience working with Rust basics, interacting with the Linux file system, using Cargo and Rust libraries, and deploying the program as a working executable release on GitHub. I’m really proud of how everything turned out, especially the ASCII logos and the colors, that the program looks very polished and functional. Building this project also taught me a lot about how the kernel and command line programs actually function under the hood.", "repo": "https://github.com/tonymac129/slowfetch", "demo": "https://github.com/tonymac129/slowfetch/releases"}]...
|
[{"post_id": 14646, "ts": "202 [{"post_id": 14646, "ts": "2026-06-23T20:37:00Z", "hours": 0.7233, "text": "Polishing & final touches! Slowfetch is now finally finished; the logos are colored and print out properly and all the statistics are organized and displayed accurately! Thanks to @crushedflea ’s contribution, the ASCII logo constants are now merged with the main file and a few other display bugs are fixed Adding a “–censor” or the shorthand “-c” flag now censors the public IP Added a GitHub release so you can actually download and use Slowfetch as an executable program! Updated the README so it’s more informative and contains instructions for setting up the development environment for Slowfetch or downloading the GitHub release"}, {"post_id": 13332, "ts": "2026-06-21T20:52:13Z", "hours": 2.3514, "text": "More stats & new logos! Added a disk storage usage list item that has a similar format as the memory display (used, total, and percentage) and correctly converts to the most appropriate unit. This was a lot harder to set up than fetching the memory since I had to use an external library and do some extra stuff Added private and public IPs, current locale, and current battery percentage Added new correctly colored and sized ASCII style logos for Ubuntu and Fedora. I just started VMs for these, copied Fastfetch’s output logos, colored them and slightly modified them to better fit Slowfetch Added the color blocks from Fastfetch that render 10 different colors at the bottom of the list so you can see the colors your monitor displays Slowfetch now automatically detects the current distro and renders the correct ASCII logo, and if it isn’t Debian, Arch, Fedora, or Ubuntu the default Linux logo is the fallback (since Slowfetch only supports Linux) Cleaned up the colors and reorganized the list items into sections for better organization and readability"}, {"post_id": 12319, "ts": "2026-06-20T03:14:54Z", "hours": 1.8122, "text": "ASCII logos!!! Added the iconic ASCII distro logos from fastfetch/neofetch so you can better flex your operating system and nerdiness! Currently only Arch, Debian, and Linux ASCII logos are added with the symbols mostly correctly color coded I had to edit the logos quite a bit instead of just copying them from fastfetch’s output since they need to fit in my number of lines and keep the correct formatting Slowfetch can’t detect the distro and render the correct logo yet, so right now you can only pass it as a flag (with either arch, debian, or linux) to see the output, otherwise it doesn’t show a logo Added some placeholder list items (ip, locale, display), will be implemented soon I decided to only make Slowfetch support the major 4 distros I mentioned above since it’s too much of a pain (is it even possible?) to access Windows and macOS’ info"}, {"post_id": 12072, "ts": "2026-06-19T18:14:33Z", "hours": 1.8786, "text": "Hardware stats and shell Slowfetch now displays the current memory usage out of the device’s total RAM and shows the usage percentage. It also converts the unit automatically; GB is the default and only uses MB/KB if current usage is less than 500 MB/KB It also reads the CPU’s info, model, and specifications from the /proc directory and displays the information alongside memory Current shell and the number of packages installed on the OS are also displayed using some string manipulation Getting the GPU info is a bit trickier since it has to run the lspci command, capture its output, and filter through it to get the exact name of the chip Added a README to better document the script’s features Improved some formatting and display issues"}, {"post_id": 11589, "ts": "2026-06-18T21:33:41Z", "hours": 3.3083, "text": "First devlog on Slowfetch! I’m starting a new project, Slowfetch, which is basically a simple CLI fastfetch/neofetch copy that reads system files and runtime metrics and outputs them in an organized and visually appealing list This is my first Rust project too, so I spent a good chunk of this time learning and getting familiar with its basic concepts, Cargo, the documentation, and how it actually works I’m currently only running it in a Debian VM for testing (it will be available for other distros and Windows/macOS in the future), so I also spent some time setting up VS Code’s remote ssh and installing packages in the VM Right now it only reads username, hostname, and OS info from the /etc directory and runtime metrics from /proc and outputs a simple list that’s somewhat color coded Rust is actually not as hard as I thought it would be once I got kinda used to it, so I’m pretty excited to implement a ton of other features for this project!"}]...
|
Title: Slowfetch by @tonymac129 | Stardance
Devlo Title: Slowfetch by @tonymac129 | Stardance
Devlogs:
First devlog on Slowfetch! I’m starting a new project, Slowfetch, which is basically a simple CLI fastfetch/neofetch copy that reads system files and runtime metrics and outputs them in an organized and visually appealing list This is my first Rust project too, so I spent a good chunk of this time learning and getting familiar with its basic concepts, Cargo, the documentation, and how it actually works I’m currently only running it in a Debian VM for testing (it will be available for other distros and Windows/macOS in the future), so I also spent some time setting up VS Code’s remote ssh and installing packages in the VM Right now it only reads username, hostname, and OS info from the /etc directory and runtime metrics from /proc and outputs a simple list that’s somewhat color coded Rust is actually not as hard as I thought it would be once I got kinda used to it, so I’m pretty excited to implement a ton of other features for this project!
Hardware stats and shell Slowfetch now displays the current memory usage out of the device’s total RAM and shows the usage percentage. It also converts the unit automatically; GB is the default and only uses MB/KB if current usage is less than 500 MB/KB It also reads the CPU’s info, model, and specifications from the /proc directory and displays the information alongside memory Current shell and the number of packages installed on the OS are also displayed using some string manipulation Getting the GPU info is a bit trickier since it has to run the lspci command, capture its output, and filter through it to get the exact name of the chip Added a README to better document the script’s features Improved some formatting and display issues
ASCII logos!!! Added the iconic ASCII distro logos from fastfetch/neofetch so you can better flex your operating system and nerdiness! Currently only Arch, Debian, and Linux ASCII logos are added with the symbols mostly correctly color coded I had to edit the logos quite a bit instead of just copying them from fastfetch’s output since they need to fit in my number of lines and keep the correct formatting Slowfetch can’t detect the distro and render the correct logo yet, so right now you can only pass it as a flag (with either arch, debian, or linux) to see the output, otherwise it doesn’t show a logo Added some placeholder list items (ip, locale, display), will be implemented soon I decided to only make Slowfetch support the major 4 distros I mentioned above since it’s too much of a pain (is it even possible?) to access Windows and macOS’ info
More stats & new logos! Added a disk storage usage list item that has a similar format as the memory display (used, total, and percentage) and correctly converts to the most appropriate unit. This was a lot harder to set up than fetching the memory since I had to use an external library and do some extra stuff Added private and public IPs, current locale, and current battery percentage Added new correctly colored and sized ASCII style logos for Ubuntu and Fedora. I just started VMs for these, copied Fastfetch’s output logos, colored them and slightly modified them to better fit Slowfetch Added the color blocks from Fastfetch that render 10 different colors at the bottom of the list so you can see the colors your monitor displays Slowfetch now automatically detects the current distro and renders the correct ASCII logo, and if it isn’t Debian, Arch, Fedora, or Ubuntu the default Linux logo is the fallback (since Slowfetch only supports Linux) Cleaned up the colors and reorganized the list items into sections for better organization and readability
Polishing & final touches! Slowfetch is now finally finished; the logos are colored and print out properly and all the statistics are organized and displayed accurately! Thanks to @crushedflea ’s contribution, the ASCII logo constants are now merged with the main file and a few other display bugs are fixed Adding a “–censor” or the shorthand “-c” flag now censors the public IP Added a GitHub release so you can actually download and use Slowfetch as an executable program! Updated the README so it’s more informative and contains instructions for setting up the development environment for Slowfetch or downloading the GitHub release
Ships:
I made Slowfetch, a simple, lightweight, and fast (slow) Fastfetch/Neofetch alternative for Linux operating systems that fetches and displays a list of organized useful system and hardware information and runtime metrics, as well as an ASCII logo of the distro. This is my first Rust project, and I didn’t have any ideas for what to build since I barely knew anything, but through this project, I gained a ton of experience working with Rust basics, interacting with the Linux file system, using Cargo and Rust libraries, and deploying the program as a working executable release on GitHub. I’m really proud of how everything turned out, especially the ASCII logos and the colors, that the program looks very polished and functional. Building this project also taught me a lot about how the kernel and command line programs actually function under the hood....
|
1793303589.6667812
|
1793389989.6667812
|
|
21851
|
Catalog by @Gabinan890 | Stardance
|
Gabinan890
|
1
|
3.48
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T22:00:55Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Con la mia libreria di python puoi ordinare e manipolare liste di stringhe, sono orgoglioso del mio lavoro anche se non è perfetto l’ho fatto io ho eliminato il lavoro dell’AI dal mio lavoro. puoi facilmente consultare il file README su git hub per vedere esempi pratici. :)/Well with my library of python you can manipulate list of string, I’m mso proud of my work even if it’s not perfect cause I’ve done all by my self. you can easly read the README file in github for some example. :)", "repo": "https://github.com/Gabinan890/catalogpy", "demo": "https://pypi.org/project/catalogpy/"}]...
|
[{"post_id": 25280, "ts": "202 [{"post_id": 25280, "ts": "2026-07-09T13:45:45Z", "hours": 0.4786, "text": "I’ve updated the README Now the README have two separate section, one for the documentation in italian and one for the english documetation."}, {"post_id": 17939, "ts": "2026-06-28T21:56:02Z", "hours": 0.5164, "text": "Documentation update Ho aggiornato la documentazione ora il file readme è bilingue. :)/I’ve updated the documentation now it is bilanguage. :)"}, {"post_id": 13642, "ts": "2026-06-22T11:46:18Z", "hours": 0.8153, "text": "I’ve updated the comments in the code and I’ve done some fix of unique_words() Ho aggiornato i commenti del codice ora sono bilingue bhe spero siano comprensibili ho preferito scrivere qualcosa di comprensibile seppur con delle imperfezioni piuttosto che affidare tutto a dei traduttori automatici o all’AI, a breve aggiornero anche il sito web su Git Pages. Ho anche sistemato alcuni errori che avevo tralasciato nella funzione unique_words()./I’ve updated the comments in the code well I’m not so good in english but I’v prefered to write something of readable but with some imperfection instead of using some automatic translator or using AI, I’m working on update the web site on Git Pages. Also I’ve fixed some little bug in the function unique_words()."}, {"post_id": 13190, "ts": "2026-06-21T16:20:59Z", "hours": 0.7933, "text": "Update of unique_words() Ho aggiornato la funzione unique_words() nonostante fosse già stata riscritta da me diversi aggiornamenti fa, ora il codice è più leggibile e devo solo ultimare gli ultimi ritocchi per la gestione del parametro text che funziona solo se il parametro text è su True ma per il resto la funzione non dà problemi ed è completamente funzionante./I’ve updated the function unique_words() even if I’ve already rewrite some update ago but now the function is more readable and I’ve only to ultimate some thingh to improve the text parameter that at the moment works only if ord is on True."}, {"post_id": 13094, "ts": "2026-06-21T12:57:03Z", "hours": 0.7572, "text": "Update of the file README.md A seguito dell’aggiornamento della funzione elencation() e della funzione ordination() ho caricato tutti gli aggiornamenti sia su GitHub che su Pypi. Ho riscritto il file README.md che avevo generato con l’uso di AI per renderlo più chiaro e per avvicinarmi all’obbiettivo di eliminare tutto il codice scritto con AI, ho oscurato temporaneamente nel file README le funzioni order_shortest e order_longer poichè sono state interamente generate con AI e nelle prossime settimane punterò a riscriverle./After the update of the functions elencation() and ordination() I’ve loaded all the updates on GitHub and Pypi. For make the documentation more clear I’ve rewrite the file README.md that I’ve already generated with AI but it wasn’t so clear, I’ve hidden the functions order_shortest and order_longer cause they are generate with AI and in the next weeks I want to rewrite them."}, {"post_id": 12779, "ts": "2026-06-20T21:51:27Z", "hours": 0.4667, "text": "Rewrite of ordination and update of elencation(). Sto al momento riscrivendo la funzione ordination() e ho aggiornato elencation(), ho deciso di cancellare gran parte del corpo di ordination() per non riscrivere la logica per l’ordinamento delle parole che già fornisce elencation() entro stasera o domani credo di caricare i nuovi aggiornamenti su GitHub./I’m rewriting the function ordination() and I’ve already updated the function elencation(), I’ve just decided to erase most of the body of the function ordination() so I don’t have to rewrite the same logic of ordination that the function elencation() already have, I think today or tomorrow to load the new update on GitHub."}]...
|
Title: Catalog by @Gabinan890 | Stardance
Devlogs Title: Catalog by @Gabinan890 | Stardance
Devlogs:
Rewrite of ordination and update of elencation(). Sto al momento riscrivendo la funzione ordination() e ho aggiornato elencation(), ho deciso di cancellare gran parte del corpo di ordination() per non riscrivere la logica per l’ordinamento delle parole che già fornisce elencation() entro stasera o domani credo di caricare i nuovi aggiornamenti su GitHub./I’m rewriting the function ordination() and I’ve already updated the function elencation(), I’ve just decided to erase most of the body of the function ordination() so I don’t have to rewrite the same logic of ordination that the function elencation() already have, I think today or tomorrow to load the new update on GitHub.
Update of the file README.md A seguito dell’aggiornamento della funzione elencation() e della funzione ordination() ho caricato tutti gli aggiornamenti sia su GitHub che su Pypi. Ho riscritto il file README.md che avevo generato con l’uso di AI per renderlo più chiaro e per avvicinarmi all’obbiettivo di eliminare tutto il codice scritto con AI, ho oscurato temporaneamente nel file README le funzioni order_shortest e order_longer poichè sono state interamente generate con AI e nelle prossime settimane punterò a riscriverle./After the update of the functions elencation() and ordination() I’ve loaded all the updates on GitHub and Pypi. For make the documentation more clear I’ve rewrite the file README.md that I’ve already generated with AI but it wasn’t so clear, I’ve hidden the functions order_shortest and order_longer cause they are generate with AI and in the next weeks I want to rewrite them.
Update of unique_words() Ho aggiornato la funzione unique_words() nonostante fosse già stata riscritta da me diversi aggiornamenti fa, ora il codice è più leggibile e devo solo ultimare gli ultimi ritocchi per la gestione del parametro text che funziona solo se il parametro text è su True ma per il resto la funzione non dà problemi ed è completamente funzionante./I’ve updated the function unique_words() even if I’ve already rewrite some update ago but now the function is more readable and I’ve only to ultimate some thingh to improve the text parameter that at the moment works only if ord is on True.
I’ve updated the comments in the code and I’ve done some fix of unique_words() Ho aggiornato i commenti del codice ora sono bilingue bhe spero siano comprensibili ho preferito scrivere qualcosa di comprensibile seppur con delle imperfezioni piuttosto che affidare tutto a dei traduttori automatici o all’AI, a breve aggiornero anche il sito web su Git Pages. Ho anche sistemato alcuni errori che avevo tralasciato nella funzione unique_words()./I’ve updated the comments in the code well I’m not so good in english but I’v prefered to write something of readable but with some imperfection instead of using some automatic translator or using AI, I’m working on update the web site on Git Pages. Also I’ve fixed some little bug in the function unique_words().
Documentation update Ho aggiornato la documentazione ora il file readme è bilingue. :)/I’ve updated the documentation now it is bilanguage. :)
I’ve updated the README Now the README have two separate section, one for the documentation in italian and one for the english documetation.
Ships:
Con la mia libreria di python puoi ordinare e manipolare liste di stringhe, sono orgoglioso del mio lavoro anche se non è perfetto l’ho fatto io ho eliminato il lavoro dell’AI dal mio lavoro. puoi facilmente consultare il file README su git hub per vedere esempi pratici. :)/Well with my library of python you can manipulate list of string, I’m mso proud of my work even if it’s not perfect cause I’ve done all by my self. you can easly read the README file in github for some example. :)...
|
1793130930.0781431
|
1793217330.0781431
|
|
21853
|
Huffman Compressor by @devlsx | Stardance
|
devlsx
|
1
|
5.0
|
53
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T06:50:44Z", "hours": 5.0, "multiplier": 13.41, "payout": 53, "blessing": "neutral", "text": "A from-scratch Huffman file compressor in Rust with a visual terminal UI that draws the tree, plus a live WebAssembly demo.", "repo": "https://github.com/AlexanderGese/Huffman-Compressor", "demo": "https://alexandergese.github.io/Huffman-Compressor/"}]...
|
[{"post_id": 11800, "ts": "202 [{"post_id": 11800, "ts": "2026-06-19T06:23:48Z", "hours": 4.7264, "text": "Spent tonight building a little Huffman compressor in Rust. The idea’s old and simple: count how often each byte shows up in a file, build a binary tree where the common bytes sit near the top, and give them the shortest bit-codes. More skewed the data, better it squeezes."}]...
|
Title: Huffman Compressor by @devlsx | Stardance
Title: Huffman Compressor by @devlsx | Stardance
Devlogs:
Spent tonight building a little Huffman compressor in Rust. The idea’s old and simple: count how often each byte shows up in a file, build a binary tree where the common bytes sit near the top, and give them the shortest bit-codes. More skewed the data, better it squeezes.
Ships:
A from-scratch Huffman file compressor in Rust with a visual terminal UI that draws the tree, plus a live WebAssembly demo....
|
1792878751.684215
|
1793742751.684215
|
|
21865
|
TouYube by @Thomas_Harker | Stardance
|
Thomas_Harker
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T20:19:32Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A video downloader for youtube, it will be very useful for the social media ban in certain countries", "repo": "https://github.com/Goldcrescent/Youtube-video-search-and-downloader", "demo": "https://github.com/Goldcrescent/TouYube/releases/tag/Release"}]...
|
[{"post_id": 11519, "ts": "202 [{"post_id": 11519, "ts": "2026-06-18T20:16:05Z", "hours": 1.3336, "text": "A youtube video searcher and downloader, I made it search for videos and have a link afterwards, but I also made it so you can enter the link you want and download them into the project directory"}]...
|
Title: TouYube by @Thomas_Harker | Stardance
Devl Title: TouYube by @Thomas_Harker | Stardance
Devlogs:
A youtube video searcher and downloader, I made it search for videos and have a link afterwards, but I also made it so you can enter the link you want and download them into the project directory
Ships:
A video downloader for youtube, it will be very useful for the social media ban in certain countries...
|
1793267541.6457162
|
1793353941.6457162
|
|
21869
|
Create: Stealth & Security (MC Mod) by @xFN10x Create: Stealth & Security (MC Mod) by @xFN10x | Stardance...
|
xFN10x
|
1
|
89.0
|
1317
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-30T21:23:49Z", "hours": 89.0, "multiplier": 18.49, "payout": 1317, "blessing": "neutral", "text": "Create: Stealth & Security is a Minecraft mod for 1.21.1 Neoforge that I decided to make because I like being able to spy on people… This is the first neoforge mod I’ve developed & published. I would reccomend playing this with the modrinth app if you already have it, with JEI and Jade .", "repo": "https://github.com/xFN10x/Create-Security", "demo": "https://modrinth.com/mod/create-security"}]...
|
[{"post_id": 37800, "ts": "202 [{"post_id": 37800, "ts": "2026-07-30T18:53:36Z", "hours": 3.5239, "text": "devlog 20, normal time now vid link: https://youtu.be/H_7fsU2BupI alright, im probably gonna ship soon. so i focaused on some touch up features. recipes everything has recipes now, even adding the finiranium sensor recipe that i forgot last update. summaries everything also has shift summaries, so now people can actually learn how to use the mod I also added Nether Glass, right now it’s only used for the chunk detector recipe, but it will be able to block end sickness later on. I’ll be mainly prioritizing my other project https://stardance.hackclub.com/projects/336 after this ship, but ill probably work on this a bit more."}, {"post_id": 37241, "ts": "2026-07-29T19:56:10Z", "hours": 7.4528, "text": "devlog 19… these features are quite difficult to fine tune video cause stardance doesn’t work alright so 8 hours again… this time i only did one feature, (and maybe some bug fixes…) The chunk detector is finally done! Now you can drop a log in, and try to catch that person stealing your diamonds every night! formatting and other things aswell I also fixed some formatting for things like tooltips, so they are much nicer to look at now. I also made the log screen bigger. devlog 18… these features are quite difficult to fine tune alright so 8 hours again… this time i only did one feature, (and maybe some bug fixes…) The chunk detector is finally done! Now you can drop a log in, and try to catch that person stealing your diamonds every night! formatting and other things aswell I also fixed some formatting for things like tooltips, so they are much nicer to look at now. I also made the log screen bigger. oh yea stress The two kinetic blocks; the Laser Diode, and Chunk detector also actually consume stress units now, actually the laser diode doesn’t yet… but it will… and ill increase the speed req of it. oh yea stress The two kinetic blocks; the Laser Diode, and Chunk detector also actually consume stress units now, actually the laser diode doesn’t yet… but it will… and ill increase the speed req of it. now ill add a feature to obfuscate a players skin if they are invis."}, {"post_id": 34939, "ts": "2026-07-26T01:48:46Z", "hours": 8.9261, "text": "devlog 18… 9 hours 😅 ok so i normally would have devlogged after i got the ui done… but this ended up taking more time than i thought… I finished the ui of the log, it took most of the time, and i also kinda did everything… ui is done, i added some helpful utilities for loggable blocks, you can log things, omg this took so long, but there is really nothing else to say 😔..yet there are still a bunch of random things i need to fix"}, {"post_id": 33841, "ts": "2026-07-24T02:38:37Z", "hours": 2.9106, "text": "devlog 17 or 16, im tired alright, i put the chunk detector aside, and ive done a bunch of work on logs. Mostly just me trying to figure out how the hell Create’s menus work because they have no dev wiki 😔… anyways, the log now has a texture ive done twice trying to figure out how to make it look like a piece of paper, and i also make a screen; (ignore how its using the old texture.) The log is gonna be usable between different blocks as i said, and each entry is gonna have a target player or entity, message, and timestamp. And i might also add the source block. I also forgot that i forgot to add a recipe to the finiranium detector…"}, {"post_id": 33047, "ts": "2026-07-22T16:51:27Z", "hours": 1.8803, "text": "starting to work on the Chunk Detector. I’ve started adding the new block, the Chunk Detector, which will log entries and exits of each entity in a chunk. It will log these in a new item, the Log. You will be able to use it to see different timed events of different blocks, like the Advanced Sight Sensor when i add it."}, {"post_id": 27906, "ts": "2026-07-13T20:38:41Z", "hours": 0.8375, "text": "Finished the finiranium sensor, and added some config values about username obfuscation when invisible. (Got the idea from seeing it in a lifesteal video) Ill release version 0.1.1 now."}, {"post_id": 27770, "ts": "2026-07-13T16:49:07Z", "hours": 4.0006, "text": "i swear ive made this devlog 3 times already… The mod is now on modrinth , and curseforge . I would reccomend trying it out, as i want to make sure its balenced enough for its beta. Now that its on modrinth, I’ve been working on some updates. Currently im adding the Finiranium Sensor, whichs shows you when Finiranium is nearby; (ignore the debug outline in the screenshot.) Im also planning on adding the next blocks & items before the beta: Chunk Detector : Detects when Players/Entities enter a chunk Advanced Sight Sensor/Laser Diode Keycard stuff Smarter Observer (wip name) : Logs players’ interactions with a block"}, {"post_id": 21712, "ts": "2026-07-03T20:07:05Z", "hours": 0.5264, "text": "I’ve finished setting up my modrinth page, (and curseforge page,) and now im waiting for review. Ill pause development while i wait for it to be put up on at least modrinth. https://modrinth.com/mod/create-security https://www.curseforge.com/minecraft/mc-mods/create-stealth-security/preview"}, {"post_id": 20920, "ts": "2026-07-02T17:15:26Z", "hours": 1.5025, "text": "con-figured i should make some more configs before first version I’ve made a bunch of configurable options, there are definity more i could add, but this is good enough for the first alpha version. Now i just need to finish the modrinth page, and add a readme."}, {"post_id": 20492, "ts": "2026-07-02T03:00:10Z", "hours": 3.5531, "text": "recipes, recipes, come get your recipes here now everything has a recipe! ive also added some more items to make these recipes more intuitive. Ill try to show some recipes in the attachments. Next im gonna make a server config for stuff like end sickness, and then im gonna raise the default for end sickness to make it a bit easier to avoid. ill release an alpha version for testing soon, its not gonna be my ship though. (also, the missing texture thing are the empty finiranium goggles, idk why they dont work)"}, {"post_id": 19629, "ts": "2026-07-01T00:26:20Z", "hours": 2.8147, "text": "I’ve added some QoL stuff, I added a feature where you can adjust the eye offset of the finiranium goggles, its a bit glitchly right now, but its fine. I’ve also added a config, for now only for the client. So far there is only one setting for the flicker of a laser. (you can see it at its default in the gif)"}, {"post_id": 19376, "ts": "2026-06-30T17:44:36Z", "hours": 5.0992, "text": "now the laser works on contraptions. The laser diode now visually work on contraptions… but due to create limitations, they don’t actually function… anyways, im gonna make a ponder now, then ill probably make a config. Ive also fixed a bunch of issues with the rendering of the lasers. And i also fixed an issue with me not knowing that the block entity renderers where shared across all of them, therefore the lasers would change length weridly from other lasers…"}, {"post_id": 18747, "ts": "2026-06-29T22:47:43Z", "hours": 3.5692, "text": "the laser renders properly. Now the laser sensor can actually shoot a proper laser. Also I learned how to actually spell laser. Now, I just need to do i bit more fine tuning, and then i need to make the thing actually function. And then i need to add the contraption behaviour… which hopefully wont be to hard… yay the video upload wont work again! heres a link to it instead https://file.garden/ZPu7YidXf2vX5nJR/Screen%20Recording%202026-06-29%20192129.mp4 (i was trying hackclub cdn, but i think thats the issue)"}, {"post_id": 18022, "ts": "2026-06-29T00:10:21Z", "hours": 5.8306, "text": "im starting to add lazer diodes, they will let you detect when something is blocking a lazer. Kinda like a sight sensor, but no sight. Ive been trying to figure out how to make the lazer, and ive got a good start as you can see. In the second image you can see the lazer, (left,) and the receiver you get from wrenching it, (right.) With the advanced versions you will only need one lazer."}, {"post_id": 15055, "ts": "2026-06-24T13:34:42Z", "hours": 2.795, "text": "Ive added a new liquid: Liquid Finiranium. Its going to be used to refil electric camo. Also, since liquid finiranium is so extremely deadly, im gonna raise the threshold for getting end sickness, and im also gonna add ways to prevent end sickness"}, {"post_id": 13437, "ts": "2026-06-22T00:39:18Z", "hours": 4.0725, "text": "End sickness is now implemented, you get it from being near finiranium, or having it in your inventory. In the attached video, (recorded before i added the inventory sickening,) You can see how it works, you can actually barely survive it if you have low hunger, but if you heal to a certain point, depending on the level, it hurts you, also depending on the level. Next features coming up: Electric Camo & Entity Sensors Also, this video is a bit old, so some of the other things i added will be in future devlogs. OK I SWEAR THIS VIDEO WILL NOT WORK, YOU DONT GET IT, SORRY"}, {"post_id": 12070, "ts": "2026-06-19T18:06:28Z", "hours": 0.3258, "text": "now you can see invis entities! im imagining a really cool stealth mission being done with this mod… especially since you can see people wearing them in darkness"}, {"post_id": 11975, "ts": "2026-06-19T15:32:56Z", "hours": 0.6133, "text": "i updated the goggles model, and made them glow in the dark. I also finished the post processing effects that happen when you put them on. I still need to make invisible entities visible with them on."}, {"post_id": 11945, "ts": "2026-06-19T14:12:31Z", "hours": 1.0397, "text": "I’ve actually added the finigoggles item, and i made a custom model for them too. right now im working on making a custom renderer to recreate kinda what the metal gear solid 1 goggles look like."}, {"post_id": 11596, "ts": "2026-06-18T21:41:56Z", "hours": 27.3147, "text": "alright, i was not planning to put this on stardance, but ive decided to. (ughh..) time to start writing about the past 3 days day 1: I started working on setup, i have never actually make a create addon, or a neoforge addon (well, ive kinda experimented with neoforge) so it took me a bit I created the model for the first block; (1st attach,) The Sight Sensor. It outputs a redstone signal depending on the distance an entity is at when looking at it. (2nd attach is the ponder, that i made later) day 2: I actually implemented the sight sensor, and finished it up. I added a keycard item aswell (planned for something,) and i made the creative tab (attach 3) day 3: i added the functionality for sight sensors on contraptions, and i added functionality to make them activate when looking at each other, so you can basically make wireless redstone. I also added Finiranium & Finiranium Ore. Finiranium is a new material im adding to the mod, it can give you end sickness if you are around it to much, and you will be able to use it to make devices like entity detection goggles. (lets you see invis entities.) day 4: I did more work on finiranium, and i gave it a cool name. It can also generate in the end now. (attach 4 & 5) I also added End Sickness, which changes your hunger bar, and heart icons. It will split your hunger, and health bars by a certain amount depending on the level. day 5 & 6 (today) I’ve been doing a lot of work looking at minecraft’s rendering, trying to make some sort of effects for the goggles. I did a lot of work with post processing, and other rendering. However, i think i figured something out. Since it appears that I’ve hit my attachment cap, ill post images of me working on this soon."}]...
|
Title: Create: Stealth & Security (MC Mod) by Title: Create: Stealth & Security (MC Mod) by @xFN10x | Stardance
Devlogs:
alright, i was not planning to put this on stardance, but ive decided to. (ughh..) time to start writing about the past 3 days day 1: I started working on setup, i have never actually make a create addon, or a neoforge addon (well, ive kinda experimented with neoforge) so it took me a bit I created the model for the first block; (1st attach,) The Sight Sensor. It outputs a redstone signal depending on the distance an entity is at when looking at it. (2nd attach is the ponder, that i made later) day 2: I actually implemented the sight sensor, and finished it up. I added a keycard item aswell (planned for something,) and i made the creative tab (attach 3) day 3: i added the functionality for sight sensors on contraptions, and i added functionality to make them activate when looking at each other, so you can basically make wireless redstone. I also added Finiranium & Finiranium Ore. Finiranium is a new material im adding to the mod, it can give you end sickness if you are around it to much, and you will be able to use it to make devices like entity detection goggles. (lets you see invis entities.) day 4: I did more work on finiranium, and i gave it a cool name. It can also generate in the end now. (attach 4 & 5) I also added End Sickness, which changes your hunger bar, and heart icons. It will split your hunger, and health bars by a certain amount depending on the level. day 5 & 6 (today) I’ve been doing a lot of work looking at minecraft’s rendering, trying to make some sort of effects for the goggles. I did a lot of work with post processing, and other rendering. However, i think i figured something out. Since it appears that I’ve hit my attachment cap, ill post images of me working on this soon.
I’ve actually added the finigoggles item, and i made a custom model for them too. right now im working on making a custom renderer to recreate kinda what the metal gear solid 1 goggles look like.
i updated the goggles model, and made them glow in the dark. I also finished the post processing effects that happen when you put them on. I still need to make invisible entities visible with them on.
now you can see invis entities! im imagining a really cool stealth mission being done with this mod… especially since you can see people wearing them in darkness
End sickness is now implemented, you get it from being near finiranium, or having it in your inventory. In the attached video, (recorded before i added the inventory sickening,) You can see how it works, you can actually barely survive it if you have low hunger, but if you heal to a certain point, depending on the level, it hurts you, also depending on the level. Next features coming up: Electric Camo & Entity Sensors Also, this video is a bit old, so some of the other things i added will be in future devlogs. OK I SWEAR THIS VIDEO WILL NOT WORK, YOU DONT GET IT, SORRY
Ive added a new liquid: Liquid Finiranium. Its going to be used to refil electric camo. Also, since liquid finiranium is so extremely deadly, im gonna raise the threshold for getting end sickness, and im also gonna add ways to prevent end sickness
im starting to add lazer diodes, they will let you detect when something is blocking a lazer. Kinda like a sight sensor, but no sight. Ive been trying to figure out how to make the lazer, and ive got a good start as you can see. In the second image you can see the lazer, (left,) and the receiver you get from wrenching it, (right.) With the advanced versions you will only need one lazer.
the laser renders properly. Now the laser sensor can actually shoot a proper laser. Also I learned how to actually spell laser. Now, I just need to do i bit more fine tuning, and then i need to make the thing actually function. And then i need to add the contraption behaviour… which hopefully wont be to hard… yay the video upload wont work again! heres a link to it instead https://file.garden/ZPu7YidXf2vX5nJR/Screen%20Recording%202026-06-29%20192129.mp4 (i was trying hackclub cdn, but i think thats the issue)
now the laser works on contraptions. The laser diode now visually work on contraptions… but due to create limitations, they don’t actually function… anyways, im gonna make a ponder now, then ill probably make a config. Ive also fixed a bunch of issues with the rendering of the lasers. And i also fixed an issue with me not knowing that the block entity renderers where shared across all of them, therefore the lasers would change length weridly from other lasers…
I’ve added some QoL stuff, I added a feature where you can adjust the eye offset of the finiranium goggles, its a bit glitchly right now, but its fine. I’ve also added a config, for now only for the client. So far there is only one setting for the flicker of a laser. (you can see it at its default in the gif)
recipes, recipes, come get your recipes here now everything has a recipe! ive also added some more items to make these recipes more intuitive. Ill try to show some recipes in the attachments. Next im gonna make a server config for stuff like end sickness, and then im gonna raise the default for end sickness to make it a bit easier to avoid. ill release an alpha version for testing soon, its not gonna be my ship though. (also, the missing texture thing are the empty finiranium goggles, idk why they dont work)
con-figured i should make some more configs before first version I’ve made a bunch of configurable options, there are definity more i could add, but this is good enough for the first alpha version. Now i just need to finish the modrinth page, and add a readme.
I’ve finished setting up my modrinth page, (and curseforge page,) and now im waiting for review. Ill pause development while i wait for it to be put up on at least modrinth. https://modrinth.com/mod/create-security https://www.curseforge.com/minecraft/mc-mods/create-stealth-security/preview
i swear ive made this devlog 3 times already… The mod is now on modrinth , and curseforge . I would reccomend trying it out, as i want to make sure its balenced enough for its beta. Now that its on modrinth, I’ve been working on some updates. Currently im adding the Finiranium Sensor, whichs shows you when Finiranium is nearby; (ignore the debug outline in the screenshot.) Im also planning on adding the next blocks & items before the beta: Chunk Detector : Detects when Players/Entities enter a chunk Advanced Sight Sensor/Laser Diode Keycard stuff Smarter Observer (wip name) : Logs players’ interactions with a block
Finished the finiranium sensor, and added some config values about username obfuscation when invisible. (Got the idea from seeing it in a lifesteal video) Ill release version 0.1.1 now.
starting to work on the Chunk Detector. I’ve started adding the new block, the Chunk Detector, which will log entries and exits of each entity in a chunk. It will log these in a new item, the Log. You will be able to use it to see different timed events of different blocks, like the Advanced Sight Sensor when i add it.
devlog 17 or 16, im tired alright, i put the chunk detector aside, and ive done a bunch of work on logs. Mostly just me trying to figure out how the hell Create’s menus work because they have no dev wiki 😔… anyways, the log now has a texture ive done twice trying to figure out how to make it look like a piece of paper, and i also make a screen; (ignore how its using the old texture.) The log is gonna be usable between different blocks as i said, and each entry is gonna have a target player or entity, message, and timestamp. And i might also add the source block. I also forgot that i forgot to add a recipe to the finiranium detector…
devlog 18… 9 hours 😅 ok so i normally would have devlogged after i got the ui done… but this ended up taking more time than i thought… I finished the ui of the log, it took most of the time, and i also kinda did everything… ui is done, i added some helpful utilities for loggable blocks, you can log things, omg this took so long, but there is really nothing else to say 😔..yet there are still a bunch of random things i need to fix
devlog 19… these features are quite difficult to fine tune video cause stardance doesn’t work alright so 8 hours again… this time i only did one feature, (and maybe some bug fixes…) The chunk detector is finally done! Now you can drop a log in, and try to catch that person stealing your diamonds every night! formatting and other things aswell I also fixed some formatting for things like tooltips, so they are much nicer to look at now. I also made the log screen bigger. devlog 18… these features are quite difficult to fine tune alright so 8 hours again… this time i only did one feature, (and maybe some bug fixes…) The chunk detector is finally done! Now you can drop a log in, and try to catch that person stealing your diamonds every night! formatting and other things aswell I also fixed some formatting for things like tooltips, so they are much nicer to look at now. I also made the log screen bigger. oh yea stress The two kinetic blocks; the Laser Diode, and Chunk detector also actually consume stress units now, actually the laser diode doesn’t yet… but it will… and ill increase the speed req of it. oh yea stress The two kinetic blocks; the Laser Diode, and Chunk detector also actually consume stress units now, actually the laser diode doesn’t yet… but it will… and ill increase the speed req of it. now ill add a feature to obfuscate a players skin if they are invis.
devlog 20, normal time now vid link: https://youtu.be/H_7fsU2BupI alright, im probably gonna ship soon. so i focaused on some touch up features. recipes everything has recipes now, even adding the finiranium sensor recipe that i forgot last update. summaries everything also has shift summaries, so now people can actually learn how to use the mod I also added Nether Glass, right now it’s only used for the chunk detector recipe, but it will be able to block end sickness later on. I’ll be mainly prioritizing my other project https://stardance.hackclub.com/projects/336 after this ship, but ill probably work on this a bit more.
Ships:
Create: Stealth & Security is a Minecraft mod for 1.21.1 Neoforge that I decided to make because I like being able to spy on people… This is the first neoforge mod I’ve developed & published. I would reccomend playing this with the modrinth app if you already have it, with JEI and Jade ....
|
1793138276.6823866
|
1793224676.6823866
|
|
21894
|
Home Lab by @java | Stardance
|
java
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T05:35:43Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a homelab where I host a single sign-on (SSO) system, a media server, and a notes app. I also run my own website and have learned how to set up and manage a reverse proxy.", "repo": "https://github.com/Java-Coffee1/Home-Lab", "demo": "https://www.javamurray.com/"}]...
|
[{"post_id": 23300, "ts": "202 [{"post_id": 23300, "ts": "2026-07-06T05:33:18Z", "hours": 4.0203, "text": "Update my confs and fix some .env vars and cleaned up alot of configs files. I alos made some backup scirpts to help with my sso sign in for my media server and outline."}, {"post_id": 17725, "ts": "2026-06-28T17:11:03Z", "hours": 0.3889, "text": "I added more things such as jellyfin openwebui outline immich a sso."}, {"post_id": 17462, "ts": "2026-06-28T07:51:33Z", "hours": 2.0925, "text": "I just added my website to the project now."}, {"post_id": 17384, "ts": "2026-06-28T04:36:06Z", "hours": 0.8803, "text": "Just got my reverse proxy working using docker swarm."}]...
|
Title: Home Lab by @java | Stardance
Devlogs:
Jus Title: Home Lab by @java | Stardance
Devlogs:
Just got my reverse proxy working using docker swarm.
I just added my website to the project now.
I added more things such as jellyfin openwebui outline immich a sso.
Update my confs and fix some .env vars and cleaned up alot of configs files. I alos made some backup scirpts to help with my sso sign in for my media server and outline.
Ships:
I built a homelab where I host a single sign-on (SSO) system, a media server, and a notes app. I also run my own website and have learned how to set up and manage a reverse proxy....
|
1793220814.6905448
|
1793307214.6905448
|
|
21895
|
My first slack bot! by @aditikhanal | Stardance
|
aditikhanal
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T22:17:14Z", "hours": 1.0, "multiplier": 1.01, "payout": 1, "blessing": "neutral", "text": "I made a slack bot that runs even when my computer is closed. I struggled with the javascript as it was a new language I had to learn.", "repo": "https://github.com/aditikhanal-wq/slackbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BCXSF9HAA"}]...
|
[{"post_id": 15330, "ts": "202 [{"post_id": 15330, "ts": "2026-06-24T22:07:40Z", "hours": 1.4606, "text": "I made my first slack bot! It has the 3 commands of a joke, the cat fact, and pong! It runs on its own!"}]...
|
Title: My first slack bot! by @aditikhanal | Stard Title: My first slack bot! by @aditikhanal | Stardance
Devlogs:
I made my first slack bot! It has the 3 commands of a joke, the cat fact, and pong! It runs on its own!
Ships:
I made a slack bot that runs even when my computer is closed. I struggled with the javascript as it was a new language I had to learn....
|
1793278062.454925
|
1793364462.454925
|
|
21906
|
Hunters Ridge Website by @LoginlikeLogan | Stardan Hunters Ridge Website by @LoginlikeLogan | Stardance...
|
LoginlikeLogan
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-02T15:24:12Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website for my neighbourhood (as requested) So I made a website for my neighbourhood so that we can take in invoices, stuff like that. I really enjoyed making this website since it is probably the first website that actually looks good… Feel free to buy any swag from the shop which is going to be released soon!", "repo": "https://github.com/Logdegret/Hunters-Ridge-Dr", "demo": "https://www.hrd.homes/"}]...
|
[{"post_id": 19569, "ts": "202 [{"post_id": 19569, "ts": "2026-06-30T22:03:46Z", "hours": 0.3128, "text": "Finishing Stuff Added Recommended contractors and more shop swag, maybe you’ll buy?"}, {"post_id": 19555, "ts": "2026-06-30T21:39:17Z", "hours": 1.9608, "text": "I have the website up and running! Picked this back up after a few weeks away. The bones were already there — the homepage, the payment modal, the photo carousel — but a few things were bugging me and one thing was just flat broken.The mobile menu was completely dead. Tapping the hamburger did nothing. Turned out there was a JavaScript crash happening before the menu button ever got its event listener. The carousel code was trying to update a .carousel-count element that doesn’t exist in the HTML, which threw a null reference error and silently killed the rest of the script. Embarrassing, but easy to fix once you find it.While I was in there I rethought the menu itself. It was opening as a dropdown that floated over the hero text — looked messy and felt cheap on mobile. Replaced it with a proper side drawer that slides in from the right, with a blurred backdrop behind it. The hamburger icon also animates into an × when it’s open. Much cleaner.The images were way too big. The six home photos in the carousel were raw PNGs — 1.6 to 4.7 MB each, nearly 20 MB total. On a phone with a decent connection that’s a noticeable wait. Converted them all to JPEG at 78% quality, capped at 1400px wide. Total came out to about 2.6 MB — roughly 87% lighter. Quality looks identical at carousel size.Also added a neighborhood store section. A dark card with the community crest, a tagline, and a link to the Printify store. Lives between the “About” section and the contact footer. Kept the same design language as the rest of the site.Wrote a README too, which the repo embarrassingly didn’t have."}, {"post_id": 11499, "ts": "2026-06-18T19:51:55Z", "hours": 0.72, "text": "Working on a website for my neighborhood. lmk how it looks!"}]...
|
Title: Hunters Ridge Website by @LoginlikeLogan | Title: Hunters Ridge Website by @LoginlikeLogan | Stardance
Devlogs:
Working on a website for my neighborhood. lmk how it looks!
I have the website up and running! Picked this back up after a few weeks away. The bones were already there — the homepage, the payment modal, the photo carousel — but a few things were bugging me and one thing was just flat broken.The mobile menu was completely dead. Tapping the hamburger did nothing. Turned out there was a JavaScript crash happening before the menu button ever got its event listener. The carousel code was trying to update a .carousel-count element that doesn’t exist in the HTML, which threw a null reference error and silently killed the rest of the script. Embarrassing, but easy to fix once you find it.While I was in there I rethought the menu itself. It was opening as a dropdown that floated over the hero text — looked messy and felt cheap on mobile. Replaced it with a proper side drawer that slides in from the right, with a blurred backdrop behind it. The hamburger icon also animates into an × when it’s open. Much cleaner.The images were way too big. The six home photos in the carousel were raw PNGs — 1.6 to 4.7 MB each, nearly 20 MB total. On a phone with a decent connection that’s a noticeable wait. Converted them all to JPEG at 78% quality, capped at 1400px wide. Total came out to about 2.6 MB — roughly 87% lighter. Quality looks identical at carousel size.Also added a neighborhood store section. A dark card with the community crest, a tagline, and a link to the Printify store. Lives between the “About” section and the contact footer. Kept the same design language as the rest of the site.Wrote a README too, which the repo embarrassingly didn’t have.
Finishing Stuff Added Recommended contractors and more shop swag, maybe you’ll buy?
Ships:
I made a website for my neighbourhood (as requested) So I made a website for my neighbourhood so that we can take in invoices, stuff like that. I really enjoyed making this website since it is probably the first website that actually looks good… Feel free to buy any swag from the shop which is going to be released soon!...
|
1792878663.7472272
|
1793742663.7472272
|
|
21911
|
Druids (RPG Series Plus) by @Nutties | Stardance
|
Nutties
|
1
|
2.33
|
14
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-02T11:43:19Z", "hours": 1.0, "multiplier": 11.24, "payout": 14, "blessing": "neutral", "text": "1.2 Reduced Mass Entanglement cast time Buffed some skill tree skills Added new spell passive to Moon Staff and fixed its tags", "repo": "https://github.com/NuttiesNuts/druids", "demo": "https://modrinth.com/mod/druids/"}]...
|
[{"post_id": 28778, "ts": "202 [{"post_id": 28778, "ts": "2026-07-15T08:17:38Z", "hours": 1.335, "text": "Next feature, although small, it’s an important one to get this mod 1 step closer to the level of polish I want to achieve, MORE EFFECTS ! This time I wanted to make something similar to the freezing overlay you get when you get stuck in powdered snow but for Fatal Poison. I thought it would be easy since it should just be copying the freezing rendering but my struggle was in how I would register it. I had found a mod that added just what I wanted, an overlay applied when a status effect is applied, however of course it was on a different Minecraft version. I scrambled for 2 hours researching classes, trying to find stuff that didn’t really exist in Fabric API 1.21.1. But then I remembered that the Fabric Docs exist. 💀 So the issue was that in 1.21.1 Fabric registers HUD elements not using a specific class but rather with an event: HudRenderCallback.EVENT.register((context,tickDeltaManager) -> {}}); Later versions use a much more modern? way of registering stuff, ex.: HudElementRegistry.attachElementAfter(VanillaHudElements.MISC_OVERLAYS, Identifier.of(MOD_ID, \"overlay\"), ModClient::ExtractOverlay);"}, {"post_id": 20711, "ts": "2026-07-02T11:38:30Z", "hours": 1.2631, "text": "Coming back to this project is really fun. Picking things where I let off before I paused development I have some stuff I need to work on namely some bug fixes and small new features but most importantly balancing the class with the other classes from the RPG Series For now I have rebalanced some spells and fixed some incorrect item tags."}]...
|
Title: Druids (RPG Series Plus) by @Nutties | Star Title: Druids (RPG Series Plus) by @Nutties | Stardance
Devlogs:
Coming back to this project is really fun. Picking things where I let off before I paused development I have some stuff I need to work on namely some bug fixes and small new features but most importantly balancing the class with the other classes from the RPG Series For now I have rebalanced some spells and fixed some incorrect item tags.
Next feature, although small, it’s an important one to get this mod 1 step closer to the level of polish I want to achieve, MORE EFFECTS ! This time I wanted to make something similar to the freezing overlay you get when you get stuck in powdered snow but for Fatal Poison. I thought it would be easy since it should just be copying the freezing rendering but my struggle was in how I would register it. I had found a mod that added just what I wanted, an overlay applied when a status effect is applied, however of course it was on a different Minecraft version. I scrambled for 2 hours researching classes, trying to find stuff that didn’t really exist in Fabric API 1.21.1. But then I remembered that the Fabric Docs exist. 💀 So the issue was that in 1.21.1 Fabric registers HUD elements not using a specific class but rather with an event: HudRenderCallback.EVENT.register((context,tickDeltaManager) -> {}}); Later versions use a much more modern? way of registering stuff, ex.: HudElementRegistry.attachElementAfter(VanillaHudElements.MISC_OVERLAYS, Identifier.of(MOD_ID, "overlay"), ModClient::ExtractOverlay);
Ships:
1.2 Reduced Mass Entanglement cast time Buffed some skill tree skills Added new spell passive to Moon Staff and fixed its tags...
|
1793138084.9923196
|
1793224484.9923196
|
|
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....
|
1793231290.7940843
|
1793317690.7940843
|
|
21939
|
Astro Leap by @akshayK | Stardance
|
akshayK
|
1
|
8.0
|
18
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T22:55:19Z", "hours": 8.0, "multiplier": 2.18, "payout": 18, "blessing": "neutral", "text": "I made the game, Astro Leap. This is an infinite platformer style game, where you can control an alien as it jumps from platform to platform. For this game, I hand-drew the assets on a piece of paper and cut them out using a sprite sheet cutter software. I’m proud of this project, because it is one of my first games using Godot, and the player script was hard to code. Some trouble I ran into was exporting the project, because it wouldn’t run after the export was compiled, so I spent a few days on trying different ways to get it to work. It finally worked when I downloaded the export libraries from the Godot website and used them instead of automatically installing them. Overall, I learned a lot from making this project and enjoyed making the game and drawing the assets. Hope you like it as well!", "repo": "https://github.com/AkshayK-960/AstroLeap", "demo": "https://akshay960.itch.io/astro-leap"}]...
|
[{"post_id": 21805, "ts": "202 [{"post_id": 21805, "ts": "2026-07-03T22:41:47Z", "hours": 3.8228, "text": "DEVLOG 2 This is my second devlog, and I finally added my hand-drawn assets! Another thing was, continuing on my previous devlog, I fixed a bug in my physics where the player would float and not actually jump. I added a monospace font for all the text, centered the score and changed the colors of the font so the text is more readable. I also drew some background images and added a parallax effect to them, so it looked more immersive. However, one issue I ran into was that they looked too bright, especially when the screen and player dims (because it looks like it is a higher altitude), so i made everything under one node and made it proportional to the dimming of the sky. I published my project on itch.io, and you can play it here: https://akshay960.itch.io/astro-leap"}, {"post_id": 11552, "ts": "2026-06-18T20:55:51Z", "hours": 4.3272, "text": "Devlog 1 - Astro Leap I’m making an infinite platformer in Godot, and I just finished coding the player logic for jumping and moving. I added acceleration and friction to the code, so it would move smoothly and make the game more challenging. I also make it so you can jump onto a platform directly from under it, and land on the platform. Although this was a bit tricky to implement, I found that using the one way collisions in Godot helped me solve this problem. I’m currently using placeholder images, and I will change them in the future."}]...
|
Title: Astro Leap by @akshayK | Stardance
Devlogs Title: Astro Leap by @akshayK | Stardance
Devlogs:
Devlog 1 - Astro Leap I’m making an infinite platformer in Godot, and I just finished coding the player logic for jumping and moving. I added acceleration and friction to the code, so it would move smoothly and make the game more challenging. I also make it so you can jump onto a platform directly from under it, and land on the platform. Although this was a bit tricky to implement, I found that using the one way collisions in Godot helped me solve this problem. I’m currently using placeholder images, and I will change them in the future.
DEVLOG 2 This is my second devlog, and I finally added my hand-drawn assets! Another thing was, continuing on my previous devlog, I fixed a bug in my physics where the player would float and not actually jump. I added a monospace font for all the text, centered the score and changed the colors of the font so the text is more readable. I also drew some background images and added a parallax effect to them, so it looked more immersive. However, one issue I ran into was that they looked too bright, especially when the screen and player dims (because it looks like it is a higher altitude), so i made everything under one node and made it proportional to the dimming of the sky. I published my project on itch.io, and you can play it here: https://akshay960.itch.io/astro-leap
Ships:
I made the game, Astro Leap. This is an infinite platformer style game, where you can control an alien as it jumps from platform to platform. For this game, I hand-drew the assets on a piece of paper and cut them out using a sprite sheet cutter software. I’m proud of this project, because it is one of my first games using Godot, and the player script was hard to code. Some trouble I ran into was exporting the project, because it wouldn’t run after the export was compiled, so I spent a few days on trying different ways to get it to work. It finally worked when I downloaded the export libraries from the Godot website and used them instead of automatically installing them. Overall, I learned a lot from making this project and enjoyed making the game and drawing the assets. Hope you like it as well!...
|
1793299714.4713702
|
1793386114.4713702
|
|
21956
|
Bento Box by @byashas0528 | Stardance
|
byashas0528
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T20:43:35Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a small bento box styled game which makes players place pixel art food in a bento box to score points! Art - https://azuna-pixels.itch.io/free-food-icons", "repo": "https://github.com/blackyoshi21825/Bento_Box", "demo": "https://bento-box-brown.vercel.app/"}]...
|
[{"post_id": 20272, "ts": "202 [{"post_id": 20272, "ts": "2026-07-01T20:27:14Z", "hours": 0.8081, "text": "Added Arrow Support to game Added Smoother Animations"}, {"post_id": 14682, "ts": "2026-06-23T21:27:59Z", "hours": 2.58, "text": "Done today: JS files Sprite bugs Still need to do: Make the game actually hard(yes, this is a rage game)"}, {"post_id": 11563, "ts": "2026-06-18T21:03:11Z", "hours": 2.1944, "text": "Started on a game where players use ingredients to make food in a bento box style way! Done today: -HTML File -CSS -Database -Assets(Borrowed them from itch.io) Still need to do -JS Files -Animation -SFX"}]...
|
Title: Bento Box by @byashas0528 | Stardance
Devl Title: Bento Box by @byashas0528 | Stardance
Devlogs:
Started on a game where players use ingredients to make food in a bento box style way! Done today: -HTML File -CSS -Database -Assets(Borrowed them from itch.io) Still need to do -JS Files -Animation -SFX
Done today: JS files Sprite bugs Still need to do: Make the game actually hard(yes, this is a rage game)
Added Arrow Support to game Added Smoother Animations
Ships:
This is a small bento box styled game which makes players place pixel art food in a bento box to score points! Art - https://azuna-pixels.itch.io/free-food-icons...
|
1793267451.6738987
|
1793353851.6738987
|
|
21970
|
artkive by @puoiyip | Stardance
|
puoiyip
|
1
|
37.0
|
570
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-20T03:44:00Z", "hours": 37.0, "multiplier": 15.39, "payout": 570, "blessing": "neutral", "text": "“artkive” is a personal website of mine that is meant to act as a fun art portfolio that features some of my favorite works that I’ve created over the past few years. Unlike a traditional (or professional) digital art portfolio, I wanted add unique features for each medium to make the pages more interesting. I’ve had this website idea for a year so I’m quite satisfied seeing it come to life! This is the first website that I created independently (after a year-long break from my last web development course), so I struggled to grasp advanced web development concepts. Despite this, I was introduced to various CSS properties that ended up making my website more cohesive. To see my project, simply click on the website link.", "repo": "https://github.com/puoiyip/artkive", "demo": "https://puoiyip.github.io/artkive/"}]...
|
[{"post_id": 31591, "ts": "202 [{"post_id": 31591, "ts": "2026-07-20T03:26:03Z", "hours": 1.2528, "text": "Devlog 20 FINAL devlog for real this time! I mainly worked on updating my README file and fixed bugs related to the mobile devices (I ended up scrapping a couple of features to address this issue)"}, {"post_id": 29691, "ts": "2026-07-16T19:22:22Z", "hours": 2.9294, "text": "Devlog 19 So after testing the website out on my phone, I realized that I needed to format it for mobile devices because it turned out mega wonky (see image below), which means no shipping yet! Accomplishments Removed elements that wouldn’t be effective on mobile (e.g. navbars) Added dropdown menu on the top left of all pages Adjusted text size as necessary Adjusted size of images Added vertical scroll bars to modals and horizontal scroll bar to the Videos page To-Do After making these changes, I tested my website on my phone and saw that many elements were not displaying correctly, so I am working on debugging that"}, {"post_id": 24512, "ts": "2026-07-08T03:22:49Z", "hours": 4.23, "text": "Devlog 18 (woah it’s been a while since i last made a devlog… but i’ve been slowly working on this project bit by bit this past week) Hopefully this is my last devlog before shipping! Accomplishments Added the navbar header to all the pages (and fixed a bunch of bugs associated with this change) Created a scrapbook-esque background to make my website more lively Got rid of the original horizontal navbar from the ibisPaint and Videos pages Added a home button on all the pages Added an auto-scroll effect so that when you click on a page, it’ll scroll to the main content To-Do For some reason, my website won’t deploy on GitHub… so I definitely need to figure that out"}, {"post_id": 20560, "ts": "2026-07-02T05:23:26Z", "hours": 1.0472, "text": "Devlog 17 Accomplishments Styled polaroid images and made them increase in opacity on hover Added camera and film images to make the Videos page nicer and more video-like"}, {"post_id": 19741, "ts": "2026-07-01T04:02:42Z", "hours": 2.0994, "text": "Devlog 16 Accomplishments Created polaroids of some of my favorite art to add to the background of my website (will format later) Combined the header from the home page with the ibisPaint page (though I’m coming across an error when I try to do the same with the Illustrator page) To-Do Fix bugs with Illustrator page Find a way to navigate back to the home page from the other pages (because I’ll eventually remove the navbar) Format the polaroids and have them shake on hover"}, {"post_id": 18969, "ts": "2026-06-30T04:34:07Z", "hours": 0.5281, "text": "Devlog 15 Mainly worked on cleaning up my code a bit Accomplishments Added title tags to each page (don’t know how I forgot them before) Replaced var with const (JavaScript); I finally understand why it’s better to not use var anymore Adjusted the font weight of the home page navbar To-Do Find a font that looks nice when it’s in caps log Replace the current navbar with the home page nav bar (it looks much nicer IMO) Write a real “about me” bio"}, {"post_id": 18110, "ts": "2026-06-29T03:33:43Z", "hours": 1.1136, "text": "Devlog 14 Accomplishments Photoshop and Illustrator pages Received some feedback and added two features to these pages: Tools icons on the left (no, they sadly have no function) Color picker (also has no function, but that might be an add-on later) Home page Added the “openModal()” function to all the images (yes, it was a manual process) Formatted the buttons Added a “close” icon"}, {"post_id": 17936, "ts": "2026-06-28T21:33:38Z", "hours": 2.1456, "text": "Devlog 13 Accomplishments Home page Created a modal container to view the full images on the home page Added functions that open the modal and switch to the previous/next image Other Added a transition on the navbar such that it turns dark(ish) green on hover To-Do Need to figure out if there’s an optimized way to add the openModal() function on all the images without manually adding the onclick=”” function to every < img > tag…. Also need to figure out how to close the modal by clicking outside the image without impacting how the buttons work Change the layout of the buttons"}, {"post_id": 17220, "ts": "2026-06-27T22:39:33Z", "hours": 1.8625, "text": "Devlog 12 Accomplishments Illustrator page Created the layout (which basically mirrors the Photoshop page layout) I had to put all the internal JS and CSS code used for the Photoshop page into external files (and correct them accordingly) so they can be used for Photoshop and Illustrator Videos page Uploaded my videos onto YouTube and embedded them onto the page Enabled autoplay and mute for all the videos To-Do I want to add a scrolling slideshow effect onto the videos page (also maybe make the videos loop) I have an idea to merge the upper half of the home page with the other pages to make it look nicer (which might require me to merge my JS code…)"}, {"post_id": 16715, "ts": "2026-06-27T04:44:33Z", "hours": 1.2508, "text": "Devlog 11 Accomplishments Created a GitHub repo for my project (totally forgot to do that before) and I finally understand how to use GitHub!! Added alt text to all my artworks on the Home page Added a notebook background and tabs for the “previous” and “next” buttons To-Do Find a better quality image of a notebook (at this point I might as well draw one myself) Add alt text to the images on the Photoshop and ibisPaint X pages, where the image source is constantly changing Add more flair to the ibisPaint X page"}, {"post_id": 16612, "ts": "2026-06-27T00:52:59Z", "hours": 2.825, "text": "Devlog 10 Accomplishments ibisPaint X page Finally figured out how to apply the animations to all the pages (I had to increment the degrees by 180 every time the button is clicked) Likewise, I was able to make the containers rotate counterclockwise to go to the previous page To-Do Style the page, maybe add a background image that looks like a sketchbook I want to add a little sticky note button that opens up the artist statements"}, {"post_id": 16102, "ts": "2026-06-26T05:39:09Z", "hours": 2.0844, "text": "Devlog 9 Accomplishments ibisPaint X page Uploaded all of my ibisPaint artworks onto my computer The “next” button is able to traverse all the artworks I was able to add a page flip animation (though it only works for the first page…) I learned a lot about transformations! To-Do In order to execute the home screen plan (from Devlog 8), I have to merge all my internal Javascript code into an external sheet… lots of refactoring to be done Apply the flip animation to all pages"}, {"post_id": 16020, "ts": "2026-06-26T00:27:18Z", "hours": 2.5217, "text": "Devlog 8 Accomplishments Home page Styled the buttons and added more color Created an overview section of all my art Photoshop page Added more color to the background/elements Styled the side navbar Fixed the formatting issue with some of the images Added functionality to the “art” button so that it displays the art/closes the modal To-Do Start working on the layout for the ibisPaint X works Locate, download, and upload all my ibisPaint art to my computer I want each artwork on the “overview” section to link to the full-sized artwork"}, {"post_id": 15497, "ts": "2026-06-25T05:58:04Z", "hours": 2.4789, "text": "Devlog 7 Accomplishments FINALLY changed the text of the navbar lol Added text to the icons on the homepage so users know what they represent Styled the Photoshop layout more Reincorporated the artist statements for the Photoshop page using modals Added functionality so that the modals show when “artist statement” is clicked and they will change alongside the art when “next” or “previous” are clicked To-Do I want to add more character to my pages, perhaps through more color Add a “close” button at the top of the modal Place the side navbar elements at the bottom of the container Some images appear really small, so I need to alter their size"}, {"post_id": 14892, "ts": "2026-06-24T05:40:49Z", "hours": 2.0264, "text": "Devlog 6 Accomplishments I started to design the layout for the Photoshop page (which admittedly does not resemble Photoshop…) I separated the images such that they don’t appear on the page all at once Added functionality to the “next” button to go through the images To-Do Fix the background and adjust the dimensions of the images Add functionality to the “artist statement” to display the text that I had before Make the interface better resemble Photoshop </3"}, {"post_id": 14778, "ts": "2026-06-24T00:27:24Z", "hours": 1.5639, "text": "Devlog 5 Accomplishments Added links to the other HTML files on the icons Added functionality to the buttons!! When a button is pressed, the images/links will shift (I struggled so much getting the images to rotate in the correct order…) To-Do I would like to add animations/transitions to the bottom navbar Style top navbar Finish the layout for the Photoshop page"}, {"post_id": 14206, "ts": "2026-06-23T06:20:42Z", "hours": 0.73, "text": "Devlog 4 Fixed bug with the Filtered Money project images (shown below) Added side bar to the Photoshop page"}, {"post_id": 14028, "ts": "2026-06-23T00:25:01Z", "hours": 1.3925, "text": "Devlog 3 Accomplishments Made the navigation bar horizontal Brainstormed a new idea for the layout of the Photoshop page (it will look like the Photoshop interface) Started the layout for the ibisPaint X page Created the general layout for the home page (shown below) (the images for the icons are placeholders) Began to add functionality to the home page (WIP) To-do Arrange layout for the Photoshop page Figure out how to change the content on click Style navigation bar"}, {"post_id": 13940, "ts": "2026-06-22T21:36:42Z", "hours": 2.0444, "text": "Devlog 2 I added my artist statements (which I saved in a Google Docs a while ago) for each work from Photoshop and Illustrator (I also added my Illustrator works). I imported a couple of fonts from Google Fonts and finally adjusted the sizing of the images and text. I also began brainstorming the logistics for the functionality."}, {"post_id": 11623, "ts": "2026-06-18T22:44:10Z", "hours": 0.9131, "text": "Devlog 1 Just finished planning the outline of my portfolio and uploaded my Photoshop and Illustrator works. I created an HTML file for each page I need and figured out the general color scheme I’m going for. (I will add CSS later)"}]...
|
Title: artkive by @puoiyip | Stardance
Devlogs:
D Title: artkive by @puoiyip | Stardance
Devlogs:
Devlog 1 Just finished planning the outline of my portfolio and uploaded my Photoshop and Illustrator works. I created an HTML file for each page I need and figured out the general color scheme I’m going for. (I will add CSS later)
Devlog 2 I added my artist statements (which I saved in a Google Docs a while ago) for each work from Photoshop and Illustrator (I also added my Illustrator works). I imported a couple of fonts from Google Fonts and finally adjusted the sizing of the images and text. I also began brainstorming the logistics for the functionality.
Devlog 3 Accomplishments Made the navigation bar horizontal Brainstormed a new idea for the layout of the Photoshop page (it will look like the Photoshop interface) Started the layout for the ibisPaint X page Created the general layout for the home page (shown below) (the images for the icons are placeholders) Began to add functionality to the home page (WIP) To-do Arrange layout for the Photoshop page Figure out how to change the content on click Style navigation bar
Devlog 4 Fixed bug with the Filtered Money project images (shown below) Added side bar to the Photoshop page
Devlog 5 Accomplishments Added links to the other HTML files on the icons Added functionality to the buttons!! When a button is pressed, the images/links will shift (I struggled so much getting the images to rotate in the correct order…) To-Do I would like to add animations/transitions to the bottom navbar Style top navbar Finish the layout for the Photoshop page
Devlog 6 Accomplishments I started to design the layout for the Photoshop page (which admittedly does not resemble Photoshop…) I separated the images such that they don’t appear on the page all at once Added functionality to the “next” button to go through the images To-Do Fix the background and adjust the dimensions of the images Add functionality to the “artist statement” to display the text that I had before Make the interface better resemble Photoshop </3
Devlog 7 Accomplishments FINALLY changed the text of the navbar lol Added text to the icons on the homepage so users know what they represent Styled the Photoshop layout more Reincorporated the artist statements for the Photoshop page using modals Added functionality so that the modals show when “artist statement” is clicked and they will change alongside the art when “next” or “previous” are clicked To-Do I want to add more character to my pages, perhaps through more color Add a “close” button at the top of the modal Place the side navbar elements at the bottom of the container Some images appear really small, so I need to alter their size
Devlog 8 Accomplishments Home page Styled the buttons and added more color Created an overview section of all my art Photoshop page Added more color to the background/elements Styled the side navbar Fixed the formatting issue with some of the images Added functionality to the “art” button so that it displays the art/closes the modal To-Do Start working on the layout for the ibisPaint X works Locate, download, and upload all my ibisPaint art to my computer I want each artwork on the “overview” section to link to the full-sized artwork
Devlog 9 Accomplishments ibisPaint X page Uploaded all of my ibisPaint artworks onto my computer The “next” button is able to traverse all the artworks I was able to add a page flip animation (though it only works for the first page…) I learned a lot about transformations! To-Do In order to execute the home screen plan (from Devlog 8), I have to merge all my internal Javascript code into an external sheet… lots of refactoring to be done Apply the flip animation to all pages
Devlog 10 Accomplishments ibisPaint X page Finally figured out how to apply the animations to all the pages (I had to increment the degrees by 180 every time the button is clicked) Likewise, I was able to make the containers rotate counterclockwise to go to the previous page To-Do Style the page, maybe add a background image that looks like a sketchbook I want to add a little sticky note button that opens up the artist statements
Devlog 11 Accomplishments Created a GitHub repo for my project (totally forgot to do that before) and I finally understand how to use GitHub!! Added alt text to all my artworks on the Home page Added a notebook background and tabs for the “previous” and “next” buttons To-Do Find a better quality image of a notebook (at this point I might as well draw one myself) Add alt text to the images on the Photoshop and ibisPaint X pages, where the image source is constantly changing Add more flair to the ibisPaint X page
Devlog 12 Accomplishments Illustrator page Created the layout (which basically mirrors the Photoshop page layout) I had to put all the internal JS and CSS code used for the Photoshop page into external files (and correct them accordingly) so they can be used for Photoshop and Illustrator Videos page Uploaded my videos onto YouTube and embedded them onto the page Enabled autoplay and mute for all the videos To-Do I want to add a scrolling slideshow effect onto the videos page (also maybe make the videos loop) I have an idea to merge the upper half of the home page with the other pages to make it look nicer (which might require me to merge my JS code…)
Devlog 13 Accomplishments Home page Created a modal container to view the full images on the home page Added functions that open the modal and switch to the previous/next image Other Added a transition on the navbar such that it turns dark(ish) green on hover To-Do Need to figure out if there’s an optimized way to add the openModal() function on all the images without manually adding the onclick=”” function to every < img > tag…. Also need to figure out how to close the modal by clicking outside the image without impacting how the buttons work Change the layout of the buttons
Devlog 14 Accomplishments Photoshop and Illustrator pages Received some feedback and added two features to these pages: Tools icons on the left (no, they sadly have no function) Color picker (also has no function, but that might be an add-on later) Home page Added the “openModal()” function to all the images (yes, it was a manual process) Formatted the buttons Added a “close” icon
Devlog 15 Mainly worked on cleaning up my code a bit Accomplishments Added title tags to each page (don’t know how I forgot them before) Replaced var with const (JavaScript); I finally understand why it’s better to not use var anymore Adjusted the font weight of the home page navbar To-Do Find a font that looks nice when it’s in caps log Replace the current navbar with the home page nav bar (it looks much nicer IMO) Write a real “about me” bio
Devlog 16 Accomplishments Created polaroids of some of my favorite art to add to the background of my website (will format later) Combined the header from the home page with the ibisPaint page (though I’m coming across an error when I try to do the same with the Illustrator page) To-Do Fix bugs with Illustrator page Find a way to navigate back to the home page from the other pages (because I’ll eventually remove the navbar) Format the polaroids and have them shake on hover
Devlog 17 Accomplishments Styled polaroid images and made them increase in opacity on hover Added camera and film images to make the Videos page nicer and more video-like
Devlog 18 (woah it’s been a while since i last made a devlog… but i’ve been slowly working on this project bit by bit this past week) Hopefully this is my last devlog before shipping! Accomplishments Added the navbar header to all the pages (and fixed a bunch of bugs associated with this change) Created a scrapbook-esque background to make my website more lively Got rid of the original horizontal navbar from the ibisPaint and Videos pages Added a home button on all the pages Added an auto-scroll effect so that when you click on a page, it’ll scroll to the main content To-Do For some reason, my website won’t deploy on GitHub… so I definitely need to figure that out
Devlog 19 So after testing the website out on my phone, I realized that I needed to format it for mobile devices because it turned out mega wonky (see image below), which means no shipping yet! Accomplishments Removed elements that wouldn’t be effective on mobile (e.g. navbars) Added dropdown menu on the top left of all pages Adjusted text size as necessary Adjusted size of images Added vertical scroll bars to modals and horizontal scroll bar to the Videos page To-Do After making these changes, I tested my website on my phone and saw that many elements were not displaying correctly, so I am working on debugging that
Devlog 20 FINAL devlog for real this time! I mainly worked on updating my README file and fixed bugs related to the mobile devices (I ended up scrapping a couple of features to address this issue)
Ships:
“artkive” is a personal website of mine that is meant to act as a fun art portfolio that features some of my favorite works that I’ve created over the past few years. Unlike a traditional (or professional) digital art portfolio, I wanted add unique features for each medium to make the pages more interesting. I’ve had this website idea for a year so I’m quite satisfied seeing it come to life! This is the first website that I created independently (after a year-long break from my last web development course), so I struggled to grasp advanced web development concepts. Despite this, I was introduced to various CSS properties that ended up making my website more cohesive. To see my project, simply click on the website link....
|
1793246039.4781678
|
1793332439.4781678
|
|
21971
|
Lando's Cafe by @lando498 | Stardance
|
lando498
|
1
|
3.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T22:08:38Z", "hours": 3.0, "multiplier": 2.54, "payout": 3, "blessing": "neutral", "text": "Lando’s Café is the homepage to my website hosted on my raspberry pi. I created it so I could host multiple of my web projects.", "repo": "https://github.com/Lando498/Landos-Cafe", "demo": "https://caffeinated.qzz.io/"}]...
|
[{"post_id": 12192, "ts": "202 [{"post_id": 12192, "ts": "2026-06-19T22:06:59Z", "hours": 1.0844, "text": "added links to socials on banner"}, {"post_id": 11578, "ts": "2026-06-18T21:22:16Z", "hours": 1.47, "text": "working on changing hyperlink colour"}]...
|
Title: Lando's Cafe by @lando498 | Stardance
Title: Lando's Cafe by @lando498 | Stardance
Devlogs:
working on changing hyperlink colour
added links to socials on banner
Ships:
Lando’s Café is the homepage to my website hosted on my raspberry pi. I created it so I could host multiple of my web projects....
|
1793231367.7139242
|
1793317767.7139242
|
|
21975
|
Raahat's Personal Port by @raahat | Stardance
|
raahat
|
1
|
9.0
|
34
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T21:05:49Z", "hours": 9.0, "multiplier": 3.79, "payout": 34, "blessing": "neutral", "text": "I made my very first personal portfolio, inspired by all the webOS projects here on Stardance. I struggled a lot since I haven’t used much javascript, html, and css in the past apart from the high school CS projects I worked on. I’m super happy with what I was able to come up with and I’m very eager to continue working on this and improving it as I learn more and more. I’m inspired everytime I scroll through the devlogs on this website and it just shows me how much more I can and have to learn. In my next ship, I want to make this look even more like a computer OS and add more personal flair. I always struggled with design so I have a lot of work ahead of me !", "repo": "https://github.com/RAdev-py/Raahat-s-Personal-Portfolio", "demo": "https://radev-py.github.io/Raahat-s-Personal-Portfolio/"}]...
|
[{"post_id": 22392, "ts": "202 [{"post_id": 22392, "ts": "2026-07-04T21:02:46Z", "hours": 2.4536, "text": "I just finished adding all the content so logs, images, videos and other media showing things I’ve worked on in the past. It took a really long time getting it all setup but it’s finally finished. This will be my first ship yet. Super excited !"}, {"post_id": 21512, "ts": "2026-07-03T14:41:40Z", "hours": 2.7119, "text": "Okay so this was a lot longer of a work session. I worked a lot on fixing issues with the windows and their z-indexes as well as dragging issues. I figured that the the easiest way for me to keep adding to my portfolio was through markdown so I added a way for the new windows to properly parse markdown files. I used markedjs which allows me to properly format and .md files. I also used MathJax because markedjs didn’t properly format the LaTex in the markdown. I worked on figuring out how properly display the images, videos, and other media file formats I wanted to share. I’m going to work on actually adding the content in hopefully tomorrow. I then want to start working more on the design."}, {"post_id": 19398, "ts": "2026-06-30T18:26:48Z", "hours": 1.0156, "text": "Started working on creating more folders and a way to add them without touching html. The folder creation is all based on the file array in the javascript file. I still need to work on adding small details like changing the z-index when clicking on a file and also things like how the file names are actually going to be displayed based on the option chosen."}, {"post_id": 18924, "ts": "2026-06-30T03:13:47Z", "hours": 0.9511, "text": "I wanted to work more on adding functionality to the desktop and its icons. So I added eventlisteners in JS to check for double clicks and clicks and to change the windows accordingly. I’m still learning everything as I go so progress is still slow."}, {"post_id": 12873, "ts": "2026-06-21T02:40:16Z", "hours": 1.4978, "text": "I went through the other parts of the tutorial and added a few of my own windows. I want to use this site as a place to show off any future projects so basically a personal portfolio. I worked more on the CSS and HTML as well as the JS. I learned a lot about utility classes in CSS (apparently tailwind is used for this) and also about core concepts in JS."}, {"post_id": 12178, "ts": "2026-06-19T21:55:09Z", "hours": 0.4331, "text": "Just wanted to work through the tutorials first and refresh my knowledge of vanilla css."}]...
|
Title: Raahat's Personal Port by @raahat | Sta Title: Raahat's Personal Port by @raahat | Stardance
Devlogs:
Just wanted to work through the tutorials first and refresh my knowledge of vanilla css.
I went through the other parts of the tutorial and added a few of my own windows. I want to use this site as a place to show off any future projects so basically a personal portfolio. I worked more on the CSS and HTML as well as the JS. I learned a lot about utility classes in CSS (apparently tailwind is used for this) and also about core concepts in JS.
I wanted to work more on adding functionality to the desktop and its icons. So I added eventlisteners in JS to check for double clicks and clicks and to change the windows accordingly. I’m still learning everything as I go so progress is still slow.
Started working on creating more folders and a way to add them without touching html. The folder creation is all based on the file array in the javascript file. I still need to work on adding small details like changing the z-index when clicking on a file and also things like how the file names are actually going to be displayed based on the option chosen.
Okay so this was a lot longer of a work session. I worked a lot on fixing issues with the windows and their z-indexes as well as dragging issues. I figured that the the easiest way for me to keep adding to my portfolio was through markdown so I added a way for the new windows to properly parse markdown files. I used markedjs which allows me to properly format and .md files. I also used MathJax because markedjs didn’t properly format the LaTex in the markdown. I worked on figuring out how properly display the images, videos, and other media file formats I wanted to share. I’m going to work on actually adding the content in hopefully tomorrow. I then want to start working more on the design.
I just finished adding all the content so logs, images, videos and other media showing things I’ve worked on in the past. It took a really long time getting it all setup but it’s finally finished. This will be my first ship yet. Super excited !
Ships:
I made my very first personal portfolio, inspired by all the webOS projects here on Stardance. I struggled a lot since I haven’t used much javascript, html, and css in the past apart from the high school CS projects I worked on. I’m super happy with what I was able to come up with and I’m very eager to continue working on this and improving it as I learn more and more. I’m inspired everytime I scroll through the devlogs on this website and it just shows me how much more I can and have to learn. In my next ship, I want to make this look even more like a computer OS and add more personal flair. I always struggled with design so I have a lot of work ahead of me !...
|
1793202717.6348124
|
1793289117.6348124
|
|
21985
|
POMODORO by @Grace3 | Stardance
|
Grace3
|
1
|
3.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T12:36:43Z", "hours": 3.0, "multiplier": 1.08, "payout": 3, "blessing": "neutral", "text": "I built a Pomodoro that can help me focus on studying and staying focused. The hardest part was debugging, as I got a lot of errors", "repo": "https://github.com/Temi-ay/Pomodoro", "demo": "https://temi-ay.github.io/Pomodoro/"}]...
|
[{"post_id": 32928, "ts": "202 [{"post_id": 32928, "ts": "2026-07-22T12:27:58Z", "hours": 3.0881, "text": "I’ve made a Pomodoro timer. It has 25 minutes of Pomodoro work time, a 5-minute short break, and a 10-minute long break. I created an popup for when you do not select a timer and the start and stop buttons"}]...
|
Title: POMODORO by @Grace3 | Stardance
Devlogs:
I Title: POMODORO by @Grace3 | Stardance
Devlogs:
I’ve made a Pomodoro timer. It has 25 minutes of Pomodoro work time, a 5-minute short break, and a 10-minute long break. I created an popup for when you do not select a timer and the start and stop buttons
Ships:
I built a Pomodoro that can help me focus on studying and staying focused. The hardest part was debugging, as I got a lot of errors...
|
1793281778.2784545
|
1793368178.2784545
|
|
21998
|
dvyOS by @dvydvine | Stardance
|
dvydvine
|
1
|
9.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-30T17:11:54Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Here is dvyOS! A fake operating system I made in native HTML, CSS, and JS, with multiple apps that act as a portfolio for me and my many hobbies. It includes such features as: a MacOS-like menu bar with the time moveable and closable windows a taskbar with links to open apps a desktop with a gradient background and app icons a basic notepad app with preloaded files that can be edited a Steam-themed games app with games that I’ve made and buttons to open them in an external window, avoiding Cross-Origin Isolation Making this was very fun, and taught me some new things about div’s and styling I didn’t think was possible. Please enjoy this website, and maybe check out some of my stuff!", "repo": "https://github.com/dorcupi/dvyos", "demo": "https://dorcupi.github.io/dvyos/"}]...
|
[{"post_id": 37705, "ts": "202 [{"post_id": 37705, "ts": "2026-07-30T16:41:47Z", "hours": 5.7414, "text": "It is finished. After a lot of work and working on other things as well, I finally finished my Web OS! Since my last update, I added two apps, condensed a lot of code into functions, fixed bugs with the Mac bar and taskbar interfering with dragging windows, and many more things. From here, I’m going to send this guy off to review, work on another project for a while, and then add even more to this Web OS. Goodbye for now!"}, {"post_id": 11746, "ts": "2026-06-19T04:07:35Z", "hours": 1.6519, "text": "A proper looking (fake) operating system I’ve finished the third part of the tutorial series and I’ve heavily leaned into this cartoony MacOS / GNOME Linux rice aesthetic. The window is now fully movable through the toolbar and can also be closed with the button in the corner. I also added a taskbar to the bottom of the screen with the app names which I plan to replace with proper designed app icons by me. Alongside that, I want to Refactor the JavaScript code, as I believe that some of the repetition can be solved by making classes, and.. Add the ability to pin and unpin apps on the taskbar. Other than that, suggestions are appreciated as always!"}, {"post_id": 11679, "ts": "2026-06-19T01:10:39Z", "hours": 1.2722, "text": "Nvm, I like the style now. I have just now finished the second part of the tutorial for my web OS portfolio thingamajig, and I’m starting to like the style more. I decided to try and go off of MacOS and some Linux rices that I’ve seen recently, and that led me to the style below. More work needs to be done before it’s perfect, but it’s starting to get there. Up next, I’m making the window movable and adding more apps."}, {"post_id": 11640, "ts": "2026-06-18T23:21:22Z", "hours": 0.5822, "text": "Is this on?? Um… hi! I am Divine and I’m new to this whole Hack Club thing so I thought I’d do something that gives me stardust to start with, so I can move into the hardware stuff later. I’ve started a website OS which I hopefully will be able to make my digital portfolio, as I do a lot of creative things online. This isn’t my first time in web development, but all my previous things have been basic websites with somewhat flashy animations so this might push me out of my comfort zone. I’ve decided to do one devlog per part of the tutorial and this is my website so far after the first part. I’m not totally in love with the style so far, mostly because there is a specific font that I can’t remember the name of that I want to use instead, but I think that this one will do for now. If there are any suggestions for what I can do next, please tell me!"}]...
|
Title: dvyOS by @dvydvine | Stardance
Devlogs:
Is Title: dvyOS by @dvydvine | Stardance
Devlogs:
Is this on?? Um… hi! I am Divine and I’m new to this whole Hack Club thing so I thought I’d do something that gives me stardust to start with, so I can move into the hardware stuff later. I’ve started a website OS which I hopefully will be able to make my digital portfolio, as I do a lot of creative things online. This isn’t my first time in web development, but all my previous things have been basic websites with somewhat flashy animations so this might push me out of my comfort zone. I’ve decided to do one devlog per part of the tutorial and this is my website so far after the first part. I’m not totally in love with the style so far, mostly because there is a specific font that I can’t remember the name of that I want to use instead, but I think that this one will do for now. If there are any suggestions for what I can do next, please tell me!
Nvm, I like the style now. I have just now finished the second part of the tutorial for my web OS portfolio thingamajig, and I’m starting to like the style more. I decided to try and go off of MacOS and some Linux rices that I’ve seen recently, and that led me to the style below. More work needs to be done before it’s perfect, but it’s starting to get there. Up next, I’m making the window movable and adding more apps.
A proper looking (fake) operating system I’ve finished the third part of the tutorial series and I’ve heavily leaned into this cartoony MacOS / GNOME Linux rice aesthetic. The window is now fully movable through the toolbar and can also be closed with the button in the corner. I also added a taskbar to the bottom of the screen with the app names which I plan to replace with proper designed app icons by me. Alongside that, I want to Refactor the JavaScript code, as I believe that some of the repetition can be solved by making classes, and.. Add the ability to pin and unpin apps on the taskbar. Other than that, suggestions are appreciated as always!
It is finished. After a lot of work and working on other things as well, I finally finished my Web OS! Since my last update, I added two apps, condensed a lot of code into functions, fixed bugs with the Mac bar and taskbar interfering with dragging windows, and many more things. From here, I’m going to send this guy off to review, work on another project for a while, and then add even more to this Web OS. Goodbye for now!
Ships:
Here is dvyOS! A fake operating system I made in native HTML, CSS, and JS, with multiple apps that act as a portfolio for me and my many hobbies. It includes such features as: a MacOS-like menu bar with the time moveable and closable windows a taskbar with links to open apps a desktop with a gradient background and app icons a basic notepad app with preloaded files that can be edited a Steam-themed games app with games that I’ve made and buttons to open them in an external window, avoiding Cross-Origin Isolation Making this was very fun, and taught me some new things about div’s and styling I didn’t think was possible. Please enjoy this website, and maybe check out some of my stuff!...
|
1793130583.945336
|
1793216983.945336
|
|
22005
|
Zenith V model rocket by @alexpleson49 | Stardance
|
alexpleson49
|
1
|
19.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T23:18:56Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "hello. this is the failure of the Zenith V model rocket. the rocket launch earlier today ended in a failure with the rocket violently veering of course due to a faulty engine stabilizer resulting in a fiery crash. I am shipping it as is because i do not have the ability for another launch. although i have only logged 20 hours i have undoubtably spend over 100 which makes this a very sad loss. Thank you for taking the time to read this regardless what you choose to rate it. Here i will end it off with the launch and my favourite picture from the process, again thank you.", "repo": "https://github.com/zanderman106/Zenith-V-model-rocket-flight-computer-software", "demo": ""}]...
|
[{"post_id": 71425, "ts": "202 [{"post_id": 71425, "ts": "2026-09-20T19:57:12Z", "hours": 1.935, "text": "finished wiring the flight computer, uploaded the code to the ground station, and prepped the flight computer for the code and launch."}, {"post_id": 69443, "ts": "2026-09-17T02:04:41Z", "hours": 2.1664, "text": "a longer work period here, i completely soldered the ground station and begun to solder the flight computer (sorry about the image quality it was taken form my laptop =) )"}, {"post_id": 38009, "ts": "2026-07-31T04:04:30Z", "hours": 0.9342, "text": "nothing too exciting today, just figuring out some random things if anyone has any questions about the rocket/project please ask!"}, {"post_id": 37390, "ts": "2026-07-30T02:20:04Z", "hours": 1.8169, "text": "finalized the designs for the flight computer and LoRa receiver, the final design is to have GPS in the flight computer and have all of the info transmitted rather than stored. the information will be received by a module that plugs into the USB port on my laptop so that it can by interpreted and displayed in real time. the information will include: altitude, barometric pressure, temperature, and a video feed will be saved to an onboard SD card."}, {"post_id": 36132, "ts": "2026-07-28T00:47:52Z", "hours": 0.4503, "text": "finalized flight computer components, and found launch site candidates."}, {"post_id": 21247, "ts": "2026-07-03T02:42:07Z", "hours": 4.1219, "text": "i did a lot and kind of forgot to devlog, so i finalized connection rings, made the nosecone design, and begun to work on the PCB for the flight computer"}, {"post_id": 17347, "ts": "2026-06-28T03:04:11Z", "hours": 1.2508, "text": "the first parts of the rocket have been finalized, printed, and assembled. The structure of the main body is now ready for testing."}, {"post_id": 16673, "ts": "2026-06-27T03:21:49Z", "hours": 1.5669, "text": "Parachute bay and main body tube almost complete, this is an image of a 3D model for the parachute bay and main body tube, all that needs to be done on these is adding strength via interior support bars."}, {"post_id": 12836, "ts": "2026-06-21T00:34:45Z", "hours": 5.3375, "text": "The final version of the Zenith V booster stage is complete. This is the version that will launch the rocket about 2000 ft before the sustainer stage activates and this stage falls back to the ground."}, {"post_id": 11976, "ts": "2026-06-19T15:35:47Z", "hours": 0.5003, "text": "now printing the final version of the main booster stage for the Zenith V"}, {"post_id": 11956, "ts": "2026-06-19T14:48:17Z", "hours": 0.3492, "text": "Zenith V booster stage test model –––––––––––––––––––––––––––––––This is a test model for the booster stage of my zenith V model rocket, the booster stage will house 2 Estes E 12 0 motors."}]...
|
Title: Zenith V model rocket by @alexpleson49 | St Title: Zenith V model rocket by @alexpleson49 | Stardance
Devlogs:
Zenith V booster stage test model –––––––––––––––––––––––––––––––This is a test model for the booster stage of my zenith V model rocket, the booster stage will house 2 Estes E 12 0 motors.
now printing the final version of the main booster stage for the Zenith V
The final version of the Zenith V booster stage is complete. This is the version that will launch the rocket about 2000 ft before the sustainer stage activates and this stage falls back to the ground.
Parachute bay and main body tube almost complete, this is an image of a 3D model for the parachute bay and main body tube, all that needs to be done on these is adding strength via interior support bars.
the first parts of the rocket have been finalized, printed, and assembled. The structure of the main body is now ready for testing.
i did a lot and kind of forgot to devlog, so i finalized connection rings, made the nosecone design, and begun to work on the PCB for the flight computer
finalized flight computer components, and found launch site candidates.
finalized the designs for the flight computer and LoRa receiver, the final design is to have GPS in the flight computer and have all of the info transmitted rather than stored. the information will be received by a module that plugs into the USB port on my laptop so that it can by interpreted and displayed in real time. the information will include: altitude, barometric pressure, temperature, and a video feed will be saved to an onboard SD card.
nothing too exciting today, just figuring out some random things if anyone has any questions about the rocket/project please ask!
a longer work period here, i completely soldered the ground station and begun to solder the flight computer (sorry about the image quality it was taken form my laptop =) )
finished wiring the flight computer, uploaded the code to the ground station, and prepped the flight computer for the code and launch.
Ships:
hello. this is the failure of the Zenith V model rocket. the rocket launch earlier today ended in a failure with the rocket violently veering of course due to a faulty engine stabilizer resulting in a fiery crash. I am shipping it as is because i do not have the ability for another launch. although i have only logged 20 hours i have undoubtably spend over 100 which makes this a very sad loss. Thank you for taking the time to read this regardless what you choose to rate it. Here i will end it off with the launch and my favourite picture from the process, again thank you....
|
1793148988.124606
|
1793235388.124606
|