|
8377
|
Nautica API by @xellu | Stardance
|
xellu
|
1
|
26.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T18:37:11Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve updated the Service Manager, including the dependency resolver. These changes include: New lifecycle hook “onSetup”, intended for setting up databases, etc. I’ve mostly added this to split “start servers” and “setup things” all being in onStart. This way the separation between those 2 tasks is clear and helps to eliminate certain race conditions. Toggle switches are now generated automatically Before you had to manually declare a key in a config in onInstall, and then read it in isEnabled, which was just extra boilerplate. So I automated the process in the Service class. “?”, “:after” and “:after?” parameters for dependencies Before this, the boot order was still fragile even with dependencies defined, because the ability to define a dependency, and make it start only AFTER your dependency is initialized wasn’t a thing. Now you can do this by simply appending “:after” to the dependency name. “?” at the end also makes the dependency optional. Few fixes relating to dependency resolution and boot orders HTTP API Got a decently big update as well.. The performance is now up ~70% from previous versions, finally surpassing FastAPI, I’ve achieved this adding an option to disable unnecessary messages from being logged. Which only goes to show how heavy the logging manager I use is, but I doubt I’ll be rewriting it, since the way it is now helps with DX. Response validation using “@HTTP.Responses(…)” and ReplyModels: Before you were able to only validate what’s coming in, but not what’s going out. The validator has a strict mode, which when enabled adds an extra layer of “security”. If strict mode is disabled, the responses are only used for OpenAPI docs generation. Tho the framework may still complain if you’re sending invalid responses. Nested object validation and Require.ListOf Static methods in Reply Since the framework is built on Starlette, you may need to use Starlette’s responses in some cases. OpenAPI Docs generation This was kinda a big thing on my list ever since I realized that I can automatically generate SDKs instead of having to write request calls manually. I also wanted to add a way to expose the docs with an endpoint, but I’m holding off on that. The Package registry & manager were introduced as well. The package registry it itself built on Nautica, and works with the package manager integrated into the Nautica’s CLI. Likewise I’ve started work on the Landing page & docs website for the framework, but I’m putting it off for a bit, because of finals. I’ve also fixed countless bugs, refactored things, and over all made many QoL changes, which helped to make the framework feel more polished. This might be a strange project, since I’m somewhat “reinventing the wheel”, but I really didn’t like the way FastAPI, Flask and other Python HTTP frameworks work. It basically handles ONLY the http part, which is fine, but in bigger projects YOU have to manage everything else around it. When I was building small apps it wasn’t that big of an issue, but it became pretty apparent in bigger projects. The complexity and boilerplate that comes with large projects isn’t something I can handle well, while also having to enforce my own conventions. I made Nautica to fix these issues, and I’d say I succeeded. The boilerplate that’s needed per route is minimal, compared to other frameworks; The package manager adds an intuitive way to add plugins (services, packages), and the service system itself does a lot of the heavy lifting for you, by automatically deciding on the boot order instead of you having to write do it explicitly using imports, etc. In conclusion, Nautica takes away some freedom and in exchange gives you structure, less boilerplate and tools to debug your code, which makes shipping apps easier and faster.", "repo": "https://github.com/xellu/nautica-api", "demo": "https://napm.xellu.xyz/"}]...
|
[{"post_id": 9382, "ts": "2026 [{"post_id": 9382, "ts": "2026-06-15T18:35:53Z", "hours": 0.2822, "text": "A showcase of what Nautica can actually do ~20% faster than FastAPI ( https://github.com/xellu/nautica-api/wiki/Performance-Benchmark ) See Nautica in action: https://napm.xellu.xyz/ ( https://github.com/xellu/nautica-package-manager ) A video demonstration:"}, {"post_id": 9251, "ts": "2026-06-15T15:12:52Z", "hours": 3.4914, "text": "I’ve released v3.2.2, the new things there include: OpenAPI Docs generator Changed expression for nested requirements from nested(...) to {...} Request schemas in errors can be hidden now Added descriptions for commands in help Renamed Reply.IsList() into .asList() Added import aliases for Requirement s in napi These are mostly QoL changes, I made formatting of certain things so it’d be easier to read, use, or to make sense linguistically. I also made it a little bit more secure by giving other developers an option to hide their request schemas in error messages. I’ve also included the new benchmark numbers in the README. OpenAPI Docs generator mostly works now, but it doesn’t expose the docs to /nautica:docs yet, I’m also considering making the endpoint the developer’s concern, and not the framework’s. Surprisingly it wasn’t as hard as i expected it to be, but some weird edge cases were definitely annoying to deal with. Anyways, alongside the updates to the framework itself, I’ve also now documented the new changes made since version 3.0.2 , so they’re now up to date with the latest release (that being 3.2.2). I know it took a while but i was more focused on releasing fixes and updates first. https://github.com/xellu/nautica-api/wiki https://github.com/xellu/nautica-api/compare/3.2.0...3.2.2"}, {"post_id": 7424, "ts": "2026-06-12T11:29:02Z", "hours": 2.5219, "text": "I’ve started work on OpenAPI Docs generator, I’d imagine it’ll take me a while to complete. Anyways I’ve released v3.2, see below for new changes Changelog Improved speed and latency New onSetup hook for services Auto Switch registration for services New Require.ListOf validator Validator support for nested objects Better dependency resolver More on these changes here: post 1 , post 2 And new, undocumented changes include: 7. Moving typeToString into models, from http api (didn’t really make sense to have it there) 8. Added static methods into Reply for starlette responses, these include: Reply.plainText , Reply.html , Reply.stream , Reply.file , Reply.redirect . Known Issues v3.2.0 ’s dependency resolver incorrectly handles the :after parameter, a fix is already available in the branch for version 3.2.1"}, {"post_id": 5590, "ts": "2026-06-09T13:20:22Z", "hours": 3.5031, "text": "I’ve added a few QoL features, those being: Reply Models Before, you could only verify whats coming IN, but not whats coming OUT of the server. Now, you can do that easily: from napi.http import HTTP , Reply , Require , ReplyModel , Error @HTTP.GET () @HTTP.Responses ( ReplyModel ( 200 , str ), ReplyModel ( 400 , Error ), strict = True ) @HTTP.Require () async def hello ( ctx ): if ctx . body . get ( \" hello \" ): raise Error ( 400 , \" No hello \" ) return \" Hello World! \" In this case, the request will go through without an issue, but if, for example, you returned anything other than a string: return 0 The request will fail automatically. This will also be useful for when I add OpenAPI generation, as the generator will have access to the responses. This behavior can be disabled, by setting strict to False. Nested object validation @HTTP.Require(body = {\"hello\": {\"world\": str}) <- This code used to be invalid before. I since added support for nested objects (no depth limit). Automatic Toggle Switch Registration Plugins used to register their own keys in the config, and then setup isEnabled method that would determine if the service should be started or not. To reduce the headache and boilerplate of this approach, Nautica now automatically creates a key with your service’s name under services in config.n3 . If you want your own logic in isEnabled , you can do so by overwriting the method. By doing so you’ll disable the automatic registration and the framework gives you the freedom to do it your way. If you want custom logic AND automatic registration, it can simply be combined by using super().isEnabled() . Require.ListOf(…) I’d say this is a highly useful addition. It does exactly what it sounds like: It checks if all the items in a list match a certain schema. Require . ListOf ( str ) List of just strings Require . ListOf ({ \" hello \" : str }) List of dictionaries Requrie . ListOf ( Require . AnyTypeOf ( str , int )) List of strings and integers"}, {"post_id": 5477, "ts": "2026-06-09T08:37:59Z", "hours": 2.5575, "text": "I’ve been optimizing the framework today, here’s what changed: 1. Massive performance boosts I managed to go from 2279 requests/sec to 3929 , which is 72% increase . After running new benchmarks, I’ve also surpassed FastAPI by ~24% (recorded 3154 requests/sec). I did this by minimizing the amount of logging that is done per request (can be configured). Because my log manager is fairly heavy, this helped a lot. 2. Better dependency resolver The dependency resolver I had for services was okay, but it lacked 2 important features: Optional dependencies and explicit order. The old system was simply: Service.Export(MyPlugin, depends_on=[\"HTTPRouter\"]) Which is fine for simple plugins, but you start doing more complex work, you’ll hit the limits fast. The new system now handles: ? at the end makes the dependency optional :after tells the dependency to start AFTER your plugin, not before. Essentially adds your plugin as the target’s dependency. 3. Split onStart Before, onStart handled both starting database and HTTP servers, bots. Because of this, I’ve decided to split the setup logic and startup logic into 2: onSetup and onStart 4. Other changes I also removed some legacy aliases for methods."}, {"post_id": 4899, "ts": "2026-06-08T14:01:14Z", "hours": 4.65, "text": "Spent almost 5 hours on a navbar, finally figured it out though. The open/close logic on hovering was a nightmare to do. In the end i settled for IDs and an event listener for mouseover . It’s probably one of the worse solutions, but I’m not gonna touch it since it works finally. I also changed the background to something that fits better."}, {"post_id": 4426, "ts": "2026-06-07T19:03:56Z", "hours": 3.8883, "text": "I’ve started work on a web for the framework. For now I only managed to set up the project and make the hero on the landing page, for which I took inspiration from payloadcms and rig.ai The landing page itself was hard to make, since I had to figure out how to structure the grid, and even now it’s not up to my standards."}, {"post_id": 4114, "ts": "2026-06-07T09:41:14Z", "hours": 2.2639, "text": "Nautica Package Registry is Live! napi install mongodb now downloads the package into project plugins and installs any PyPI dependencies automatically. 2 Packages are up already: MongoDB: Adapter for pymongo NAuth: A simple session manager (using Mongo) The registry itself runs on Nautica, with both packages installed https://github.com/xellu/nautica-package-manager https://napm.xellu.xyz/"}, {"post_id": 3635, "ts": "2026-06-06T17:32:12Z", "hours": 2.7833, "text": "Hello y’all. I’m making a framework for backend development, called Nautica. I’m also bundling a package manager, similar to npm/PyPI, to allow people to share their plugins. I’ve started working on this project before Stardance, but this sounds like a good opportunity to get feedback on it. Today’s update notes (v3.1.3): Fixed shell sleeping while in systemd mode Fixed file reading during http requests Fixed package manager connection issues Added commands to list http and websocket endpoints For anyone interested in the specifics, the HTTP part of the API is built on top Starlette. Unlike FastAPI, I made my own request validation system that gives you more freedom, though it may perform worse under load. From the benchmarks I’ve ran, my framework seems to be just a little faster than FastAPI (which is also based on Starlette): FastAPI: 2259 requests/second Nautica: 2271 requests/second ~0.53% faster Though these numbers are a bit dated, and may be off. I’m still working on the package manager, but I’ll post a showcase of that soon. For now, here’s a showcase of how Nautica itself works:"}]...
|
Title: Nautica API by @xellu | Stardance
Devlogs: Title: Nautica API by @xellu | Stardance
Devlogs:
Hello y’all. I’m making a framework for backend development, called Nautica. I’m also bundling a package manager, similar to npm/PyPI, to allow people to share their plugins. I’ve started working on this project before Stardance, but this sounds like a good opportunity to get feedback on it. Today’s update notes (v3.1.3): Fixed shell sleeping while in systemd mode Fixed file reading during http requests Fixed package manager connection issues Added commands to list http and websocket endpoints For anyone interested in the specifics, the HTTP part of the API is built on top Starlette. Unlike FastAPI, I made my own request validation system that gives you more freedom, though it may perform worse under load. From the benchmarks I’ve ran, my framework seems to be just a little faster than FastAPI (which is also based on Starlette): FastAPI: 2259 requests/second Nautica: 2271 requests/second ~0.53% faster Though these numbers are a bit dated, and may be off. I’m still working on the package manager, but I’ll post a showcase of that soon. For now, here’s a showcase of how Nautica itself works:
Nautica Package Registry is Live! napi install mongodb now downloads the package into project plugins and installs any PyPI dependencies automatically. 2 Packages are up already: MongoDB: Adapter for pymongo NAuth: A simple session manager (using Mongo) The registry itself runs on Nautica, with both packages installed https://github.com/xellu/nautica-package-manager https://napm.xellu.xyz/
I’ve started work on a web for the framework. For now I only managed to set up the project and make the hero on the landing page, for which I took inspiration from payloadcms and rig.ai The landing page itself was hard to make, since I had to figure out how to structure the grid, and even now it’s not up to my standards.
Spent almost 5 hours on a navbar, finally figured it out though. The open/close logic on hovering was a nightmare to do. In the end i settled for IDs and an event listener for mouseover . It’s probably one of the worse solutions, but I’m not gonna touch it since it works finally. I also changed the background to something that fits better.
I’ve been optimizing the framework today, here’s what changed: 1. Massive performance boosts I managed to go from 2279 requests/sec to 3929 , which is 72% increase . After running new benchmarks, I’ve also surpassed FastAPI by ~24% (recorded 3154 requests/sec). I did this by minimizing the amount of logging that is done per request (can be configured). Because my log manager is fairly heavy, this helped a lot. 2. Better dependency resolver The dependency resolver I had for services was okay, but it lacked 2 important features: Optional dependencies and explicit order. The old system was simply: Service.Export(MyPlugin, depends_on=["HTTPRouter"]) Which is fine for simple plugins, but you start doing more complex work, you’ll hit the limits fast. The new system now handles: ? at the end makes the dependency optional :after tells the dependency to start AFTER your plugin, not before. Essentially adds your plugin as the target’s dependency. 3. Split onStart Before, onStart handled both starting database and HTTP servers, bots. Because of this, I’ve decided to split the setup logic and startup logic into 2: onSetup and onStart 4. Other changes I also removed some legacy aliases for methods.
I’ve added a few QoL features, those being: Reply Models Before, you could only verify whats coming IN, but not whats coming OUT of the server. Now, you can do that easily: from napi.http import HTTP , Reply , Require , ReplyModel , Error @HTTP.GET () @HTTP.Responses ( ReplyModel ( 200 , str ), ReplyModel ( 400 , Error ), strict = True ) @HTTP.Require () async def hello ( ctx ): if ctx . body . get ( " hello " ): raise Error ( 400 , " No hello " ) return " Hello World! " In this case, the request will go through without an issue, but if, for example, you returned anything other than a string: return 0 The request will fail automatically. This will also be useful for when I add OpenAPI generation, as the generator will have access to the responses. This behavior can be disabled, by setting strict to False. Nested object validation @HTTP.Require(body = {"hello": {"world": str}) <- This code used to be invalid before. I since added support for nested objects (no depth limit). Automatic Toggle Switch Registration Plugins used to register their own keys in the config, and then setup isEnabled method that would determine if the service should be started or not. To reduce the headache and boilerplate of this approach, Nautica now automatically creates a key with your service’s name under services in config.n3 . If you want your own logic in isEnabled , you can do so by overwriting the method. By doing so you’ll disable the automatic registration and the framework gives you the freedom to do it your way. If you want custom logic AND automatic registration, it can simply be combined by using super().isEnabled() . Require.ListOf(…) I’d say this is a highly useful addition. It does exactly what it sounds like: It checks if all the items in a list match a certain schema. Require . ListOf ( str ) List of just strings Require . ListOf ({ " hello " : str }) List of dictionaries Requrie . ListOf ( Require . AnyTypeOf ( str , int )) List of strings and integers
I’ve started work on OpenAPI Docs generator, I’d imagine it’ll take me a while to complete. Anyways I’ve released v3.2, see below for new changes Changelog Improved speed and latency New onSetup hook for services Auto Switch registration for services New Require.ListOf validator Validator support for nested objects Better dependency resolver More on these changes here: post 1 , post 2 And new, undocumented changes include: 7. Moving typeToString into models, from http api (didn’t really make sense to have it there) 8. Added static methods into Reply for starlette responses, these include: Reply.plainText , Reply.html , Reply.stream , Reply.file , Reply.redirect . Known Issues v3.2.0 ’s dependency resolver incorrectly handles the :after parameter, a fix is already available in the branch for version 3.2.1
I’ve released v3.2.2, the new things there include: OpenAPI Docs generator Changed expression for nested requirements from nested(...) to {...} Request schemas in errors can be hidden now Added descriptions for commands in help Renamed Reply.IsList() into .asList() Added import aliases for Requirement s in napi These are mostly QoL changes, I made formatting of certain things so it’d be easier to read, use, or to make sense linguistically. I also made it a little bit more secure by giving other developers an option to hide their request schemas in error messages. I’ve also included the new benchmark numbers in the README. OpenAPI Docs generator mostly works now, but it doesn’t expose the docs to /nautica:docs yet, I’m also considering making the endpoint the developer’s concern, and not the framework’s. Surprisingly it wasn’t as hard as i expected it to be, but some weird edge cases were definitely annoying to deal with. Anyways, alongside the updates to the framework itself, I’ve also now documented the new changes made since version 3.0.2 , so they’re now up to date with the latest release (that being 3.2.2). I know it took a while but i was more focused on releasing fixes and updates first. https://github.com/xellu/nautica-api/wiki https://github.com/xellu/nautica-api/compare/3.2.0...3.2.2
A showcase of what Nautica can actually do ~20% faster than FastAPI ( https://github.com/xellu/nautica-api/wiki/Performance-Benchmark ) See Nautica in action: https://napm.xellu.xyz/ ( https://github.com/xellu/nautica-package-manager ) A video demonstration:
Ships:
I’ve updated the Service Manager, including the dependency resolver. These changes include: New lifecycle hook “onSetup”, intended for setting up databases, etc. I’ve mostly added this to split “start servers” and “setup things” all being in onStart. This way the separation between those 2 tasks is clear and helps to eliminate certain race conditions. Toggle switches are now generated automatically Before you had to manually declare a key in a config in onInstall, and then read it in isEnabled, which was just extra boilerplate. So I automated the process in the Service class. “?”, “:after” and “:after?” parameters for dependencies Before this, the boot order was still fragile even with dependencies defined, because the ability to define a dependency, and make it start only AFTER your dependency is initialized wasn’t a thing. Now you can do this by simply appending “:after” to the dependency name. “?” at the end also makes the dependency optional. Few fixes relating to dependency resolution and boot orders HTTP API Got a decently big update as well.. The performance is now up ~70% from previous versions, finally surpassing FastAPI, I’ve achieved this adding an option to disable unnecessary messages from being logged. Which only goes to show how heavy the logging manager I use is, but I doubt I’ll be rewriting it, since the way it is now helps with DX. Response validation using “@HTTP.Responses(…)” and ReplyModels: Before you were able to only validate what’s coming in, but not what’s going out. The validator has a strict mode, which when enabled adds an extra layer of “security”. If strict mode is disabled, the responses are only used for OpenAPI docs generation. Tho the framework may still complain if you’re sending invalid responses. Nested object validation and Require.ListOf Static methods in Reply Since the framework is built on Starlette, you may need to use Starlette’s responses in some cases. OpenAPI Docs generation This was kinda a big thing on my list ever since I realized that I can automatically generate SDKs instead of having to write request calls manually. I also wanted to add a way to expose the docs with an endpoint, but I’m holding off on that. The Package registry & manager were introduced as well. The package registry it itself built on Nautica, and works with the package manager integrated into the Nautica’s CLI. Likewise I’ve started work on the Landing page & docs website for the framework, but I’m putting it off for a bit, because of finals. I’ve also fixed countless bugs, refactored things, and over all made many QoL changes, which helped to make the framework feel more polished. This might be a strange project, since I’m somewhat “reinventing the wheel”, but I really didn’t like the way FastAPI, Flask and other Python HTTP frameworks work. It basically handles ONLY the http part, which is fine, but in bigger projects YOU have to manage everything else around it. When I was building small apps it wasn’t that big of an issue, but it became pretty apparent in bigger projects. The complexity and boilerplate that comes with large projects isn’t something I can handle well, while also having to enforce my own conventions. I made Nautica to fix these issues, and I’d say I succeeded. The boilerplate that’s needed per route is minimal, compared to other frameworks; The package manager adds an intuitive way to add plugins (services, packages), and the service system itself does a lot of the heavy lifting for you, by automatically deciding on the boot order instead of you having to write do it explicitly using imports, etc. In conclusion, Nautica takes away some freedom and in exchange gives you structure, less boilerplate and tools to debug your code, which makes shipping apps easier and faster....
|
1793735432.7345612
|
1793821832.7345612
|
|
67819
|
joypad by @sunidhi1422 | Stardance
|
sunidhi1422
|
0
|
5.51
|
0
|
[]
|
[{"post_id": 77387, "ts": "202 [{"post_id": 77387, "ts": "2026-10-06T19:11:55Z", "hours": 5.5142, "text": "i am working on a esp8266 based small handy gamepad fidgit toy with several games in it"}]...
|
Title: joypad by @sunidhi1422 | Stardance
Devlogs Title: joypad by @sunidhi1422 | Stardance
Devlogs:
i am working on a esp8266 based small handy gamepad fidgit toy with several games in it...
|
1793735434.0887403
|
1794340234.0887403
|
|
27012
|
Space Strike by @Danvir | Stardance
|
Danvir
|
1
|
13.0
|
26
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T16:17:08Z", "hours": 13.0, "multiplier": 2.0, "payout": 26, "blessing": "neutral", "text": "About my game : I built Space Strike, a 3D space shooter game in Unity where the player controls a spaceship and fights against enemy ships.The biggest challenges were making the enemy spawning feel balanced, handling collisions correctly, and making the shooting system responsive.I’m proud that I completed a fully playable 3D game from start to finish. This project helped me improve my Unity and C# skills. Thanks stardance for this opportunity", "repo": "https://github.com/jsdjoker/SpaceStrike", "demo": "https://danjs.itch.io/spacestrike"}]...
|
[{"post_id": 31294, "ts": "202 [{"post_id": 31294, "ts": "2026-07-19T16:14:38Z", "hours": 1.4836, "text": "Devlog#15 - Last devlog i created a basic mainMenu to my game so that you can start playing it and also quit button to quit the game after playing the game and then i added some more waves of enemies and also added win condition after reaching the end i was very much happy with game outcome as this is my second game i created with unity and very much happy about it and completing it!!"}, {"post_id": 30211, "ts": "2026-07-17T16:42:01Z", "hours": 0.7, "text": "devlog#14: created more enemies to my game and it looks more better with the timelines and making the player move properly with the ships and i have made more options of making a smoother game and also it makes a game better with shooting of turrent and laser towards player!!!!!!"}, {"post_id": 29529, "ts": "2026-07-16T14:56:24Z", "hours": 1.1933, "text": "devlog#13: finally finished the bug i ad with my enemy shooting the laser at my playe ri have fixed it wiht some maths basics which is kinda tough used on google help and finally got the angle to rotate the turrent towards the player and shoot the projectile and its a success"}, {"post_id": 28917, "ts": "2026-07-15T14:54:40Z", "hours": 0.9736, "text": "Devlog#12: Created more enemies and add a turrent feature to the enemies that whenever the player goes near the enemy the turrent under the ship starts to shoot at player and try to destory it rather than just smashing into the player it took little but of time but happy with the output which i got!!!"}, {"post_id": 27207, "ts": "2026-07-12T15:55:46Z", "hours": 0.8561, "text": "Devlog#11-created a laser sound so whenever the player shoots the enemy laser sound comes and its a huge upgrade to me game and also next added enemy shooting at enemy and other features are there to add in the game and waiting to make into a perfect game"}, {"post_id": 26660, "ts": "2026-07-11T16:32:05Z", "hours": 1.0939, "text": "Devlog 10#- created a skybox based on space theme and added some post processing which means enhancing the graphics in the game so that it will be looking very realistic and perfect!!and also added a restart mechanism that whenever the player dies he can respawn easily and then the game continous!!"}, {"post_id": 26453, "ts": "2026-07-11T08:07:59Z", "hours": 1.1753, "text": "Devlog 9#- Created a lot of mechanic to my game and excited about it.. first added a dialogue system to my game where the player talks in mic and dialogue comes below the screen like talking with someone based on the enemies spawning and also added terrain texture and also some trees to make it feel natural look and do other changes later!!"}, {"post_id": 26114, "ts": "2026-07-10T18:23:05Z", "hours": 0.5156, "text": "Devlog 08# - created UI score based system…when player destory enemy ship score is collected and each enemies destory gives different score points and also added health to enemies so that each of them have differnet hit points of health so it will be realistic"}, {"post_id": 25324, "ts": "2026-07-09T15:24:33Z", "hours": 0.5333, "text": "devlog #7 -Created more enemies to the game and each have differnet health point so that when player attacks the enemy they each get destoryed at different health and weak points college work again looking forward to complete"}, {"post_id": 24218, "ts": "2026-07-07T17:10:52Z", "hours": 0.3022, "text": "Devlog#6 couldn’t do that much my lowest devlog this is due to college studies i couldn’t make properly just created player get destoryed with destory vfx"}, {"post_id": 23580, "ts": "2026-07-06T16:49:02Z", "hours": 1.5106, "text": "Devlog#5: made enemy particle After some time made the laser shoot at the direction where the mouse is aim and also added enemy particle effect when destoryed. Doing this project slowly as my college as started!! The next step is making skybox and more particle when enemy destroyed"}, {"post_id": 22162, "ts": "2026-07-04T14:09:13Z", "hours": 0.6014, "text": "Due to college coulnd’t code much longer but created a crosshair which follow the mouse whenever the player aim the mouse the crosshair moves and laser also moves in that direction"}, {"post_id": 21472, "ts": "2026-07-03T13:17:44Z", "hours": 0.5422, "text": "completed my rocket system with laser effect which can damage the player!! it was kinda hard to add but finally added it after 30 mins it’s short time but it was hard"}, {"post_id": 20706, "ts": "2026-07-02T11:32:52Z", "hours": 0.7056, "text": "created rotation in x axis and y axis to player"}, {"post_id": 20614, "ts": "2026-07-02T07:51:58Z", "hours": 0.7, "text": "made player ship with a timeline which makes the player ship move"}]...
|
Title: Space Strike by @Danvir | Stardance
Devlog Title: Space Strike by @Danvir | Stardance
Devlogs:
made player ship with a timeline which makes the player ship move
created rotation in x axis and y axis to player
completed my rocket system with laser effect which can damage the player!! it was kinda hard to add but finally added it after 30 mins it’s short time but it was hard
Due to college coulnd’t code much longer but created a crosshair which follow the mouse whenever the player aim the mouse the crosshair moves and laser also moves in that direction
Devlog#5: made enemy particle After some time made the laser shoot at the direction where the mouse is aim and also added enemy particle effect when destoryed. Doing this project slowly as my college as started!! The next step is making skybox and more particle when enemy destroyed
Devlog#6 couldn’t do that much my lowest devlog this is due to college studies i couldn’t make properly just created player get destoryed with destory vfx
devlog #7 -Created more enemies to the game and each have differnet health point so that when player attacks the enemy they each get destoryed at different health and weak points college work again looking forward to complete
Devlog 08# - created UI score based system…when player destory enemy ship score is collected and each enemies destory gives different score points and also added health to enemies so that each of them have differnet hit points of health so it will be realistic
Devlog 9#- Created a lot of mechanic to my game and excited about it.. first added a dialogue system to my game where the player talks in mic and dialogue comes below the screen like talking with someone based on the enemies spawning and also added terrain texture and also some trees to make it feel natural look and do other changes later!!
Devlog 10#- created a skybox based on space theme and added some post processing which means enhancing the graphics in the game so that it will be looking very realistic and perfect!!and also added a restart mechanism that whenever the player dies he can respawn easily and then the game continous!!
Devlog#11-created a laser sound so whenever the player shoots the enemy laser sound comes and its a huge upgrade to me game and also next added enemy shooting at enemy and other features are there to add in the game and waiting to make into a perfect game
Devlog#12: Created more enemies and add a turrent feature to the enemies that whenever the player goes near the enemy the turrent under the ship starts to shoot at player and try to destory it rather than just smashing into the player it took little but of time but happy with the output which i got!!!
devlog#13: finally finished the bug i ad with my enemy shooting the laser at my playe ri have fixed it wiht some maths basics which is kinda tough used on google help and finally got the angle to rotate the turrent towards the player and shoot the projectile and its a success
devlog#14: created more enemies to my game and it looks more better with the timelines and making the player move properly with the ships and i have made more options of making a smoother game and also it makes a game better with shooting of turrent and laser towards player!!!!!!
Devlog#15 - Last devlog i created a basic mainMenu to my game so that you can start playing it and also quit button to quit the game after playing the game and then i added some more waves of enemies and also added win condition after reaching the end i was very much happy with game outcome as this is my second game i created with unity and very much happy about it and completing it!!
Ships:
About my game : I built Space Strike, a 3D space shooter game in Unity where the player controls a spaceship and fights against enemy ships.The biggest challenges were making the enemy spawning feel balanced, handling collisions correctly, and making the shooting system responsive.I’m proud that I completed a fully playable 3D game from start to finish. This project helped me improve my Unity and C# skills. Thanks stardance for this opportunity...
|
1793735434.99905
|
1793821834.99905
|
|
7761
|
Zico Chess Engine by @zico | Stardance
|
zico
|
1
|
11.0
|
97
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-09T23:06:12Z", "hours": 11.0, "multiplier": 9.01, "payout": 97, "blessing": "neutral", "text": "I created a chess-engine with a chess bot that plays smarter move by looking into the game by 3 steps or even more. Managing states was challenging to me at first cause the state was mutated which caused lot of error and missing piece so i cloned the board which makes it immutable. I’m proud because this project taught me a lot of things from state management to writing my first algorithm. You can check out my project at https://zico-chess-engine.vercel.app . My repo at https://github.com/young1dev/chess-engine", "repo": "https://github.com/young1dev/chess-engine", "demo": "https://zico-chess-engine.vercel.app"}]...
|
[{"post_id": 5944, "ts": "2026 [{"post_id": 5944, "ts": "2026-06-09T22:58:32Z", "hours": 7.8381, "text": "Added the min-max and alpha-beta pruning algorithm to enable the bot make smarter moves"}, {"post_id": 2605, "ts": "2026-06-05T06:52:56Z", "hours": 2.8917, "text": "I’m working on the v2 of my chessbot using the minmax algorithm and alpha beta pruning"}]...
|
Title: Zico Chess Engine by @zico | Stardance
Dev Title: Zico Chess Engine by @zico | Stardance
Devlogs:
I’m working on the v2 of my chessbot using the minmax algorithm and alpha beta pruning
Added the min-max and alpha-beta pruning algorithm to enable the bot make smarter moves
Ships:
I created a chess-engine with a chess bot that plays smarter move by looking into the game by 3 steps or even more. Managing states was challenging to me at first cause the state was mutated which caused lot of error and missing piece so i cloned the board which makes it immutable. I’m proud because this project taught me a lot of things from state management to writing my first algorithm. You can check out my project at https://zico-chess-engine.vercel.app . My repo at https://github.com/young1dev/chess-engine...
|
1793735436.2822957
|
1793821836.2822957
|
|
67820
|
Flappy Bird! by @soumilyadav25 | Stardance
|
soumilyadav25
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Flappy Bird! by @soumilyadav25 | Stardance
|
1793735437.4402564
|
1794340237.4402564
|
|
28566
|
Clark Lab - self hosted PaaS by @clarkpy | Stardan Clark Lab - self hosted PaaS by @clarkpy | Stardance...
|
clarkpy
|
2
|
33.0
|
199
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T22:20:00Z", "hours": 9.0, "multiplier": 13.95, "payout": 131, "blessing": "neutral", "text": "This ship was focused on making ClarkLab more stable, easier to set up, and easier to fix when something breaks. I improved the update flow by adding health-check based handling, so it can test a new version before switching over instead of jsut grabbing raw code. I also improved agent updates with release binaries, prebuilt binaries, version handling, and update patches. Setup was another big focus. I added an API and Cloudflare setup wizard to help with env setup, prod config, tunnels, frontend vars, and install scripts. It is still early, but it is a step toward making it much easier to self-host clarklab. I also improved node setup and reconnect behaviour. Online nodes can now be reconnected, unfinished node setups can be cancelled, and I fixed smaller issues around install commands, port notices, API banners, and frontend reconnect logic. Health checks were added for services, with frontend status shown in the service detail page. Agent logs now use the journal too, making debugging easier if something breaks. There were also security and general chore fixes, including agent auth patches, sysadmin-only node modification, stronger password reset handling, safer frontend logs, GitHub parsing fixes, and better CI/workflow checks. Overall, this ship was not about new features (even tho i added some small ones). It was about making my project easier to update and easier to deploy.", "repo": "https://github.com/clarkpy/clarklab-global", "demo": "https://youtu.be/lLkWigWAXwQ"}, {"ship_num": 2, "ts": "2026-06-30T15:04:27Z", "hours": 24.0, "multiplier": 6.79, "payout": 68, "blessing": "neutral", "text": "I made the basis of Clark Lab, my in-house version of Coolify as an alternative to Vercel & Heroku, making it easy to deploy your own databases and apps from home. For security reasons the public demo is a youtube video showing off all of the projects features, you can very quickly and easily deploy the project for development via the read me in as little as two commands.", "repo": "https://github.com/clarkpy/clarklab-global", "demo": "https://youtu.be/lLkWigWAXwQ"}]...
|
[{"post_id": 24383, "ts": "202 [{"post_id": 24383, "ts": "2026-07-07T22:06:36Z", "hours": 6.0267, "text": "I’ve been focused on making ClarkLab easier to set up, safer to update, and less annoying to fix when something breaks. The biggest part of this was improving the update flow. After adding health checks, I worked on making updates more reliable by testing candidate containers before replacing the live API. This means ClarkLab can now check that the new version is actually healthy before switching over, instead of restarting and hoping it works. It should make updates more stble, especially when running it on your own server. I also spent time improving agent updates. Agents can now be updated using release binaries, and I added more work around prebuilt agent binaries, release patches, and version handling. This should make agent updates cleaner and less dependent on building everything manually on the target machine. Another big focus was setup. I added an api and Cloudflare setup wizard to make self-hosting easier. The goal is to guide people through the annoying parts like env setup, production configuration, Cloudflare tunnel setup, frontend variables, and install scripts. It is nowhere near perfect and used agentic assistance, but it is a big step toward making it easier to deploy without needing to manually configure every little option across multiple files. I also improved the node setup flow. There is now a cancel setup button, so if you start setting up a node and mess something up, you are not just stuck with a half-created node. I also patched several small bugs such as the node install command. For debugging, I updated agent logs to use the journal. This should make logs more useful and easier to understand when something goes wrong on a server. I thought this was important as i want this project to be usable for real infra. This feature is very much so in an early stage as i am nowhere near finished with it. There were also a bunch of security and maintenance fixes. I patched agent authentication, blocked node modification for users who are not sysadmins, strengthened password reset handling, reduced the chance of sensitive data being exposed through frontend logs, and tightened GitHub repo parsing. I also updated workflow permissions and CI checks so changes are safer. This devlog is again, not about new frontend features. It is mostly about making this project more stable, easier to deploy, and safer. The main thing I learned from the last ship is that setup still needs to be much easier, so I started moving toward a proper guided setup flow. I very much so want to keep improving that until someone can deploy ClarkLab without having to understand how it works completely first."}, {"post_id": 22790, "ts": "2026-07-05T11:30:41Z", "hours": 3.3653, "text": "I’ve been focused on making ClarkLab easier to use and more fixable if it breaks. One part of this was improving how the app behaves when connections are unstable. I worked on frontend reconnect behaviour and node reconnection so online nodes can be reconnected at any time instead of requiring it to be not responding first. I also fixed issues around agent/API update handling, as there were issues when using the update tool. I introduced health checks in this log as well. Services can now be configured for health monitoring, and the frontend displays health status in the service detail page so it’s easier to see what’s working and what needs attention without investigation. Chore wise, I updated CI checks so changes are safer and easier to maintain. On the UI side, I made a number of usability improvements when deploying it for youself: site URL editing on the frontend, cleanup toward a more minimal interface, masking node IPs behind a reveal action for privacy, and fixes for issues like the API banner behaviour, node install flow, and port allocation notices. Based on feedback from the last ship, It’s clear that I need to make it easier to setup. I’m planning on making a CLI-based setup flow with env setup etc there, but, that is not built yet. Overall, this devlog is less about new frontend features and more about making ClarkLab feel more stable and less buggy."}, {"post_id": 18883, "ts": "2026-06-30T02:31:03Z", "hours": 24.0975, "text": "In the last few weeks i have created an in-house and open-source version of coolify. I did this as i wanted a way to run coolify that i found easier and that i preferred UI wise. I am still making it so there is almost certainly issues relating to security but it is currently functional."}]...
|
Title: Clark Lab - self hosted PaaS by @clarkpy | Title: Clark Lab - self hosted PaaS by @clarkpy | Stardance
Devlogs:
In the last few weeks i have created an in-house and open-source version of coolify. I did this as i wanted a way to run coolify that i found easier and that i preferred UI wise. I am still making it so there is almost certainly issues relating to security but it is currently functional.
I’ve been focused on making ClarkLab easier to use and more fixable if it breaks. One part of this was improving how the app behaves when connections are unstable. I worked on frontend reconnect behaviour and node reconnection so online nodes can be reconnected at any time instead of requiring it to be not responding first. I also fixed issues around agent/API update handling, as there were issues when using the update tool. I introduced health checks in this log as well. Services can now be configured for health monitoring, and the frontend displays health status in the service detail page so it’s easier to see what’s working and what needs attention without investigation. Chore wise, I updated CI checks so changes are safer and easier to maintain. On the UI side, I made a number of usability improvements when deploying it for youself: site URL editing on the frontend, cleanup toward a more minimal interface, masking node IPs behind a reveal action for privacy, and fixes for issues like the API banner behaviour, node install flow, and port allocation notices. Based on feedback from the last ship, It’s clear that I need to make it easier to setup. I’m planning on making a CLI-based setup flow with env setup etc there, but, that is not built yet. Overall, this devlog is less about new frontend features and more about making ClarkLab feel more stable and less buggy.
I’ve been focused on making ClarkLab easier to set up, safer to update, and less annoying to fix when something breaks. The biggest part of this was improving the update flow. After adding health checks, I worked on making updates more reliable by testing candidate containers before replacing the live API. This means ClarkLab can now check that the new version is actually healthy before switching over, instead of restarting and hoping it works. It should make updates more stble, especially when running it on your own server. I also spent time improving agent updates. Agents can now be updated using release binaries, and I added more work around prebuilt agent binaries, release patches, and version handling. This should make agent updates cleaner and less dependent on building everything manually on the target machine. Another big focus was setup. I added an api and Cloudflare setup wizard to make self-hosting easier. The goal is to guide people through the annoying parts like env setup, production configuration, Cloudflare tunnel setup, frontend variables, and install scripts. It is nowhere near perfect and used agentic assistance, but it is a big step toward making it easier to deploy without needing to manually configure every little option across multiple files. I also improved the node setup flow. There is now a cancel setup button, so if you start setting up a node and mess something up, you are not just stuck with a half-created node. I also patched several small bugs such as the node install command. For debugging, I updated agent logs to use the journal. This should make logs more useful and easier to understand when something goes wrong on a server. I thought this was important as i want this project to be usable for real infra. This feature is very much so in an early stage as i am nowhere near finished with it. There were also a bunch of security and maintenance fixes. I patched agent authentication, blocked node modification for users who are not sysadmins, strengthened password reset handling, reduced the chance of sensitive data being exposed through frontend logs, and tightened GitHub repo parsing. I also updated workflow permissions and CI checks so changes are safer. This devlog is again, not about new frontend features. It is mostly about making this project more stable, easier to deploy, and safer. The main thing I learned from the last ship is that setup still needs to be much easier, so I started moving toward a proper guided setup flow. I very much so want to keep improving that until someone can deploy ClarkLab without having to understand how it works completely first.
Ships:
I made the basis of Clark Lab, my in-house version of Coolify as an alternative to Vercel & Heroku, making it easy to deploy your own databases and apps from home. For security reasons the public demo is a youtube video showing off all of the projects features, you can very quickly and easily deploy the project for development via the read me in as little as two commands.
This ship was focused on making ClarkLab more stable, easier to set up, and easier to fix when something breaks. I improved the update flow by adding health-check based handling, so it can test a new version before switching over instead of jsut grabbing raw code. I also improved agent updates with release binaries, prebuilt binaries, version handling, and update patches. Setup was another big focus. I added an API and Cloudflare setup wizard to help with env setup, prod config, tunnels, frontend vars, and install scripts. It is still early, but it is a step toward making it much easier to self-host clarklab. I also improved node setup and reconnect behaviour. Online nodes can now be reconnected, unfinished node setups can be cancelled, and I fixed smaller issues around install commands, port notices, API banners, and frontend reconnect logic. Health checks were added for services, with frontend status shown in the service detail page. Agent logs now use the journal too, making debugging easier if something breaks. There were also security and general chore fixes, including agent auth patches, sysadmin-only node modification, stronger password reset handling, safer frontend logs, GitHub parsing fixes, and better CI/workflow checks. Overall, this ship was not about new features (even tho i added some small ones). It was about making my project easier to update and easier to deploy....
|
1793735438.322533
|
1793821838.322533
|
|
67821
|
WarioWare Game by @este558 | Stardance
|
este558
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @este558 | Stardance
|
1793735439.4980843
|
1794340239.4980843
|
|
67823
|
Untitled project by @pritamk980 | Stardance
|
pritamk980
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @pritamk980 | Stardance
|
1793735440.400159
|
1794340240.400159
|
|
67824
|
My very own WebOS by @divypatel211020 | Stardance
|
divypatel211020
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @divypatel211020 | Sta Title: My very own WebOS by @divypatel211020 | Stardance...
|
1793735441.287824
|
1794340241.287824
|
|
27375
|
Frictionless by @Jazil | Stardance
|
Jazil
|
1
|
2.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T13:16:21Z", "hours": 2.0, "multiplier": 1.44, "payout": 2, "blessing": "neutral", "text": "i made a project that help student to learn and teachers only want to changes the content. i am proud because i am beginner on website bulding", "repo": "https://github.com/JazilJafar/quiz-time-by-jazil--jafar", "demo": "https://jaziljafar.github.io/quiz-time-by-jazil--jafar/"}]...
|
[{"post_id": 18329, "ts": "202 [{"post_id": 18329, "ts": "2026-06-29T13:09:41Z", "hours": 1.6847, "text": "i am working on quiz maker challenge of frictionless"}]...
|
Title: Frictionless by @Jazil | Stardance
Devlogs Title: Frictionless by @Jazil | Stardance
Devlogs:
i am working on quiz maker challenge of frictionless
Ships:
i made a project that help student to learn and teachers only want to changes the content. i am proud because i am beginner on website bulding...
|
1793735442.2061572
|
1793821842.2061572
|
|
30415
|
My own site! by @hasanstarts | Stardance
|
hasanstarts
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T20:19:17Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "HTML + CSS is used. JS is not included for the first version of personal site. Public Repository with README is also added, Website online via Netlify. Contains 4 sections: HERO, ABOUT ME, PROJECTS, and CONTACT. and a Simple NavBar.", "repo": "https://github.com/hasancooksfr/personal-site", "demo": "https://personalsite-hasan.netlify.app/"}]...
|
[{"post_id": 21722, "ts": "202 [{"post_id": 21722, "ts": "2026-07-03T20:16:17Z", "hours": 1.0608, "text": "First DevLog, First Site Stepped in web development and this is my first project. I used AI and Personal Site Guide to learn about HTML, CSS and JS. The first Commit only contains HTML and CSS not JS as I will make changes in future. Contains 4 Sections: Hero, About Me, Projects, and Contact. All Simple, No advanced. Simple Navbar is also added."}]...
|
Title: My own site! by @hasanstarts | Stardance
D Title: My own site! by @hasanstarts | Stardance
Devlogs:
First DevLog, First Site Stepped in web development and this is my first project. I used AI and Personal Site Guide to learn about HTML, CSS and JS. The first Commit only contains HTML and CSS not JS as I will make changes in future. Contains 4 Sections: Hero, About Me, Projects, and Contact. All Simple, No advanced. Simple Navbar is also added.
Ships:
HTML + CSS is used. JS is not included for the first version of personal site. Public Repository with README is also added, Website online via Netlify. Contains 4 sections: HERO, ABOUT ME, PROJECTS, and CONTACT. and a Simple NavBar....
|
1793735443.3754075
|
1793821843.3754075
|
|
67825
|
TVC Rocket by @NoahH35725 | Stardance
|
NoahH35725
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: TVC Rocket by @NoahH35725 | Stardance
|
1793735444.5219095
|
1794340244.5219095
|
|
20253
|
Nova Maps by @KoushikT | Stardance
|
KoushikT
|
2
|
13.0
|
71
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T00:56:53Z", "hours": 10.0, "multiplier": 5.85, "payout": 58, "blessing": "neutral", "text": "Nova Maps is an interactive mapping web app built with Streamlit, combining OpenStreetMap, TomTom, and OpenRouteService into a single dashboard for searching, navigating, and exploring locations. Look up any address or place by name and the map snaps to it with a labeled pin. You can also tap “Use My Location” to find yourself via browser geolocation — the map shows your position along with a shaded accuracy circle reflecting how precise the fix actually is (GPS vs. Wi-Fi/IP-based). Enter a start and end point, pick a travel mode (drive, walk, or bike), and get a routed path drawn on the map with distance and estimated travel time. Check live traffic conditions near any location — current speed vs. free-flow speed, a color-coded congestion indicator (green/orange/red), road closure status, and nearby traffic incidents plotted directly on the map. Search for nearby points of interest — coffee shops, gas stations, hospitals, anything — within an adjustable radius, with results shown as a pinned list and on the map, including address, category, and phone number when available. Switch the base map style on the fly: standard OpenStreetMap, dark mode, light mode, terrain, or satellite imagery. There is now also an AI assistant chatbot to help you 24/7 with the maps. There are also enderpearl chambers that take you to popular places on Earth. You can also check where the closest electric vehicle charging stations are, and to support people around the world, there is now a setting to switch from miles to kilometers and vice versa. Some problems I had along the way were finding a free API-based map service. Hope all of you love it! I made this project to show people around the world how united and friendly we can all be if we put our wars and borders away. NOT IN A BAD INTENTION, I JUST MEAN EVERYBODY TO HAVE FUN AND BE UNITED", "repo": "https://github.com/Koushik919-del/Nova-Maps", "demo": "https://nova-maps.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-23T21:54:48Z", "hours": 3.0, "multiplier": 4.04, "payout": 13, "blessing": "neutral", "text": "Nova Maps is an interactive mapping web app built with Streamlit, combining OpenStreetMap, TomTom, and OpenRouteService into a single dashboard for searching, navigating, and exploring locations. Look up any address or place by name and the map snaps to it with a labeled pin. You can also tap “Use My Location” to find yourself via browser geolocation — the map shows your position along with a shaded accuracy circle reflecting how precise the fix actually is (GPS vs. Wi-Fi/IP-based). Enter a start and end point, pick a travel mode (drive, walk, or bike), and get a routed path drawn on the map with distance and estimated travel time. Check live traffic conditions near any location — current speed vs. free-flow speed, a color-coded congestion indicator (green/orange/red), road closure status, and nearby traffic incidents plotted directly on the map. Search for nearby points of interest — coffee shops, gas stations, hospitals, anything — within an adjustable radius, with results shown as a pinned list and on the map, including address, category, and phone number when available. Switch the base map style on the fly: standard OpenStreetMap, dark mode, light mode, terrain, or satellite imagery. Some problems I had along the way were finding a free API-based map service. Hope all of you love it! Also check out my other websites on Streamlit!", "repo": "https://github.com/Koushik919-del/Nova-Maps", "demo": "https://nova-maps.vercel.app/"}]...
|
[{"post_id": 42296, "ts": "202 [{"post_id": 42296, "ts": "2026-08-06T22:54:57Z", "hours": 0.3667, "text": "Found a lot of problems with the code. I added the code, description, rules, and instructions for the MrBunny AI chatbot. I fixed some coordinates, like the coordinates for the Christ the Redeemer location in the Ender-pearl Chamber. Christ the Redeemer is not in the Middle East. It is in Brazil"}, {"post_id": 41682, "ts": "2026-08-06T01:47:39Z", "hours": 6.1939, "text": "Nova Maps is still the same type of map navigator website that will show you amazing places around the world, how to go from start to destination, traffic around the world, and you can change the map styles to fit your style! Right now, I am rewriting the code, making it more personalized to me by adding words and places in MARVEL and Minecraft. I have been getting reviews saying that it looks bland and AI-Made. I want to reassure I wrote the code; the AI organizes and debugs the code. Wish you all, love it when it is finally finished."}, {"post_id": 23184, "ts": "2026-07-06T00:31:07Z", "hours": 3.4, "text": "Trying to make it more original with some of my own features. It also now has an AI assistant to help you!"}, {"post_id": 14080, "ts": "2026-06-23T02:01:46Z", "hours": 0.8481, "text": "Trying to make it more professional"}, {"post_id": 13308, "ts": "2026-06-21T19:45:24Z", "hours": 0.8, "text": "Adding nearby places sections!"}, {"post_id": 13253, "ts": "2026-06-21T18:18:24Z", "hours": 1.5333, "text": "Working on the default settings right now."}]...
|
Title: Nova Maps by @KoushikT | Stardance
Devlogs Title: Nova Maps by @KoushikT | Stardance
Devlogs:
Working on the default settings right now.
Adding nearby places sections!
Trying to make it more professional
Trying to make it more original with some of my own features. It also now has an AI assistant to help you!
Nova Maps is still the same type of map navigator website that will show you amazing places around the world, how to go from start to destination, traffic around the world, and you can change the map styles to fit your style! Right now, I am rewriting the code, making it more personalized to me by adding words and places in MARVEL and Minecraft. I have been getting reviews saying that it looks bland and AI-Made. I want to reassure I wrote the code; the AI organizes and debugs the code. Wish you all, love it when it is finally finished.
Found a lot of problems with the code. I added the code, description, rules, and instructions for the MrBunny AI chatbot. I fixed some coordinates, like the coordinates for the Christ the Redeemer location in the Ender-pearl Chamber. Christ the Redeemer is not in the Middle East. It is in Brazil
Ships:
Nova Maps is an interactive mapping web app built with Streamlit, combining OpenStreetMap, TomTom, and OpenRouteService into a single dashboard for searching, navigating, and exploring locations. Look up any address or place by name and the map snaps to it with a labeled pin. You can also tap “Use My Location” to find yourself via browser geolocation — the map shows your position along with a shaded accuracy circle reflecting how precise the fix actually is (GPS vs. Wi-Fi/IP-based). Enter a start and end point, pick a travel mode (drive, walk, or bike), and get a routed path drawn on the map with distance and estimated travel time. Check live traffic conditions near any location — current speed vs. free-flow speed, a color-coded congestion indicator (green/orange/red), road closure status, and nearby traffic incidents plotted directly on the map. Search for nearby points of interest — coffee shops, gas stations, hospitals, anything — within an adjustable radius, with results shown as a pinned list and on the map, including address, category, and phone number when available. Switch the base map style on the fly: standard OpenStreetMap, dark mode, light mode, terrain, or satellite imagery. Some problems I had along the way were finding a free API-based map service. Hope all of you love it! Also check out my other websites on Streamlit!
Nova Maps is an interactive mapping web app built with Streamlit, combining OpenStreetMap, TomTom, and OpenRouteService into a single dashboard for searching, navigating, and exploring locations. Look up any address or place by name and the map snaps to it with a labeled pin. You can also tap “Use My Location” to find yourself via browser geolocation — the map shows your position along with a shaded accuracy circle reflecting how precise the fix actually is (GPS vs. Wi-Fi/IP-based). Enter a start and end point, pick a travel mode (drive, walk, or bike), and get a routed path drawn on the map with distance and estimated travel time. Check live traffic conditions near any location — current speed vs. free-flow speed, a color-coded congestion indicator (green/orange/red), road closure status, and nearby traffic incidents plotted directly on the map. Search for nearby points of interest — coffee shops, gas stations, hospitals, anything — within an adjustable radius, with results shown as a pinned list and on the map, including address, category, and phone number when available. Switch the base map style on the fly: standard OpenStreetMap, dark mode, light mode, terrain, or satellite imagery. There is now also an AI assistant chatbot to help you 24/7 with the maps. There are also enderpearl chambers that take you to popular places on Earth. You can also check where the closest electric vehicle charging stations are, and to support people around the world, there is now a setting to switch from miles to kilometers and vice versa. Some problems I had along the way were finding a free API-based map service. Hope all of you love it! I made this project to show people around the world how united and friendly we can all be if we put our wars and borders away. NOT IN A BAD INTENTION, I JUST MEAN EVERYBODY TO HAVE FUN AND BE UNITED...
|
1793735445.5659947
|
1793821845.5659947
|
|
67827
|
Frictionless by @west | Stardance
|
west
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @west | Stardance
|
1793735446.7756288
|
1794340246.7756288
|
|
26328
|
ASPHALT! by @ayshine | Stardance
|
ayshine
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T16:33:52Z", "hours": 1.0, "multiplier": 1.1, "payout": 1, "blessing": "neutral", "text": "What Did You Make? I built a 24/7 Slack bot with space-themed slash commands that anyone in the Hack Club Slack workspace can use. The bot responds to commands like /asphalt-ping to check if it’s online, /asphalt-astro to fetch NASA’s Astronomy Picture of the Day, /asphalt-mars to get Mars rover photos, /asphalt-spacefact for random space facts, and /asphalt-help to see all available commands. It runs continuously on Hack Club Nest so it’s always available. What Was Challenging? Deploying to Nest and keeping the bot running 24/7. I had to switch from systemd to pm2 after doing a lot of research online since systemd kept failing. Setting up SSH keys and debugging Git issues on Windows were also tricky. What Are You Proud Of? I’m proud of building something that actually works and is useful to others. The bot has 9 different commands that interact with real APIs from NASA, SpaceX, and other space-related services. Anyone in the Hack Club Slack can type a command and get a cool space fact, see the latest Mars rover photo, or check the ISS location in real time. It’s also running 24/7 on a real server, which feels like a huge step from just running code on my laptop. How to Test My Project In the Hack Club Slack workspace, type these commands in any channel: /asphalt-ping=Check if the bot is online /asphalt-help=Show all available commands /asphalt-spacefact=Get a random space fact /asphalt-astro=NASA Astronomy Picture of the Day /asphalt-mars=Get a Mars rover photo /asphalt-launch=Latest SpaceX launch info /asphalt-news=Latest space news headline /asphalt-company=Random space company profile /asphalt-iss=International Space Station location Example: Type /asphalt-astro and the bot will reply with NASA’s Astronomy Picture of the Day, including the title, date, explanation, and a link to the full image. The bot is live 24/7, so you can test it anytime! Just type any of the slash commands above and it will respond instantly.", "repo": "https://github.com/ayshinefr-dotcom/bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 17578, "ts": "202 [{"post_id": 17578, "ts": "2026-06-28T12:59:45Z", "hours": 1.2617, "text": "space based slackbot IM SORRY YALL 3 OF MY COMMANDS WERE NOT WORKING SO I EDITED IT AFTER I GOT NOTIFIED BY STARDANCE AND NOW MY SLACK BOT IS WORKING JUST FINE BUT THEY ARE STILL VISIBLE IN THE ‘HOW TO TEST MY PROJECT’ SECTION. UNFORTUNATELY I CANT EDIT THAT."}]...
|
Title: ASPHALT! by @ayshine | Stardance
Devlogs:
Title: ASPHALT! by @ayshine | Stardance
Devlogs:
space based slackbot IM SORRY YALL 3 OF MY COMMANDS WERE NOT WORKING SO I EDITED IT AFTER I GOT NOTIFIED BY STARDANCE AND NOW MY SLACK BOT IS WORKING JUST FINE BUT THEY ARE STILL VISIBLE IN THE ‘HOW TO TEST MY PROJECT’ SECTION. UNFORTUNATELY I CANT EDIT THAT.
Ships:
What Did You Make? I built a 24/7 Slack bot with space-themed slash commands that anyone in the Hack Club Slack workspace can use. The bot responds to commands like /asphalt-ping to check if it’s online, /asphalt-astro to fetch NASA’s Astronomy Picture of the Day, /asphalt-mars to get Mars rover photos, /asphalt-spacefact for random space facts, and /asphalt-help to see all available commands. It runs continuously on Hack Club Nest so it’s always available. What Was Challenging? Deploying to Nest and keeping the bot running 24/7. I had to switch from systemd to pm2 after doing a lot of research online since systemd kept failing. Setting up SSH keys and debugging Git issues on Windows were also tricky. What Are You Proud Of? I’m proud of building something that actually works and is useful to others. The bot has 9 different commands that interact with real APIs from NASA, SpaceX, and other space-related services. Anyone in the Hack Club Slack can type a command and get a cool space fact, see the latest Mars rover photo, or check the ISS location in real time. It’s also running 24/7 on a real server, which feels like a huge step from just running code on my laptop. How to Test My Project In the Hack Club Slack workspace, type these commands in any channel: /asphalt-ping=Check if the bot is online /asphalt-help=Show all available commands /asphalt-spacefact=Get a random space fact /asphalt-astro=NASA Astronomy Picture of the Day /asphalt-mars=Get a Mars rover photo /asphalt-launch=Latest SpaceX launch info /asphalt-news=Latest space news headline /asphalt-company=Random space company profile /asphalt-iss=International Space Station location Example: Type /asphalt-astro and the bot will reply with NASA’s Astronomy Picture of the Day, including the title, date, explanation, and a link to the full image. The bot is live 24/7, so you can test it anytime! Just type any of the slash commands above and it will respond instantly....
|
1793735447.6855555
|
1793821847.6855555
|
|
67829
|
TrackPoint-style mouse for tight spaces by @smitam TrackPoint-style mouse for tight spaces by @smitamaw | Stardance...
|
smitamaw
|
0
|
1.33
|
0
|
[]
|
[{"post_id": 78218, "ts": "202 [{"post_id": 78218, "ts": "2026-10-10T00:34:16Z", "hours": 0.8836, "text": "Devlog #2 I worked a little more on my CAD model for my TrackPoint-style mouse device. This device is intended to fit in tight spaces where a traditional mouse wouldn’t work, such as if you are using a laptop on your lap or on a very small desk. In my CAD model, I added a space/slot for the ESP32S3 that processes imputs from the joystick and buttons and sends mouse movements and actions to the computer via USB cable. (I use a USB-C to USB-A male-to-male cable to attach the device to the computer.) Next up: printing out the case and taping all the components in place!"}, {"post_id": 76613, "ts": "2026-10-04T05:34:04Z", "hours": 0.45, "text": "I just wired up the first prototype of my new project–a mouse that uses a joystick and buttons just like Lenovo ThinkPad TrackPoint, for use in spaces where a traditional mouse would not have enough freedom of movement. The reason I am building this is because, in most of my classes in high school, a laptop is required. However, I don’t want to use the trackpad, and the mouse that I bring usually doesn’t get enough space to move around on my small desk. So I am creating this project to help me use my laptop better and more conveniently at school. In addition to wiring up my first prototype, I also CADded up a first prototype for the 3D-printed frame the components are going to rest on. (It isn’t going to last long if it stays taped onto a folded index card!) Hopefully in the next devlog I will have printed the frame and maybe even mounted the parts to it!"}]...
|
Title: TrackPoint-style mouse for tight spaces by Title: TrackPoint-style mouse for tight spaces by @smitamaw | Stardance
Devlogs:
I just wired up the first prototype of my new project–a mouse that uses a joystick and buttons just like Lenovo ThinkPad TrackPoint, for use in spaces where a traditional mouse would not have enough freedom of movement. The reason I am building this is because, in most of my classes in high school, a laptop is required. However, I don’t want to use the trackpad, and the mouse that I bring usually doesn’t get enough space to move around on my small desk. So I am creating this project to help me use my laptop better and more conveniently at school. In addition to wiring up my first prototype, I also CADded up a first prototype for the 3D-printed frame the components are going to rest on. (It isn’t going to last long if it stays taped onto a folded index card!) Hopefully in the next devlog I will have printed the frame and maybe even mounted the parts to it!
Devlog #2 I worked a little more on my CAD model for my TrackPoint-style mouse device. This device is intended to fit in tight spaces where a traditional mouse wouldn’t work, such as if you are using a laptop on your lap or on a very small desk. In my CAD model, I added a space/slot for the ESP32S3 that processes imputs from the joystick and buttons and sends mouse movements and actions to the computer via USB cable. (I use a USB-C to USB-A male-to-male cable to attach the device to the computer.) Next up: printing out the case and taping all the components in place!...
|
1793735448.8469765
|
1794340248.8469765
|
|
6266
|
STARS by @AB_TRANFORMER | Stardance
|
AB_TRANFORMER
|
1
|
5.44
|
10
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T21:26:21Z", "hours": 5.0, "multiplier": 1.81, "payout": 10, "blessing": "neutral", "text": "I’ve finnished my first python game called Star catcher ,where you have to use your arrow keys to move the basket and catch as much stars as possible move up levels .I’d like to thank Code Nust for thid game idea . This is my first project on hackclub if there is any thing that i can improve feel free to tell me 😁", "repo": "https://github.com/abhilikescheese-pixel/STAR_CATCHER", "demo": "https://abhi-cool.itch.io/starcatcherultimate"}]...
|
[{"post_id": 21497, "ts": "202 [{"post_id": 21497, "ts": "2026-07-03T14:04:58Z", "hours": 0.4381, "text": "Please check out my project and leave a honest rewiew. https://abhicool.itch.io/starcatcherultimate THANK YOU"}, {"post_id": 14669, "ts": "2026-06-23T21:06:16Z", "hours": 0.3256, "text": "i’ve just fixxed a downloading problem on my itch project page.Feel free to check my project out."}, {"post_id": 14305, "ts": "2026-06-23T11:46:52Z", "hours": 5.0906, "text": "I am finished my first hack club project and I’m about to submit it !!!!"}]...
|
Title: STARS by @AB_TRANFORMER | Stardance
Devlog Title: STARS by @AB_TRANFORMER | Stardance
Devlogs:
I am finished my first hack club project and I’m about to submit it !!!!
i’ve just fixxed a downloading problem on my itch project page.Feel free to check my project out.
Please check out my project and leave a honest rewiew. https://abhicool.itch.io/starcatcherultimate THANK YOU
Ships:
I’ve finnished my first python game called Star catcher ,where you have to use your arrow keys to move the basket and catch as much stars as possible move up levels .I’d like to thank Code Nust for thid game idea . This is my first project on hackclub if there is any thing that i can improve feel free to tell me 😁...
|
1793735449.7870216
|
1793821849.7870216
|
|
37877
|
My own site! by @pcb | Stardance
|
pcb
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T09:01:06Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a personal site about me, a challenge was i kept opening and closing divs wrong, and idk theres like buttons at the top to do to the differnt pages on the site", "repo": "https://github.com/watchtheads/personal-site", "demo": "https://watchtheads.github.io/personal-site/"}]...
|
[{"post_id": 32238, "ts": "202 [{"post_id": 32238, "ts": "2026-07-21T08:50:16Z", "hours": 0.6047, "text": "didnt really add much but i added a languages in fluent in and places i wanna visit i might add more soon maybe like tomorrow"}, {"post_id": 32225, "ts": "2026-07-21T08:12:04Z", "hours": 1.0544, "text": "i added an about projects and contact page and separated them through a button so they are not all on the same page also theres a pretty cool purple color at the top"}, {"post_id": 32208, "ts": "2026-07-21T07:08:19Z", "hours": 0.97, "text": "working on my personal site i have the about me and the aout and proejcts kinda working this is up to step 6 im gonna do step 7 now"}]...
|
Title: My own site! by @pcb | Stardance
Devlogs:
Title: My own site! by @pcb | Stardance
Devlogs:
working on my personal site i have the about me and the aout and proejcts kinda working this is up to step 6 im gonna do step 7 now
i added an about projects and contact page and separated them through a button so they are not all on the same page also theres a pretty cool purple color at the top
didnt really add much but i added a languages in fluent in and places i wanna visit i might add more soon maybe like tomorrow
Ships:
i made a personal site about me, a challenge was i kept opening and closing divs wrong, and idk theres like buttons at the top to do to the differnt pages on the site...
|
1793735450.971926
|
1793821850.971926
|
|
67830
|
My awesome macropad! by @Dinakar | Stardance
|
Dinakar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Dinakar | Stardanc Title: My awesome macropad! by @Dinakar | Stardance...
|
1793735452.1441584
|
1794340252.1441584
|
|
36348
|
Chess Bot by @GunRattler28 | Stardance
|
GunRattler28
|
1
|
143.67
|
2096
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-21T06:00:32Z", "hours": 127.0, "multiplier": 16.58, "payout": 2096, "blessing": "neutral", "text": "I’m finally shipping the chess bot! So excited to see what people think of it :) . Before you try my project I highly suggest reading the README (on my github page https://github.com/GunRattler28/Chess-Bot ). It has a full list of all controls which will help you understand how to play. Anways, can’t wait to see what you guys think of it!", "repo": "https://github.com/GunRattler28/Chess-Bot", "demo": "https://github.com/GunRattler28/Chess-Bot/releases"}]...
|
[{"post_id": 80354, "ts": "202 [{"post_id": 80354, "ts": "2026-10-17T11:49:41Z", "hours": 0.8044, "text": "So, I’ve actually decided to work on making my bot playable on a website since that was one of the main things people said they would have wanted last ship and stardance is ending soon. But thats not why I’m posting. I’m posting because I spent the last 40 minutes rooting out a bug that caused my premoves to not be played. My first step was playing the release version that can be downloaded to see if the bug was there as well. Luckily it wasn’t so I went to my current commit on my main branch and kepy undoing commits (and saving them with git stash ) until the bug was gone. I then found that the bug only became a thing after I merged my commenting branch. Because of this I did the same thing of undoing commits and saving them on the commenting branch til I found the commit that caused the bug. I then went through all the changes until I found the problem. Then I fixed the bug, merged the fix to main then merged main into my other branches so that they would have the bug fix as well. I’ve already done some research and have found that pygbag seems to fit my needs for turning my pygame program into a website pretty well. Due to this I will probably use pygbag to get a website version of my chess bot up and running! Attached is a screenshot of the commit that caused the bug. Before the commit is on the left and after the commit is on the right. Try to find what caused the bug! If you can’t check the comments of the post as I am gonna say what the problem was there. I also attached a photo of how my git tree looks now and… it looks sooo messy lol."}, {"post_id": 79553, "ts": "2026-10-14T16:01:16Z", "hours": 2.835, "text": "I started getting bored of just commenting my code so I created a new branch in which I am trying to make my bot be able to play other bots. After some research, I found that the engine needs to be able to take in moves in the form of algebraic notation (a type of shorthand notation for moves. for example: Be4). Because of this I read a Wikipedia page on algebraic notation and made a function to convert between it and the parameters my makeMove() takes, that being: startRow , startColumn , endRow and endColumn . I have done this by first checking if the move is a castle (notated by O-O or O-O-O) then forming the full start and end coordinates by hardcoding the column values and finding the row based off the colour that is castling. Then I find what piece is moving (shown by the first letter) and if there is a promotion (shown by ‘=’ sign). Algebraic also has characters to show captures (x), checkmates (#) and checks (+), however the engine does not need these and so they are removed in 3 separate while loops. At this point I am left with just the end coordinates and maybe a combination of start coordinates. To find the full start coordinates (as they are all I am missing) I loop through the specific bitboard for the piece and whenever I find a square where there is a piece, I check whether it matches with the start coordinates I have, and if it does whether it can legally reach the end square. If it can then that is my piece and I return its start coordinates and the end coordinates it moves to (which is given in the input string). Currently, this function lives inside a random file in my project folder but my next step will be to properly integrate it into the rest of the code."}, {"post_id": 78191, "ts": "2026-10-09T22:40:08Z", "hours": 7.2036, "text": "Yup! I did what I said I would last time, and finished commenting ALL of logic.py . I don’t think I can describe how long this took and how annoying it was to have to go through 750+ lines of code and add comments explaining things. And then I realise that there’s just random stuff that I don’t even need. Anyway, I’m pretty satisfied that I managed to comment so much. This is definitely the largest file and so I’m happy I’ve gotten it out of the way. There’s not really much I can’t say like explaining and stuff because all I’ve done for the last 5 hours is explain stuff. Anyway once I’ve commented everything, I’ll probably make another devlog and then go and work on something else."}, {"post_id": 72816, "ts": "2026-09-23T19:46:37Z", "hours": 5.8231, "text": "Thanks for all the positive feedback and constructive criticism on my ship! Working to improve where people said and I am starting by trying to add comments to my code to explain what is happening. So far I’ve fully commented 3 / 7 files and am around 30% through commenting logic.py which contains most of the complicated code. Its taking a while but I really hope that this will help people understand what I am doing and that they will like my project more because of this. Next I am going to continue adding comments to logic.py and will probably have to make a devlog after just that since the file is pretty big and has slightly complicated stuff in it. Once again thanks to all the people who rated the project or gave feedback!"}, {"post_id": 71494, "ts": "2026-09-20T22:33:25Z", "hours": 2.5339, "text": "I’ve made a few small changes that help slightly speed the bot up. I stopped checking whether I have surpassed the time limit every move I search and instead every 2048 moves I search. This is better as it removes thousands of unnecessary library calls which each add a small amount of time to how long each move takes to search. Since computers are very fast 2048 doesn’t actually take long at all but it massively reduces the amount of times the pygame library is called. I also changed my move ordering to sort manually instead of with in a lambda function since this lambda functions are more inefficient. I am next going to ship the project!!!"}, {"post_id": 69354, "ts": "2026-09-16T21:16:32Z", "hours": 3.3497, "text": "Premoves finished! My premoves are now fully implemented and the branch is merged. Making the move with middle click removes that specific premove. Middle clicking a random square clears all premoves and arrows. I also added principal variation search (pvs) which is just searching moves that aren’t the previous best move with a tight move score boundary then researching them normally if they are better than expected. I am probably going to ship soon and so will start polishing the project up now."}, {"post_id": 63850, "ts": "2026-09-07T20:35:48Z", "hours": 6.9336, "text": "Way better premoves. I’ve updated my premove system to store multiple premoves. I did this by storing eaach premove as a tuple of ( startRow , startColumn , endRow , endColumn ). These tuples contain all the data I need to know and can be easily appended into an array. To clear a premove you can either do the same move again which removes that specific premove or tap the middle mouse button anywhere which clears all premoves and arrows. I also render a translucent version of the piece that I’ve moved to its premove destination and remove the texture for where it was originally. This helps you keep track of what your premoves are actually doing. I do this by drawing the board normally then looping through each move in the premoves array and drawing that piece at its correct destination in reduced alpha. Next I am going to try to improve my bot further so that I can push to a depth of around 10 during midgame."}, {"post_id": 59871, "ts": "2026-09-01T21:01:21Z", "hours": 5.3678, "text": "I’ve added FEN strings! FEN strings (Forsyth-Edwards Notation) are a way to store positions of chess games. They are used by many chess engines to allow players to start from different positions or midway through games. Adding these wasn’t too difficult as the strings are formatted in a nice way. I simply split up the FEN string into its 6 parts and set my variables to the value in the FEN string. To test if it worked I inputted the FEN string 4kb1r/p2n1ppp/4q3/4p1B1/4P3/1Q6/PPP2PPP/2KR4 w k - 1 16 which gives the position of the famous opera game directly before the queen sacrifice. I then set the bot colour to white and was glad to see that it immediately found the best move (the queen sacrifice). I also added premoves so that I can choose my move in advance. I did this by just storing the move I make when it is the bot’s turn and playing it as soon as the bot plays. However I can only premove 1 move ahead. Next I will try to allow the user to premove multiple moves ahead."}, {"post_id": 52243, "ts": "2026-08-22T10:35:52Z", "hours": 2.8078, "text": "Quiescent search is amazing! After adding it my bot instantly became better. A quiescent search just means that when evaluating a board state to a certain depth even if you reach that depth you need to evaluate until a quiet move (a move that isn’t a capture). This means that even if the bot reaches the max depth in the middle of a piece trade it won’t just think the move is amazing since all it can see it won a piece. Since I added the bot, when tested against other bots it has made 0 blunders! In fact it beat Li, a bot rated 2000 on chess.com ! I’m really proud of this and think it is really cool to say that my bot has beaten a 2000 rated bot. However, it only beat the bot once and so it could just be lucky. I was going to test it in 2 more games against the same bot but found myself getting bored of manually inputting moves into chess.com and my bot to get them to play each other. Therefore, I’m planning on making my bot able to play other bots on its own. To do this I will need to download the other bots and make my bot give properly formatted inputs and outputs."}, {"post_id": 51300, "ts": "2026-08-20T21:17:05Z", "hours": 3.5539, "text": "Massive improvements in depth! I added 2 changes: null move pruning and late move reduction. Null move pruning is when the bot ‘passes its turn’, when searching for the best move. The bot then evaluates the board at a reduced depth after letting the opponent play twice in a row. If it is still in a winning position then that means it is winning by a lot. This means that it can prune this branch since the opponent wouldn’t let the game get to this state and would make a better decision earlier in the tree. Since the opponent wouldn’t let the game get to this it means that further analysis isn’t necessary. Late move reduction works on the basis that I have good move ordering, which I just worked on so I would hope I do. Late move reduction means that I search the later moves at a reduced depth since the best moves are at the start and so later moves are likely bad. If they turn out to be good after the reduced evaluation depth then they are researched at the full depth. This helps reduce the amount of moves which need to be evaluated by a lot. Together null move pruning and late move reduction have taken my depth from around 6 - 7 in midgame to around depth 7 - 10 in midgame! In endgame this is even more. When I tested it in endgame it got to a depth of 13! My next change is something called quiescent search which will boost the bot’s elo by massive amounts as it should mostly stop the bot from making blunders."}, {"post_id": 50191, "ts": "2026-08-19T10:05:52Z", "hours": 1.9161, "text": "Move ordering improved! I’ve merged my SCRUM-29/move-ordering branch with main and now have my improved move ordering in main. This has let me go from a depth of 5 to almost always a depth of at least 6. I then merged main into SCRUM-42/improve-maintainability so that I could add comments to the code I added from the move ordering branch. Next I am going to add some comments explaining what things do."}, {"post_id": 48364, "ts": "2026-08-16T17:56:17Z", "hours": 4.4589, "text": "I’ve massively improved my organisation! I’m now properly utilising branches which is allowing me to work on multiple changes at the same time. Currently I am working on 2 branches. One is about improving my maintainability by adding comments so that other people can understand what I am doing and why. This also has the added benefit of me being able to make some small improvements and bug fixes as I am reading through all of my code. The second branch is about move ordering which is super important as it makes my alpha beta pruning more effective. Working on these changes on branches is useful because it not only keeps it organised and easy to see what each commit is for but also means that if I decide I don’t want the change anymore it is easy to remove as it isn’t mixed in with all the other changes. To help with this I’ve also created a Jira board which helps me keep my ideas organised. My branches are called SCRUM-NUMBER/NAME . The scrum number is given to me by Jira. As well as improving my organisation I also further improved my zobrist hashing by replacing using modulo on the hash to get the index of the transposition with using an and gate between my hash and the table size - 1 (which is just all 1s and a single 0 on the left most digit since the table size is a power of 2). I also stored my castle rights as a single 4 digit binary digit where each digit represents whether a certain rook has castling rights or not. My logic with this was since the point of bitboards is 12 integer is better than 64 integers, a single 4 digit integer is better than a dictionary of 4 values but I am not actually sure if this is true or not. On the maintainability branch so far I have added comments to all of main.py . On the move ordering branch I have improved my sorting from just sorting by most valuable capture and least valuable attacker which is only good for captures to also scoring promotions very highly. I also instantly push the previous best move to the front of the queue and score moves which cutoff branches in alpha beta pruning highly as well. Next I will try to add comments to one of my other files and improve my move ordering by not using lambda functions."}, {"post_id": 47220, "ts": "2026-08-15T00:10:15Z", "hours": 4.5128, "text": "I’ve improved my endgame condition. When testing the bot I found that during endgame it would sometimes move its king to the corners of the board. I realised that this was because it saw a queen on the board and due to the poor endgame condition it thought this meant that it wasn’t endgame and instead used the early / mid game position bonus table which rewards staying safe in the corners. However in endgame moving the king to the corner isn’t good as it makes checkmates easier for the opponent and means that the king isn’t used to help checkmate the opponent, which is crucial in certain endgames such as a king and queen against just a king. In situations like this the king is necessary in achieving a checkmate. I changed it to being if there is less than (2 black queens and 2 white queens and less than 16 pieces) or if there is less than 5 pieces not including pawns. This is more accurate and ensures the king actually helps win and tries to stop a checkmate on itself. I also improved my zobrist hashing by fully incrementing it. Previously I incremented it for everything except castling and en passant however now these are implemented as well. I also noticed that the bot would walk its king towards the centre of the board during the opening which puzzled me until I read through my code and realised its because I set totalPieces to 0, asked if it was endgame, and afterwards set totalPieces to the true value. This was pretty difficult to find as I couldn’t see it by just seeing if it thought it was endgame at the end of a move. This makes sure I can actually get my hashes in O(1) time. Next I am going to try and make my arrows darker when over each other."}, {"post_id": 46626, "ts": "2026-08-14T00:35:40Z", "hours": 3.7133, "text": "I’ve added a better endgame condition! Now endgame is determined if (there are no queens and less than 16 pieces on the board) or if there is less than 8 pieces on the board. This is better because it means when pawns promote the king doesn’t run to the corners or use the other position bonus table. I also improved my bot’s 3 fold repetition check when searching for moves by using a dictionary with hashes as keys and number of times they have appeared as values. This lets me check if I have been in the position 3 times before in O(1) instead of O(n) . I also improved my makeMove() and previousMove() functions by checking if its the bot searching for moves and if it is then only storing the key information instead of everything. To help simplify previousMove() I instead created a seperate function called unmakeMove() (clearly related to makeMove() ) to undo moves when the bot is searching. I also changed the time the bot has to move from 3 seconds to 1.5 seconds so that it feels snappier. Probably cos I have 0 patience when I want to test if the bot works :). Next I am going to try and make my bot faster by improving the move ordering so that alpha beta pruning can be more effective."}, {"post_id": 46469, "ts": "2026-08-13T18:10:03Z", "hours": 6.67, "text": "Iterative deepening! The bot now searches depths in an ascending order instead of descending. This is only possible thanks to my transposition tables but means that I can give the bot a time limit. Once the time limit is reached it just return the best move of the highest depth its fully searched. This means that I can search to different depths in different positions whilst making sure I always play within the time limit. This is good as it means I can have a high depth during the opening and endgame whilst having a medium depth during mid game instead of having a medium depth everywhere to ensure moves at midgame don’t take too long. Midgame usually has a lower depth due to the high number or possible moves that can be played. I can also easily change the time limit with just a single variable. This means I can get my bot to play faster but also worse or take longer but play better. I added incremental evaluation. This means that for each move, instead of looping through all 12 bitboards and recalculating the evaluation score from scratch I instead update it from the current evaluation score. So when I move a piece I subtract its old it’s material value and then add the material value if it still exists. The same happens for the position bonuses. This takes my time complexity from O(n) to O(1) which is a massive upgrade. These changes lets my depth in early game and endgame almost always stay at 7 whilst during midgame hover between depth 6 and depth 7. Currently I determine if I am in endgame if both queens are gone and the total amount of pieces is below 16 however I feel that this isn’t a good measure and I should improve this. Next I will try to improve efficiency by improving my move ordering so that the alpha beta pruning is more efficient."}, {"post_id": 45212, "ts": "2026-08-11T15:18:18Z", "hours": 7.8964, "text": "Transposition tables! I’ve added zobrist hashing so that I can create a dictionary that contains all of the board states I have already evaluated. Since many different moves can lead to the same position it means that I can save computing power by just getting the score of that board state instead of having to re-evaluate the board again. Zobrist hashes are just a way to represent the board in hash. This is useful as I can use them as the keys in my dictionary and quickly see if the current board state has been evaluated yet. I also fixed a bug that let the bot play illegal moves as there wasn’t a legality check after the aspiration window failed. An abort flag was also added that is set to True when the user undos or redos a move. This lets me instantly stop that thread’s search for the best move ensuring it doesn’t use unneccessary computing power. Next I am going to try and implement iterative deepening so that I can force the bot to move within a certain amount of time. This would let me make the bot play different ‘time controls’ by altering how long it has to think about what move it should play. I tested it against some bots from chess.com and it managed to beat Wally (a 1800 bot) but lost to Li (a 2000 bot)"}, {"post_id": 43276, "ts": "2026-08-08T13:19:50Z", "hours": 9.4272, "text": "Improved efficiency! I’ve improved the efficiency of the bot by sorting the possible moves better. This is useful as it means when the alpha beta pruning goes over everything it searches the best trees first. This means that it can prune more branches. I also removed some random integer conversions on my bitboards as they did nothing, since the bitboards are already integers. I also removed a restriction that didn’t let the player do anything on the bot’s turn. Now the player can draw during the bot’s turn. I also went across all of my code and changed it to use (row, column) instead of (column, row). This helps keep things cleaner. I then also changed the bot calculations from from using the fullyLegalMoves() function to the movementLegalMoves function(). fullyLegalMoves() just makes sure that the king isnt in check after the move. If it is then it undoes the move. By insteading doing this in my bot.py it means I can just not undo the move and immediately remove that move. This means that I don’t need to undo the move more times than needed. This is very helful as undoing a move takes up computing power. I also completely replaced the piece names with integers as this would be slightly better and I could use bit operations with integers. As well as this I also added a timer that shows how long the bot took to make its move. By adding all of these changes the bot reduced its time on the first move as white from ~4 seconds (with depth 4) to 3 seconds (with depth 5). This shows that it is much more efficient as, time taken increases exponentially as depth increases. As well as this 3 seconds is the earliest the bot can move and so the true speed is likely much less."}, {"post_id": 40993, "ts": "2026-08-04T21:24:23Z", "hours": 1.4964, "text": "Better arrows! I don’t remember where but there is one place where drawing arrows in a knights movement creates an L shaped arrow instead of just a normal arrow. I love this and so implemented it into my program. I also added aspiration windows. Aspiration windows work on the basis that moves don’t usually swing the score by a lot. This means that when going down paths we can set the lower and upper bounds to previous score ± window size. This helps prune more paths. If we find that the score is actually higher than we expect we search again but without the aspiration window. This helps remove lots of the obviously bad paths which makes the program much more efficient. Next I am going to add zobrist hashing so that I can use transposition tables."}, {"post_id": 40821, "ts": "2026-08-04T16:15:52Z", "hours": 2.5794, "text": "Colour randomisation! The colour you play as is chosen at random at the start of the game. The board is also automatically rotated so that you are at the bottom and the bot is at the top. This also helps to show which colour you are playing as. I also show the last move by making the starting square #97C997 and the ending square #8DCE8D. I did this as when I asked I watched someone play it I noticed that they would often undo the move, to see what the bot just did, then redo the move again. This helps make everything feel more polished. I like the ending square colour ( #8DCE8D ) but I’m not sure if I like the starting square colour ( #97C997 ). These colours are very easy to change though and so I can quickly edit them to test out different colours. I also realised that when I eventually ship the project most people who download it won’t have the font I use ( dynapuff ) installed. I tested it out to see what it is like without it and found that it crashed. To fix this, I implemented a try - except statement which sees if dynapuff exists on the user’s computer. If it does then it uses dynapuff which is how it is supposed to be played but if they don’t have the font it uses arial instead. Due to the strange spacing of dynapuff I used double spaces between the words on the game over messages, but when using arial the double spaces look quite strange. I also tweaked some of the position bonus values to further encourage castling. Next I am going to try to add a file to reward moves which keep keep the king safe."}, {"post_id": 40296, "ts": "2026-08-03T18:45:17Z", "hours": 10.2542, "text": "I’ve added position bonuses! I created a new file which rewards moves which place certain pieces in certain areas. For example pawns are rewarded for controlling the centre and pushing to the 7th rank (so that they can promote). The bot now tries to control squares and this means it now has proper openings. I also completely updated the file structure to split the responsibilities more clearly. I also updated main.py and logic.py and made them classes. Making logic.py a class means that I can use it for both the player actions and bot actions without them interfering. This also makes my previousMove() much cleaner as it means when the bot uses it, it doesn’t interfere with when the player uses it. Due to the new file structure it means that I can easily change the weights of each of the different modules to change how the bot plays easily. Later I will add a slider or at least a setting that lets the player control these modules. As well as this I also changed it so that drawing the same arrow again removes the arrow. Next I am going to try add another module that rewards moves which keep the king safe."}, {"post_id": 37668, "ts": "2026-07-30T15:47:33Z", "hours": 7.4286, "text": "I’ve added a bot! The main point of this was to link the new file I made ( bot.py ) to main.py . The bot currently just chooses moves based off of what would result in the best material difference between white (player) and black (bot). It calculates these moves with a depth of 4. Since the main point wasn’t to actually make a bot in one go the bot isn’t very good currently. However I still added alpha beta pruning. Alpha beta pruning works by storing the best guaranteed outcome for you (alpha) and the best guaranteed outcome for the opponent (beta). Whenever it finds a path where the opponent can force a move that is worse than the alpha, it immediately stops going down that path. The same happens for beta. I also removed some duplicated code in main.py and fixed the undo and redo move logic as I forgot to check if it still worked properly after switching from tkinter to pygame. Currently you can only tap the buttons and but can’t hold to go back multiple moves. Undoing and redoing moves with a bot was a bit confusing for me and so I decided to make it so that when undoing and redoing there is 3 seconds before the bot moves. During these 3 seconds you can go forwards or backwards to reset the timer. I used threading so that the bot starts to calculate what move it would make at the same time as the 3 seconds are passing. This means that if you decide to stay on the turn you don’t need to wait as long. I also blurred the background of the the promotion GUI so that it is grabs the players attention. Next I am going to try and add a better bot by assigning each possible move a score that is based off of the squares it controls, offensive and defensive opportunities and potentials for forks (when 2 pieces are being attacked by 1 piece so only one piece can move out of danger)."}, {"post_id": 36896, "ts": "2026-07-29T08:41:59Z", "hours": 1.9431, "text": "I’ve split my file into 5 now. There is moveGeneration.py which calculates all the legal moves, moveExecution.py which actually moves the pieces, updateBoard.py which updates the board, gui.py which handles graphics (like arrows, promotion page and clicks) and main.py which says what functions should happen when an input is given and has a while loop for while the game is running (as is needed by pygame). Splitting the file makes it much easier to debug, keep track and add features instead of just having one ~1000 line file where everything is jumbled up. Next I am going to start work on the actual bot."}, {"post_id": 36538, "ts": "2026-07-28T18:38:30Z", "hours": 1.1517, "text": "Insufficient material and 50 move rule! These were the last things I needed to add before step 1 was complete. Now the next step is to actually add the bot! I’ve got everything I need down for a game of chess before 2 players. I added insufficient material by creating a new insufficientMaterial() . Inside the function are some if statements that determine whether winning is still possible (not assisted by opponent going into the corner). I also added the 50 move rule by checking moves since last pawn advancement or capture and if it exceeds 50 then end the game. I also made it so that once the game ends you can go undo moves and continue playing instead of just having the game end. Next I am going to try to clean up my code, split the code into multiple files and optimise it."}, {"post_id": 36025, "ts": "2026-07-27T20:54:24Z", "hours": 1.3014, "text": "En passant has been added. I find if it is legal by making sure the pawn capturing is on its fifth rank and the pawn being captured is moved 2 forward. Thats all I need for en passant (also only available for the first go it is there). I also made my program more efficient by ensuring I only rely on an array for finding what piece is on an index and drawing. Everything else uses bitboards which helps me fully utilise bitboards. I now have 2 things left: 50 move rule and Insufficient Material. Both of these end in a draw and are the last things I need for my program to have all the rules of chess! Next I will add the 50 move rule"}, {"post_id": 34600, "ts": "2026-07-25T13:43:51Z", "hours": 2.65, "text": "I was so unimpressed by how my old arrows looked I just completely switched libraries! I now use pygame instead of tkinter. It offers much more graphical customisability and now I can draw arrows (and other shapes) with true transparency instead of just stipples. One of the main downsides of pygame is that it constantly redraws each frame. This takes computing power and drains battery. To stop this I created a redraw boolean which tells my script when to redraw. This means instead of redrawing every single frame I redraw whenever something actually changes. Due to pygame I also customised the arrows so that the tails are rounded. This means that multiple arrows from the same point looks much cleaner. I also get true translucency instead of stipples and I added an icon!"}, {"post_id": 34132, "ts": "2026-07-24T17:06:08Z", "hours": 4.1839, "text": "Need to get your strategies into something you can see? Lines let you do just that. Right clicking and dragging draws a line that follows your cursor around. Right clicking again places the line. The lines are automatically centred so that they snap to the centre of the squares. If you line starts and ends at the same place it creates a circle instead. I also spent lots of time making sure my bitboards are used properly as when I created the array last time I used it for more than I intended and lost most of the arrays of bitboards. I also noticed that the promotion GUI wasn’t properly centred and so fixed that. I don’t really like the lines as they use stipples instead of a solid colour and overall don’t look nice but tkinter doesn’t offer transparency apart from stipples and doesn’t allow lots of customisation of the arrows. Next I will likely try to add en passant."}, {"post_id": 33646, "ts": "2026-07-23T18:39:22Z", "hours": 4.0794, "text": "Finally, promotions! This was the last major part of chess that I didn’t have. I added it by finding the row of the piece when I move something. I hardcoded it so that it knows when the pawn is at the last row. When at the last row, it runs a choosePromotion() function. That function then creates a frame inside of my window. I then loop for each of the choices of the pieces I can choose. For each of these pieces I create a button with the piece (in the correct colour) in the centre. The frame waits until I pick a choice before adding a 1 on that piece’s bitboard at the correct location and removes the 1 on the pawn bitboard. Thats all I need to do to register a promotion! The rest of the time I spent optimising my code and realising that I didn’t have to use just a bitboard or an array, I could use both. Knowing that, I removed my getPiece() function and instead used an array to find the piece at a row and column. This is more efficient as arrays have a lookup time of O(1) whereas the getPiece() function has a lookup time of O(n) in the worst case. This is because my getPiece() function worked by cycling through each bitboard to find what piece was at a certain coordinate. This meant that I could also remove my totalPieces bitboard since this was only used in the getPiece() function to avoid cycling through all 12 bitboards if there was nothing there. Overall I’m really happy with how everything is going as I have all I really need for a proper game of 2 player chess. Next I am going to try and add the small things I am still missing such as En passant and the 50 move rule."}, {"post_id": 33388, "ts": "2026-07-23T09:22:55Z", "hours": 1.5583, "text": "Stalemates and three-fold repetition have now been added. Stalemates are calculated if legalMoves(turnColour) returns none but the king is not in check. I find if there is three-fold repetition by storing a hash of the board every move. This is stored in a dictionary as dictionaries are much better than arrays for lookups. After each move I see if that board state is in the dictionary. If it is I increase its value by 1. If not I set its value to 1. I then see how many times its reached that board state and if it is 3 times I end the game and show bright red text saying ‘Three-fold Repetition! Nobody wins!’. The hash includes piece positions, turn colour and castling rights as these are 3 of the 4 criteria that FIDE use. The fourth is en passant however that has not been added yet. Next I will add pawn promotions as this is the last major thing I don’t have."}, {"post_id": 33184, "ts": "2026-07-22T21:11:59Z", "hours": 2.3886, "text": "Castling! I’ve actually added castling this time. The castling also works with undo / redo move so that it undoes and redoes the move correctly. I’m starting to think my python file is getting a bit big now so I also created a few helper functions to help reduce code duplication. Its 572 lines currently. Luckily I am quite close to finishing the actual board and getting everything ready for a 2 person game of chess. This was my first goal so that the bot just becomes one of the players. Once I’m ready for a 2 person game of chess I’ll try to create another python file for the bot. This will help me keep track of what is doing what. Next I am going to add pawn promotion as that’s one of the biggest things that I don’t have yet. It is essential in late game and so is one of my priorities."}, {"post_id": 32902, "ts": "2026-07-22T11:18:43Z", "hours": 2.9108, "text": "Ever misclick and sell the game? Well not anymore! You can now undo moves by tapping the left arrow on the keybord and also redo those same moves if you change your mind by tapping the right arrow ! I did this by adding a saveMove() function which I run after every move I make. This saves the details of the last move to the moveHistory array: Piece Moved Start Position End Position Piece Captured (Just “” if None) Turn Colour Moves so far In my undoMove() function I remove the last move done and add it to an array called redoHistory . I then set all the details to the last entry in moveHistory . I do the same in my redoMove() function excpet I use the last entry in redoHistory instead. I’ve allowed undos after checkmate so that you can look for what went wrong and try other moves that might’ve stopped it. I also added sound! You’ll be able to see / hear all of this if the video uploads instead of just a screenshot. Next I am going to add castling (for real this time)."}, {"post_id": 32585, "ts": "2026-07-21T21:11:56Z", "hours": 2.6961, "text": "The game can now end! I have added a check to see if it is checkmate. When it is checkmate bright red text appears on the screen that says “Checkmate! WINNER wins!” (it says the colour which won not WINNER). I have also changed it so that when a player is in check they are forced to make a move that stops them from being in check. The only circles that come up are ones which would block the check to make it a bit easier for players. I’ve also made it so that my new function blockCheck() takes the calculations made by calculateLegalMoves() and uses it to display and allow only legal moves. As well as this anywhere that used to call calculateLegalMoves() now calls blockCheck instead. By making sure each function does 1 task it makes debugging easier ( not that anything would ever go wrong… ). Next I am going to try and add castling as this is a crucial mechanic that is used often."}, {"post_id": 32399, "ts": "2026-07-21T15:39:28Z", "hours": 2.8764, "text": "I’ve added better red and green overlays that are translucent so that you can see through them an easily know what piece you are taking. But most importantly, I’ve added check detection. I created a few new functions to do this. The first function I created was the isSquareAttacked(row, column, atkColour) function. It works by cycling through the bitboards and checking if they are atkColour or not. If they are find the type of piece and those pieces could attack the king. I think this will be helpful when I start to actually make the bot. I also created a simple findKing(colour) function to see where the king is so that I can parse that information into the isSquareAttacked() function. I then get a boolean. If it is true (the king is in check) I add the red overlay to the king so that the player easily knows they are in check but I don’t actually force them to block the attack yet. I think the overlay should be different but am not sure what to make it (gimme some ideas). I also created a slidingMoves() function as in my calculateLegalMoves() function I had ~40 lines of almost fully repeated code. Next I am going to force the player to block the check and end the game if it is checkmate."}, {"post_id": 32072, "ts": "2026-07-20T23:45:34Z", "hours": 0.9622, "text": "Finally took the time to change the piece textures so that black has an actual piece colour and you don’t get confused about whose pieces are whose"}, {"post_id": 31762, "ts": "2026-07-20T12:27:13Z", "hours": 3.4017, "text": "I’ve added dots to show where you can move when you click on a piece. If the position you want to move the piece to the dot is green but if it has an enemy piece the dot is red. Sadly, tkinter (the library I’m using) doesn’t support transparency. Because of this the dot takes up some of piece you want to capture. I can fix this by instead of drawing a circle drawing a translucent image… but tbh i rly cba. I will eventually do it to make it look better and actually add black pieces but i want to focus on getting things to actually work for now. The reason why this took me so long to implement is because as I was making the function to draw the dots I found that it was doing something very similar to my validMove() function but it was MUCH more efficient. In the old function I went through every square on the board and looked if the piece selected could get there. This is very inefficient and would build up quickly when I call the function 1000s of times per second (when I eventually add the bot). In my new function I look at the selected piece and have an array of each of the places it can move relative to its position. I then add the dots to those places if they are able to move there. This ended up with me just completely removing the old function and knowing its a valid move if there is a dot there. Next I am going to add something to see if the king is in check and maybe add some text when it is checkmate."}, {"post_id": 31082, "ts": "2026-07-19T06:07:07Z", "hours": 2.55, "text": "I’ve implemented bitboards instead of an array to store my board. At first I didn’t understand why bitboards were so good but after an amazing youtube video ( here ) I understand them and love them. I use them by having a 64 bit long integer (wow thats long) that represents the 8 by 8 board. Each bit can either be a 0 or 1 and represent whether there is a piece there or not. But you might think then how do you know what type of piece each 1 is? Thats why I use 12 bitboards (technically theres 1 more I added for extra efficiency but I don’t need that). Each of these 12 bitboards represents a type of piece in a specific colour (for example: white pawns and black pawns have 2 different bitboards). Then when I want to move pieces I create a position integer which is just 63 zeroes and a single 1 where the piece should be. I then invert this and use an AND statement so that all of the results for the AND are true where there are pieces apart from where I set the 1 at the start (though it is now a 0)."}, {"post_id": 30753, "ts": "2026-07-18T16:10:19Z", "hours": 3.6586, "text": "Added move legality. You can now mostly only make legal moves however I have not added something to checks if the king is in check. I made sure the move was legal by taking the startRow startColumn and endRow endColumn. I then look at what piece is being moved and ensure it is ok. If it isn’t nothing happens when you try to click and you have to make another move. I made sure that the correct colour moves as well. I also haven’t added pawn promotions, castling or en passant (tbh im not 100% certain on the rules of en passant). I couldn’t add castling as I don’t have a move history so would have no way of knowing if the king or rook have moved before. I’m now working on converting my current way of storing the board (a 2D array) into bitboards. After some research I found that bitboards are more than 5 times more efficient than arrays!"}, {"post_id": 30312, "ts": "2026-07-17T19:23:30Z", "hours": 2.0086, "text": "I can now move pieces! But there is no legality check yet. I also added a green outline if you select a piece. It works by listening for a click. Then when it gets a click it takes mouseX and mouseY and divides by positionSize to find which row and column it is on. It then checks against the board to see what is on that position. If it is a piece then it creates an outline and sets that as the active square. If it is empty AND active square has a value, it moves the piece."}, {"post_id": 30018, "ts": "2026-07-17T08:18:30Z", "hours": 1.4367, "text": "I’ve finally decided to actually making a chess bot and stick to it! So far I’ve set up the chess board for just visuals. Everything right now is purely visual. I am using python and the tkinter library."}]...
|
Title: Chess Bot by @GunRattler28 | Stardance
Dev Title: Chess Bot by @GunRattler28 | Stardance
Devlogs:
I’ve finally decided to actually making a chess bot and stick to it! So far I’ve set up the chess board for just visuals. Everything right now is purely visual. I am using python and the tkinter library.
I can now move pieces! But there is no legality check yet. I also added a green outline if you select a piece. It works by listening for a click. Then when it gets a click it takes mouseX and mouseY and divides by positionSize to find which row and column it is on. It then checks against the board to see what is on that position. If it is a piece then it creates an outline and sets that as the active square. If it is empty AND active square has a value, it moves the piece.
Added move legality. You can now mostly only make legal moves however I have not added something to checks if the king is in check. I made sure the move was legal by taking the startRow startColumn and endRow endColumn. I then look at what piece is being moved and ensure it is ok. If it isn’t nothing happens when you try to click and you have to make another move. I made sure that the correct colour moves as well. I also haven’t added pawn promotions, castling or en passant (tbh im not 100% certain on the rules of en passant). I couldn’t add castling as I don’t have a move history so would have no way of knowing if the king or rook have moved before. I’m now working on converting my current way of storing the board (a 2D array) into bitboards. After some research I found that bitboards are more than 5 times more efficient than arrays!
I’ve implemented bitboards instead of an array to store my board. At first I didn’t understand why bitboards were so good but after an amazing youtube video ( here ) I understand them and love them. I use them by having a 64 bit long integer (wow thats long) that represents the 8 by 8 board. Each bit can either be a 0 or 1 and represent whether there is a piece there or not. But you might think then how do you know what type of piece each 1 is? Thats why I use 12 bitboards (technically theres 1 more I added for extra efficiency but I don’t need that). Each of these 12 bitboards represents a type of piece in a specific colour (for example: white pawns and black pawns have 2 different bitboards). Then when I want to move pieces I create a position integer which is just 63 zeroes and a single 1 where the piece should be. I then invert this and use an AND statement so that all of the results for the AND are true where there are pieces apart from where I set the 1 at the start (though it is now a 0).
I’ve added dots to show where you can move when you click on a piece. If the position you want to move the piece to the dot is green but if it has an enemy piece the dot is red. Sadly, tkinter (the library I’m using) doesn’t support transparency. Because of this the dot takes up some of piece you want to capture. I can fix this by instead of drawing a circle drawing a translucent image… but tbh i rly cba. I will eventually do it to make it look better and actually add black pieces but i want to focus on getting things to actually work for now. The reason why this took me so long to implement is because as I was making the function to draw the dots I found that it was doing something very similar to my validMove() function but it was MUCH more efficient. In the old function I went through every square on the board and looked if the piece selected could get there. This is very inefficient and would build up quickly when I call the function 1000s of times per second (when I eventually add the bot). In my new function I look at the selected piece and have an array of each of the places it can move relative to its position. I then add the dots to those places if they are able to move there. This ended up with me just completely removing the old function and knowing its a valid move if there is a dot there. Next I am going to add something to see if the king is in check and maybe add some text when it is checkmate.
Finally took the time to change the piece textures so that black has an actual piece colour and you don’t get confused about whose pieces are whose
I’ve added better red and green overlays that are translucent so that you can see through them an easily know what piece you are taking. But most importantly, I’ve added check detection. I created a few new functions to do this. The first function I created was the isSquareAttacked(row, column, atkColour) function. It works by cycling through the bitboards and checking if they are atkColour or not. If they are find the type of piece and those pieces could attack the king. I think this will be helpful when I start to actually make the bot. I also created a simple findKing(colour) function to see where the king is so that I can parse that information into the isSquareAttacked() function. I then get a boolean. If it is true (the king is in check) I add the red overlay to the king so that the player easily knows they are in check but I don’t actually force them to block the attack yet. I think the overlay should be different but am not sure what to make it (gimme some ideas). I also created a slidingMoves() function as in my calculateLegalMoves() function I had ~40 lines of almost fully repeated code. Next I am going to force the player to block the check and end the game if it is checkmate.
The game can now end! I have added a check to see if it is checkmate. When it is checkmate bright red text appears on the screen that says “Checkmate! WINNER wins!” (it says the colour which won not WINNER). I have also changed it so that when a player is in check they are forced to make a move that stops them from being in check. The only circles that come up are ones which would block the check to make it a bit easier for players. I’ve also made it so that my new function blockCheck() takes the calculations made by calculateLegalMoves() and uses it to display and allow only legal moves. As well as this anywhere that used to call calculateLegalMoves() now calls blockCheck instead. By making sure each function does 1 task it makes debugging easier ( not that anything would ever go wrong… ). Next I am going to try and add castling as this is a crucial mechanic that is used often.
Ever misclick and sell the game? Well not anymore! You can now undo moves by tapping the left arrow on the keybord and also redo those same moves if you change your mind by tapping the right arrow ! I did this by adding a saveMove() function which I run after every move I make. This saves the details of the last move to the moveHistory array: Piece Moved Start Position End Position Piece Captured (Just “” if None) Turn Colour Moves so far In my undoMove() function I remove the last move done and add it to an array called redoHistory . I then set all the details to the last entry in moveHistory . I do the same in my redoMove() function excpet I use the last entry in redoHistory instead. I’ve allowed undos after checkmate so that you can look for what went wrong and try other moves that might’ve stopped it. I also added sound! You’ll be able to see / hear all of this if the video uploads instead of just a screenshot. Next I am going to add castling (for real this time).
Castling! I’ve actually added castling this time. The castling also works with undo / redo move so that it undoes and redoes the move correctly. I’m starting to think my python file is getting a bit big now so I also created a few helper functions to help reduce code duplication. Its 572 lines currently. Luckily I am quite close to finishing the actual board and getting everything ready for a 2 person game of chess. This was my first goal so that the bot just becomes one of the players. Once I’m ready for a 2 person game of chess I’ll try to create another python file for the bot. This will help me keep track of what is doing what. Next I am going to add pawn promotion as that’s one of the biggest things that I don’t have yet. It is essential in late game and so is one of my priorities.
Stalemates and three-fold repetition have now been added. Stalemates are calculated if legalMoves(turnColour) returns none but the king is not in check. I find if there is three-fold repetition by storing a hash of the board every move. This is stored in a dictionary as dictionaries are much better than arrays for lookups. After each move I see if that board state is in the dictionary. If it is I increase its value by 1. If not I set its value to 1. I then see how many times its reached that board state and if it is 3 times I end the game and show bright red text saying ‘Three-fold Repetition! Nobody wins!’. The hash includes piece positions, turn colour and castling rights as these are 3 of the 4 criteria that FIDE use. The fourth is en passant however that has not been added yet. Next I will add pawn promotions as this is the last major thing I don’t have.
Finally, promotions! This was the last major part of chess that I didn’t have. I added it by finding the row of the piece when I move something. I hardcoded it so that it knows when the pawn is at the last row. When at the last row, it runs a choosePromotion() function. That function then creates a frame inside of my window. I then loop for each of the choices of the pieces I can choose. For each of these pieces I create a button with the piece (in the correct colour) in the centre. The frame waits until I pick a choice before adding a 1 on that piece’s bitboard at the correct location and removes the 1 on the pawn bitboard. Thats all I need to do to register a promotion! The rest of the time I spent optimising my code and realising that I didn’t have to use just a bitboard or an array, I could use both. Knowing that, I removed my getPiece() function and instead used an array to find the piece at a row and column. This is more efficient as arrays have a lookup time of O(1) whereas the getPiece() function has a lookup time of O(n) in the worst case. This is because my getPiece() function worked by cycling through each bitboard to find what piece was at a certain coordinate. This meant that I could also remove my totalPieces bitboard since this was only used in the getPiece() function to avoid cycling through all 12 bitboards if there was nothing there. Overall I’m really happy with how everything is going as I have all I really need for a proper game of 2 player chess. Next I am going to try and add the small things I am still missing such as En passant and the 50 move rule.
Need to get your strategies into something you can see? Lines let you do just that. Right clicking and dragging draws a line that follows your cursor around. Right clicking again places the line. The lines are automatically centred so that they snap to the centre of the squares. If you line starts and ends at the same place it creates a circle instead. I also spent lots of time making sure my bitboards are used properly as when I created the array last time I used it for more than I intended and lost most of the arrays of bitboards. I also noticed that the promotion GUI wasn’t properly centred and so fixed that. I don’t really like the lines as they use stipples instead of a solid colour and overall don’t look nice but tkinter doesn’t offer transparency apart from stipples and doesn’t allow lots of customisation of the arrows. Next I will likely try to add en passant.
I was so unimpressed by how my old arrows looked I just completely switched libraries! I now use pygame instead of tkinter. It offers much more graphical customisability and now I can draw arrows (and other shapes) with true transparency instead of just stipples. One of the main downsides of pygame is that it constantly redraws each frame. This takes computing power and drains battery. To stop this I created a redraw boolean which tells my script when to redraw. This means instead of redrawing every single frame I redraw whenever something actually changes. Due to pygame I also customised the arrows so that the tails are rounded. This means that multiple arrows from the same point looks much cleaner. I also get true translucency instead of stipples and I added an icon!
En passant has been added. I find if it is legal by making sure the pawn capturing is on its fifth rank and the pawn being captured is moved 2 forward. Thats all I need for en passant (also only available for the first go it is there). I also made my program more efficient by ensuring I only rely on an array for finding what piece is on an index and drawing. Everything else uses bitboards which helps me fully utilise bitboards. I now have 2 things left: 50 move rule and Insufficient Material. Both of these end in a draw and are the last things I need for my program to have all the rules of chess! Next I will add the 50 move rule
Insufficient material and 50 move rule! These were the last things I needed to add before step 1 was complete. Now the next step is to actually add the bot! I’ve got everything I need down for a game of chess before 2 players. I added insufficient material by creating a new insufficientMaterial() . Inside the function are some if statements that determine whether winning is still possible (not assisted by opponent going into the corner). I also added the 50 move rule by checking moves since last pawn advancement or capture and if it exceeds 50 then end the game. I also made it so that once the game ends you can go undo moves and continue playing instead of just having the game end. Next I am going to try to clean up my code, split the code into multiple files and optimise it.
I’ve split my file into 5 now. There is moveGeneration.py which calculates all the legal moves, moveExecution.py which actually moves the pieces, updateBoard.py which updates the board, gui.py which handles graphics (like arrows, promotion page and clicks) and main.py which says what functions should happen when an input is given and has a while loop for while the game is running (as is needed by pygame). Splitting the file makes it much easier to debug, keep track and add features instead of just having one ~1000 line file where everything is jumbled up. Next I am going to start work on the actual bot.
I’ve added a bot! The main point of this was to link the new file I made ( bot.py ) to main.py . The bot currently just chooses moves based off of what would result in the best material difference between white (player) and black (bot). It calculates these moves with a depth of 4. Since the main point wasn’t to actually make a bot in one go the bot isn’t very good currently. However I still added alpha beta pruning. Alpha beta pruning works by storing the best guaranteed outcome for you (alpha) and the best guaranteed outcome for the opponent (beta). Whenever it finds a path where the opponent can force a move that is worse than the alpha, it immediately stops going down that path. The same happens for beta. I also removed some duplicated code in main.py and fixed the undo and redo move logic as I forgot to check if it still worked properly after switching from tkinter to pygame. Currently you can only tap the buttons and but can’t hold to go back multiple moves. Undoing and redoing moves with a bot was a bit confusing for me and so I decided to make it so that when undoing and redoing there is 3 seconds before the bot moves. During these 3 seconds you can go forwards or backwards to reset the timer. I used threading so that the bot starts to calculate what move it would make at the same time as the 3 seconds are passing. This means that if you decide to stay on the turn you don’t need to wait as long. I also blurred the background of the the promotion GUI so that it is grabs the players attention. Next I am going to try and add a better bot by assigning each possible move a score that is based off of the squares it controls, offensive and defensive opportunities and potentials for forks (when 2 pieces are being attacked by 1 piece so only one piece can move out of danger).
I’ve added position bonuses! I created a new file which rewards moves which place certain pieces in certain areas. For example pawns are rewarded for controlling the centre and pushing to the 7th rank (so that they can promote). The bot now tries to control squares and this means it now has proper openings. I also completely updated the file structure to split the responsibilities more clearly. I also updated main.py and logic.py and made them classes. Making logic.py a class means that I can use it for both the player actions and bot actions without them interfering. This also makes my previousMove() much cleaner as it means when the bot uses it, it doesn’t interfere with when the player uses it. Due to the new file structure it means that I can easily change the weights of each of the different modules to change how the bot plays easily. Later I will add a slider or at least a setting that lets the player control these modules. As well as this I also changed it so that drawing the same arrow again removes the arrow. Next I am going to try add another module that rewards moves which keep the king safe.
Colour randomisation! The colour you play as is chosen at random at the start of the game. The board is also automatically rotated so that you are at the bottom and the bot is at the top. This also helps to show which colour you are playing as. I also show the last move by making the starting square #97C997 and the ending square #8DCE8D. I did this as when I asked I watched someone play it I noticed that they would often undo the move, to see what the bot just did, then redo the move again. This helps make everything feel more polished. I like the ending square colour ( #8DCE8D ) but I’m not sure if I like the starting square colour ( #97C997 ). These colours are very easy to change though and so I can quickly edit them to test out different colours. I also realised that when I eventually ship the project most people who download it won’t have the font I use ( dynapuff ) installed. I tested it out to see what it is like without it and found that it crashed. To fix this, I implemented a try - except statement which sees if dynapuff exists on the user’s computer. If it does then it uses dynapuff which is how it is supposed to be played but if they don’t have the font it uses arial instead. Due to the strange spacing of dynapuff I used double spaces between the words on the game over messages, but when using arial the double spaces look quite strange. I also tweaked some of the position bonus values to further encourage castling. Next I am going to try to add a file to reward moves which keep keep the king safe.
Better arrows! I don’t remember where but there is one place where drawing arrows in a knights movement creates an L shaped arrow instead of just a normal arrow. I love this and so implemented it into my program. I also added aspiration windows. Aspiration windows work on the basis that moves don’t usually swing the score by a lot. This means that when going down paths we can set the lower and upper bounds to previous score ± window size. This helps prune more paths. If we find that the score is actually higher than we expect we search again but without the aspiration window. This helps remove lots of the obviously bad paths which makes the program much more efficient. Next I am going to add zobrist hashing so that I can use transposition tables.
Improved efficiency! I’ve improved the efficiency of the bot by sorting the possible moves better. This is useful as it means when the alpha beta pruning goes over everything it searches the best trees first. This means that it can prune more branches. I also removed some random integer conversions on my bitboards as they did nothing, since the bitboards are already integers. I also removed a restriction that didn’t let the player do anything on the bot’s turn. Now the player can draw during the bot’s turn. I also went across all of my code and changed it to use (row, column) instead of (column, row). This helps keep things cleaner. I then also changed the bot calculations from from using the fullyLegalMoves() function to the movementLegalMoves function(). fullyLegalMoves() just makes sure that the king isnt in check after the move. If it is then it undoes the move. By insteading doing this in my bot.py it means I can just not undo the move and immediately remove that move. This means that I don’t need to undo the move more times than needed. This is very helful as undoing a move takes up computing power. I also completely replaced the piece names with integers as this would be slightly better and I could use bit operations with integers. As well as this I also added a timer that shows how long the bot took to make its move. By adding all of these changes the bot reduced its time on the first move as white from ~4 seconds (with depth 4) to 3 seconds (with depth 5). This shows that it is much more efficient as, time taken increases exponentially as depth increases. As well as this 3 seconds is the earliest the bot can move and so the true speed is likely much less.
Transposition tables! I’ve added zobrist hashing so that I can create a dictionary that contains all of the board states I have already evaluated. Since many different moves can lead to the same position it means that I can save computing power by just getting the score of that board state instead of having to re-evaluate the board again. Zobrist hashes are just a way to represent the board in hash. This is useful as I can use them as the keys in my dictionary and quickly see if the current board state has been evaluated yet. I also fixed a bug that let the bot play illegal moves as there wasn’t a legality check after the aspiration window failed. An abort flag was also added that is set to True when the user undos or redos a move. This lets me instantly stop that thread’s search for the best move ensuring it doesn’t use unneccessary computing power. Next I am going to try and implement iterative deepening so that I can force the bot to move within a certain amount of time. This would let me make the bot play different ‘time controls’ by altering how long it has to think about what move it should play. I tested it against some bots from chess.com and it managed to beat Wally (a 1800 bot) but lost to Li (a 2000 bot)
Iterative deepening! The bot now searches depths in an ascending order instead of descending. This is only possible thanks to my transposition tables but means that I can give the bot a time limit. Once the time limit is reached it just return the best move of the highest depth its fully searched. This means that I can search to different depths in different positions whilst making sure I always play within the time limit. This is good as it means I can have a high depth during the opening and endgame whilst having a medium depth during mid game instead of having a medium depth everywhere to ensure moves at midgame don’t take too long. Midgame usually has a lower depth due to the high number or possible moves that can be played. I can also easily change the time limit with just a single variable. This means I can get my bot to play faster but also worse or take longer but play better. I added incremental evaluation. This means that for each move, instead of looping through all 12 bitboards and recalculating the evaluation score from scratch I instead update it from the current evaluation score. So when I move a piece I subtract its old it’s material value and then add the material value if it still exists. The same happens for the position bonuses. This takes my time complexity from O(n) to O(1) which is a massive upgrade. These changes lets my depth in early game and endgame almost always stay at 7 whilst during midgame hover between depth 6 and depth 7. Currently I determine if I am in endgame if both queens are gone and the total amount of pieces is below 16 however I feel that this isn’t a good measure and I should improve this. Next I will try to improve efficiency by improving my move ordering so that the alpha beta pruning is more efficient.
I’ve added a better endgame condition! Now endgame is determined if (there are no queens and less than 16 pieces on the board) or if there is less than 8 pieces on the board. This is better because it means when pawns promote the king doesn’t run to the corners or use the other position bonus table. I also improved my bot’s 3 fold repetition check when searching for moves by using a dictionary with hashes as keys and number of times they have appeared as values. This lets me check if I have been in the position 3 times before in O(1) instead of O(n) . I also improved my makeMove() and previousMove() functions by checking if its the bot searching for moves and if it is then only storing the key information instead of everything. To help simplify previousMove() I instead created a seperate function called unmakeMove() (clearly related to makeMove() ) to undo moves when the bot is searching. I also changed the time the bot has to move from 3 seconds to 1.5 seconds so that it feels snappier. Probably cos I have 0 patience when I want to test if the bot works :). Next I am going to try and make my bot faster by improving the move ordering so that alpha beta pruning can be more effective.
I’ve improved my endgame condition. When testing the bot I found that during endgame it would sometimes move its king to the corners of the board. I realised that this was because it saw a queen on the board and due to the poor endgame condition it thought this meant that it wasn’t endgame and instead used the early / mid game position bonus table which rewards staying safe in the corners. However in endgame moving the king to the corner isn’t good as it makes checkmates easier for the opponent and means that the king isn’t used to help checkmate the opponent, which is crucial in certain endgames such as a king and queen against just a king. In situations like this the king is necessary in achieving a checkmate. I changed it to being if there is less than (2 black queens and 2 white queens and less than 16 pieces) or if there is less than 5 pieces not including pawns. This is more accurate and ensures the king actually helps win and tries to stop a checkmate on itself. I also improved my zobrist hashing by fully incrementing it. Previously I incremented it for everything except castling and en passant however now these are implemented as well. I also noticed that the bot would walk its king towards the centre of the board during the opening which puzzled me until I read through my code and realised its because I set totalPieces to 0, asked if it was endgame, and afterwards set totalPieces to the true value. This was pretty difficult to find as I couldn’t see it by just seeing if it thought it was endgame at the end of a move. This makes sure I can actually get my hashes in O(1) time. Next I am going to try and make my arrows darker when over each other.
I’ve massively improved my organisation! I’m now properly utilising branches which is allowing me to work on multiple changes at the same time. Currently I am working on 2 branches. One is about improving my maintainability by adding comments so that other people can understand what I am doing and why. This also has the added benefit of me being able to make some small improvements and bug fixes as I am reading through all of my code. The second branch is about move ordering which is super important as it makes my alpha beta pruning more effective. Working on these changes on branches is useful because it not only keeps it organised and easy to see what each commit is for but also means that if I decide I don’t want the change anymore it is easy to remove as it isn’t mixed in with all the other changes. To help with this I’ve also created a Jira board which helps me keep my ideas organised. My branches are called SCRUM-NUMBER/NAME . The scrum number is given to me by Jira. As well as improving my organisation I also further improved my zobrist hashing by replacing using modulo on the hash to get the index of the transposition with using an and gate between my hash and the table size - 1 (which is just all 1s and a single 0 on the left most digit since the table size is a power of 2). I also stored my castle rights as a single 4 digit binary digit where each digit represents whether a certain rook has castling rights or not. My logic with this was since the point of bitboards is 12 integer is better than 64 integers, a single 4 digit integer is better than a dictionary of 4 values but I am not actually sure if this is true or not. On the maintainability branch so far I have added comments to all of main.py . On the move ordering branch I have improved my sorting from just sorting by most valuable capture and least valuable attacker which is only good for captures to also scoring promotions very highly. I also instantly push the previous best move to the front of the queue and score moves which cutoff branches in alpha beta pruning highly as well. Next I will try to add comments to one of my other files and improve my move ordering by not using lambda functions.
Move ordering improved! I’ve merged my SCRUM-29/move-ordering branch with main and now have my improved move ordering in main. This has let me go from a depth of 5 to almost always a depth of at least 6. I then merged main into SCRUM-42/improve-maintainability so that I could add comments to the code I added from the move ordering branch. Next I am going to add some comments explaining what things do.
Massive improvements in depth! I added 2 changes: null move pruning and late move reduction. Null move pruning is when the bot ‘passes its turn’, when searching for the best move. The bot then evaluates the board at a reduced depth after letting the opponent play twice in a row. If it is still in a winning position then that means it is winning by a lot. This means that it can prune this branch since the opponent wouldn’t let the game get to this state and would make a better decision earlier in the tree. Since the opponent wouldn’t let the game get to this it means that further analysis isn’t necessary. Late move reduction works on the basis that I have good move ordering, which I just worked on so I would hope I do. Late move reduction means that I search the later moves at a reduced depth since the best moves are at the start and so later moves are likely bad. If they turn out to be good after the reduced evaluation depth then they are researched at the full depth. This helps reduce the amount of moves which need to be evaluated by a lot. Together null move pruning and late move reduction have taken my depth from around 6 - 7 in midgame to around depth 7 - 10 in midgame! In endgame this is even more. When I tested it in endgame it got to a depth of 13! My next change is something called quiescent search which will boost the bot’s elo by massive amounts as it should mostly stop the bot from making blunders.
Quiescent search is amazing! After adding it my bot instantly became better. A quiescent search just means that when evaluating a board state to a certain depth even if you reach that depth you need to evaluate until a quiet move (a move that isn’t a capture). This means that even if the bot reaches the max depth in the middle of a piece trade it won’t just think the move is amazing since all it can see it won a piece. Since I added the bot, when tested against other bots it has made 0 blunders! In fact it beat Li, a bot rated 2000 on chess.com ! I’m really proud of this and think it is really cool to say that my bot has beaten a 2000 rated bot. However, it only beat the bot once and so it could just be lucky. I was going to test it in 2 more games against the same bot but found myself getting bored of manually inputting moves into chess.com and my bot to get them to play each other. Therefore, I’m planning on making my bot able to play other bots on its own. To do this I will need to download the other bots and make my bot give properly formatted inputs and outputs.
I’ve added FEN strings! FEN strings (Forsyth-Edwards Notation) are a way to store positions of chess games. They are used by many chess engines to allow players to start from different positions or midway through games. Adding these wasn’t too difficult as the strings are formatted in a nice way. I simply split up the FEN string into its 6 parts and set my variables to the value in the FEN string. To test if it worked I inputted the FEN string 4kb1r/p2n1ppp/4q3/4p1B1/4P3/1Q6/PPP2PPP/2KR4 w k - 1 16 which gives the position of the famous opera game directly before the queen sacrifice. I then set the bot colour to white and was glad to see that it immediately found the best move (the queen sacrifice). I also added premoves so that I can choose my move in advance. I did this by just storing the move I make when it is the bot’s turn and playing it as soon as the bot plays. However I can only premove 1 move ahead. Next I will try to allow the user to premove multiple moves ahead.
Way better premoves. I’ve updated my premove system to store multiple premoves. I did this by storing eaach premove as a tuple of ( startRow , startColumn , endRow , endColumn ). These tuples contain all the data I need to know and can be easily appended into an array. To clear a premove you can either do the same move again which removes that specific premove or tap the middle mouse button anywhere which clears all premoves and arrows. I also render a translucent version of the piece that I’ve moved to its premove destination and remove the texture for where it was originally. This helps you keep track of what your premoves are actually doing. I do this by drawing the board normally then looping through each move in the premoves array and drawing that piece at its correct destination in reduced alpha. Next I am going to try to improve my bot further so that I can push to a depth of around 10 during midgame.
Premoves finished! My premoves are now fully implemented and the branch is merged. Making the move with middle click removes that specific premove. Middle clicking a random square clears all premoves and arrows. I also added principal variation search (pvs) which is just searching moves that aren’t the previous best move with a tight move score boundary then researching them normally if they are better than expected. I am probably going to ship soon and so will start polishing the project up now.
I’ve made a few small changes that help slightly speed the bot up. I stopped checking whether I have surpassed the time limit every move I search and instead every 2048 moves I search. This is better as it removes thousands of unnecessary library calls which each add a small amount of time to how long each move takes to search. Since computers are very fast 2048 doesn’t actually take long at all but it massively reduces the amount of times the pygame library is called. I also changed my move ordering to sort manually instead of with in a lambda function since this lambda functions are more inefficient. I am next going to ship the project!!!
Thanks for all the positive feedback and constructive criticism on my ship! Working to improve where people said and I am starting by trying to add comments to my code to explain what is happening. So far I’ve fully commented 3 / 7 files and am around 30% through commenting logic.py which contains most of the complicated code. Its taking a while but I really hope that this will help people understand what I am doing and that they will like my project more because of this. Next I am going to continue adding comments to logic.py and will probably have to make a devlog after just that since the file is pretty big and has slightly complicated stuff in it. Once again thanks to all the people who rated the project or gave feedback!
Yup! I did what I said I would last time, and finished commenting ALL of logic.py . I don’t think I can describe how long this took and how annoying it was to have to go through 750+ lines of code and add comments explaining things. And then I realise that there’s just random stuff that I don’t even need. Anyway, I’m pretty satisfied that I managed to comment so much. This is definitely the largest file and so I’m happy I’ve gotten it out of the way. There’s not really much I can’t say like explaining and stuff because all I’ve done for the last 5 hours is explain stuff. Anyway once I’ve commented everything, I’ll probably make another devlog and then go and work on something else.
I started getting bored of just commenting my code so I created a new branch in which I am trying to make my bot be able to play other bots. After some research, I found that the engine needs to be able to take in moves in the form of algebraic notation (a type of shorthand notation for moves. for example: Be4). Because of this I read a Wikipedia page on algebraic notation and made a function to convert between it and the parameters my makeMove() takes, that being: startRow , startColumn , endRow and endColumn . I have done this by first checking if the move is a castle (notated by O-O or O-O-O) then forming the full start and end coordinates by hardcoding the column values and finding the row based off the colour that is castling. Then I find what piece is moving (shown by the first letter) and if there is a promotion (shown by ‘=’ sign). Algebraic also has characters to show captures (x), checkmates (#) and checks (+), however the engine does not need these and so they are removed in 3 separate while loops. At this point I am left with just the end coordinates and maybe a combination of start coordinates. To find the full start coordinates (as they are all I am missing) I loop through the specific bitboard for the piece and whenever I find a square where there is a piece, I check whether it matches with the start coordinates I have, and if it does whether it can legally reach the end square. If it can then that is my piece and I return its start coordinates and the end coordinates it moves to (which is given in the input string). Currently, this function lives inside a random file in my project folder but my next step will be to properly integrate it into the rest of the code.
So, I’ve actually decided to work on making my bot playable on a website since that was one of the main things people said they would have wanted last ship and stardance is ending soon. But thats not why I’m posting. I’m posting because I spent the last 40 minutes rooting out a bug that caused my premoves to not be played. My first step was playing the release version that can be downloaded to see if the bug was there as well. Luckily it wasn’t so I went to my current commit on my main branch and kepy undoing commits (and saving them with git stash ) until the bug was gone. I then found that the bug only became a thing after I merged my commenting branch. Because of this I did the same thing of undoing commits and saving them on the commenting branch til I found the commit that caused the bug. I then went through all the changes until I found the problem. Then I fixed the bug, merged the fix to main then merged main into my other branches so that they would have the bug fix as well. I’ve already done some research and have found that pygbag seems to fit my needs for turning my pygame program into a website pretty well. Due to this I will probably use pygbag to get a website version of my chess bot up and running! Attached is a screenshot of the commit that caused the bug. Before the commit is on the left and after the commit is on the right. Try to find what caused the bug! If you can’t check the comments of the post as I am gonna say what the problem was there. I also attached a photo of how my git tree looks now and… it looks sooo messy lol.
Ships:
I’m finally shipping the chess bot! So excited to see what people think of it :) . Before you try my project I highly suggest reading the README (on my github page https://github.com/GunRattler28/Chess-Bot ). It has a full list of all controls which will help you understand how to play. Anways, can’t wait to see what you guys think of it!...
|
1793735453.0557663
|
1794599453.0557663
|
|
22964
|
MusicOS by @____ | Stardance
|
____
|
2
|
3.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T14:06:04Z", "hours": 1.0, "multiplier": 2.57, "payout": 3, "blessing": "neutral", "text": "Updated ship!", "repo": "https://github.com/Explore2333/StardanceWebOS", "demo": "https://Explore2333.github.io/StardanceWebOS"}, {"ship_num": 2, "ts": "2026-06-21T20:36:00Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple, basic operating system for music. It tries to give the user a music-centered experience with features to organize music in a simple and convenient matter. I am really new to this type of coding, so I found the project itself pretty challenging. I had to spend a lot of time to set it up and then sometimes the guide just wasn’t working when I was putting in the same code to test it in my editor. I am proud that I was able to accomplish at least what I was able to do today. Moving forward, I hope I can grow way more so I can showcase my abilities. For my project, testing it involves using the demo link to easily view the project.", "repo": "https://github.com/Explore2333/StardanceWebOS", "demo": "https://Explore2333.github.io/StardanceWebOS"}]...
|
[{"post_id": 13658, "ts": "202 [{"post_id": 13658, "ts": "2026-06-22T12:39:09Z", "hours": 1.2814, "text": "I found that the other features weren’t really working out for me. I created a Types of Music feature so that the user can view what they think may be their favorite genre."}, {"post_id": 13312, "ts": "2026-06-21T19:54:11Z", "hours": 0.9956, "text": "I currently have gotten to making the panel at the bottom with all the sections. I am going to now work on making the actual components inside those different apps/tabs!"}, {"post_id": 13177, "ts": "2026-06-21T15:46:38Z", "hours": 0.7772, "text": "I’m currently working on fixing the apps to appear on a bar on the bottom of the screen. I want to make it similar to the macbook interface. I’m going to add more apps with content as well."}, {"post_id": 12817, "ts": "2026-06-20T23:45:47Z", "hours": 0.2761, "text": "MusicOS"}]...
|
Title: MusicOS by @____ | Stardance
Devlogs:
Musi Title: MusicOS by @____ | Stardance
Devlogs:
MusicOS
I’m currently working on fixing the apps to appear on a bar on the bottom of the screen. I want to make it similar to the macbook interface. I’m going to add more apps with content as well.
I currently have gotten to making the panel at the bottom with all the sections. I am going to now work on making the actual components inside those different apps/tabs!
I found that the other features weren’t really working out for me. I created a Types of Music feature so that the user can view what they think may be their favorite genre.
Ships:
I made a simple, basic operating system for music. It tries to give the user a music-centered experience with features to organize music in a simple and convenient matter. I am really new to this type of coding, so I found the project itself pretty challenging. I had to spend a lot of time to set it up and then sometimes the guide just wasn’t working when I was putting in the same code to test it in my editor. I am proud that I was able to accomplish at least what I was able to do today. Moving forward, I hope I can grow way more so I can showcase my abilities. For my project, testing it involves using the demo link to easily view the project.
Updated ship!...
|
1793735453.8944464
|
1793821853.8944464
|
|
1911
|
Ranked Bot by @Polokalap | Stardance
|
Polokalap
|
1
|
58.21
|
391
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T21:42:13Z", "hours": 51.0, "multiplier": 8.79, "payout": 391, "blessing": "neutral", "text": "This is a Discord bot for a Discord-based Minecraft pvp tierlist. Basically there are testers who are good players, and they can tier test people in queues. This bot manages those tests and some other stuff like moderation.", "repo": "https://github.com/Polokalap/Ranked_Bot", "demo": "https://dc.ranked.hu"}]...
|
[{"post_id": 33736, "ts": "202 [{"post_id": 33736, "ts": "2026-07-23T21:48:41Z", "hours": 1.8114, "text": "Fixed admin-profile command, added banned rank and fixed some minor issues"}, {"post_id": 32081, "ts": "2026-07-21T00:08:57Z", "hours": 5.3975, "text": "I did some bug fixes and stuff, I wish I didn’t have to count 5 hours. I just need to post to resubmit, so I guess I made the readme actually useable and also fixed some minor issues."}, {"post_id": 9258, "ts": "2026-06-15T15:25:32Z", "hours": 5.2731, "text": "Added /admin-profile and retired tiers for normal /profile command (I also fixed some smaller stuff, but the bot is pretty much done at this point!)"}, {"post_id": 8416, "ts": "2026-06-13T23:58:29Z", "hours": 2.3478, "text": "Added /spin command"}, {"post_id": 8184, "ts": "2026-06-13T17:10:26Z", "hours": 3.1311, "text": "HT Tickets added woohoo"}, {"post_id": 7558, "ts": "2026-06-12T17:12:44Z", "hours": 2.8197, "text": "Did very little work today, I just cannot concentrate. Added a high tier ticket system ui, will make the backend later today or tomorrow."}, {"post_id": 7020, "ts": "2026-06-11T19:34:30Z", "hours": 16.2056, "text": "Added a queue system that I’ll make a video on when the bot releases. Yes 3 lines for 16h"}, {"post_id": 4553, "ts": "2026-06-07T21:59:21Z", "hours": 3.6322, "text": "Added queue ping selector :O Yes this took this many hours, because I had to create bugfixes, literally remake the db, and update the db creds. in the bot, the api."}, {"post_id": 3087, "ts": "2026-06-05T23:59:37Z", "hours": 0.5494, "text": "Added reaction emojis"}, {"post_id": 2920, "ts": "2026-06-05T20:30:29Z", "hours": 2.275, "text": "Added the ability to look up profiles by /profile minecraft_name:Polokalap Also started working on tier testing and swapped displaying tiers from text to emojis."}, {"post_id": 2441, "ts": "2026-06-04T22:48:11Z", "hours": 0.7422, "text": "Added welcome message HELLO"}, {"post_id": 2422, "ts": "2026-06-04T21:54:24Z", "hours": 2.4406, "text": "Added /profile command"}, {"post_id": 1747, "ts": "2026-06-03T22:42:48Z", "hours": 1.2375, "text": "Created ticket panel!"}, {"post_id": 1667, "ts": "2026-06-03T20:12:12Z", "hours": 0.79, "text": "I’m pretty sure I added archiving, I don’t really know. Also, I swapped out .env to data.json for channel ids"}, {"post_id": 1545, "ts": "2026-06-03T16:58:26Z", "hours": 1.9872, "text": "Now you can create and close tickets!! It also sends a cute lil’ embed that you can edit in json :D"}, {"post_id": 1019, "ts": "2026-06-02T20:14:40Z", "hours": 0.855, "text": "Hello :3 I made the bot time out the user if they spammed blocked content!"}, {"post_id": 947, "ts": "2026-06-02T18:28:30Z", "hours": 2.1811, "text": "Dear diary, Today, I added listeners when a message gets updated, so people can’t bypass the filter system by sending a message then editing it to a url, or something blocked. I also added another detection method that works the following way: Message is: “ https://youtube.com meow uwu :3 also look at this 18+ video https://blocked.url ” The old system would’ve allowed this, because it’s remove any white spaces, so the message becomes: “ https://youtube.commeowuwu:3alsolookatthis18+video https://blocked.url ” Then, it’d check if it contains a blocked sequence of characters, which is “://” in that case. Then, it’d check if it contains any of the “good” domains, and if it does, it’d allow the user to send the message. That was a bad system, and I rushed it. The new system does this: Message gets chunked: [“https://youtube.com”, “meow”, “uwu”, “:3”, “also”, “look”, “at”, “this”, “18+”, “video”, “https://blocked.url”] And it iterates trough every field. So now, if a url is present in a chunk, it’d only check that url. Also I added new translation keys."}, {"post_id": 461, "ts": "2026-06-01T22:14:14Z", "hours": 0.7564, "text": "I added a system that sends the moderators a report about a flag in their own channel. I also added flags for encouraging self-harm."}, {"post_id": 444, "ts": "2026-06-01T21:17:11Z", "hours": 3.4722, "text": "Added a language and a moderation system. You have a filter.json in src/resources and you can set up rules in it without ever touching code. Here’s the syntax: { “flags”: [ { “name”: “Gyűlölkődés”, “description”: “A gyűlölködő meggnyílvánulások nem megengedettek a szerveren!”, “punishment”: “ONE_HOUR”, “flags”: [ ], “ignore”: [ ], “always”: [ “nigger”, “nigga”, “cigány”, “cigris”, “cigo”, “nigris”, “nigg”, “buzi” ] } ] } When someone types one of the words out form “always”, it’ll punish them no matter what. If they send something that’s in “flags”, it’ll check if it also contains something from “ignore”. This is a bad system, but it works fine for now. Also, it punishes the user from the “punishment” field. You can set the following parameters: NONE, FIVE_MIN, ONE_HOUR, ONE_DAY, THREE_DAYS, SEVEN_DAYS, KICK, BAN. As you can see from the linked image, it lets people bypass the moderation system with one of the following permissions: MANAGE_CHANNEL, MESSAGE_MANAGE. I also added a language system, so what value you set in .env for “LANGUAGE”, it’ll use that +”.json” for every message. That’ll be useful when translating."}]...
|
Title: Ranked Bot by @Polokalap | Stardance
Devlo Title: Ranked Bot by @Polokalap | Stardance
Devlogs:
Added a language and a moderation system. You have a filter.json in src/resources and you can set up rules in it without ever touching code. Here’s the syntax: { “flags”: [ { “name”: “Gyűlölkődés”, “description”: “A gyűlölködő meggnyílvánulások nem megengedettek a szerveren!”, “punishment”: “ONE_HOUR”, “flags”: [ ], “ignore”: [ ], “always”: [ “nigger”, “nigga”, “cigány”, “cigris”, “cigo”, “nigris”, “nigg”, “buzi” ] } ] } When someone types one of the words out form “always”, it’ll punish them no matter what. If they send something that’s in “flags”, it’ll check if it also contains something from “ignore”. This is a bad system, but it works fine for now. Also, it punishes the user from the “punishment” field. You can set the following parameters: NONE, FIVE_MIN, ONE_HOUR, ONE_DAY, THREE_DAYS, SEVEN_DAYS, KICK, BAN. As you can see from the linked image, it lets people bypass the moderation system with one of the following permissions: MANAGE_CHANNEL, MESSAGE_MANAGE. I also added a language system, so what value you set in .env for “LANGUAGE”, it’ll use that +”.json” for every message. That’ll be useful when translating.
I added a system that sends the moderators a report about a flag in their own channel. I also added flags for encouraging self-harm.
Dear diary, Today, I added listeners when a message gets updated, so people can’t bypass the filter system by sending a message then editing it to a url, or something blocked. I also added another detection method that works the following way: Message is: “ https://youtube.com meow uwu :3 also look at this 18+ video https://blocked.url ” The old system would’ve allowed this, because it’s remove any white spaces, so the message becomes: “ https://youtube.commeowuwu:3alsolookatthis18+video https://blocked.url ” Then, it’d check if it contains a blocked sequence of characters, which is “://” in that case. Then, it’d check if it contains any of the “good” domains, and if it does, it’d allow the user to send the message. That was a bad system, and I rushed it. The new system does this: Message gets chunked: [“https://youtube.com”, “meow”, “uwu”, “:3”, “also”, “look”, “at”, “this”, “18+”, “video”, “https://blocked.url”] And it iterates trough every field. So now, if a url is present in a chunk, it’d only check that url. Also I added new translation keys.
Hello :3 I made the bot time out the user if they spammed blocked content!
Now you can create and close tickets!! It also sends a cute lil’ embed that you can edit in json :D
I’m pretty sure I added archiving, I don’t really know. Also, I swapped out .env to data.json for channel ids
Created ticket panel!
Added /profile command
Added welcome message HELLO
Added the ability to look up profiles by /profile minecraft_name:Polokalap Also started working on tier testing and swapped displaying tiers from text to emojis.
Added reaction emojis
Added queue ping selector :O Yes this took this many hours, because I had to create bugfixes, literally remake the db, and update the db creds. in the bot, the api.
Added a queue system that I’ll make a video on when the bot releases. Yes 3 lines for 16h
Did very little work today, I just cannot concentrate. Added a high tier ticket system ui, will make the backend later today or tomorrow.
HT Tickets added woohoo
Added /spin command
Added /admin-profile and retired tiers for normal /profile command (I also fixed some smaller stuff, but the bot is pretty much done at this point!)
I did some bug fixes and stuff, I wish I didn’t have to count 5 hours. I just need to post to resubmit, so I guess I made the readme actually useable and also fixed some minor issues.
Fixed admin-profile command, added banned rank and fixed some minor issues
Ships:
This is a Discord bot for a Discord-based Minecraft pvp tierlist. Basically there are testers who are good players, and they can tier test people in queues. This bot manages those tests and some other stuff like moderation....
|
1793735455.0888882
|
1793821855.0888882
|
|
67832
|
autolink by @AmAlan46 | Stardance
|
AmAlan46
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: autolink by @AmAlan46 | Stardance
|
1793735456.3526988
|
1794340256.3526988
|
|
21577
|
One Stage Gearbox FRC by @strixt | Stardance
|
strixt
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T04:44:43Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Cadded a simple 1:~3.4-5 gearbox using FRC components", "repo": "https://github.com/strixt1/Onshape-Gearbox-Project", "demo": ""}]...
|
[{"post_id": 15081, "ts": "202 [{"post_id": 15081, "ts": "2026-06-24T14:39:41Z", "hours": 1.9494, "text": "This is my first attempt at making a gearbox using FRC Components. I started off with a goal of making a gear ratio around 1:3.5 Step down. Motor Power is a Kraken x60. Gears in order go from 14T -> 34T -> 48T. Decided to just make it power a single 4” compliant wheel."}]...
|
Title: One Stage Gearbox FRC by @strixt | Stardanc Title: One Stage Gearbox FRC by @strixt | Stardance
Devlogs:
This is my first attempt at making a gearbox using FRC Components. I started off with a goal of making a gear ratio around 1:3.5 Step down. Motor Power is a Kraken x60. Gears in order go from 14T -> 34T -> 48T. Decided to just make it power a single 4” compliant wheel.
Ships:
Cadded a simple 1:~3.4-5 gearbox using FRC components...
|
1793735457.230154
|
1793821857.230154
|
|
36447
|
a calculator by @abderrahmen_bouraoui_ts | Stardan a calculator by @abderrahmen_bouraoui_ts | Stardance...
|
abderrahmen_bouraoui_ts
|
1
|
19.88
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T14:17:09Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "a working calculator made only by logic gates -16 bit adder and subtracter -8 bit multiplier -negative numbers", "repo": "https://github.com/1484abd/A-logic-gate-based-calculator-built-from-scratch.", "demo": ""}]...
|
[{"post_id": 68003, "ts": "202 [{"post_id": 68003, "ts": "2026-09-14T11:10:25Z", "hours": 0.8753, "text": "i made the schematics now i can finally ship my project"}, {"post_id": 57967, "ts": "2026-08-30T09:34:22Z", "hours": 0.35, "text": "it took me 19 min i built a half adder and added a place for a capacitor in my full adder and the half adder"}, {"post_id": 57532, "ts": "2026-08-29T18:19:59Z", "hours": 0.8003, "text": "ok i did finish my project but why not make a pcb so i made one my first pcb btw and this is a full adder i think i still have to do more in the design or there is problems but for now this is enouth"}, {"post_id": 56669, "ts": "2026-08-28T15:01:38Z", "hours": 1.15, "text": "after hours i finished the 8bit adder i am happy with what i achived now we wait for my last shipment to get reviewed so i ship this"}, {"post_id": 55683, "ts": "2026-08-27T17:27:09Z", "hours": 1.0333, "text": "it took me like 3 hours but i didn’t lapse all of it but still i finished it i don’t care about the time anymore i know i won’t get reviewed"}, {"post_id": 51567, "ts": "2026-08-21T10:39:28Z", "hours": 1.5186, "text": "tried to fix a problem fried the components and now i have to buy new ones and maybe some capacitors do i finish it as an 8 bit calculator or make it as a 4bit calculator?"}, {"post_id": 51251, "ts": "2026-08-20T19:47:32Z", "hours": 1.3667, "text": "finally finished on working on the project now the scary part testing update: i found a lot of problems i will solve them tommorow i spent 5 hours today thats it no more"}, {"post_id": 51126, "ts": "2026-08-20T16:59:01Z", "hours": 1.2269, "text": "its a little bit messy but i finished 4 full adders and the half adder basicly half of the project"}, {"post_id": 50840, "ts": "2026-08-20T08:53:34Z", "hours": 0.6336, "text": "what do you think of my wiring? (these are just the inputs)"}, {"post_id": 50521, "ts": "2026-08-19T18:23:56Z", "hours": 1.7781, "text": "yes i hate soldering 2 hours and the results arent even 5% of the project so i will use breadboards again i took everything off"}, {"post_id": 50272, "ts": "2026-08-19T13:01:47Z", "hours": 1.7558, "text": "finally finished building the first prototype of the half adder it can do only 1+1 and 1-1 but i will make more connect them and it can do 225+225 15min building 1hour and 20 min debugging"}, {"post_id": 50194, "ts": "2026-08-19T10:14:44Z", "hours": 0.3961, "text": "finished on working on the build i will create in reel life(the photo is blurry i know)"}, {"post_id": 30135, "ts": "2026-07-17T14:00:57Z", "hours": 7.1511, "text": "a calculator with only logic gates that can add(16bits) subtract(16bits with negative) and multiply(8bit)"}]...
|
Title: a calculator by @abderrahmen_bouraoui_ts | Title: a calculator by @abderrahmen_bouraoui_ts | Stardance
Devlogs:
a calculator with only logic gates that can add(16bits) subtract(16bits with negative) and multiply(8bit)
finished on working on the build i will create in reel life(the photo is blurry i know)
finally finished building the first prototype of the half adder it can do only 1+1 and 1-1 but i will make more connect them and it can do 225+225 15min building 1hour and 20 min debugging
yes i hate soldering 2 hours and the results arent even 5% of the project so i will use breadboards again i took everything off
what do you think of my wiring? (these are just the inputs)
its a little bit messy but i finished 4 full adders and the half adder basicly half of the project
finally finished on working on the project now the scary part testing update: i found a lot of problems i will solve them tommorow i spent 5 hours today thats it no more
tried to fix a problem fried the components and now i have to buy new ones and maybe some capacitors do i finish it as an 8 bit calculator or make it as a 4bit calculator?
it took me like 3 hours but i didn’t lapse all of it but still i finished it i don’t care about the time anymore i know i won’t get reviewed
after hours i finished the 8bit adder i am happy with what i achived now we wait for my last shipment to get reviewed so i ship this
ok i did finish my project but why not make a pcb so i made one my first pcb btw and this is a full adder i think i still have to do more in the design or there is problems but for now this is enouth
it took me 19 min i built a half adder and added a place for a capacitor in my full adder and the half adder
i made the schematics now i can finally ship my project
Ships:
a working calculator made only by logic gates -16 bit adder and subtracter -8 bit multiplier -negative numbers...
|
1793735458.1085398
|
1793821858.1085398
|
|
67837
|
My Cool blogs by @prathamrawat | Stardance
|
prathamrawat
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My Cool blogs by @prathamrawat | Stardance
|
1793735459.346408
|
1794340259.346408
|
|
69770
|
Python by @syedakhter | Stardance
|
syedakhter
|
1
|
2.0
|
1
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-15T02:13:57Z", "hours": 2.0, "multiplier": 1.0, "payout": 1, "blessing": "neutral", "text": "I made a website about python it tells you about python why its important python features and diffrent versions of python", "repo": "https://github.com/8051987-eng/Python", "demo": "https://8051987-eng.github.io/Python/"}]...
|
[{"post_id": 79688, "ts": "202 [{"post_id": 79688, "ts": "2026-10-15T02:12:43Z", "hours": 2.0147, "text": "I made a website about python"}]...
|
Title: Python by @syedakhter | Stardance
Devlogs: Title: Python by @syedakhter | Stardance
Devlogs:
I made a website about python
Ships:
I made a website about python it tells you about python why its important python features and diffrent versions of python...
|
1793735460.2191718
|
1793821860.2191718
|
|
19324
|
portfolio website by @nikhil_noah_shah | Stardance
|
nikhil_noah_shah
|
1
|
5.0
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-10T00:10:28Z", "hours": 5.0, "multiplier": 1.33, "payout": 6, "blessing": "neutral", "text": "Created an Engineering portfolio to display projects I’ve done, and to use as progress for myself to see how far I’ve come as an engineer. I plan to use this as I continue my education and become more skilled as an engineer. Might learn react and js to create more interactivity in my portfolio.", "repo": "https://github.com/n-niksha/niksha-portfolio", "demo": "https://nikhilshah.vercel.app"}]...
|
[{"post_id": 44318, "ts": "202 [{"post_id": 44318, "ts": "2026-08-10T00:09:05Z", "hours": 0.3347, "text": "Finished Portfolio!"}, {"post_id": 42942, "ts": "2026-08-07T22:37:10Z", "hours": 0.3019, "text": "Completed the about page, committed to github and connected to vercel!"}, {"post_id": 42447, "ts": "2026-08-07T05:18:33Z", "hours": 1.2281, "text": "Created Contact page, finished project page (used formsubmit instead of javascript)"}, {"post_id": 41146, "ts": "2026-08-05T05:17:52Z", "hours": 2.6922, "text": "Created home page for my portfolio website!"}]...
|
Title: portfolio website by @nikhil_noah_shah | St Title: portfolio website by @nikhil_noah_shah | Stardance
Devlogs:
Created home page for my portfolio website!
Created Contact page, finished project page (used formsubmit instead of javascript)
Completed the about page, committed to github and connected to vercel!
Finished Portfolio!
Ships:
Created an Engineering portfolio to display projects I’ve done, and to use as progress for myself to see how far I’ve come as an engineer. I plan to use this as I continue my education and become more skilled as an engineer. Might learn react and js to create more interactivity in my portfolio....
|
1793735463.5818365
|
1793821863.5818365
|
|
28941
|
OwOS by @Axwabo | Stardance
|
Axwabo
|
2
|
11.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-11-01T03:56:05Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this is an “operating system” that runs in your browser! made with Blazor (i love seeing sharp xd) i’ve added the following things since the last ship: BaSL integration, which is a Bash-like shell project, you can use it through the terminal the virtual filesystem is synced manually via the persistent Cache API using either of the following methods: invoke the sync command click the big SYNC button in the Meta menu Nowotes now saves data to the virtual BaSL file system open and save file dialogs let the user choose the file path of the text note an analog clock app only the /home/user directory (and its children) are synced to the browser cache, so paths like /usr/bin/amongr.txt won’t be saved solving the browser cache integration was a bit of a headache because IJSStreamReference didn’t work the way i wanted it to work, then i tried byte[] from a JavaScript Uint8Array (which also didn’t work) i ended up converting bytes to a UTF-8(?) string and passing that to C# and vice versa, hopefully this retains binary content", "repo": "https://github.com/Axwabo/OwOS", "demo": "https://axwabo.github.io/OwOS/"}, {"ship_num": 2, "ts": "2026-09-01T12:03:12Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this is a simple “operating system” that runs in your browser! made with Blazor (cuz i like seeing sharp ahaha) which complicated some things, but it could be worse right now it includes the following: date and time a notepad that uses localStorage to save data (you can open multiple of them at once) meta menu (“start menu,” useful when the icons are covered) an image of 4 FLIRTs :3 (you need to open the “file”) task manager (taskbar) that is very slightly buggy but it lets you restore windows that had been minimized making the task manager was a bit of a headache due to the unpredictable nature of C# delegates it works for bringing a window to the front i used the <dialog> HTML element in several places because i didn’t want to reinvent the wheel (not a lot of people know about this somehow), though handling interactions outside of the area of non-modal dialogs is something i’ll have to look into later dialog sizes should be restricted but ugh", "repo": "https://github.com/Axwabo/OwOS", "demo": "https://axwabo.github.io/OwOS/"}]...
|
[{"post_id": 62517, "ts": "202 [{"post_id": 62517, "ts": "2026-09-05T22:36:57Z", "hours": 2.4736, "text": "my final devlog of Stardance i’m turning 19 in a few hours so this is my last thingy :3 brave browser ate my cursor so i can’t really see where i’m clicking lol completed BaSL integration: the window now scrolls automatically + i’ve improved the UX with a Send and Terminate button moved enter key handling to JavaScript because for some reason, .NET doesn’t get the input value before you press enter (so the input was percieved as empty on keydown) updated Nowotes with new file dialogs took a bit to refactor the code, i wanted a common component that does most stuff the SaveFileDialog and OpenFileDialog have only a few lines of code thanks to this the dialogs don’t look amazing, yeah, but you can tell directories apart by their trailing slash you can use the input field similarly to actual file dialogs: enter a directory in the current one go to a directory by specifying its full path open/save by providing a filename with no trailing slash, no .. (idk if the .. check works tbh) added an analog clock cuz i didn’t want to deal with window maximizing tiny detail: usename is now in the meta menu, which looks similar to how KDE handles it fixed file system restoration by using the location origin instad of the href fixed task manager buttons not being able to minimize their respective window"}, {"post_id": 61584, "ts": "2026-09-04T15:48:15Z", "hours": 2.9325, "text": "BaSL integration almost complete terminal :333 i’ve added my very basic Bash-like shell project as a program! since BaSL written in .NET, i can “just reference it,” and it works (not every package works out of the box in Blazor WebAssembly) on the left you can see the version without escape sequence parsing on the right, it parsed the output properly currently, it only supports setting/resetting bold mode and 8 types of foregrounds (black, red, green, yellow, blue, magenta, cyan, white) for some reason, using an inline <pre> tag sometimes inserts a newline even though it’s not in the content string… idk 😭 the other feature i added in these 3 hours was cache-based file storage (yes, the Cache API) it only saves files in the /home/user directory the files will be loaded on startup since there’s no filesystem watcher in BaSL, saving has to be manually triggered either via the terminal or from the meta menu i’ve still yet to make it so concurrent sync operations cannot occur it would also be nice to have sync -f so it rewrites the whole cache (mode changes are not detected yet) for some reason, IJSStreamReference didn’t marshal properly in an object, so i tried use byte[] from an Uint8Array which also didn’t work… string it is, hopefully it doesn’t mess up binary content gotta integrate the file system with Nowotes"}, {"post_id": 59461, "ts": "2026-09-01T10:20:53Z", "hours": 3.1578, "text": "i had a look at the guide, and decided that i don’t want to use z-index instead, i use ObservableCollection.Move to bring a window to the front window state stays intact because i specify @key changing the window order has a slight side effect: the task manager (taskbar) is also reordered; ordering by Id fixes this issue (IDs are v7 Guids which start with a timestamp) the welcome screen is now more descriptive implemented the meta menu (start menu), it’s pretty simple atm, only includes desktop programs the task manger now shows which window is focused (topmost and not minimized) added a notepad with a simple textarea element it saves data to localStorage code is horrible but does it matter? x3 deployed to GitHub Pages, hopefully this will qualify for the mission"}, {"post_id": 58810, "ts": "2026-08-31T12:08:09Z", "hours": 1.6219, "text": "genuinely forgot some of the things i’ve done, probably styling anyways, now you can open windows and close them properly! i’ll be adding a few more desktop icons and apps finally figured out the architecture i like the WindowManager has an ObservableCollection, so it’ll notify other components if a window is added or removed automatically the task manager (taskbar for losedows users) needs to be updated a second time because the window’s init method (which sets the title) only gets called the “next frame” (in Unity terms at least, idk how to say it lol) gonna need a to add minimizing windows, and a “start menu” i was also thinking of creating a simple notepad that saves content to local storage"}, {"post_id": 19425, "ts": "2026-06-30T19:04:06Z", "hours": 0.5356, "text": "was debating whether to use js interop to do window dragging, but plain JS is enough layouts turned out to be wrong for windows, so i created a simple Window base component instead window dragging now works also added a date display"}, {"post_id": 19400, "ts": "2026-06-30T18:27:51Z", "hours": 0.5025, "text": "finally got something working, creating an OS using Blazor (yes, it will be painful) i spent a lot of time trying to think about how to even start, then removing default assets, doing some basic styling there is now a very basic taskbar with a working clock"}]...
|
Title: OwOS by @Axwabo | Stardance
Devlogs:
final Title: OwOS by @Axwabo | Stardance
Devlogs:
finally got something working, creating an OS using Blazor (yes, it will be painful) i spent a lot of time trying to think about how to even start, then removing default assets, doing some basic styling there is now a very basic taskbar with a working clock
was debating whether to use js interop to do window dragging, but plain JS is enough layouts turned out to be wrong for windows, so i created a simple Window base component instead window dragging now works also added a date display
genuinely forgot some of the things i’ve done, probably styling anyways, now you can open windows and close them properly! i’ll be adding a few more desktop icons and apps finally figured out the architecture i like the WindowManager has an ObservableCollection, so it’ll notify other components if a window is added or removed automatically the task manager (taskbar for losedows users) needs to be updated a second time because the window’s init method (which sets the title) only gets called the “next frame” (in Unity terms at least, idk how to say it lol) gonna need a to add minimizing windows, and a “start menu” i was also thinking of creating a simple notepad that saves content to local storage
i had a look at the guide, and decided that i don’t want to use z-index instead, i use ObservableCollection.Move to bring a window to the front window state stays intact because i specify @key changing the window order has a slight side effect: the task manager (taskbar) is also reordered; ordering by Id fixes this issue (IDs are v7 Guids which start with a timestamp) the welcome screen is now more descriptive implemented the meta menu (start menu), it’s pretty simple atm, only includes desktop programs the task manger now shows which window is focused (topmost and not minimized) added a notepad with a simple textarea element it saves data to localStorage code is horrible but does it matter? x3 deployed to GitHub Pages, hopefully this will qualify for the mission
BaSL integration almost complete terminal :333 i’ve added my very basic Bash-like shell project as a program! since BaSL written in .NET, i can “just reference it,” and it works (not every package works out of the box in Blazor WebAssembly) on the left you can see the version without escape sequence parsing on the right, it parsed the output properly currently, it only supports setting/resetting bold mode and 8 types of foregrounds (black, red, green, yellow, blue, magenta, cyan, white) for some reason, using an inline <pre> tag sometimes inserts a newline even though it’s not in the content string… idk 😭 the other feature i added in these 3 hours was cache-based file storage (yes, the Cache API) it only saves files in the /home/user directory the files will be loaded on startup since there’s no filesystem watcher in BaSL, saving has to be manually triggered either via the terminal or from the meta menu i’ve still yet to make it so concurrent sync operations cannot occur it would also be nice to have sync -f so it rewrites the whole cache (mode changes are not detected yet) for some reason, IJSStreamReference didn’t marshal properly in an object, so i tried use byte[] from an Uint8Array which also didn’t work… string it is, hopefully it doesn’t mess up binary content gotta integrate the file system with Nowotes
my final devlog of Stardance i’m turning 19 in a few hours so this is my last thingy :3 brave browser ate my cursor so i can’t really see where i’m clicking lol completed BaSL integration: the window now scrolls automatically + i’ve improved the UX with a Send and Terminate button moved enter key handling to JavaScript because for some reason, .NET doesn’t get the input value before you press enter (so the input was percieved as empty on keydown) updated Nowotes with new file dialogs took a bit to refactor the code, i wanted a common component that does most stuff the SaveFileDialog and OpenFileDialog have only a few lines of code thanks to this the dialogs don’t look amazing, yeah, but you can tell directories apart by their trailing slash you can use the input field similarly to actual file dialogs: enter a directory in the current one go to a directory by specifying its full path open/save by providing a filename with no trailing slash, no .. (idk if the .. check works tbh) added an analog clock cuz i didn’t want to deal with window maximizing tiny detail: usename is now in the meta menu, which looks similar to how KDE handles it fixed file system restoration by using the location origin instad of the href fixed task manager buttons not being able to minimize their respective window
Ships:
this is a simple “operating system” that runs in your browser! made with Blazor (cuz i like seeing sharp ahaha) which complicated some things, but it could be worse right now it includes the following: date and time a notepad that uses localStorage to save data (you can open multiple of them at once) meta menu (“start menu,” useful when the icons are covered) an image of 4 FLIRTs :3 (you need to open the “file”) task manager (taskbar) that is very slightly buggy but it lets you restore windows that had been minimized making the task manager was a bit of a headache due to the unpredictable nature of C# delegates it works for bringing a window to the front i used the <dialog> HTML element in several places because i didn’t want to reinvent the wheel (not a lot of people know about this somehow), though handling interactions outside of the area of non-modal dialogs is something i’ll have to look into later dialog sizes should be restricted but ugh
this is an “operating system” that runs in your browser! made with Blazor (i love seeing sharp xd) i’ve added the following things since the last ship: BaSL integration, which is a Bash-like shell project, you can use it through the terminal the virtual filesystem is synced manually via the persistent Cache API using either of the following methods: invoke the sync command click the big SYNC button in the Meta menu Nowotes now saves data to the virtual BaSL file system open and save file dialogs let the user choose the file path of the text note an analog clock app only the /home/user directory (and its children) are synced to the browser cache, so paths like /usr/bin/amongr.txt won’t be saved solving the browser cache integration was a bit of a headache because IJSStreamReference didn’t work the way i wanted it to work, then i tried byte[] from a JavaScript Uint8Array (which also didn’t work) i ended up converting bytes to a UTF-8(?) string and passing that to C# and vice versa, hopefully this retains binary content...
|
1793735464.7617822
|
1793821864.7617822
|
|
67839
|
Amanyu by @amanyu | Stardance
|
amanyu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Amanyu by @amanyu | Stardance
|
1793735465.9685564
|
1794340265.9685564
|
|
36218
|
3D Model Converter by @planema | Stardance
|
planema
|
1
|
3.0
|
7
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T03:58:37Z", "hours": 3.0, "multiplier": 2.03, "payout": 7, "blessing": "neutral", "text": "I made a free open source 3D file converter website. It lets you upload a 3d file, then convert it to a different 3d file type. The purpose of it is for more efficient 3d printing file conversion that anyone can use. I am most proud of the live preview feature so you can view files and that it actually converts the files. Anyone can use this at https://convert3d.dino.icu/ or just press try project!", "repo": "https://github.com/dacowpilot/convert3d-website", "demo": "https://convert3d.dino.icu/"}]...
|
[{"post_id": 32155, "ts": "202 [{"post_id": 32155, "ts": "2026-07-21T03:52:07Z", "hours": 0.5328, "text": "I finished the final touches for the website and the github repository, i am ready to ship my project!"}, {"post_id": 32113, "ts": "2026-07-21T01:40:57Z", "hours": 2.2897, "text": "Almost done coding the website I just need to add a few more finishing touches. Then I am going to do the GitHub repository and it will be done!"}, {"post_id": 31935, "ts": "2026-07-20T18:58:28Z", "hours": 0.3914, "text": "I started working on a website for converting 3d models more efficiently and free for everyone. So far I got a free domain from hackclub dns and I connected it to my nest server so it is up and running. I still have a lot to do like coding the whole thing and figuring out how to put conversion stuff in."}]...
|
Title: 3D Model Converter by @planema | Stardance
Title: 3D Model Converter by @planema | Stardance
Devlogs:
I started working on a website for converting 3d models more efficiently and free for everyone. So far I got a free domain from hackclub dns and I connected it to my nest server so it is up and running. I still have a lot to do like coding the whole thing and figuring out how to put conversion stuff in.
Almost done coding the website I just need to add a few more finishing touches. Then I am going to do the GitHub repository and it will be done!
I finished the final touches for the website and the github repository, i am ready to ship my project!
Ships:
I made a free open source 3D file converter website. It lets you upload a 3d file, then convert it to a different 3d file type. The purpose of it is for more efficient 3d printing file conversion that anyone can use. I am most proud of the live preview feature so you can view files and that it actually converts the files. Anyone can use this at https://convert3d.dino.icu/ or just press try project!...
|
1793735466.871044
|
1793821866.871044
|
|
67843
|
My awesome macropad! by @Headhunter | Stardance
|
Headhunter
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Headhunter | Stard Title: My awesome macropad! by @Headhunter | Stardance...
|
1793735468.0171995
|
1794340268.0171995
|
|
17537
|
The Gitboard 2.0 by @aamir_pa2009 | Stardance
|
aamir_pa2009
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T22:35:14Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a 8 key 2x4 Matrix wired keypad that is preprogrammed with commonly used git phrases to make my programming easier, this was my first time using Fusion 360 and KiCAD. Please tell me if you have any improvements. Thanks!", "repo": "https://github.com/AamirKPathan/TheGitboard2.0", "demo": ""}]...
|
[{"post_id": 9435, "ts": "2026 [{"post_id": 9435, "ts": "2026-06-15T19:55:37Z", "hours": 1.8803, "text": "I Finally Finished my Hackpad, GITBOARD2.0 with pre programmed git messages, just waiting on approval now."}]...
|
Title: The Gitboard 2.0 by @aamir_pa2009 | Stardan Title: The Gitboard 2.0 by @aamir_pa2009 | Stardance
Devlogs:
I Finally Finished my Hackpad, GITBOARD2.0 with pre programmed git messages, just waiting on approval now.
Ships:
I made a 8 key 2x4 Matrix wired keypad that is preprogrammed with commonly used git phrases to make my programming easier, this was my first time using Fusion 360 and KiCAD. Please tell me if you have any improvements. Thanks!...
|
1793735468.8873355
|
1793821868.8873355
|
|
19492
|
MythicOS by @revankotapati | Stardance
|
revankotapati
|
2
|
15.68
|
54
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T19:25:16Z", "hours": 3.0, "multiplier": 17.71, "payout": 54, "blessing": "neutral", "text": "MythicOS is a creative web project that looks and acts just like a real computer desktop, built entirely inside a website using standard web code. Instead of standard, modern names, the entire system uses a fun fantasy theme filled with magical terms, turning regular apps into things like “Ancient Scrolls” (Notes) and the “Sigil Forge” (Printer). The project features a fully interactive layout where you can open multiple apps at the same time, drag windows around your screen by their header bars, and launch programs from a sleek dock at the bottom of the screen that swells in size when your mouse hovers over it. Behind the scenes, the project packs in a lot of working features: you can type and edit text files inside a mock file manager, use a grid-based calculator to solve math equations, browse incoming fake emails, write and “send” out replies, and use a music player that can play tracks, track timestamps, and skip songs. It even includes an interactive settings panel that lets you swap out the background wallpaper, and it automatically saves your favorite background to the browser’s memory so your desktop looks exactly how you left it whenever you return to the website.", "repo": "https://github.com/RevanK10/MythicOS", "demo": "https://revank10.github.io/MythicOS/"}, {"ship_num": 2, "ts": "2026-06-22T12:34:42Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I am incredibly excited to launch MythicOS, a myth-inspired web operating system simulation that merges the sleek user experience of modern desktop design with the rich, transcendent imagery of ancient Vedic cosmology. Operating out of the symbolic nodes of Mount Kailash, MythicOS serves as a conceptual workspace environment designed to monitor data planes, manage cosmic records, and explore dynamic realms across coordinates. Building an entire windowing environment inside a flat web browser came with unique architectural hurdles, specifically managing multi-state window configurations, prioritizing global display z-index depth stacking, and converting standard hardware APIs—like webcam video streams—into thematic native modules like the Sanjaya Drishti Lens without disrupting pure CSS layouts. I am incredibly proud of achieving a highly responsive, vanilla frontend architecture that delivers heavy glassmorphism, fluid drag mechanics, and real-time state data persistence in the Akashic Records without a single external library dependency. To fully test the environment, I highly recommend launching the application nodes from the bottom tray dock, opening The Divya Sight to enter dynamic search keyphrases like ganita or drishti, and altering the plane tapestry via the Dharma Laws configuration layer to watch the workspace interface fluidly adapt in real-time.", "repo": "https://github.com/RevanK10/MythicOS", "demo": "https://revank10.github.io/MythicOS/"}]...
|
[{"post_id": 48957, "ts": "202 [{"post_id": 48957, "ts": "2026-08-17T15:14:47Z", "hours": 5.6833, "text": "After reading the reviews left during my last ship, I fixed the music app and added an IDLE and improved the file system. The music app stops when you close, but continues to play when you minimize it. For the files app, you can now edit and save your edits to the files. For the IDLE, you can now create scripts and edit them. My main task now is to improve both of these by: Allowing these scripts to run and show output. Allow people to add files to the system. All this time, I spent way too much time on the music app where it seems to glitch and have improper display and the music would not seem to play at times. At this point, I am open to any suggestions."}, {"post_id": 20208, "ts": "2026-07-01T19:13:06Z", "hours": 0.9608, "text": "I fixed up the structure of the code, but made no major functionality changes. The email connection did not seem to work due to security reasons, so I removed it."}, {"post_id": 18396, "ts": "2026-06-29T15:15:06Z", "hours": 2.0856, "text": "I added a few extra features, including a music player and a printer app. Moreover, I changed the files and mail apps, where the user can actually edit and use the files. The user can also send mail and receive mail. However, the app is not connected to any real mail platforms, which I have been trying to fix."}, {"post_id": 13653, "ts": "2026-06-22T12:32:47Z", "hours": 0.3242, "text": "I added a few comments to the code and published my site on Github Pages. This project will be further developed in WebOS 2."}, {"post_id": 13643, "ts": "2026-06-22T11:52:50Z", "hours": 1.5803, "text": "I was able to finish the functionality of the apps. Majority of my time making this OS was spent on choosing the background colors, wallpapers, and design. I tried a few different ideas, and ended up using an Apple inspired design with the button. However, I was not able to find proper images for the apps that were suitable to design, so I kept the emojis temporarily. My plan is to add more apps and change the app icons. However, this will be the final devlog before I ship it for WebOS 1."}, {"post_id": 10992, "ts": "2026-06-18T00:45:24Z", "hours": 1.8733, "text": "I changed the theme from the initial OS design. I also added the search engine at the bottom, the purple app. I added an email app that will let you connect to your Gmail account, and changed the wallpaper in the background. My next step is to add the settings app, camera, calculator, file explorer, and more. I will also add the functionality for the two apps. Most of my time has been spent on trying to find icons for my app, most of which are currently emojis, but will soon change."}, {"post_id": 10566, "ts": "2026-06-17T11:23:45Z", "hours": 3.1783, "text": "I just finished the guide for WebOS 1. Interesting to follow through. I was able to create the background and my first app, a Notes app, with maximize, minimize, and closing functions. The app is also able to store the notes, so when the app is closed and reopened, the writing is still there. The OS also displays the time and date at the top. My next step is to create a few more apps, create a task bar, and add the setting function."}]...
|
Title: MythicOS by @revankotapati | Stardance
Dev Title: MythicOS by @revankotapati | Stardance
Devlogs:
I just finished the guide for WebOS 1. Interesting to follow through. I was able to create the background and my first app, a Notes app, with maximize, minimize, and closing functions. The app is also able to store the notes, so when the app is closed and reopened, the writing is still there. The OS also displays the time and date at the top. My next step is to create a few more apps, create a task bar, and add the setting function.
I changed the theme from the initial OS design. I also added the search engine at the bottom, the purple app. I added an email app that will let you connect to your Gmail account, and changed the wallpaper in the background. My next step is to add the settings app, camera, calculator, file explorer, and more. I will also add the functionality for the two apps. Most of my time has been spent on trying to find icons for my app, most of which are currently emojis, but will soon change.
I was able to finish the functionality of the apps. Majority of my time making this OS was spent on choosing the background colors, wallpapers, and design. I tried a few different ideas, and ended up using an Apple inspired design with the button. However, I was not able to find proper images for the apps that were suitable to design, so I kept the emojis temporarily. My plan is to add more apps and change the app icons. However, this will be the final devlog before I ship it for WebOS 1.
I added a few comments to the code and published my site on Github Pages. This project will be further developed in WebOS 2.
I added a few extra features, including a music player and a printer app. Moreover, I changed the files and mail apps, where the user can actually edit and use the files. The user can also send mail and receive mail. However, the app is not connected to any real mail platforms, which I have been trying to fix.
I fixed up the structure of the code, but made no major functionality changes. The email connection did not seem to work due to security reasons, so I removed it.
After reading the reviews left during my last ship, I fixed the music app and added an IDLE and improved the file system. The music app stops when you close, but continues to play when you minimize it. For the files app, you can now edit and save your edits to the files. For the IDLE, you can now create scripts and edit them. My main task now is to improve both of these by: Allowing these scripts to run and show output. Allow people to add files to the system. All this time, I spent way too much time on the music app where it seems to glitch and have improper display and the music would not seem to play at times. At this point, I am open to any suggestions.
Ships:
I am incredibly excited to launch MythicOS, a myth-inspired web operating system simulation that merges the sleek user experience of modern desktop design with the rich, transcendent imagery of ancient Vedic cosmology. Operating out of the symbolic nodes of Mount Kailash, MythicOS serves as a conceptual workspace environment designed to monitor data planes, manage cosmic records, and explore dynamic realms across coordinates. Building an entire windowing environment inside a flat web browser came with unique architectural hurdles, specifically managing multi-state window configurations, prioritizing global display z-index depth stacking, and converting standard hardware APIs—like webcam video streams—into thematic native modules like the Sanjaya Drishti Lens without disrupting pure CSS layouts. I am incredibly proud of achieving a highly responsive, vanilla frontend architecture that delivers heavy glassmorphism, fluid drag mechanics, and real-time state data persistence in the Akashic Records without a single external library dependency. To fully test the environment, I highly recommend launching the application nodes from the bottom tray dock, opening The Divya Sight to enter dynamic search keyphrases like ganita or drishti, and altering the plane tapestry via the Dharma Laws configuration layer to watch the workspace interface fluidly adapt in real-time.
MythicOS is a creative web project that looks and acts just like a real computer desktop, built entirely inside a website using standard web code. Instead of standard, modern names, the entire system uses a fun fantasy theme filled with magical terms, turning regular apps into things like “Ancient Scrolls” (Notes) and the “Sigil Forge” (Printer). The project features a fully interactive layout where you can open multiple apps at the same time, drag windows around your screen by their header bars, and launch programs from a sleek dock at the bottom of the screen that swells in size when your mouse hovers over it. Behind the scenes, the project packs in a lot of working features: you can type and edit text files inside a mock file manager, use a grid-based calculator to solve math equations, browse incoming fake emails, write and “send” out replies, and use a music player that can play tracks, track timestamps, and skip songs. It even includes an interactive settings panel that lets you swap out the background wallpaper, and it automatically saves your favorite background to the browser’s memory so your desktop looks exactly how you left it whenever you return to the website....
|
1793735470.0718439
|
1793821870.0718439
|
|
67844
|
My awesome macropad! by @hashitha_reddy7 | Stardan My awesome macropad! by @hashitha_reddy7 | Stardance...
|
hashitha_reddy7
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @hashitha_reddy7 | Title: My awesome macropad! by @hashitha_reddy7 | Stardance...
|
1793735471.229502
|
1794340271.229502
|
|
46456
|
Tanjiro themed personal website by @Tanjiro | Star Tanjiro themed personal website by @Tanjiro | Stardance...
|
Tanjiro
|
1
|
37.17
|
528
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T13:07:45Z", "hours": 32.0, "multiplier": 16.62, "payout": 528, "blessing": "neutral", "text": "A Tanjiro-Themed Personal Portfolio that uses Vanilla HTML, CSS and JS with a bit of GSAP! Challenges and Difficulties :- Figuring out the responsive layout for website - I did not start with a responsive layout, which caused a lot of trouble just making section 1 responsive was so difficult that it lot more than 6 hours IG Understanding and Writing code for scroll-animation canvas - This was a lot tuff than I thought like every frame must be numbered and counted and what not. Honestly, it was a great learning journey! Making that scroll-animation Canvas Responsive - From the start I knew that this will be a lot tuff, but I did not expect this much like it made my js code’s line count from 100 to near 200 lines! Entire Section 4 - This section was really Precious to me cause it had every interest I had and liked, every hour I spent into building this section was WORTH IT. Learnings :- Understood why to start and maintain responsiveness. How scroll-animation canvas is made and how apple makes them Flexbox and Gridboxes Much more in JS A lot of CSS", "repo": "https://github.com/YOBO-DANCE/Tanjiro-Themed-Personal-Website", "demo": "https://tanjiro-themed-personal-website.vercel.app/"}]...
|
[{"post_id": 67893, "ts": "202 [{"post_id": 67893, "ts": "2026-09-14T06:12:26Z", "hours": 1.4844, "text": "Okay, now every AI imagery is removed and the project is ready to be shipped!"}, {"post_id": 66725, "ts": "2026-09-12T16:50:27Z", "hours": 1.6397, "text": "Devlog 24 - I removed the section where the Ai generated imagery is located aka the scroll-driven animation and added a much lovely and nice section design for the section"}, {"post_id": 64938, "ts": "2026-09-09T17:42:53Z", "hours": 1.0211, "text": "Devlog 21 - So I Again got some recommendation and changes requested so I will do them, but today I did half of the work. Tmr I will do the next half"}, {"post_id": 63994, "ts": "2026-09-08T03:01:52Z", "hours": 0.25, "text": "Devlog 20 - So I got so many recomdations and I made the changes! Note for shipwrights - I first made the README with AI because I didn’t knew what to write, but after it I completely rewrote the README as per my requirements and then only shipped the project. So, it might feel like AI, but it really isn’t."}, {"post_id": 62758, "ts": "2026-09-06T08:47:33Z", "hours": 0.7736, "text": "Devlog 19 - Okay so I did some changes to the code and README. The layout is still same tho!"}, {"post_id": 62163, "ts": "2026-09-05T12:52:41Z", "hours": 3.7817, "text": "My Project is ready to be shipped!!!!!"}, {"post_id": 61619, "ts": "2026-09-04T16:37:48Z", "hours": 0.35, "text": "Devlog 18 - Tried to deploy but my internet gave up"}, {"post_id": 60861, "ts": "2026-09-03T14:21:49Z", "hours": 4.4564, "text": "Devlog 18 - Completed Section 4 and added a custom trail custom which mimics fire"}, {"post_id": 60271, "ts": "2026-09-02T15:22:51Z", "hours": 0.5767, "text": "Devlog 17 - Section 4 is such a Headache and I cannot understand it"}, {"post_id": 60250, "ts": "2026-09-02T14:40:48Z", "hours": 0.5303, "text": "Devlog 16 - Starting Section 4 i.e. My Goals! Wish me Luck!"}, {"post_id": 59543, "ts": "2026-09-01T12:57:56Z", "hours": 1.4031, "text": "Devlog 15 - Milestone: Completed Section 3/bio section What changes did I made? I added a grid structure Added another carousel, so the main text is wrapped around the carousel Added a Glass Box around the paragraph for aesthetics! Made it responsive!!! Good Bye"}, {"post_id": 58075, "ts": "2026-08-30T12:47:53Z", "hours": 0.4658, "text": "Devlog 14 - Working on the paragraph"}, {"post_id": 57518, "ts": "2026-08-29T18:01:38Z", "hours": 1.6658, "text": "Devlog 13 - Today I did some tweaking around and this is the result. Also now I added a dropshadow type effect to the scroll animation."}, {"post_id": 53019, "ts": "2026-08-23T12:23:06Z", "hours": 1.6194, "text": "Devlog 12 - Did some learning and working today! Nothing else!"}, {"post_id": 52466, "ts": "2026-08-22T16:19:40Z", "hours": 0.3833, "text": "Devlog 11 - why the F#ck does AI mess up so much!!!!! So I tried to generate the scroll-driven animation video using google flow, but it has caused so much problems because it just keeps making tanjiro’s hand being on the sheath rather than being on the sword handle like it should. Will try again, see ya later!"}, {"post_id": 52169, "ts": "2026-08-22T08:09:10Z", "hours": 1.0378, "text": "Devlog 10 - Today I am completely annoyed because a f#cking font won’t load or is even trying. It feels like programming has been an AI, forgetting as the context becomes larger. I can’t even load those fonts. Also I learned some CSS grid today!"}, {"post_id": 51923, "ts": "2026-08-21T20:51:10Z", "hours": 4.1367, "text": "Devlog 9 - So I completed a portrait mode of scroll-driven animation and it was a mess because the ai video generation kept messin’ up and it took 4 tries just to get correct angle. Now I just need to start with next section of the website. Hope to see ya!"}, {"post_id": 51575, "ts": "2026-08-21T10:55:58Z", "hours": 3.6494, "text": "Devlog 8 - So I worked on nav menu trying to make it like a proper liquid glass only to fail :( and then I started to work on second page whose start will be a scrollable animation like freaking Apple’s websites. IG, this will be a big project, and with that my whole morning, afternoon and evening is gone! 🥲"}, {"post_id": 51088, "ts": "2026-08-20T16:09:59Z", "hours": 0.3383, "text": "Devlog 7 - So I finished responsive work on first page, now onto making second page"}, {"post_id": 51052, "ts": "2026-08-20T15:12:53Z", "hours": 0.7858, "text": "Devlog 6 - Got a new problem, So I just added some Responsive CSS and now the Nav links are at extremely left. This is caused by the changes in the html structure and now I think I am losing my mind!!!!!??"}, {"post_id": 47969, "ts": "2026-08-16T07:42:53Z", "hours": 0.9731, "text": "Devlog 5 - Learning some CSS flexbox! Can’t wait to use it >.<"}, {"post_id": 47592, "ts": "2026-08-15T16:06:43Z", "hours": 1.2222, "text": "Devlog 4 - Learned Media queries, Css variables, positioning, Clamp property, etc."}, {"post_id": 47495, "ts": "2026-08-15T13:20:42Z", "hours": 2.7556, "text": "Devlog 3 - Some Major Changes! I Added a background video playing some demon slayer, and took inspiration from liquid GL”ASS”"}, {"post_id": 44834, "ts": "2026-08-10T21:09:39Z", "hours": 0.4383, "text": "Devlog 2 - SO I detached the navbar from the website and added some inner box shadow, according to me it looks great!"}, {"post_id": 44803, "ts": "2026-08-10T20:29:59Z", "hours": 1.1994, "text": "Devlog 1 - Today I added a basic Navbar with a little CSS to it!"}]...
|
Title: Tanjiro themed personal website by @Tanjiro Title: Tanjiro themed personal website by @Tanjiro | Stardance
Devlogs:
Devlog 1 - Today I added a basic Navbar with a little CSS to it!
Devlog 2 - SO I detached the navbar from the website and added some inner box shadow, according to me it looks great!
Devlog 3 - Some Major Changes! I Added a background video playing some demon slayer, and took inspiration from liquid GL”ASS”
Devlog 4 - Learned Media queries, Css variables, positioning, Clamp property, etc.
Devlog 5 - Learning some CSS flexbox! Can’t wait to use it >.<
Devlog 6 - Got a new problem, So I just added some Responsive CSS and now the Nav links are at extremely left. This is caused by the changes in the html structure and now I think I am losing my mind!!!!!??
Devlog 7 - So I finished responsive work on first page, now onto making second page
Devlog 8 - So I worked on nav menu trying to make it like a proper liquid glass only to fail :( and then I started to work on second page whose start will be a scrollable animation like freaking Apple’s websites. IG, this will be a big project, and with that my whole morning, afternoon and evening is gone! 🥲
Devlog 9 - So I completed a portrait mode of scroll-driven animation and it was a mess because the ai video generation kept messin’ up and it took 4 tries just to get correct angle. Now I just need to start with next section of the website. Hope to see ya!
Devlog 10 - Today I am completely annoyed because a f#cking font won’t load or is even trying. It feels like programming has been an AI, forgetting as the context becomes larger. I can’t even load those fonts. Also I learned some CSS grid today!
Devlog 11 - why the F#ck does AI mess up so much!!!!! So I tried to generate the scroll-driven animation video using google flow, but it has caused so much problems because it just keeps making tanjiro’s hand being on the sheath rather than being on the sword handle like it should. Will try again, see ya later!
Devlog 12 - Did some learning and working today! Nothing else!
Devlog 13 - Today I did some tweaking around and this is the result. Also now I added a dropshadow type effect to the scroll animation.
Devlog 14 - Working on the paragraph
Devlog 15 - Milestone: Completed Section 3/bio section What changes did I made? I added a grid structure Added another carousel, so the main text is wrapped around the carousel Added a Glass Box around the paragraph for aesthetics! Made it responsive!!! Good Bye
Devlog 16 - Starting Section 4 i.e. My Goals! Wish me Luck!
Devlog 17 - Section 4 is such a Headache and I cannot understand it
Devlog 18 - Completed Section 4 and added a custom trail custom which mimics fire
Devlog 18 - Tried to deploy but my internet gave up
My Project is ready to be shipped!!!!!
Devlog 19 - Okay so I did some changes to the code and README. The layout is still same tho!
Devlog 20 - So I got so many recomdations and I made the changes! Note for shipwrights - I first made the README with AI because I didn’t knew what to write, but after it I completely rewrote the README as per my requirements and then only shipped the project. So, it might feel like AI, but it really isn’t.
Devlog 21 - So I Again got some recommendation and changes requested so I will do them, but today I did half of the work. Tmr I will do the next half
Devlog 24 - I removed the section where the Ai generated imagery is located aka the scroll-driven animation and added a much lovely and nice section design for the section
Okay, now every AI imagery is removed and the project is ready to be shipped!
Ships:
A Tanjiro-Themed Personal Portfolio that uses Vanilla HTML, CSS and JS with a bit of GSAP! Challenges and Difficulties :- Figuring out the responsive layout for website - I did not start with a responsive layout, which caused a lot of trouble just making section 1 responsive was so difficult that it lot more than 6 hours IG Understanding and Writing code for scroll-animation canvas - This was a lot tuff than I thought like every frame must be numbered and counted and what not. Honestly, it was a great learning journey! Making that scroll-animation Canvas Responsive - From the start I knew that this will be a lot tuff, but I did not expect this much like it made my js code’s line count from 100 to near 200 lines! Entire Section 4 - This section was really Precious to me cause it had every interest I had and liked, every hour I spent into building this section was WORTH IT. Learnings :- Understood why to start and maintain responsiveness. How scroll-animation canvas is made and how apple makes them Flexbox and Gridboxes Much more in JS A lot of CSS...
|
1793735472.111542
|
1793821872.111542
|
|
67845
|
BrainF#ckery Compiler by @mindstormpro3 | Stardanc BrainF#ckery Compiler by @mindstormpro3 | Stardance...
|
mindstormpro3
|
0
|
5.43
|
0
|
[]
|
[{"post_id": 81025, "ts": "202 [{"post_id": 81025, "ts": "2026-10-19T16:25:31Z", "hours": 2.5642, "text": "BrainF#ckery Devlog #3! What’s Changed? Well… I added command line arguments!!! Gone are the days of manually typing your BF code into the terminal, now you can specify and input and output file, as well as pass flags! I also published to PyPi!!! Find it Here! On top of all that, I also made a bunch of small changes and modifications to fix bugs and make my compiler work better. Command Line Args! Here’s the current full list: -h , or --Help -> Your basic help command, don’t need to say much here -v , or --Verbose -> Enables verbose (extra) logging -i or --Input -> Takes a file path as an input file (a .bf file) -o or --Output -> Takes a file path to be the outputted executable (a .exe file)| -r or --Run -> Runs the newly compiled executable right after it’s done being compiled. c or --Clean -> deletes the build files ( .obj and .asm product files) after compilation is complete ***And hopefully more to come! I already have some ideas! : b WE’RE ON PYPI!!!!!!!!!! Check it out HERE!!! And finally, the boring bugfixes… :( A couple things: I realized, after a very smart friend of mine pointed it out, that I was not popping the stack after pushing it to call a function… If I left this in, more complex programs would crash due to a stack overflow…. I added comment clearing! Originally, the compiler would only read BF code that happened to be one of the 8 valid characters, but what if you happened to put a valid BF char in a comment? Well now there’s a loop that runs before the rest of the compiler that strips all lines of their text after a ; character, meaning all comments get deleted! I also added more error handling, so in case of a file not found or something, instead of the code crashing it just prints an error to the logs and returns. Thanks for sticking around for my devlog! see ya next time! : b"}, {"post_id": 77560, "ts": "2026-10-07T14:07:07Z", "hours": 2.4694, "text": "BrainF#ckery Devlog #2! What’s Changed? A LOT! Since the last devlog, I’ve practically finished the BF -> Assembly compiler, and even used subprocess.run() to call NASM and GCC to build the script! It currently looks for a file called in.bf and then compiles it into an EXE that gets dumped straight into a build/ folder along with the out.asm and out.obj files! How does the Compiler actually work? Right now, all the compiler really does is go character by character in the input file, and if the character is one of the special 8, ( <>+-,.[] ) I just append some assembly into the out.asm file that corresponds with the instruction. For example, for + I just add inc byte [ebx] which increments the byte stored at the location the EBX register is pointing at. (EBX stores the tape pointer, and you manipulate it with < and > ). The cool thing about writing the compiler like this is that it literally just ignores everything else, so I don’t have to write code to “clean” the input file of newlines, tabs, spaces, comments, ect. Now for [ and ] , they’re a bit special. The way these guys work is I have a stack and counter. Whenever I add a [ to the assembly, I first increment the counter by 1 and then push the value to the stack. Then I use fstrings to modify the assembly I’m about to add by doing this: cmp byte [ebx], 0 jz loopEnd{bracketCounter} Now to break this down, cmp is comparing the current cell ( byte [ebx] ) with 0. Then, the next instruction, jz only jumps to the given location in code if the two values compared previously are equal to eachother. The fstrings come into play because they modify this jump location to be loopEnd(whatever the counter is) , and this location becomes the corrisponding ] when that instruction is read. What’s next? Well, firstly I need to make a bunch of QoL changes to the compiler, like allowing the user to pass custom input and output names/directories, specify whether or not to fully compile or leave it as a chunk of assembly, ect I also want to make a slightly higher level BF-esque language, where you can do stuff like + 2, 5 to increase cell 2 by 5, if statements, batch outputting, ect, but that’s not gonna be the easiest thing… See Ya Later! - Elio"}, {"post_id": 76632, "ts": "2026-10-04T06:57:23Z", "hours": 0.3983, "text": "BrainF#ckery Devlog #1! What is BrainF#ckery? BrainF#ckery, or BFery for short, is a compiler for Brainf#ck! It’s written fully in python and takes BF and converts it into working assembly that you can plug into NASM and gcc to turn BF into a working executable! But why? Shut Up. How will it work? BFery will essentially just read and translate any BF directly into assembly. It’s actually really simple, since most of BF converts into a single line of assembly, like > , which moves the tape pointer up one, translates to inc rbx . That’s it! the rest are as follows: < -> dec rbx (dec means to decrease) + -> inc byte [rbx] ( byte tells NASM to only write one byte of data, and the two brackets here are the equivalent of dereferencing a pointer in C.) - -> dec byte [rbx] the rest( [ ] , . ) I have yet to figure out… OK Thats really all for this devlog, thanks for stoppin’ by! Elio"}]...
|
Title: BrainF#ckery Compiler by @mindstormpro3 | S Title: BrainF#ckery Compiler by @mindstormpro3 | Stardance
Devlogs:
BrainF#ckery Devlog #1! What is BrainF#ckery? BrainF#ckery, or BFery for short, is a compiler for Brainf#ck! It’s written fully in python and takes BF and converts it into working assembly that you can plug into NASM and gcc to turn BF into a working executable! But why? Shut Up. How will it work? BFery will essentially just read and translate any BF directly into assembly. It’s actually really simple, since most of BF converts into a single line of assembly, like > , which moves the tape pointer up one, translates to inc rbx . That’s it! the rest are as follows: < -> dec rbx (dec means to decrease) + -> inc byte [rbx] ( byte tells NASM to only write one byte of data, and the two brackets here are the equivalent of dereferencing a pointer in C.) - -> dec byte [rbx] the rest( [ ] , . ) I have yet to figure out… OK Thats really all for this devlog, thanks for stoppin’ by! Elio
BrainF#ckery Devlog #2! What’s Changed? A LOT! Since the last devlog, I’ve practically finished the BF -> Assembly compiler, and even used subprocess.run() to call NASM and GCC to build the script! It currently looks for a file called in.bf and then compiles it into an EXE that gets dumped straight into a build/ folder along with the out.asm and out.obj files! How does the Compiler actually work? Right now, all the compiler really does is go character by character in the input file, and if the character is one of the special 8, ( <>+-,.[] ) I just append some assembly into the out.asm file that corresponds with the instruction. For example, for + I just add inc byte [ebx] which increments the byte stored at the location the EBX register is pointing at. (EBX stores the tape pointer, and you manipulate it with < and > ). The cool thing about writing the compiler like this is that it literally just ignores everything else, so I don’t have to write code to “clean” the input file of newlines, tabs, spaces, comments, ect. Now for [ and ] , they’re a bit special. The way these guys work is I have a stack and counter. Whenever I add a [ to the assembly, I first increment the counter by 1 and then push the value to the stack. Then I use fstrings to modify the assembly I’m about to add by doing this: cmp byte [ebx], 0 jz loopEnd{bracketCounter} Now to break this down, cmp is comparing the current cell ( byte [ebx] ) with 0. Then, the next instruction, jz only jumps to the given location in code if the two values compared previously are equal to eachother. The fstrings come into play because they modify this jump location to be loopEnd(whatever the counter is) , and this location becomes the corrisponding ] when that instruction is read. What’s next? Well, firstly I need to make a bunch of QoL changes to the compiler, like allowing the user to pass custom input and output names/directories, specify whether or not to fully compile or leave it as a chunk of assembly, ect I also want to make a slightly higher level BF-esque language, where you can do stuff like + 2, 5 to increase cell 2 by 5, if statements, batch outputting, ect, but that’s not gonna be the easiest thing… See Ya Later! - Elio
BrainF#ckery Devlog #3! What’s Changed? Well… I added command line arguments!!! Gone are the days of manually typing your BF code into the terminal, now you can specify and input and output file, as well as pass flags! I also published to PyPi!!! Find it Here! On top of all that, I also made a bunch of small changes and modifications to fix bugs and make my compiler work better. Command Line Args! Here’s the current full list: -h , or --Help -> Your basic help command, don’t need to say much here -v , or --Verbose -> Enables verbose (extra) logging -i or --Input -> Takes a file path as an input file (a .bf file) -o or --Output -> Takes a file path to be the outputted executable (a .exe file)| -r or --Run -> Runs the newly compiled executable right after it’s done being compiled. c or --Clean -> deletes the build files ( .obj and .asm product files) after compilation is complete ***And hopefully more to come! I already have some ideas! : b WE’RE ON PYPI!!!!!!!!!! Check it out HERE!!! And finally, the boring bugfixes… :( A couple things: I realized, after a very smart friend of mine pointed it out, that I was not popping the stack after pushing it to call a function… If I left this in, more complex programs would crash due to a stack overflow…. I added comment clearing! Originally, the compiler would only read BF code that happened to be one of the 8 valid characters, but what if you happened to put a valid BF char in a comment? Well now there’s a loop that runs before the rest of the compiler that strips all lines of their text after a ; character, meaning all comments get deleted! I also added more error handling, so in case of a file not found or something, instead of the code crashing it just prints an error to the logs and returns. Thanks for sticking around for my devlog! see ya next time! : b...
|
1793735473.3697603
|
1794340273.3697603
|
|
23461
|
learning trumpet fingerings by @Dasher2801 | Stard learning trumpet fingerings by @Dasher2801 | Stardance...
|
|
1
|
6.0
|
23
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T17:51:45Z", "hours": 6.0, "multiplier": 4.1, "payout": 23, "blessing": "neutral", "text": "Master Trumpet Fingerings: The Interactive Trainer This minimalist web app is the perfect digital tool for trumpet beginners, music students, and returning playersto intuitively master classic fingerings in the treble clef.Without any downloads or registrations, the tool transforms any web browser into a motivating educational game. The app randomly generates notes between low C and high C, featuring a dynamic sheet music staff that automatically handles ledger lines. You control the virtual valves using your keyboard keys 1, 2, and 3, while pressing 0 immediately resets all valves to the open position. Pressing the Enter key evaluates your attempt. If you are correct, the entire screen instantly turns green and a synthesized trumpet fanfare sounds. Thanks to this combination of visual staff notation, tactile keyboard input, and immediate acoustic rewards, this website ensures rapid learning success. It is the ideal companion for your daily musical warm-up.", "repo": "https://github.com/Dasher2801/Trompete-lernen", "demo": "https://dasher2801.github.io/Trompete-lernen/"}]...
|
[{"post_id": 14356, "ts": "202 [{"post_id": 14356, "ts": "2026-06-23T13:39:19Z", "hours": 1.7, "text": "The design has been completely revamped. Several bugs have also been fixed—such as the issue where only one key could be pressed at a time, or notes being displayed incorrectly."}, {"post_id": 13725, "ts": "2026-06-22T14:31:15Z", "hours": 2.2825, "text": "Now, all notes from Gb to C3 are being tested. The design is still the old one."}, {"post_id": 13012, "ts": "2026-06-21T09:04:53Z", "hours": 1.7472, "text": "Ich arbeite an einer Website, mit der Trompetenspieler schnell und Effizient alle Griffe für die Trompete lernen können. Bis jetzt ist es mur dieser eine Ton (A1).Jetzt muss ich alle anderen Töne und Vorzeichen hinzufügen. Auch das Design muss ich noch anpassen."}]...
|
Title: learning trumpet fingerings by @Dasher2801 Title: learning trumpet fingerings by @Dasher2801 | Stardance
Devlogs:
Ich arbeite an einer Website, mit der Trompetenspieler schnell und Effizient alle Griffe für die Trompete lernen können. Bis jetzt ist es mur dieser eine Ton (A1).Jetzt muss ich alle anderen Töne und Vorzeichen hinzufügen. Auch das Design muss ich noch anpassen.
Now, all notes from Gb to C3 are being tested. The design is still the old one.
The design has been completely revamped. Several bugs have also been fixed—such as the issue where only one key could be pressed at a time, or notes being displayed incorrectly.
Ships:
Master Trumpet Fingerings: The Interactive Trainer This minimalist web app is the perfect digital tool for trumpet beginners, music students, and returning playersto intuitively master classic fingerings in the treble clef.Without any downloads or registrations, the tool transforms any web browser into a motivating educational game. The app randomly generates notes between low C and high C, featuring a dynamic sheet music staff that automatically handles ledger lines. You control the virtual valves using your keyboard keys 1, 2, and 3, while pressing 0 immediately resets all valves to the open position. Pressing the Enter key evaluates your attempt. If you are correct, the entire screen instantly turns green and a synthesized trumpet fanfare sounds. Thanks to this combination of visual staff notation, tactile keyboard input, and immediate acoustic rewards, this website ensures rapid learning success. It is the ideal companion for your daily musical warm-up....
|
1793735474.5179586
|
1793821874.5179586
|
|
22040
|
clk-link by @CLK | Stardance
|
CLK
|
1
|
1.63
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T19:49:22Z", "hours": 1.0, "multiplier": 1.3, "payout": 1, "blessing": "neutral", "text": "I made a website that links most of my other websites together with this one I hope you like it, enjoy", "repo": "https://github.com/NIVLACvt/clk-link", "demo": "https://nivlacvt.github.io/clk-link/"}]...
|
[{"post_id": 27636, "ts": "202 [{"post_id": 27636, "ts": "2026-07-13T12:13:01Z", "hours": 0.6297, "text": "just added my rock-paper-scissor game’s button, made buttons larger and made it so that the buttons are below the description of the project and a cool pattern for the layout"}, {"post_id": 13673, "ts": "2026-06-22T13:01:03Z", "hours": 0.5842, "text": "Added button links instead of normal links and my calculater website"}, {"post_id": 11646, "ts": "2026-06-18T23:50:59Z", "hours": 0.5842, "text": "Just finished adding the first three websites and color(can’t wait to add more) to view you can go to https://nivlacvt.github.io/clk-link/"}]...
|
Title: clk-link by @CLK | Stardance
Devlogs:
Just Title: clk-link by @CLK | Stardance
Devlogs:
Just finished adding the first three websites and color(can’t wait to add more) to view you can go to https://nivlacvt.github.io/clk-link/
Added button links instead of normal links and my calculater website
just added my rock-paper-scissor game’s button, made buttons larger and made it so that the buttons are below the description of the project and a cool pattern for the layout
Ships:
I made a website that links most of my other websites together with this one I hope you like it, enjoy...
|
1793735475.5614405
|
1793821875.5614405
|
|
67846
|
My very own WebOS by @raycoding | Stardance
|
raycoding
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @raycoding | Stardance
|
1793735477.845645
|
1794340277.845645
|
|
17384
|
Physical HD2 stimm by @WilliDih123 | Stardance
|
WilliDih123
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T18:30:28Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a super cool stimm from helldivers 2 that actually stimms you in game. I couldn’t really get a sceenshot if it in action but I will get a screenshot of the stl. Just to add I used ai to write the code. Above all else though get ready to spread some liberty (Stimms are not adictive - study from permacure ).", "repo": "https://github.com/WilliD123/Helldivers-2-Stimm", "demo": ""}]...
|
[{"post_id": 8957, "ts": "2026 [{"post_id": 8957, "ts": "2026-06-14T22:12:23Z", "hours": 0.4361, "text": "Making a Stand"}, {"post_id": 8915, "ts": "2026-06-14T20:50:01Z", "hours": 0.9647, "text": "Soldering 2 wires, adding the code and testing"}, {"post_id": 8836, "ts": "2026-06-14T18:11:17Z", "hours": 0.5856, "text": "Adding the injector"}, {"post_id": 7953, "ts": "2026-06-13T08:37:59Z", "hours": 1.2408, "text": "Finishing the main body and electronics housing"}, {"post_id": 7746, "ts": "2026-06-12T22:48:13Z", "hours": 1.7367, "text": "Part One Of The Main Body"}]...
|
Title: Physical HD2 stimm by @WilliDih123 | Starda Title: Physical HD2 stimm by @WilliDih123 | Stardance
Devlogs:
Part One Of The Main Body
Finishing the main body and electronics housing
Adding the injector
Soldering 2 wires, adding the code and testing
Making a Stand
Ships:
I made a super cool stimm from helldivers 2 that actually stimms you in game. I couldn’t really get a sceenshot if it in action but I will get a screenshot of the stl. Just to add I used ai to write the code. Above all else though get ready to spread some liberty (Stimms are not adictive - study from permacure )....
|
1793735479.4544806
|
1793821879.4544806
|
|
10155
|
ari-khan.com by @ari | Stardance
|
ari
|
1
|
6.06
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T22:58:38Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Added a screenshot!", "repo": "https://github.com/Ari-Khan/ari-khan.com", "demo": "https://ari-khan.com/"}]...
|
[{"post_id": 17269, "ts": "202 [{"post_id": 17269, "ts": "2026-06-28T00:07:23Z", "hours": 3.0617, "text": "Updated UI and completed switch to astro.js!"}, {"post_id": 3766, "ts": "2026-06-06T20:18:56Z", "hours": 3.34, "text": "Working on switching ari-khan.com into an Astro.js project!"}]...
|
Title: ari-khan.com by @ari | Stardance
Devlogs:
Title: ari-khan.com by @ari | Stardance
Devlogs:
Working on switching ari-khan.com into an Astro.js project!
Updated UI and completed switch to astro.js!
Ships:
Added a screenshot!...
|
1793735480.6581705
|
1793821880.6581705
|
|
52037
|
a simple harmonic motion simulator by @emmanuel67 a simple harmonic motion simulator by @emmanuel67 | Stardance...
|
emmanuel67
|
2
|
17.0
|
61
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T10:57:43Z", "hours": 10.0, "multiplier": 4.18, "payout": 42, "blessing": "neutral", "text": "i made a math simulator that lets you visualize the math you do. the hardest part was turning my previous fully streamlit script into a fully customtkinter script because you could see localhost and thats a problem for the reviewers, idk why but thats fair. please check it out but if you dont intend to use this tool after testing it, please delete it as it is a pretty big file. thanks for everything stardance", "repo": "https://github.com/emmanuelnkangolo319-hash/simple-harmonic-oscilation-simulator", "demo": "https://github.com/emmanuelnkangolo319-hash/simple-harmonic-oscilation-simulator/releases/tag/v1.0.0"}, {"ship_num": 2, "ts": "2026-08-29T09:48:43Z", "hours": 7.0, "multiplier": 2.86, "payout": 19, "blessing": "neutral", "text": "i made a simple harmonic wave simulator, i did this cause i think the hardest part of studying math and physics is visualizations.", "repo": "https://github.com/emmanuelnkangolo319-hash/simple-harmonic-oscilation-simulator", "demo": "https://github.com/emmanuelnkangolo319-hash/simple-harmonic-oscilation-simulator/releases/tag/v1.0.0"}]...
|
[{"post_id": 85446, "ts": "202 [{"post_id": 85446, "ts": "2026-10-31T10:53:21Z", "hours": 6.0567, "text": "i finished turning it from a fully streamlit project to a fully customtkinter project. i did this because when this project got reviewed, the reviewer said they cant accept anything with localhost, which is fair. so yea, i did it, but now its a pretty big file, but i think its worth it, i hope they accept it this time and thanks for the support, somehow even the 1 like from each devlog kept me going"}, {"post_id": 60198, "ts": "2026-09-02T12:55:15Z", "hours": 1.6486, "text": "we are done baby, atleast i think so, i added funtions and simple harmonic waves, i remind you that this is just a tool, focusing of one of the biggest problems with studying math, visualization. please dont give up, remember why you study these stem subjectss its to understand the universe, simply put, math is just the universe, translated to human, i hope this will become an actual product, with many more concepts and features, i will add more, this website will kinda show my journey, since im avoiding using ai, im only putting the things i have learned, yes this website will be constentlly changing, because of vast amount of knowlegde the human mind can hold"}, {"post_id": 59552, "ts": "2026-09-01T13:14:58Z", "hours": 2.3981, "text": "Okay, so i finally made a ui for it, but im really having trouble with the design. Im using streamlit since its often recommended to make ui’s for math and data visualization. So if you have any advice on design choice and what other things it should plot (maybe custom charts and other math concepts), it would truly help alot"}, {"post_id": 57194, "ts": "2026-08-29T09:35:23Z", "hours": 6.1975, "text": "simple harmonic waves simulation"}, {"post_id": 51247, "ts": "2026-08-20T19:44:20Z", "hours": 0.32, "text": "Well, its just something to help me visualize waves in harmonic motion while i do the math"}]...
|
Title: a simple harmonic motion simulator by @emma Title: a simple harmonic motion simulator by @emmanuel67 | Stardance
Devlogs:
Well, its just something to help me visualize waves in harmonic motion while i do the math
simple harmonic waves simulation
Okay, so i finally made a ui for it, but im really having trouble with the design. Im using streamlit since its often recommended to make ui’s for math and data visualization. So if you have any advice on design choice and what other things it should plot (maybe custom charts and other math concepts), it would truly help alot
we are done baby, atleast i think so, i added funtions and simple harmonic waves, i remind you that this is just a tool, focusing of one of the biggest problems with studying math, visualization. please dont give up, remember why you study these stem subjectss its to understand the universe, simply put, math is just the universe, translated to human, i hope this will become an actual product, with many more concepts and features, i will add more, this website will kinda show my journey, since im avoiding using ai, im only putting the things i have learned, yes this website will be constentlly changing, because of vast amount of knowlegde the human mind can hold
i finished turning it from a fully streamlit project to a fully customtkinter project. i did this because when this project got reviewed, the reviewer said they cant accept anything with localhost, which is fair. so yea, i did it, but now its a pretty big file, but i think its worth it, i hope they accept it this time and thanks for the support, somehow even the 1 like from each devlog kept me going
Ships:
i made a simple harmonic wave simulator, i did this cause i think the hardest part of studying math and physics is visualizations.
i made a math simulator that lets you visualize the math you do. the hardest part was turning my previous fully streamlit script into a fully customtkinter script because you could see localhost and thats a problem for the reviewers, idk why but thats fair. please check it out but if you dont intend to use this tool after testing it, please delete it as it is a pretty big file. thanks for everything stardance...
|
1793735481.819169
|
1793821881.819169
|
|
9461
|
ConvoComplete- Kusum by @shauryaladdha | Stardance
|
shauryaladdha
|
1
|
14.04
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T05:44:33Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "very tough, to get into playstore and running app in background", "repo": "https://github.com/itsshera/ConvoComplete", "demo": "https://play.google.com/store/apps/details?id=com.kusum.app&hl=en_IN"}]...
|
[{"post_id": 14290, "ts": "202 [{"post_id": 14290, "ts": "2026-06-23T10:53:02Z", "hours": 3.0414, "text": "ConvoComplete Devlog Overview ConvoComplete is being developed as an AI-powered call intelligence tool. The main idea is to convert phone calls into transcripts, summaries, tasks, and follow-ups. The project focuses on helping teams save time after calls and avoid missing important next steps. Problem Business calls often contain important information, but most of it is not stored in a useful format. Common problems: Teams forget important follow-ups Managers cannot review every call manually Tasks discussed on calls are not always written down CRM notes are often incomplete Important decisions are lost inside long recordings Sales and support teams waste time writing manual summaries Solution ConvoComplete solves this by automatically processing calls and converting them into structured outputs. The system should be able to: Accept a call recording or audio file Convert speech to text Summarize the conversation Extract action items Identify deadlines and follow-ups Make the output easy to review and share Development Goals Goal 1: Build the Basic Call Processing Flow The first goal is to create a working flow where a user can provide call audio and get a transcript. Goal 2: Add AI Summaries After transcription, the next step is to generate a short and useful summary of the call. Goal 3: Extract Action Items The system should identify tasks from the conversation and present them clearly. Example: Task: Send proposal to customer Owner: Sales executive Due: Tomorrow Status: Pending Goal 4: Make the Output Useful for Teams The output should not just be a plain summary. It should help teams take action. Useful outputs may include: Call summary Customer needs Objections Follow-up tasks Deadlines Next meeting details CRM-ready notes Goal 5: Add Integrations Later Future versions can connect with: Google Calendar CRM tools WhatsApp Email Phone systems Task managers Current Progress Project idea defined Core use case identified README structure created Product description written Roadmap created Next Steps Finalize the tech stack Create project folder structure Build audio upload or call input flow Add speech-to-text processing Add AI summary generation Add action item extraction Create a simple dashboard Test with real call examples Challenges Audio Quality Call recordings may have background noise, multiple speakers, or unclear speech. The transcription system needs to handle this as well as possible. Accurate Task Extraction The AI must correctly understand what is actually a task and avoid creating fake or unnecessary action items. Business Usefulness The output should be simple, clear, and useful for real teams. The goal is not just to generate text, but to create something people can act on. Learnings Calls contain a lot of hidden business value Summaries are useful, but action items are more important The product should focus on saving time and preventing missed follow-ups The best output is structured, short, and easy to share Future Improvements Speaker identification Sentiment analysis CRM sync Calendar event creation WhatsApp summary delivery Searchable call history Team dashboard Role-based access Customer-wise call timeline"}, {"post_id": 9082, "ts": "2026-06-15T05:37:02Z", "hours": 3.8783, "text": "going well, play store closed testing"}, {"post_id": 3354, "ts": "2026-06-06T07:35:17Z", "hours": 6.6417, "text": "App is made beta 10"}]...
|
Title: ConvoComplete- Kusum by @shauryaladdha | St Title: ConvoComplete- Kusum by @shauryaladdha | Stardance
Devlogs:
App is made beta 10
going well, play store closed testing
ConvoComplete Devlog Overview ConvoComplete is being developed as an AI-powered call intelligence tool. The main idea is to convert phone calls into transcripts, summaries, tasks, and follow-ups. The project focuses on helping teams save time after calls and avoid missing important next steps. Problem Business calls often contain important information, but most of it is not stored in a useful format. Common problems: Teams forget important follow-ups Managers cannot review every call manually Tasks discussed on calls are not always written down CRM notes are often incomplete Important decisions are lost inside long recordings Sales and support teams waste time writing manual summaries Solution ConvoComplete solves this by automatically processing calls and converting them into structured outputs. The system should be able to: Accept a call recording or audio file Convert speech to text Summarize the conversation Extract action items Identify deadlines and follow-ups Make the output easy to review and share Development Goals Goal 1: Build the Basic Call Processing Flow The first goal is to create a working flow where a user can provide call audio and get a transcript. Goal 2: Add AI Summaries After transcription, the next step is to generate a short and useful summary of the call. Goal 3: Extract Action Items The system should identify tasks from the conversation and present them clearly. Example: Task: Send proposal to customer Owner: Sales executive Due: Tomorrow Status: Pending Goal 4: Make the Output Useful for Teams The output should not just be a plain summary. It should help teams take action. Useful outputs may include: Call summary Customer needs Objections Follow-up tasks Deadlines Next meeting details CRM-ready notes Goal 5: Add Integrations Later Future versions can connect with: Google Calendar CRM tools WhatsApp Email Phone systems Task managers Current Progress Project idea defined Core use case identified README structure created Product description written Roadmap created Next Steps Finalize the tech stack Create project folder structure Build audio upload or call input flow Add speech-to-text processing Add AI summary generation Add action item extraction Create a simple dashboard Test with real call examples Challenges Audio Quality Call recordings may have background noise, multiple speakers, or unclear speech. The transcription system needs to handle this as well as possible. Accurate Task Extraction The AI must correctly understand what is actually a task and avoid creating fake or unnecessary action items. Business Usefulness The output should be simple, clear, and useful for real teams. The goal is not just to generate text, but to create something people can act on. Learnings Calls contain a lot of hidden business value Summaries are useful, but action items are more important The product should focus on saving time and preventing missed follow-ups The best output is structured, short, and easy to share Future Improvements Speaker identification Sentiment analysis CRM sync Calendar event creation WhatsApp summary delivery Searchable call history Team dashboard Role-based access Customer-wise call timeline
Ships:
very tough, to get into playstore and running app in background...
|
1793735483.0227103
|
1793821883.0227103
|
|
67849
|
My awesome macropad! by @dzry | Stardance
|
dzry
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @dzry | Stardance
|
1793735484.1720653
|
1794340284.1720653
|
|
11826
|
Board Game Bank Teller by @ackl510 | Stardance
|
ackl510
|
1
|
3.81
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T01:40:09Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made a simple monopoly digital bank for 4 players with simple / commands similar to Minecraft.", "repo": "https://github.com/ackl510/Monopoly-Teller-System", "demo": "https://trinket.io/python/1e81d46a9abc?outputOnly=true&showInstructions=true"}]...
|
[{"post_id": 14735, "ts": "202 [{"post_id": 14735, "ts": "2026-06-23T22:56:33Z", "hours": 0.9461, "text": "Added Custom Player names and bankruptcy"}, {"post_id": 8738, "ts": "2026-06-14T15:15:51Z", "hours": 0.8617, "text": "Introduced an introduction and let users select player amount. Custom player names coming in next installment"}, {"post_id": 7207, "ts": "2026-06-12T01:12:03Z", "hours": 0.7572, "text": "Added /roll, /transfer, /help and other commands"}, {"post_id": 6436, "ts": "2026-06-10T20:25:29Z", "hours": 0.9183, "text": "Made basic commands such as take and give money"}]...
|
Title: Board Game Bank Teller by @ackl510 | Starda Title: Board Game Bank Teller by @ackl510 | Stardance
Devlogs:
Made basic commands such as take and give money
Added /roll, /transfer, /help and other commands
Introduced an introduction and let users select player amount. Custom player names coming in next installment
Added Custom Player names and bankruptcy
Ships:
I have made a simple monopoly digital bank for 4 players with simple / commands similar to Minecraft....
|
1793735485.0444021
|
1793821885.0444021
|
|
67850
|
My very own WebOS by @hanimalik | Stardance
|
hanimalik
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @hanimalik | Stardance
|
1793735486.1914005
|
1794340286.1914005
|
|
26103
|
Tractor (Card Game) AI by @GoldenElf | Stardance
|
GoldenElf
|
1
|
48.4
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T07:13:14Z", "hours": 38.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Tractor (Card Game) I created this desktop game because I wanted to have a simple game I could train an AI on and learn about machine learning techniques. I’ve finally finished the full game implementation that you can download and play right now. Now I can begin training a machine learning model you’ll eventually be able to play against. About Tractor Tractor (AKA Upgrade/Shengji/升级) is a popular Chinese trick-taking card game where players score by capturing specific cards rather than winning tricks. Certain plays can also consist of multiple cards, making strategy more complex. About This Project This project is a playable desktop implementation of Tractor supporting Windows, macOS, and Linux. The long-term goal is to train a machine learning model to play Tractor. The initial plan was just to make a minimal working implementation of Tractor that an AI could interact with, but it evolved to become a fully playable desktop game with an interactive GUI. One thing that was surprisingly difficult to implement was handling Tractors and consecutive pairs. I had to redesign ho plays were represented to support plays with more card amount possibilities. I also had to implement helper functions for filtering and sorting cards based on specific criteria, making it much easier to handle the many edge cases involving consecutive pairs. Future Plans Now that the core game is complete and playable, my next goal will be to create a machine learning model that learns to play Tractor through self-play. It’ll also be an opportunity to explore reinforcement learning using frameworks like PyTorch on a much more complex problem than the small introductory projects I’ve done before.", "repo": "https://github.com/GoldenElf58/tractor-ai", "demo": "https://github.com/GoldenElf58/tractor-ai/releases/latest"}]...
|
[{"post_id": 41687, "ts": "202 [{"post_id": 41687, "ts": "2026-08-06T01:59:05Z", "hours": 10.3986, "text": "Devlog #05 - Beginning on the AI With the desktop game now complete, I started working on the machine learning side of the project. This update lays the groundwork for eventually training an AI to play Tractor. The latest version is available on the GitHub Releases page . AI Framework I set up the initial machine learning framework that future models will use for training and gameplay. While the AI isn’t making intelligent decisions yet, the project now has the base structure needed to begin testing different approaches. Bot Support The game now supports AI-controlled players. For now, they simply make random legal moves and are not in the main release, but this provides a baseline that can later be replaced with a trained model. Other Changes Added the initial training infrastructure. Refactored parts of the codebase to better support AI integration. Continued organizing the project for future machine learning development. Future Plans Create a basic hand-written bot for the AI to mimic. Train the first ML models to mimic the hand-made bot. Replace the random bot with the learned model. Explore self-play to improve the AI beyond imitation."}, {"post_id": 28141, "ts": "2026-07-14T07:43:48Z", "hours": 9.7647, "text": "Devlog #04 - GUI Improvements This update focuses on making Tractor fully playable, adding needed game screens and polishing the overall experience. Highlights include: Main menu Between-round summary Game over screen Improved pass-and-play support with hand hiding between turns Player name customization Resizable window Faster startup time Several bug fixes The latest version is now available on the GitHub Releases page . Better Pass-and-Play There is now a start turn button while playing that keeps the current player’s hand hidden until they are ready to begin. This makes local pass-and-play much more practical by preventing players from accidentally seeing each other’s cards. Game Flow At the end of each round, a round summary screen is now shown that includes the winner, team scores, level changes, trump information, and other round details. The game over screen is also shown at the end of the game to show the winner and the final levels of each team. Bug Fixes Fixed issues that prevented GUI builds from launching correctly on some platforms Fixed bug with the determination of pair trick winners Fixed round transition issues Future Plans The long-term goal is still to train a machine learning model to play Tractor. Continue to improve the interface and gameplay experience."}, {"post_id": 26394, "ts": "2026-07-11T04:57:34Z", "hours": 7.1117, "text": "Devlog #03 - Implemented Tractors and Consecutive Pairs This update adds support for Tractors and Consecutive Pairs, labels players’ plays and bids with their names, and includes several bug fixes. Also, the project hasn’t shipped yet, but you can still download and try the latest version on the GitHub Releases page . Gameplay Improvements Players can now play Consecutive Pairs, including Tractors, which are pairs of cards in the same suit that are consecutive in power. This makes the game essentially* feature complete in terms of gameplay functionality. *Some rule sets also include throws. They are not currently panned because they significantly increase implementation complexity. GUI Improvements The players’ locations (relative to the active player) are labeled with their names (currently “Player 1”, “Player 2”, etc.). Plays containing more than two cards can now be shown (previously unneeded, but now necessary with the addition of Tractors and Consecutive Pairs). Offense and defense points are now displayed throughout the game. Bug Fixes Fixed the round leader not updating correctly. Fixed the trick leader not updating correctly. Fixed an issue where players were incorrectly forced to play a pair if they were out of the led suit when a pair was available and a pair was led. Fixed a miscalculation of the offense and defense points obtained in a round (also causing incorrect round transitions). Future Plans Add main menu. Show more information about the game. Ship the game once the above are done. Long term: Create an AI (using machine learning) to play against."}, {"post_id": 24682, "ts": "2026-07-08T13:04:31Z", "hours": 5.5608, "text": "Devlog #02 - Expanded Gameplay GUI This update makes the game now fully playable through the GUI and includes various bug fixes. The attached video shows the new GUI in action during a trick and a half of gameplay. Also, the project hasn’t shipped yet, but you can still download and try the latest version on the GitHub Releases page . GUI Improvements I expanded the GUI to work in all phases of the game, so you now no longer need the terminal to play. It also now displays information such as the: current bid trump suit and dominant rank cards played in the current trick other turn information Gameplay Improvements Added an Auto button during the drawing round that automatically passes a player’s turn if passing is their only legal move (similar to a previous terminal feature). Bug Fixes Fixed card corner transparency so the cards’ rounded corners render correctly. Fixed several move generation bugs. Future Plans Add main menu. Show more information about the game. Decide on game variant and implement tractors and complicated throws. Ship the game once it’s feature-complete. Long term: Create an AI (using machine learning) to play against."}, {"post_id": 23557, "ts": "2026-07-06T16:18:27Z", "hours": 6.7608, "text": "I implemented a card selection UI for players’ turns. I spent a lot of time polishing the hover and selection/deselection animations. The attached video shows game play of two tricks: the first with a pair lead and the second with a single-card lead. Next steps are to provide more information than just the players’ hands and to extend this functionality to the drawing/bidding and burying phases."}, {"post_id": 22374, "ts": "2026-07-04T20:18:14Z", "hours": 8.4214, "text": "Implemented the core Tractor game logic and a playable terminal UI. The game is functional, though not all edge cases have been tested yet and invalid input may still cause crashes. Wrote a README with installation and usage instructions. Set up a GitHub Actions workflow to automatically build and publish the Windows, macOS, and Linux executables."}]...
|
Title: Tractor (Card Game) AI by @GoldenElf | Star Title: Tractor (Card Game) AI by @GoldenElf | Stardance
Devlogs:
Implemented the core Tractor game logic and a playable terminal UI. The game is functional, though not all edge cases have been tested yet and invalid input may still cause crashes. Wrote a README with installation and usage instructions. Set up a GitHub Actions workflow to automatically build and publish the Windows, macOS, and Linux executables.
I implemented a card selection UI for players’ turns. I spent a lot of time polishing the hover and selection/deselection animations. The attached video shows game play of two tricks: the first with a pair lead and the second with a single-card lead. Next steps are to provide more information than just the players’ hands and to extend this functionality to the drawing/bidding and burying phases.
Devlog #02 - Expanded Gameplay GUI This update makes the game now fully playable through the GUI and includes various bug fixes. The attached video shows the new GUI in action during a trick and a half of gameplay. Also, the project hasn’t shipped yet, but you can still download and try the latest version on the GitHub Releases page . GUI Improvements I expanded the GUI to work in all phases of the game, so you now no longer need the terminal to play. It also now displays information such as the: current bid trump suit and dominant rank cards played in the current trick other turn information Gameplay Improvements Added an Auto button during the drawing round that automatically passes a player’s turn if passing is their only legal move (similar to a previous terminal feature). Bug Fixes Fixed card corner transparency so the cards’ rounded corners render correctly. Fixed several move generation bugs. Future Plans Add main menu. Show more information about the game. Decide on game variant and implement tractors and complicated throws. Ship the game once it’s feature-complete. Long term: Create an AI (using machine learning) to play against.
Devlog #03 - Implemented Tractors and Consecutive Pairs This update adds support for Tractors and Consecutive Pairs, labels players’ plays and bids with their names, and includes several bug fixes. Also, the project hasn’t shipped yet, but you can still download and try the latest version on the GitHub Releases page . Gameplay Improvements Players can now play Consecutive Pairs, including Tractors, which are pairs of cards in the same suit that are consecutive in power. This makes the game essentially* feature complete in terms of gameplay functionality. *Some rule sets also include throws. They are not currently panned because they significantly increase implementation complexity. GUI Improvements The players’ locations (relative to the active player) are labeled with their names (currently “Player 1”, “Player 2”, etc.). Plays containing more than two cards can now be shown (previously unneeded, but now necessary with the addition of Tractors and Consecutive Pairs). Offense and defense points are now displayed throughout the game. Bug Fixes Fixed the round leader not updating correctly. Fixed the trick leader not updating correctly. Fixed an issue where players were incorrectly forced to play a pair if they were out of the led suit when a pair was available and a pair was led. Fixed a miscalculation of the offense and defense points obtained in a round (also causing incorrect round transitions). Future Plans Add main menu. Show more information about the game. Ship the game once the above are done. Long term: Create an AI (using machine learning) to play against.
Devlog #04 - GUI Improvements This update focuses on making Tractor fully playable, adding needed game screens and polishing the overall experience. Highlights include: Main menu Between-round summary Game over screen Improved pass-and-play support with hand hiding between turns Player name customization Resizable window Faster startup time Several bug fixes The latest version is now available on the GitHub Releases page . Better Pass-and-Play There is now a start turn button while playing that keeps the current player’s hand hidden until they are ready to begin. This makes local pass-and-play much more practical by preventing players from accidentally seeing each other’s cards. Game Flow At the end of each round, a round summary screen is now shown that includes the winner, team scores, level changes, trump information, and other round details. The game over screen is also shown at the end of the game to show the winner and the final levels of each team. Bug Fixes Fixed issues that prevented GUI builds from launching correctly on some platforms Fixed bug with the determination of pair trick winners Fixed round transition issues Future Plans The long-term goal is still to train a machine learning model to play Tractor. Continue to improve the interface and gameplay experience.
Devlog #05 - Beginning on the AI With the desktop game now complete, I started working on the machine learning side of the project. This update lays the groundwork for eventually training an AI to play Tractor. The latest version is available on the GitHub Releases page . AI Framework I set up the initial machine learning framework that future models will use for training and gameplay. While the AI isn’t making intelligent decisions yet, the project now has the base structure needed to begin testing different approaches. Bot Support The game now supports AI-controlled players. For now, they simply make random legal moves and are not in the main release, but this provides a baseline that can later be replaced with a trained model. Other Changes Added the initial training infrastructure. Refactored parts of the codebase to better support AI integration. Continued organizing the project for future machine learning development. Future Plans Create a basic hand-written bot for the AI to mimic. Train the first ML models to mimic the hand-made bot. Replace the random bot with the learned model. Explore self-play to improve the AI beyond imitation.
Ships:
Tractor (Card Game) I created this desktop game because I wanted to have a simple game I could train an AI on and learn about machine learning techniques. I’ve finally finished the full game implementation that you can download and play right now. Now I can begin training a machine learning model you’ll eventually be able to play against. About Tractor Tractor (AKA Upgrade/Shengji/升级) is a popular Chinese trick-taking card game where players score by capturing specific cards rather than winning tricks. Certain plays can also consist of multiple cards, making strategy more complex. About This Project This project is a playable desktop implementation of Tractor supporting Windows, macOS, and Linux. The long-term goal is to train a machine learning model to play Tractor. The initial plan was just to make a minimal working implementation of Tractor that an AI could interact with, but it evolved to become a fully playable desktop game with an interactive GUI. One thing that was surprisingly difficult to implement was handling Tractors and consecutive pairs. I had to redesign ho plays were represented to support plays with more card amount possibilities. I also had to implement helper functions for filtering and sorting cards based on specific criteria, making it much easier to handle the many edge cases involving consecutive pairs. Future Plans Now that the core game is complete and playable, my next goal will be to create a machine learning model that learns to play Tractor through self-play. It’ll also be an opportunity to explore reinforcement learning using frameworks like PyTorch on a much more complex problem than the small introductory projects I’ve done before....
|
1793735487.0818295
|
1793821887.0818295
|
|
67852
|
KXR by @Kxrtik1315 | Stardance
|
Kxrtik1315
|
0
|
0.35
|
0
|
[]
|
[{"post_id": 76735, "ts": "202 [{"post_id": 76735, "ts": "2026-10-04T13:24:30Z", "hours": 0.3506, "text": "Making a Game first time! Using Godot Engine."}]...
|
Title: KXR by @Kxrtik1315 | Stardance
Devlogs:
Ma Title: KXR by @Kxrtik1315 | Stardance
Devlogs:
Making a Game first time! Using Godot Engine....
|
1793735488.2344532
|
1794340288.2344532
|
|
67853
|
FRENCH HELPER by @tanishqisfire | Stardance
|
tanishqisfire
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: FRENCH HELPER by @tanishqisfire | Stardance
|
1793735489.436706
|
1794340289.436706
|