|
16479
|
Sending you a letter by @BayerischKind | Stardance
|
BayerischKind
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T08:23:36Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hand detection was a fun thing to learn, and i would love to create more fun projects using mediapipe.", "repo": "https://github.com/jashbrook123/ascii-webcam", "demo": "https://github.com/jashbrook123/finished-ascii-cam"}]...
|
[{"post_id": 12414, "ts": "202 [{"post_id": 12414, "ts": "2026-06-20T08:09:29Z", "hours": 0.6797, "text": "Finished some edge cases for crashes and made slightly more efficient. Will now also output as ascii webcam (using OBS cam) so can be used on zoom meetings and such."}, {"post_id": 7123, "ts": "2026-06-11T22:05:33Z", "hours": 1.0197, "text": "Hand detection, rotate to turn up/down resolution and then close a fist to swap rendering."}]...
|
Title: Sending you a letter by @BayerischKind | St Title: Sending you a letter by @BayerischKind | Stardance
Devlogs:
Hand detection, rotate to turn up/down resolution and then close a fist to swap rendering.
Finished some edge cases for crashes and made slightly more efficient. Will now also output as ascii webcam (using OBS cam) so can be used on zoom meetings and such.
Ships:
Hand detection was a fun thing to learn, and i would love to create more fun projects using mediapipe....
|
1793112897.3612163
|
1793199297.3612163
|
|
16481
|
gta by @moayed_jouini | Stardance
|
moayed_jouini
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T14:10:37Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "my mini 3D parkour game by godot", "repo": "https://github.com/moayedjouini6-prog/my-parkour-game-by-godot", "demo": "https://moayed-dev.itch.io/moayed-crostina"}]...
|
[{"post_id": 16043, "ts": "202 [{"post_id": 16043, "ts": "2026-06-26T02:10:30Z", "hours": 4.8225, "text": "my shooter game"}]...
|
Title: gta by @moayed_jouini | Stardance
Devlogs: Title: gta by @moayed_jouini | Stardance
Devlogs:
my shooter game
Ships:
my mini 3D parkour game by godot...
|
1793282077.7756066
|
1793368477.7756066
|
|
16527
|
Asteroid Threat Sim by @nishchaybhudia | Stardance
|
nishchaybhudia
|
1
|
9.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T08:26:10Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a sleek NASA Deep Space Monitoring Matrix that simulates real time ISS tracking, solar weather incident logs and near Earth asteroid risk assessments.. The biggest hurdle was completely rewriting the interface from Python’s desktop based Tkinter framework into responsive HTMLand python so it could run flawlessly directly inside a web browser.I am proud of the dynamic cyber grid tracking map and updating telemetry feeds which you can test directly on itch.io by switching tabs to watch the live simulation matrix react in real time.", "repo": "https://github.com/Hidden-Ghost-123/NASA", "demo": "https://nbhudia.itch.io/nasa-project-v2"}]...
|
[{"post_id": 24625, "ts": "202 [{"post_id": 24625, "ts": "2026-07-08T10:36:04Z", "hours": 0.0, "text": "i added the final fixed files to the github and added a detailed and readable README.md … i also fixed a api bug"}, {"post_id": 23991, "ts": "2026-07-07T08:06:22Z", "hours": 2.0, "text": "i linked the data that the api outputs to the tkinter frontend ui that i began making …. this lead me to many errors such as intiger value errors and data sorting errors…. the data that the api outputs is very volatile as the data is extreamly minute in the data that is to do with satelites and speed and volatility of certain objects … this is not yet finished and cannot run fully yet …."}, {"post_id": 7525, "ts": "2026-06-12T15:49:59Z", "hours": 2.0, "text": "i worked on cleaning up the code and making sure i hit all my targets set in the previous devlog . not all were done.Hit a 429 error during testing when I accidentally called the API in a tight loop. The raw requests traceback is ugly.i then added proper handling. Bug I spent 20 minutes on: Had session.get(url, params, timeout) positionally … but timeout is a keyword argument. Changed to session.get(url, params=params, timeout=timeout). usual silly mistakes ."}, {"post_id": 7459, "ts": "2026-06-12T12:58:49Z", "hours": 1.0, "text": "i Built the first version of the NASA client, enabling access to “astronomy Picture of the day” (APOD), Near Earth object (NEO) feeds, and Mars Rover mission data through reusable API request methods. … looking to add error handling next as it is not in place at the moment"}, {"post_id": 7428, "ts": "2026-06-12T11:33:30Z", "hours": 2.0, "text": "Been reading api.nasa.gov docs for the past hour. Way more data than I expected. APOD, asteroids, Mars photos, space weather, satellite imagery — all free. Some endpoints don’t even need a key. Wrote the simplest possible test before building anything. set up the folder structure. coded the first parts of the config.py ."}]...
|
Title: Asteroid Threat Sim by @nishchaybhudia | St Title: Asteroid Threat Sim by @nishchaybhudia | Stardance
Devlogs:
Been reading api.nasa.gov docs for the past hour. Way more data than I expected. APOD, asteroids, Mars photos, space weather, satellite imagery — all free. Some endpoints don’t even need a key. Wrote the simplest possible test before building anything. set up the folder structure. coded the first parts of the config.py .
i Built the first version of the NASA client, enabling access to “astronomy Picture of the day” (APOD), Near Earth object (NEO) feeds, and Mars Rover mission data through reusable API request methods. … looking to add error handling next as it is not in place at the moment
i worked on cleaning up the code and making sure i hit all my targets set in the previous devlog . not all were done.Hit a 429 error during testing when I accidentally called the API in a tight loop. The raw requests traceback is ugly.i then added proper handling. Bug I spent 20 minutes on: Had session.get(url, params, timeout) positionally … but timeout is a keyword argument. Changed to session.get(url, params=params, timeout=timeout). usual silly mistakes .
i linked the data that the api outputs to the tkinter frontend ui that i began making …. this lead me to many errors such as intiger value errors and data sorting errors…. the data that the api outputs is very volatile as the data is extreamly minute in the data that is to do with satelites and speed and volatility of certain objects … this is not yet finished and cannot run fully yet ….
i added the final fixed files to the github and added a detailed and readable README.md … i also fixed a api bug
Ships:
I built a sleek NASA Deep Space Monitoring Matrix that simulates real time ISS tracking, solar weather incident logs and near Earth asteroid risk assessments.. The biggest hurdle was completely rewriting the interface from Python’s desktop based Tkinter framework into responsive HTMLand python so it could run flawlessly directly inside a web browser.I am proud of the dynamic cyber grid tracking map and updating telemetry feeds which you can test directly on itch.io by switching tabs to watch the live simulation matrix react in real time....
|
1792878802.7892475
|
1793742802.7892475
|
|
16547
|
RomeoGPT by @xinyulyu | Stardance
|
xinyulyu
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T13:22:37Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Building RomeoGPT was an interesting challenge because I had to implement semantic search using embeddings and retrieve the most relevant text passages from Romeo and Juliet before generating an answer. I’m most proud of creating a complete question-answering system with FastAPI and Azure OpenAI that can answer questions based on the book’s content. The live API is not publicly available because every request generates Azure OpenAI costs, and opening it to everyone could result in high expenses. However, the “Try project” link provides a downloadable executable (.exe) version that can be run directly on your computer for testing.", "repo": "https://github.com/xinyulyuonline/romeo_julia_search", "demo": "https://github.com/xinyulyuonline/romeo_julia_search/blob/main/dist/romeo_julia_search.exe"}]...
|
[{"post_id": 6815, "ts": "2026 [{"post_id": 6815, "ts": "2026-06-11T13:12:24Z", "hours": 1.7928, "text": "RomeoGPT is finish! Its working well! I might add some graphics later."}]...
|
Title: RomeoGPT by @xinyulyu | Stardance
Devlogs: Title: RomeoGPT by @xinyulyu | Stardance
Devlogs:
RomeoGPT is finish! Its working well! I might add some graphics later.
Ships:
Building RomeoGPT was an interesting challenge because I had to implement semantic search using embeddings and retrieve the most relevant text passages from Romeo and Juliet before generating an answer. I’m most proud of creating a complete question-answering system with FastAPI and Azure OpenAI that can answer questions based on the book’s content. The live API is not publicly available because every request generates Azure OpenAI costs, and opening it to everyone could result in high expenses. However, the “Try project” link provides a downloadable executable (.exe) version that can be run directly on your computer for testing....
|
1793127133.3534553
|
1793213533.3534553
|
|
16549
|
KesslerEdge by @himanshu_thumu | Stardance
|
himanshu_thumu
|
1
|
4.0
|
69
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T03:27:59Z", "hours": 4.0, "multiplier": 18.65, "payout": 69, "blessing": "neutral", "text": "KesslerEdge is an interactive, full-scale, scratch-made 3D orbital debris tracking and collision-avoidance simulator that I made for the Hack Club Stardance Challenge to visualize the exponential threat of Kessler Syndrome in Low Earth Orbit. I programmed the whole thing from the ground-up in Three.js – eschewing crude linear screensaver physics in favor of a truly deterministic orbital mechanics core which allows for 3,500 autonomous objects of space junk to orbit along separate 2D orbital trajectories which constantly map into 3D Cartesian space. One of the key technical challenges was scale, to transform the simulation from mere static debris into a dynamic Kessler Cascade where the collision of space debris creates many new and faster moving fragments, I architected an Object Pooling system capable of pre-allocating for over 12,000 particles in memory upon startup and setting draw ranges that only allow for currently-visible particles to be rendered, preventing the browser from ever entering into garbage collection, maintaining a perfect WebGL framerate. To realize the project I programmatically generated a Space Shuttle-like player vehicle with procedurally placed cylinders, cones, and boxes, a low-poly space shuttle composed entirely of math and logic; mapped the Earth with a high resolution texture map; and even composed a post-processing pipeline with a UEBloom Pass that singles out high-energy light sources for visual pop. The most difficult challenge, though, was coordinating the game loop with user interactions, discarding a particularly sickening camera shake in favor of a clean and responsive tactical HUD override; it pulsates an ominous red CSS vignette over the user’s screen and “snaps” a high-sensitivity 3D sensor cone to the point of interest when it gets too close. The simulation has hard fail-states for when fuel runs out and when the hull is breached, and even features a three second startup-period in order to avoid the common phenomenon of statistical spawn kills. You can test the live demo here by pressing the Up/Down arrow keys on your keyboard to try and compensate for increasing debris count while keeping your shuttle operational.", "repo": "https://github.com/Thumu723/KesslerEdge", "demo": "https://thumu723.github.io/KesslerEdge/"}]...
|
[{"post_id": 14846, "ts": "202 [{"post_id": 14846, "ts": "2026-06-24T03:23:27Z", "hours": 2.1758, "text": "I completely rebuilt the visual identity and underlying simulation engine for KesslerEdge v3.0, taking it far beyond a simple prototype. Instead of using a basic block for our satellite or risking broken asset links with an external 3D model, I wrote a compound geometry script that procedurally builds a low-poly Space Shuttle directly from Three.js cylinders, cones, and boxes entirely out of math, while also wrapping the Earth in a high-res texture map to properly ground the simulation. To handle danger feedback, we experimented with a violent screen-shake mechanic but scrapped it when it ruined the readability of the orbital paths; instead, we engineered a Tactical HUD override where a pulsing red CSS vignette bleeds onto the screen and the 3D sensor cone physically snaps from cyan to warning-red during an evasion state. We also locked in fatal game-over triggers for when fuel hits zero or the shuttle hull is breached, adding a three-second hardware calibration grace period on boot to prevent immediate random spawn-kills. The biggest optimization milestone was architecting a true Kessler Cascade to simulate space debris colliding and fracturing into smaller, faster-moving pieces; to prevent the browser’s garbage collector from stuttering under thousands of dynamic allocations, I implemented an Object Pooling system that pre-allocates a memory block of 12,000 coordinates on load, using setDrawRange to only render the initial 3,500 active particles and seamlessly activating the dormant data blocks as the environment collapses, keeping the framerate locked at a smooth, high-performance pace."}, {"post_id": 14576, "ts": "2026-06-23T18:59:36Z", "hours": 1.5464, "text": "Pushed a huge KesslerEdge v2.5 refactor. I was pretty happy when I figured out the old physics engine was really just simulating debris ricocheting around like a DVD logo on my screen bouncing between invisible walls. Which was completely pointless for collision detection. So that got thrown out, I wrote a deterministic orbital core where every one of the ~3500 pieces is now locked into their real 2D orbits which is then transformed into 3D space. It actually moves around without destroying the framerate. Before the end of the session I hooked up a UnrealBloomPass to the wireframe world and the debris that essentially makes the GPU compute that they are actually emitting light rather than it being a flat WebGL effect. Time to start work on game state tracking and collision detection loop."}]...
|
Title: KesslerEdge by @himanshu_thumu | Stardance
Title: KesslerEdge by @himanshu_thumu | Stardance
Devlogs:
Pushed a huge KesslerEdge v2.5 refactor. I was pretty happy when I figured out the old physics engine was really just simulating debris ricocheting around like a DVD logo on my screen bouncing between invisible walls. Which was completely pointless for collision detection. So that got thrown out, I wrote a deterministic orbital core where every one of the ~3500 pieces is now locked into their real 2D orbits which is then transformed into 3D space. It actually moves around without destroying the framerate. Before the end of the session I hooked up a UnrealBloomPass to the wireframe world and the debris that essentially makes the GPU compute that they are actually emitting light rather than it being a flat WebGL effect. Time to start work on game state tracking and collision detection loop.
I completely rebuilt the visual identity and underlying simulation engine for KesslerEdge v3.0, taking it far beyond a simple prototype. Instead of using a basic block for our satellite or risking broken asset links with an external 3D model, I wrote a compound geometry script that procedurally builds a low-poly Space Shuttle directly from Three.js cylinders, cones, and boxes entirely out of math, while also wrapping the Earth in a high-res texture map to properly ground the simulation. To handle danger feedback, we experimented with a violent screen-shake mechanic but scrapped it when it ruined the readability of the orbital paths; instead, we engineered a Tactical HUD override where a pulsing red CSS vignette bleeds onto the screen and the 3D sensor cone physically snaps from cyan to warning-red during an evasion state. We also locked in fatal game-over triggers for when fuel hits zero or the shuttle hull is breached, adding a three-second hardware calibration grace period on boot to prevent immediate random spawn-kills. The biggest optimization milestone was architecting a true Kessler Cascade to simulate space debris colliding and fracturing into smaller, faster-moving pieces; to prevent the browser’s garbage collector from stuttering under thousands of dynamic allocations, I implemented an Object Pooling system that pre-allocates a memory block of 12,000 coordinates on load, using setDrawRange to only render the initial 3,500 active particles and seamlessly activating the dormant data blocks as the environment collapses, keeping the framerate locked at a smooth, high-performance pace.
Ships:
KesslerEdge is an interactive, full-scale, scratch-made 3D orbital debris tracking and collision-avoidance simulator that I made for the Hack Club Stardance Challenge to visualize the exponential threat of Kessler Syndrome in Low Earth Orbit. I programmed the whole thing from the ground-up in Three.js – eschewing crude linear screensaver physics in favor of a truly deterministic orbital mechanics core which allows for 3,500 autonomous objects of space junk to orbit along separate 2D orbital trajectories which constantly map into 3D Cartesian space. One of the key technical challenges was scale, to transform the simulation from mere static debris into a dynamic Kessler Cascade where the collision of space debris creates many new and faster moving fragments, I architected an Object Pooling system capable of pre-allocating for over 12,000 particles in memory upon startup and setting draw ranges that only allow for currently-visible particles to be rendered, preventing the browser from ever entering into garbage collection, maintaining a perfect WebGL framerate. To realize the project I programmatically generated a Space Shuttle-like player vehicle with procedurally placed cylinders, cones, and boxes, a low-poly space shuttle composed entirely of math and logic; mapped the Earth with a high resolution texture map; and even composed a post-processing pipeline with a UEBloom Pass that singles out high-energy light sources for visual pop. The most difficult challenge, though, was coordinating the game loop with user interactions, discarding a particularly sickening camera shake in favor of a clean and responsive tactical HUD override; it pulsates an ominous red CSS vignette over the user’s screen and “snaps” a high-sensitivity 3D sensor cone to the point of interest when it gets too close. The simulation has hard fail-states for when fuel runs out and when the hull is breached, and even features a three second startup-period in order to avoid the common phenomenon of statistical spawn kills. You can test the live demo here by pressing the Up/Down arrow keys on your keyboard to try and compensate for increasing debris count while keeping your shuttle operational....
|
1793263940.4907243
|
1793350340.4907243
|
|
16566
|
My First German Website by @rosikur | Stardance
|
rosikur
|
1
|
2.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T16:37:25Z", "hours": 2.0, "multiplier": 1.02, "payout": 2, "blessing": "neutral", "text": "I made my very first Website in school and wanted to share it with you guys it took so long for this little becuase i made some typos and bugs and took half an hour to publish maybe i´ll add js too someday lovve Rossi", "repo": "https://github.com/rosikur/My-website", "demo": "https://rosikur.github.io/My-website/"}]...
|
[{"post_id": 6916, "ts": "2026 [{"post_id": 6916, "ts": "2026-06-11T16:16:32Z", "hours": 1.5889, "text": "JavaScript going to continue working tmrw"}]...
|
Title: My First German Website by @rosikur | Stard Title: My First German Website by @rosikur | Stardance
Devlogs:
JavaScript going to continue working tmrw
Ships:
I made my very first Website in school and wanted to share it with you guys it took so long for this little becuase i made some typos and bugs and took half an hour to publish maybe i´ll add js too someday lovve Rossi...
|
1793138091.4317136
|
1793224491.4317136
|
|
16571
|
mocha by @Glitchy | Stardance
|
Glitchy
|
1
|
101.0
|
1806
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T18:57:02Z", "hours": 101.0, "multiplier": 17.94, "payout": 1806, "blessing": "neutral", "text": "I made a package manager for Windows, which is somewhat backwards compatible with scoop packages. To be honest there’s still a lot of work that I want to do, but I have exams and college application coming up soon so I can’t. That’s not to say I’m not happy with the state of the ship. At the very least it has all the core features that a package manager should have, but there are still a lot of bugs which is why this is only v0.0.1. The biggest challenge by far was trying to figure out how Scoop does things internally. A lot of stuff just doesn’t have documentation, so you have to dig through the really messy PowerShell source code.", "repo": "https://github.com/Protract-123/mocha", "demo": "https://github.com/Protract-123/mocha/releases/latest"}]...
|
[{"post_id": 67579, "ts": "202 [{"post_id": 67579, "ts": "2026-09-13T18:33:17Z", "hours": 1.7761, "text": "So I wrote a README, added a license (MIT of course) and setup CI/CD so that releases are automatically built and deployed. Honestly I forgot how hard it is to write a good README. You need to get a lot of information through without it looking like a wall of text."}, {"post_id": 67267, "ts": "2026-09-13T10:36:48Z", "hours": 5.8047, "text": "I forgot to make a devlog in between so this will be like 2 bigger devlogs. I parallelized bucket updates, which speeds it up quite a bit. This also allowed me to try out parallelism even more, which I plan to apply throughout the CLI later on. I also added configuration options for the runners which mocha shim will use to run certain file types. For example, you can set the python-runner to select the python version that’ll be used to run python scripts that are shimmed. Downloads now have a progress bar, so you don’t need to wonder whether something is happening or not during a long download. Finally env_set is fully supported since I added the relevant variable parsing. This was pretty much just me cleaning out the TODO list before I ship. I also did a lot of smaller bug fixes and refactors as seen below. fix(commands): prevent app installation if already installed (cb27d07) fix(commands): fix config opening with “start” (74f3679) fix(commands): correctly handle non-apps when upgrading (f7419f6) fix: make LogOutput go to Stdout not Stderr (bc10357) fix: handle empty versions correctly (2287da9) fix(pkg): remove correct temp dir (33189b6) fix(shim): warn for unknown shim extension (622c2b4) fix: skip downloads with no hash by default (69d4e35) fix: use correct timeout for downloads (44e527b) fix: drop unnecessary return value from GetExecutableEntries (9fd845c) fix(config): remove unused option (1339971) fix(commands): don’t error for valid results (87c4d6c) refactor(config): rename variables/functions (f253d9d) fix: use unique temp directories (a159e23) refactor: use fmt.Fprintln directly (d2d54bf)"}, {"post_id": 65401, "ts": "2026-09-10T14:55:22Z", "hours": 2.5386, "text": "Lots of small bug fixes and changes, I’ll just list them out: feat(cmd): allow removal of multiple shims in one execution (f2fae3f) fix(manifest): correctly ignore invalid shortcut entries (6a08478) fix(fileops): use correct registry type (5d5d796) fix(config): seed config with defaults (9dfaaff) fix(cmd): use correct release sources (a2a9ba1) fix(cmd): use bucket from install info (5a9109b) I also added support for more file types being shimmed, which helps a lot with compatibility. The file types are .py , .bat , .cmd , .jar and .ps1 ."}, {"post_id": 52474, "ts": "2026-08-22T16:37:15Z", "hours": 4.6758, "text": "Lot of time going into this devlog, but it makes sense since I did do a lot. I did this sweeping refactor of the entire commands module which moved around a lot of code. Essentially each command now gets it’s own directory under the commands module that represents it’s children/parents. For example commands/shim/remove/cmd.go contains code for the mocha shim remove command. Each cmd.go contains a Command struct that has the relevant fields and functions attached to it. This structure just makes things more organized and also means adding test files will be a bit easier since functionality is now isolated. I also sorted out the shim binary. So essentially https://github.com/ScoopInstaller/Shim offers different version of the shim binary which can be installed. Previously I hard coded the code to install cpp v0.1.0 but now users can run mocha shim binary releases to see the options and mocha shim binary setup to install their chosen binary. This also means we actually get the latest releases from GitHub."}, {"post_id": 51141, "ts": "2026-08-20T17:11:51Z", "hours": 3.6722, "text": "Finally got a bit of time to do a bit of development. First thing I did was remove a field from install.json to match scoop . This means that mocha should be a drop in replacement for existing scoop installs. Then I added partial support for env_set and env_add_path . The main thing I need to do to complete the feature is parse variables and replace them with the appropriate paths. These 2 fields are some of the last manifest fields I need to support besides pre/post (un)install hooks."}, {"post_id": 34596, "ts": "2026-07-25T13:39:02Z", "hours": 2.5778, "text": "My summer break has ended so development is going to be a lot slower from now. I added mocha outdated so you can list outdated apps before upgrading them to a newer version. Besides that I tweaked a lot of stuff related to CLI output. For example I changed search to output one table, and simply outputting exact matches at the top of that table. I also changed a lot of messages which were using LogOutput to LogInfo so they use the correct color and output to stderr and not stdout ."}, {"post_id": 31801, "ts": "2026-07-20T14:04:04Z", "hours": 1.5481, "text": "Not sure why I didn’t do this earlier, but I’ve added success messages to commands where it makes sense. Also added a success color to the config so you can change what the success color is. I do still need to improve CLI output quite a bit, but it’s slowly getting there."}, {"post_id": 30693, "ts": "2026-07-18T14:02:54Z", "hours": 2.1922, "text": "I’m writing this one right before F1 Qualifying at Spa! Continuing with the trend of some of my recent work, I improved what table outputs look like to be a little bit more readable. We now use proper separators in the form of Unicode Box Drawing Characters . I also made column alignment configurable, which improves legibility for some commands like mocha bucket list and mocha cache show . I’ve attached an image of the scoop and mocha versions of bucket list so you can compare for yourself."}, {"post_id": 30286, "ts": "2026-07-17T18:51:34Z", "hours": 3.4797, "text": "I love refactoring!!!! I’ll probably end up spending another 20 hours just on refactoring because it’s so fun!!!! This time around I wanted to refactor the code so that our commands orchestrate stuff instead of the helper functions. For example, pkg.Install would first download a package, then install it, and then link it through shims and shortcuts all by itself. This causes issues because it means error messages become slightly worse, and it creates a class of bugs due to edge cases where we don’t necessarily want this order of orchestration. Hence I did a lot of refactoring in the pkg module. I also ended up adding a way to skip verification of downloads when downloading, installing or updating a package through --skip-verify . It’s a useful option in situations where there is a malformed manifest or simply no hash to begin with."}, {"post_id": 30054, "ts": "2026-07-17T10:28:53Z", "hours": 4.6269, "text": "mocha now supports a user defined theme for output colors. In the process I ended up doing a lot of stuff related to the config. First thing I did was swap to fatih/color for colored output, since it handles stuff like colors in command prompt and removing color when output is piped. Then I refactored the config module. Earlier I would pass around a MochaConfiguration object through every function. Now I use a config singleton that’s accessible from any function. Why? Because it means I don’t need to pass the object every time I want to log information. Also means I don’t need to pass mochaDir through almost every function in the codebase. Getting user defined themes was a bit complicated because I needed a good way to handle a default theme so output doesn’t look bad if parsing fails. I handled this by only using the configured theme if every color resolves properly. Otherwise output falls back to the already loaded default theme. Due to this you still get colored output even if there are errors or warning before the configuration and theme is loaded."}, {"post_id": 29066, "ts": "2026-07-15T18:30:47Z", "hours": 4.7214, "text": "So I’ve been doing a bit of refactoring, a bit of bug fixing and a bit of optimization. Essentially just polishing mocha before I work on the next feature. Here’s some of the stuff I did: created tests for ParseRefString to validate behavior cache manifest json between info calls since I/O is really slow bumped dependency versions refactored manifest/info.go Besides that I fixed the uninstall flow since it was really bugged after the latest changes. Essentially mocha would uninstall apps with incorrect info. It would also try to remove shims/shortcuts for apps which don’t have any active shims/shortcuts. I then added a bit of logging since the uninstall command didn’t give any user output for whatever reason (i forgot to earlier)."}, {"post_id": 27086, "ts": "2026-07-12T10:29:45Z", "hours": 6.4975, "text": "This is going to be the equivalent of 2 devlogs since I thought I made one earlier for persists but I didn’t. New feature! We now handle persist items in order to store data between versions. These are files which are persisted between versions of an app. Lets take git as an example to explain why persist exists. Say you want to make sure your git config isn’t deleted every time you update. The issue with this is that the config file is saved in the version specfic directory. To resolve this we can keep the config in $MOCHA_DIR/persist and then symlink the config to where it needs to be, which is essentially what persist tells us to do. Since we handled persist items last time we can now implement mocha upgrade to update apps. The way scoop handles updates is by first removing anything that references the app, like shortcuts or shims . Then we just follow the install process from scratch. This leaves the old version available in case a user wants to revert versions due to a bug, while also updating to the latest available version. This can be seen in the video below, which shows me updating llama.cpp-hip-radeon ."}, {"post_id": 23572, "ts": "2026-07-06T16:39:13Z", "hours": 3.53, "text": "We now create shortcuts! This means any GUI apps should show up properly in the start menu, just like they do when you install with scoop . All I really had to do was a bit of orchestration since I decided to vendor in an implementation from https://github.com/jxeng/shortcut Besides that I expanded the number of apps that are supported by implementing a bit of code that handle architecture specific bin fields, along with bin fields which store 2D arrays. I also cleared up some of the TODO items. I swapped the junction implementation to an implementation from https://github.com/nyaosorg/go-windows-junction since we were previously shelling out to CLI. That and I added a bit more zip bomb protection For the purposes of the video below I changed the location which shortcuts get put to my desktop. It’ll probably be configurable, and match scoop by putting shortcuts in the startup menu by default"}, {"post_id": 22839, "ts": "2026-07-05T13:36:18Z", "hours": 3.3089, "text": "As I mentioned in the previous devlog I added good help information to every bit of the CLI. It’s surprisingly difficult to write good help messages which explains everything to users in a few words I also changed the behaviour of the mocha cache clear command to not clear all cache by default. That’s now gated behind the --all flag in order to match scoop a bit more"}, {"post_id": 21420, "ts": "2026-07-03T11:02:24Z", "hours": 1.0722, "text": "Typically I don’t want to make devlogs for small stuff like this, but this is something I found really cool. So I was working on help messages for all the commands when I realized that mocha bucket list felt a bit slower than pretty much every other command. This is because we need to shell out to git 2 times per bucket, and I had 4 buckets added. While 8 git commands might not sound like a lot, it was enough to make mocha bucket list feel slow. So what I did is I parallelized the metadata fetching through an errgroup . Instead of fetching the metadata for each bucket in order, we fetch the metadata for all 4 buckets simultaneously. This led to a big performance uplift. About 3 times faster than the old version of mocha , and just over 12 times faster than scoop for this operation. See the video below."}, {"post_id": 21386, "ts": "2026-07-03T09:17:07Z", "hours": 2.2464, "text": "I finished up mocha uninstall and mocha list , which means you can actually manage installed apps instead of manually deleting them. There’s not much that goes into mocha uninstall . You just need to remove the relevant shims and app directories since the apps that mocha supports are all portable. mocha list is similarly simple. It’s just loops over the directories in $MOCHA_DIR/apps and looks for apps along with the versions installed for each app."}, {"post_id": 19910, "ts": "2026-07-01T10:53:02Z", "hours": 5.4625, "text": "So I added support for more apps by implementing more extractors. This means in theory any apps which don’t need a pre-install or post-install should work. To be more specific, I handle a few more properties on manifests. Those being extract_dir and innosetup , which inform how an app needs to be installed. I also implement 7zip and innounp as extractors to support more file formats which applications are distributed in. Of course there’s still a lot of work before I consider this ready for public use. I need to create commands for some basic operations like uninstalling, updating and listing apps. I also need to handle shortcuts otherwise GUI apps can’t be accessed from the start menu. Besides that I need to improve the user experience. As you can see in the video below mocha just sort of dumps everything to the console even if it’s not relevant. Help menus are also critical to get working properly."}, {"post_id": 18238, "ts": "2026-06-29T09:51:16Z", "hours": 3.7839, "text": "Finished up the code cleanup in commands , fileops and manifests . I did catch a few edge cases and some incorrect behavior in the process, which is why I always spend so much time reviewing code. I did use AI to assist with code review because I think it’s an area where AI shines. AI is really good at finding small errors or inconsistencies in the codebase which I probably wouldn’t notice. For example, it identified that the ManifestReferences argument was not a required argument for the download command, which meant no help message was displayed on incorrect usage like the other commands. One big thing I will work on eventually is console output. Right now errors are well formatted but a lot of the time commands just run stuff without providing a lot of insight into what actions they are taking which isn’t great. Even the help menu is pretty useless right now (see the image below). Extra context: A manifest reference is a pointer to an app (e.g. main/ [email protected] )"}, {"post_id": 17027, "ts": "2026-06-27T17:10:53Z", "hours": 5.3025, "text": "Before working on more features and expanding the amount of apps mocha actually supports I wanted to go through the codebase and do a lot of cleanup since the codebase is quite messy. There are silly mistakes in some files and bad implementations in others. Hence the time I spent during this period was focused on moving code to where it should be and cleaning up some edge cases, specifically related to the bucket , config and shim modules. A good example of this is moving the code to get the active config to the config module instead of leaving it in main.go . Next up will be refactoring the commands , fileops , and manifest modules. I don’t have much to show so I figured I would present a feature I added but didn’t show earlier: the ability to skip cache hits with the --force flag when installing or downloading an app. Some context I forgot to add initially: I renamed the app module to manifest since I felt it was more accurate to what it actually handles scope wise."}, {"post_id": 15814, "ts": "2026-06-25T18:17:50Z", "hours": 2.5558, "text": "Huge milestone!!! I’ve gotten mocha install working for very basic apps! This means the entire process of downloading a file, then extracting it, then creating a junction and finally creating a shim now works for basic pieces of software! So in terms of what I actually did this devlog, I added cache hits to the download command since it’s relevant to the install command. I then implemented the aforementioned .zip extraction and junction creation. Then all that was left was a bit of orchestration, getting everything to work together properly. See a working install of innounp using mocha install below!"}, {"post_id": 15668, "ts": "2026-06-25T14:03:10Z", "hours": 0.7572, "text": "mocha update is another command which does very little but is very important. All it does is update the known_buckets file, and run git pull on all added buckets to update them. It can also update just the buckets you specify if you pass in an argument. I do need to improve the output of the command since it outputs raw git right now, but at least it’s functional. See the demo below."}, {"post_id": 14392, "ts": "2026-06-23T14:41:51Z", "hours": 6.9436, "text": "Spent a bit longer between devlogs this time, but it was worth it. So I realized the error messages were really bad. I was pretty much just passing errors up the call stack without adding any context, which isn’t great since it means our error messages will be useless to people reading them I therefore went through every single file of the codebase and wrote good error messages which add a bit of context every time we pass it up the call stack. I also did a bit of refactoring where I thought it would be worth it. For example in the shim module I now set the PE subsystem of the shim binary while it’s in memory instead of writing to disk twice. A few good examples of what the new error messages look like can be seen in the video below."}, {"post_id": 13054, "ts": "2026-06-21T10:47:05Z", "hours": 3.4069, "text": "Shims are simple in concept, complicated in reality. So essentially a shim in mocha is just an executable which calls another executable. It’s similar to a shortcut in that sense, except it shows up in $PATH Thankfully the scoop project already has a repository with 4 different implementations for the shim binary, so I can just have mocha shim download one of those binaries. The complicated part was the PE Subsystem. The PE subsystem is basically a bit of info in each binary which tells Windows whether it’s a console application, or a GUI application. We need to set the PE subsystem of the shim exe to the PE subsystem of the binary we are calling for Windows to execute the binary properly. Hence I need to read and write raw binary data. All of this is just the implementation for exe shims. Scoop itself contains implementations for .bat/.cmd , .ps1 , .jar , .py and linux binaries , all of which have wildly different implementations compared to .exe shims. The video below shows the working set of mocha shim commands (those being add , remove and list )."}, {"post_id": 12032, "ts": "2026-06-19T16:57:37Z", "hours": 1.8778, "text": "mocha cache is a simple command. It shows you what files are currently in $MOCHA_DIR/cache directory and it clears them out. One thing I noticed was that scoop cache show actually displays raw bytes instead of human readable file sizes for each cache entry, which is a bit odd since the total they display is human readable. Therefore I made my implementation mocha cache list display human readable sizes since that’s a more reasonable default."}, {"post_id": 11234, "ts": "2026-06-18T11:50:44Z", "hours": 2.2589, "text": "Fuzzy search is really really good. While implementing mocha search I noticed the results returned by scoop search were in alphabetical order, which doesn’t make a lot of sense. If I do scoop search git the first result should probably be git As a result my implementation of search uses github.com/sahilm/fuzzy which is a small library which provides a fuzzy search implementation. Scoop also checks for binary name matches, e.g. package biodiff can provide a binary called git-biodiff and show up in search results. I decided to remove this for now, since I personally find it a bit unnecessary. scoop search also lists all search results, which is okay when results are sorted alphabetically but doesn’t make sense when searches are relevance based. Therefore, by default mocha search will list exact matches plus the 20 most relevant search results. This can be overridden by the --count argument, where setting it to 0 displays all results. A demonstration of mocha search vs scoop search can be seen in the video below."}, {"post_id": 10748, "ts": "2026-06-17T17:14:41Z", "hours": 2.1597, "text": "I finished up mocha download , which surprisingly does a bit more than simply downloading files. The first thing it does is well… download the file. This is a bit more complicated than it seems though, since we need to identify the right file to download based on cpu architecture. Hence the very cursed JSON parsing I had to create. After downloading a file, we also do a hash check. We support the 4 types of file hashes which scoop support, those being sha256 , sha512 , md5 and sha1 . Currently files get downloaded to the $MOCHA_DIR/cache directory like in scoop, however we don’t actually check if there’s anything cached which can lead to repeated downloads. That’s something I’ll need to fix later on"}, {"post_id": 10131, "ts": "2026-06-16T18:54:22Z", "hours": 1.4081, "text": "I was working on the mocha download command so I can sort out fetching files, and during it I realized my current app format makes things a bit weird. mocha cat previously took in a flag for bucket through -b and a name. Scoop on the other hand uses an application reference in the format bucket/name@version . Scoop’s format is really important for downloads and installs, so it didn’t make sense to not standardize it between mocha download and mocha cat . Hence this shorter devlog! See the video below for the new usage (version numbers are ignored for mocha cat )."}, {"post_id": 10004, "ts": "2026-06-16T15:21:57Z", "hours": 2.9753, "text": "I did a bit of refactoring to split the core functionality from the command files. This means that the code for downloading and deleting buckets is separated from the code for the various commands. I’m doing this primarily for better code organization, and also to prevent import cycles. I also finished up the config system I mentioned last time. It’ll be one of the bigger improvements over scoop, which has a basic set of configuration options. TOML was the obvious choice for the config format since it is really easy to read and write. I made sure that you can put it in any of the standard locations, such as %APPDATA% and .config or in $MOCHA_DIR . Running mocha config will open the configuration in your preferred app, and also generate the default config if a configuration hasn’t been detected in any of the valid locations. Currently the configuration can be used to make mocha cat run an external program for printing manifests to stdout . See the video below for an example using bat"}, {"post_id": 8826, "ts": "2026-06-14T17:52:54Z", "hours": 2.6147, "text": "So this is a spot where I think the improvements over scoop start becoming really apparent. The scoop cat command simply prints an app’s manifest to console. However due to the long startup time of PowerShell scripts (scoop is written in PowerShell) basic stuff like scoop cat takes a second. mocha cat on the other hand is nearly instantaneous since it’s a compiled binary with almost 0 startup time. You can see how this plays out in real usage in the video below. I also half baked a config system, but it’s not finished so I’ll talk about that in the next devlog."}, {"post_id": 8586, "ts": "2026-06-14T08:48:35Z", "hours": 2.85, "text": "I finished off the remaining mocha bucket subcommands, those being add , rm and list . These commands manage “buckets” which are pretty much just package sources. mocha bucket add uses git to clone the relevant bucket into the [MOCHA_DIR]/buckets directory. By default MOCHA_DIR is [USER]/mocha mocha bucket list simply loops over the [MOCHA_DIR]/buckets directory and gets relevant info for each bucket. mocha bucket rm removes a bucket by just deleting the folder containing the bucket. For example, removing the main bucket deletes [MOCHA_DIR]/buckets/main"}, {"post_id": 8208, "ts": "2026-06-13T17:32:25Z", "hours": 2.0261, "text": "I started off with something a bit simple: mocha bucket known The known bucket list in scoop is a list of buckets which are known by the package manager in advance. These buckets don’t require the full URL to be used when using scoop bucket sub-commands. For example instead of running scoop bucket add https://github.com/ScoopInstaller/Main you can instead run scoop bucket add main As seen in the video below, mocha bucket known doesn’t do much. First it downloads buckets.json if it doesn’t exist. Then it parses the json and outputs it to console."}]...
|
Title: mocha by @Glitchy | Stardance
Devlogs:
I s Title: mocha by @Glitchy | Stardance
Devlogs:
I started off with something a bit simple: mocha bucket known The known bucket list in scoop is a list of buckets which are known by the package manager in advance. These buckets don’t require the full URL to be used when using scoop bucket sub-commands. For example instead of running scoop bucket add https://github.com/ScoopInstaller/Main you can instead run scoop bucket add main As seen in the video below, mocha bucket known doesn’t do much. First it downloads buckets.json if it doesn’t exist. Then it parses the json and outputs it to console.
I finished off the remaining mocha bucket subcommands, those being add , rm and list . These commands manage “buckets” which are pretty much just package sources. mocha bucket add uses git to clone the relevant bucket into the [MOCHA_DIR]/buckets directory. By default MOCHA_DIR is [USER]/mocha mocha bucket list simply loops over the [MOCHA_DIR]/buckets directory and gets relevant info for each bucket. mocha bucket rm removes a bucket by just deleting the folder containing the bucket. For example, removing the main bucket deletes [MOCHA_DIR]/buckets/main
So this is a spot where I think the improvements over scoop start becoming really apparent. The scoop cat command simply prints an app’s manifest to console. However due to the long startup time of PowerShell scripts (scoop is written in PowerShell) basic stuff like scoop cat takes a second. mocha cat on the other hand is nearly instantaneous since it’s a compiled binary with almost 0 startup time. You can see how this plays out in real usage in the video below. I also half baked a config system, but it’s not finished so I’ll talk about that in the next devlog.
I did a bit of refactoring to split the core functionality from the command files. This means that the code for downloading and deleting buckets is separated from the code for the various commands. I’m doing this primarily for better code organization, and also to prevent import cycles. I also finished up the config system I mentioned last time. It’ll be one of the bigger improvements over scoop, which has a basic set of configuration options. TOML was the obvious choice for the config format since it is really easy to read and write. I made sure that you can put it in any of the standard locations, such as %APPDATA% and .config or in $MOCHA_DIR . Running mocha config will open the configuration in your preferred app, and also generate the default config if a configuration hasn’t been detected in any of the valid locations. Currently the configuration can be used to make mocha cat run an external program for printing manifests to stdout . See the video below for an example using bat
I was working on the mocha download command so I can sort out fetching files, and during it I realized my current app format makes things a bit weird. mocha cat previously took in a flag for bucket through -b and a name. Scoop on the other hand uses an application reference in the format bucket/name@version . Scoop’s format is really important for downloads and installs, so it didn’t make sense to not standardize it between mocha download and mocha cat . Hence this shorter devlog! See the video below for the new usage (version numbers are ignored for mocha cat ).
I finished up mocha download , which surprisingly does a bit more than simply downloading files. The first thing it does is well… download the file. This is a bit more complicated than it seems though, since we need to identify the right file to download based on cpu architecture. Hence the very cursed JSON parsing I had to create. After downloading a file, we also do a hash check. We support the 4 types of file hashes which scoop support, those being sha256 , sha512 , md5 and sha1 . Currently files get downloaded to the $MOCHA_DIR/cache directory like in scoop, however we don’t actually check if there’s anything cached which can lead to repeated downloads. That’s something I’ll need to fix later on
Fuzzy search is really really good. While implementing mocha search I noticed the results returned by scoop search were in alphabetical order, which doesn’t make a lot of sense. If I do scoop search git the first result should probably be git As a result my implementation of search uses github.com/sahilm/fuzzy which is a small library which provides a fuzzy search implementation. Scoop also checks for binary name matches, e.g. package biodiff can provide a binary called git-biodiff and show up in search results. I decided to remove this for now, since I personally find it a bit unnecessary. scoop search also lists all search results, which is okay when results are sorted alphabetically but doesn’t make sense when searches are relevance based. Therefore, by default mocha search will list exact matches plus the 20 most relevant search results. This can be overridden by the --count argument, where setting it to 0 displays all results. A demonstration of mocha search vs scoop search can be seen in the video below.
mocha cache is a simple command. It shows you what files are currently in $MOCHA_DIR/cache directory and it clears them out. One thing I noticed was that scoop cache show actually displays raw bytes instead of human readable file sizes for each cache entry, which is a bit odd since the total they display is human readable. Therefore I made my implementation mocha cache list display human readable sizes since that’s a more reasonable default.
Shims are simple in concept, complicated in reality. So essentially a shim in mocha is just an executable which calls another executable. It’s similar to a shortcut in that sense, except it shows up in $PATH Thankfully the scoop project already has a repository with 4 different implementations for the shim binary, so I can just have mocha shim download one of those binaries. The complicated part was the PE Subsystem. The PE subsystem is basically a bit of info in each binary which tells Windows whether it’s a console application, or a GUI application. We need to set the PE subsystem of the shim exe to the PE subsystem of the binary we are calling for Windows to execute the binary properly. Hence I need to read and write raw binary data. All of this is just the implementation for exe shims. Scoop itself contains implementations for .bat/.cmd , .ps1 , .jar , .py and linux binaries , all of which have wildly different implementations compared to .exe shims. The video below shows the working set of mocha shim commands (those being add , remove and list ).
Spent a bit longer between devlogs this time, but it was worth it. So I realized the error messages were really bad. I was pretty much just passing errors up the call stack without adding any context, which isn’t great since it means our error messages will be useless to people reading them I therefore went through every single file of the codebase and wrote good error messages which add a bit of context every time we pass it up the call stack. I also did a bit of refactoring where I thought it would be worth it. For example in the shim module I now set the PE subsystem of the shim binary while it’s in memory instead of writing to disk twice. A few good examples of what the new error messages look like can be seen in the video below.
mocha update is another command which does very little but is very important. All it does is update the known_buckets file, and run git pull on all added buckets to update them. It can also update just the buckets you specify if you pass in an argument. I do need to improve the output of the command since it outputs raw git right now, but at least it’s functional. See the demo below.
Huge milestone!!! I’ve gotten mocha install working for very basic apps! This means the entire process of downloading a file, then extracting it, then creating a junction and finally creating a shim now works for basic pieces of software! So in terms of what I actually did this devlog, I added cache hits to the download command since it’s relevant to the install command. I then implemented the aforementioned .zip extraction and junction creation. Then all that was left was a bit of orchestration, getting everything to work together properly. See a working install of innounp using mocha install below!
Before working on more features and expanding the amount of apps mocha actually supports I wanted to go through the codebase and do a lot of cleanup since the codebase is quite messy. There are silly mistakes in some files and bad implementations in others. Hence the time I spent during this period was focused on moving code to where it should be and cleaning up some edge cases, specifically related to the bucket , config and shim modules. A good example of this is moving the code to get the active config to the config module instead of leaving it in main.go . Next up will be refactoring the commands , fileops , and manifest modules. I don’t have much to show so I figured I would present a feature I added but didn’t show earlier: the ability to skip cache hits with the --force flag when installing or downloading an app. Some context I forgot to add initially: I renamed the app module to manifest since I felt it was more accurate to what it actually handles scope wise.
Finished up the code cleanup in commands , fileops and manifests . I did catch a few edge cases and some incorrect behavior in the process, which is why I always spend so much time reviewing code. I did use AI to assist with code review because I think it’s an area where AI shines. AI is really good at finding small errors or inconsistencies in the codebase which I probably wouldn’t notice. For example, it identified that the ManifestReferences argument was not a required argument for the download command, which meant no help message was displayed on incorrect usage like the other commands. One big thing I will work on eventually is console output. Right now errors are well formatted but a lot of the time commands just run stuff without providing a lot of insight into what actions they are taking which isn’t great. Even the help menu is pretty useless right now (see the image below). Extra context: A manifest reference is a pointer to an app (e.g. main/ [email protected] )
So I added support for more apps by implementing more extractors. This means in theory any apps which don’t need a pre-install or post-install should work. To be more specific, I handle a few more properties on manifests. Those being extract_dir and innosetup , which inform how an app needs to be installed. I also implement 7zip and innounp as extractors to support more file formats which applications are distributed in. Of course there’s still a lot of work before I consider this ready for public use. I need to create commands for some basic operations like uninstalling, updating and listing apps. I also need to handle shortcuts otherwise GUI apps can’t be accessed from the start menu. Besides that I need to improve the user experience. As you can see in the video below mocha just sort of dumps everything to the console even if it’s not relevant. Help menus are also critical to get working properly.
I finished up mocha uninstall and mocha list , which means you can actually manage installed apps instead of manually deleting them. There’s not much that goes into mocha uninstall . You just need to remove the relevant shims and app directories since the apps that mocha supports are all portable. mocha list is similarly simple. It’s just loops over the directories in $MOCHA_DIR/apps and looks for apps along with the versions installed for each app.
Typically I don’t want to make devlogs for small stuff like this, but this is something I found really cool. So I was working on help messages for all the commands when I realized that mocha bucket list felt a bit slower than pretty much every other command. This is because we need to shell out to git 2 times per bucket, and I had 4 buckets added. While 8 git commands might not sound like a lot, it was enough to make mocha bucket list feel slow. So what I did is I parallelized the metadata fetching through an errgroup . Instead of fetching the metadata for each bucket in order, we fetch the metadata for all 4 buckets simultaneously. This led to a big performance uplift. About 3 times faster than the old version of mocha , and just over 12 times faster than scoop for this operation. See the video below.
As I mentioned in the previous devlog I added good help information to every bit of the CLI. It’s surprisingly difficult to write good help messages which explains everything to users in a few words I also changed the behaviour of the mocha cache clear command to not clear all cache by default. That’s now gated behind the --all flag in order to match scoop a bit more
We now create shortcuts! This means any GUI apps should show up properly in the start menu, just like they do when you install with scoop . All I really had to do was a bit of orchestration since I decided to vendor in an implementation from https://github.com/jxeng/shortcut Besides that I expanded the number of apps that are supported by implementing a bit of code that handle architecture specific bin fields, along with bin fields which store 2D arrays. I also cleared up some of the TODO items. I swapped the junction implementation to an implementation from https://github.com/nyaosorg/go-windows-junction since we were previously shelling out to CLI. That and I added a bit more zip bomb protection For the purposes of the video below I changed the location which shortcuts get put to my desktop. It’ll probably be configurable, and match scoop by putting shortcuts in the startup menu by default
This is going to be the equivalent of 2 devlogs since I thought I made one earlier for persists but I didn’t. New feature! We now handle persist items in order to store data between versions. These are files which are persisted between versions of an app. Lets take git as an example to explain why persist exists. Say you want to make sure your git config isn’t deleted every time you update. The issue with this is that the config file is saved in the version specfic directory. To resolve this we can keep the config in $MOCHA_DIR/persist and then symlink the config to where it needs to be, which is essentially what persist tells us to do. Since we handled persist items last time we can now implement mocha upgrade to update apps. The way scoop handles updates is by first removing anything that references the app, like shortcuts or shims . Then we just follow the install process from scratch. This leaves the old version available in case a user wants to revert versions due to a bug, while also updating to the latest available version. This can be seen in the video below, which shows me updating llama.cpp-hip-radeon .
So I’ve been doing a bit of refactoring, a bit of bug fixing and a bit of optimization. Essentially just polishing mocha before I work on the next feature. Here’s some of the stuff I did: created tests for ParseRefString to validate behavior cache manifest json between info calls since I/O is really slow bumped dependency versions refactored manifest/info.go Besides that I fixed the uninstall flow since it was really bugged after the latest changes. Essentially mocha would uninstall apps with incorrect info. It would also try to remove shims/shortcuts for apps which don’t have any active shims/shortcuts. I then added a bit of logging since the uninstall command didn’t give any user output for whatever reason (i forgot to earlier).
mocha now supports a user defined theme for output colors. In the process I ended up doing a lot of stuff related to the config. First thing I did was swap to fatih/color for colored output, since it handles stuff like colors in command prompt and removing color when output is piped. Then I refactored the config module. Earlier I would pass around a MochaConfiguration object through every function. Now I use a config singleton that’s accessible from any function. Why? Because it means I don’t need to pass the object every time I want to log information. Also means I don’t need to pass mochaDir through almost every function in the codebase. Getting user defined themes was a bit complicated because I needed a good way to handle a default theme so output doesn’t look bad if parsing fails. I handled this by only using the configured theme if every color resolves properly. Otherwise output falls back to the already loaded default theme. Due to this you still get colored output even if there are errors or warning before the configuration and theme is loaded.
I love refactoring!!!! I’ll probably end up spending another 20 hours just on refactoring because it’s so fun!!!! This time around I wanted to refactor the code so that our commands orchestrate stuff instead of the helper functions. For example, pkg.Install would first download a package, then install it, and then link it through shims and shortcuts all by itself. This causes issues because it means error messages become slightly worse, and it creates a class of bugs due to edge cases where we don’t necessarily want this order of orchestration. Hence I did a lot of refactoring in the pkg module. I also ended up adding a way to skip verification of downloads when downloading, installing or updating a package through --skip-verify . It’s a useful option in situations where there is a malformed manifest or simply no hash to begin with.
I’m writing this one right before F1 Qualifying at Spa! Continuing with the trend of some of my recent work, I improved what table outputs look like to be a little bit more readable. We now use proper separators in the form of Unicode Box Drawing Characters . I also made column alignment configurable, which improves legibility for some commands like mocha bucket list and mocha cache show . I’ve attached an image of the scoop and mocha versions of bucket list so you can compare for yourself.
Not sure why I didn’t do this earlier, but I’ve added success messages to commands where it makes sense. Also added a success color to the config so you can change what the success color is. I do still need to improve CLI output quite a bit, but it’s slowly getting there.
My summer break has ended so development is going to be a lot slower from now. I added mocha outdated so you can list outdated apps before upgrading them to a newer version. Besides that I tweaked a lot of stuff related to CLI output. For example I changed search to output one table, and simply outputting exact matches at the top of that table. I also changed a lot of messages which were using LogOutput to LogInfo so they use the correct color and output to stderr and not stdout .
Finally got a bit of time to do a bit of development. First thing I did was remove a field from install.json to match scoop . This means that mocha should be a drop in replacement for existing scoop installs. Then I added partial support for env_set and env_add_path . The main thing I need to do to complete the feature is parse variables and replace them with the appropriate paths. These 2 fields are some of the last manifest fields I need to support besides pre/post (un)install hooks.
Lot of time going into this devlog, but it makes sense since I did do a lot. I did this sweeping refactor of the entire commands module which moved around a lot of code. Essentially each command now gets it’s own directory under the commands module that represents it’s children/parents. For example commands/shim/remove/cmd.go contains code for the mocha shim remove command. Each cmd.go contains a Command struct that has the relevant fields and functions attached to it. This structure just makes things more organized and also means adding test files will be a bit easier since functionality is now isolated. I also sorted out the shim binary. So essentially https://github.com/ScoopInstaller/Shim offers different version of the shim binary which can be installed. Previously I hard coded the code to install cpp v0.1.0 but now users can run mocha shim binary releases to see the options and mocha shim binary setup to install their chosen binary. This also means we actually get the latest releases from GitHub.
Lots of small bug fixes and changes, I’ll just list them out: feat(cmd): allow removal of multiple shims in one execution (f2fae3f) fix(manifest): correctly ignore invalid shortcut entries (6a08478) fix(fileops): use correct registry type (5d5d796) fix(config): seed config with defaults (9dfaaff) fix(cmd): use correct release sources (a2a9ba1) fix(cmd): use bucket from install info (5a9109b) I also added support for more file types being shimmed, which helps a lot with compatibility. The file types are .py , .bat , .cmd , .jar and .ps1 .
I forgot to make a devlog in between so this will be like 2 bigger devlogs. I parallelized bucket updates, which speeds it up quite a bit. This also allowed me to try out parallelism even more, which I plan to apply throughout the CLI later on. I also added configuration options for the runners which mocha shim will use to run certain file types. For example, you can set the python-runner to select the python version that’ll be used to run python scripts that are shimmed. Downloads now have a progress bar, so you don’t need to wonder whether something is happening or not during a long download. Finally env_set is fully supported since I added the relevant variable parsing. This was pretty much just me cleaning out the TODO list before I ship. I also did a lot of smaller bug fixes and refactors as seen below. fix(commands): prevent app installation if already installed (cb27d07) fix(commands): fix config opening with “start” (74f3679) fix(commands): correctly handle non-apps when upgrading (f7419f6) fix: make LogOutput go to Stdout not Stderr (bc10357) fix: handle empty versions correctly (2287da9) fix(pkg): remove correct temp dir (33189b6) fix(shim): warn for unknown shim extension (622c2b4) fix: skip downloads with no hash by default (69d4e35) fix: use correct timeout for downloads (44e527b) fix: drop unnecessary return value from GetExecutableEntries (9fd845c) fix(config): remove unused option (1339971) fix(commands): don’t error for valid results (87c4d6c) refactor(config): rename variables/functions (f253d9d) fix: use unique temp directories (a159e23) refactor: use fmt.Fprintln directly (d2d54bf)
So I wrote a README, added a license (MIT of course) and setup CI/CD so that releases are automatically built and deployed. Honestly I forgot how hard it is to write a good README. You need to get a lot of information through without it looking like a wall of text.
Ships:
I made a package manager for Windows, which is somewhat backwards compatible with scoop packages. To be honest there’s still a lot of work that I want to do, but I have exams and college application coming up soon so I can’t. That’s not to say I’m not happy with the state of the ship. At the very least it has all the core features that a package manager should have, but there are still a lot of bugs which is why this is only v0.0.1. The biggest challenge by far was trying to figure out how Scoop does things internally. A lot of stuff just doesn’t have documentation, so you have to dig through the really messy PowerShell source code....
|
1793152526.0351846
|
1793238926.0351846
|
|
16590
|
StartupOS Backend API by @to_aarav_g | Stardance
|
to_aarav_g
|
1
|
14.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T15:11:20Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "🚀 Shipped a major update to StartupOS Backend ! After weeks of debugging, refactoring, and production testing, the backend powering StartupOS is now production-ready. What shipped: ✅ Authentication with session persistence ✅ AI provider router with automatic failover ✅ Blueprint generation APIs ✅ Website generation APIs ✅ Competitor intelligence APIs ✅ Daily founder briefs ✅ Dashboard APIs ✅ Production-grade error handling and logging ✅ Railway deployment with PostgreSQL + Prisma ✅ Full end-to-end testing Tech Stack ⚡ Fastify ⚡ TypeScript ⚡ Prisma ORM ⚡ PostgreSQL ⚡ Railway ⚡ Docker StartupOS Backend now reliably powers the entire founder journey—from startup idea to launch-ready business. Built with lots of coffee, debugging, and persistence ☕🚀 #HackClub #Stardance #Backend #Fastify #TypeScript #Prisma #PostgreSQL #AI", "repo": "", "demo": ""}]...
|
[{"post_id": 16111, "ts": "202 [{"post_id": 16111, "ts": "2026-06-26T06:20:22Z", "hours": 8.2789, "text": "🚀 Shipped a major milestone for StartupOS Backend today!StartupOS Backend powers the entire StartupOS platform — an AI startup copilot that helps founders go from idea → blueprint → launch.What I worked on:✅ Fixed production deployment issues on Railway✅ Added robust AI provider failover across multiple providers✅ Implemented persistent website generation and retrieval APIs✅ Added competitor intelligence and daily brief endpoints✅ Improved error handling and graceful fallbacks across services✅ Fixed authentication/session issues and added token refresh support✅ Added production logging and route debugging utilities✅ Removed Redis dependency from critical flows to improve reliability✅ Performed full end-to-end QA on productionTech Stack:FastifyTypeScriptPrisma ORMPostgreSQLRailwayDockerMulti-provider AI Router (Gemini, Groq, OpenRouter, NIM)Current Status:🎉 Backend is now production-ready for beta users.All core flows are working:AuthenticationStartup creationBlueprint generationWebsite generationCompetitor intelligenceDaily briefsDashboard APIsReady for real user testing 🚀#Stardance #HackClub #TypeScript #Fastify #Prisma #PostgreSQL #AI #WebDev #StartupOS"}, {"post_id": 11967, "ts": "2026-06-19T15:09:48Z", "hours": 5.2864, "text": "🚀 Big StartupOS milestone today!After rebuilding the backend and fixing countless issues, StartupOS can now:✅ Generate startup blueprints✅ Generate actual multi-page websites with AI✅ Validate the generated HTML✅ Deploy websites to VercelThe journey now looks like:Idea → Blueprint → Website → Deploy → Public URLFeels amazing seeing StartupOS go from generating plans to generating real websites. 🎉Hours today: 5"}]...
|
Title: StartupOS Backend API by @to_aarav_g | Star Title: StartupOS Backend API by @to_aarav_g | Stardance
Devlogs:
🚀 Big StartupOS milestone today!After rebuilding the backend and fixing countless issues, StartupOS can now:✅ Generate startup blueprints✅ Generate actual multi-page websites with AI✅ Validate the generated HTML✅ Deploy websites to VercelThe journey now looks like:Idea → Blueprint → Website → Deploy → Public URLFeels amazing seeing StartupOS go from generating plans to generating real websites. 🎉Hours today: 5
🚀 Shipped a major milestone for StartupOS Backend today!StartupOS Backend powers the entire StartupOS platform — an AI startup copilot that helps founders go from idea → blueprint → launch.What I worked on:✅ Fixed production deployment issues on Railway✅ Added robust AI provider failover across multiple providers✅ Implemented persistent website generation and retrieval APIs✅ Added competitor intelligence and daily brief endpoints✅ Improved error handling and graceful fallbacks across services✅ Fixed authentication/session issues and added token refresh support✅ Added production logging and route debugging utilities✅ Removed Redis dependency from critical flows to improve reliability✅ Performed full end-to-end QA on productionTech Stack:FastifyTypeScriptPrisma ORMPostgreSQLRailwayDockerMulti-provider AI Router (Gemini, Groq, OpenRouter, NIM)Current Status:🎉 Backend is now production-ready for beta users.All core flows are working:AuthenticationStartup creationBlueprint generationWebsite generationCompetitor intelligenceDaily briefsDashboard APIsReady for real user testing 🚀#Stardance #HackClub #TypeScript #Fastify #Prisma #PostgreSQL #AI #WebDev #StartupOS
Ships:
🚀 Shipped a major update to StartupOS Backend ! After weeks of debugging, refactoring, and production testing, the backend powering StartupOS is now production-ready. What shipped: ✅ Authentication with session persistence ✅ AI provider router with automatic failover ✅ Blueprint generation APIs ✅ Website generation APIs ✅ Competitor intelligence APIs ✅ Daily founder briefs ✅ Dashboard APIs ✅ Production-grade error handling and logging ✅ Railway deployment with PostgreSQL + Prisma ✅ Full end-to-end testing Tech Stack ⚡ Fastify ⚡ TypeScript ⚡ Prisma ORM ⚡ PostgreSQL ⚡ Railway ⚡ Docker StartupOS Backend now reliably powers the entire founder journey—from startup idea to launch-ready business. Built with lots of coffee, debugging, and persistence ☕🚀 #HackClub #Stardance #Backend #Fastify #TypeScript #Prisma #PostgreSQL #AI...
|
1793134449.60647
|
1793220849.60647
|
|
16595
|
StarOS by @Alafandri | Stardance
|
Alafandri
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T20:15:59Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a webOS that is very magical and really cool! It wasn’t that challenging to make but I obviously ran into small problems that I was able to very quickly fix. I am proud of the final result cause the design and look of it turned out to be better than I expected. What people should know when they test the project is that I hope you enjoy what I have made!", "repo": "https://github.com/Alafandri/StarOS", "demo": "https://alafandri.github.io/StarOS/"}]...
|
[{"post_id": 7110, "ts": "2026 [{"post_id": 7110, "ts": "2026-06-11T21:36:35Z", "hours": 0.2611, "text": "Devlog 3 version 1.0 StarOS is ready!! yipeeee. I am so excited to make it public for all of you. I had a lot of fun making it and I hope you have fun using it. I know that there isn’t that much to do there yet but I will definetly update it after I finish my next project."}, {"post_id": 7091, "ts": "2026-06-11T21:19:04Z", "hours": 0.2958, "text": "Devlog 2 StarOS v0.5 StarOS is almost done! I have one more app planned to add into it and after that I am planning on publishing it!"}, {"post_id": 7073, "ts": "2026-06-11T20:59:11Z", "hours": 1.4842, "text": "Devlog 1 StarOS v0.00001.1 Hello there everyone! This is my very first devlog here and it is about StarOS for which I have just completed all of the basic stuff for it to function. Next I plan on making the OS look more cleaner and prettier! See you soon!"}]...
|
Title: StarOS by @Alafandri | Stardance
Devlogs:
Title: StarOS by @Alafandri | Stardance
Devlogs:
Devlog 1 StarOS v0.00001.1 Hello there everyone! This is my very first devlog here and it is about StarOS for which I have just completed all of the basic stuff for it to function. Next I plan on making the OS look more cleaner and prettier! See you soon!
Devlog 2 StarOS v0.5 StarOS is almost done! I have one more app planned to add into it and after that I am planning on publishing it!
Devlog 3 version 1.0 StarOS is ready!! yipeeee. I am so excited to make it public for all of you. I had a lot of fun making it and I hope you have fun using it. I know that there isn’t that much to do there yet but I will definetly update it after I finish my next project.
Ships:
I made a webOS that is very magical and really cool! It wasn’t that challenging to make but I obviously ran into small problems that I was able to very quickly fix. I am proud of the final result cause the design and look of it turned out to be better than I expected. What people should know when they test the project is that I hope you enjoy what I have made!...
|
1793123678.3639777
|
1793210078.3639777
|
|
16628
|
Homeserver Dashboard by @timon | Stardance
|
timon
|
1
|
10.0
|
42
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T16:21:15Z", "hours": 3.0, "multiplier": 13.37, "payout": 42, "blessing": "neutral", "text": "I built a simple selfhosted server dashboard (template). It shows main services like Portainer, Nextcloud, Proxy Manager, and Pi hole (which you can customize yourself) in a grid layout with access buttons to the link with ports. The most challenging parts were the clock and the status indicator system. The clock seemed simple at first, but making it update correctly every second and stay formatted (00 00 style) took some trial and error. The status indicator (online/offline dots) was also difficult because I needed to figure out how to check if a web service is reachable from the browser. I used AI help to understand me how the checking works Im proud of how clean and minimal the final design turned out. It feels nice to use and i will use this dashboard myself. To test it, just open the HTML file in a browser. The layout and clock work immediately. For the status indicators, you need to replace the data-url in each card with the real URL of your service (for example http://localhost:9000). The dot will turn green if the service is reachable and red if it is not. To add a new card just copy an existing card block in the HTML file, change the title, describtion, buttons and set the url like explained before :)", "repo": "https://github.com/Facticee/facticee.github.io", "demo": "https://facticee.github.io"}]...
|
[{"post_id": 12200, "ts": "202 [{"post_id": 12200, "ts": "2026-06-19T22:15:50Z", "hours": 5.0, "text": "At first, adding or deleting service cards required manually hardcoding HTML into the index.html file. Now, the dashboard is fully dynamic! You can manage your services directly via the “+ Add Service” button / ui and all data is instantly saved in the browser’s localStorage, Though, when moving from hardcoded files to user inputs, you openup two dangerous vulnerabilities: XSS (Cross-Site Scripting) and URL Script Injection (e.g. entering javascript:alert(‘test’) into the URL field to execute code). To fix that, I changed the saving logic. Here is what I added: if (!url.toLowerCase().startsWith(‘http://’) && !url.toLowerCase().startsWith(‘https://’)) { return alert(’The URL must start with http:// or https:// ’); } So now it has to start with http:// or https:// and you cant add code because it would just open a website."}, {"post_id": 11497, "ts": "2026-06-18T19:49:39Z", "hours": 2.0, "text": "I am working on an update that gives the option to add a card through the website (so you dont have to hardcode it in to the file like before). I finished the button and i am working on the java script for the popup of this button where you need to enter a name, url and (optional) a description. Im on it and its a bit difficult. I will keep you updated!"}, {"post_id": 9366, "ts": "2026-06-15T18:21:25Z", "hours": 0.0, "text": "Fixxed a bug where the status indicator would sometimes not be showed when hovered over the boxes for some reason. Done :)"}, {"post_id": 6911, "ts": "2026-06-11T16:11:37Z", "hours": 0.0, "text": "I made the status dots feature actually work. Each card now has a dot that shows if a service is online or not. If the service works, the dot is green, if not it is red. It updates automatically every few seconds. I used some AI help and also looked up a few things on Google to understand how to check if a website is reachable in JavaScript."}, {"post_id": 6896, "ts": "2026-06-11T15:44:06Z", "hours": 0.0, "text": "I added some UI improvements for the dashboard and the status indicators (the little dots on the cards). At first I ran into a problem where the animation didn’t behave correctly and the status dots were not showing properly once hovered. It took a bit of testing, but I figured out that it was related to the CSS setup and how the hover/animation effects were combined. After adjusting the everything started working as expected again."}, {"post_id": 6849, "ts": "2026-06-11T14:35:07Z", "hours": 2.0, "text": "Started working on a small internal dashboard for my Docker services. The goal is to keep everything simple and just get a clean dashboard with quick links to containers and self-hosted apps. Most of the time went into getting a idea (even though its pretty simple now) My first version looked too plain, while another version felt way too much and for a utility page. Current progress: page structure finished grid layout working Header and live clock working Example service cards added"}]...
|
Title: Homeserver Dashboard by @timon | Stardance
Title: Homeserver Dashboard by @timon | Stardance
Devlogs:
Started working on a small internal dashboard for my Docker services. The goal is to keep everything simple and just get a clean dashboard with quick links to containers and self-hosted apps. Most of the time went into getting a idea (even though its pretty simple now) My first version looked too plain, while another version felt way too much and for a utility page. Current progress: page structure finished grid layout working Header and live clock working Example service cards added
I added some UI improvements for the dashboard and the status indicators (the little dots on the cards). At first I ran into a problem where the animation didn’t behave correctly and the status dots were not showing properly once hovered. It took a bit of testing, but I figured out that it was related to the CSS setup and how the hover/animation effects were combined. After adjusting the everything started working as expected again.
I made the status dots feature actually work. Each card now has a dot that shows if a service is online or not. If the service works, the dot is green, if not it is red. It updates automatically every few seconds. I used some AI help and also looked up a few things on Google to understand how to check if a website is reachable in JavaScript.
Fixxed a bug where the status indicator would sometimes not be showed when hovered over the boxes for some reason. Done :)
I am working on an update that gives the option to add a card through the website (so you dont have to hardcode it in to the file like before). I finished the button and i am working on the java script for the popup of this button where you need to enter a name, url and (optional) a description. Im on it and its a bit difficult. I will keep you updated!
At first, adding or deleting service cards required manually hardcoding HTML into the index.html file. Now, the dashboard is fully dynamic! You can manage your services directly via the “+ Add Service” button / ui and all data is instantly saved in the browser’s localStorage, Though, when moving from hardcoded files to user inputs, you openup two dangerous vulnerabilities: XSS (Cross-Site Scripting) and URL Script Injection (e.g. entering javascript:alert(‘test’) into the URL field to execute code). To fix that, I changed the saving logic. Here is what I added: if (!url.toLowerCase().startsWith(‘http://’) && !url.toLowerCase().startsWith(‘https://’)) { return alert(’The URL must start with http:// or https:// ’); } So now it has to start with http:// or https:// and you cant add code because it would just open a website.
Ships:
I built a simple selfhosted server dashboard (template). It shows main services like Portainer, Nextcloud, Proxy Manager, and Pi hole (which you can customize yourself) in a grid layout with access buttons to the link with ports. The most challenging parts were the clock and the status indicator system. The clock seemed simple at first, but making it update correctly every second and stay formatted (00 00 style) took some trial and error. The status indicator (online/offline dots) was also difficult because I needed to figure out how to check if a web service is reachable from the browser. I used AI help to understand me how the checking works Im proud of how clean and minimal the final design turned out. It feels nice to use and i will use this dashboard myself. To test it, just open the HTML file in a browser. The layout and clock work immediately. For the status indicators, you need to replace the data-url in each card with the real URL of your service (for example http://localhost:9000). The dot will turn green if the service is reachable and red if it is not. To add a new card just copy an existing card block in the HTML file, change the title, describtion, buttons and set the url like explained before :)...
|
1792882048.964535
|
1793746048.964535
|
|
16632
|
Marunnundo by @Adarsh | Stardance
|
Adarsh
|
1
|
4.0
|
16
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T17:50:54Z", "hours": 4.0, "multiplier": 4.3, "payout": 16, "blessing": "neutral", "text": "I made a medicine finder for my state", "repo": "https://github.com/stairmoss/Marunnundo", "demo": "https://marunnundo.vercel.app/"}]...
|
[{"post_id": 8182, "ts": "2026 [{"post_id": 8182, "ts": "2026-06-13T17:05:42Z", "hours": 0.8606, "text": "made the portfolio website for this and also in this i have made a video from veo to animate which is showed in side"}, {"post_id": 8079, "ts": "2026-06-13T14:19:56Z", "hours": 0.8553, "text": "i have added a side bar which give the info about the pharmacy which redirects to the google search and changed the green button color to the blue"}, {"post_id": 8008, "ts": "2026-06-13T11:14:13Z", "hours": 0.8369, "text": "i have added dark mode with a lime green cuz blue wasnt perfect and also then also i added these satellite map and also the malayalam language"}, {"post_id": 6926, "ts": "2026-06-11T16:35:11Z", "hours": 0.7675, "text": "i have made the website working and which includes as we can give the current location it gives us near pharmacy and its google profile so that people get direction on map"}, {"post_id": 6853, "ts": "2026-06-11T14:41:47Z", "hours": 0.4817, "text": "worked on the UI"}]...
|
Title: Marunnundo by @Adarsh | Stardance
Devlogs: Title: Marunnundo by @Adarsh | Stardance
Devlogs:
worked on the UI
i have made the website working and which includes as we can give the current location it gives us near pharmacy and its google profile so that people get direction on map
i have added dark mode with a lime green cuz blue wasnt perfect and also then also i added these satellite map and also the malayalam language
i have added a side bar which give the info about the pharmacy which redirects to the google search and changed the green button color to the blue
made the portfolio website for this and also in this i have made a video from veo to animate which is showed in side
Ships:
I made a medicine finder for my state...
|
1793278112.5127378
|
1793364512.5127378
|
|
16634
|
Mover by @pauljako | Stardance
|
pauljako
|
1
|
19.83
|
172
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T17:18:10Z", "hours": 13.0, "multiplier": 13.34, "payout": 172, "blessing": "neutral", "text": "Mover is a Public Transit App for WearOS. Powered by Transitous, it lets you see Departures of Public Transit Stops all around the world! Getting the Logo to Display properly and the Search Button to actually show a Keyboard were the most challenging parts, especially as this was my first WearOS App. I learned a lot of new Stuff and I still have plans for the future!", "repo": "https://github.com/pauljako/Mover", "demo": "https://github.com/pauljako/Mover/releases/download/v1.0/app-release.apk"}]...
|
[{"post_id": 26457, "ts": "202 [{"post_id": 26457, "ts": "2026-07-11T08:25:29Z", "hours": 0.9389, "text": "You can now change the Transport Types that the Application will use for Routing! For me, this is very practical because I am not able to take High-Speed Rail with my Ticket here in Germany. For some reason though, the Application had some performance-issues recently. I will have to investigate this further…"}, {"post_id": 26061, "ts": "2026-07-10T17:27:06Z", "hours": 1.6725, "text": "I have started on implementing a Settings-Screen. Right now, it only offers you to reset Mover but it should also be possible to change the Transport Types using it (i.e. disabling High Speed Rail or Coaches from Routing Results)"}, {"post_id": 24680, "ts": "2026-07-08T13:03:14Z", "hours": 1.0397, "text": "You can now Bookmark your Journeys for Quick Access! Thanks to Jetpack Compose (I really, really love it) it was pretty easy and even works offline! I am still thinking on how I can improve this because you do not actually see the Destination of your Journey in the HomeView yet..,"}, {"post_id": 24205, "ts": "2026-07-07T16:53:22Z", "hours": 1.0289, "text": "I added a View to actually see the suggested Route. I stole most of the Code from the “Entire Journey”-View and added Cards, that show a Walk. This means, that Mover is now starting to actually get usable. You can figure out how to get from somewhere to somewhere. The biggest Problem right now is that you always have to type in the destination as that is not cached and the selected Route isn’t either…"}, {"post_id": 24079, "ts": "2026-07-07T12:38:52Z", "hours": 2.1514, "text": "Initial Routing support! There was a lot I had to implement for this. After thinking about how you can actually enter the two Stations, I decided to just put a Search-Button on the Departure List and reuse most of the existing UI. It also was not easy to adapt the Data-Models because Transitous also returns Walking-Instructions as Trips. Let me repeat that: AS TRIPS. In which world should a Walk between two nearby stations be in the same array as the normal Trips?! Anyways, this is far from completion as you can’t actually see how you are supposed to travel."}, {"post_id": 9318, "ts": "2026-06-15T17:06:01Z", "hours": 2.0464, "text": "I added a Logo. I am not good at this but it should incorporate both a clock face and a Transport-Network-Map. After creating the Foreground-Part of it in Inkscape, I wasted two entire hours trying to get it into an Android Asset. They don’t directly support SVGs but after converting it in Resource Manager, it was cropped on the Splash Screen, while it wasn’t on the launcher. This drove me crazy. After trying various settings in Android Studio, I decided to just make it smaller. I am pretty sure, the Logo could still be improved but I am definitely not an artist."}, {"post_id": 8583, "ts": "2026-06-14T08:34:58Z", "hours": 1.7653, "text": "I have added an initial view of a whole Journey. It is still very rough and needs a lot more polish, especially with the Text-Wrapping of the Stops. But for now, it works…"}, {"post_id": 8048, "ts": "2026-06-13T12:52:22Z", "hours": 1.6247, "text": "Mover can now use your device’s location for showing stops around you! This is implemented using the reverse-geocode endpoint. The requesting of the permission was not easy though. I did not understand how to utilize onRequestPermissionResult so the App will put you back on the Home-Screen the first time you use it. I am a bit unsure on what to work on next. I might add a Screen to show an entire Journey."}, {"post_id": 7931, "ts": "2026-06-13T07:13:40Z", "hours": 0.6783, "text": "This is just a quick Update: I added an initial ReadMe.md and a search results screen. When you now search for a stop, you will be able to select from multiple results."}, {"post_id": 7593, "ts": "2026-06-12T18:15:51Z", "hours": 1.5114, "text": "The Search is finally working! Well… sort of. As you can see in the Video, there is no “Search Results” Page. It just displays, whatever Transitous returned first. I removed the Hardcoded Stations on the Homescreen and replaced them with Stations, that you previously searched for. My next Goals are a Results-Page and the ability, to see Stations near you. PS: The Artifacts and Frame-Jumps are related to the encoder of scrcpy. It looks pretty™ smooth in Real Life."}, {"post_id": 7502, "ts": "2026-06-12T14:45:02Z", "hours": 1.8067, "text": "We now have a Search Button! This took so freakin long because I can’t simply add a Text-Field like on normal Android. Instead, I have to invoke an Intent that launches GBoard. Now onto the next Step: Actually making it functional…"}, {"post_id": 6858, "ts": "2026-06-11T14:48:00Z", "hours": 3.4664, "text": "This is my first Devlog. Mover is an App to see the Departures of Public Transit Stops on your WearOS Watch. It uses Transitous as it’s API and (currently) does not require a Companion App. You are already able to see the Departures but the Stops are still hardcoded. This is my next Goal: Have a Searchbar for Stops."}]...
|
Title: Mover by @pauljako | Stardance
Devlogs:
Th Title: Mover by @pauljako | Stardance
Devlogs:
This is my first Devlog. Mover is an App to see the Departures of Public Transit Stops on your WearOS Watch. It uses Transitous as it’s API and (currently) does not require a Companion App. You are already able to see the Departures but the Stops are still hardcoded. This is my next Goal: Have a Searchbar for Stops.
We now have a Search Button! This took so freakin long because I can’t simply add a Text-Field like on normal Android. Instead, I have to invoke an Intent that launches GBoard. Now onto the next Step: Actually making it functional…
The Search is finally working! Well… sort of. As you can see in the Video, there is no “Search Results” Page. It just displays, whatever Transitous returned first. I removed the Hardcoded Stations on the Homescreen and replaced them with Stations, that you previously searched for. My next Goals are a Results-Page and the ability, to see Stations near you. PS: The Artifacts and Frame-Jumps are related to the encoder of scrcpy. It looks pretty™ smooth in Real Life.
This is just a quick Update: I added an initial ReadMe.md and a search results screen. When you now search for a stop, you will be able to select from multiple results.
Mover can now use your device’s location for showing stops around you! This is implemented using the reverse-geocode endpoint. The requesting of the permission was not easy though. I did not understand how to utilize onRequestPermissionResult so the App will put you back on the Home-Screen the first time you use it. I am a bit unsure on what to work on next. I might add a Screen to show an entire Journey.
I have added an initial view of a whole Journey. It is still very rough and needs a lot more polish, especially with the Text-Wrapping of the Stops. But for now, it works…
I added a Logo. I am not good at this but it should incorporate both a clock face and a Transport-Network-Map. After creating the Foreground-Part of it in Inkscape, I wasted two entire hours trying to get it into an Android Asset. They don’t directly support SVGs but after converting it in Resource Manager, it was cropped on the Splash Screen, while it wasn’t on the launcher. This drove me crazy. After trying various settings in Android Studio, I decided to just make it smaller. I am pretty sure, the Logo could still be improved but I am definitely not an artist.
Initial Routing support! There was a lot I had to implement for this. After thinking about how you can actually enter the two Stations, I decided to just put a Search-Button on the Departure List and reuse most of the existing UI. It also was not easy to adapt the Data-Models because Transitous also returns Walking-Instructions as Trips. Let me repeat that: AS TRIPS. In which world should a Walk between two nearby stations be in the same array as the normal Trips?! Anyways, this is far from completion as you can’t actually see how you are supposed to travel.
I added a View to actually see the suggested Route. I stole most of the Code from the “Entire Journey”-View and added Cards, that show a Walk. This means, that Mover is now starting to actually get usable. You can figure out how to get from somewhere to somewhere. The biggest Problem right now is that you always have to type in the destination as that is not cached and the selected Route isn’t either…
You can now Bookmark your Journeys for Quick Access! Thanks to Jetpack Compose (I really, really love it) it was pretty easy and even works offline! I am still thinking on how I can improve this because you do not actually see the Destination of your Journey in the HomeView yet..,
I have started on implementing a Settings-Screen. Right now, it only offers you to reset Mover but it should also be possible to change the Transport Types using it (i.e. disabling High Speed Rail or Coaches from Routing Results)
You can now change the Transport Types that the Application will use for Routing! For me, this is very practical because I am not able to take High-Speed Rail with my Ticket here in Germany. For some reason though, the Application had some performance-issues recently. I will have to investigate this further…
Ships:
Mover is a Public Transit App for WearOS. Powered by Transitous, it lets you see Departures of Public Transit Stops all around the world! Getting the Logo to Display properly and the Search Button to actually show a Keyboard were the most challenging parts, especially as this was my first WearOS App. I learned a lot of new Stuff and I still have plans for the future!...
|
1793274752.3186984
|
1793361152.3186984
|
|
16640
|
Melody Rush Saga by @Shaurya_190258 | Stardance
|
Shaurya_190258
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T16:32:58Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Melody Rush Saga, a 180 BPM rhythm game where you tap glass balls to the beat across 7 songs. The game features a dynamic day/night cycle with stars, moon, and planets, plus power-ups like airplane lane clears, gem collection, shields, and a skull ball that ends your game if tapped. The hardest challenge was getting the game to work in release mode on Android. My app kept crashing with a ClassNotFoundException error that took over 20 builds and days of debugging to fix. I learned about ProGuard rules, Kotlin vs Java MainActivity, and how Android handles release builds differently from debug. I’m most proud of the skull ball mechanic — it only triggers Game Over when you actually tap it, not when it falls off screen. Getting that logic right taught me more about game design than any tutorial could. To test my game, download it free from Google Play Store. Pick any song, tap the falling glass balls, try the airplane power-up, collect gems, and avoid the skull! It works best on Android phones. Let me know your high score!", "repo": "https://github.com/shaurya190258/melody-rush-saga", "demo": "https://play.google.com/store/apps/details?id=com.shaurya.melodyrush"}]...
|
[{"post_id": 10030, "ts": "202 [{"post_id": 10030, "ts": "2026-06-16T16:22:20Z", "hours": 0.25, "text": "honestly i spent way too long on this one. the skull ball was supposed to end the game only when you tap it, but it was also killing players when it just fell off the screen. that’s not how it should work lol turns out the updateBalls() method was calling gameOver() for EVERY type of ball that went past the screen. i just needed to make it skip the skull. two lines of code. THREE HOURS of staring at my screen wondering why it wasn’t working 😭 also fixed the overlapping issue where regular balls were hiding behind skulls. players were dying without even seeing what they tapped. that felt unfair so i made them spawn separately now still learning. still breaking things. still fixing them. this is my first real game and im just a 11th grader figuring things out as i go"}]...
|
Title: Melody Rush Saga by @Shaurya_190258 | Stard Title: Melody Rush Saga by @Shaurya_190258 | Stardance
Devlogs:
honestly i spent way too long on this one. the skull ball was supposed to end the game only when you tap it, but it was also killing players when it just fell off the screen. that’s not how it should work lol turns out the updateBalls() method was calling gameOver() for EVERY type of ball that went past the screen. i just needed to make it skip the skull. two lines of code. THREE HOURS of staring at my screen wondering why it wasn’t working 😭 also fixed the overlapping issue where regular balls were hiding behind skulls. players were dying without even seeing what they tapped. that felt unfair so i made them spawn separately now still learning. still breaking things. still fixing them. this is my first real game and im just a 11th grader figuring things out as i go
Ships:
I built Melody Rush Saga, a 180 BPM rhythm game where you tap glass balls to the beat across 7 songs. The game features a dynamic day/night cycle with stars, moon, and planets, plus power-ups like airplane lane clears, gem collection, shields, and a skull ball that ends your game if tapped. The hardest challenge was getting the game to work in release mode on Android. My app kept crashing with a ClassNotFoundException error that took over 20 builds and days of debugging to fix. I learned about ProGuard rules, Kotlin vs Java MainActivity, and how Android handles release builds differently from debug. I’m most proud of the skull ball mechanic — it only triggers Game Over when you actually tap it, not when it falls off screen. Getting that logic right taught me more about game design than any tutorial could. To test my game, download it free from Google Play Store. Pick any song, tap the falling glass balls, try the airplane power-up, collect gems, and avoid the skull! It works best on Android phones. Let me know your high score!...
|
1793134342.7049503
|
1793220742.7049503
|
|
16651
|
TheWindArcanumOS by @TheWindArcanum | Stardance
|
TheWindArcanum
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T15:50:35Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first webOS It was very..new; it’s my first time even touching code, so it took me a while to even be able to comprehend what was happening", "repo": "https://github.com/TheWindArcanum/TheWindArcanum.OS", "demo": "https://thewindarcanum.github.io/TheWindArcanum.OS/"}]...
|
[{"post_id": 22910, "ts": "202 [{"post_id": 22910, "ts": "2026-07-05T15:31:33Z", "hours": 0.7964, "text": "Made the UI in CSS, over 150 lines of code just for this aesthetic, completely worth it, I love video games, so I’m gonna show that to the world, GOOD NEWS, THE BUTTONS WORK! I made the clock look better and bigger and shoved it into timeout(the corner), AND THE FONT I WENT THROUGH 5 DIFFERENT FONTS JUST TO COME BACK TO THIS ONE LOL, i changed up the color scheme too, well that’s my last devlog for this project for a while, i have a lot more planned for webOS 2 though SO PLS GIVE ME YOUR SUPPORT(i want a camera to get better shots of clouds- I’m a amateur photographer)"}, {"post_id": 22824, "ts": "2026-07-05T12:56:40Z", "hours": 4.4739, "text": "I started working on the CSS and JS, and it’s starting to look… good? Idk, but I’ve spent hours trying to GET THESE UNCOOPERATIVE BUTTONS TO WORK! Oh, and I’ve also been learning a lot about coding; for example, the memes were not kidding. This is painful. More next time"}, {"post_id": 8083, "ts": "2026-06-13T14:31:13Z", "hours": 0.6461, "text": "Started working on the html bit of it, basically just laying the foundation for it, i just stuck to the guide(i had no clue what i was doing pls send help)"}]...
|
Title: TheWindArcanumOS by @TheWindArcanum | Stard Title: TheWindArcanumOS by @TheWindArcanum | Stardance
Devlogs:
Started working on the html bit of it, basically just laying the foundation for it, i just stuck to the guide(i had no clue what i was doing pls send help)
I started working on the CSS and JS, and it’s starting to look… good? Idk, but I’ve spent hours trying to GET THESE UNCOOPERATIVE BUTTONS TO WORK! Oh, and I’ve also been learning a lot about coding; for example, the memes were not kidding. This is painful. More next time
Made the UI in CSS, over 150 lines of code just for this aesthetic, completely worth it, I love video games, so I’m gonna show that to the world, GOOD NEWS, THE BUTTONS WORK! I made the clock look better and bigger and shoved it into timeout(the corner), AND THE FONT I WENT THROUGH 5 DIFFERENT FONTS JUST TO COME BACK TO THIS ONE LOL, i changed up the color scheme too, well that’s my last devlog for this project for a while, i have a lot more planned for webOS 2 though SO PLS GIVE ME YOUR SUPPORT(i want a camera to get better shots of clouds- I’m a amateur photographer)
Ships:
I made my first webOS It was very..new; it’s my first time even touching code, so it took me a while to even be able to comprehend what was happening...
|
1793282002.3364198
|
1793368402.3364198
|
|
16683
|
Blur Stuff by @AbdurRehman | Stardance
|
AbdurRehman
|
1
|
126.53
|
826
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T15:46:55Z", "hours": 118.0, "multiplier": 14.02, "payout": 826, "blessing": "neutral", "text": "I made Blur Stuff, a privacy focused tool for safely sharing images, videos, GIFs, and documents. It automatically detects sensitive information such as faces, license plates, text, and PII, then lets you anonymize the detected areas with different anonymization effects. It also removes EXIF metadata so other sensitive information isn’t left hidden inside the file. The goal of this project is to make sharing media safely as easy as uploading it. Instead of manually searching through a file like a document or photo and manually covering stuff you don’t want others to see, Blur Stuff does this work for you. The hardest part of making this project was making anonymization work reliably across different types of media. Images were relatively simple, but videos and GIFs require frame by frame processing while keeping detections consistent over time. And to make things efficient and fast I also had to deal with things like tracking which were really tricky. Connecting the frontend and backend was also another challenge and then hosting everything also brought it’s problems with dependency conflicts which took quite a while to solve. The thing I am most proud of is that this became a real working and professional looking application rather than just a prototype type thing. It supports most of the commonly used media formats, has multiple customization options among other neat functionalities. Also I like how this project is privacy focused. Like it doesn’t store the user’s files ever. It just processes them, removing EXIF, and gives the result. Blur Stuff can be tested by uploading an image containing faces, text, or a license plate and let it detect the sensitive regions and then select what you want anonymized, and run the anonymization. The current deployment has limited memory and resources since I’m on a free plan, so larger videos and documents can take a while to process, and very large files may run into resource limitations. The app is also deployed using Railway’s serverless option, so the server may need a few seconds to start up if it hasn’t received a request recently. Also the selected region anonymization for videos is still a bit buggy but mostly it works. These are areas I will improve in the future.", "repo": "https://github.com/RealAbdurRehman/blur-stuff", "demo": "https://blurstuff.up.railway.app"}]...
|
[{"post_id": 50269, "ts": "202 [{"post_id": 50269, "ts": "2026-08-19T13:00:35Z", "hours": 8.5269, "text": "Since shipping Blur Stuff, I got feedback that the frontend felt too generic so I completely revamped the UI to give it a more intentional and fun style. I redesigned everything from colors to typography and everything else. Now the app has a more personal feel. I also cleaned up some small things here and there."}, {"post_id": 47548, "ts": "2026-08-15T14:59:59Z", "hours": 6.7497, "text": "Since the previous dev log, I have been focused on getting Blur Stuff ready for deployment. This ended up being much more painful than I expected. The biggest part was dealing with dependency issues. The project worked locally, but moving everything to a production environment exposed a bunch of problems with Python versions, PaddlePaddle, PaddleOCR, PaddleX, PyYAML, spaCy, OpenCV and other dependencies. I spent a lot of time testing different configurations, fixing dependency conflicts, debugging the production container, and figuring out why things that seemed to work okay locally were breaking during deployment. The biggest headache was PaddleOCR. I had to deal with missing system libraries, model downloading, Paddle initialization issues and eventually a oneDNN runtime error that was causing OCR requests to return 503s. After a lot of debugging and testing different configurations, I eventually got the OCR pipeline working properly in production. That was probably the one of the most frustrating parts of the entire project, but it is finally done. I also switched the spaCy model from en_core_web_lg to en_core_web_sm. The larger model was unnecessarily heavy for what Blur Stuff needs and was making deployments take way longer. Switching to the smaller model made deployment faster and also improved performance without having a noticeable impact on the PII detection quality. After successful deployment I finished the README and added the final assets, screenshots, logo and documentation. I added the MIT license, favicon, deployment related changes and generally cleaned up the entire repository. At this point, I think Blur Stuff is ready to ship. There are definitely still improvements I could make, especially improving performance, making video anonymization more reliable and efficient, and polishing various parts of the application but I don’t want to spend more time trying to make everything perfect. The current deployment is also running on Railway’s free plan, so there are some resource and memory limitations since Blur Stuff runs several machine learning models in the same process. For now, I’m okay with that rather than spending more time optimizing around the limitations of a free deployment. For now, I’m calling it finished and shipping it since the core functionality is working and the project is deployed. I’ll definitely come back to Blur Stuff later to improve it, but I think it’s time to move on to something new."}, {"post_id": 46326, "ts": "2026-08-13T13:59:24Z", "hours": 10.0189, "text": "Since the previous dev log, I worked on fixing the remaining issues in the anonymization workflow and finishing the frontend around the application. The biggest thing I worked on was selected video anonymization. There were still some problems where selected areas could stop being anonymized correctly or the anonymization could move away from the actual object as it moved through the video or retracking when something like a face was lost. I spent quite a lot of time testing different things, tracking down where the problems were coming from, and making the selected anonymization much more reliable across video frames. This ended up taking a lot more work than I initially expected, but the selected video workflow is now working much better. It still isn’t perfect and there are still some bugs and I think I probably need a lot more time to find and fix them but right now it is in a decent working state so I don’t plan to spend more time on achieving perfection because debugging and stuff is boring as hell. I also made some improvements to the overall frontend and added the remaining main pages. I added the about, arivacy, documentation pages and also did some other improvents around the frontend. The documentation now explains the available endpoints, detection targets, anonymization modes and other features. At this point, I feel like the main application is in a really good place. The core functionality is implemented, the main frontend workflow is complete, and the remaining work is mostly getting this thing hosted and stuff. Next, I plan to write the README file, host the application, and do a final round of testing and cleanup. After that, I think I’ll consider this project finished for a while (I will work on improving it further later) and move on to building something new."}, {"post_id": 45041, "ts": "2026-08-11T08:51:50Z", "hours": 10.0544, "text": "Since the previous dev log, I continued building the application workflow and have almost completed the anonymization process. I first worked on the anonymization routes and updated the backend so that the frontend can send detected regions back to the API and have them anonymized. This allows the user to choose which detections they want to anonymize instead of always having to process everything. I also added support for passing dynamic padding (and also made it so that other dynamic stuff is easy to add later) through the request so that the effects can be customized based on what the user wants. I also added client side file handling required for the results page. The original and processed files are kept available in the browser so they can be previewed and downloaded without needing to be stored on the server. Everything also handles missing files and stuff without breaking and I also added error handling with notifications which are displayed to the user. I also made a bunch of smaller UI improvements while connecting everything together. At this point, the main frontend workflow is coming together. Next I will fix small remaining issues and improve reliability rather than adding any major change. The next things I plan to work on are to mainly fix bugs in the code. Like GIFs still need some additional handling to make sure detections are applied across the animation rather than being treated like a normal image and the existing video tracking system is able to follow detections across frames, but during testing I noticed that the anonymization can drift away from the actual detected regions in videos. This is the major thing I need to fix. And I also plan to do some small changes to the UI and stuff and fix some bugs there before adding the remaining pages like the API and documentation pages."}, {"post_id": 44018, "ts": "2026-08-09T14:49:05Z", "hours": 8.77, "text": "Since the previous dev log, I continued building the application workflow and moved beyond the initial upload interface into review/customization functionality. I first worked on the file preview system so that uploaded files can be displayed correctly even when the browser cannot natively display them. Now a preview is generated for unsupported images and documents while keeping browser previews for files that are already supported. After that, I built the results page, which is where the user can review the detections found in their uploaded file and also customise stuff for anonymisation. The biggest addition was the detection review panel. Instead of simply processing everything automatically, the interface now shows the detected content which will allow users to review individual detections and choose which ones they want to work with. A lot of the work also went into the smaller UI/UX improvements. I also fixed a ton of issues that came up while connecting the different pieces together and handling the detection data and working with different file formats. At this point, the frontend is starting to really come together and look like a real app. The next step is to connect stuff to my anonymization API. The user will be able to to select specific detections, choose how they want them anonymized, and add other customizations."}, {"post_id": 43070, "ts": "2026-08-08T04:16:11Z", "hours": 7.8842, "text": "Since the previous dev log, I continued working on the frontend and have now finished the main landing page as well as the initial anonymize/file upload page. I first started by completing the remaining parts of the landing page by adding the footer, API description section, and some final component layout and CSS improvements. After that, I started building the anonymize page, which is where the actual application workflow begins. I implemented the complete upload interface with both file selection and drag and drop feature. I also added client side file handling so uploaded files can be passed from the landing page to the anonymize page without having to upload them to the server first. To do this, I implemented a small IndexedDB based file storage system in the browser. Uploaded files are temporarily stored locally with a timestamp allowing the anonymize page to retrieve the file when the user arrives there. The stored file automatically expires after a short period and is also removed once it has been retrieved. This keeps the upload flow client side and also avoids putting the file data into the URL or sending it to the backend before processing when not needed. The anonymize page now also handles different file types correctly and displays a preview based on their type. I also added different anonymization options making it straightforward to pass the processing preferences to the backend. I too spent time fixing bugs and adding small UX improvements across the new frontend functionality. Next I am going to connect the interface to the backend API and build the actual processing experience. Rather than anonymizing everything automatically, I will create a processing page where the user will be able to decide what to anonymize and I will probably add more customization."}, {"post_id": 41878, "ts": "2026-08-06T11:22:26Z", "hours": 9.1442, "text": "Since the previous dev log I’ve been completely focused on the frontend. I first set up the frontend stack by integrating Tailwind CSS for styles and Alpine.js for lightweight interactivity. I also created a reusable layout with shared components such as the header that future pages can be built consistently and easily. With that foundation in place, I began implementing the landing page. I designed and built the hero section, which consists of a cool drag and drop upload area, and an interactive before/after comparison slider that allows users to visually compare original and anonymized images, which makes the landing page looks awesome. Besides frontend work, I made a few backend improvements as well, including cleaning up temporary video files after processing to avoid leaving unnecessary files behind as originally they weren’t properly disposed of. Next I plan to continue working on the landing page for a bit by adding a footer and maybe some other useful section before connecting everything to the existing API and implementing the upload and processing workflow and building the remaining pages needed."}, {"post_id": 40707, "ts": "2026-08-04T12:12:59Z", "hours": 5.1222, "text": "I focused on preparing everything for the frontend rather than adding new features. I reorganized the API by moving all routes into a dedicated package and grouping every endpoint under /api/v1. This gives everything a much cleaner structure and makes everything look professional. I also added detection endpoints for all supported files. Before the project was primarily focused on anonymization, and even though I had a detection endpoint, it only supported images and was buggy. These new endpoints allows receiving detection results directly without applying any effects and serve as a foundation for selective anonymization that I will implement later. While implementing these endpoints, I refactored how detection IDs are handled across the application. Before they too were buggy but I got them to work. I not only worked on the backend but also worked on the frontend by laying out it’s initial structure that I will build upon. I also spent some time cleaning up the codebase by removing unused imports and simplifying parts of the project. Now I plan to really start working on building the frontend. Now that the API structure is in place, I want to focus on creating a professional looking interface that allows users to interact with all of the functionality that has been implemented so far plus more."}, {"post_id": 40104, "ts": "2026-08-03T14:28:55Z", "hours": 7.8764, "text": "I expanded the range of file types that the application supports. Image support now includes TIFF/TIF, HEIC/HEIF, and GIF files. HEIC/HEIF images are automatically converted to PNG after processing since they are not widely supported for encoding. I also added support for documents which include PDF, DOCX, PPTX, and XLSX files. Rather than building separate anonymization logic for every Office file format, they are first converted to PDF and then are annonymized the same way as PDFs which keeps the implementation much simpler. While working on adding support for these files, I noticed that I had a bunch of duplicated code. So I spent some time refactoring stuff and removing duplicated stuff. I also found that GIF processing was slow so I worked on making it faster by treating it the same as a video and using trackers on it rather than running detection on every frame. I also made few smaller improvements, including adjusting the confidence thresholds for some of the detectors since I was noticing a bunch of false positives and fixing several bugs that came along the way. The next thing I plan to work on are cleaning up the code by finding and removing unused stuff, and then building the frontend for the application."}, {"post_id": 39358, "ts": "2026-08-02T09:02:20Z", "hours": 4.3503, "text": "I focused on improving the performance and maintainability of the anonymization system rather than adding new features. The biggest change was a refactor of the video anonymization system. Instead of repeatedly creating new anonymization masks for every frame, the tracker now caches and reuses them wherever possible. This reduces unnecessary work during video processing and also makes it easier in the future to add further performance improvements. I also improved the applications behavior by preventing both full text anonymization and PII anonymization to be selected at the same time since these targets overlap and would produce redundant processing. I also cleaned up several parts of the codebase by removing unused code and making the everything a bit easier to maintain. I also spent a lot of time experimenting with more aggressive optimization techniques but after testing, I decided to postpone those changes because they added complexity without providing the improvement I was looking for (and they were kind of buggy and it would take a lot more time to fix them). Instead, I decided to focus on optimizations that are simpler. Right now I don’t plan to work on improving the performance (even though there probably are tons of improvements to be made) because that stuff is boring and difficult as hell. Instead I’m going to add support for more file types like PDF."}, {"post_id": 38921, "ts": "2026-08-01T14:49:34Z", "hours": 4.2206, "text": "I expanded the anonymization system by adding multiple anonymization modes instead of having only the pixelization effect. The application can now switch between anonymizing regions using blur, solid fill, noise, emoji overlay, and inpainting. The emoji overlay right now is pretty basic but I plan on improving it later. I also improved the quality of face anonymization by replacing rectangular masks with elliptical masks (for some of the effects), producing better looking results. I also refactored the anonymization pipeline to separate anonymization effects from overlay rendering making future additions even easier and also cleaned up and reorganized the existing image effect implementations to improve readability and consistency across the project. Next, I plan to improve the performance of the anonymization system by trying to reuse detection targets and effect masks wherever possible."}, {"post_id": 38713, "ts": "2026-08-01T08:01:59Z", "hours": 2.0572, "text": "I improved the overall quality and efficiency of the video anonymization system. I updated detection intervals to use the video’s frame rate instead of relying on a hard coded number of frames. This allows the system to adapt well to videos with different frame rates. I also evaluated several object tracking algorithms, including DaSiamRPN, to find a good one that balances accuracy and speed. After comparing the performance of a bunch of them, I switched to Nano Tracker which was faster than my original KCF and CSRT trackers while being more accurate. I made additional improvements to privacy by removing metadata from exported videos. I am now also applying EXIF orientation before processing ensuring that images taken from different devices are processed in their correct orientation. Next, I plan to introduce different anonymization modes like blur and solid black boxes."}, {"post_id": 38633, "ts": "2026-08-01T04:05:36Z", "hours": 6.9461, "text": "I focused on adding support for videos. I first implemented a basic video anonymization system so uploaded videos could be processed the same way as images. I also made sure that the audio for the video is preserved so that it carries over to the anonymized video being unchanged. After getting the basic system working, I improved how videos are processed by adding object tracking and scene change detection. Instead of running detections on every frame, the system can now follow previously detected objects across frames and automatically run detections again when needed (when a tracker is lost, or the scene changes drastically, or periodically after a set amount of frames). This provides a great performance boost while the result stays reliable. Next, I want to continue improving video processing by optimizing it further and making it more accurate."}, {"post_id": 37518, "ts": "2026-07-30T10:23:19Z", "hours": 3.8147, "text": "I focused on improving the entire OCR system, as the previous approach with EasyOCR was missing too much text and reducing the accuracy of the entire system. After spending quite a bit of time trying to improve it, I decided to replace it with PaddleOCR. Now more accurate text detections are being produced making the entire program more robust. After, I expanded the regex based detectors to also account for URLs in addition to emails, etc. I also improved the phone number detection logic to reduce false positives and improve overall accuracy. Then, I adjusted padding around blurred regions so that stuff is covered more consistently and without blurring unnecessary content. The last thing I did was optimizing PaddleOCR as it was much slower than EasyOCR. After a lot of tinkering I was able to significantly reduce its processing time. For some files it now performs at roughly the same speed as EasyOCR while being way more accurate. Next, I probably want to add support for more file types and ultimately videos. And later also support for multiple languages."}, {"post_id": 36966, "ts": "2026-07-29T12:14:19Z", "hours": 3.4994, "text": "I added a new way for the app to detect personal information by using named entity recognition. Previously, the app could only find structured information like emails and phone numbers, but it could not detect things like names. So I integrated Presidio to identify such information from the text extracted from images. These extractions are then combined with the existing PII detections done using regex for the structured stuff. This improves the accuracy of the entire system by combining multiple detection methods instead of relying on one single approach. Next, I will improve the detection process further as right now it isn’t too accurate, mostly because I think the OCR is missing some stuff from the text. So I might try replacing it or find some other way."}, {"post_id": 36365, "ts": "2026-07-28T13:10:24Z", "hours": 6.6581, "text": "I implemented PII detection, allowing the app to identify and blur sensitive information within the text extracted from images instead of blurring everything blindly. First I used regular expressions to detect structured data such as email addresses, phone numbers, etc. But OCR frequently omitted punctuation, causing many valid emails to be missed. To fix this, I redesigned the everything around an OCR token graph. Each token stores its bounding box, neighboring tokens, and line information, allowing the detections to be more accurate. I might switch to PaddleOCR again or someother ocr so that I get more accurate detections. I also spent time improving the overall design of the PII detection system. These changes make it easier to extend in the future while improving the accuracy of the detected regions that are blurred. Next, I will implement NER based detection to identify unstructured personal information such as names."}, {"post_id": 21527, "ts": "2026-07-03T15:19:19Z", "hours": 5.6331, "text": "I implemented OCR-based text detection, allowing the application to detect text within uploaded images. I initially used PaddleOCR, but found that it took over 30 seconds to process a single image. After spending a lot of time trying to optimize its performance, I decided to switch to EasyOCR, which reduced the processing time to around one second while maintaining the same detection quality. Switching the OCR engines was well worth it. I also tried to keep the OCR implementation consistent with the face and license plate detectors and also optimized them too. Next, I will implement detection of sensitive information within the extracted text using regular expressions and NER. This will allow the application to distinguish ordinary text from personal information such as names, emails, phone numbers, etc, and allow me to blur only the relevant regions (right now the the entirety of the detected text is blurred)."}, {"post_id": 20974, "ts": "2026-07-02T18:27:02Z", "hours": 3.4869, "text": "I expanded the application by adding support for license plate detection and blurring. The app can now detect both faces and license plates in an image and blur them. I also made the API more flexible by allowing users to choose what they want to anonymize. Instead of always processing everything, they can now select whether to detect faces, license plates, or both. This makes the application more efficient and easier to extend with new features in the future. I also improved the structure of the project so that adding new types of detections will require much less work. I also added unique ids to each detection, which will be useful for future features that let users blur individual detections. Next, I will implement detection of sensitive text within images. This will allow the app to identify information such as email addresses, phone numbers, and other personal details, then blur them."}, {"post_id": 20600, "ts": "2026-07-02T07:10:58Z", "hours": 1.7692, "text": "I focused on improving the backend rather than adding new features. I reorganized the API by splitting it into smaller, more focused endpoints. For example, there’s now a dedicated endpoint that only detects faces and returns their locations, while separate endpoints handle image anonymization and API health checks. This makes the API easier to use and gives me more flexibility as I add new features. I also reorganized the detection system so that all object detection goes through a single service. At the moment it only detects faces, but it’s now much easier to add support for other types, such as license plates, without having to redesign the rest of the application. Health check endpoints let the application report whether it’s running correctly and whether the AI models have loaded successfully. Next I’m going to add detection beyond faces by adding license plate detection. These changes are gonna make it much easier for me to do so."}, {"post_id": 20144, "ts": "2026-07-01T18:06:28Z", "hours": 2.2011, "text": "I spent some time refining the face anonymization system. The pixelation effect was completely reworked to produce smoother, better looking results while blurring the faces more accurately (using the previous blur you could sometimes make out the features of the people). I also cleaned up the implementation, making the blur functionality much simpler and easier to maintain and most importantly I made it more reusable for ease of use in the future for more features. Behind the scenes, I also reorganized the project’s Python environment by removing unused libraries and recreating the virtual environment. Next I am planning to either add support for videos or make the API better by creating more focused routes such as one that only detects faces and other that returns the blur image. I also want to add functionality where the user can select which people to anonymize instead of blurring everybody detected. After that, I’ll expand beyond simple face anonymization by adding support for automatically detecting and anonymizing other sensitive information, such as license plates, documents, and other personally identifiable content."}, {"post_id": 19929, "ts": "2026-07-01T11:30:11Z", "hours": 4.4158, "text": "Replaced the temporary grayscale filter with automatic face anonymization. Uploaded images are now scanned for faces, and every detected face is pixelated. I also improved detection accuracy to reduce missed faces by tweaking a bunch of stuff for a while and adding more functionality to my face detection like running the image at multiple sizes. A lot of my time was also spent making the pixelated effect look good. I first went for only blurring the faces but now the face is pixelated along with a smooth transition into the surrounding image making the effect look pretty good. Right now images with large crowds are correctly blurred, including people who are far away or appear very small in the image."}, {"post_id": 19370, "ts": "2026-06-30T17:34:05Z", "hours": 1.9744, "text": "Integrated OpenCV so uploaded images are now decoded, processed, and returned to the client. I also introduced modularity into the code by creating separate modules for each step. The grayscale filter is only a temporary placeholder before I implement functionality such as blurring faces."}, {"post_id": 19094, "ts": "2026-06-30T09:42:15Z", "hours": 0.4869, "text": "Added image upload functionality with validation for missing files and non image uploads. The API right now only returns basic metadata about the upload. Next I’ll integrate OpenCV to begin the image processing stage."}, {"post_id": 19079, "ts": "2026-06-30T08:42:18Z", "hours": 0.6667, "text": "Set up the project’s foundation by creating Flask application structure, initializing Git, creating a virtual environment, and organizing the codebase for future features. I also got the development server running to verify everything is wired up correctly. Next, I’ll implement image uploads."}]...
|
Title: Blur Stuff by @AbdurRehman | Stardance
Dev Title: Blur Stuff by @AbdurRehman | Stardance
Devlogs:
Set up the project’s foundation by creating Flask application structure, initializing Git, creating a virtual environment, and organizing the codebase for future features. I also got the development server running to verify everything is wired up correctly. Next, I’ll implement image uploads.
Added image upload functionality with validation for missing files and non image uploads. The API right now only returns basic metadata about the upload. Next I’ll integrate OpenCV to begin the image processing stage.
Integrated OpenCV so uploaded images are now decoded, processed, and returned to the client. I also introduced modularity into the code by creating separate modules for each step. The grayscale filter is only a temporary placeholder before I implement functionality such as blurring faces.
Replaced the temporary grayscale filter with automatic face anonymization. Uploaded images are now scanned for faces, and every detected face is pixelated. I also improved detection accuracy to reduce missed faces by tweaking a bunch of stuff for a while and adding more functionality to my face detection like running the image at multiple sizes. A lot of my time was also spent making the pixelated effect look good. I first went for only blurring the faces but now the face is pixelated along with a smooth transition into the surrounding image making the effect look pretty good. Right now images with large crowds are correctly blurred, including people who are far away or appear very small in the image.
I spent some time refining the face anonymization system. The pixelation effect was completely reworked to produce smoother, better looking results while blurring the faces more accurately (using the previous blur you could sometimes make out the features of the people). I also cleaned up the implementation, making the blur functionality much simpler and easier to maintain and most importantly I made it more reusable for ease of use in the future for more features. Behind the scenes, I also reorganized the project’s Python environment by removing unused libraries and recreating the virtual environment. Next I am planning to either add support for videos or make the API better by creating more focused routes such as one that only detects faces and other that returns the blur image. I also want to add functionality where the user can select which people to anonymize instead of blurring everybody detected. After that, I’ll expand beyond simple face anonymization by adding support for automatically detecting and anonymizing other sensitive information, such as license plates, documents, and other personally identifiable content.
I focused on improving the backend rather than adding new features. I reorganized the API by splitting it into smaller, more focused endpoints. For example, there’s now a dedicated endpoint that only detects faces and returns their locations, while separate endpoints handle image anonymization and API health checks. This makes the API easier to use and gives me more flexibility as I add new features. I also reorganized the detection system so that all object detection goes through a single service. At the moment it only detects faces, but it’s now much easier to add support for other types, such as license plates, without having to redesign the rest of the application. Health check endpoints let the application report whether it’s running correctly and whether the AI models have loaded successfully. Next I’m going to add detection beyond faces by adding license plate detection. These changes are gonna make it much easier for me to do so.
I expanded the application by adding support for license plate detection and blurring. The app can now detect both faces and license plates in an image and blur them. I also made the API more flexible by allowing users to choose what they want to anonymize. Instead of always processing everything, they can now select whether to detect faces, license plates, or both. This makes the application more efficient and easier to extend with new features in the future. I also improved the structure of the project so that adding new types of detections will require much less work. I also added unique ids to each detection, which will be useful for future features that let users blur individual detections. Next, I will implement detection of sensitive text within images. This will allow the app to identify information such as email addresses, phone numbers, and other personal details, then blur them.
I implemented OCR-based text detection, allowing the application to detect text within uploaded images. I initially used PaddleOCR, but found that it took over 30 seconds to process a single image. After spending a lot of time trying to optimize its performance, I decided to switch to EasyOCR, which reduced the processing time to around one second while maintaining the same detection quality. Switching the OCR engines was well worth it. I also tried to keep the OCR implementation consistent with the face and license plate detectors and also optimized them too. Next, I will implement detection of sensitive information within the extracted text using regular expressions and NER. This will allow the application to distinguish ordinary text from personal information such as names, emails, phone numbers, etc, and allow me to blur only the relevant regions (right now the the entirety of the detected text is blurred).
I implemented PII detection, allowing the app to identify and blur sensitive information within the text extracted from images instead of blurring everything blindly. First I used regular expressions to detect structured data such as email addresses, phone numbers, etc. But OCR frequently omitted punctuation, causing many valid emails to be missed. To fix this, I redesigned the everything around an OCR token graph. Each token stores its bounding box, neighboring tokens, and line information, allowing the detections to be more accurate. I might switch to PaddleOCR again or someother ocr so that I get more accurate detections. I also spent time improving the overall design of the PII detection system. These changes make it easier to extend in the future while improving the accuracy of the detected regions that are blurred. Next, I will implement NER based detection to identify unstructured personal information such as names.
I added a new way for the app to detect personal information by using named entity recognition. Previously, the app could only find structured information like emails and phone numbers, but it could not detect things like names. So I integrated Presidio to identify such information from the text extracted from images. These extractions are then combined with the existing PII detections done using regex for the structured stuff. This improves the accuracy of the entire system by combining multiple detection methods instead of relying on one single approach. Next, I will improve the detection process further as right now it isn’t too accurate, mostly because I think the OCR is missing some stuff from the text. So I might try replacing it or find some other way.
I focused on improving the entire OCR system, as the previous approach with EasyOCR was missing too much text and reducing the accuracy of the entire system. After spending quite a bit of time trying to improve it, I decided to replace it with PaddleOCR. Now more accurate text detections are being produced making the entire program more robust. After, I expanded the regex based detectors to also account for URLs in addition to emails, etc. I also improved the phone number detection logic to reduce false positives and improve overall accuracy. Then, I adjusted padding around blurred regions so that stuff is covered more consistently and without blurring unnecessary content. The last thing I did was optimizing PaddleOCR as it was much slower than EasyOCR. After a lot of tinkering I was able to significantly reduce its processing time. For some files it now performs at roughly the same speed as EasyOCR while being way more accurate. Next, I probably want to add support for more file types and ultimately videos. And later also support for multiple languages.
I focused on adding support for videos. I first implemented a basic video anonymization system so uploaded videos could be processed the same way as images. I also made sure that the audio for the video is preserved so that it carries over to the anonymized video being unchanged. After getting the basic system working, I improved how videos are processed by adding object tracking and scene change detection. Instead of running detections on every frame, the system can now follow previously detected objects across frames and automatically run detections again when needed (when a tracker is lost, or the scene changes drastically, or periodically after a set amount of frames). This provides a great performance boost while the result stays reliable. Next, I want to continue improving video processing by optimizing it further and making it more accurate.
I improved the overall quality and efficiency of the video anonymization system. I updated detection intervals to use the video’s frame rate instead of relying on a hard coded number of frames. This allows the system to adapt well to videos with different frame rates. I also evaluated several object tracking algorithms, including DaSiamRPN, to find a good one that balances accuracy and speed. After comparing the performance of a bunch of them, I switched to Nano Tracker which was faster than my original KCF and CSRT trackers while being more accurate. I made additional improvements to privacy by removing metadata from exported videos. I am now also applying EXIF orientation before processing ensuring that images taken from different devices are processed in their correct orientation. Next, I plan to introduce different anonymization modes like blur and solid black boxes.
I expanded the anonymization system by adding multiple anonymization modes instead of having only the pixelization effect. The application can now switch between anonymizing regions using blur, solid fill, noise, emoji overlay, and inpainting. The emoji overlay right now is pretty basic but I plan on improving it later. I also improved the quality of face anonymization by replacing rectangular masks with elliptical masks (for some of the effects), producing better looking results. I also refactored the anonymization pipeline to separate anonymization effects from overlay rendering making future additions even easier and also cleaned up and reorganized the existing image effect implementations to improve readability and consistency across the project. Next, I plan to improve the performance of the anonymization system by trying to reuse detection targets and effect masks wherever possible.
I focused on improving the performance and maintainability of the anonymization system rather than adding new features. The biggest change was a refactor of the video anonymization system. Instead of repeatedly creating new anonymization masks for every frame, the tracker now caches and reuses them wherever possible. This reduces unnecessary work during video processing and also makes it easier in the future to add further performance improvements. I also improved the applications behavior by preventing both full text anonymization and PII anonymization to be selected at the same time since these targets overlap and would produce redundant processing. I also cleaned up several parts of the codebase by removing unused code and making the everything a bit easier to maintain. I also spent a lot of time experimenting with more aggressive optimization techniques but after testing, I decided to postpone those changes because they added complexity without providing the improvement I was looking for (and they were kind of buggy and it would take a lot more time to fix them). Instead, I decided to focus on optimizations that are simpler. Right now I don’t plan to work on improving the performance (even though there probably are tons of improvements to be made) because that stuff is boring and difficult as hell. Instead I’m going to add support for more file types like PDF.
I expanded the range of file types that the application supports. Image support now includes TIFF/TIF, HEIC/HEIF, and GIF files. HEIC/HEIF images are automatically converted to PNG after processing since they are not widely supported for encoding. I also added support for documents which include PDF, DOCX, PPTX, and XLSX files. Rather than building separate anonymization logic for every Office file format, they are first converted to PDF and then are annonymized the same way as PDFs which keeps the implementation much simpler. While working on adding support for these files, I noticed that I had a bunch of duplicated code. So I spent some time refactoring stuff and removing duplicated stuff. I also found that GIF processing was slow so I worked on making it faster by treating it the same as a video and using trackers on it rather than running detection on every frame. I also made few smaller improvements, including adjusting the confidence thresholds for some of the detectors since I was noticing a bunch of false positives and fixing several bugs that came along the way. The next thing I plan to work on are cleaning up the code by finding and removing unused stuff, and then building the frontend for the application.
I focused on preparing everything for the frontend rather than adding new features. I reorganized the API by moving all routes into a dedicated package and grouping every endpoint under /api/v1. This gives everything a much cleaner structure and makes everything look professional. I also added detection endpoints for all supported files. Before the project was primarily focused on anonymization, and even though I had a detection endpoint, it only supported images and was buggy. These new endpoints allows receiving detection results directly without applying any effects and serve as a foundation for selective anonymization that I will implement later. While implementing these endpoints, I refactored how detection IDs are handled across the application. Before they too were buggy but I got them to work. I not only worked on the backend but also worked on the frontend by laying out it’s initial structure that I will build upon. I also spent some time cleaning up the codebase by removing unused imports and simplifying parts of the project. Now I plan to really start working on building the frontend. Now that the API structure is in place, I want to focus on creating a professional looking interface that allows users to interact with all of the functionality that has been implemented so far plus more.
Since the previous dev log I’ve been completely focused on the frontend. I first set up the frontend stack by integrating Tailwind CSS for styles and Alpine.js for lightweight interactivity. I also created a reusable layout with shared components such as the header that future pages can be built consistently and easily. With that foundation in place, I began implementing the landing page. I designed and built the hero section, which consists of a cool drag and drop upload area, and an interactive before/after comparison slider that allows users to visually compare original and anonymized images, which makes the landing page looks awesome. Besides frontend work, I made a few backend improvements as well, including cleaning up temporary video files after processing to avoid leaving unnecessary files behind as originally they weren’t properly disposed of. Next I plan to continue working on the landing page for a bit by adding a footer and maybe some other useful section before connecting everything to the existing API and implementing the upload and processing workflow and building the remaining pages needed.
Since the previous dev log, I continued working on the frontend and have now finished the main landing page as well as the initial anonymize/file upload page. I first started by completing the remaining parts of the landing page by adding the footer, API description section, and some final component layout and CSS improvements. After that, I started building the anonymize page, which is where the actual application workflow begins. I implemented the complete upload interface with both file selection and drag and drop feature. I also added client side file handling so uploaded files can be passed from the landing page to the anonymize page without having to upload them to the server first. To do this, I implemented a small IndexedDB based file storage system in the browser. Uploaded files are temporarily stored locally with a timestamp allowing the anonymize page to retrieve the file when the user arrives there. The stored file automatically expires after a short period and is also removed once it has been retrieved. This keeps the upload flow client side and also avoids putting the file data into the URL or sending it to the backend before processing when not needed. The anonymize page now also handles different file types correctly and displays a preview based on their type. I also added different anonymization options making it straightforward to pass the processing preferences to the backend. I too spent time fixing bugs and adding small UX improvements across the new frontend functionality. Next I am going to connect the interface to the backend API and build the actual processing experience. Rather than anonymizing everything automatically, I will create a processing page where the user will be able to decide what to anonymize and I will probably add more customization.
Since the previous dev log, I continued building the application workflow and moved beyond the initial upload interface into review/customization functionality. I first worked on the file preview system so that uploaded files can be displayed correctly even when the browser cannot natively display them. Now a preview is generated for unsupported images and documents while keeping browser previews for files that are already supported. After that, I built the results page, which is where the user can review the detections found in their uploaded file and also customise stuff for anonymisation. The biggest addition was the detection review panel. Instead of simply processing everything automatically, the interface now shows the detected content which will allow users to review individual detections and choose which ones they want to work with. A lot of the work also went into the smaller UI/UX improvements. I also fixed a ton of issues that came up while connecting the different pieces together and handling the detection data and working with different file formats. At this point, the frontend is starting to really come together and look like a real app. The next step is to connect stuff to my anonymization API. The user will be able to to select specific detections, choose how they want them anonymized, and add other customizations.
Since the previous dev log, I continued building the application workflow and have almost completed the anonymization process. I first worked on the anonymization routes and updated the backend so that the frontend can send detected regions back to the API and have them anonymized. This allows the user to choose which detections they want to anonymize instead of always having to process everything. I also added support for passing dynamic padding (and also made it so that other dynamic stuff is easy to add later) through the request so that the effects can be customized based on what the user wants. I also added client side file handling required for the results page. The original and processed files are kept available in the browser so they can be previewed and downloaded without needing to be stored on the server. Everything also handles missing files and stuff without breaking and I also added error handling with notifications which are displayed to the user. I also made a bunch of smaller UI improvements while connecting everything together. At this point, the main frontend workflow is coming together. Next I will fix small remaining issues and improve reliability rather than adding any major change. The next things I plan to work on are to mainly fix bugs in the code. Like GIFs still need some additional handling to make sure detections are applied across the animation rather than being treated like a normal image and the existing video tracking system is able to follow detections across frames, but during testing I noticed that the anonymization can drift away from the actual detected regions in videos. This is the major thing I need to fix. And I also plan to do some small changes to the UI and stuff and fix some bugs there before adding the remaining pages like the API and documentation pages.
Since the previous dev log, I worked on fixing the remaining issues in the anonymization workflow and finishing the frontend around the application. The biggest thing I worked on was selected video anonymization. There were still some problems where selected areas could stop being anonymized correctly or the anonymization could move away from the actual object as it moved through the video or retracking when something like a face was lost. I spent quite a lot of time testing different things, tracking down where the problems were coming from, and making the selected anonymization much more reliable across video frames. This ended up taking a lot more work than I initially expected, but the selected video workflow is now working much better. It still isn’t perfect and there are still some bugs and I think I probably need a lot more time to find and fix them but right now it is in a decent working state so I don’t plan to spend more time on achieving perfection because debugging and stuff is boring as hell. I also made some improvements to the overall frontend and added the remaining main pages. I added the about, arivacy, documentation pages and also did some other improvents around the frontend. The documentation now explains the available endpoints, detection targets, anonymization modes and other features. At this point, I feel like the main application is in a really good place. The core functionality is implemented, the main frontend workflow is complete, and the remaining work is mostly getting this thing hosted and stuff. Next, I plan to write the README file, host the application, and do a final round of testing and cleanup. After that, I think I’ll consider this project finished for a while (I will work on improving it further later) and move on to building something new.
Since the previous dev log, I have been focused on getting Blur Stuff ready for deployment. This ended up being much more painful than I expected. The biggest part was dealing with dependency issues. The project worked locally, but moving everything to a production environment exposed a bunch of problems with Python versions, PaddlePaddle, PaddleOCR, PaddleX, PyYAML, spaCy, OpenCV and other dependencies. I spent a lot of time testing different configurations, fixing dependency conflicts, debugging the production container, and figuring out why things that seemed to work okay locally were breaking during deployment. The biggest headache was PaddleOCR. I had to deal with missing system libraries, model downloading, Paddle initialization issues and eventually a oneDNN runtime error that was causing OCR requests to return 503s. After a lot of debugging and testing different configurations, I eventually got the OCR pipeline working properly in production. That was probably the one of the most frustrating parts of the entire project, but it is finally done. I also switched the spaCy model from en_core_web_lg to en_core_web_sm. The larger model was unnecessarily heavy for what Blur Stuff needs and was making deployments take way longer. Switching to the smaller model made deployment faster and also improved performance without having a noticeable impact on the PII detection quality. After successful deployment I finished the README and added the final assets, screenshots, logo and documentation. I added the MIT license, favicon, deployment related changes and generally cleaned up the entire repository. At this point, I think Blur Stuff is ready to ship. There are definitely still improvements I could make, especially improving performance, making video anonymization more reliable and efficient, and polishing various parts of the application but I don’t want to spend more time trying to make everything perfect. The current deployment is also running on Railway’s free plan, so there are some resource and memory limitations since Blur Stuff runs several machine learning models in the same process. For now, I’m okay with that rather than spending more time optimizing around the limitations of a free deployment. For now, I’m calling it finished and shipping it since the core functionality is working and the project is deployed. I’ll definitely come back to Blur Stuff later to improve it, but I think it’s time to move on to something new.
Since shipping Blur Stuff, I got feedback that the frontend felt too generic so I completely revamped the UI to give it a more intentional and fun style. I redesigned everything from colors to typography and everything else. Now the app has a more personal feel. I also cleaned up some small things here and there.
Ships:
I made Blur Stuff, a privacy focused tool for safely sharing images, videos, GIFs, and documents. It automatically detects sensitive information such as faces, license plates, text, and PII, then lets you anonymize the detected areas with different anonymization effects. It also removes EXIF metadata so other sensitive information isn’t left hidden inside the file. The goal of this project is to make sharing media safely as easy as uploading it. Instead of manually searching through a file like a document or photo and manually covering stuff you don’t want others to see, Blur Stuff does this work for you. The hardest part of making this project was making anonymization work reliably across different types of media. Images were relatively simple, but videos and GIFs require frame by frame processing while keeping detections consistent over time. And to make things efficient and fast I also had to deal with things like tracking which were really tricky. Connecting the frontend and backend was also another challenge and then hosting everything also brought it’s problems with dependency conflicts which took quite a while to solve. The thing I am most proud of is that this became a real working and professional looking application rather than just a prototype type thing. It supports most of the commonly used media formats, has multiple customization options among other neat functionalities. Also I like how this project is privacy focused. Like it doesn’t store the user’s files ever. It just processes them, removing EXIF, and gives the result. Blur Stuff can be tested by uploading an image containing faces, text, or a license plate and let it detect the sensitive regions and then select what you want anonymized, and run the anonymization. The current deployment has limited memory and resources since I’m on a free plan, so larger videos and documents can take a while to process, and very large files may run into resource limitations. The app is also deployed using Railway’s serverless option, so the server may need a few seconds to start up if it hasn’t received a request recently. Also the selected region anonymization for videos is still a bit buggy but mostly it works. These are areas I will improve in the future....
|
1793138327.9310365
|
1793224727.9310365
|
|
16693
|
Evolve by @boredvoid | Stardance
|
boredvoid
|
1
|
61.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-10T07:42:22Z", "hours": 61.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This has been a hell of a ride and very interesting project to work on. Most challenging for me was all the shader work (normally my projects look meh at best xd). The project can be tested either in the browser on itch.io or downloaded there for all desktop platforms… Screenshots are in dev logs ( pls read I gave them a lot of love ((: ) and on itch!", "repo": "https://github.com/BoredVoidAter/Evolve", "demo": "https://boredvoidater.itch.io/evolve"}]...
|
[{"post_id": 44468, "ts": "202 [{"post_id": 44468, "ts": "2026-08-10T07:38:46Z", "hours": 5.0, "text": "Hi everyone, sorry for the long delay I’m in china rn so everything a bit difficult and I also lost ma laptop so I will be shipping this project early (updates to be expected so follow the itch if you are interested) Changes since last develop: finally tried implementing creatures and plants onto the planet generation which works for the most part now although the creature look a bit funny going up and down tiles… It’s been amazing I hope to participate in the next hack club event as well!"}, {"post_id": 35744, "ts": "2026-07-27T11:45:36Z", "hours": 7.0, "text": "Im baaaaaaaack! Lets go. I actually had the honor to go to an in person game dev event in NYC and even met Zack and some other amazing members of the hackclub team there, it was a blast. Anyways i also did some work on Evolve including some shader fixes for outlines (they didnt really look good on plants…), some general system fixes since the code base grew quite big and also isnt the most beautiful, fixed some IK issues that had been bugging me, implemented a lot of the #TODOs (: Anyways not really a lot of big new visual stuff so i just made a little animation of creatures and some plants hope you enjoy! (as always please test the game at https://boredvoidater.itch.io/evolve and tell me everything u got to say) byeee"}, {"post_id": 29625, "ts": "2026-07-16T18:00:56Z", "hours": 7.0, "text": "another big update this time, i noticed i was getting kinda lazy with the amount of devlogs per hours i promise ill do better first up is hormones: Adrenaline, Fear, and Aggression that the brain can hook up to. unlike normal math nodes that instantly flip on and off, these hormones smooth out over time so it is kinda like the memory nodes but they actually force the creature regardless of brain architecture to do specific stuff like turn away from everything, run faster, … second part: plants cus else creatures are all just carnivores. PlantDNA controls: branching depth, how many branches per node, Phototropism (fancy word for growing towards the light ) vs Gravitropism (gravity pulling branches down). meshes only get redone if there is substantial growth and ye, thas it do yall think of the chemical brain stuff? any ideas for other hormones or plant types i should add? let me know in the comments"}, {"post_id": 28848, "ts": "2026-07-15T12:08:44Z", "hours": 6.0, "text": "another big one this time added blinking eyes, moving mouths, eye movement just for some nice touch and then decided it’s finally time to give da animals a little bit of a brain. The system i decided on for now is a simple “neuronal network” kind of thing. I got a bunch of nodes like: sensor for vision/smell/time, math add/multiply/min/max/relu/…, memory basically just decaying values over time, actuators Move/Turn/Bite/Flee. these modules can then be linked up kinda like unity shader graph (thats why my ui look like dat lmao) the nodes are then connected via neurons that store a weight (which will later be adjusted via, who guessed it, Evolution). Addition of all the math nodes adds some complexity that i am quite a fan of. To recreate an idling cycle for example one could use a sin wave and time, … Anyways that’s all for now next up is probably instincts/hormones or sum else didnt decide yet. Any thoughts as always in the comments. Oh ye i also fixed webgl rendering via adressables (loading resources)."}, {"post_id": 28261, "ts": "2026-07-14T12:39:48Z", "hours": 5.0, "text": "Hello everybody, i was away for a week in kopenhagen (great place they got a bunch of cool animal museums as well and a trex head replica 1 to 1) but have finally returned. Now 1 of the 5h was spent on various bug fixes that i do not remember the others were spent on adding survivability stats. Up until know we only had weight, energy requirements and speed but now there is also attractiveness (eg a vibrant colored flower would have high atractiveness) and warning (also based on colors though also adapts per enviroment to fit in camoflauging into the same stat). then i added modular organs (eyes with different pupils, mouths with sharp teeth, no teeth or round teeth), snouts out of the same mouth shape, ears, … i also did some experiments with eyelid shapes but just landed on texturing a simple sphere since the 3d eyelids look like too much in my opinion (top left corner in devlog) what do you think"}, {"post_id": 20883, "ts": "2026-07-02T16:35:40Z", "hours": 4.0, "text": "A lot of changes in this one: Growth modifiers for regions like head, neck, abdomen, … give more granular simulation control over animals some new features like frills and scales new textures for various skin types like fur, feathers, scales, … me fighting with huge necks (see image ) next up i am gonna organs which im planning to make very universal using parametric 3d models"}, {"post_id": 20249, "ts": "2026-07-01T19:54:38Z", "hours": 3.0, "text": "I’ve been hard at work over the last few hours and made (a lot of) modifications: first i struggled with winding order for a solid hour before i just decided that i am not gonna win that fight (now i just don’t cull creature backfaces ), then i implemented muscles and fat which change weight and volume of limbs and as you might be able to see colors and textures for the skin, next up i also did some IK improvements ( @august pointed those out ), last but not least i added features like little spikes and scales. Also can we talk about how cute the starfish looks, its my favourite part about this project so far. all the creatures below are created with dna structures eg: (i’ll put the code here once i figured out how to format it nicely lmao) and animated proceduraly… (ignore the ape i made it a lil too fat )"}, {"post_id": 17772, "ts": "2026-06-28T18:23:43Z", "hours": 2.0, "text": "This one took quite a while but i finally got some meat on the bones: triangle winding order is a pain in the but soooo i’m just rendering front and back faces now , even more annoying is getting it to not twist with every single movement (still not fully working), still working on how the dna could sensibly define head shape since rn everything looks like megamind, UVs are next to tackle OH GOD PLEASE SAVE ME . Put ur favorite creature in the comments (as well as any feedback ofc xd)"}, {"post_id": 17439, "ts": "2026-06-28T06:51:43Z", "hours": 1.0, "text": "Work on IK is now nearly complete (for now ), now we move onto bigger any better things: putting meat n skin on the bones but first of all here’s some movies of stuff moving (the spider one is fixed dw)"}, {"post_id": 16237, "ts": "2026-06-26T11:43:13Z", "hours": 0.0, "text": "I’ve improved the IK through changes to: billateral limb distance (so far there was nothing in between for example 2 legs), timing adjustments, joint rotating planes, computed target body height and body center of mass, … Next up is animating limbs that aren’t legs! any feedback?put it in the comments (pretty please)"}, {"post_id": 15629, "ts": "2026-06-25T12:50:22Z", "hours": 1.0, "text": "FINALLLY starting work on Evolution with the first subject being animals. So far i’ve set up a DNA Structure that works in a bone like fashion with symmetry options. on the simulation layer these bone and thus resulting body shape will be represented like Position. Velocity, Mass,CenterOfMass,BoundingRadius, Height and prolly more that i didnt think of yet. As you may be able i’ve also tried my luck with IK with the FABRIK solver but so far yeaaaaaaaaaaaaah…."}, {"post_id": 15012, "ts": "2026-06-24T12:04:45Z", "hours": 0.0, "text": "Did a little more work on the water shader, i swear i’ll start with the Evolving part after this xd"}, {"post_id": 14937, "ts": "2026-06-24T08:34:42Z", "hours": 1.0, "text": "I’ve been working on an option to switch the layer to underwater since that is just as important as above water for us to see. Did quite a lot of work on the shader so now the above water terrain gets cut at sea level and its dirt color gets dithered into a fullscreen underwater shader with caustics and godrays, it definetly still needs imrpovement but its good enough for now"}, {"post_id": 14638, "ts": "2026-06-23T20:24:27Z", "hours": 1.0, "text": "This one is more of a cleanup where i finished some boring stuff so nothing that cool to showoff but i attached some screenshots. Also built the newest version of the game for all platforms (and web) and updated itch page. Feel free to give it a visit under https://boredvoidater.itch.io/evolve (:"}, {"post_id": 14536, "ts": "2026-06-23T17:58:01Z", "hours": 0.0, "text": "Aaaaaaaand another one about culling, this time the goal was to remove the particles from the river because, well, it looks bad. This took quite some time to solve but in the end i just calculate some spheres with diameter of river width and get rid of all particles in it"}, {"post_id": 14428, "ts": "2026-06-23T15:38:53Z", "hours": 0.0, "text": "Very quick and dirty one but i implemented particle culling since the particles would look really bad when zoomed out with the pixel art rendering…"}, {"post_id": 14396, "ts": "2026-06-23T14:47:09Z", "hours": 1.0, "text": "I’ve been working on some decorational particles on the terrain to make it loss less bland. These are however purely for visuals and not gonna be included in any evolution calculations (which i promise i’ll start doing at some point (: but for now i wanna finish the world generation, regarding that any ideas for what should be added to world gen in the COMMENTS!!)"}, {"post_id": 13713, "ts": "2026-06-22T14:11:42Z", "hours": 1.0, "text": "I’ve been working on the UI for a little bit which is a task i do not enjoy doing since i never like how it turns out. this time around the end result looks more like a cheap ai website than a good ui but oh well there will always be future possibility to make it better. Please put any ideas for making it look better in the comments Give it a play at: https://boredvoidater.itch.io/evolve I’d also be amazing if you’d check out my other devlogs if this project seems interesting to you"}, {"post_id": 13336, "ts": "2026-06-21T20:57:50Z", "hours": 1.0, "text": "i added rivers with width based on calculated flow and custom generated meshes. I am still thinking about another thing: in real life rivers sorta get momentum which causes them to cut trough terrain which i think would probably look a bit weird in my case but i still implemented the momentum but not the cutting so now sometimes rivers flow “up a tile” like a reverse waterfall… Not sure if i’ll keep that we’ll see"}, {"post_id": 11902, "ts": "2026-06-19T12:06:23Z", "hours": 0.0, "text": "I finally fixed the poles turned out i had my textures messed up and frozen water eg ice should also float ontop of the ocean ofc (: I also improved upon the water shader by reading depth and reconstructing the y pos difference from it"}, {"post_id": 11575, "ts": "2026-06-18T21:13:52Z", "hours": 1.0, "text": "improved the world generation with more interesting terrain with more variaty (stacked noise, different noise types, …) also imrpoved my simulation of humidity and made it get way colder towards poles, finally finished all the textures for the bioms and added a little water shader. Added camera movement and zooming to boot. thats it i belive, cyu in the next one"}, {"post_id": 10599, "ts": "2026-06-17T12:55:10Z", "hours": 0.0, "text": "the biomes are pretty much done, however i still got work to do regarding the biome simulation since what should be the poles is currently not ice biome but tundra in my generator (:"}, {"post_id": 10148, "ts": "2026-06-16T19:12:52Z", "hours": 0.0, "text": "Applying texture based on biome information (saved in uv’s so that we can still use srp batcher)"}, {"post_id": 10117, "ts": "2026-06-16T18:29:24Z", "hours": 1.0, "text": "have been spending some time on implementing my first attempt on landscape. landed on hex tiles since they are the easiest to simulate since movement in all 6 directions is the same distance and now spent some time visualizing the generated hex map"}, {"post_id": 7589, "ts": "2026-06-12T18:08:10Z", "hours": 1.0, "text": "I’ve finally finished the outline shader which is now looking a little bit unorganized but thats ok (: Also got some headache from the transparent rendering pass hogging my rendering textures since i didnt specifically declare which pass wants them which took quite a long while to figure out"}, {"post_id": 7074, "ts": "2026-06-11T21:00:12Z", "hours": 0.0, "text": "Highlight color is now detected based on sampling surrounding pixels and choosing closest based on death, also experimenting with light on outlines"}, {"post_id": 7049, "ts": "2026-06-11T20:18:17Z", "hours": 0.0, "text": "added a custom cell shader that can also use textures (black and white) to blend between colors and uses either only one color or textures based on shader keywords"}, {"post_id": 6996, "ts": "2026-06-11T19:02:05Z", "hours": 0.0, "text": "I’ve been working on a pixel perfect outline for this nice pixelized look and also shaded it according to surrounding colors instead of just black, it is based on a custom id texture and normals because i believe this is more reliable than just depth data. next up is cell shading"}]...
|
Title: Evolve by @boredvoid | Stardance
Devlogs:
Title: Evolve by @boredvoid | Stardance
Devlogs:
I’ve been working on a pixel perfect outline for this nice pixelized look and also shaded it according to surrounding colors instead of just black, it is based on a custom id texture and normals because i believe this is more reliable than just depth data. next up is cell shading
added a custom cell shader that can also use textures (black and white) to blend between colors and uses either only one color or textures based on shader keywords
Highlight color is now detected based on sampling surrounding pixels and choosing closest based on death, also experimenting with light on outlines
I’ve finally finished the outline shader which is now looking a little bit unorganized but thats ok (: Also got some headache from the transparent rendering pass hogging my rendering textures since i didnt specifically declare which pass wants them which took quite a long while to figure out
have been spending some time on implementing my first attempt on landscape. landed on hex tiles since they are the easiest to simulate since movement in all 6 directions is the same distance and now spent some time visualizing the generated hex map
Applying texture based on biome information (saved in uv’s so that we can still use srp batcher)
the biomes are pretty much done, however i still got work to do regarding the biome simulation since what should be the poles is currently not ice biome but tundra in my generator (:
improved the world generation with more interesting terrain with more variaty (stacked noise, different noise types, …) also imrpoved my simulation of humidity and made it get way colder towards poles, finally finished all the textures for the bioms and added a little water shader. Added camera movement and zooming to boot. thats it i belive, cyu in the next one
I finally fixed the poles turned out i had my textures messed up and frozen water eg ice should also float ontop of the ocean ofc (: I also improved upon the water shader by reading depth and reconstructing the y pos difference from it
i added rivers with width based on calculated flow and custom generated meshes. I am still thinking about another thing: in real life rivers sorta get momentum which causes them to cut trough terrain which i think would probably look a bit weird in my case but i still implemented the momentum but not the cutting so now sometimes rivers flow “up a tile” like a reverse waterfall… Not sure if i’ll keep that we’ll see
I’ve been working on the UI for a little bit which is a task i do not enjoy doing since i never like how it turns out. this time around the end result looks more like a cheap ai website than a good ui but oh well there will always be future possibility to make it better. Please put any ideas for making it look better in the comments Give it a play at: https://boredvoidater.itch.io/evolve I’d also be amazing if you’d check out my other devlogs if this project seems interesting to you
I’ve been working on some decorational particles on the terrain to make it loss less bland. These are however purely for visuals and not gonna be included in any evolution calculations (which i promise i’ll start doing at some point (: but for now i wanna finish the world generation, regarding that any ideas for what should be added to world gen in the COMMENTS!!)
Very quick and dirty one but i implemented particle culling since the particles would look really bad when zoomed out with the pixel art rendering…
Aaaaaaaand another one about culling, this time the goal was to remove the particles from the river because, well, it looks bad. This took quite some time to solve but in the end i just calculate some spheres with diameter of river width and get rid of all particles in it
This one is more of a cleanup where i finished some boring stuff so nothing that cool to showoff but i attached some screenshots. Also built the newest version of the game for all platforms (and web) and updated itch page. Feel free to give it a visit under https://boredvoidater.itch.io/evolve (:
I’ve been working on an option to switch the layer to underwater since that is just as important as above water for us to see. Did quite a lot of work on the shader so now the above water terrain gets cut at sea level and its dirt color gets dithered into a fullscreen underwater shader with caustics and godrays, it definetly still needs imrpovement but its good enough for now
Did a little more work on the water shader, i swear i’ll start with the Evolving part after this xd
FINALLLY starting work on Evolution with the first subject being animals. So far i’ve set up a DNA Structure that works in a bone like fashion with symmetry options. on the simulation layer these bone and thus resulting body shape will be represented like Position. Velocity, Mass,CenterOfMass,BoundingRadius, Height and prolly more that i didnt think of yet. As you may be able i’ve also tried my luck with IK with the FABRIK solver but so far yeaaaaaaaaaaaaah….
I’ve improved the IK through changes to: billateral limb distance (so far there was nothing in between for example 2 legs), timing adjustments, joint rotating planes, computed target body height and body center of mass, … Next up is animating limbs that aren’t legs! any feedback?put it in the comments (pretty please)
Work on IK is now nearly complete (for now ), now we move onto bigger any better things: putting meat n skin on the bones but first of all here’s some movies of stuff moving (the spider one is fixed dw)
This one took quite a while but i finally got some meat on the bones: triangle winding order is a pain in the but soooo i’m just rendering front and back faces now , even more annoying is getting it to not twist with every single movement (still not fully working), still working on how the dna could sensibly define head shape since rn everything looks like megamind, UVs are next to tackle OH GOD PLEASE SAVE ME . Put ur favorite creature in the comments (as well as any feedback ofc xd)
I’ve been hard at work over the last few hours and made (a lot of) modifications: first i struggled with winding order for a solid hour before i just decided that i am not gonna win that fight (now i just don’t cull creature backfaces ), then i implemented muscles and fat which change weight and volume of limbs and as you might be able to see colors and textures for the skin, next up i also did some IK improvements ( @august pointed those out ), last but not least i added features like little spikes and scales. Also can we talk about how cute the starfish looks, its my favourite part about this project so far. all the creatures below are created with dna structures eg: (i’ll put the code here once i figured out how to format it nicely lmao) and animated proceduraly… (ignore the ape i made it a lil too fat )
A lot of changes in this one: Growth modifiers for regions like head, neck, abdomen, … give more granular simulation control over animals some new features like frills and scales new textures for various skin types like fur, feathers, scales, … me fighting with huge necks (see image ) next up i am gonna organs which im planning to make very universal using parametric 3d models
Hello everybody, i was away for a week in kopenhagen (great place they got a bunch of cool animal museums as well and a trex head replica 1 to 1) but have finally returned. Now 1 of the 5h was spent on various bug fixes that i do not remember the others were spent on adding survivability stats. Up until know we only had weight, energy requirements and speed but now there is also attractiveness (eg a vibrant colored flower would have high atractiveness) and warning (also based on colors though also adapts per enviroment to fit in camoflauging into the same stat). then i added modular organs (eyes with different pupils, mouths with sharp teeth, no teeth or round teeth), snouts out of the same mouth shape, ears, … i also did some experiments with eyelid shapes but just landed on texturing a simple sphere since the 3d eyelids look like too much in my opinion (top left corner in devlog) what do you think
another big one this time added blinking eyes, moving mouths, eye movement just for some nice touch and then decided it’s finally time to give da animals a little bit of a brain. The system i decided on for now is a simple “neuronal network” kind of thing. I got a bunch of nodes like: sensor for vision/smell/time, math add/multiply/min/max/relu/…, memory basically just decaying values over time, actuators Move/Turn/Bite/Flee. these modules can then be linked up kinda like unity shader graph (thats why my ui look like dat lmao) the nodes are then connected via neurons that store a weight (which will later be adjusted via, who guessed it, Evolution). Addition of all the math nodes adds some complexity that i am quite a fan of. To recreate an idling cycle for example one could use a sin wave and time, … Anyways that’s all for now next up is probably instincts/hormones or sum else didnt decide yet. Any thoughts as always in the comments. Oh ye i also fixed webgl rendering via adressables (loading resources).
another big update this time, i noticed i was getting kinda lazy with the amount of devlogs per hours i promise ill do better first up is hormones: Adrenaline, Fear, and Aggression that the brain can hook up to. unlike normal math nodes that instantly flip on and off, these hormones smooth out over time so it is kinda like the memory nodes but they actually force the creature regardless of brain architecture to do specific stuff like turn away from everything, run faster, … second part: plants cus else creatures are all just carnivores. PlantDNA controls: branching depth, how many branches per node, Phototropism (fancy word for growing towards the light ) vs Gravitropism (gravity pulling branches down). meshes only get redone if there is substantial growth and ye, thas it do yall think of the chemical brain stuff? any ideas for other hormones or plant types i should add? let me know in the comments
Im baaaaaaaack! Lets go. I actually had the honor to go to an in person game dev event in NYC and even met Zack and some other amazing members of the hackclub team there, it was a blast. Anyways i also did some work on Evolve including some shader fixes for outlines (they didnt really look good on plants…), some general system fixes since the code base grew quite big and also isnt the most beautiful, fixed some IK issues that had been bugging me, implemented a lot of the #TODOs (: Anyways not really a lot of big new visual stuff so i just made a little animation of creatures and some plants hope you enjoy! (as always please test the game at https://boredvoidater.itch.io/evolve and tell me everything u got to say) byeee
Hi everyone, sorry for the long delay I’m in china rn so everything a bit difficult and I also lost ma laptop so I will be shipping this project early (updates to be expected so follow the itch if you are interested) Changes since last develop: finally tried implementing creatures and plants onto the planet generation which works for the most part now although the creature look a bit funny going up and down tiles… It’s been amazing I hope to participate in the next hack club event as well!
Ships:
This has been a hell of a ride and very interesting project to work on. Most challenging for me was all the shader work (normally my projects look meh at best xd). The project can be tested either in the browser on itch.io or downloaded there for all desktop platforms… Screenshots are in dev logs ( pls read I gave them a lot of love ((: ) and on itch!...
|
1792878750.0447795
|
1793742750.0447795
|
|
16703
|
My portfolio by @Kirizakuga | Stardance
|
Kirizakuga
|
1
|
7.0
|
45
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T07:47:09Z", "hours": 7.0, "multiplier": 6.99, "payout": 45, "blessing": "neutral", "text": "Well, this is just my personal portfolio i made just for my hobby", "repo": "https://github.com/Kirizakuga/portfolio", "demo": "https://kou.is-a.dev"}]...
|
[{"post_id": 12992, "ts": "202 [{"post_id": 12992, "ts": "2026-06-21T07:45:23Z", "hours": 1.3686, "text": "basically done"}, {"post_id": 9201, "ts": "2026-06-15T13:28:11Z", "hours": 2.4436, "text": "adding github heatmap via github Actions, also comes with some details tweaks"}, {"post_id": 8253, "ts": "2026-06-13T18:46:51Z", "hours": 2.7922, "text": "im done with the first landing page, and also the 404 of the page that im planning to progress later, you guys can see what im done here: kou.is-a.dev"}, {"post_id": 6922, "ts": "2026-06-11T16:27:10Z", "hours": 0.7567, "text": "just adjust some nav page"}]...
|
Title: My portfolio by @Kirizakuga | Stardance
De Title: My portfolio by @Kirizakuga | Stardance
Devlogs:
just adjust some nav page
im done with the first landing page, and also the 404 of the page that im planning to progress later, you guys can see what im done here: kou.is-a.dev
adding github heatmap via github Actions, also comes with some details tweaks
basically done
Ships:
Well, this is just my personal portfolio i made just for my hobby...
|
1793242491.2123382
|
1793328891.2123382
|
|
16711
|
vibe-check by @subhansh | Stardance
|
|
1
|
60.0
|
521
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T12:11:56Z", "hours": 60.0, "multiplier": 17.37, "payout": 521, "blessing": "neutral", "text": "Vibe Check is a web app that makes working with AI easier by improving prompts before you send them. It focuses on three simple quality-of-life improvements: automatic AI prompt engineering to produce clearer and more effective prompts, a Token Saver mode that converts prompts into Chinese to significantly reduce token usage on many AI models, and built-in prompt scoring with personalized feedback so you can understand and improve your prompting skills over time. The goal is simple: better prompts, lower costs, and better AI responses with almost no extra effort, and the question that “cant I just ask gpt/claude do the same?” u can.. but that means using the ai just to prepare another prompt. vibe check skips that extra step. It optimizes, scores, and compresses your prompt before it reaches the model, saving both time and tokens. go try it out :3 :- https://vibe-check-vert-theta.vercel.app", "repo": "https://github.com/subhansh-dev/vibe-check", "demo": "https://vibe-check-vert-theta.vercel.app"}]...
|
[{"post_id": 17551, "ts": "202 [{"post_id": 17551, "ts": "2026-06-28T11:41:54Z", "hours": 21.9344, "text": "Vibe Check — Devlog 🍓 well… there was a pretty big plot twist. the original plan was to ship Vibe Check as a Chrome extension. everything was already built around that idea. popup UI. chrome APIs. extension architecture. the whole thing. then i found out Google wants a $5 one-time fee just to publish an extension. and honestly… i was NOT about to pay $5 just so my little prompt tool could exist on the Chrome Web Store 😭 so… i scrapped the entire extension idea. which meant i had to redesign… basically everything. the whole app was originally designed around a tiny popup window. now it had to become a full webpage. different layout. different navigation. different spacing. different interactions. pretty much every screen got rewritten from scratch. the funny part is that none of the actual features changed. they just had to be rebuilt in a way that actually made sense on a full website. while rebuilding everything i also decided to add a feature i honestly wish more AI tools had. Token Saver :3 after Vibe Check analyzes and improves your prompt… it can now convert the final prompt into Chinese. before anyone asks… no, this isn’t some weird translation gimmick 😭 the reason is actually pretty simple. Chinese is far more information-dense than English, so the same instructions usually require significantly fewer input tokens. that means: lower API costs fewer prompt tokens more room inside the context window without changing what the prompt is actually asking. the AI still understands exactly the same instructions. if you want the response in English, you can literally just add: “Respond in English, even though my prompt is written in Chinese.” and it’ll work exactly the same. so now Vibe Check doesn’t just make prompts better… it also tries to make them cheaper to run. which i thought was a pretty neat addition :3 meow"}, {"post_id": 14247, "ts": "2026-06-23T08:25:48Z", "hours": 26.3192, "text": "Vibe Check — Devlog said last devlog i’d be tackling the UI redesign next. did that. also did about four other things i didn’t plan on. classic me. two days, and somehow: bug fixes, the redesign, AI integration, a whole landing page, and deployment setup. CSS changes enough to make me question my existence 💔 bugs that were silently ruining everything found out half the buttons in the app weren’t even styled because the css class they used literally didn’t exist 😭 also discovered template search wasn’t searching anything because the input id was missing. the search bar looked functional. it was not. meow. fixed a bunch of cursed unicode issues too because apparently some checkmarks had transformed into ancient artifacts from another dimension. the redesign arc 🥀 this one was planned, but it still spiraled way harder than expected. changed one thing. then another. then suddenly popup.css was over 700 lines. goodbye neon cyberpunk. hello warm golds, soft reds, glass panels, crystal backgrounds, rounded corners and way too many blur effects. the whole thing feels a lot calmer now. less “rgb gaming keyboard” more “expensive thing i can’t afford” :3 ai brain upgrade probably the biggest change, and definitely not planned. vibe check can now use Cerebras gpt-oss-120b for prompt enhancement. ended up building support for: local development chrome extension mode production deployment all using the same enhancement pipeline. if ai dies the app automatically falls back to local enhancement so users don’t get hit with a giant error message. because nobody likes giant error messages. built a whole landing page because apparently i enjoy suffering didn’t even plan this one. but now there’s: animated hero section glassmorphism everywhere feature cards demo section platform showcase responsive layout and enough floating visual effects to make my gpu slightly concerned. production stuff nobody will notice added deployment configs. serverless functions. environment variables. request validation. api key protection. cors handling. all the boring stuff that becomes very exciting when it’s missing. stats files modified: basically yes popup.css: 730 lines popup.js: 1300+ lines new files: landing page serverless ai endpoint deployment config :3"}, {"post_id": 12406, "ts": "2026-06-20T07:35:36Z", "hours": 11.5258, "text": "VibeCheck Devlog #1 🥀 so… for the last few days i’ve been building something called VibeCheck . the idea is pretty simple: you paste a prompt. VibeCheck tears it apart. then tells you how to make it better. that’s it. but somehow that “simple” idea ended up turning into an entire app 💔 the original problem i kept seeing the same thing over and over. people would ask an ai for something. the result would be bad. then they’d blame the model. when half the time the real problem was the prompt. so i thought… what if there was a tool that could actually analyze prompts and explain what’s wrong with them? not just give a score. actually tell you: what’s missing what’s unclear what’s limiting the output how to improve it and that’s basically where VibeCheck started. browser compatibility was a disaster one thing i realized pretty quickly… the whole app depended on chrome extension APIs. which means outside a chrome extension… everything exploded 💔 so i built a chrome api polyfill layer. now VibeCheck can run inside an extension and directly in a browser without completely falling apart. storage works. runtime messaging works. browser preview works. and the app stops screaming at me every time i open it. template collection got out of control this one got a little ridiculous. templates went from: 15 → 38 there’s now stuff for: ui components full applications backend systems debugging ai prompts api development and probably more coming later because apparently i don’t know how to stop adding things. random suffering also spent way too long fixing bugs that should not have existed. you know the type: 40 minutes of debugging. 3 line fix. questioning life choices afterwards. those. what’s next? right now i’m focusing on making the scoring system smarter and improving the actual prompt analysis. the ui is pretty trash so id be working on that too the architecture isn’t actively trying to kill me anymore and VibeCheck is slowly becoming the tool i originally wanted to build we’ll see how long that lasts before i break everything again 🥀"}]...
|
Title: vibe-check by @subhansh | Stardance
Devlog Title: vibe-check by @subhansh | Stardance
Devlogs:
VibeCheck Devlog #1 🥀 so… for the last few days i’ve been building something called VibeCheck . the idea is pretty simple: you paste a prompt. VibeCheck tears it apart. then tells you how to make it better. that’s it. but somehow that “simple” idea ended up turning into an entire app 💔 the original problem i kept seeing the same thing over and over. people would ask an ai for something. the result would be bad. then they’d blame the model. when half the time the real problem was the prompt. so i thought… what if there was a tool that could actually analyze prompts and explain what’s wrong with them? not just give a score. actually tell you: what’s missing what’s unclear what’s limiting the output how to improve it and that’s basically where VibeCheck started. browser compatibility was a disaster one thing i realized pretty quickly… the whole app depended on chrome extension APIs. which means outside a chrome extension… everything exploded 💔 so i built a chrome api polyfill layer. now VibeCheck can run inside an extension and directly in a browser without completely falling apart. storage works. runtime messaging works. browser preview works. and the app stops screaming at me every time i open it. template collection got out of control this one got a little ridiculous. templates went from: 15 → 38 there’s now stuff for: ui components full applications backend systems debugging ai prompts api development and probably more coming later because apparently i don’t know how to stop adding things. random suffering also spent way too long fixing bugs that should not have existed. you know the type: 40 minutes of debugging. 3 line fix. questioning life choices afterwards. those. what’s next? right now i’m focusing on making the scoring system smarter and improving the actual prompt analysis. the ui is pretty trash so id be working on that too the architecture isn’t actively trying to kill me anymore and VibeCheck is slowly becoming the tool i originally wanted to build we’ll see how long that lasts before i break everything again 🥀
Vibe Check — Devlog said last devlog i’d be tackling the UI redesign next. did that. also did about four other things i didn’t plan on. classic me. two days, and somehow: bug fixes, the redesign, AI integration, a whole landing page, and deployment setup. CSS changes enough to make me question my existence 💔 bugs that were silently ruining everything found out half the buttons in the app weren’t even styled because the css class they used literally didn’t exist 😭 also discovered template search wasn’t searching anything because the input id was missing. the search bar looked functional. it was not. meow. fixed a bunch of cursed unicode issues too because apparently some checkmarks had transformed into ancient artifacts from another dimension. the redesign arc 🥀 this one was planned, but it still spiraled way harder than expected. changed one thing. then another. then suddenly popup.css was over 700 lines. goodbye neon cyberpunk. hello warm golds, soft reds, glass panels, crystal backgrounds, rounded corners and way too many blur effects. the whole thing feels a lot calmer now. less “rgb gaming keyboard” more “expensive thing i can’t afford” :3 ai brain upgrade probably the biggest change, and definitely not planned. vibe check can now use Cerebras gpt-oss-120b for prompt enhancement. ended up building support for: local development chrome extension mode production deployment all using the same enhancement pipeline. if ai dies the app automatically falls back to local enhancement so users don’t get hit with a giant error message. because nobody likes giant error messages. built a whole landing page because apparently i enjoy suffering didn’t even plan this one. but now there’s: animated hero section glassmorphism everywhere feature cards demo section platform showcase responsive layout and enough floating visual effects to make my gpu slightly concerned. production stuff nobody will notice added deployment configs. serverless functions. environment variables. request validation. api key protection. cors handling. all the boring stuff that becomes very exciting when it’s missing. stats files modified: basically yes popup.css: 730 lines popup.js: 1300+ lines new files: landing page serverless ai endpoint deployment config :3
Vibe Check — Devlog 🍓 well… there was a pretty big plot twist. the original plan was to ship Vibe Check as a Chrome extension. everything was already built around that idea. popup UI. chrome APIs. extension architecture. the whole thing. then i found out Google wants a $5 one-time fee just to publish an extension. and honestly… i was NOT about to pay $5 just so my little prompt tool could exist on the Chrome Web Store 😭 so… i scrapped the entire extension idea. which meant i had to redesign… basically everything. the whole app was originally designed around a tiny popup window. now it had to become a full webpage. different layout. different navigation. different spacing. different interactions. pretty much every screen got rewritten from scratch. the funny part is that none of the actual features changed. they just had to be rebuilt in a way that actually made sense on a full website. while rebuilding everything i also decided to add a feature i honestly wish more AI tools had. Token Saver :3 after Vibe Check analyzes and improves your prompt… it can now convert the final prompt into Chinese. before anyone asks… no, this isn’t some weird translation gimmick 😭 the reason is actually pretty simple. Chinese is far more information-dense than English, so the same instructions usually require significantly fewer input tokens. that means: lower API costs fewer prompt tokens more room inside the context window without changing what the prompt is actually asking. the AI still understands exactly the same instructions. if you want the response in English, you can literally just add: “Respond in English, even though my prompt is written in Chinese.” and it’ll work exactly the same. so now Vibe Check doesn’t just make prompts better… it also tries to make them cheaper to run. which i thought was a pretty neat addition :3 meow
Ships:
Vibe Check is a web app that makes working with AI easier by improving prompts before you send them. It focuses on three simple quality-of-life improvements: automatic AI prompt engineering to produce clearer and more effective prompts, a Token Saver mode that converts prompts into Chinese to significantly reduce token usage on many AI models, and built-in prompt scoring with personalized feedback so you can understand and improve your prompting skills over time. The goal is simple: better prompts, lower costs, and better AI responses with almost no extra effort, and the question that “cant I just ask gpt/claude do the same?” u can.. but that means using the ai just to prepare another prompt. vibe check skips that extra step. It optimizes, scores, and compresses your prompt before it reaches the model, saving both time and tokens. go try it out :3 :- https://vibe-check-vert-theta.vercel.app...
|
1793127356.0742044
|
1793213756.0742044
|
|
16724
|
My awesome macropad! by @rosikur | Stardance
|
rosikur
|
1
|
1.3
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T19:24:33Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a small Macro pad It was really hard coding it without being able to code it IRL and i couldn´t get it to compile (so i gave up) Im really proud of my design and the rotary Encoder and it came out exactly like i imagined", "repo": "https://github.com/rosikur/My-Hackpad", "demo": ""}]...
|
[{"post_id": 47647, "ts": "202 [{"post_id": 47647, "ts": "2026-08-15T17:54:07Z", "hours": 0.3006, "text": "this time i only needed 15 min to reship as the shipping process of this damn project is so damn complicated as first it says ship via the form then via stardance then via hackpad again and then stardance againnnn i swtg whyy so damn complicated also this is the keymap for my full sized keyboard"}, {"post_id": 9191, "ts": "2026-06-15T13:04:47Z", "hours": 1.3506, "text": "worken hard"}]...
|
Title: My awesome macropad! by @rosikur | Stardanc Title: My awesome macropad! by @rosikur | Stardance
Devlogs:
worken hard
this time i only needed 15 min to reship as the shipping process of this damn project is so damn complicated as first it says ship via the form then via stardance then via hackpad again and then stardance againnnn i swtg whyy so damn complicated also this is the keymap for my full sized keyboard
Ships:
I made a small Macro pad It was really hard coding it without being able to code it IRL and i couldn´t get it to compile (so i gave up) Im really proud of my design and the rotary Encoder and it came out exactly like i imagined...
|
1793271316.0491598
|
1793357716.0491598
|
|
16734
|
BREGG.OS Flight Sim by @Bregg32 | Stardance
|
Bregg32
|
1
|
2.4
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T15:21:22Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a base flight simulator that is not fully done but will be done soon", "repo": "https://github.com/arasbregg-oss/Flightsim", "demo": "https://glowing-disco-77jqjrqgp793p49-8901.app.github.dev/"}]...
|
[{"post_id": 14770, "ts": "202 [{"post_id": 14770, "ts": "2026-06-24T00:06:20Z", "hours": 0.4014, "text": "The BREGG.OS Flight Sim this can only be tested when my codespace is running"}, {"post_id": 8680, "ts": "2026-06-14T12:48:41Z", "hours": 0.3081, "text": "Flight sim"}, {"post_id": 8206, "ts": "2026-06-13T17:29:04Z", "hours": 1.3972, "text": "I am working on my flight sim called the BREGG.OS Flight Sim"}]...
|
Title: BREGG.OS Flight Sim by @Bregg32 | Stardance Title: BREGG.OS Flight Sim by @Bregg32 | Stardance
Devlogs:
I am working on my flight sim called the BREGG.OS Flight Sim
Flight sim
The BREGG.OS Flight Sim this can only be tested when my codespace is running
Ships:
I made a base flight simulator that is not fully done but will be done soon...
|
1793220684.3000946
|
1793307084.3000946
|
|
16753
|
Flower game by @Alafandri | Stardance
|
Alafandri
|
1
|
4.0
|
17
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T15:05:54Z", "hours": 4.0, "multiplier": 4.1, "payout": 17, "blessing": "neutral", "text": "I made a godot game to improve myself in using godot and getting more familiar with its programming language. Challenging was keeping the motivation. When you are hit with a problem suddnely out of nowhere then it can be so annoying tracking down the cause of the problem. I am proud of the art. I think i did very well with it. When people test out my project they should know that it’s not much but I still spent a lot of time trying my best to make it so I hope you enjoy!", "repo": "https://github.com/Alafandri/StardanceProject", "demo": "https://alafandri.itch.io/flower-game"}]...
|
[{"post_id": 11568, "ts": "202 [{"post_id": 11568, "ts": "2026-06-18T21:07:00Z", "hours": 0.7981, "text": "Devlog #4 Hello everyone, this is the fourth devlog! Everything new: Goal Timer Main menu A way to win Victory screen So basically the biggest thing I have added this time is that this game is now actually winnable. Obviously this isn’t and won’t be the final version for the game but the main core systems are in place now. That means that I can now start working on other things like adding some visual effects and polishing the game out even more. I feel like this isn’t enough for the game so I absolutely want to expand on this game. So next time you can hope for more polished version of the game. And I will also be starting to sort everything because stuff are pretty messy currently. That is it for today so see you next time!"}, {"post_id": 10936, "ts": "2026-06-17T22:31:10Z", "hours": 1.1256, "text": "Devlog #3 Hello everyone once again! Back here with the third devlog!!! This one adds quite a few things. Everything new: Gave everything an actual function(meaning that the tools can actually do something now) Lives End screen It’s a very simple game but I got big plans for it(which I will keep as a secret for now) and so far I have been having so much fun making it. Just making something yourself and feeling productive instead of rotting in bed all day watching youtube feels so nice. The people who have commented or like my posts thank you so much cause yall are so nice and just the best. I love the feeling when I have made some actual changes to the game and then I go to github desktop to push all the changes and I can see everything that is about to be committed to github it just feels so satisfying. This keeps me going and I really hope that this post might motivate someone to work on their project cause yall projects motivate me. You guys got so much passion and are just so talented that I just love so much. Anyways I got a little distracted so let’s continue talking about the changes to the game. So as you might have read from everything new then everything has a function now finally. There is finally some gameplay, yay. But yeah, I made the tools movable already in the last devlog so that’s been a thing in the game already but they actually didn’t do anything before but now I have made a little randomized system where the flower picks a random thing that it wants and displays it on the text label. If you give the correct thing then nothing happens but if you give the wrong thing then you lose a live. It’s a pretty simple system. And obviously if you run out of lives then everything will be turned invisible and the end screen appears. Planned next: a timer goal start screen make it more satisfying But that is it for this devlog! See you next time. Byeeee. :)"}, {"post_id": 10244, "ts": "2026-06-16T21:33:28Z", "hours": 1.0611, "text": "Devlog #2 Hey everyone! The second devlog for my godot game is finally here! I have done several new things: Drag and drop system Drawn some sprites Written some lore(I like my games with lore, it helps me guide) Basic gameplay loop idea Probably the biggest thing currently is the drag and drop system. Even though not complex at all then still very important feature for the game. The drag and drop system is important cause the whole game will be relying on it and I wanted for it to feel nice. I am definitely planning on expanding on it to make it feel more satisfying(I have some ideas). I think that it’s very important for your games to feel nice or i guess in other words ‘satisfying’ and obviously they should be fun. So my game idea to make something like the game Mr.TomatoS . I’ve always like the idea behind the game and especially the lore and I have always wanted to make something like this. This game is mostly for me to get better at development and just to have fun while making it. If the dev has fun making the game then the better the game will end up. Now I think we have talked enough about the drag and drop system so let’s talk about the sprites. To me is always very important to make a atmosphere for your game which tells you all you need to know about the game and I think it should give you a glimpse of whats about to happen without really telling you in words. So that’s why the sprites and visual effects are very important. Currently I have worked on at all on the visual side cause that I should work on more when I am polishing the game. But I still wanted to game to look better when testing cause I have gotten tired of staring these godot cubes. So that’s why I have some basic most important sprites in the game. Also I would like to say that these sprites are probably not final and they might be changed. Anyways enough of yapping and time to get back developing. Have a nice day!!! :)"}, {"post_id": 9872, "ts": "2026-06-16T10:26:58Z", "hours": 1.1692, "text": "Devlog #1 ㅤ I have created the godot game project and started developing my game. I already have some ideas for the game too which I won’t be talking too much about in this devlog but all you need to know is that it will be a pretty basic 2D game and that it won’t be a platformer. What I’m trying to achieve with this project is to get better in game development and by that I mean coding, game design and etc… All I’ve made currently is just a little textbox(which I will probably end up removing) where you can enter your name and move on to the actual game. I don’t have much anything else to talk about so see you soon in the next devlog!"}]...
|
Title: Flower game by @Alafandri | Stardance
Devl Title: Flower game by @Alafandri | Stardance
Devlogs:
Devlog #1 ㅤ I have created the godot game project and started developing my game. I already have some ideas for the game too which I won’t be talking too much about in this devlog but all you need to know is that it will be a pretty basic 2D game and that it won’t be a platformer. What I’m trying to achieve with this project is to get better in game development and by that I mean coding, game design and etc… All I’ve made currently is just a little textbox(which I will probably end up removing) where you can enter your name and move on to the actual game. I don’t have much anything else to talk about so see you soon in the next devlog!
Devlog #2 Hey everyone! The second devlog for my godot game is finally here! I have done several new things: Drag and drop system Drawn some sprites Written some lore(I like my games with lore, it helps me guide) Basic gameplay loop idea Probably the biggest thing currently is the drag and drop system. Even though not complex at all then still very important feature for the game. The drag and drop system is important cause the whole game will be relying on it and I wanted for it to feel nice. I am definitely planning on expanding on it to make it feel more satisfying(I have some ideas). I think that it’s very important for your games to feel nice or i guess in other words ‘satisfying’ and obviously they should be fun. So my game idea to make something like the game Mr.TomatoS . I’ve always like the idea behind the game and especially the lore and I have always wanted to make something like this. This game is mostly for me to get better at development and just to have fun while making it. If the dev has fun making the game then the better the game will end up. Now I think we have talked enough about the drag and drop system so let’s talk about the sprites. To me is always very important to make a atmosphere for your game which tells you all you need to know about the game and I think it should give you a glimpse of whats about to happen without really telling you in words. So that’s why the sprites and visual effects are very important. Currently I have worked on at all on the visual side cause that I should work on more when I am polishing the game. But I still wanted to game to look better when testing cause I have gotten tired of staring these godot cubes. So that’s why I have some basic most important sprites in the game. Also I would like to say that these sprites are probably not final and they might be changed. Anyways enough of yapping and time to get back developing. Have a nice day!!! :)
Devlog #3 Hello everyone once again! Back here with the third devlog!!! This one adds quite a few things. Everything new: Gave everything an actual function(meaning that the tools can actually do something now) Lives End screen It’s a very simple game but I got big plans for it(which I will keep as a secret for now) and so far I have been having so much fun making it. Just making something yourself and feeling productive instead of rotting in bed all day watching youtube feels so nice. The people who have commented or like my posts thank you so much cause yall are so nice and just the best. I love the feeling when I have made some actual changes to the game and then I go to github desktop to push all the changes and I can see everything that is about to be committed to github it just feels so satisfying. This keeps me going and I really hope that this post might motivate someone to work on their project cause yall projects motivate me. You guys got so much passion and are just so talented that I just love so much. Anyways I got a little distracted so let’s continue talking about the changes to the game. So as you might have read from everything new then everything has a function now finally. There is finally some gameplay, yay. But yeah, I made the tools movable already in the last devlog so that’s been a thing in the game already but they actually didn’t do anything before but now I have made a little randomized system where the flower picks a random thing that it wants and displays it on the text label. If you give the correct thing then nothing happens but if you give the wrong thing then you lose a live. It’s a pretty simple system. And obviously if you run out of lives then everything will be turned invisible and the end screen appears. Planned next: a timer goal start screen make it more satisfying But that is it for this devlog! See you next time. Byeeee. :)
Devlog #4 Hello everyone, this is the fourth devlog! Everything new: Goal Timer Main menu A way to win Victory screen So basically the biggest thing I have added this time is that this game is now actually winnable. Obviously this isn’t and won’t be the final version for the game but the main core systems are in place now. That means that I can now start working on other things like adding some visual effects and polishing the game out even more. I feel like this isn’t enough for the game so I absolutely want to expand on this game. So next time you can hope for more polished version of the game. And I will also be starting to sort everything because stuff are pretty messy currently. That is it for today so see you next time!
Ships:
I made a godot game to improve myself in using godot and getting more familiar with its programming language. Challenging was keeping the motivation. When you are hit with a problem suddnely out of nowhere then it can be so annoying tracking down the cause of the problem. I am proud of the art. I think i did very well with it. When people test out my project they should know that it’s not much but I still spent a lot of time trying my best to make it so I hope you enjoy!...
|
1793141409.7537038
|
1793227809.7537038
|
|
16774
|
flight_pad by @samraat-756 | Stardance
|
samraat-756
|
1
|
3.0
|
15
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T05:51:29Z", "hours": 3.0, "multiplier": 5.0, "payout": 15, "blessing": "neutral", "text": "I made a 3x3 macro-pad with 2 rotary encoders, and is used to control common cockpit camera views for Microsoft flight simulator 2020 and 2024. The most challenging part of this project was first, wiring up the PCB, when laying out the tracks in the PCB editor, and then having to spend hours debugging custom firmware developed using QMK MSYS, and VS.Code, due to incorrect referencing, and setting up the compile process correctly to ensure a flawless compile via MSYS. To test my project, people need to make sure that even though they flash the firmware onto the board, they should also make sure to assign key binds in the simulator itself. I left that part out of the project, as everyone assigns key binds differently to their liking (in-game).", "repo": "https://github.com/samraatpchauhan-eng/flight_pad", "demo": ""}]...
|
[{"post_id": 9077, "ts": "2026 [{"post_id": 9077, "ts": "2026-06-15T05:02:20Z", "hours": 1.5831, "text": "Finally finished compiling the firmware for the flight_pad, after long hours of troubleshooting! I have effectively completed the project, but still need to make some tweaks to the case. After that, I plan to submit it!"}, {"post_id": 8874, "ts": "2026-06-14T19:33:55Z", "hours": 0.3169, "text": "Finished Designing the case for the FlightPad. It follows a simple, minimalist design asthetic, with a “FLIGHTPAD” engraving on top. This follows the sandwich style key mount."}, {"post_id": 8848, "ts": "2026-06-14T18:33:46Z", "hours": 0.7314, "text": "Finished designing the PCB via KiCad, which utlizes both sides of the board, and a 3x3 matrix system. However, only one of the two rotary encoders’ buttons will be utilized due to a lack of pins"}, {"post_id": 7918, "ts": "2026-06-13T06:16:53Z", "hours": 0.4411, "text": "Finished designing the schematics of the FlightSim_Pad, including 9 switches and 2 rotary encoders"}]...
|
Title: flight_pad by @samraat-756 | Stardance
Dev Title: flight_pad by @samraat-756 | Stardance
Devlogs:
Finished designing the schematics of the FlightSim_Pad, including 9 switches and 2 rotary encoders
Finished designing the PCB via KiCad, which utlizes both sides of the board, and a 3x3 matrix system. However, only one of the two rotary encoders’ buttons will be utilized due to a lack of pins
Finished Designing the case for the FlightPad. It follows a simple, minimalist design asthetic, with a “FLIGHTPAD” engraving on top. This follows the sandwich style key mount.
Finally finished compiling the firmware for the flight_pad, after long hours of troubleshooting! I have effectively completed the project, but still need to make some tweaks to the case. After that, I plan to submit it!
Ships:
I made a 3x3 macro-pad with 2 rotary encoders, and is used to control common cockpit camera views for Microsoft flight simulator 2020 and 2024. The most challenging part of this project was first, wiring up the PCB, when laying out the tracks in the PCB editor, and then having to spend hours debugging custom firmware developed using QMK MSYS, and VS.Code, due to incorrect referencing, and setting up the compile process correctly to ensure a flawless compile via MSYS. To test my project, people need to make sure that even though they flash the firmware onto the board, they should also make sure to assign key binds in the simulator itself. I left that part out of the project, as everyone assigns key binds differently to their liking (in-game)....
|
1793130803.3610885
|
1793217203.3610885
|
|
16776
|
The Twistpad by @Cloud4D | Stardance
|
Cloud4D
|
1
|
16.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T02:19:35Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a hackpad! I have decided to call my hackpad a Twistpad, since it has two rotary encoders. The Twistpad features a 3x3 grid of 9 keys, and two dials which are coded for volume and video playback. The 9 keys are mapped to F13-F21, meaning you can map it to anything you desire yourself quickly with no hassle. The case features a nice conical USB cutout to help guide the cable in, and there’s a wonderful little window in the top to peer inside at the brain of the device, the seeeduino!", "repo": "https://github.com/Cloud4D/Twistpad/blob/main/README.md", "demo": ""}]...
|
[{"post_id": 25618, "ts": "202 [{"post_id": 25618, "ts": "2026-07-10T00:28:26Z", "hours": 0.7325, "text": "Shipping time! Yeah, it’s time to finally ship my project, after waiting for the form to be fixed, and learning that I actually need to post more devlogs in order to actually count my hours, I’m about to fill out the submission form and ship my project :). Its been quite a ride."}, {"post_id": 13882, "ts": "2026-06-22T19:07:55Z", "hours": 1.1472, "text": "I found a problem, and fixed the problem. When coding, I noticed that I had messed up my matrix, so I went back to my schematic, fixed the schematic, fixed the PCB (thankfully it was easy), and then put the new PCB into the CAD model. Later, I plan on fixing my files and then finishing up the code, and then I should be done! I’ve attached a picture of the fixed schematic to this devlog."}, {"post_id": 12885, "ts": "2026-06-21T03:22:25Z", "hours": 7.2889, "text": "Time for my third devlog. I suppose I should be posting more, but the time tracker keeps bugging and I can’t write after finishing a amount of time. Between now and 4 days ago, I managed to finish up the case, I tackled multiple problems, such as figuring out holes and dimensions for the USB cutout and the rotary encoders and all that. I also made it all white so thats nice, better than that gray. I filleted the corners (I used that a bunch in the past few days), messed with geometry to make my cool little window to view into the Seeeduino module, realized that the window interfered with the keycaps, had to delete the window and make a new one, all fun stuff. The USB cutout was fun to make as a sketch, since I got to mess around with lines and rectangles to fillet the corners to make a rectangle with rounded corners and then realizing I could’ve just made a rectangle and filleted that, but oh well, it’s the joy of learning. I then formatted my files to get them ready for submission, and now I tackle the firmware. Wish me luck. Also Lapse still refuses to connect to Hackatime, I have 16 hours and 11 minutes on Lapse but only 5 hours and 25 minutes on Hackatime?? I hope it fixes itself soon."}, {"post_id": 10151, "ts": "2026-06-16T19:25:11Z", "hours": 5.3075, "text": "It’s been a while since I posted a devlog. I just got a bit busy but I guess it is time to sum up everything in I have done in the past few days! After finishing the guide hackpad, I took it upon myself to build my own custom hackpad (name pending). To begin, I went into Kicad’s schematics editor and created a schematic, using a matrix (thank you Gemini for teaching me what it is). I settled on a 3x3 keyboard with two dials, and after fiddling around with the layout and wiring and footprints and all that fun stuff, I was able to go to the PCB editor. This is where I spent the most amount of time. I spent about a day working through layouts of the LEDs, diodes, switches, and the Seeeduino. After that day, I tackled wiring everything up, and learned about vias. I don’t know what we’d do without them… they’re so helpful. I thought I was all good once I finished wiring things up… until I opened the DRC and ran it to find 500 errors. After changing some of the constraints, and realizing that I should make my 5V wire a bit wider, I managed to get the DRC down to around 100 errors, most of them being clearance errors. I spent a third day just fixing those and getting it down to 9 errors, all of which being simple silkscreen warnings. I also realized that my LEDs were existing in the same place as my switches, so I had to go back and redo ALL of the wiring for those, and then realized I was using the wrong footprint, and then I once more had to go back and redo all the wiring (lots of fun), but once I did that and fixed some issues with Edge.cuts, my PCB was all good to go! Finally we get to today, where I exported my PCB and put it into Fusion360, and drew and extruded the base and walls of the case (standoffs tomorrow). Also I don’t know why it only says I logged 3 hours, I’ve logged around 8 since my last post…"}, {"post_id": 7829, "ts": "2026-06-13T02:06:43Z", "hours": 1.5553, "text": "Fusion360 is very confusing… I did quite a bit of work today! I started by finishing up my PCB design on Kicad, which was quite fun. I’m looking forward to designing my own PCB. Designing the case on Fusion360 was a bit frustrating, since my only 3D modeling experience was with tinkercad a few years ago. ChatGPT was a big help in helping me understand the softwares. Using what I’ve learned here with the guide and whatnot, I’m excited to build my own custom macropad (maybe with a few dials to spice things up)"}]...
|
Title: The Twistpad by @Cloud4D | Stardance
Devlo Title: The Twistpad by @Cloud4D | Stardance
Devlogs:
Fusion360 is very confusing… I did quite a bit of work today! I started by finishing up my PCB design on Kicad, which was quite fun. I’m looking forward to designing my own PCB. Designing the case on Fusion360 was a bit frustrating, since my only 3D modeling experience was with tinkercad a few years ago. ChatGPT was a big help in helping me understand the softwares. Using what I’ve learned here with the guide and whatnot, I’m excited to build my own custom macropad (maybe with a few dials to spice things up)
It’s been a while since I posted a devlog. I just got a bit busy but I guess it is time to sum up everything in I have done in the past few days! After finishing the guide hackpad, I took it upon myself to build my own custom hackpad (name pending). To begin, I went into Kicad’s schematics editor and created a schematic, using a matrix (thank you Gemini for teaching me what it is). I settled on a 3x3 keyboard with two dials, and after fiddling around with the layout and wiring and footprints and all that fun stuff, I was able to go to the PCB editor. This is where I spent the most amount of time. I spent about a day working through layouts of the LEDs, diodes, switches, and the Seeeduino. After that day, I tackled wiring everything up, and learned about vias. I don’t know what we’d do without them… they’re so helpful. I thought I was all good once I finished wiring things up… until I opened the DRC and ran it to find 500 errors. After changing some of the constraints, and realizing that I should make my 5V wire a bit wider, I managed to get the DRC down to around 100 errors, most of them being clearance errors. I spent a third day just fixing those and getting it down to 9 errors, all of which being simple silkscreen warnings. I also realized that my LEDs were existing in the same place as my switches, so I had to go back and redo ALL of the wiring for those, and then realized I was using the wrong footprint, and then I once more had to go back and redo all the wiring (lots of fun), but once I did that and fixed some issues with Edge.cuts, my PCB was all good to go! Finally we get to today, where I exported my PCB and put it into Fusion360, and drew and extruded the base and walls of the case (standoffs tomorrow). Also I don’t know why it only says I logged 3 hours, I’ve logged around 8 since my last post…
Time for my third devlog. I suppose I should be posting more, but the time tracker keeps bugging and I can’t write after finishing a amount of time. Between now and 4 days ago, I managed to finish up the case, I tackled multiple problems, such as figuring out holes and dimensions for the USB cutout and the rotary encoders and all that. I also made it all white so thats nice, better than that gray. I filleted the corners (I used that a bunch in the past few days), messed with geometry to make my cool little window to view into the Seeeduino module, realized that the window interfered with the keycaps, had to delete the window and make a new one, all fun stuff. The USB cutout was fun to make as a sketch, since I got to mess around with lines and rectangles to fillet the corners to make a rectangle with rounded corners and then realizing I could’ve just made a rectangle and filleted that, but oh well, it’s the joy of learning. I then formatted my files to get them ready for submission, and now I tackle the firmware. Wish me luck. Also Lapse still refuses to connect to Hackatime, I have 16 hours and 11 minutes on Lapse but only 5 hours and 25 minutes on Hackatime?? I hope it fixes itself soon.
I found a problem, and fixed the problem. When coding, I noticed that I had messed up my matrix, so I went back to my schematic, fixed the schematic, fixed the PCB (thankfully it was easy), and then put the new PCB into the CAD model. Later, I plan on fixing my files and then finishing up the code, and then I should be done! I’ve attached a picture of the fixed schematic to this devlog.
Shipping time! Yeah, it’s time to finally ship my project, after waiting for the form to be fixed, and learning that I actually need to post more devlogs in order to actually count my hours, I’m about to fill out the submission form and ship my project :). Its been quite a ride.
Ships:
I made a hackpad! I have decided to call my hackpad a Twistpad, since it has two rotary encoders. The Twistpad features a 3x3 grid of 9 keys, and two dials which are coded for volume and video playback. The 9 keys are mapped to F13-F21, meaning you can map it to anything you desire yourself quickly with no hassle. The case features a nice conical USB cutout to help guide the cable in, and there’s a wonderful little window in the top to peer inside at the brain of the device, the seeeduino!...
|
1793130839.7357664
|
1793217239.7357664
|
|
16785
|
My very own WebOS by @SpacerCoder | Stardance
|
SpacerCoder
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T11:06:04Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a almost ‘real’ OS, and the coolest part in my opinion is that you can customize it how you like. There’s different apps and other cool bits that really bring it together. The challenging part in my opinion was creating the different apps within the bottom dock area. Another cool feature is the ‘loading’ screen where when you first open the website ‘os’ theres a terminal loading screen type of interface, which I am really happy with. To use, simply click on ‘try project’ wait for the interface to load, and you can then try the notes app, and other apps in the dock area. Have fun!", "repo": "https://github.com/SwiftProGrammer178611/StarDanceWebOS", "demo": "https://star-dance-web-os.vercel.app/"}]...
|
[{"post_id": 22580, "ts": "202 [{"post_id": 22580, "ts": "2026-07-05T03:23:01Z", "hours": 0.2594, "text": "added some more apps, like terminal and notes"}, {"post_id": 22486, "ts": "2026-07-04T23:36:37Z", "hours": 0.9117, "text": "trying to add a bottom navigation system!"}, {"post_id": 7375, "ts": "2026-06-12T09:31:41Z", "hours": 0.3564, "text": "Started working on the OS! Let’s see where this takes us"}]...
|
Title: My very own WebOS by @SpacerCoder | Stardan Title: My very own WebOS by @SpacerCoder | Stardance
Devlogs:
Started working on the OS! Let’s see where this takes us
trying to add a bottom navigation system!
added some more apps, like terminal and notes
Ships:
I made a almost ‘real’ OS, and the coolest part in my opinion is that you can customize it how you like. There’s different apps and other cool bits that really bring it together. The challenging part in my opinion was creating the different apps within the bottom dock area. Another cool feature is the ‘loading’ screen where when you first open the website ‘os’ theres a terminal loading screen type of interface, which I am really happy with. To use, simply click on ‘try project’ wait for the interface to load, and you can then try the notes app, and other apps in the dock area. Have fun!...
|
1793245985.6700077
|
1793332385.6700077
|
|
16821
|
CaffeineOS_lite by @otzpt | Stardance
|
otzpt
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T20:31:21Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created CaffeineOS Lite, a WebOS that runs entirely in the browser. It features draggable windows, a functional terminal with commands like apt install, neofetch, and sudo. There’s also a file explorer with folder navigation and image preview, a login screen, a welcome window at startup, and a Start Menu with a Shut Down button. The design follows a caffeine theme and uses a dark Catppuccin color palette. Try it out; no password is needed. Just type any username and press Enter!", "repo": "https://github.com/otzpt/WebOS1", "demo": "https://webos1-otzpt.netlify.app/"}]...
|
[{"post_id": 14280, "ts": "202 [{"post_id": 14280, "ts": "2026-06-23T10:12:39Z", "hours": 2.2986, "text": "CaffeineOS Lite, Devlog #3 Welcome Screen & Start Menu With the core OS functioning, I focused on two features that enhance its completeness: a proper welcome screen and a useful Start Menu. The welcome screen opens automatically after login as a draggable window, similar to every other window in the OS. It features a coffee icon, the CaffeineOS Lite name, and a brief description. This small addition makes the first impression feel more intentional rather than just dropping the user straight onto the desktop. The Start Menu required more thought. It slides up from the taskbar when you click the Start button and closes when you click anywhere outside of it. Inside, it has an apps list on the left and a system panel on the right with a Shut Down button, which takes you back to the login screen, resetting the session. The entire design includes a frosted glass effect using backdrop-filter: blur, matching the taskbar’s style. Both features prompted me to consider state more carefully. I ensured that the Start Menu closes at the right moment and that the welcome window only opens once per session, not on every login attempt."}, {"post_id": 8914, "ts": "2026-06-14T20:49:44Z", "hours": 0.8917, "text": "Devlog 2 — File explorer with folder navigation and image viewer Added a functional “My Documents” app with a real file explorer. The root shows three folders (Wallpapers, Icons, Projects), and double-clicking navigates into them with a “..” button to go back. Double-clicking an image opens a draggable mini-window with the image preview, centered on screen , reusing the same drag/z-index logic from the main windows. Double-clicking the WebOS1 project entry opens its GitHub repo in a new tab. Under the hood, the file system is just a JS object (fileSystem) mapping folder names to arrays of items, which made it easy to add new folders/files without touching the rendering logic."}, {"post_id": 7711, "ts": "2026-06-12T21:28:35Z", "hours": 2.6731, "text": "Devlog 1 — Draggable windows, terminal, and login screen Built the main desktop environment for WebOS1. Windows can now be dragged around the desktop and bring themselves to the front when clicked (z-index). Added a custom login screen that asks for a username on startup, no passwords, just stored in memory for the session. The big feature today was a working terminal app with a real shell-like prompt (username@webos:~$). It supports help, whoami, ls, pwd, clear, sudo (denial message for fun), apt install with animated fake install output, and neofetch showing system info. Also replaced the default wallpaper with the classic Windows XP Bliss background and added custom SVG/icon assets for the desktop shortcuts."}]...
|
Title: CaffeineOS_lite by @otzpt | Stardance
Devl Title: CaffeineOS_lite by @otzpt | Stardance
Devlogs:
Devlog 1 — Draggable windows, terminal, and login screen Built the main desktop environment for WebOS1. Windows can now be dragged around the desktop and bring themselves to the front when clicked (z-index). Added a custom login screen that asks for a username on startup, no passwords, just stored in memory for the session. The big feature today was a working terminal app with a real shell-like prompt (username@webos:~$). It supports help, whoami, ls, pwd, clear, sudo (denial message for fun), apt install with animated fake install output, and neofetch showing system info. Also replaced the default wallpaper with the classic Windows XP Bliss background and added custom SVG/icon assets for the desktop shortcuts.
Devlog 2 — File explorer with folder navigation and image viewer Added a functional “My Documents” app with a real file explorer. The root shows three folders (Wallpapers, Icons, Projects), and double-clicking navigates into them with a “..” button to go back. Double-clicking an image opens a draggable mini-window with the image preview, centered on screen , reusing the same drag/z-index logic from the main windows. Double-clicking the WebOS1 project entry opens its GitHub repo in a new tab. Under the hood, the file system is just a JS object (fileSystem) mapping folder names to arrays of items, which made it easy to add new folders/files without touching the rendering logic.
CaffeineOS Lite, Devlog #3 Welcome Screen & Start Menu With the core OS functioning, I focused on two features that enhance its completeness: a proper welcome screen and a useful Start Menu. The welcome screen opens automatically after login as a draggable window, similar to every other window in the OS. It features a coffee icon, the CaffeineOS Lite name, and a brief description. This small addition makes the first impression feel more intentional rather than just dropping the user straight onto the desktop. The Start Menu required more thought. It slides up from the taskbar when you click the Start button and closes when you click anywhere outside of it. Inside, it has an apps list on the left and a system panel on the right with a Shut Down button, which takes you back to the login screen, resetting the session. The entire design includes a frosted glass effect using backdrop-filter: blur, matching the taskbar’s style. Both features prompted me to consider state more carefully. I ensured that the Start Menu closes at the right moment and that the welcome window only opens once per session, not on every login attempt.
Ships:
I created CaffeineOS Lite, a WebOS that runs entirely in the browser. It features draggable windows, a functional terminal with commands like apt install, neofetch, and sudo. There’s also a file explorer with folder navigation and image preview, a login screen, a welcome window at startup, and a Start Menu with a Shut Down button. The design follows a caffeine theme and uses a dark Catppuccin color palette. Try it out; no password is needed. Just type any username and press Enter!...
|
1793130580.6964514
|
1793216980.6964514
|
|
16826
|
Habit Tracker by @wingnovel | Stardance
|
wingnovel
|
1
|
22.0
|
38
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T17:35:22Z", "hours": 22.0, "multiplier": 2.19, "payout": 38, "blessing": "neutral", "text": "This project is a Habit tracker that helps you effectively understand your routine with smart insights to help you stay consistent in your habit formation. The challenging part in this project was figuring out how to make the UI look right. I struggle a lot with aesthetic choices. I am proud of the fact that all the code for this project was written by me even if to make the compiling more efficient i used AI to clump up my code into reusable functions for the repeated code scripts. All the requirements to run this program is install the exe file from the github repo.", "repo": "https://github.com/raghav03102008/habit_tracker", "demo": "https://github.com/raghav03102008/habit_tracker/releases/tag/v1"}]...
|
[{"post_id": 23594, "ts": "202 [{"post_id": 23594, "ts": "2026-07-06T17:23:22Z", "hours": 7.5383, "text": "In this session I fully completed the interface ready to ship. I have added all the pages. And ensured that all the pages store the data in the json file generated upon first launch of the app correctly."}, {"post_id": 7620, "ts": "2026-06-12T18:56:31Z", "hours": 14.7333, "text": "Building the sidebar and the dashboard with the right amount of padding and setting up the initial database. Deciding the colors and set up"}]...
|
Title: Habit Tracker by @wingnovel | Stardance
De Title: Habit Tracker by @wingnovel | Stardance
Devlogs:
Building the sidebar and the dashboard with the right amount of padding and setting up the initial database. Deciding the colors and set up
In this session I fully completed the interface ready to ship. I have added all the pages. And ensured that all the pages store the data in the json file generated upon first launch of the app correctly.
Ships:
This project is a Habit tracker that helps you effectively understand your routine with smart insights to help you stay consistent in your habit formation. The challenging part in this project was figuring out how to make the UI look right. I struggle a lot with aesthetic choices. I am proud of the fact that all the code for this project was written by me even if to make the compiling more efficient i used AI to clump up my code into reusable functions for the repeated code scripts. All the requirements to run this program is install the exe file from the github repo....
|
1793238567.2644033
|
1793324967.2644033
|
|
16837
|
Grail-Tracker by @helicaptain | Stardance
|
helicaptain
|
1
|
2.35
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T04:21:14Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "🛠️ What did you make? I built Grail Tracker, which is a fast mobile app for tracking and cataloging high-value collectibles or milestones (your “grails”). Spreadsheets are super annoying to look at, so I made a clean card layout where you can see the item name, description, rarity tier, and timestamp all at a glance. It also saves everything directly to your device’s memory, so your list doesn’t disappear when you close the app. 🧠 What was challenging? The hardest part was definitely getting the local saving feature to work right without breaking the app’s layout. At first, when I tried passing data around, the UI completely glitched out—buttons were overlapping and clipping behind other elements on the screen. I had to figure out how to make async storage and JSON payloads load up properly on startup, while fixing a bunch of messy CSS flexbox rules so the screen scales normally. 🏆 What are you proud of? I’m proud of how I used a “vibe coding” setup with Cursor, Claude, and v0 to build this. I acted as the main builder and designer—I chose the style, put all the separate code pieces together, and handled the whole GitHub setup—but I used AI like an assistant to quickly generate the basic layouts and help me look up weird syntax errors. Doing it this way let me ship a fully working app with saving features way faster than doing it completely from scratch. 🧪 What should people know so they can test the project? Since the app saves everything locally on your device, the best way to see how it works is to watch the short video demo I attached! If you want to check out the actual files or see my hour-by-hour progress, you can look through the public GitHub repo.", "repo": "https://github.com/helicaptain827-alt/grail-tracker", "demo": "https://youtube.com/shorts/8JImJ8J0FfE"}]...
|
[{"post_id": 7574, "ts": "2026 [{"post_id": 7574, "ts": "2026-06-12T17:40:46Z", "hours": 0.3519, "text": "I made an app called Grail-Tracker. Where you can insert clothing items from your wardrobe and it will generate you outfits based on your preferences of color palettes, vibes, etc. Here is a Vercel link to my project: https://grail-tracker.vercel.app/ . There is no api or backend installed yet so there won’t be any computing, just a frontend."}, {"post_id": 6997, "ts": "2026-06-11T19:03:48Z", "hours": 1.8431, "text": "Grail-Tracker App (AI Clothing App)"}]...
|
Title: Grail-Tracker by @helicaptain | Stardance
Title: Grail-Tracker by @helicaptain | Stardance
Devlogs:
Grail-Tracker App (AI Clothing App)
I made an app called Grail-Tracker. Where you can insert clothing items from your wardrobe and it will generate you outfits based on your preferences of color palettes, vibes, etc. Here is a Vercel link to my project: https://grail-tracker.vercel.app/ . There is no api or backend installed yet so there won’t be any computing, just a frontend.
Ships:
🛠️ What did you make? I built Grail Tracker, which is a fast mobile app for tracking and cataloging high-value collectibles or milestones (your “grails”). Spreadsheets are super annoying to look at, so I made a clean card layout where you can see the item name, description, rarity tier, and timestamp all at a glance. It also saves everything directly to your device’s memory, so your list doesn’t disappear when you close the app. 🧠 What was challenging? The hardest part was definitely getting the local saving feature to work right without breaking the app’s layout. At first, when I tried passing data around, the UI completely glitched out—buttons were overlapping and clipping behind other elements on the screen. I had to figure out how to make async storage and JSON payloads load up properly on startup, while fixing a bunch of messy CSS flexbox rules so the screen scales normally. 🏆 What are you proud of? I’m proud of how I used a “vibe coding” setup with Cursor, Claude, and v0 to build this. I acted as the main builder and designer—I chose the style, put all the separate code pieces together, and handled the whole GitHub setup—but I used AI like an assistant to quickly generate the basic layouts and help me look up weird syntax errors. Doing it this way let me ship a fully working app with saving features way faster than doing it completely from scratch. 🧪 What should people know so they can test the project? Since the app saves everything locally on your device, the best way to see how it works is to watch the short video demo I attached! If you want to check out the actual files or see my hour-by-hour progress, you can look through the public GitHub repo....
|
1793138160.3509355
|
1793224560.3509355
|
|
16851
|
DukeOS by @Lauren_hackalicious | Stardance
|
Lauren_hackalicious
|
1
|
19.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T22:19:40Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I initially wanted to make the OS theme centered around the jazz artist, Laufey. It was going great at first, but something felt off. In this first iteration, I kept running into bugs and errors that I couldn’t work out. I seized this as an opportunity to scrap the web-OS and center the theme on Frutiger. Frutiger is a design aesthetic that dominated technology, branding, and user interfaces from roughly 2004 to 2013. The buttons are prominently glossy (shiny almost), the backgrounds are lively and lush, and often have blue skies. I preferred this design because it was bright and vibrant, unlike my previous design choice. In this second iteration of the web-OS, I took on challenges with pride and care because I wanted this to work; I wanted to see my vision come to life. As a result, it has. In the first iteration, I couldn’t figure out how to move the handle or figure out how I wanted to design it. By the second iteration, I could! To close the tabs, click the “X” button. The maximize and minimize buttons don’t work, but are simply there as decoration. In my second version of my web-based OS, I plan to add a function to those buttons. This repository uses HTML, CSS, and JavaScript for functionality.", "repo": "https://github.com/example0d1n/DukeOS", "demo": "https://example0d1n.github.io/DukeOS/"}]...
|
[{"post_id": 11612, "ts": "202 [{"post_id": 11612, "ts": "2026-06-18T22:12:27Z", "hours": 2.8869, "text": "FINAL devlog | 1. I created a fully functioning weather app using JavaScript. This took almost 3 hours because I’m new to JavaScript, so I followed a tutorial by BroCode, who is a coding tutorial creator. He doesn’t just make the program; he explains what each line of code does and how it connects to the HTML/CSS file. 2. The weather app and notes app icons are draggable. 3. The calculator app is not draggable for some reason that I cannot figure out. The weather app window is not draggable for the same reason. In my second version of my web-based OS, I plan to have all my windows draggable."}, {"post_id": 11012, "ts": "2026-06-18T01:18:15Z", "hours": 1.6011, "text": "UPDATE - I replaced the music icon with a weather app icon because I plan on creating a music player as a separate JavaScript project - I updated the main window to include my GitHub profile and READ.ME - Everything is now draggable - I added a doc section to the bottom of my screen, and I plan to make them function similar to the apps in the main section of the OS"}, {"post_id": 10884, "ts": "2026-06-17T20:52:28Z", "hours": 2.8267, "text": "i added the calculator app to the webOS! This took almost 3 hours to do because of a lot of bug fixes ,and asking copilot for help, which ended up making things worse. I had to code the calculator myself in a seperate CSS file, so all the styling woulndn’t be in one large file. I can move the calculator window around, but I can’t close it due to some overlapping JS and CSS names.. i think. the next update willl have this fixed! I also learned that I can embed a script file into a specific div element.I used AI to program the onclick +1 on the z-index on the window. this essentially means when a person clicks a window, it is on the top layer."}, {"post_id": 9554, "ts": "2026-06-15T22:39:36Z", "hours": 1.7125, "text": "smallllll update I implemented the Notes window and made it closable and draggable. I’m unfamiliar with JavaScript, which is the magic that makes everything on my website function, so I’ve been struggling to follow the WebOS jam. I’m going to look up some YouTube videos about JavaScript to see if that’ll help me out. Any progress is good progress. This devlog documents the 12th hour I’ve worked on this project!! crazy to think about."}, {"post_id": 9066, "ts": "2026-06-15T04:19:40Z", "hours": 1.5697, "text": "GREAT progress today! I got the welcome window up and completely working, and both of my handles are draggable. This is a huge step up from the first iteration of my webOS, as I am happy with the current results! I also added background audio to the page, but I want it to play on loop without the audio controls. That is something I will have to figure out in the next devlog. The welcome window is closable :D"}, {"post_id": 8869, "ts": "2026-06-14T19:22:16Z", "hours": 1.705, "text": "I updated the top bar!! My journey so far with my DukeOS with the Frutiger customization has been riveting! I made the top bar fit the current aesthetic and added a small icon at the beginning of the section to make the OS feel more like an OS. I’m still struggling with getting the handle to work :/."}, {"post_id": 8516, "ts": "2026-06-14T05:05:44Z", "hours": 0.9647, "text": "Quick upd before I turn in for the night!! I fixed the CSS error that was occurring at the top of the main window on my OS! Turns out I just had to utilize a div I completely forgot about (whoops). I just began working on the top menu of the webOS. I’ll edit the style to match the Frutiger aesthetic I’m going for."}, {"post_id": 8449, "ts": "2026-06-14T01:27:50Z", "hours": 3.1067, "text": "COMPLETE STYLE REVAMP: Frutiger Aero! I thought long and hard about my recent struggle with my original OS and realized I wasn’t quite happy where I was. There were bugs I couldn’t quite fix, so I figured the best way to fix them all was by starting from scratch. By doing this, I can catch any coding errors I missed the first time around and learn from them! I hope to end my first webOS happy and satisfied. As you can see, my tab isn’t complete, and that is due to some CSS styling I can’t quite figure out yet. I will post a devlog with it fixed and the main window complete!"}, {"post_id": 7567, "ts": "2026-06-12T17:28:28Z", "hours": 0.9061, "text": "The handle drag still doesn’t work for some reason. I looked over the code a few times, making sure the div id has the str “header” included, but it doesn’t work. I decided to ignore the problem for now and continued to customize the handle to look like Laufey’s “A Matter of Time: Final Hour”. I added a labeled figcaption with that title. I really do want to get the handle draggable to really make the website feel like an OS, but I’m not familiar with JavaScript. If anyone could help me, I would greatly appreciate it! I linked my GitHub repository below https://github.com/example0d1n/DukeOS"}, {"post_id": 7266, "ts": "2026-06-12T03:44:27Z", "hours": 1.3033, "text": "Progress on my WebOS mission! I decided to sidequest from my main web project since I was getting pretty stumped on the form data collection. Going into this, I thought it would be simple, which it has been, except for the whole JavaScript portion. I am extremely unfamiliar with the language, so copy&pasting from the Jam and hoping the code worked (with the necessary edits) was my best bet. Whilst I am reading through the explanation from the Code Jam, I can’t figure out what went wrong in my “handle” element. My welcome window works fine as displayed in the video, but the handle, the isolated picture of Laufey, doesn’t. The image is either selected by my mouse or has a ghost drag effect to it. I plan to fix it by the next develog."}, {"post_id": 7054, "ts": "2026-06-11T20:24:53Z", "hours": 0.6961, "text": "Started working on the webOS project! I just inserted the window on the start screen :D"}]...
|
Title: DukeOS by @Lauren_hackalicious | Stardance
Title: DukeOS by @Lauren_hackalicious | Stardance
Devlogs:
Started working on the webOS project! I just inserted the window on the start screen :D
Progress on my WebOS mission! I decided to sidequest from my main web project since I was getting pretty stumped on the form data collection. Going into this, I thought it would be simple, which it has been, except for the whole JavaScript portion. I am extremely unfamiliar with the language, so copy&pasting from the Jam and hoping the code worked (with the necessary edits) was my best bet. Whilst I am reading through the explanation from the Code Jam, I can’t figure out what went wrong in my “handle” element. My welcome window works fine as displayed in the video, but the handle, the isolated picture of Laufey, doesn’t. The image is either selected by my mouse or has a ghost drag effect to it. I plan to fix it by the next develog.
The handle drag still doesn’t work for some reason. I looked over the code a few times, making sure the div id has the str “header” included, but it doesn’t work. I decided to ignore the problem for now and continued to customize the handle to look like Laufey’s “A Matter of Time: Final Hour”. I added a labeled figcaption with that title. I really do want to get the handle draggable to really make the website feel like an OS, but I’m not familiar with JavaScript. If anyone could help me, I would greatly appreciate it! I linked my GitHub repository below https://github.com/example0d1n/DukeOS
COMPLETE STYLE REVAMP: Frutiger Aero! I thought long and hard about my recent struggle with my original OS and realized I wasn’t quite happy where I was. There were bugs I couldn’t quite fix, so I figured the best way to fix them all was by starting from scratch. By doing this, I can catch any coding errors I missed the first time around and learn from them! I hope to end my first webOS happy and satisfied. As you can see, my tab isn’t complete, and that is due to some CSS styling I can’t quite figure out yet. I will post a devlog with it fixed and the main window complete!
Quick upd before I turn in for the night!! I fixed the CSS error that was occurring at the top of the main window on my OS! Turns out I just had to utilize a div I completely forgot about (whoops). I just began working on the top menu of the webOS. I’ll edit the style to match the Frutiger aesthetic I’m going for.
I updated the top bar!! My journey so far with my DukeOS with the Frutiger customization has been riveting! I made the top bar fit the current aesthetic and added a small icon at the beginning of the section to make the OS feel more like an OS. I’m still struggling with getting the handle to work :/.
GREAT progress today! I got the welcome window up and completely working, and both of my handles are draggable. This is a huge step up from the first iteration of my webOS, as I am happy with the current results! I also added background audio to the page, but I want it to play on loop without the audio controls. That is something I will have to figure out in the next devlog. The welcome window is closable :D
smallllll update I implemented the Notes window and made it closable and draggable. I’m unfamiliar with JavaScript, which is the magic that makes everything on my website function, so I’ve been struggling to follow the WebOS jam. I’m going to look up some YouTube videos about JavaScript to see if that’ll help me out. Any progress is good progress. This devlog documents the 12th hour I’ve worked on this project!! crazy to think about.
i added the calculator app to the webOS! This took almost 3 hours to do because of a lot of bug fixes ,and asking copilot for help, which ended up making things worse. I had to code the calculator myself in a seperate CSS file, so all the styling woulndn’t be in one large file. I can move the calculator window around, but I can’t close it due to some overlapping JS and CSS names.. i think. the next update willl have this fixed! I also learned that I can embed a script file into a specific div element.I used AI to program the onclick +1 on the z-index on the window. this essentially means when a person clicks a window, it is on the top layer.
UPDATE - I replaced the music icon with a weather app icon because I plan on creating a music player as a separate JavaScript project - I updated the main window to include my GitHub profile and READ.ME - Everything is now draggable - I added a doc section to the bottom of my screen, and I plan to make them function similar to the apps in the main section of the OS
FINAL devlog | 1. I created a fully functioning weather app using JavaScript. This took almost 3 hours because I’m new to JavaScript, so I followed a tutorial by BroCode, who is a coding tutorial creator. He doesn’t just make the program; he explains what each line of code does and how it connects to the HTML/CSS file. 2. The weather app and notes app icons are draggable. 3. The calculator app is not draggable for some reason that I cannot figure out. The weather app window is not draggable for the same reason. In my second version of my web-based OS, I plan to have all my windows draggable.
Ships:
I initially wanted to make the OS theme centered around the jazz artist, Laufey. It was going great at first, but something felt off. In this first iteration, I kept running into bugs and errors that I couldn’t work out. I seized this as an opportunity to scrap the web-OS and center the theme on Frutiger. Frutiger is a design aesthetic that dominated technology, branding, and user interfaces from roughly 2004 to 2013. The buttons are prominently glossy (shiny almost), the backgrounds are lively and lush, and often have blue skies. I preferred this design because it was bright and vibrant, unlike my previous design choice. In this second iteration of the web-OS, I took on challenges with pride and care because I wanted this to work; I wanted to see my vision come to life. As a result, it has. In the first iteration, I couldn’t figure out how to move the handle or figure out how I wanted to design it. By the second iteration, I could! To close the tabs, click the “X” button. The maximize and minimize buttons don’t work, but are simply there as decoration. In my second version of my web-based OS, I plan to add a function to those buttons. This repository uses HTML, CSS, and JavaScript for functionality....
|
1793141243.9959302
|
1793227643.9959302
|
|
16856
|
StudyFlow by @anshnadger | Stardance
|
anshnadger
|
1
|
9.64
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T19:49:19Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a web app called StudyFlow that helps users manage tasks and notes. It includes login accounts, task tracking with priorities and due dates, and a notes system with basic text formatting. The hardest parts were fixing Flask backend bugs, setting up user login so each user’s data is separate, and making task sorting and the rich-text editor work properly. I’m proud that I built a full working full-stack app with authentication, database storage, and useful features like progress tracking and formatted notes. To test it, users should sign up, log in, then add tasks or notes; tasks can be marked complete by clicking them, and notes support formatting like bold text and lists.", "repo": "https://github.com/aan-2012/studyflow-webapp/", "demo": "https://studyflow-webapp.onrender.com/"}]...
|
[{"post_id": 24892, "ts": "202 [{"post_id": 24892, "ts": "2026-07-08T18:56:09Z", "hours": 0.5131, "text": "Today I focused on making StudyFlow feel more like a real website by improving the overall design and user experience. I started by upgrading the UI theme. I replaced the basic styling with a more modern look by adding a cleaner background, glass-style cards, smoother animations, better spacing, and a more professional color palette. I also updated the navigation bar and homepage styling to make the app feel more polished and consistent. After improving the overall theme, I focused on making sure the dashboard stayed clean and not overloaded with unnecessary information. Instead of adding too many features, I worked on improving the existing sections so the homepage feels organized and easy to use.I also upgraded the dashboard statistics section. The old stats were simple numbers, so I redesigned them into cleaner cards with icons, better layouts, and smoother hover effects. This makes it easier for users to quickly understand their progress when they open the app. Overall, today’s update was mainly about turning StudyFlow from a simple functional app into a more professional-looking productivity platform. The focus was improving the experience, keeping the design clean, and making the website feel more like a real application."}, {"post_id": 23632, "ts": "2026-07-06T18:23:54Z", "hours": 1.1317, "text": "Today I spent a lot of time improving my StudyFlow web app and basically pushing it from a “works but simple” project into something that actually feels like a real website. I started by fixing a bunch of core issues in the login and signup system. At first, there were some bugs where routes weren’t returning properly and authentication wasn’t behaving consistently, but after going through the Flask logic and sessions, I got login, signup, and logout fully working with hashed passwords and a proper users table. After that, I worked on improving the task system UI. One issue I ran into was that completed tasks didn’t clearly show as done anymore, so I fixed the styling so strikethrough and visual feedback properly show when a task is completed. I also made sure the edit and delete buttons stayed aligned correctly in the task list, because at one point they were dropping under the task text and breaking the layout. Then I moved into the notes editor, which was honestly the trickiest part of the UI. I added formatting tools like bold, italic, underline, and bullet/numbered lists using a content-editable editor. That part took a bit of debugging because the list formatting and syncing with the hidden input wasn’t behaving properly, but I got it working so notes now save properly with formatting intact. A big chunk of the day was also spent on the overall design refresh. I upgraded the entire UI theme to look much more modern, adding a gradient background, blurred “glass” style navbar and cards, smoother hover animations, and better spacing and typography using a new font (Poppins). The goal was to make it feel less like a school project and more like a real productivity app you’d actually use. I also improved the homepage dashboard so it feels more like a proper landing page, with a hero section, quick navigation buttons, and stats cards showing progress and completed tasks. I even added a background design with soft glowing shapes to make it feel less flat. Overall, today was mostly about fixing bugs while also slowly upgrading the entire look and feel of the app without breaking existing features. The end result is a much cleaner, more modern StudyFlow that still keeps all the original functionality but now actually feels polished."}, {"post_id": 21672, "ts": "2026-07-03T19:12:48Z", "hours": 3.7686, "text": "I am working on a website that helps people to keep track of their tasks, take notes with ease, and more! No more stressing overnight to cram for your finals, study with the flow now!"}, {"post_id": 15920, "ts": "2026-06-25T21:24:46Z", "hours": 4.4872, "text": "I am working on a website that helps people to keep track of their tasks, take notes with ease, and more! No more stressing overnight to cram for your finals, study with the flow now!"}]...
|
Title: StudyFlow by @anshnadger | Stardance
Devlo Title: StudyFlow by @anshnadger | Stardance
Devlogs:
I am working on a website that helps people to keep track of their tasks, take notes with ease, and more! No more stressing overnight to cram for your finals, study with the flow now!
I am working on a website that helps people to keep track of their tasks, take notes with ease, and more! No more stressing overnight to cram for your finals, study with the flow now!
Today I spent a lot of time improving my StudyFlow web app and basically pushing it from a “works but simple” project into something that actually feels like a real website. I started by fixing a bunch of core issues in the login and signup system. At first, there were some bugs where routes weren’t returning properly and authentication wasn’t behaving consistently, but after going through the Flask logic and sessions, I got login, signup, and logout fully working with hashed passwords and a proper users table. After that, I worked on improving the task system UI. One issue I ran into was that completed tasks didn’t clearly show as done anymore, so I fixed the styling so strikethrough and visual feedback properly show when a task is completed. I also made sure the edit and delete buttons stayed aligned correctly in the task list, because at one point they were dropping under the task text and breaking the layout. Then I moved into the notes editor, which was honestly the trickiest part of the UI. I added formatting tools like bold, italic, underline, and bullet/numbered lists using a content-editable editor. That part took a bit of debugging because the list formatting and syncing with the hidden input wasn’t behaving properly, but I got it working so notes now save properly with formatting intact. A big chunk of the day was also spent on the overall design refresh. I upgraded the entire UI theme to look much more modern, adding a gradient background, blurred “glass” style navbar and cards, smoother hover animations, and better spacing and typography using a new font (Poppins). The goal was to make it feel less like a school project and more like a real productivity app you’d actually use. I also improved the homepage dashboard so it feels more like a proper landing page, with a hero section, quick navigation buttons, and stats cards showing progress and completed tasks. I even added a background design with soft glowing shapes to make it feel less flat. Overall, today was mostly about fixing bugs while also slowly upgrading the entire look and feel of the app without breaking existing features. The end result is a much cleaner, more modern StudyFlow that still keeps all the original functionality but now actually feels polished.
Today I focused on making StudyFlow feel more like a real website by improving the overall design and user experience. I started by upgrading the UI theme. I replaced the basic styling with a more modern look by adding a cleaner background, glass-style cards, smoother animations, better spacing, and a more professional color palette. I also updated the navigation bar and homepage styling to make the app feel more polished and consistent. After improving the overall theme, I focused on making sure the dashboard stayed clean and not overloaded with unnecessary information. Instead of adding too many features, I worked on improving the existing sections so the homepage feels organized and easy to use.I also upgraded the dashboard statistics section. The old stats were simple numbers, so I redesigned them into cleaner cards with icons, better layouts, and smoother hover effects. This makes it easier for users to quickly understand their progress when they open the app. Overall, today’s update was mainly about turning StudyFlow from a simple functional app into a more professional-looking productivity platform. The focus was improving the experience, keeping the design clean, and making the website feel more like a real application.
Ships:
I made a web app called StudyFlow that helps users manage tasks and notes. It includes login accounts, task tracking with priorities and due dates, and a notes system with basic text formatting. The hardest parts were fixing Flask backend bugs, setting up user login so each user’s data is separate, and making task sorting and the rich-text editor work properly. I’m proud that I built a full working full-stack app with authentication, database storage, and useful features like progress tracking and formatted notes. To test it, users should sign up, log in, then add tasks or notes; tasks can be marked complete by clicking them, and notes support formatting like bold text and lists....
|
1793246013.249622
|
1793332413.249622
|
|
16864
|
ALOS by @BasGame1 | Stardance
|
BasGame1
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T19:48:25Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ALOS its a try into booting a leaked unrelease android based OS in qemu. After a few weeks (started the project before counting the time) I managed to make a stable boot and have video output. The only downsides of this project are the slow boot time and RILd ( wifi, bt..) not working (that hopefully can be both fixed). I hope you enjoy it!", "repo": "https://github.com/BasGame1/AluminiumOS", "demo": "https://raw.githubusercontent.com/BasGame1/AluminiumOS/refs/heads/DEV/install.sh"}]...
|
[{"post_id": 20237, "ts": "202 [{"post_id": 20237, "ts": "2026-07-01T19:43:12Z", "hours": 0.5097, "text": "Added script to install the project, check if git its installed and use the package manager to install qemu and even can call the init script to execute everything in one script so it easier to interact with it"}, {"post_id": 19971, "ts": "2026-07-01T13:17:41Z", "hours": 0.6208, "text": "Video Output fixed. After a few changes with qemu gtk (and 700 seconds of boot) it finally boots with an image"}, {"post_id": 7472, "ts": "2026-06-12T13:48:03Z", "hours": 1.705, "text": "Video output and RO errors After 190 commits, i have make ALOS image boot in terminal, but surface slinger crashes due to OpenGL configuration and RO errors on boot The cause of this may be the ramdisk changing system params"}]...
|
Title: ALOS by @BasGame1 | Stardance
Devlogs:
Vid Title: ALOS by @BasGame1 | Stardance
Devlogs:
Video output and RO errors After 190 commits, i have make ALOS image boot in terminal, but surface slinger crashes due to OpenGL configuration and RO errors on boot The cause of this may be the ramdisk changing system params
Video Output fixed. After a few changes with qemu gtk (and 700 seconds of boot) it finally boots with an image
Added script to install the project, check if git its installed and use the package manager to install qemu and even can call the init script to execute everything in one script so it easier to interact with it
Ships:
ALOS its a try into booting a leaked unrelease android based OS in qemu. After a few weeks (started the project before counting the time) I managed to make a stable boot and have video output. The only downsides of this project are the slow boot time and RILd ( wifi, bt..) not working (that hopefully can be both fixed). I hope you enjoy it!...
|
1793263909.026229
|
1793350309.026229
|
|
16865
|
silly-os by @meowllory22 | Stardance
|
meowllory22
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T23:40:59Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "my webos is ready to go to the world!!! im really proud of all ive figured out and i really enjoy how it turned out. mess around with it and check out my dope cookie recipe and the cute cat friend and everything!! :)", "repo": "https://github.com/meowllory22/my-os-", "demo": "https://meowllory22.github.io/my-os-/"}]...
|
[{"post_id": 20382, "ts": "202 [{"post_id": 20382, "ts": "2026-07-01T23:24:55Z", "hours": 0.8892, "text": "i added a music app with some fun songs!!! im really enjoying how its turning out"}, {"post_id": 19811, "ts": "2026-07-01T06:20:25Z", "hours": 6.8186, "text": "i took a bit of a break but i added a lot more silly things :) (the cat squeaks when u click him!!!)"}, {"post_id": 9114, "ts": "2026-06-15T07:47:16Z", "hours": 2.2167, "text": "got the window working!! i changed a lot of the format but the actual content is still the same. i like how silly it looks and im gonna add a lot more stupid stuff!!!!!"}, {"post_id": 7807, "ts": "2026-06-13T00:56:03Z", "hours": 1.5825, "text": "im remembering how to do html and made this so far ! im hopinh to add a music player and some more fun stuff but this is all i got for now lol"}]...
|
Title: silly-os by @meowllory22 | Stardance
Devlo Title: silly-os by @meowllory22 | Stardance
Devlogs:
im remembering how to do html and made this so far ! im hopinh to add a music player and some more fun stuff but this is all i got for now lol
got the window working!! i changed a lot of the format but the actual content is still the same. i like how silly it looks and im gonna add a lot more stupid stuff!!!!!
i took a bit of a break but i added a lot more silly things :) (the cat squeaks when u click him!!!)
i added a music app with some fun songs!!! im really enjoying how its turning out
Ships:
my webos is ready to go to the world!!! im really proud of all ive figured out and i really enjoy how it turned out. mess around with it and check out my dope cookie recipe and the cute cat friend and everything!! :)...
|
1793202484.5198095
|
1793288884.5198095
|
|
16872
|
TCG Tycoon Slack Bot by @Veeraj | Stardance
|
Veeraj
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T17:20:23Z", "hours": 2.0, "multiplier": 1.55, "payout": 3, "blessing": "neutral", "text": "I made a slackbot that allows you to play a tycoon game with the use of one command. I found a lot of things challenging as it was my first time. The main thing was understanding terminal commands and understanding how to install the software. It was confusing at first but as I did more I started to get the hang of it. I am really proud of the tournament feature and hope you enjoy it as much as I did.", "repo": "https://github.com/Octolord12/waddle-tcg-tycoon", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BAWSLDY83"}]...
|
[{"post_id": 8171, "ts": "2026 [{"post_id": 8171, "ts": "2026-06-13T16:50:02Z", "hours": 1.7956, "text": "Version 1.2 added features such as gradable cards, player to player trading and a highly volatile tournament system. The screenshot is the grading system."}]...
|
Title: TCG Tycoon Slack Bot by @Veeraj | Stardance Title: TCG Tycoon Slack Bot by @Veeraj | Stardance
Devlogs:
Version 1.2 added features such as gradable cards, player to player trading and a highly volatile tournament system. The screenshot is the grading system.
Ships:
I made a slackbot that allows you to play a tycoon game with the use of one command. I found a lot of things challenging as it was my first time. The main thing was understanding terminal commands and understanding how to install the software. It was confusing at first but as I did more I started to get the hang of it. I am really proud of the tournament feature and hope you enjoy it as much as I did....
|
1793127123.2480822
|
1793213523.2480822
|
|
16876
|
EmberCrow OS by @ghita | Stardance
|
ghita
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T21:45:09Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "what i made embercrow os - a hacker themed desktop that runs in the browser, no install. retro boot sequence, draggable windows, five apps (terminal, files, notes, music, about), and a living ascii mascot with a glowing eye that tracks your cursor and reacts to what you’re doing. what was challenging getting the mascot’s behavior (eye tracking, blinking, idle reactions) to feel natural while keeping the logic separate from the dom and testable. what i’m proud of it actually feels alive, and the core logic is all unit tested despite being a no-framework, no-build-step project. skip the boot with any key (or watch it once), open some apps, try the [*] theme button in the taskbar, and sit still for 30 seconds to see the crow react", "repo": "https://github.com/AndreiRazvanGhita/embercrowos-stardance", "demo": "https://andreirazvanghita.github.io/embercrowos-stardance/"}]...
|
[{"post_id": 7718, "ts": "2026 [{"post_id": 7718, "ts": "2026-06-12T21:38:21Z", "hours": 0.6606, "text": "last one for this round, added a theme switcher to the desktop. there’s a new [*] button in the taskbar that cycles through three color schemes: ember (the original orange, default), phosphor (green, classic crt terminal look), and cyber (blue). clicking it swaps the accent color across the whole desktop. window borders, highlights, the terminal cursor, and even the living mascot’s glowing eye all shift to match, since they were already built on a shared accent variable. it resets back to ember on reload, so you always start from the default look. architecture-wise this was a clean one to slot in. the theme logic is a small standalone module (just a list of themes and a “next theme” function), same pattern as the window manager and mascot logic, so it’s unit tested without needing a browser."}, {"post_id": 7686, "ts": "2026-06-12T20:43:52Z", "hours": 0.6206, "text": "quick one - made the repo public today and set up a live demo, so now you can actually try embercrow os in the browser instead of cloning it. demo: https://andreirazvanghita.github.io/embercrowos-stardance/ repo: https://github.com/AndreiRazvanGhita/embercrowos-stardance it deploys automatically through github actions, so whenever i push to master the live version updates within a minute or two. nothing new functionality-wise, just wanted it accessible for anyone who wants to poke around without setting up a local server."}, {"post_id": 7649, "ts": "2026-06-12T19:47:38Z", "hours": 3.5114, "text": "ok so this is my webos mission entry. theme is basically “what if a hacker terminal and a desktop os had a baby” - black and white everything, one accent color (ember orange), monospace fonts, the works. no frameworks, just html/css/js because i wanted to actually understand every line of this thing. got the core stuff working: window manager - you can drag windows around, focus them (the active one gets a glowy orange outline, felt very “hacker movie” to me), minimize to the taskbar, close them. double click an icon and it spawns a new window, slightly offset so they don’t all stack exactly on top of each other. apps - went with 5: a terminal you can actually type into (help, whoami, ls, etc, plus a hidden crow command that prints an ascii bird because why not) a fake file explorer with a little folder tree (there’s a secrets.txt in there, very serious business) an “about” app that’s basically neofetch but for my os, shows uptime and stuff a notes app that saves to localStorage so your notes survive a refresh a music player with a little audio visualizer using the web audio api - this one took way longer than expected the boot sequence - probably my favorite part. when you load the page you get a fake terminal boot log scrolling by ([ ok ] mounting //embercrow/root… type stuff), then this big ascii bird silhouette fades in with a glowing orange eye, then a fake login prompt types itself out and “logs you in” (no actual password, it’s all for show), then it does a crt scanline transition into the desktop. you can skip it by pressing any key if you don’t want to sit through it every time. the mascot is “the embercrow” - giant bird of prey made out of dots/ascii blocks with one glowing eye. shows up in the boot sequence and as a little taskbar icon. architecture-wise i kept the window manager totally dumb/generic - it doesn’t know anything about specific apps, each app just registers itself with a title, icon, and a function that builds its content. made it way easier to build each app on its own and test it in isolation. todo mostly polish at this point - tweaking the boot sequence timing, maybe a couple more terminal easter eggs. core stuff is done and working."}]...
|
Title: EmberCrow OS by @ghita | Stardance
Devlogs Title: EmberCrow OS by @ghita | Stardance
Devlogs:
ok so this is my webos mission entry. theme is basically “what if a hacker terminal and a desktop os had a baby” - black and white everything, one accent color (ember orange), monospace fonts, the works. no frameworks, just html/css/js because i wanted to actually understand every line of this thing. got the core stuff working: window manager - you can drag windows around, focus them (the active one gets a glowy orange outline, felt very “hacker movie” to me), minimize to the taskbar, close them. double click an icon and it spawns a new window, slightly offset so they don’t all stack exactly on top of each other. apps - went with 5: a terminal you can actually type into (help, whoami, ls, etc, plus a hidden crow command that prints an ascii bird because why not) a fake file explorer with a little folder tree (there’s a secrets.txt in there, very serious business) an “about” app that’s basically neofetch but for my os, shows uptime and stuff a notes app that saves to localStorage so your notes survive a refresh a music player with a little audio visualizer using the web audio api - this one took way longer than expected the boot sequence - probably my favorite part. when you load the page you get a fake terminal boot log scrolling by ([ ok ] mounting //embercrow/root… type stuff), then this big ascii bird silhouette fades in with a glowing orange eye, then a fake login prompt types itself out and “logs you in” (no actual password, it’s all for show), then it does a crt scanline transition into the desktop. you can skip it by pressing any key if you don’t want to sit through it every time. the mascot is “the embercrow” - giant bird of prey made out of dots/ascii blocks with one glowing eye. shows up in the boot sequence and as a little taskbar icon. architecture-wise i kept the window manager totally dumb/generic - it doesn’t know anything about specific apps, each app just registers itself with a title, icon, and a function that builds its content. made it way easier to build each app on its own and test it in isolation. todo mostly polish at this point - tweaking the boot sequence timing, maybe a couple more terminal easter eggs. core stuff is done and working.
quick one - made the repo public today and set up a live demo, so now you can actually try embercrow os in the browser instead of cloning it. demo: https://andreirazvanghita.github.io/embercrowos-stardance/ repo: https://github.com/AndreiRazvanGhita/embercrowos-stardance it deploys automatically through github actions, so whenever i push to master the live version updates within a minute or two. nothing new functionality-wise, just wanted it accessible for anyone who wants to poke around without setting up a local server.
last one for this round, added a theme switcher to the desktop. there’s a new [*] button in the taskbar that cycles through three color schemes: ember (the original orange, default), phosphor (green, classic crt terminal look), and cyber (blue). clicking it swaps the accent color across the whole desktop. window borders, highlights, the terminal cursor, and even the living mascot’s glowing eye all shift to match, since they were already built on a shared accent variable. it resets back to ember on reload, so you always start from the default look. architecture-wise this was a clean one to slot in. the theme logic is a small standalone module (just a list of themes and a “next theme” function), same pattern as the window manager and mascot logic, so it’s unit tested without needing a browser.
Ships:
what i made embercrow os - a hacker themed desktop that runs in the browser, no install. retro boot sequence, draggable windows, five apps (terminal, files, notes, music, about), and a living ascii mascot with a glowing eye that tracks your cursor and reacts to what you’re doing. what was challenging getting the mascot’s behavior (eye tracking, blinking, idle reactions) to feel natural while keeping the logic separate from the dom and testable. what i’m proud of it actually feels alive, and the core logic is all unit tested despite being a no-framework, no-build-step project. skip the boot with any key (or watch it once), open some apps, try the [*] theme button in the taskbar, and sit still for 30 seconds to see the crow react...
|
1793112924.019504
|
1793199324.019504
|
|
16877
|
Aero by @VoidChris | Stardance
|
VoidChris
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-25T00:36:02Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My project features a glider based on the aerodynamics of the Peregrine Falcon. A challenge I faced during this project occurred during the designing of the model because I am new to CAD modeling and 3d modeling in general, this is my first hardware project. I am very proud of the design and results of the Sim Scale simulation I tested numerous (13) times. For those wanting to test my project you would need a 3d printer. Also for those wanting to test my project it is 6 ft long so find a tall hill to throw it off of.", "repo": "https://github.com/Void-Chris/Aero-Stardance-Project", "demo": ""}]...
|
[{"post_id": 21073, "ts": "202 [{"post_id": 21073, "ts": "2026-07-02T21:01:00Z", "hours": 1.7003, "text": "I think I’m finished with the project."}, {"post_id": 14599, "ts": "2026-06-23T19:22:37Z", "hours": 2.05, "text": "Did a few more sketches. Mirrored half model. Started tail. (because i forgot to do so before)"}, {"post_id": 13834, "ts": "2026-06-22T17:46:18Z", "hours": 1.6833, "text": "Redid sketches and got rid of some sketches"}, {"post_id": 11620, "ts": "2026-06-18T22:33:05Z", "hours": 1.7667, "text": "Three part wing"}, {"post_id": 10879, "ts": "2026-06-17T20:44:38Z", "hours": 3.4667, "text": "updated and removed some parts of the 3d model"}, {"post_id": 10288, "ts": "2026-06-16T22:33:09Z", "hours": 1.35, "text": "Peregrine Falcon Inspired gliding thing"}]...
|
Title: Aero by @VoidChris | Stardance
Devlogs:
Pe Title: Aero by @VoidChris | Stardance
Devlogs:
Peregrine Falcon Inspired gliding thing
updated and removed some parts of the 3d model
Three part wing
Redid sketches and got rid of some sketches
Did a few more sketches. Mirrored half model. Started tail. (because i forgot to do so before)
I think I’m finished with the project.
Ships:
My project features a glider based on the aerodynamics of the Peregrine Falcon. A challenge I faced during this project occurred during the designing of the model because I am new to CAD modeling and 3d modeling in general, this is my first hardware project. I am very proud of the design and results of the Sim Scale simulation I tested numerous (13) times. For those wanting to test my project you would need a 3d printer. Also for those wanting to test my project it is 6 ft long so find a tall hill to throw it off of....
|
1793281739.861037
|
1793368139.861037
|
|
16896
|
3-Body JS Simulation by @dkh | Stardance
|
dkh
|
1
|
19.0
|
359
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T02:37:18Z", "hours": 19.0, "multiplier": 18.91, "payout": 359, "blessing": "neutral", "text": "I made a real-time 3D physics simulation of a fully configurable three-body solar system using Three.js. It can run in your browser and is compatible with a wide range of devices. Players can move their camera, adjust simulation parameters, and explore the system’s chaotic behavior. Instructions are in the README along with a downloadable tutorial video file on the itch.io page. The biggest challenge I faced was that I hadn’t programmed with JavaScript, HTML, or CSS in a while. Designed and built by me using Three.js and GitHub Codespaces. I decided to build this project in honor of one of my favorite book series ever called the Three Body Problem. I was also fascinated by three-body physics and wanted to share that fascination with others. Thank you Stardance!", "repo": "https://github.com/dkhdev25/Three-Body-Sim", "demo": "https://dkhdev.itch.io/3-body-sim-3d"}]...
|
[{"post_id": 19656, "ts": "202 [{"post_id": 19656, "ts": "2026-07-01T01:08:50Z", "hours": 0.2669, "text": "Finished the readme so much styling stuff I had to do! Added some fixes and features to the game like following suns and resetting cam positions properly. Then I uploaded the polished version to itch io to ship. Made video tutorial and fixed the layout of the terminal so judges won’t be confused."}, {"post_id": 19531, "ts": "2026-06-30T21:08:54Z", "hours": 1.3189, "text": "Ready to SHIP my project! In this last hour of my work, I have finished the local settings panel that displays the selected body tab, I have made the physics more REALISTIC, and I have polished the simulation up a bit! Now I’m just going to make a README, upload to itch.io, and make a video tutorial to hopefully maximize the stardust I gain from my first ever project on Stardance! Thank you everyone for this opportunity that was given to me!"}, {"post_id": 18865, "ts": "2026-06-30T02:02:53Z", "hours": 0.6419, "text": "Ok, this is the SHORTEST logged time in a devlog I have ever made for this project so far, but an important feature has been finally added. What is the most important part of the simulation? Well a simulation RECORDS… think about that for a minute. Would it be best to have gravity/velocity arrows, the three body spheres, or the TRAILS. Well, it would be the trails, wouldn’t it? Because they are the HISTORY of the simulation. I have failed at making the 3D trails work 2 TIMES already (some sort of problem with the rendering), because after hours of debugging they just WOULD NOT work. But finally I took a simpler approach (after procrastinating them till like the end of the project almost) and they finally work! Basically it just records data points of the star positions then renders them. Let me know if any of you have feedback!"}, {"post_id": 18786, "ts": "2026-06-30T00:04:08Z", "hours": 3.2194, "text": "Just working on getting the global settings panel to finally work with JS after styling it with CSS. Here is this beautiful screenshot of the panel with an interesting image in the viewport XD One thing I have to say, I got dropdowns, off and ons, and number inputs but some of the global settings are unnecessary so I’m gonna get rid of those, fine tune the others, and fix reset/restart terminal commands, then I will finish local settings panel and ship this project."}, {"post_id": 13423, "ts": "2026-06-21T23:46:18Z", "hours": 1.735, "text": "So close to finishing the terminal! Here is a brief explanation on the difference between the two setting types: the terminal RUNS the simulation and the panels specify HOW the simulation will run, the two panels also play two different roles, one of them is the global settings, the other is the individual LOCAL settings for each body in the simulation. I hope this gives some understanding on how I plan to finish the settings before I go over on what I have been doing recently with the terminal which means ONE step closer to shipping this project! So: most of the work being done so far has been with the terminal right now. I polished up the look so it gets a nice default terminal style. Then I fixed some problems with the text line heights and the input/output contrast. I also made a script to sense certain key words in the terminal to color them so that you know that the word EXISTS and you typed it in correctly. I then added a help cmd function so that it will list all of the cmds. I narrowed down the list of cmds to: run, restart, reset, pause, resume, and debug. I’ve been working on getting them all integrated and am almost done. Next is the panels after the terminal is done."}, {"post_id": 8945, "ts": "2026-06-14T21:29:12Z", "hours": 1.9411, "text": "Added the skeleton of the UI!!! It looks nice right now I think, and you can select which sun you want to edit now. Finished ARROWS with contrast yet cohesion because they are velocity and gravity for each star, so same color and stuff, but different lengths, like clock hands. Worked for so LOOOOOOONG on trails but they just wouldn’t show no matter the debugging I tried so I’m giving up on trails (which I didn’t really need anyways). Just need to make the settings and then we can SHIP this project! YASSSSSSS HOORAY!!!"}, {"post_id": 8828, "ts": "2026-06-14T17:58:26Z", "hours": 5.3031, "text": "FINISHED THE 3-BODY PHYSICS!!! Awesome! Then I worked on making all of the simulation settings (already made & newly added) as some neat vars clustered together in the top of the code. After that I started working on the UI, my vision right now is a terminal on the bottom, a banner on the top, and two panels on top of each other on the left, the top one will be the global sim settings and the bottom one will be the selected sun settings. I finished the terminal UI but I need to make it where you can type into it and stuff. Finally, I posted the current version of the unfinished demo onto itch.io! Next I will finish the UI and work on trails + velocity and pull arrows.(Btw, that blue building icon in the screenshot isn’t part of the project, this was made on my school Chromebook so that’s an annoying thing on my screen!)"}, {"post_id": 7647, "ts": "2026-06-12T19:43:27Z", "hours": 2.5744, "text": "I was adding three unique yet COHESIVE suns together in a solar system (for our THREE bodies), adding a cluster system to the new procedural background star generation function I replaced the texture with and a color tint (looks more NATURAL), adding coronas to the three suns and removed their textures, working on orbit and zoom (especially the START position and min/max zoom), removed sphere for background since we don’t use a texture for that ANYMORE, cleaned up the code and polished some stuff. Now I can start working on the physics and then the UI after that."}, {"post_id": 7213, "ts": "2026-06-12T01:22:12Z", "hours": 2.0619, "text": "I started by joining Stardance, connecting my project to Hackatime, creating a GitHub codespace, and a repository with it. I began working on the sun, orbit controls with camera, glow through bloom effect, rotation animations, and background. (It’s all 3D) In fact, I made my first sun sphere (so first body) and then put it INSIDE of a sphere with the looping PNG to achieve a HDRI effect. Next I will set parameters for the zoom, make three suns, and work on trails + physics. (Which isn’t to be taken lightly cause the physics is going to be CRAZY) Thank you Stardance for letting me join! -dkh"}]...
|
Title: 3-Body JS Simulation by @dkh | Stardance
D Title: 3-Body JS Simulation by @dkh | Stardance
Devlogs:
I started by joining Stardance, connecting my project to Hackatime, creating a GitHub codespace, and a repository with it. I began working on the sun, orbit controls with camera, glow through bloom effect, rotation animations, and background. (It’s all 3D) In fact, I made my first sun sphere (so first body) and then put it INSIDE of a sphere with the looping PNG to achieve a HDRI effect. Next I will set parameters for the zoom, make three suns, and work on trails + physics. (Which isn’t to be taken lightly cause the physics is going to be CRAZY) Thank you Stardance for letting me join! -dkh
I was adding three unique yet COHESIVE suns together in a solar system (for our THREE bodies), adding a cluster system to the new procedural background star generation function I replaced the texture with and a color tint (looks more NATURAL), adding coronas to the three suns and removed their textures, working on orbit and zoom (especially the START position and min/max zoom), removed sphere for background since we don’t use a texture for that ANYMORE, cleaned up the code and polished some stuff. Now I can start working on the physics and then the UI after that.
FINISHED THE 3-BODY PHYSICS!!! Awesome! Then I worked on making all of the simulation settings (already made & newly added) as some neat vars clustered together in the top of the code. After that I started working on the UI, my vision right now is a terminal on the bottom, a banner on the top, and two panels on top of each other on the left, the top one will be the global sim settings and the bottom one will be the selected sun settings. I finished the terminal UI but I need to make it where you can type into it and stuff. Finally, I posted the current version of the unfinished demo onto itch.io! Next I will finish the UI and work on trails + velocity and pull arrows.(Btw, that blue building icon in the screenshot isn’t part of the project, this was made on my school Chromebook so that’s an annoying thing on my screen!)
Added the skeleton of the UI!!! It looks nice right now I think, and you can select which sun you want to edit now. Finished ARROWS with contrast yet cohesion because they are velocity and gravity for each star, so same color and stuff, but different lengths, like clock hands. Worked for so LOOOOOOONG on trails but they just wouldn’t show no matter the debugging I tried so I’m giving up on trails (which I didn’t really need anyways). Just need to make the settings and then we can SHIP this project! YASSSSSSS HOORAY!!!
So close to finishing the terminal! Here is a brief explanation on the difference between the two setting types: the terminal RUNS the simulation and the panels specify HOW the simulation will run, the two panels also play two different roles, one of them is the global settings, the other is the individual LOCAL settings for each body in the simulation. I hope this gives some understanding on how I plan to finish the settings before I go over on what I have been doing recently with the terminal which means ONE step closer to shipping this project! So: most of the work being done so far has been with the terminal right now. I polished up the look so it gets a nice default terminal style. Then I fixed some problems with the text line heights and the input/output contrast. I also made a script to sense certain key words in the terminal to color them so that you know that the word EXISTS and you typed it in correctly. I then added a help cmd function so that it will list all of the cmds. I narrowed down the list of cmds to: run, restart, reset, pause, resume, and debug. I’ve been working on getting them all integrated and am almost done. Next is the panels after the terminal is done.
Just working on getting the global settings panel to finally work with JS after styling it with CSS. Here is this beautiful screenshot of the panel with an interesting image in the viewport XD One thing I have to say, I got dropdowns, off and ons, and number inputs but some of the global settings are unnecessary so I’m gonna get rid of those, fine tune the others, and fix reset/restart terminal commands, then I will finish local settings panel and ship this project.
Ok, this is the SHORTEST logged time in a devlog I have ever made for this project so far, but an important feature has been finally added. What is the most important part of the simulation? Well a simulation RECORDS… think about that for a minute. Would it be best to have gravity/velocity arrows, the three body spheres, or the TRAILS. Well, it would be the trails, wouldn’t it? Because they are the HISTORY of the simulation. I have failed at making the 3D trails work 2 TIMES already (some sort of problem with the rendering), because after hours of debugging they just WOULD NOT work. But finally I took a simpler approach (after procrastinating them till like the end of the project almost) and they finally work! Basically it just records data points of the star positions then renders them. Let me know if any of you have feedback!
Ready to SHIP my project! In this last hour of my work, I have finished the local settings panel that displays the selected body tab, I have made the physics more REALISTIC, and I have polished the simulation up a bit! Now I’m just going to make a README, upload to itch.io, and make a video tutorial to hopefully maximize the stardust I gain from my first ever project on Stardance! Thank you everyone for this opportunity that was given to me!
Finished the readme so much styling stuff I had to do! Added some fixes and features to the game like following suns and resetting cam positions properly. Then I uploaded the polished version to itch io to ship. Made video tutorial and fixed the layout of the terminal so judges won’t be confused.
Ships:
I made a real-time 3D physics simulation of a fully configurable three-body solar system using Three.js. It can run in your browser and is compatible with a wide range of devices. Players can move their camera, adjust simulation parameters, and explore the system’s chaotic behavior. Instructions are in the README along with a downloadable tutorial video file on the itch.io page. The biggest challenge I faced was that I hadn’t programmed with JavaScript, HTML, or CSS in a while. Designed and built by me using Three.js and GitHub Codespaces. I decided to build this project in honor of one of my favorite book series ever called the Three Body Problem. I was also fascinated by three-body physics and wanted to share that fascination with others. Thank you Stardance!...
|
1793253275.286534
|
1793339675.286534
|
|
16909
|
ThreatWise - App by @benMakesStuff | Stardance
|
benMakesStuff
|
1
|
42.0
|
563
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T04:57:40Z", "hours": 42.0, "multiplier": 13.35, "payout": 563, "blessing": "neutral", "text": "I made a cybersecurity teaching app. Its target audience is upper primary school kids or lower highschool (also called middleschool). It has multiple features including minigames, chatbot, email simulator, courses, password strength checker, report page (just a demo, dosnt actually send SOS), xp systems, streak systems, and some peak animations that took me a really long time to make.", "repo": "https://github.com/benvelzul/ThreatWise", "demo": "https://benvelzul.github.io/Threat-Wise-Premiers-Coding-Challenge/"}]...
|
[{"post_id": 65194, "ts": "202 [{"post_id": 65194, "ts": "2026-09-10T04:52:02Z", "hours": 0.5717, "text": "Did some extra documentation and its now finished for stardance so im shiping rn hope u guys like it"}, {"post_id": 64525, "ts": "2026-09-09T00:11:07Z", "hours": 4.4867, "text": "ye7eyeyyeyeyeye. I finally finished and its looking decent, its got 3 minigames and it is just good stuff. One of the minigames are one URL detector, matching pairs, and a priority thingy sorter. And im deploying rn, so better be ready to rate. and i also got confused 3 times with how to deploy so i hav deployed 2 times, the first one i took a template for deploying flutter from the internet and forgot to save it then i pushed and found out it didnt push, then the second time i put it but forgot to put my repo name on it so it didnt work, and then the third one i am doing it rn so hopefully it works"}, {"post_id": 63325, "ts": "2026-09-07T02:52:47Z", "hours": 9.8392, "text": "I finished the course engine, xp systems and everythign tah needed finishing with the exception of minigames. But i had like 4 hours that didnt go through because my school laptop broke and then they gave me an loan, so i needed to reinstall everything then some days later they gave me my laptop back WIPED so i had to reinstall everything again and i tried redoing the mascot on RIVE but sadly i suck at designing and it took me 4 hours to make a new mascot that didnt work so just bad stuff happening and the app is due in 4 days and i still have so much stuff to do, so yes im gonna pull all nighters for the next 4 days. and i also reached my first 100 hours in hackatime."}, {"post_id": 57078, "ts": "2026-08-29T05:12:24Z", "hours": 4.3103, "text": "I finished the grading engine (it had a critical bug), made a course engine and got some friends to make courses, and i made some sick animations in the thing (video below) and it looks good but i also did something with vs code and now it the run button doesnt work and now i have to run it from the terminal"}, {"post_id": 52226, "ts": "2026-08-22T10:11:23Z", "hours": 8.5944, "text": "I made the scenario models, data (over 30k emails can be generated), grading algorythm, and scenario UI. And the project is due on 3 weeks and i have so much stuff to doooooooo."}, {"post_id": 31624, "ts": "2026-07-20T05:35:46Z", "hours": 5.2817, "text": "did lots of work in this 5 hours, i just dont remember what exacly i did."}, {"post_id": 23274, "ts": "2026-07-06T03:58:32Z", "hours": 1.5003, "text": "I worked on finishing the Gargoyle (bad cop) and its now looking pretty good, and i had to redo all of the body because it looked like it was drawn by a 3 year old. But now its looking amazing for being my first project on Adobe Illustrator."}, {"post_id": 23190, "ts": "2026-07-06T00:40:30Z", "hours": 2.4572, "text": "I worked on getting the Mascot for the app and decided for the good cop, bad cop and i also worked on a UI more similar to Duolingo’s and Brilliant’s and i change the palette for the app so its easier to change and more equal all around the app"}, {"post_id": 19597, "ts": "2026-06-30T23:05:28Z", "hours": 2.1467, "text": "I worked on adding a mascot to the app, just like Duo in Duolingo; or Koi in Brilliant. So im between adding a gargoyle or a padlock. The paddlock is mostly finished (but im not convinced since its really boring), and the gargoyle is still in the process of learning the anatomy of one and how it looks better (but its looking better for a mascot than the padlock) but i still need to chose between them to be the mascot. Or use them both, like good cop, bad cop: padlock (good cop), and gargoyle (bad cop). So if anyone can help me choosing it would be amazing. I will keep working on them and then i will show the progress made."}, {"post_id": 14827, "ts": "2026-06-24T02:39:16Z", "hours": 2.9617, "text": "I worked on the project architecture, ui for all the pages and networking between them."}]...
|
Title: ThreatWise - App by @benMakesStuff | Starda Title: ThreatWise - App by @benMakesStuff | Stardance
Devlogs:
I worked on the project architecture, ui for all the pages and networking between them.
I worked on adding a mascot to the app, just like Duo in Duolingo; or Koi in Brilliant. So im between adding a gargoyle or a padlock. The paddlock is mostly finished (but im not convinced since its really boring), and the gargoyle is still in the process of learning the anatomy of one and how it looks better (but its looking better for a mascot than the padlock) but i still need to chose between them to be the mascot. Or use them both, like good cop, bad cop: padlock (good cop), and gargoyle (bad cop). So if anyone can help me choosing it would be amazing. I will keep working on them and then i will show the progress made.
I worked on getting the Mascot for the app and decided for the good cop, bad cop and i also worked on a UI more similar to Duolingo’s and Brilliant’s and i change the palette for the app so its easier to change and more equal all around the app
I worked on finishing the Gargoyle (bad cop) and its now looking pretty good, and i had to redo all of the body because it looked like it was drawn by a 3 year old. But now its looking amazing for being my first project on Adobe Illustrator.
did lots of work in this 5 hours, i just dont remember what exacly i did.
I made the scenario models, data (over 30k emails can be generated), grading algorythm, and scenario UI. And the project is due on 3 weeks and i have so much stuff to doooooooo.
I finished the grading engine (it had a critical bug), made a course engine and got some friends to make courses, and i made some sick animations in the thing (video below) and it looks good but i also did something with vs code and now it the run button doesnt work and now i have to run it from the terminal
I finished the course engine, xp systems and everythign tah needed finishing with the exception of minigames. But i had like 4 hours that didnt go through because my school laptop broke and then they gave me an loan, so i needed to reinstall everything then some days later they gave me my laptop back WIPED so i had to reinstall everything again and i tried redoing the mascot on RIVE but sadly i suck at designing and it took me 4 hours to make a new mascot that didnt work so just bad stuff happening and the app is due in 4 days and i still have so much stuff to do, so yes im gonna pull all nighters for the next 4 days. and i also reached my first 100 hours in hackatime.
ye7eyeyyeyeyeye. I finally finished and its looking decent, its got 3 minigames and it is just good stuff. One of the minigames are one URL detector, matching pairs, and a priority thingy sorter. And im deploying rn, so better be ready to rate. and i also got confused 3 times with how to deploy so i hav deployed 2 times, the first one i took a template for deploying flutter from the internet and forgot to save it then i pushed and found out it didnt push, then the second time i put it but forgot to put my repo name on it so it didnt work, and then the third one i am doing it rn so hopefully it works
Did some extra documentation and its now finished for stardance so im shiping rn hope u guys like it
Ships:
I made a cybersecurity teaching app. Its target audience is upper primary school kids or lower highschool (also called middleschool). It has multiple features including minigames, chatbot, email simulator, courses, password strength checker, report page (just a demo, dosnt actually send SOS), xp systems, streak systems, and some peak animations that took me a really long time to make....
|
1793285272.5443408
|
1793371672.5443408
|
|
16918
|
Aperture Online Store by @NexBlade-Studios | Stard Aperture Online Store by @NexBlade-Studios | Stardance...
|
NexBlade-Studios
|
1
|
24.0
|
284
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T18:58:19Z", "hours": 24.0, "multiplier": 11.69, "payout": 284, "blessing": "neutral", "text": "I have created Aperture Online store, which is a fictional website that sells items from the Portal franchise as if they were real products. I came up with this idea initially as part of a school project, but it slowly expanded beyond that and became a fully fledged website. I themed the website around the signature Aperture Science design, with its dull greys and bright white surfaces. I even made sure to add a custom cursor and favicon to match the design. I thought it would be more interesting if I add some humour and charm so I made sure to include lots of references to the Portal franchise throughout, especially in the reviews section where I have some of the characters from the game giving reviews on products. I also made sure to implement responsive design so whenever the page is resized or viewed on a different device, the key information is always visible. Overall, the experience was quite a fun one, since it not only improved my website design skills but I also got to research deeper into the backstory of the Portal franchise.", "repo": "https://github.com/NexBlade-Studios/Aperture-Online-Store", "demo": "https://nexblade-studios.github.io/Aperture-Online-Store/index.html"}]...
|
[{"post_id": 51207, "ts": "202 [{"post_id": 51207, "ts": "2026-08-20T18:48:52Z", "hours": 7.1514, "text": "The website is finally complete! This last chunk of progress has been about rounding out the final features. Particularly working on responsive design which is something that I am not very experienced with, so it was interesting to see the different strategies I had to use in order to best represent the information while also maintaining the visual style of the website. Getting the website to this point has been a really amazing opportunity to work on my website design skills which I hope to apply more in the future."}, {"post_id": 50388, "ts": "2026-08-19T15:36:16Z", "hours": 3.6647, "text": "I’m in the final stretch of development now, with the completion of the product pages and the about section. The website is really feeling like something that could be found in the Portal universe, but again if there’s anything you think I should add please let me know."}, {"post_id": 46265, "ts": "2026-08-13T11:48:17Z", "hours": 9.0111, "text": "The project has been moving along quite nicely, although it has been a while since I have made a devlog. I have been working on perfecting the aesthetic of the product page, which is the key part of the website. For that, I recreated the test chamber sign, making it act as the label for the product, with each of the symbols representing actions related to it. I have also added a short description taking inspirations and dialogue snippets from various Portal media. The main thing that has inspired this is the Aperture Investment Opportunity videos where some of the products I am “selling” were also shown. Please give some ideas on what I should add to the website!"}, {"post_id": 11590, "ts": "2026-06-18T21:34:01Z", "hours": 4.4481, "text": "This is my first devlog for Aperture Online Store, a website I am developing where the fictional items from the Portal universe are sold as if they were real commercial products. Before starting I already had the majority of the main homepage and top header created. What I aimed to add was a reviews page where you could really see the personality of characters like GLADOS and Wheatley. I kept Chell’s review blank because… well she can’t talk however it does look a bit empty so if you have any ideas how I could make it better let me know. I have some big plans for this website’s future, so be sure to send feedback and drop a follow."}]...
|
Title: Aperture Online Store by @NexBlade-Studios Title: Aperture Online Store by @NexBlade-Studios | Stardance
Devlogs:
This is my first devlog for Aperture Online Store, a website I am developing where the fictional items from the Portal universe are sold as if they were real commercial products. Before starting I already had the majority of the main homepage and top header created. What I aimed to add was a reviews page where you could really see the personality of characters like GLADOS and Wheatley. I kept Chell’s review blank because… well she can’t talk however it does look a bit empty so if you have any ideas how I could make it better let me know. I have some big plans for this website’s future, so be sure to send feedback and drop a follow.
The project has been moving along quite nicely, although it has been a while since I have made a devlog. I have been working on perfecting the aesthetic of the product page, which is the key part of the website. For that, I recreated the test chamber sign, making it act as the label for the product, with each of the symbols representing actions related to it. I have also added a short description taking inspirations and dialogue snippets from various Portal media. The main thing that has inspired this is the Aperture Investment Opportunity videos where some of the products I am “selling” were also shown. Please give some ideas on what I should add to the website!
I’m in the final stretch of development now, with the completion of the product pages and the about section. The website is really feeling like something that could be found in the Portal universe, but again if there’s anything you think I should add please let me know.
The website is finally complete! This last chunk of progress has been about rounding out the final features. Particularly working on responsive design which is something that I am not very experienced with, so it was interesting to see the different strategies I had to use in order to best represent the information while also maintaining the visual style of the website. Getting the website to this point has been a really amazing opportunity to work on my website design skills which I hope to apply more in the future.
Ships:
I have created Aperture Online store, which is a fictional website that sells items from the Portal franchise as if they were real products. I came up with this idea initially as part of a school project, but it slowly expanded beyond that and became a fully fledged website. I themed the website around the signature Aperture Science design, with its dull greys and bright white surfaces. I even made sure to add a custom cursor and favicon to match the design. I thought it would be more interesting if I add some humour and charm so I made sure to include lots of references to the Portal franchise throughout, especially in the reviews section where I have some of the characters from the game giving reviews on products. I also made sure to implement responsive design so whenever the page is resized or viewed on a different device, the key information is always visible. Overall, the experience was quite a fun one, since it not only improved my website design skills but I also got to research deeper into the backstory of the Portal franchise....
|
1793138319.7231011
|
1793224719.7231011
|
|
16923
|
Exo Hand Starter by @ttf2010 | Stardance
|
ttf2010
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T23:42:22Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This project really helped challenge me to learn a new form of coding I never thought I could achieve. Through all the mistakes and bugs, I learned and understood a little bit each time. Now that I KIND OF understand OpenCV, I can utilize it for other projects that need computer vision and computation!", "repo": "https://github.com/tobi0106/exohand-proj", "demo": "https://drive.google.com/file/d/1JH82twQb0J3Pfb6GGf9Z0DyhzGubE2F2/view?usp=sharing"}]...
|
[{"post_id": 20349, "ts": "202 [{"post_id": 20349, "ts": "2026-07-01T22:30:04Z", "hours": 0.3603, "text": "just doing some last tests on my project before shipping! Haven’t touched it much after the first log since it was just a fun way for me to learn a little bit of computer vision."}, {"post_id": 7183, "ts": "2026-06-12T00:03:01Z", "hours": 2.3819, "text": "I am an intermediate beginner in coding so far. I have been working on this starter code to learn how to work with OpenCV and MediaPipe. I want to create a robotic hand that can use recognized hand gestures and machine learning to perform tasks from anywhere."}]...
|
Title: Exo Hand Starter by @ttf2010 | Stardance
D Title: Exo Hand Starter by @ttf2010 | Stardance
Devlogs:
I am an intermediate beginner in coding so far. I have been working on this starter code to learn how to work with OpenCV and MediaPipe. I want to create a robotic hand that can use recognized hand gestures and machine learning to perform tasks from anywhere.
just doing some last tests on my project before shipping! Haven’t touched it much after the first log since it was just a fun way for me to learn a little bit of computer vision.
Ships:
This project really helped challenge me to learn a new form of coding I never thought I could achieve. Through all the mistakes and bugs, I learned and understood a little bit each time. Now that I KIND OF understand OpenCV, I can utilize it for other projects that need computer vision and computation!...
|
1793253143.9066975
|
1793339543.9066975
|
|
16934
|
OrangeBot by @Alafandri | Stardance
|
Alafandri
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T22:05:15Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a slack bot that features 4 commands. Most challenging part was to set up the nest through terminal cause I ran into many problems. I am proud of managing to set it up. People planning on using this should keep in mind that you shouldnt go trying to use this bot in channels not dedicated for it. ONLY use the dedicated channel or the bot spam channel!", "repo": "https://github.com/Alafandri/SlackBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BUAURDA6L"}]...
|
[{"post_id": 56894, "ts": "202 [{"post_id": 56894, "ts": "2026-08-28T22:02:24Z", "hours": 0.2922, "text": "Devlog #1 Hey everyone! So I decided to make a slack bot. I just finished setting it up. It features 4 different commands and runs 24/7 without stopping. I hope to expand on this in the future! Bye! :)"}]...
|
Title: OrangeBot by @Alafandri | Stardance
Devlog Title: OrangeBot by @Alafandri | Stardance
Devlogs:
Devlog #1 Hey everyone! So I decided to make a slack bot. I just finished setting it up. It features 4 different commands and runs 24/7 without stopping. I hope to expand on this in the future! Bye! :)
Ships:
I made a slack bot that features 4 commands. Most challenging part was to set up the nest through terminal cause I ran into many problems. I am proud of managing to set it up. People planning on using this should keep in mind that you shouldnt go trying to use this bot in channels not dedicated for it. ONLY use the dedicated channel or the bot spam channel!...
|
1793112738.4218013
|
1793199138.4218013
|
|
16944
|
Pong by @infinite_silly | Stardance
|
infinite_silly
|
1
|
23.0
|
63
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-27T18:01:56Z", "hours": 23.0, "multiplier": 2.78, "payout": 63, "blessing": "neutral", "text": "I built a version of Pong using the Rust game engine Bevy! Bevy is a modular game engine that uses the ECS (Entity, Component, System) paradigm to run games. I followed the TaintedCoders pong tutorial ( https://taintedcoders.com/bevy/tutorials/pong-tutorial ) which let me create a basic pong game with no UI, end, or varied physics. I added randomised collision angles, changed how the AI moved so that it wasn’t perfect at the game, added start and end screens with randomised end messages, and more. There are versions for Apple Silicon Macs, Windows, Linux, and a web playable version.", "repo": "https://github.com/KaonQuantum/bevy-pong", "demo": "https://kaonquantum.github.io/bevy-pong/"}]...
|
[{"post_id": 35917, "ts": "202 [{"post_id": 35917, "ts": "2026-07-27T17:49:00Z", "hours": 1.4794, "text": "Finally got a working desktop release!!! The project is finally done! There were so many issues with this as I had no experience with Github actions or making executables with Rust!"}, {"post_id": 34874, "ts": "2026-07-25T22:55:48Z", "hours": 1.1764, "text": "#Finished Web Demo for Pong I had to do a lot of workflow debugging for this."}, {"post_id": 31340, "ts": "2026-07-19T17:29:25Z", "hours": 3.0556, "text": "End Screens, Colours, and Paddle Collisions This devlog marks the nearing of the end of this project. I made these changes a week ago, but was unable to find time to write a devlog before I went off-grid. Here are the main changes: End Screen I added an end screen with a randomised end message based off of who won (9 messages each) and a Restart button that uses a lot of the same code as the start screen. I also realised that 10 goals was a lot and quite slow, so I dropped it down to 5. Colours I fixed the colour palette by finally swapping the background colour to something within the grand palette. Collisions Hopefully, this is the last collision issue. If the ball hit the top/bottom of a paddle while the paddle had the same v_y direction as the ball, the ball would still swap v_y direction and go DOWN/UP, so this is hopefully taken care of. It doesn’t matter how fast the ball goes because if it hits the top/bottom of a paddle, the point is already lost. The next devlog will probably be with all the build files and such."}, {"post_id": 26248, "ts": "2026-07-10T22:23:03Z", "hours": 1.8286, "text": "Time Delay, Adaptive AI, and Bevy Update Here’s what I’ve done: The AI previously would only move if the ball was a minimum distance away, and it would outpace the ball, stop, the ball would get away, it would outpace it again, and so on because the adaptive AI was increasing speeds. Now it only changes it’s velocity every 0.1s The adaptive AI was also mediocre, so I dropped it and raised the paddle speed. It was really just an AI nerf. I upgraded from Bevy 0.18.1 to 0.19.0 This came with some changes to text and layouts 0.18.1: let font = asset_server.load(\"fonts/PixelifySans-Regular.ttf\"); let label = ( Text::new(\"Start\"), TextFont { font, font_size: 40., ..default() }, TextColor(Color::BLACK), ); 0.19.0: let font = asset_server.load(\"fonts/PixelifySans-Regular.ttf\"); let label = ( Text::new(\"Start\"), TextFont { font: FontSource::Handle(font), font_size: FontSize::Px(40.), ..default() }, TextColor(Color::BLACK), ); among others."}, {"post_id": 25773, "ts": "2026-07-10T07:13:13Z", "hours": 7.1089, "text": "Added a Start Screen and did some Debugging! So I’ve continued improving pong, and here’s what I’ve done since the last devlog. Fine-Tuned Adaptivity Added a Start Screen!!! Fixed Ball Velocity Magnitude Issues (annoying Pythagorean theorem math, and I like math) Made the font Pixelify Sans for the new start button and the scoreboard. There are only two more things I need to do before shipping! [] Make the AI a time delay instead of a space delay Right now the AI moves when the ball is a certain distance from the paddle. This makes it jittery when it is fast due to adaptivity I want to make it only check the ball’s position every second of half-second or so. -This will hopefully eliminate jitter [] Make an end and restart screen The game should end at 10 points It will probably have “Game Over” for a loss and “You Win” for a, you guessed it, a win."}, {"post_id": 13916, "ts": "2026-06-22T20:25:40Z", "hours": 3.2844, "text": "Finished the tutorial and working on my own mods! I started this as a way to learn how to use the basics of 2D game dev with Bevy before I make my Chrome Dino clone Gleebo Run (I know, so original). Continuing this project will help me grasp more of the basics. I Added: AI nerfs Randomness to collisions and ball respawns Ball respawns towards the scoring player Adaptive difficulty AI To Add Game Finish (10 points I think) Start and end screens To Fix New clipping & collision issues Jittery AI paddle Ball velocity magnitude non-consistency issues"}, {"post_id": 8221, "ts": "2026-06-13T17:53:01Z", "hours": 4.83, "text": "I finished step 17 of the tutorial!"}]...
|
Title: Pong by @infinite_silly | Stardance
Devlog Title: Pong by @infinite_silly | Stardance
Devlogs:
I finished step 17 of the tutorial!
Finished the tutorial and working on my own mods! I started this as a way to learn how to use the basics of 2D game dev with Bevy before I make my Chrome Dino clone Gleebo Run (I know, so original). Continuing this project will help me grasp more of the basics. I Added: AI nerfs Randomness to collisions and ball respawns Ball respawns towards the scoring player Adaptive difficulty AI To Add Game Finish (10 points I think) Start and end screens To Fix New clipping & collision issues Jittery AI paddle Ball velocity magnitude non-consistency issues
Added a Start Screen and did some Debugging! So I’ve continued improving pong, and here’s what I’ve done since the last devlog. Fine-Tuned Adaptivity Added a Start Screen!!! Fixed Ball Velocity Magnitude Issues (annoying Pythagorean theorem math, and I like math) Made the font Pixelify Sans for the new start button and the scoreboard. There are only two more things I need to do before shipping! [] Make the AI a time delay instead of a space delay Right now the AI moves when the ball is a certain distance from the paddle. This makes it jittery when it is fast due to adaptivity I want to make it only check the ball’s position every second of half-second or so. -This will hopefully eliminate jitter [] Make an end and restart screen The game should end at 10 points It will probably have “Game Over” for a loss and “You Win” for a, you guessed it, a win.
Time Delay, Adaptive AI, and Bevy Update Here’s what I’ve done: The AI previously would only move if the ball was a minimum distance away, and it would outpace the ball, stop, the ball would get away, it would outpace it again, and so on because the adaptive AI was increasing speeds. Now it only changes it’s velocity every 0.1s The adaptive AI was also mediocre, so I dropped it and raised the paddle speed. It was really just an AI nerf. I upgraded from Bevy 0.18.1 to 0.19.0 This came with some changes to text and layouts 0.18.1: let font = asset_server.load("fonts/PixelifySans-Regular.ttf"); let label = ( Text::new("Start"), TextFont { font, font_size: 40., ..default() }, TextColor(Color::BLACK), ); 0.19.0: let font = asset_server.load("fonts/PixelifySans-Regular.ttf"); let label = ( Text::new("Start"), TextFont { font: FontSource::Handle(font), font_size: FontSize::Px(40.), ..default() }, TextColor(Color::BLACK), ); among others.
End Screens, Colours, and Paddle Collisions This devlog marks the nearing of the end of this project. I made these changes a week ago, but was unable to find time to write a devlog before I went off-grid. Here are the main changes: End Screen I added an end screen with a randomised end message based off of who won (9 messages each) and a Restart button that uses a lot of the same code as the start screen. I also realised that 10 goals was a lot and quite slow, so I dropped it down to 5. Colours I fixed the colour palette by finally swapping the background colour to something within the grand palette. Collisions Hopefully, this is the last collision issue. If the ball hit the top/bottom of a paddle while the paddle had the same v_y direction as the ball, the ball would still swap v_y direction and go DOWN/UP, so this is hopefully taken care of. It doesn’t matter how fast the ball goes because if it hits the top/bottom of a paddle, the point is already lost. The next devlog will probably be with all the build files and such.
#Finished Web Demo for Pong I had to do a lot of workflow debugging for this.
Finally got a working desktop release!!! The project is finally done! There were so many issues with this as I had no experience with Github actions or making executables with Rust!
Ships:
I built a version of Pong using the Rust game engine Bevy! Bevy is a modular game engine that uses the ECS (Entity, Component, System) paradigm to run games. I followed the TaintedCoders pong tutorial ( https://taintedcoders.com/bevy/tutorials/pong-tutorial ) which let me create a basic pong game with no UI, end, or varied physics. I added randomised collision angles, changed how the AI moved so that it wasn’t perfect at the game, added start and end screens with randomised end messages, and more. There are versions for Apple Silicon Macs, Windows, Linux, and a web playable version....
|
1793141329.9295013
|
1793227729.9295013
|
|
16945
|
WinkOS v1.0 by @LuvlornDev | Stardance
|
LuvlornDev
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T22:09:03Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "WinkOS V1.0 is a pretty basic OS, it has directories and files for ppl to test them out while i release future versions of WinkOS but… Im proud to say that I made a “boot” sequence and a login button with only one user (for now..), and it has folders and files for ppl to explore the filesystem and how’s it going… I added a few features, including text file (txt), pdf file and image file processing so you can actually see their contents displayed on their own windows upon opening. A cool feature is the scroll zoom for images, although there’s more to come since I want WinkOS to be some sort of “archive” or promotional virtual OS for my music, the media I make and more things that will be coming soon… :) So here it is! Welcome to WinkOS, and I promise next version will at least have a Wallpaper lol", "repo": "https://github.com/LuvlornDev/WinkOS", "demo": "https://winkos.vercel.app/"}]...
|
[{"post_id": 12186, "ts": "202 [{"post_id": 12186, "ts": "2026-06-19T21:59:58Z", "hours": 1.6267, "text": "Alr Im Finally done with PDF, txt and Image processing!!! I took a while to perfect them so they looked kinda decent and they do now.. Bonus: There’s Zoom for the images with the scroll wheel so that’s nice. I guess Im done with 1.0 for now :) Now what I have to do is make the windows spawn differently so that they dont stack exatly on top of each other… Maybe by making them appear in a random position.. And also they’re no clipping from the screen if you drag them too far so.. gotta fix that too.. But overall.. gud :)"}, {"post_id": 10913, "ts": "2026-06-17T21:45:50Z", "hours": 0.3986, "text": "Alr, the files are real. They were decoys before but.. ig now they do exist.. I just have to find a way to display them and make them dynamic bc I dont want to update the json all the time. But they exist.. i just need to call them from the User directory"}, {"post_id": 10890, "ts": "2026-06-17T20:55:47Z", "hours": 3.4531, "text": "Okay… I finished the base OS, It looks prettier now but I still have to work in design. But i guess the folders work for now…"}]...
|
Title: WinkOS v1.0 by @LuvlornDev | Stardance
Dev Title: WinkOS v1.0 by @LuvlornDev | Stardance
Devlogs:
Okay… I finished the base OS, It looks prettier now but I still have to work in design. But i guess the folders work for now…
Alr, the files are real. They were decoys before but.. ig now they do exist.. I just have to find a way to display them and make them dynamic bc I dont want to update the json all the time. But they exist.. i just need to call them from the User directory
Alr Im Finally done with PDF, txt and Image processing!!! I took a while to perfect them so they looked kinda decent and they do now.. Bonus: There’s Zoom for the images with the scroll wheel so that’s nice. I guess Im done with 1.0 for now :) Now what I have to do is make the windows spawn differently so that they dont stack exatly on top of each other… Maybe by making them appear in a random position.. And also they’re no clipping from the screen if you drag them too far so.. gotta fix that too.. But overall.. gud :)
Ships:
WinkOS V1.0 is a pretty basic OS, it has directories and files for ppl to test them out while i release future versions of WinkOS but… Im proud to say that I made a “boot” sequence and a login button with only one user (for now..), and it has folders and files for ppl to explore the filesystem and how’s it going… I added a few features, including text file (txt), pdf file and image file processing so you can actually see their contents displayed on their own windows upon opening. A cool feature is the scroll zoom for images, although there’s more to come since I want WinkOS to be some sort of “archive” or promotional virtual OS for my music, the media I make and more things that will be coming soon… :) So here it is! Welcome to WinkOS, and I promise next version will at least have a Wallpaper lol...
|
1793253235.7775006
|
1793339635.7775006
|
|
16965
|
My Website by @Luke42 | Stardance
|
Luke42
|
1
|
9.0
|
55
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T00:48:39Z", "hours": 9.0, "multiplier": 6.34, "payout": 55, "blessing": "neutral", "text": "I’ve been wanting to make a website for myself for awhile without AI, so without further ado, here it is! I designed this like a command line because I thought it would be cool. I don’t have that much experience in frontend web dev, so I learned a lot over the course of making this. This was fully made on HC spaces on my school chromebook during my free time in school lol Sorry for the massive devlog I didn’t know which program I wanted to ship this to and I picked this 6 hrs in I hope you guys like it!", "repo": "https://github.com/GoatTech-42/my-website/", "demo": "https://lukeevanson.com"}]...
|
[{"post_id": 72455, "ts": "202 [{"post_id": 72455, "ts": "2026-09-23T00:38:59Z", "hours": 0.3314, "text": "Just finished up the project and finalized readme and stuff and added secret commands disclaimer thingy in help command"}, {"post_id": 72392, "ts": "2026-09-22T20:17:10Z", "hours": 1.0061, "text": "FIXED CUSTOM CURSOR and also like added more comments for code readibility and stuff and also did a ton of fixes i know you cant see the custom cursor but im coding this on a school chromebook in school so the screenshot tool is buns for instance i fixed css styles that i broke and stuff"}, {"post_id": 72274, "ts": "2026-09-22T15:47:42Z", "hours": 0.8889, "text": "I removed the glow effect cause my friend said it looked ai generated, I added up and down command history, and added the sources thingy"}, {"post_id": 71885, "ts": "2026-09-21T18:11:33Z", "hours": 6.4519, "text": "Ok so basically, I did almost the whole site. For the first hour, I got the background set up and the CSS border and container created. I also imported the custom cmd terminal font. I also worked for like forever on making the colors change based on the seasons and particles (this is worked on progressively throughout the project). The second hour, I created the heading and the placeholders for the typing area, along with starting on the typing input blinking underscore thingy. The third hour, I finished the blinking caret underscore thing and started sending inputs to the javascript. I also created the output field. The 4th hour, I created the typing animation for the output box with a JS function and CSS. The 5th hour, I got a ton of commands working, and found some random website with a good css glow effect. The last bit of time I spent quite a bit getting some games working because I’m addicted, and a little more CSS. (sorry I lowk was working on this just for a new website’s sake but decided to submit it)"}]...
|
Title: My Website by @Luke42 | Stardance
Devlogs: Title: My Website by @Luke42 | Stardance
Devlogs:
Ok so basically, I did almost the whole site. For the first hour, I got the background set up and the CSS border and container created. I also imported the custom cmd terminal font. I also worked for like forever on making the colors change based on the seasons and particles (this is worked on progressively throughout the project). The second hour, I created the heading and the placeholders for the typing area, along with starting on the typing input blinking underscore thingy. The third hour, I finished the blinking caret underscore thing and started sending inputs to the javascript. I also created the output field. The 4th hour, I created the typing animation for the output box with a JS function and CSS. The 5th hour, I got a ton of commands working, and found some random website with a good css glow effect. The last bit of time I spent quite a bit getting some games working because I’m addicted, and a little more CSS. (sorry I lowk was working on this just for a new website’s sake but decided to submit it)
I removed the glow effect cause my friend said it looked ai generated, I added up and down command history, and added the sources thingy
FIXED CUSTOM CURSOR and also like added more comments for code readibility and stuff and also did a ton of fixes i know you cant see the custom cursor but im coding this on a school chromebook in school so the screenshot tool is buns for instance i fixed css styles that i broke and stuff
Just finished up the project and finalized readme and stuff and added secret commands disclaimer thingy in help command
Ships:
I’ve been wanting to make a website for myself for awhile without AI, so without further ado, here it is! I designed this like a command line because I thought it would be cool. I don’t have that much experience in frontend web dev, so I learned a lot over the course of making this. This was fully made on HC spaces on my school chromebook during my free time in school lol Sorry for the massive devlog I didn’t know which program I wanted to ship this to and I picked this 6 hrs in I hope you guys like it!...
|
1793152612.5192597
|
1793239012.5192597
|
|
16971
|
Hackpad-gaming by @Jackelliemolly | Stardance
|
Jackelliemolly
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T10:16:24Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made a hackpad with a 3x3 key matrix, LEDs, an OLED display, and a rotary encoder. I have made it so that it can help me play my games easier by macros for my games on it. It has 2 key layers, which allows me to have more options for macros to use. I have had some challenges such as learning KiCad and Fusion, as well as losing my PCB to a crash, but i am happy with my final design.", "repo": "https://github.com/Jhusky730/Hackpad-gaming", "demo": ""}]...
|
[{"post_id": 11868, "ts": "202 [{"post_id": 11868, "ts": "2026-06-19T10:06:28Z", "hours": 0.4214, "text": "I have now finished my firmware."}, {"post_id": 10877, "ts": "2026-06-17T20:38:44Z", "hours": 0.3056, "text": "I have now created the model for my case. It clamps the CPB into place and is screwed together"}, {"post_id": 10801, "ts": "2026-06-17T18:31:34Z", "hours": 0.4739, "text": "Despite accidentally wiring my LEDs to 3V3 instead of 5V i have finished my PCB"}, {"post_id": 10743, "ts": "2026-06-17T17:07:51Z", "hours": 0.2867, "text": "Lost my PCB to a crash without backups :(. I have to recreate it now"}, {"post_id": 10685, "ts": "2026-06-17T15:26:12Z", "hours": 1.4072, "text": "I have designed the schematic for my hackpad. It contains a 3x3 key matrix, an OLED screen and a rotary encoder."}]...
|
Title: Hackpad-gaming by @Jackelliemolly | Stardan Title: Hackpad-gaming by @Jackelliemolly | Stardance
Devlogs:
I have designed the schematic for my hackpad. It contains a 3x3 key matrix, an OLED screen and a rotary encoder.
Lost my PCB to a crash without backups :(. I have to recreate it now
Despite accidentally wiring my LEDs to 3V3 instead of 5V i have finished my PCB
I have now created the model for my case. It clamps the CPB into place and is screwed together
I have now finished my firmware.
Ships:
I have made a hackpad with a 3x3 key matrix, LEDs, an OLED display, and a rotary encoder. I have made it so that it can help me play my games easier by macros for my games on it. It has 2 key layers, which allows me to have more options for macros to use. I have had some challenges such as learning KiCad and Fusion, as well as losing my PCB to a crash, but i am happy with my final design....
|
1793123645.466382
|
1793210045.466382
|
|
17000
|
Opening Knowledge by @stashm10 | Stardance
|
stashm10
|
1
|
6.24
|
38
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T04:53:37Z", "hours": 2.0, "multiplier": 17.21, "payout": 38, "blessing": "neutral", "text": "I made a fun chess game, specifically, a chess opening game, Chession. How it works is simple. A position from a famous chess opening is shown on the board, and you have to guess which opening it is. The opening is selected from a list of 25, and the board renders the position after move 10 (20 plies). You type a guess or pick from a list that filters as you type. If your guess is wrong, the board steps back two plies (one full move) and shows an earlier position as a hint. You get 5 guesses total. Each wrong guess reveals more of the position’s history, making the next guess easier. The cool part is that there are so many openings (well, 25 for now), so you can have multiple attempts. Unlike Wordle or other guessing games, you dont have to wait 24 hours to play. It was difficult setting up the chess board, the pieces, and piece animation, however I made it work. The trickiest part was animating between positions when going back, since each wrong guess jumps the board back two plies rather than one. I solved this by stepping through each half-move individually and animating the piece slide for every step, rather than animating directly from the start position to the end position. This keeps the motion readable even when skipping multiple moves. I hope in the future I can add more openings, and vartions of popular openings, that way I can make it more difficult :) The idea is just a simple game for all types of chess players, a chess version of Wordle… if that makes sense. Enjoy!", "repo": "https://github.com/stashm10/Chession", "demo": "https://stashm10.github.io/Chession/"}]...
|
[{"post_id": 12946, "ts": "202 [{"post_id": 12946, "ts": "2026-06-21T05:51:25Z", "hours": 4.2428, "text": "Devlog#2 I decided to add some more features to make this game more accessible. The main feature that I added was a difficulty section. How it works: After selecting “let’s play” you get the option to pick the “normal” or “grandmaster” difficulty. You can easily tell that the grandmaster difficulty is the harder one by the intimidating cartoon picture next to it (I did use AI to make that since I am not good at drawing). As the game grew, I noticed that chess puzzles and openings can be incredibly brutal if you do not know the exact lines, which often leads to quick frustration. On the flip side, making the game universally easier takes away the competitive edge that chess veterans look for. I wanted to bridge this gap so casual players can learn without getting punished immediately while hardcore players can still experience a strict challenge. Grandmaster mode offers the classic, strict experience with standard guess limits and only allows you to step two moves back on your final guess to try and correct your line. To make things more forgiving, Normal mode adds an extra lifeline giving you one more guess than usual, and it allows a deeper lookback of four moves instead of two on your final guess. This extra context helps players re-visualize where their theory went wrong and successfully find the right continuation. Looking ahead, now that the core difficulty framework is in place, I am focusing on content depth and progression. First, I plan to significantly expand the library of chess openings and variations. To balance out the difficulty, I might limit the pool of openings in Normal mode to more common, foundational lines while increasing them in the Grandmaster section to unleash rare, highly theoretical variations that require deep knowledge. I am also looking into implementing a login system to keep track of progress, save personal stats, and track which openings players have mastered. Along with user accounts, I want to introduce a potential leaderboard so players can see how their scores stack up against the rest of the community. The update is live right now, so please try it out for yourself and and let me know if you have any questions or feedback."}, {"post_id": 10425, "ts": "2026-06-17T04:09:17Z", "hours": 2.2156, "text": "Chession Devlog #1 I built a chess opening guessing game. The idea: a position from a famous chess opening is shown on the board, and you have to guess which opening it is. How it works A random opening is selected from a list of 25, and the board renders the position after move 10 (20 plies). You type a guess or pick from a list that filters as you type. If your guess is wrong, the board steps back one move (one move for black and one move for white) and shows an earlier position as a hint. You get 5 guesses total. Each wrong guess reveals more of the position’s history, making the next guess easier. What I’ve built so far Static board rendering using FEN-style positions generated from chess.js Move validation and position-building logic using chess.js -An animated piece-slide transition when navigating between hint positions, instead of just snapping Autocomplete with keyboard navigation (arrow keys, enter to select) -A guess history display showing correct/wrong attempts -Navigation buttons (and arrow keys) to move between all hint positions you’ve unlocked, not just the latest one -A welcome modal explaining the rules A reload-confirmation dialog so accidental refreshes don’t wipe progress mid-game Animating the hints The trickiest part was animating between positions when going back, since each wrong guess jumps the board back two plies rather than one. I solved this by stepping through each half-move individually and animating the piece slide for every step, rather than animating directly from the start position to the end position. This keeps the motion readable even when skipping multiple moves. What’s next I want to expand from 25 openings to 100+, including variations of openings that are already in the game (e.g. multiple lines within the Sicilian Defense, not just one). I also think the hinting system could be reworked. Stepping back through earlier moves might be too easy a hint, since recognizable patterns persist even a few moves back. I’m considering alternatives, like instead revealing partial information (e.g. only the pawn structure, or only the piece types without full positions) rather than rewinding the whole position. In short, this is a very rough draft, and simply a fun project for me. If anyone here knows chess and has any ideas or comments, please let me know. Thanks!! live at: https://stashm10.github.io/Chession/"}]...
|
Title: Opening Knowledge by @stashm10 | Stardance
Title: Opening Knowledge by @stashm10 | Stardance
Devlogs:
Chession Devlog #1 I built a chess opening guessing game. The idea: a position from a famous chess opening is shown on the board, and you have to guess which opening it is. How it works A random opening is selected from a list of 25, and the board renders the position after move 10 (20 plies). You type a guess or pick from a list that filters as you type. If your guess is wrong, the board steps back one move (one move for black and one move for white) and shows an earlier position as a hint. You get 5 guesses total. Each wrong guess reveals more of the position’s history, making the next guess easier. What I’ve built so far Static board rendering using FEN-style positions generated from chess.js Move validation and position-building logic using chess.js -An animated piece-slide transition when navigating between hint positions, instead of just snapping Autocomplete with keyboard navigation (arrow keys, enter to select) -A guess history display showing correct/wrong attempts -Navigation buttons (and arrow keys) to move between all hint positions you’ve unlocked, not just the latest one -A welcome modal explaining the rules A reload-confirmation dialog so accidental refreshes don’t wipe progress mid-game Animating the hints The trickiest part was animating between positions when going back, since each wrong guess jumps the board back two plies rather than one. I solved this by stepping through each half-move individually and animating the piece slide for every step, rather than animating directly from the start position to the end position. This keeps the motion readable even when skipping multiple moves. What’s next I want to expand from 25 openings to 100+, including variations of openings that are already in the game (e.g. multiple lines within the Sicilian Defense, not just one). I also think the hinting system could be reworked. Stepping back through earlier moves might be too easy a hint, since recognizable patterns persist even a few moves back. I’m considering alternatives, like instead revealing partial information (e.g. only the pawn structure, or only the piece types without full positions) rather than rewinding the whole position. In short, this is a very rough draft, and simply a fun project for me. If anyone here knows chess and has any ideas or comments, please let me know. Thanks!! live at: https://stashm10.github.io/Chession/
Devlog#2 I decided to add some more features to make this game more accessible. The main feature that I added was a difficulty section. How it works: After selecting “let’s play” you get the option to pick the “normal” or “grandmaster” difficulty. You can easily tell that the grandmaster difficulty is the harder one by the intimidating cartoon picture next to it (I did use AI to make that since I am not good at drawing). As the game grew, I noticed that chess puzzles and openings can be incredibly brutal if you do not know the exact lines, which often leads to quick frustration. On the flip side, making the game universally easier takes away the competitive edge that chess veterans look for. I wanted to bridge this gap so casual players can learn without getting punished immediately while hardcore players can still experience a strict challenge. Grandmaster mode offers the classic, strict experience with standard guess limits and only allows you to step two moves back on your final guess to try and correct your line. To make things more forgiving, Normal mode adds an extra lifeline giving you one more guess than usual, and it allows a deeper lookback of four moves instead of two on your final guess. This extra context helps players re-visualize where their theory went wrong and successfully find the right continuation. Looking ahead, now that the core difficulty framework is in place, I am focusing on content depth and progression. First, I plan to significantly expand the library of chess openings and variations. To balance out the difficulty, I might limit the pool of openings in Normal mode to more common, foundational lines while increasing them in the Grandmaster section to unleash rare, highly theoretical variations that require deep knowledge. I am also looking into implementing a login system to keep track of progress, save personal stats, and track which openings players have mastered. Along with user accounts, I want to introduce a potential leaderboard so players can see how their scores stack up against the rest of the community. The update is live right now, so please try it out for yourself and and let me know if you have any questions or feedback.
Ships:
I made a fun chess game, specifically, a chess opening game, Chession. How it works is simple. A position from a famous chess opening is shown on the board, and you have to guess which opening it is. The opening is selected from a list of 25, and the board renders the position after move 10 (20 plies). You type a guess or pick from a list that filters as you type. If your guess is wrong, the board steps back two plies (one full move) and shows an earlier position as a hint. You get 5 guesses total. Each wrong guess reveals more of the position’s history, making the next guess easier. The cool part is that there are so many openings (well, 25 for now), so you can have multiple attempts. Unlike Wordle or other guessing games, you dont have to wait 24 hours to play. It was difficult setting up the chess board, the pieces, and piece animation, however I made it work. The trickiest part was animating between positions when going back, since each wrong guess jumps the board back two plies rather than one. I solved this by stepping through each half-move individually and animating the piece slide for every step, rather than animating directly from the start position to the end position. This keeps the motion readable even when skipping multiple moves. I hope in the future I can add more openings, and vartions of popular openings, that way I can make it more difficult :) The idea is just a simple game for all types of chess players, a chess version of Wordle… if that makes sense. Enjoy!...
|
1793267238.2373827
|
1793353638.2373827
|
|
17002
|
Personal Website by @Farhan-Hamim | Stardance
|
Farhan-Hamim
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T03:57:48Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal website in Django, a Python framework for Web dev. Outside of the actual code, which was a combination of Python, HTML, CSS, and some JavaScript, one of the most difficult things was getting it live. Because GitHub pages only run static files such as HTML ones, it can’t display the motions and fluidity of Django. So I chose Render, but I ran into many problems with a tool I had never used before. After making some adjusts, like adding requirements and runtime text files, the website was live! Overall, I liked the experience of making a website as a way to express myself.", "repo": "https://github.com/Farhanhamim1111/Personal-Website---StarDance", "demo": "https://farhan-hamim.hackclub.app/"}]...
|
[{"post_id": 18944, "ts": "202 [{"post_id": 18944, "ts": "2026-06-30T03:50:44Z", "hours": 7.5661, "text": "Finally managed to finish my website. One of the biggest issues I encountered was designing the ‘contacts’ page. The problem was more about making it look consistent than any functionality difficulties."}]...
|
Title: Personal Website by @Farhan-Hamim | Stardan Title: Personal Website by @Farhan-Hamim | Stardance
Devlogs:
Finally managed to finish my website. One of the biggest issues I encountered was designing the ‘contacts’ page. The problem was more about making it look consistent than any functionality difficulties.
Ships:
I made a personal website in Django, a Python framework for Web dev. Outside of the actual code, which was a combination of Python, HTML, CSS, and some JavaScript, one of the most difficult things was getting it live. Because GitHub pages only run static files such as HTML ones, it can’t display the motions and fluidity of Django. So I chose Render, but I ran into many problems with a tool I had never used before. After making some adjusts, like adding requirements and runtime text files, the website was live! Overall, I liked the experience of making a website as a way to express myself....
|
1793260436.094533
|
1793346836.094533
|
|
17021
|
DnD bot by @ximotu | Stardance
|
ximotu
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T20:06:34Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a discord bot that you can use to roll digital dice. You can roll several sizes of dice and see all commands with /dnd-help. I found it a bit difficult to use systemctl with nest since I’ve never done that before, and got confused because I put my project in /root at first. I’m proud of having learned out all of this about virtual machines, ssh, apis, nodeJS and so much more! This project should work 24/7. Keep in mind that only /d20 tracks critical hits as of right now.", "repo": "https://github.com/ximo-tu/dnd-slack-bot", "demo": "https://hackclub.slack.com/archives/C0BA6T4PG03"}]...
|
[{"post_id": 8278, "ts": "2026 [{"post_id": 8278, "ts": "2026-06-13T19:23:26Z", "hours": 0.6042, "text": "We now have support for every dice size in the actual Dungeons & Dragons"}, {"post_id": 7761, "ts": "2026-06-12T23:34:21Z", "hours": 0.5614, "text": "I made a DnD bot! Currently just supports some simple dice rolls but more to come soon."}]...
|
Title: DnD bot by @ximotu | Stardance
Devlogs:
I Title: DnD bot by @ximotu | Stardance
Devlogs:
I made a DnD bot! Currently just supports some simple dice rolls but more to come soon.
We now have support for every dice size in the actual Dungeons & Dragons
Ships:
I made a discord bot that you can use to roll digital dice. You can roll several sizes of dice and see all commands with /dnd-help. I found it a bit difficult to use systemctl with nest since I’ve never done that before, and got confused because I put my project in /root at first. I’m proud of having learned out all of this about virtual machines, ssh, apis, nodeJS and so much more! This project should work 24/7. Keep in mind that only /d20 tracks critical hits as of right now....
|
1793256998.5377269
|
1793343398.5377269
|
|
17029
|
Pronoun Palace Music Player by @xanderath | Starda Pronoun Palace Music Player by @xanderath | Stardance...
|
xanderath
|
1
|
3.0
|
20
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T05:02:13Z", "hours": 3.0, "multiplier": 5.8, "payout": 20, "blessing": "neutral", "text": "As this was one of the first mods made for this game, I had to learn how the game works and how to make my mod load.", "repo": "https://github.com/Emarald64/music_player", "demo": "https://youtu.be/Y2NHza-pziE"}]...
|
[{"post_id": 9729, "ts": "2026 [{"post_id": 9729, "ts": "2026-06-16T04:50:45Z", "hours": 0.4364, "text": "added proper sprites for the cassette"}, {"post_id": 8417, "ts": "2026-06-14T00:03:20Z", "hours": 0.5031, "text": "Added animations to buttons and sound effects for clicks and the cassette flip"}, {"post_id": 8320, "ts": "2026-06-13T20:42:24Z", "hours": 2.4183, "text": "added title screen button, cassette player sprite, and music playing logic. Also made the regular songs play on side A and the the shadow songs on side B"}]...
|
Title: Pronoun Palace Music Player by @xanderath | Title: Pronoun Palace Music Player by @xanderath | Stardance
Devlogs:
added title screen button, cassette player sprite, and music playing logic. Also made the regular songs play on side A and the the shadow songs on side B
Added animations to buttons and sound effects for clicks and the cassette flip
added proper sprites for the cassette
Ships:
As this was one of the first mods made for this game, I had to learn how the game works and how to make my mod load....
|
1793285338.8339543
|
1793371738.8339543
|
|
17035
|
Ware-on by @Lemion | Stardance
|
Lemion
|
1
|
18.96
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T14:26:42Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "After way too long of trying to get basalt to stop crashing (im just stupid, basalt is a perfectly good UI library) I bring to you: warehouse management suite for ComputerCraft. Guides for using its “API” over rednet will be in readme when i get to it. Currently it does basically everything you need a storage system to do: -chuck items from input chest to a storage chest -chuck items from a storage chest to the output chest “Try Project” just leads you to a youtube video of a demo because I can’t get it to work with the copy-cat computer emulator (besides I dont think it supports peripherals anyway).", "repo": "https://github.com/LemionLaLemon/ware-on", "demo": "https://github.com/LemionLaLemon/ware-on/releases"}]...
|
[{"post_id": 25641, "ts": "202 [{"post_id": 25641, "ts": "2026-07-10T01:39:54Z", "hours": 1.965, "text": "Fixed issue #1 (large warehouses take longer than the timeout to index and would fail) No further comments, just, one simple fix so A new release has been pushed to github"}, {"post_id": 13089, "ts": "2026-06-21T12:52:15Z", "hours": 5.5503, "text": "Started and finished the software for the access computers. You can actually request items and have it be shoved into the barrel associated with the computer. And that’s also the last thing to do on this LOOONNGGGG list of stuff."}, {"post_id": 11167, "ts": "2026-06-18T08:03:30Z", "hours": 3.1186, "text": "Finished the ACTUAL server to get stuff from dropoff stations and move it into storage automatically, and when requested from an access station, move items from storage to that access station This is basically all warehouse management has to do anyways"}, {"post_id": 10734, "ts": "2026-06-17T16:49:19Z", "hours": 2.0536, "text": "finished setup program for the warehouse server"}, {"post_id": 7434, "ts": "2026-06-12T11:42:52Z", "hours": 3.7472, "text": "Finished the warehouse editor you can now pick inventories to add to the warehouse assign an inventory a type out of dropoff station, storage, and access station assign a computer to an access station inventory save warehouse assignments to a .ware file (it’s just json)"}, {"post_id": 7291, "ts": "2026-06-12T04:47:56Z", "hours": 2.8306, "text": "Added splash screen UI and the path and inventory pages for New Warehouse the path even has data validation!!!1!11!"}]...
|
Title: Ware-on by @Lemion | Stardance
Devlogs:
Ad Title: Ware-on by @Lemion | Stardance
Devlogs:
Added splash screen UI and the path and inventory pages for New Warehouse the path even has data validation!!!1!11!
Finished the warehouse editor you can now pick inventories to add to the warehouse assign an inventory a type out of dropoff station, storage, and access station assign a computer to an access station inventory save warehouse assignments to a .ware file (it’s just json)
finished setup program for the warehouse server
Finished the ACTUAL server to get stuff from dropoff stations and move it into storage automatically, and when requested from an access station, move items from storage to that access station This is basically all warehouse management has to do anyways
Started and finished the software for the access computers. You can actually request items and have it be shoved into the barrel associated with the computer. And that’s also the last thing to do on this LOOONNGGGG list of stuff.
Fixed issue #1 (large warehouses take longer than the timeout to index and would fail) No further comments, just, one simple fix so A new release has been pushed to github
Ships:
After way too long of trying to get basalt to stop crashing (im just stupid, basalt is a perfectly good UI library) I bring to you: warehouse management suite for ComputerCraft. Guides for using its “API” over rednet will be in readme when i get to it. Currently it does basically everything you need a storage system to do: -chuck items from input chest to a storage chest -chuck items from a storage chest to the output chest “Try Project” just leads you to a youtube video of a demo because I can’t get it to work with the copy-cat computer emulator (besides I dont think it supports peripherals anyway)....
|
1793263848.6380625
|
1793350248.6380625
|
|
17040
|
Personal Dashboard! by @evadiva | Stardance
|
evadiva
|
1
|
20.89
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T19:31:55Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This started as Canvas won’t remind me about anything type project and turned into way more hours than I meant to spend on it lol. I hope it’s useful to you too! The problem Canvas doesn’t proactively tell you about new assignments. You either check it manually and constantly, or you miss things. On top of that, the tools people actually use to manage a semester (calendar, reading list, task list, project tracker) live in five different apps with zero connection between them. This is a self-hosted, single-user desktop app that pulls all of that into one place and checks Canvas automatically so the user doesn’t have to. How to test it Download the .dmg from the Releases page and open it. Since this is an unsigned build (no Apple Developer account), macOS Gatekeeper will block a normal double-click — right-click the app → Open → confirm. This is documented in the README. First launch prompts for a name (used in the time-based greeting) and Canvas credentials. There’s a collapsible “How do I get this?” section in the onboarding screen itself that walks through generating a Canvas personal access token step by step — no need to leave the app or guess. Once connected, the dashboard populates with real Canvas assignment data, polling automatically in the background. From there, everything else is explorable: add a task to the checklist, add a reading list item by pasting a book URL (auto-fetches the cover), add a project, set a monthly goal, add a notable event with a date, start the countdown timer, drop a personal photo into the layout. The layout itself is customizable — drag widgets to reorder them, drag them between rows, and the grid auto-adjusts to fit. That’s configurable further in Settings if someone wants more control over row/column structure. Google Calendar integration is optional and also has its own in-app walkthrough for generating OAuth credentials, since that’s the one part of setup that requires an external Google Cloud step. Three major QoL improvements Automatic assignment tracking replaces manual checking. Canvas gets polled on a schedule and the dashboard reflects new assignments without the user having to open Canvas at all. One dashboard instead of five apps. Assignments, calendar, reading list, tasks, projects, goals, and a timer all live in a single always-open window instead of scattered across separate tools and browser tabs. A layout that’s actually customizable, not fixed. Most dashboard tools hand you a template. This one lets you drag widgets into your own arrangement, resize rows, and drop in your own photos, so the tool ends up looking and working like something built for the person using it, not a generic productivity template. Scope note This is intentionally a local, single-user tool; there’s no server, no accounts system, no multi-user support. Each person who runs it connects their own Canvas token and their own Google Calendar credentials, entered once during setup and stored securely on their own machine.", "repo": "https://github.com/evadiva3/personal-dashboard", "demo": "https://github.com/evadiva3/personal-dashboard/releases/tag/v0.3.1"}]...
|
[{"post_id": 63369, "ts": "202 [{"post_id": 63369, "ts": "2026-09-07T04:40:16Z", "hours": 1.89, "text": "release fix"}, {"post_id": 29108, "ts": "2026-07-15T19:27:50Z", "hours": 0.6225, "text": "devlog 007: v2 shipped this session. The launch rendering bug got fixed. Saved checklist items, along with the other affected widgets, were only appearing after new input was added rather than on initial load. The root cause was a gap between the initial data fetch and the render call — the fetch was either running before the backend health check resolved, or the render function was only ever being triggered from the “add” success path and never from the initial dashboard load. Once that was corrected, everything populates immediately on launch the way it should have from the start. Spotify got the redesign it needed. The old full iframe embed rendered Spotify’s own boxed dark player UI, which clashed with the rest of the dashboard and took up more visual weight than the widget deserved. It’s now a minimal custom player built on Spotify’s oEmbed API — just cover art and a title, no chrome, no background box, sitting flush against the card. Clicking the cover opens the playlist in the browser instead of playing inline, which is a real tradeoff, but it’s the right one for how small this widget is meant to be. Both fixes went through the full release cycle again: verified in a real running app rather than just read from source, rebuilt with cargo tauri build, and repackaged as a fresh .dmg. The build is tagged and out as v0.2.0."}, {"post_id": 28704, "ts": "2026-07-15T03:45:00Z", "hours": 3.6783, "text": "devlog 006: This session closed out the zone layout work and pushed the project to a shippable state. Zone capacity enforcement went in first. Zones now auto-expand their column count when a widget is dragged into a full row rather than rejecting the drop, capped at 4 columns before overflow gets pushed to the next zone. The reverse case also got fixed: when a widget is dragged back out of a zone that had auto-expanded to fit it, the zone shrinks back down and the remaining widgets fill the space instead of leaving a gap. That required tracking which zones were auto-expanded versus manually set in Settings, so a shrink never undoes an intentional user choice. The palette shifted from dark sepia to a lighter parchment tone this session, then got a second pass after the first attempt left text nearly unreadable against the new light background. Text colors moved to near-black warm browns, and cards got a soft brown drop shadow to give them separation from the background. A zone count mismatch between the dashboard and settings panel turned out to be two different code paths reading from two different sources of truth instead of one shared value. Fixed by routing both through the same localStorage key. The bulk of the session was a full release pass. Every feature got audited end to end, name capture and time-based greetings were added to onboarding, collapsible help sections were added explaining how to get a Canvas token and Google OAuth credentials, and the first production build shipped as an unsigned .dmg since there’s no Apple Developer account. The README got rewritten from scratch for a stranger with zero context, including the exact Gatekeeper workaround steps for opening an unsigned app on macOS. Two issues surfaced immediately after: saved checklist and widget data wasn’t rendering on launch, only appearing after new input was added, which turned out to be an initial-fetch-versus-render-on-add gap rather than a data problem. The Spotify widget also got flagged as visually heavy and is being replaced with a minimal cover-art-and-title player using Spotify’s oEmbed API instead of the full iframe. v0.2.0 is in progress to address both before the next release."}, {"post_id": 27360, "ts": "2026-07-12T21:05:09Z", "hours": 2.3975, "text": "devlog 005 This session was almost entirely layout architecture, which went through several pivots before landing somewhere that actually makes sense. The first attempt was free corner-drag resizing with a Canva-style harmonizer that would proportionally redistribute card widths after every drop or resize. The harmonizer worked in isolation but broke down in practice because SortableJS and flex-wrap fight each other on drop target resolution; the visual drop position and the DOM reorder disagree when cards have arbitrary widths. After two iterations trying to patch that, I scrapped it. The replacement is a zone-based layout system. The dashboard is divided into horizontal zones, each zone being an independent row with its own column count and height. Zone 1 might have 3 columns, zone 2 might have 2, zone 3 might have 4; each is configured independently in the settings panel. Widgets drag freely within and between zones via SortableJS with cross-group drag enabled. The settings panel has a miniature zone editor with draggable column dividers to set proportional widths, height inputs per zone, and add/remove zone controls. All changes apply live to the dashboard without a save button. Zone definitions persist to localStorage, widget positions to the SQLite layout table. The immediate open issue is that zones don’t currently enforce their column cap, so widgets can overflow past the zone boundary when dragged in. The fix is straightforward: SortableJS onAdd callback checks current child count against cols, bounces the card back to the source zone if the zone is full, and briefly flashes the target zone border to signal the rejection. Settings col count reductions that would orphan widgets push the overflow to the next zone automatically. That fix is going in next. Photos are first-class zone items. Height snapping (200/400/500px presets) applies via right-click menu. The snap guide lines and settings inputs from the previous session carried over."}, {"post_id": 21884, "ts": "2026-07-04T01:52:16Z", "hours": 1.5939, "text": "Devlog 004: This session was mostly infrastructure and debugging rather than new features, but it cleared several blockers that had been compounding across sessions. The backend crash loop got permanently fixed. The root cause was _exit_if_orphaned in the Python process firing on every Rust hot-reload during npm run tauri dev. When Cargo rebuilds the Tauri binary, the parent PID relationship changes momentarily, which was triggering the orphan detection and killing Python deliberately with exit code 0. The monitor thread interpreted that as a clean exit and did not restart it. The fix was disabling orphan detection entirely in dev mode via the CANVAS_HUB_DEV environment variable, and switching the production check from getppid() == 1 to os.kill(parent_pid, 0) for a more robust existence check. The Rust monitor thread also got crash logging via dirs::home_dir() so it is no longer dependent on the Tauri AppHandle being available from a background thread. Tile resizing and photo row contagion were also fixed this session, and the actual root causes turned out to be completely different from where previous fixes were looking. The resize buttons were never broken at the event handling level. The real problem was an init race condition: renderPhotos() was fetching /photos before the backend was up, throwing an unhandled error, and killing the rest of initDashboard() before initResizeControls() ever ran. A waitForBackend() health poll now gates all data fetches, so resize listeners are always wired up regardless of how long the backend takes to start. The photo row contagion was caused by height: 100% on the photo resolving to the image’s natural aspect-ratio height during grid track sizing, inflating the row for every neighbor. Switching to position: absolute; inset: 0 on the image fixes the height to the tile bounds and removes it from the track sizing calculation entirely. Goals this month is now its own separate widget card, extracted from the assignments card where it had been living under a rule separator."}, {"post_id": 20210, "ts": "2026-07-01T19:16:43Z", "hours": 2.5761, "text": "devlog #004: This session was a chaotic debugging spiral. I set out to finish the draggable grid, but the layout engine absolutely broke.In trying to fix some initial resizing glitches, I overcorrected so hard that I accidentally locked the entire grid down. Nothing could resize at all. Once I untangled that, I hit a new nightmare: whenever I tried to drag a widget, it would interpret the movement as a resize command and stretch wildly across the screen instead of moving.The fixes: 1. Unlocked the layout logic so widgets can actually scale again. 2. Fixed the drag vs. resize conflict. Now, dragging the header moves the widget smoothly, and edge-pulling handles the resizing. No more morphing. It was an exhausting troubleshooting session, but the grid is finally stable."}, {"post_id": 17407, "ts": "2026-06-28T05:30:17Z", "hours": 2.4019, "text": "devlog 003: personal dashboard Mostly a fixes session. Nothing new shipped but a lot of things that were broken or annoying got resolved. The calendar was the biggest one. It had been crammed into a half-width column sharing space with the timer and reading list, which made the weekly view basically unusable. It now takes up the full right two-thirds of the screen, which is what it needed to actually function as a calendar. Time blocks, day columns, navigation arrows, auto-scroll to the current hour on load. It looks right now. Google Calendar auth also finally works. The onboarding screen had appeared once, I hit “later,” and the flag that tracks whether it had been seen was permanently set with no way to reset it from the UI. A connect button in settings now clears that flag and shows the onboarding immediately, no restart needed. Went through the actual browser consent flow and it works: browser opens, redirect hits the loopback server, token stores correctly. Two bugs on the smaller side. The photo picker was freezing the app completely because the file dialog was running on the main Tauri thread using the blocking API variant instead of the async one. One-line fix once the cause was clear. The calendar time labels were getting clipped by overflow collapsing the absolute-positioned label column. Widening the column tracks from 36px to 48px cleared it. Spotify got shrunk. It was taking up a full-width row with nothing in it. Now it is a compact 80px cell in the top strip next to the timer and reading list, which is the right amount of space for it. Next session: draggable grid with persistent layout."}, {"post_id": 14807, "ts": "2026-06-24T01:31:56Z", "hours": 1.6436, "text": "devlog 002: personal dashboard The dashboard is starting to look good!!! The biggest change was pulling the pink theme entirely and replacing it with a warm sepia palette: dark brown base, aged gold accents, serif headers on everything. I wanted it to feel a little more academic. The layout also got reworked into an asymmetric bento grid, where Canvas takes up a tall left column, the calendar strip runs wide across the bottom right, and the smaller widgets fill in around them. New widgets added this session: a reading list that resolves book covers from whatever URL you paste in (it checks for an Open Graph image tag first, then falls back to the Google Books API if that fails), an active projects tracker, monthly goals that scope themselves to the current month without deleting older ones, notable events displayed as date pills, a countdown timer that fires a native desktop notification when it hits zero, and photo panels that slot into the bento grid as pure image tiles with no widget chrome around them. Spotify was simpler than expected. The embedded player works fine once you add Spotify’s domain to the Tauri Content Security Policy config. Without that one line, the iframe loads blank with no error, which took a minute to figure out. Google Calendar had been stuck because the onboarding screen appeared once, I dismissed it with “later,” and there was no way back to it. Connect and disconnect controls are now in the settings page, so that’s no longer a dead end. The one remaining item for Google Calendar is entering real credentials from the Google Cloud Console and completing an actual browser OAuth consent flow."}, {"post_id": 13491, "ts": "2026-06-22T02:42:16Z", "hours": 3.8283, "text": "devlog 001: personal dashboard got a working desktop app running by end of session. the whole point was to stop missing Canvas assignments; one screen, always open, checks automatically. backend is FastAPI running as a sidecar inside a Tauri shell, SQLite for storage, APScheduler polling Canvas every 30 minutes. token lives in the OS keychain, never the repo. first-run onboarding handles the whole flow. the bugs took most of the time. CORS was failing because Tauri dev mode sends a different webview origin than a production build; nothing in the docs tells you this. the /setup endpoint would silently hang because there was no timeout on the Canvas validation request. the dashboard never appeared after login because a display: flex rule was winning over the hidden attribute, so onboarding just stayed on screen even after auth worked fine. and at some point the app started spawning duplicate processes with separate backends, which needed single-instance enforcement to fix. real credentials work, assignments load from the live API, checklist survives restarts. it’s on GitHub. palette is plum and pink, pulled from my VS Code theme. next up is Google Calendar."}]...
|
Title: Personal Dashboard! by @evadiva | Stardance Title: Personal Dashboard! by @evadiva | Stardance
Devlogs:
devlog 001: personal dashboard got a working desktop app running by end of session. the whole point was to stop missing Canvas assignments; one screen, always open, checks automatically. backend is FastAPI running as a sidecar inside a Tauri shell, SQLite for storage, APScheduler polling Canvas every 30 minutes. token lives in the OS keychain, never the repo. first-run onboarding handles the whole flow. the bugs took most of the time. CORS was failing because Tauri dev mode sends a different webview origin than a production build; nothing in the docs tells you this. the /setup endpoint would silently hang because there was no timeout on the Canvas validation request. the dashboard never appeared after login because a display: flex rule was winning over the hidden attribute, so onboarding just stayed on screen even after auth worked fine. and at some point the app started spawning duplicate processes with separate backends, which needed single-instance enforcement to fix. real credentials work, assignments load from the live API, checklist survives restarts. it’s on GitHub. palette is plum and pink, pulled from my VS Code theme. next up is Google Calendar.
devlog 002: personal dashboard The dashboard is starting to look good!!! The biggest change was pulling the pink theme entirely and replacing it with a warm sepia palette: dark brown base, aged gold accents, serif headers on everything. I wanted it to feel a little more academic. The layout also got reworked into an asymmetric bento grid, where Canvas takes up a tall left column, the calendar strip runs wide across the bottom right, and the smaller widgets fill in around them. New widgets added this session: a reading list that resolves book covers from whatever URL you paste in (it checks for an Open Graph image tag first, then falls back to the Google Books API if that fails), an active projects tracker, monthly goals that scope themselves to the current month without deleting older ones, notable events displayed as date pills, a countdown timer that fires a native desktop notification when it hits zero, and photo panels that slot into the bento grid as pure image tiles with no widget chrome around them. Spotify was simpler than expected. The embedded player works fine once you add Spotify’s domain to the Tauri Content Security Policy config. Without that one line, the iframe loads blank with no error, which took a minute to figure out. Google Calendar had been stuck because the onboarding screen appeared once, I dismissed it with “later,” and there was no way back to it. Connect and disconnect controls are now in the settings page, so that’s no longer a dead end. The one remaining item for Google Calendar is entering real credentials from the Google Cloud Console and completing an actual browser OAuth consent flow.
devlog 003: personal dashboard Mostly a fixes session. Nothing new shipped but a lot of things that were broken or annoying got resolved. The calendar was the biggest one. It had been crammed into a half-width column sharing space with the timer and reading list, which made the weekly view basically unusable. It now takes up the full right two-thirds of the screen, which is what it needed to actually function as a calendar. Time blocks, day columns, navigation arrows, auto-scroll to the current hour on load. It looks right now. Google Calendar auth also finally works. The onboarding screen had appeared once, I hit “later,” and the flag that tracks whether it had been seen was permanently set with no way to reset it from the UI. A connect button in settings now clears that flag and shows the onboarding immediately, no restart needed. Went through the actual browser consent flow and it works: browser opens, redirect hits the loopback server, token stores correctly. Two bugs on the smaller side. The photo picker was freezing the app completely because the file dialog was running on the main Tauri thread using the blocking API variant instead of the async one. One-line fix once the cause was clear. The calendar time labels were getting clipped by overflow collapsing the absolute-positioned label column. Widening the column tracks from 36px to 48px cleared it. Spotify got shrunk. It was taking up a full-width row with nothing in it. Now it is a compact 80px cell in the top strip next to the timer and reading list, which is the right amount of space for it. Next session: draggable grid with persistent layout.
devlog #004: This session was a chaotic debugging spiral. I set out to finish the draggable grid, but the layout engine absolutely broke.In trying to fix some initial resizing glitches, I overcorrected so hard that I accidentally locked the entire grid down. Nothing could resize at all. Once I untangled that, I hit a new nightmare: whenever I tried to drag a widget, it would interpret the movement as a resize command and stretch wildly across the screen instead of moving.The fixes: 1. Unlocked the layout logic so widgets can actually scale again. 2. Fixed the drag vs. resize conflict. Now, dragging the header moves the widget smoothly, and edge-pulling handles the resizing. No more morphing. It was an exhausting troubleshooting session, but the grid is finally stable.
Devlog 004: This session was mostly infrastructure and debugging rather than new features, but it cleared several blockers that had been compounding across sessions. The backend crash loop got permanently fixed. The root cause was _exit_if_orphaned in the Python process firing on every Rust hot-reload during npm run tauri dev. When Cargo rebuilds the Tauri binary, the parent PID relationship changes momentarily, which was triggering the orphan detection and killing Python deliberately with exit code 0. The monitor thread interpreted that as a clean exit and did not restart it. The fix was disabling orphan detection entirely in dev mode via the CANVAS_HUB_DEV environment variable, and switching the production check from getppid() == 1 to os.kill(parent_pid, 0) for a more robust existence check. The Rust monitor thread also got crash logging via dirs::home_dir() so it is no longer dependent on the Tauri AppHandle being available from a background thread. Tile resizing and photo row contagion were also fixed this session, and the actual root causes turned out to be completely different from where previous fixes were looking. The resize buttons were never broken at the event handling level. The real problem was an init race condition: renderPhotos() was fetching /photos before the backend was up, throwing an unhandled error, and killing the rest of initDashboard() before initResizeControls() ever ran. A waitForBackend() health poll now gates all data fetches, so resize listeners are always wired up regardless of how long the backend takes to start. The photo row contagion was caused by height: 100% on the photo resolving to the image’s natural aspect-ratio height during grid track sizing, inflating the row for every neighbor. Switching to position: absolute; inset: 0 on the image fixes the height to the tile bounds and removes it from the track sizing calculation entirely. Goals this month is now its own separate widget card, extracted from the assignments card where it had been living under a rule separator.
devlog 005 This session was almost entirely layout architecture, which went through several pivots before landing somewhere that actually makes sense. The first attempt was free corner-drag resizing with a Canva-style harmonizer that would proportionally redistribute card widths after every drop or resize. The harmonizer worked in isolation but broke down in practice because SortableJS and flex-wrap fight each other on drop target resolution; the visual drop position and the DOM reorder disagree when cards have arbitrary widths. After two iterations trying to patch that, I scrapped it. The replacement is a zone-based layout system. The dashboard is divided into horizontal zones, each zone being an independent row with its own column count and height. Zone 1 might have 3 columns, zone 2 might have 2, zone 3 might have 4; each is configured independently in the settings panel. Widgets drag freely within and between zones via SortableJS with cross-group drag enabled. The settings panel has a miniature zone editor with draggable column dividers to set proportional widths, height inputs per zone, and add/remove zone controls. All changes apply live to the dashboard without a save button. Zone definitions persist to localStorage, widget positions to the SQLite layout table. The immediate open issue is that zones don’t currently enforce their column cap, so widgets can overflow past the zone boundary when dragged in. The fix is straightforward: SortableJS onAdd callback checks current child count against cols, bounces the card back to the source zone if the zone is full, and briefly flashes the target zone border to signal the rejection. Settings col count reductions that would orphan widgets push the overflow to the next zone automatically. That fix is going in next. Photos are first-class zone items. Height snapping (200/400/500px presets) applies via right-click menu. The snap guide lines and settings inputs from the previous session carried over.
devlog 006: This session closed out the zone layout work and pushed the project to a shippable state. Zone capacity enforcement went in first. Zones now auto-expand their column count when a widget is dragged into a full row rather than rejecting the drop, capped at 4 columns before overflow gets pushed to the next zone. The reverse case also got fixed: when a widget is dragged back out of a zone that had auto-expanded to fit it, the zone shrinks back down and the remaining widgets fill the space instead of leaving a gap. That required tracking which zones were auto-expanded versus manually set in Settings, so a shrink never undoes an intentional user choice. The palette shifted from dark sepia to a lighter parchment tone this session, then got a second pass after the first attempt left text nearly unreadable against the new light background. Text colors moved to near-black warm browns, and cards got a soft brown drop shadow to give them separation from the background. A zone count mismatch between the dashboard and settings panel turned out to be two different code paths reading from two different sources of truth instead of one shared value. Fixed by routing both through the same localStorage key. The bulk of the session was a full release pass. Every feature got audited end to end, name capture and time-based greetings were added to onboarding, collapsible help sections were added explaining how to get a Canvas token and Google OAuth credentials, and the first production build shipped as an unsigned .dmg since there’s no Apple Developer account. The README got rewritten from scratch for a stranger with zero context, including the exact Gatekeeper workaround steps for opening an unsigned app on macOS. Two issues surfaced immediately after: saved checklist and widget data wasn’t rendering on launch, only appearing after new input was added, which turned out to be an initial-fetch-versus-render-on-add gap rather than a data problem. The Spotify widget also got flagged as visually heavy and is being replaced with a minimal cover-art-and-title player using Spotify’s oEmbed API instead of the full iframe. v0.2.0 is in progress to address both before the next release.
devlog 007: v2 shipped this session. The launch rendering bug got fixed. Saved checklist items, along with the other affected widgets, were only appearing after new input was added rather than on initial load. The root cause was a gap between the initial data fetch and the render call — the fetch was either running before the backend health check resolved, or the render function was only ever being triggered from the “add” success path and never from the initial dashboard load. Once that was corrected, everything populates immediately on launch the way it should have from the start. Spotify got the redesign it needed. The old full iframe embed rendered Spotify’s own boxed dark player UI, which clashed with the rest of the dashboard and took up more visual weight than the widget deserved. It’s now a minimal custom player built on Spotify’s oEmbed API — just cover art and a title, no chrome, no background box, sitting flush against the card. Clicking the cover opens the playlist in the browser instead of playing inline, which is a real tradeoff, but it’s the right one for how small this widget is meant to be. Both fixes went through the full release cycle again: verified in a real running app rather than just read from source, rebuilt with cargo tauri build, and repackaged as a fresh .dmg. The build is tagged and out as v0.2.0.
release fix
Ships:
This started as Canvas won’t remind me about anything type project and turned into way more hours than I meant to spend on it lol. I hope it’s useful to you too! The problem Canvas doesn’t proactively tell you about new assignments. You either check it manually and constantly, or you miss things. On top of that, the tools people actually use to manage a semester (calendar, reading list, task list, project tracker) live in five different apps with zero connection between them. This is a self-hosted, single-user desktop app that pulls all of that into one place and checks Canvas automatically so the user doesn’t have to. How to test it Download the .dmg from the Releases page and open it. Since this is an unsigned build (no Apple Developer account), macOS Gatekeeper will block a normal double-click — right-click the app → Open → confirm. This is documented in the README. First launch prompts for a name (used in the time-based greeting) and Canvas credentials. There’s a collapsible “How do I get this?” section in the onboarding screen itself that walks through generating a Canvas personal access token step by step — no need to leave the app or guess. Once connected, the dashboard populates with real Canvas assignment data, polling automatically in the background. From there, everything else is explorable: add a task to the checklist, add a reading list item by pasting a book URL (auto-fetches the cover), add a project, set a monthly goal, add a notable event with a date, start the countdown timer, drop a personal photo into the layout. The layout itself is customizable — drag widgets to reorder them, drag them between rows, and the grid auto-adjusts to fit. That’s configurable further in Settings if someone wants more control over row/column structure. Google Calendar integration is optional and also has its own in-app walkthrough for generating OAuth credentials, since that’s the one part of setup that requires an external Google Cloud step. Three major QoL improvements Automatic assignment tracking replaces manual checking. Canvas gets polled on a schedule and the dashboard reflects new assignments without the user having to open Canvas at all. One dashboard instead of five apps. Assignments, calendar, reading list, tasks, projects, goals, and a timer all live in a single always-open window instead of scattered across separate tools and browser tabs. A layout that’s actually customizable, not fixed. Most dashboard tools hand you a template. This one lets you drag widgets into your own arrangement, resize rows, and drop in your own photos, so the tool ends up looking and working like something built for the person using it, not a generic productivity template. Scope note This is intentionally a local, single-user tool; there’s no server, no accounts system, no multi-user support. Each person who runs it connects their own Canvas token and their own Google Calendar credentials, entered once during setup and stored securely on their own machine....
|
1793130522.6083477
|
1793216922.6083477
|
|
17079
|
Roberto Rotate-o by @dylankchristel | Stardance
|
dylankchristel
|
1
|
7.73
|
37
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T01:00:25Z", "hours": 6.0, "multiplier": 5.0, "payout": 37, "blessing": "neutral", "text": "I built a robot car that spins. Roberto Rotate-o’s primary mission is to spread whimsy and joy. He runs on an Arduino and some scrapped Vex5 parts. I gave him a face because it makes him adorable!", "repo": "https://github.com/dylankchristel-sudo/Roberto-Rotate-o", "demo": ""}]...
|
[{"post_id": 14136, "ts": "202 [{"post_id": 14136, "ts": "2026-06-23T03:41:07Z", "hours": 1.73, "text": "Replaced the 9-volt battery with a pack that holds 8 AA batteries. Now Roberto is wireless! Then, I did some final troubleshooting. Fixed the code so that Robtero stopped for long enough for me to turn him off, and changed how long he spins in each direction before switching. Also replaced a bad motor that wasn’t working under load. He now words perfectly! I’ve decided to let Robterto go case-free because it won’t fit on the body or the wiring. Robtero is more of a free spirit anyway.🐴 I secured the components with tape so nothing flies off."}, {"post_id": 12839, "ts": "2026-06-21T00:47:14Z", "hours": 6.1381, "text": "Fully built and coded Mk 1 of Roberto Rotate-o. It was a long night"}]...
|
Title: Roberto Rotate-o by @dylankchristel | Stard Title: Roberto Rotate-o by @dylankchristel | Stardance
Devlogs:
Fully built and coded Mk 1 of Roberto Rotate-o. It was a long night
Replaced the 9-volt battery with a pack that holds 8 AA batteries. Now Roberto is wireless! Then, I did some final troubleshooting. Fixed the code so that Robtero stopped for long enough for me to turn him off, and changed how long he spins in each direction before switching. Also replaced a bad motor that wasn’t working under load. He now words perfectly! I’ve decided to let Robterto go case-free because it won’t fit on the body or the wiring. Robtero is more of a free spirit anyway.🐴 I secured the components with tape so nothing flies off.
Ships:
I built a robot car that spins. Roberto Rotate-o’s primary mission is to spread whimsy and joy. He runs on an Arduino and some scrapped Vex5 parts. I gave him a face because it makes him adorable!...
|
1793220962.0908473
|
1793307362.0908473
|