|
2485
|
Pocket Universe by @theinfamousben | Stardance
|
theinfamousben
|
1
|
24.4
|
167
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-11T21:37:22Z", "hours": 23.0, "multiplier": 7.37, "payout": 167, "blessing": "neutral", "text": "Ship 1 Hey guys! I’m proud to announce I’ve developed Pocket Universe to an acceptable degree - with more updates coming soon! Why did I publish so soon? I have a few projects coming up (haven-related) and I want to get this out of the way so I don’t have any unfinished business. What is this project anyways? Pocket Universe is an Interactive Incremental game, which focuses on building up our modern universe from scratch, meaning from the fundamental Interactions up all the way to Galaxies and Nebulae What’s Included in the game right now? I have 4 Generator nodes and 7 Upgrade nodes, with the framework built to add more quickly. Was AI used in this Project? Yes. I used a lot of AI for troubleshooting my final build, as I’ve never built for MacOS and the web before. I also used AI to generate the placeholder SVG images, which will be replaced once the game reaches an alpha / open beta stage.", "repo": "https://github.com/theinfamousben/pocket-universe", "demo": "https://benmudev.itch.io/pocket-universe"}]...
|
[{"post_id": 76232, "ts": "202 [{"post_id": 76232, "ts": "2026-10-02T19:44:55Z", "hours": 1.3992, "text": "Devlog 15 - Trying to make it look a bit better Changes Added Modal Background Moved Menu and Energy Display into Top Bar ** AI was used to generate an SVG for the modal background and to fix the positioning of the elements ** Notes I originally only shipped this project because I thought The event was going to end soon and I was gonna be busy with Haven, but now since the event has been extended, I figured I can continue working on it :)"}, {"post_id": 66193, "ts": "2026-09-11T21:12:27Z", "hours": 2.2889, "text": "Devlog 14 - I am an IDIOT Changes Recreated all SOs to fix their attached script Build 5 broken and 1 working prototype Remove quarks as a resource Add menu with exit button Notes I am the definition of stupid. I had a problem for 2 WHOLE HOURS, and the fix was simply putting the script for the SOs into its own file. I am my own worst enemy, because of my own stupidity. Well, the more you know."}, {"post_id": 63204, "ts": "2026-09-06T21:30:11Z", "hours": 1.4367, "text": "Devlog 13 - double parents :3 Changes Allowed multiple parents per node Fixed false dragging assertions Notes I’m almost done with the base game mechanics, after that it’s just textures, sounds, and gameplay and then I’m ready for my first ship!"}, {"post_id": 63049, "ts": "2026-09-06T16:59:35Z", "hours": 0.9769, "text": "Devlog 12 Changes Added button colors for hover, select, and normal events made button in the Node Info modal uninteractible if node is locked fixed unlocked check for Upgrade Nodes"}, {"post_id": 62782, "ts": "2026-09-06T09:26:48Z", "hours": 0.6336, "text": "Devlog 11 - wow it finally looks okay Changes Added Icons Made NodeInfo Effect Text yellow AI was used to create the icons - This is temporary * until I figure out how to use Inkscape Notes Didn’t do a lot of programming, and unity refused to track my time for some reason, i did more like an hour, so its not a big deal"}, {"post_id": 61042, "ts": "2026-09-03T19:06:58Z", "hours": 1.1097, "text": "Devlog 10 Changes Added 6 Nodes Added 3 Generator Nodes Added 3 Upgrade Nodes Implemented handling of locked/invisible nodes Locked nodes now won’t be able to be bought unless the parent node is bought at least once Nodes behind a locked node are invisible until the locked node is bought Notes This is fun! I’m working on the game mechanics and I’m not running into a lot of issues. All my bugs (except one) were caught pretty early on, so its a win in my book :] That brings me to the one bug, the bane of my existence… For some bizarre reason, clicking on my nodes doesn’t buy them regularly. Sometimes i need to click many many times, and in the log it doesn’t even register that I clicked the nodes! Maybe it has something to do with the epsilon value which i use to distinguish between dragging the screen and selecting a node, which currently evaluates epsilon before the mouseup event, so maybe i can switch it around and it’ll work. maybe… other than that I’m pretty happy with how it’s turning out. I am a bit worried about making textures, though, since they all look like some weird corporate/ai generated logo because i’m not good enough at art / graphic design"}, {"post_id": 60388, "ts": "2026-09-02T18:05:02Z", "hours": 1.29, "text": "Devlog 9 Changes Completed Node Info Box Header Description for the Node Effect, basically what the node does Button to buy the node Added 2 Starting nodes 1 Generator Node named “Fundamental Interaction” 1 Upgrade Node named “Strong Nuclear Force” AI was used in this timespan for troubleshooting max width for the Node info box Notes This was honestly very fun to work on. I’ve really started putting in more time for this project since I’m now under pressure to get it done by the end of summer break (2 weeks :p) I had little trouble figuring everything out, and thanks to some wonderful help from my buddy github copilot i was never truly stuck on anything in this timespan"}, {"post_id": 58253, "ts": "2026-08-30T16:50:28Z", "hours": 1.5778, "text": "Devlog 8 Changes Added Node Info Text Box Shows Title, info about the node, and a button to buy with a set price Refactored Node Script Structure Notes I have been saved by the power of abstract classes! I unified the nodes into one abstract Node class, and made completion classes for Generators and Upgrades. Now it works by simply accessing the base Node class instead of not knowing whether the class is GeneratorNode or UpgradeNode. This makes it much easier. I am planning now to get some interesting node names from physics, like building up from quarks to larger structures, and i also am going to make some textures so the game doesnt look as shitty :p"}, {"post_id": 55915, "ts": "2026-08-27T19:56:21Z", "hours": 2.7292, "text": "Devlog 7.1 Changes Added Line Drawn to Parent node Will be used for hierarchical unlocking in the future Started work on the sidebar Notes Yeah, I’m a bit screwed. The current structure of my nodes is kind of weird; I have two types of nodes: Generators and Upgrades, each having two unique scripts. That’s good, because they have different logic. Thats not so good because they also share some logic. That’s horrific because they sometimes need to be accessed interchangeably. So here are a few things i could do: Merge both scripts into one, with an enum or something for the different node types Make a base which both nodes can inherit and use give up and cry option 3 sounds the easiest right now, my brain is so broken :’)"}, {"post_id": 17851, "ts": "2026-06-28T19:52:53Z", "hours": 3.2889, "text": "Devlog 7 Changes Added Modal Functionality Test Modal for debug purposes Alert Modal for important stuff (save on exit, etc.) Made HUD better for cross-device formatting Included a vertical layout group for all of the displayed currencies Notes It’s been a bit annoying, to say the least. First off, I wanted the Modals to be completely modular from the start, but I kept getting NullReference errors that didn’t make sense to me, so I had to make a script for each modal type and serialize the GameObjects and other stuff individually. It’s not as modular as I want, but what can ya do :p As for the HUD, I hope it works across devices, I sometimes code on my MacBook and sometimes on my PC, and the layout always breaks. I haven’t tested it yet, so I’ll be as surprised as you are if it doesn’t work."}, {"post_id": 13688, "ts": "2026-06-22T13:15:29Z", "hours": 0.8022, "text": "Devlog 6 Changes Added Generator Production cost: Each generator can now require a certain amount of every resource Notes This is a rather small update, but I’m still trying to get back on my feet from my hiatus. More updates coming soon though, I’ve got some more motivation *By the way: If there’s anyone that would like to do some texture designing, I would be more than happy to accept your work! Credit is, of course, guaranteed (I’m working on a credit screen anyways ;p)."}, {"post_id": 12119, "ts": "2026-06-19T19:58:45Z", "hours": 1.2919, "text": "Devlog 5 Changes Added code to allow for generation of different resource types Notes I have been on a long creative block, I can’t really seem to pick up my laptop and continue coding. It might have a bit to do with the fact that I was very busy the last week or so, so i didn’t have much energy and motivation left to program. I kind of forced myself to implement this feature which i half-assed earlier this week, it’s really simple but it’s a start at getting more motivated :) Next week I don’t have as many exams, pressure from DLRG tests and all that stuff, so I’ll have more time to code :]"}, {"post_id": 5092, "ts": "2026-06-08T19:37:39Z", "hours": 1.9783, "text": "Devlog 4 Changes Added functionality to pan & zoom around Moved the HUD (Energy Display) into a separate canvas Notes this took me longer than I’d like to admit, because Unity was being a bit finicky about my GameObject and refused to run its code for some reason. I used AI for troubleshooting the problem, but used none of its code."}, {"post_id": 3443, "ts": "2026-06-06T11:51:02Z", "hours": 1.1675, "text": "Devlog 3 I have continued my work on Pocket Universe, and have added following: Split Node Prefabs into Generator and Upgrade Nodes Added a NodeBoost Scriptable Object Worked on Node Visibility Logic One problem I have is that a lot of the code for Generator and Upgrade Nodes is identical. I would have made a Node Monobehavior script that handles both and individual sub-classes, but that is kind of messy, at least for now. We will see in about 5 Devlogs if I made the right choice :p"}, {"post_id": 3060, "ts": "2026-06-05T23:01:54Z", "hours": 1.4725, "text": "Devlog 2 - Added Nodes for generation These nodes are clickable by the player in order to buy Generators, which create Energy or other resources. They are comparable to the Cell to Singularity nodes. There will be Generator and Upgrade Nodes; Generator Nodes will be able to be bought multiple times, while upgrade nodes will only be able to be bought once."}, {"post_id": 2356, "ts": "2026-06-04T20:06:13Z", "hours": 0.6289, "text": "Starting work This is a really ambitious project I doubt I’ll be able to finish completely by October, but I’ll try to get as far as possible, so lets see :3"}]...
|
Title: Pocket Universe by @theinfamousben | Starda Title: Pocket Universe by @theinfamousben | Stardance
Devlogs:
Starting work This is a really ambitious project I doubt I’ll be able to finish completely by October, but I’ll try to get as far as possible, so lets see :3
Devlog 2 - Added Nodes for generation These nodes are clickable by the player in order to buy Generators, which create Energy or other resources. They are comparable to the Cell to Singularity nodes. There will be Generator and Upgrade Nodes; Generator Nodes will be able to be bought multiple times, while upgrade nodes will only be able to be bought once.
Devlog 3 I have continued my work on Pocket Universe, and have added following: Split Node Prefabs into Generator and Upgrade Nodes Added a NodeBoost Scriptable Object Worked on Node Visibility Logic One problem I have is that a lot of the code for Generator and Upgrade Nodes is identical. I would have made a Node Monobehavior script that handles both and individual sub-classes, but that is kind of messy, at least for now. We will see in about 5 Devlogs if I made the right choice :p
Devlog 4 Changes Added functionality to pan & zoom around Moved the HUD (Energy Display) into a separate canvas Notes this took me longer than I’d like to admit, because Unity was being a bit finicky about my GameObject and refused to run its code for some reason. I used AI for troubleshooting the problem, but used none of its code.
Devlog 5 Changes Added code to allow for generation of different resource types Notes I have been on a long creative block, I can’t really seem to pick up my laptop and continue coding. It might have a bit to do with the fact that I was very busy the last week or so, so i didn’t have much energy and motivation left to program. I kind of forced myself to implement this feature which i half-assed earlier this week, it’s really simple but it’s a start at getting more motivated :) Next week I don’t have as many exams, pressure from DLRG tests and all that stuff, so I’ll have more time to code :]
Devlog 6 Changes Added Generator Production cost: Each generator can now require a certain amount of every resource Notes This is a rather small update, but I’m still trying to get back on my feet from my hiatus. More updates coming soon though, I’ve got some more motivation *By the way: If there’s anyone that would like to do some texture designing, I would be more than happy to accept your work! Credit is, of course, guaranteed (I’m working on a credit screen anyways ;p).
Devlog 7 Changes Added Modal Functionality Test Modal for debug purposes Alert Modal for important stuff (save on exit, etc.) Made HUD better for cross-device formatting Included a vertical layout group for all of the displayed currencies Notes It’s been a bit annoying, to say the least. First off, I wanted the Modals to be completely modular from the start, but I kept getting NullReference errors that didn’t make sense to me, so I had to make a script for each modal type and serialize the GameObjects and other stuff individually. It’s not as modular as I want, but what can ya do :p As for the HUD, I hope it works across devices, I sometimes code on my MacBook and sometimes on my PC, and the layout always breaks. I haven’t tested it yet, so I’ll be as surprised as you are if it doesn’t work.
Devlog 7.1 Changes Added Line Drawn to Parent node Will be used for hierarchical unlocking in the future Started work on the sidebar Notes Yeah, I’m a bit screwed. The current structure of my nodes is kind of weird; I have two types of nodes: Generators and Upgrades, each having two unique scripts. That’s good, because they have different logic. Thats not so good because they also share some logic. That’s horrific because they sometimes need to be accessed interchangeably. So here are a few things i could do: Merge both scripts into one, with an enum or something for the different node types Make a base which both nodes can inherit and use give up and cry option 3 sounds the easiest right now, my brain is so broken :’)
Devlog 8 Changes Added Node Info Text Box Shows Title, info about the node, and a button to buy with a set price Refactored Node Script Structure Notes I have been saved by the power of abstract classes! I unified the nodes into one abstract Node class, and made completion classes for Generators and Upgrades. Now it works by simply accessing the base Node class instead of not knowing whether the class is GeneratorNode or UpgradeNode. This makes it much easier. I am planning now to get some interesting node names from physics, like building up from quarks to larger structures, and i also am going to make some textures so the game doesnt look as shitty :p
Devlog 9 Changes Completed Node Info Box Header Description for the Node Effect, basically what the node does Button to buy the node Added 2 Starting nodes 1 Generator Node named “Fundamental Interaction” 1 Upgrade Node named “Strong Nuclear Force” AI was used in this timespan for troubleshooting max width for the Node info box Notes This was honestly very fun to work on. I’ve really started putting in more time for this project since I’m now under pressure to get it done by the end of summer break (2 weeks :p) I had little trouble figuring everything out, and thanks to some wonderful help from my buddy github copilot i was never truly stuck on anything in this timespan
Devlog 10 Changes Added 6 Nodes Added 3 Generator Nodes Added 3 Upgrade Nodes Implemented handling of locked/invisible nodes Locked nodes now won’t be able to be bought unless the parent node is bought at least once Nodes behind a locked node are invisible until the locked node is bought Notes This is fun! I’m working on the game mechanics and I’m not running into a lot of issues. All my bugs (except one) were caught pretty early on, so its a win in my book :] That brings me to the one bug, the bane of my existence… For some bizarre reason, clicking on my nodes doesn’t buy them regularly. Sometimes i need to click many many times, and in the log it doesn’t even register that I clicked the nodes! Maybe it has something to do with the epsilon value which i use to distinguish between dragging the screen and selecting a node, which currently evaluates epsilon before the mouseup event, so maybe i can switch it around and it’ll work. maybe… other than that I’m pretty happy with how it’s turning out. I am a bit worried about making textures, though, since they all look like some weird corporate/ai generated logo because i’m not good enough at art / graphic design
Devlog 11 - wow it finally looks okay Changes Added Icons Made NodeInfo Effect Text yellow AI was used to create the icons - This is temporary * until I figure out how to use Inkscape Notes Didn’t do a lot of programming, and unity refused to track my time for some reason, i did more like an hour, so its not a big deal
Devlog 12 Changes Added button colors for hover, select, and normal events made button in the Node Info modal uninteractible if node is locked fixed unlocked check for Upgrade Nodes
Devlog 13 - double parents :3 Changes Allowed multiple parents per node Fixed false dragging assertions Notes I’m almost done with the base game mechanics, after that it’s just textures, sounds, and gameplay and then I’m ready for my first ship!
Devlog 14 - I am an IDIOT Changes Recreated all SOs to fix their attached script Build 5 broken and 1 working prototype Remove quarks as a resource Add menu with exit button Notes I am the definition of stupid. I had a problem for 2 WHOLE HOURS, and the fix was simply putting the script for the SOs into its own file. I am my own worst enemy, because of my own stupidity. Well, the more you know.
Devlog 15 - Trying to make it look a bit better Changes Added Modal Background Moved Menu and Energy Display into Top Bar ** AI was used to generate an SVG for the modal background and to fix the positioning of the elements ** Notes I originally only shipped this project because I thought The event was going to end soon and I was gonna be busy with Haven, but now since the event has been extended, I figured I can continue working on it :)
Ships:
Ship 1 Hey guys! I’m proud to announce I’ve developed Pocket Universe to an acceptable degree - with more updates coming soon! Why did I publish so soon? I have a few projects coming up (haven-related) and I want to get this out of the way so I don’t have any unfinished business. What is this project anyways? Pocket Universe is an Interactive Incremental game, which focuses on building up our modern universe from scratch, meaning from the fundamental Interactions up all the way to Galaxies and Nebulae What’s Included in the game right now? I have 4 Generator nodes and 7 Upgrade nodes, with the framework built to add more quickly. Was AI used in this Project? Yes. I used a lot of AI for troubleshooting my final build, as I’ve never built for MacOS and the web before. I also used AI to generate the placeholder SVG images, which will be replaced once the game reaches an alpha / open beta stage....
|
1793670752.859147
|
1793757152.859147
|
|
6376
|
Soundboword by @Axwabo | Stardance
|
Axwabo
|
1
|
69.0
|
995
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T23:05:38Z", "hours": 69.0, "multiplier": 14.42, "payout": 995, "blessing": "neutral", "text": "Soundboword is an actually usable desktop soundboard for (primarily) Linux and (with apparent support for) windows tired of other soundboards paywalling slots? not anymore! [insert Phil Swift Flex Tape meme, not sponsored] this is a .NET app built with Avalonia, SoundFlow, and YoutubeExplode you don’t need to install .NET, it’s compiled into a native binary the SoundFlow backend in use is based on miniaudio, so the app only supports mp3 and wav files download audio from YouTube (paste a link or search) for Linux, there is additional PipeWire support use the PipeWire wizard to create a virtual device named “Soundboword Microphone” which you can select in apps (e.g. Discord) after setting up the microphone, you can use the toggles in the bottom left to manage some node links (connect/disconnect audio nodes) Hear Sounds: plays the soundboard to your headphones Mic Sounds: plays the soundboard into the virtual microphone Mic Passthrough: connects the selected physical microphone to the virtual mic Hear Myself: connects your physical mic to your headphones, echoing what you say windows support is partial, macos support will not be provided global hotkeys should work out of the box on losedows the Linux version uses xdg-desktop-portal for global shortcuts if you have a Launchpad Mini MKII lying around, you can use it with this program :3", "repo": "https://github.com/Axwabo/Soundboword", "demo": "https://github.com/Axwabo/Soundboword/releases/tag/v1.0.0"}]...
|
[{"post_id": 62313, "ts": "202 [{"post_id": 62313, "ts": "2026-09-05T16:50:40Z", "hours": 3.6683, "text": "most likely the last devlog before i outgrow hackclub :’3 finalized the project, improved the CI workflow to bundle the program properly and include 3rd party licenses completed the README added a simple sound “editor” that lets you specify the following: start time: where to begin playback loop start: where to jump when restarting on loop (start of file by default) loop end: the point where loop triggers (end of file by default) made the sidebar (Sounds and Inputs views) consistent added icons to almost every window (Linux crashed because the PipeWire icon wasn’t in that project lol) message to future self: you need the leading slash in the Icon property (e.g. /Assets/sus.ico works but not Assets/sus.ico ) the video shows the new configure sound on trigger click feature, resembling the behavior of Voicemod implemented the missing “Auto Mic Passthrough” (as described in the README) the physical microphone preference is now saved fixed the hidden toggles taking up space on slopdows RowDefinitions don’t support binding, not even OnPlatform :( hopefully i don’t gotta fix anything, and it’s ready to ship"}, {"post_id": 60689, "ts": "2026-09-03T07:25:41Z", "hours": 9.5664, "text": "I’M GONNA TWEAK OUT 9 hours on slopdows bullshit… IT FINALLY WORKS (except not really because removing keybinds doesn’t..?) okay so i restored some of the styling, 0 padding in the Inputs listbox looked bad not sure what else i did that isn’t losedows suffering lmao sooooooo “win”dows is special if you hold Ctrl, it doesn’t call the TextInput event, meaning that i have to translate the Key enum the TextInput event isn’t flawless either, it can be ambiguous (e.g. hungarian layout: AltGr+J = í, AltGr+I = Í, Soundboword makes them uppercase) should i remove the automatic uppercase conversion? i spent a lot of time “debugging” (as in, having the CI build it, download the zip, transfer it to a slopdows machine, since native cross-compilation is not supported) the biggest headache was the shortcut list update handler… i negated the TryAdd call, which meant that the global hotkey would only get registered if the same gesture has been added to the dictionary already (therefore it would only work on subsequent binds) i spent way too much time figuring this out another oversight was the lack of Target assignment when you clicked ⚙️ on an input method, meaning that binding shortcuts did nothing idk why the entire panel is bold, gotta fix that hotkeys are temporarily removed while you’re assigning a shortcut however, as mentioned before, this doesn’t work xd i tried it on a slopdows laptop, and removing the A hotkey made the A key unusable until i closed Soundboword setting up CI wasn’t difficult, gotta make sure to separate rm commands and use -f so files not found don’t error using || doesn’t run the latter command if the first one succeeds, i should’ve known that"}, {"post_id": 41841, "ts": "2026-08-06T09:41:33Z", "hours": 2.6206, "text": "i did mostly polishing work during this time, now i can torture myself with windows global shortcuts gotta crash out first though cuz this wonderful website has 3 different markdown renderers somehow, and i’ve been using --- to make sections actually separate changed the TabControl to a TabStrip so i can use my on page switching logic most views are only created once now, which gives a slight performance boost i’d noticed that quickly switching between tabs while using TabControl lead to slight crackles in audio, that’s taken care of now oh and you can use the Tab key to navigate, cuz TabStrip can magically do that getting the lazy-ish loading was pretty funky though, UserControls are lazy by default so i had to hack around it to preload the views by setting IsVisible to false after the control loads (i think that’s what i did, i kinda forgor) fixed the YouTube stream loader, and added a local error display so you can immediately see if something went wrong made it so non-bound XDG-Desktop-Portal shortcuts are no longer detected removed the sound edit button for now, i would like to ship without having to figure all that out made StackPanel spacing mostly uniform using a style selector, though it looks pretty bad in device selectors general settings & logging settings are now saved and loaded added Rescan and Relink All buttons Rescan checks not found files again to locate them Relink All lets you pick directories to look for not found sounds by their filenames in the video, i unmounted the disk that had some files, then relinked sounds to locate it elsewhere"}, {"post_id": 36680, "ts": "2026-07-28T21:57:59Z", "hours": 4.8294, "text": "dev log about logging, crazy added logging in-app and also to files you can configure log levels, None disables file logging altogether i was looking around to find a simple file logger for Microsoft.Extensions.Logging, but i didn’t like it so i made my own, even simpler version took a bunch of attempts to make the architecture bearable, but it’s still kinda jank with the existence of LogPreferences.Instance (instead of using the service provider… but whatever, i make the rules :3) turns out that MultiBinding doesn’t work for a bool that hides the bottom bar (idk why), so i did some wiring by subscribing to PropertyChanged in the preferences and the log list only at the time of recording did i realize that the initial value isn’t set properly, so i gotta fix that tried to set PublishAot to true for all projects (so i don’t have to specify it in dotnet publish ), but that breaks the preview, so i had to revert the change unhandled UI exceptions are now written to the file the unobserved task exception event just… doesn’t seem to fire… i got rid of that tried to use SemaphoreSlim to make the exiting thread block until an in-progress write operation completes, but that probably caused a deadlock because the app wouldn’t close if a log entry happens to be in the middle of being written while you’re quitting, it gets cut in half, oh well fun fact: the ItemsRepeater Avalonia control exists on GitHub, even the docs describe how to use it, but it just didn’t show up for me despite using the latest Avalonia version this made me use a ListBox, which has selection (although you can’t see it because of the background of each log entry)"}, {"post_id": 34591, "ts": "2026-07-25T13:27:50Z", "hours": 4.0242, "text": "made settings sections with a whole lot of unnecessary abstractions for the funny [FromKeyedServices] when i could just access a static instance? absolutely yes!! i couldn’t figure out how to style the children of an ItemsControl externally, so i had to give it an ItemTemplate with a class (which would be unnecessary if i could style the thing) all that for a separator line… and padding… and margin… what if i just nuke this idea and simply have some spacing between the sections? i tried organizing classes into vertical slices architecture, but i gave up and only did it for the Linux project instead the using updates would’ve been funky + some global usings would become useless PipeWire the toggle list now no longer “flickers” on/off when refreshing devices, as i only set the link manager after PipeWire objects have been queried device lists and link toggles are now disabled when switching devices so the user doesn’t accidentally break the linking process added a button that refreshes links (in case things go wrong somehow) you can now select the physical microphone from the PipeWire list, and it will update links this preference isn’t saved to disk just yet in my last devlog i mentioned some issues, which have now been fixed: upon startup, the first two switches don’t work sometimes (race condition maybe?) turns out that i had forgotten to add a potentially valid node to the list after looping through all lines, so it just discarded the last entry certain links might not reconnect properly when switching the output device what did i do to fix that? i’m not sure anymore maybe it was a bit of delay? this one might be linked related to the former issue"}, {"post_id": 34223, "ts": "2026-07-24T19:01:37Z", "hours": 8.9867, "text": "PIPEWIRE WORKS!!1!1! spent almost all day adding PipeWire node linking support i was genuinely tweaking when i found out that the pw-cli create-link command doesn’t create a link… it does NOTHING wishful thinking to assume that i can simply tell PipeWire to connect nodes automatically now i have to query the ports, too, and connect those automatically; make sure to sort them, otherwise the channels might be mixed up ahaha (a0b498e7 khm khm) i spent plenty of the time debugging, the parser i wrote had some funky stuff how to use it there are 4 toggles you can activate, as shown in the video: sounds to primary output: this will play the soundboard’s audio in your headphones/primary speakers sounds to virtual mic: forwards soundboard audio to the virtual microphone, letting others (e.g. in a call or in a game) hear the sounds mic passthrough: connects your “real” microphone to the virtual microphone, allowing others to hear your voice when using the virtual mic hear myself: connects your real microphone to your primary output device more issues upon startup, the first two switches don’t work sometimes (race condition maybe?) certain links might not reconnect properly when switching the output device (it used to be worse when i queried links every time; it would connect only one port to the destination because the port ID was now assigned to something else) some miscellaneous fixes: fixed certain issues with xdg-desktop-portal shortcut assignments removed the upload date from YouTube video views fixed the NativeAOT build (an attribute was missing that let the ServiceProvider know not to strip view & viewmodel constructors) added a DataToggle control that inherits from ToggleSwitch : clicking on it doesn’t toggle it automatically, the binding controls the state"}, {"post_id": 32372, "ts": "2026-07-21T14:38:36Z", "hours": 6.5217, "text": "FINALLY figured out how to interface with xdg-desktop-portal, global shortcuts now work on Linux!!! (with a caveat ofc) subsequent bind requests to the same action will just be ignored by the portal, even if you closed the dialog without binding any shortcuts you should still be abe to bind them in System Settings props to Pinta for the example on how to do this (the DBus flow kinda sucks ngl) making this was partially possible because Avalonia updated to the latest Tmds.DBus version adjusted the YouTube downloader layout: removed the description in favor of a stream selector that also got rid of the upload date, oops added a dummy ✏️ button to sounds (basic editor coming soon) i don’t even want to think about how i’ll render waveforms without making the system go kaboom also added a number input for volume, letting users type in the desired percentage Avalonia magically handles the percentage conversion, i didn’t have to make a converter that multiplies the input by 0.01 made pages dynamic, fixing the inconsistent layout this will make it easier to add platform-specific tabs instead of having to dump everything into settings TabStrip just didn’t work properly, so i’ll stick with the TabControl (which doesn’t have… tab… focus…) OtherSoundInteraction now lets you mute, pause or stop other sounds when a new playback is triggered adopted Injectio so i can slap a [RegisterSingleton] attribute on each class i want in dependency injection without having to go to a different place to add a statement the “Stop All Instances” button is now replaced by the “Relink” button for files that were not found you can now drag-and-drop sounds into the board from the file manager"}, {"post_id": 9155, "ts": "2026-06-15T10:26:57Z", "hours": 6.5614, "text": "Did a bit of refactoring to accomodate for later NativeAOT support: Each view & viewmodel has to be registered as a service Moved to source-generated JSON handling Hopefully, NativeAOT will make the app noticeably faster when I publish the project Added global usings, and split up the project for better platform-specific service organization Fixed the delete button not stopping the sound (how did I manage to fail that??) Replaced the loop toggle with an Assign Shortcut button for quick access I think the latter will be used more often, but having the loop toggle update two buttons at once was really cool Sounds can now be added from YouTube; they are cached for fast access (how else would it work xd) The window is not a dialog, so you can still interact with the soundboard while waiting for download(s) (Idk if dialogs prevent interactions on some desktop environments tbh) This is not the final layout, but it looks decent for now: clicking on a video (left side) takes you to the details page (right side) in the same window Fun fact: pasting a youtube link automatically opens the video view, letting you download it even while the details are loading (will have to fix that up a little)"}, {"post_id": 7556, "ts": "2026-06-12T17:03:41Z", "hours": 5.6711, "text": "More (almost zero) progress on global shortcuts: I’ve figured out the object path & destination from the Kotlin library zugaldia/stargate , but xdg-desktop-portal just crashes now upon calling CreateSession Nothing usable yet Added a devices page to select the output device I tried to implement device switching by creating a separate Mixer, but SoundFlow already has functionality for that, so it became much simpler Refactored code to use the new SoundFlowDeviceManager A “Stop All Sounds” shortcut can now be assigned to each input when clicking the gear icon next to it Fixed shortcut assignment not working after switching pages Editing context is reopened on page change The SelectionChanged event fired for every child control, not just the TabControl -> I now check for the source of the event Attempted to add consistent text alignment in tab headers, that turned out to be stupid, so I just added a space after the Playbacks emoji Removed the “Raise Maximum Volume” (a 0-150% range makes more sense imo) Adjusted buttons in the sound editing view, this is not yet final On the image you can see a pipewire graph I created, this is similar to how I want it to work A sink for soundboard output which can be forwarded to the primary output device (e.g. headphones) A mixer virtual device (discord doesn’t support sinks) that combines the microphone input and the soundboard sink, acting as a virtual mic which can be selected in apps From a bit of testing, it turns out that connecting a sink to the primary output device produces some annoying popping, so I’ll probably just link/unlink the app’s playback to/from the primary output device, too"}, {"post_id": 6330, "ts": "2026-06-10T17:29:02Z", "hours": 4.1664, "text": "Added pages & tabs to better separate UI Activated inputs are now saved and loaded Sound state is now displayed better, it includes missing file detection (exceptions are not yet handled) Using a MultiBinding and an IMultiValueConverter with an enum didn’t work for some reason New page: playbacks It shows all sounds, their current time Will need a redesign Pro tip: don’t call Dispatcher.Post in a method you called Dispatcher.Post in (it will keep updating the UI but prevents user input, you can’t even close the window normally) Did a bit of refactoring: AudioManager is now a service Removed the Host service, the desktop lifetime and the TopLevel will be injected Added an overlay when a file dialog is open (because unlike windows, not all OSes/desktop environments prevent interactions in this situation)"}, {"post_id": 5129, "ts": "2026-06-08T20:23:24Z", "hours": 5.0069, "text": "Implemented input handling for the Launchpad Mini, now I’ll be able to press pads to play sounds Creating the shortcuts system took a few iterations, I wasn’t happy with the code I wrote Shortcuts can be removed even when the input method isn’t active, which wasn’t possible in an earlier iteration Also implemented settings saving when the app exits"}, {"post_id": 2246, "ts": "2026-06-04T17:06:50Z", "hours": 5.5297, "text": "Added a proper UI for triggering sounds with modes similar to that of voicemod (start -> stop, start -> restart, play -> pause, duplicate) I played around with 2 rows below the big button but that seemed to take up too much space, so I moved them to the sound editor (which isn’t fully functional yet) On the right side you can see input methods, which will include global shortcuts later (DBus is confusing af, the win32 api might actually be easier to work with 💀) (Yes, I’ve half-made a global keyboard handler for windows previously) Emojis are fairly expressive imo, but there are tooltips that describe what each button does The layout definitely needs improvements, but it’s something ig Also implemented loading sounds on startup, as well as saving when a new sound is added"}, {"post_id": 1536, "ts": "2026-06-03T16:49:22Z", "hours": 1.8456, "text": "Created the very base of the project with Avalonia and SoundFlow, sound playback works Spent a bunch of time trying to figure out the DBus interface for XDG global shortcuts (Linux part of keybinds): Somehow I grabbed the impl xml, not the one i needed It still doesn’t work, gonna need to debug it later I was trying to write abysmal code based on what Avalonia has: https://github.com/AvaloniaUI/Avalonia/blob/12.0.4/src/Avalonia.FreeDesktop/DBusSystemDialog.cs The source generator used in the latest Avalonia release is a different source generator from what i saw on master, that caused a bit of a headache"}]...
|
Title: Soundboword by @Axwabo | Stardance
Devlogs Title: Soundboword by @Axwabo | Stardance
Devlogs:
Created the very base of the project with Avalonia and SoundFlow, sound playback works Spent a bunch of time trying to figure out the DBus interface for XDG global shortcuts (Linux part of keybinds): Somehow I grabbed the impl xml, not the one i needed It still doesn’t work, gonna need to debug it later I was trying to write abysmal code based on what Avalonia has: https://github.com/AvaloniaUI/Avalonia/blob/12.0.4/src/Avalonia.FreeDesktop/DBusSystemDialog.cs The source generator used in the latest Avalonia release is a different source generator from what i saw on master, that caused a bit of a headache
Added a proper UI for triggering sounds with modes similar to that of voicemod (start -> stop, start -> restart, play -> pause, duplicate) I played around with 2 rows below the big button but that seemed to take up too much space, so I moved them to the sound editor (which isn’t fully functional yet) On the right side you can see input methods, which will include global shortcuts later (DBus is confusing af, the win32 api might actually be easier to work with 💀) (Yes, I’ve half-made a global keyboard handler for windows previously) Emojis are fairly expressive imo, but there are tooltips that describe what each button does The layout definitely needs improvements, but it’s something ig Also implemented loading sounds on startup, as well as saving when a new sound is added
Implemented input handling for the Launchpad Mini, now I’ll be able to press pads to play sounds Creating the shortcuts system took a few iterations, I wasn’t happy with the code I wrote Shortcuts can be removed even when the input method isn’t active, which wasn’t possible in an earlier iteration Also implemented settings saving when the app exits
Added pages & tabs to better separate UI Activated inputs are now saved and loaded Sound state is now displayed better, it includes missing file detection (exceptions are not yet handled) Using a MultiBinding and an IMultiValueConverter with an enum didn’t work for some reason New page: playbacks It shows all sounds, their current time Will need a redesign Pro tip: don’t call Dispatcher.Post in a method you called Dispatcher.Post in (it will keep updating the UI but prevents user input, you can’t even close the window normally) Did a bit of refactoring: AudioManager is now a service Removed the Host service, the desktop lifetime and the TopLevel will be injected Added an overlay when a file dialog is open (because unlike windows, not all OSes/desktop environments prevent interactions in this situation)
More (almost zero) progress on global shortcuts: I’ve figured out the object path & destination from the Kotlin library zugaldia/stargate , but xdg-desktop-portal just crashes now upon calling CreateSession Nothing usable yet Added a devices page to select the output device I tried to implement device switching by creating a separate Mixer, but SoundFlow already has functionality for that, so it became much simpler Refactored code to use the new SoundFlowDeviceManager A “Stop All Sounds” shortcut can now be assigned to each input when clicking the gear icon next to it Fixed shortcut assignment not working after switching pages Editing context is reopened on page change The SelectionChanged event fired for every child control, not just the TabControl -> I now check for the source of the event Attempted to add consistent text alignment in tab headers, that turned out to be stupid, so I just added a space after the Playbacks emoji Removed the “Raise Maximum Volume” (a 0-150% range makes more sense imo) Adjusted buttons in the sound editing view, this is not yet final On the image you can see a pipewire graph I created, this is similar to how I want it to work A sink for soundboard output which can be forwarded to the primary output device (e.g. headphones) A mixer virtual device (discord doesn’t support sinks) that combines the microphone input and the soundboard sink, acting as a virtual mic which can be selected in apps From a bit of testing, it turns out that connecting a sink to the primary output device produces some annoying popping, so I’ll probably just link/unlink the app’s playback to/from the primary output device, too
Did a bit of refactoring to accomodate for later NativeAOT support: Each view & viewmodel has to be registered as a service Moved to source-generated JSON handling Hopefully, NativeAOT will make the app noticeably faster when I publish the project Added global usings, and split up the project for better platform-specific service organization Fixed the delete button not stopping the sound (how did I manage to fail that??) Replaced the loop toggle with an Assign Shortcut button for quick access I think the latter will be used more often, but having the loop toggle update two buttons at once was really cool Sounds can now be added from YouTube; they are cached for fast access (how else would it work xd) The window is not a dialog, so you can still interact with the soundboard while waiting for download(s) (Idk if dialogs prevent interactions on some desktop environments tbh) This is not the final layout, but it looks decent for now: clicking on a video (left side) takes you to the details page (right side) in the same window Fun fact: pasting a youtube link automatically opens the video view, letting you download it even while the details are loading (will have to fix that up a little)
FINALLY figured out how to interface with xdg-desktop-portal, global shortcuts now work on Linux!!! (with a caveat ofc) subsequent bind requests to the same action will just be ignored by the portal, even if you closed the dialog without binding any shortcuts you should still be abe to bind them in System Settings props to Pinta for the example on how to do this (the DBus flow kinda sucks ngl) making this was partially possible because Avalonia updated to the latest Tmds.DBus version adjusted the YouTube downloader layout: removed the description in favor of a stream selector that also got rid of the upload date, oops added a dummy ✏️ button to sounds (basic editor coming soon) i don’t even want to think about how i’ll render waveforms without making the system go kaboom also added a number input for volume, letting users type in the desired percentage Avalonia magically handles the percentage conversion, i didn’t have to make a converter that multiplies the input by 0.01 made pages dynamic, fixing the inconsistent layout this will make it easier to add platform-specific tabs instead of having to dump everything into settings TabStrip just didn’t work properly, so i’ll stick with the TabControl (which doesn’t have… tab… focus…) OtherSoundInteraction now lets you mute, pause or stop other sounds when a new playback is triggered adopted Injectio so i can slap a [RegisterSingleton] attribute on each class i want in dependency injection without having to go to a different place to add a statement the “Stop All Instances” button is now replaced by the “Relink” button for files that were not found you can now drag-and-drop sounds into the board from the file manager
PIPEWIRE WORKS!!1!1! spent almost all day adding PipeWire node linking support i was genuinely tweaking when i found out that the pw-cli create-link command doesn’t create a link… it does NOTHING wishful thinking to assume that i can simply tell PipeWire to connect nodes automatically now i have to query the ports, too, and connect those automatically; make sure to sort them, otherwise the channels might be mixed up ahaha (a0b498e7 khm khm) i spent plenty of the time debugging, the parser i wrote had some funky stuff how to use it there are 4 toggles you can activate, as shown in the video: sounds to primary output: this will play the soundboard’s audio in your headphones/primary speakers sounds to virtual mic: forwards soundboard audio to the virtual microphone, letting others (e.g. in a call or in a game) hear the sounds mic passthrough: connects your “real” microphone to the virtual microphone, allowing others to hear your voice when using the virtual mic hear myself: connects your real microphone to your primary output device more issues upon startup, the first two switches don’t work sometimes (race condition maybe?) certain links might not reconnect properly when switching the output device (it used to be worse when i queried links every time; it would connect only one port to the destination because the port ID was now assigned to something else) some miscellaneous fixes: fixed certain issues with xdg-desktop-portal shortcut assignments removed the upload date from YouTube video views fixed the NativeAOT build (an attribute was missing that let the ServiceProvider know not to strip view & viewmodel constructors) added a DataToggle control that inherits from ToggleSwitch : clicking on it doesn’t toggle it automatically, the binding controls the state
made settings sections with a whole lot of unnecessary abstractions for the funny [FromKeyedServices] when i could just access a static instance? absolutely yes!! i couldn’t figure out how to style the children of an ItemsControl externally, so i had to give it an ItemTemplate with a class (which would be unnecessary if i could style the thing) all that for a separator line… and padding… and margin… what if i just nuke this idea and simply have some spacing between the sections? i tried organizing classes into vertical slices architecture, but i gave up and only did it for the Linux project instead the using updates would’ve been funky + some global usings would become useless PipeWire the toggle list now no longer “flickers” on/off when refreshing devices, as i only set the link manager after PipeWire objects have been queried device lists and link toggles are now disabled when switching devices so the user doesn’t accidentally break the linking process added a button that refreshes links (in case things go wrong somehow) you can now select the physical microphone from the PipeWire list, and it will update links this preference isn’t saved to disk just yet in my last devlog i mentioned some issues, which have now been fixed: upon startup, the first two switches don’t work sometimes (race condition maybe?) turns out that i had forgotten to add a potentially valid node to the list after looping through all lines, so it just discarded the last entry certain links might not reconnect properly when switching the output device what did i do to fix that? i’m not sure anymore maybe it was a bit of delay? this one might be linked related to the former issue
dev log about logging, crazy added logging in-app and also to files you can configure log levels, None disables file logging altogether i was looking around to find a simple file logger for Microsoft.Extensions.Logging, but i didn’t like it so i made my own, even simpler version took a bunch of attempts to make the architecture bearable, but it’s still kinda jank with the existence of LogPreferences.Instance (instead of using the service provider… but whatever, i make the rules :3) turns out that MultiBinding doesn’t work for a bool that hides the bottom bar (idk why), so i did some wiring by subscribing to PropertyChanged in the preferences and the log list only at the time of recording did i realize that the initial value isn’t set properly, so i gotta fix that tried to set PublishAot to true for all projects (so i don’t have to specify it in dotnet publish ), but that breaks the preview, so i had to revert the change unhandled UI exceptions are now written to the file the unobserved task exception event just… doesn’t seem to fire… i got rid of that tried to use SemaphoreSlim to make the exiting thread block until an in-progress write operation completes, but that probably caused a deadlock because the app wouldn’t close if a log entry happens to be in the middle of being written while you’re quitting, it gets cut in half, oh well fun fact: the ItemsRepeater Avalonia control exists on GitHub, even the docs describe how to use it, but it just didn’t show up for me despite using the latest Avalonia version this made me use a ListBox, which has selection (although you can’t see it because of the background of each log entry)
i did mostly polishing work during this time, now i can torture myself with windows global shortcuts gotta crash out first though cuz this wonderful website has 3 different markdown renderers somehow, and i’ve been using --- to make sections actually separate changed the TabControl to a TabStrip so i can use my on page switching logic most views are only created once now, which gives a slight performance boost i’d noticed that quickly switching between tabs while using TabControl lead to slight crackles in audio, that’s taken care of now oh and you can use the Tab key to navigate, cuz TabStrip can magically do that getting the lazy-ish loading was pretty funky though, UserControls are lazy by default so i had to hack around it to preload the views by setting IsVisible to false after the control loads (i think that’s what i did, i kinda forgor) fixed the YouTube stream loader, and added a local error display so you can immediately see if something went wrong made it so non-bound XDG-Desktop-Portal shortcuts are no longer detected removed the sound edit button for now, i would like to ship without having to figure all that out made StackPanel spacing mostly uniform using a style selector, though it looks pretty bad in device selectors general settings & logging settings are now saved and loaded added Rescan and Relink All buttons Rescan checks not found files again to locate them Relink All lets you pick directories to look for not found sounds by their filenames in the video, i unmounted the disk that had some files, then relinked sounds to locate it elsewhere
I’M GONNA TWEAK OUT 9 hours on slopdows bullshit… IT FINALLY WORKS (except not really because removing keybinds doesn’t..?) okay so i restored some of the styling, 0 padding in the Inputs listbox looked bad not sure what else i did that isn’t losedows suffering lmao sooooooo “win”dows is special if you hold Ctrl, it doesn’t call the TextInput event, meaning that i have to translate the Key enum the TextInput event isn’t flawless either, it can be ambiguous (e.g. hungarian layout: AltGr+J = í, AltGr+I = Í, Soundboword makes them uppercase) should i remove the automatic uppercase conversion? i spent a lot of time “debugging” (as in, having the CI build it, download the zip, transfer it to a slopdows machine, since native cross-compilation is not supported) the biggest headache was the shortcut list update handler… i negated the TryAdd call, which meant that the global hotkey would only get registered if the same gesture has been added to the dictionary already (therefore it would only work on subsequent binds) i spent way too much time figuring this out another oversight was the lack of Target assignment when you clicked ⚙️ on an input method, meaning that binding shortcuts did nothing idk why the entire panel is bold, gotta fix that hotkeys are temporarily removed while you’re assigning a shortcut however, as mentioned before, this doesn’t work xd i tried it on a slopdows laptop, and removing the A hotkey made the A key unusable until i closed Soundboword setting up CI wasn’t difficult, gotta make sure to separate rm commands and use -f so files not found don’t error using || doesn’t run the latter command if the first one succeeds, i should’ve known that
most likely the last devlog before i outgrow hackclub :’3 finalized the project, improved the CI workflow to bundle the program properly and include 3rd party licenses completed the README added a simple sound “editor” that lets you specify the following: start time: where to begin playback loop start: where to jump when restarting on loop (start of file by default) loop end: the point where loop triggers (end of file by default) made the sidebar (Sounds and Inputs views) consistent added icons to almost every window (Linux crashed because the PipeWire icon wasn’t in that project lol) message to future self: you need the leading slash in the Icon property (e.g. /Assets/sus.ico works but not Assets/sus.ico ) the video shows the new configure sound on trigger click feature, resembling the behavior of Voicemod implemented the missing “Auto Mic Passthrough” (as described in the README) the physical microphone preference is now saved fixed the hidden toggles taking up space on slopdows RowDefinitions don’t support binding, not even OnPlatform :( hopefully i don’t gotta fix anything, and it’s ready to ship
Ships:
Soundboword is an actually usable desktop soundboard for (primarily) Linux and (with apparent support for) windows tired of other soundboards paywalling slots? not anymore! [insert Phil Swift Flex Tape meme, not sponsored] this is a .NET app built with Avalonia, SoundFlow, and YoutubeExplode you don’t need to install .NET, it’s compiled into a native binary the SoundFlow backend in use is based on miniaudio, so the app only supports mp3 and wav files download audio from YouTube (paste a link or search) for Linux, there is additional PipeWire support use the PipeWire wizard to create a virtual device named “Soundboword Microphone” which you can select in apps (e.g. Discord) after setting up the microphone, you can use the toggles in the bottom left to manage some node links (connect/disconnect audio nodes) Hear Sounds: plays the soundboard to your headphones Mic Sounds: plays the soundboard into the virtual microphone Mic Passthrough: connects the selected physical microphone to the virtual mic Hear Myself: connects your physical mic to your headphones, echoing what you say windows support is partial, macos support will not be provided global hotkeys should work out of the box on losedows the Linux version uses xdg-desktop-portal for global shortcuts if you have a Launchpad Mini MKII lying around, you can use it with this program :3...
|
1793670754.1645977
|
1793757154.1645977
|
|
64254
|
Game by @onetwo | Stardance
|
onetwo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Game by @onetwo | Stardance
|
1793670755.342396
|
1794275555.342396
|
|
30565
|
Guns For Hands by @Josh | Stardance
|
Josh
|
1
|
7.0
|
30
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-07T08:58:31Z", "hours": 7.0, "multiplier": 4.23, "payout": 30, "blessing": "neutral", "text": "I made a godot WebXR game called guns for hands, where (as stated in the title) you have guns for hands. using your ‘hands’ you must pass the salt to different people in increasingly odd ways! If you have a VR Headset, you can use the demo link in the meta quest browser etc. but if not, there is a demo video linked in the readme!", "repo": "https://gitlab.com/castawhat/guns-for-hands", "demo": "https://guns.notahomelab.xyz"}]...
|
[{"post_id": 77508, "ts": "202 [{"post_id": 77508, "ts": "2026-10-07T08:55:24Z", "hours": 2.9289, "text": "Its done! (for first ship) guns for hands’ first ship is ready! ive added a last/celebratory level and yeah, for a first time 3D game and a first time VR game, im pretty happy with how it turned out!"}, {"post_id": 26376, "ts": "2026-07-11T04:00:01Z", "hours": 3.4978, "text": "over the past few days I added quite alot to guns for hands! better lighting 2 levels nicer looking guns nicer looking levels and a start screen!"}, {"post_id": 22021, "ts": "2026-07-04T08:23:47Z", "hours": 0.6953, "text": "Today I Modeled the gun (not tracked because lapse hates me) setup the webxr project started working on and debugging the bullet shooting added a bean and fixed godot wakatime"}]...
|
Title: Guns For Hands by @Josh | Stardance
Devlog Title: Guns For Hands by @Josh | Stardance
Devlogs:
Today I Modeled the gun (not tracked because lapse hates me) setup the webxr project started working on and debugging the bullet shooting added a bean and fixed godot wakatime
over the past few days I added quite alot to guns for hands! better lighting 2 levels nicer looking guns nicer looking levels and a start screen!
Its done! (for first ship) guns for hands’ first ship is ready! ive added a last/celebratory level and yeah, for a first time 3D game and a first time VR game, im pretty happy with how it turned out!
Ships:
I made a godot WebXR game called guns for hands, where (as stated in the title) you have guns for hands. using your ‘hands’ you must pass the salt to different people in increasingly odd ways! If you have a VR Headset, you can use the demo link in the meta quest browser etc. but if not, there is a demo video linked in the readme!...
|
1793670756.230946
|
1793757156.230946
|
|
47657
|
AI-adaptive resources curator by @dhruvanshjariwal AI-adaptive resources curator by @dhruvanshjariwala | Stardance...
|
dhruvanshjariwala
|
1
|
19.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T19:04:03Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "An AI-powered adaptive learning platform built with Python (FastAPI/LangChain) and a modern Tailwind CSS dashboard. Features real-time diagnostic assessments, dynamic quiz generation, interactive choice cards, and an integrated AI tutor.", "repo": "https://github.com/codemaster010pro/AI_web", "demo": "https://ai-web-frontend.onrender.com"}]...
|
[{"post_id": 73705, "ts": "202 [{"post_id": 73705, "ts": "2026-09-25T19:02:53Z", "hours": 4.9428, "text": "finally its live you can try my web app and know your learning pattern and ask for resources according to your learning preference"}, {"post_id": 52394, "ts": "2026-08-22T14:48:17Z", "hours": 1.5994, "text": "backend is done"}, {"post_id": 49416, "ts": "2026-08-18T07:40:15Z", "hours": 0.9669, "text": "create a database for the web app"}, {"post_id": 49097, "ts": "2026-08-17T18:38:01Z", "hours": 4.8256, "text": "finally quiz part is done now its time to work on database to store that user info and later i will make a chatbot which will serve as a main sit where will be provided resources. msg me if you think that any improvements which will be good!!"}, {"post_id": 46703, "ts": "2026-08-14T04:27:46Z", "hours": 6.7456, "text": "just made langgraph tools for resource scrapping like documentation, yt video etc and it also check yt url the user have given"}]...
|
Title: AI-adaptive resources curator by @dhruvansh Title: AI-adaptive resources curator by @dhruvanshjariwala | Stardance
Devlogs:
just made langgraph tools for resource scrapping like documentation, yt video etc and it also check yt url the user have given
finally quiz part is done now its time to work on database to store that user info and later i will make a chatbot which will serve as a main sit where will be provided resources. msg me if you think that any improvements which will be good!!
create a database for the web app
backend is done
finally its live you can try my web app and know your learning pattern and ask for resources according to your learning preference
Ships:
An AI-powered adaptive learning platform built with Python (FastAPI/LangChain) and a modern Tailwind CSS dashboard. Features real-time diagnostic assessments, dynamic quiz generation, interactive choice cards, and an integrated AI tutor....
|
1793670757.414894
|
1793757157.414894
|
|
64255
|
Music player by @Xtimate | Stardance
|
Xtimate
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Music player by @Xtimate | Stardance
|
1793670758.600045
|
1794275558.600045
|
|
64256
|
Personal Website by @irev1ak1n | Stardance
|
irev1ak1n
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Personal Website by @irev1ak1n | Stardance
|
1793670759.4648821
|
1794275559.4648821
|
|
42829
|
Keytchen by @-Sophie- | Stardance
|
-Sophie-
|
1
|
15.0
|
267
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-01T01:25:55Z", "hours": 15.0, "multiplier": 17.92, "payout": 267, "blessing": "neutral", "text": "Keytchen is a digital experience where you get to explore a kitchen using eccentric controls, whether on your NanoKEY2 (what this game is intended for) or just your computer keyboard (which works just as well!) This was just a fun project to work on because I wanted to created a game that went beyond the standard WASD/arrow key controls. Controls are in the title screen instructions preface thing. It’s hard to explain with words but I have a picture in-game that helps a TON. My Github README also features the nanoKEY2 map guide + keyboard equivalent inputs. Challenges: This was my first time working with MIDI inputs in Godot and also working with music/timing in Godot. I had to learn a bit about rhythm and BPM actually because of this project, and also scoured upon Godot docs about getting playback positions and whatnot, which made me realize that Godot’s way of timing music is actually very inaccurate and you need to put a lot of safeguards to make sure that you’re not getting a late/older version of your playback position. That it’s up to speed as much as possible. There was also a lot of decision-making that I had to do. I could’ve chosen to add more content to this game (I mean imagine the possibilities) but I’ve basically answered my question of what a game would be like if the controls weren’t just WASD/arrow keys, and I’ve basically learned what I sought out to learn (MIDI input mapping and rhythm game mechanics) with this project. More content would just be adding onto the principles I’ve learned rather than learning more, which made me realize that it’s probably better to move on and experiment with another project! Proud of: I’m just proud that my beats are on time and that it’s not rage-quit inducing. I’m also proud of the assets I drew in this game because I drew everything and I’m glad it turned out pretty pleasing to look at. Also proud of my sfx + audio choices; I feel like they fit really well and just make everything feel so much more complete.", "repo": "https://github.com/gwak-amole/keytchen", "demo": "https://gwak-amole.itch.io/keytchen"}]...
|
[{"post_id": 75767, "ts": "202 [{"post_id": 75767, "ts": "2026-10-01T01:19:02Z", "hours": 0.3786, "text": "Cleaned game up for shipping! Export files added I exported this into an HTML file so that I could have players access it on their browser really easily! I also updated the godot loading screen and icon to be my own custom screens for more cohesiveness! Fixed minor bug There was a minor bug with the MIDI where it wasn’t escaping the cutting vegetables minigame, found the problem. It was only detecting the escape if it was pressed from the keyboard, not the MIDI. Art Drew assets for: Itch.io banner Stardance screenshot That’s pretty much it! yayy I’m so glad this has come to a wrap! I learned so much honestly from creating just this little digital experience. I hope you all enjoy exploring it as much as I enjoyed making it!"}, {"post_id": 75761, "ts": "2026-10-01T00:22:03Z", "hours": 3.6725, "text": "Finally about to ship!! Title Screen Created a title screen + keyboard tutorial instructions so that players know what keys to press + their keyboard equivalents if they don’t have a nanoKEY2 Everything was drawn by me in Aseprite, except the nanoKEY2 base image was taken from the internet Digital experience More than a game, I’ve decided that this game should be more like an experimental digital experience. It features a cutting experience and just pan/pot placing/removing. It doesn’t feature a storyline, almost just like a little aimless simulator. Audio Added some pixel + lofi bg music and satisfying SFX! Keyboard compatibility Added keyboard compatibility Mapped keys 1, 2, 3, 4, 5, 6, 7, 8 with corresponding MIDI pitch values (like an intermediary value switch) using event.get_keycode (it’s really neat and the transfer over was p smooth) Added navigation buttons Way to go back to start screen or exit cutting vegetables mode Challenges Finding satisfying audio :’) It was just a lot of little content to add so it was just time consuming It took a bit of decision-making to decide whether to keep going with Keytchen (because honestly I could keep adding content forever) or move onto another project. I decided to move on because at this point I’ve hurdled over all the foreign technicalities that I’ve sought out to learn (the MIDI mapping and beat timing.) Any new additions would just be things I already know (but I want to actively learn more.) I hope to ship this very soon; I’m going to quickly playtest it one more time!"}, {"post_id": 55672, "ts": "2026-08-27T17:10:30Z", "hours": 3.2014, "text": "Keytchen - More visual feedback and debugging! Had to backtrack w/debugging I debugged the entire timing system of beats because the gameplay was just not fun, it was not registering beats sometimes and the visual beat feedback wouldn’t update when it was supposed to. I fixed this by separating the visual beat updating system with the input tracking of beats for gameplay and it worked out well 😭 Visual feedback Error for wrong timing red key Error for wrong key red key Key you’re supposed to press is highlighted green The beats pulse whenever a beat happens to help the player feel the beat in the game better Miscellaneous You can access the minigame through the main screen’s cutting board now! Challenges Debugging my beat system was so painful and a nightmare because my code was so messy and I confused myself with it. I solved this by commenting out all my code so now there’s no way I get confused LOL Future additions As you can tell, I still haven’t added the new potato / zucchini textures so i will have to do that :’). The next time you see a post it will have different textures not just a carrot i promise!! I’ll need to create some kind of inventory system so that the cut up vegetables can be stored somewhere so when the player wants to cook something using those ingredients they have it on hand and can add it to a pot or pan or something That’s all folks! see ya in the next update! ;D"}, {"post_id": 48914, "ts": "2026-08-17T14:07:42Z", "hours": 3.3572, "text": "Cutting mechanism almost done Notes autoload Now the player knows what notes to hit based on the note shown on screen! I’m going to add a note guide so that it’s also more obvious which note to hit if they’re not familiar with cdefgabc keys! Different vegetable settings Though there aren’t any graphics to match at the moment, there are different vegetables that call for different mini-games! I finished the carrot, zucchini, and potato mini-games. Music added I added some plain beat in the background that the player needs to match with the notes accordingly. It won’t work unless the player matches the beat well enough. Challenges It’s hard to match up the switch of the note; i’m still working on this. sometimes the note even though switches in game logic doesn’t show up and the game remembers the last note as the one to show on screen (u can actually see it in the vid) I had to learn a bit about rhythm and bpm in order to set my variables for next beat and secs per beat stuff like that correctly 😭 Next additions graphics for different veggies the note showing on screen will have flawless timing sfx for notes there will be a note guide added for players who aren’t familiar with cdefgabc notes! sorry my updates have slowed down…i’ve started school again D:"}, {"post_id": 44249, "ts": "2026-08-09T21:35:38Z", "hours": 2.4667, "text": "Carrot cutting animation + hooked to nanoKEY2!! Art / animations I used Aseprite to make the cutting board and the carrot graphics! I made each cut of the carrot a different image to make this work. Now there is a visible cutting animation for carrots! I timed position changes, rotations, and modulation using AnimationPlayer. Currently, the animation steps are triggered by a ui_accept input. I’ll change it to be musical chords that the player has to time perfectly as my next update. Hooked controls to nanoKEY2 I looked into how MIDI inputs are controlled by Godot, and it doesn’t natively detect MIDI inputs from the Input Map in Project Settings, so I had to create a script that detects MIDI input and maps it onto a default Godot input like ui_accept and ui_left etc! But now it’s working really well :DDDD Challenges It was incredibly time consuming to key frame each individual position but hopefully I can just reuse these frames now and just replace the textures because I left the names generic for modularity I didn’t understand how MIDI inputs worked and matching them to other native inputs in Godot so it was tough understanding how to do it (so many diff things like MIDI_MESSAGE_NOTE_OFF/ON that I had to learn) Next Steps I’m going to be adding the chords timing feature so that cutting is actually hard and not just a matter of ui_accept lol Stay tuned!"}, {"post_id": 39759, "ts": "2026-08-02T22:40:41Z", "hours": 0.9764, "text": "Added some basic game functionality! + recolored background You can select a pot or pan for each stovetop now Through a ton of pressed() signals and booleans we have made this happen Focus To pair this with my nanoKEY2, I’m starting game development with keyboard focus features early so that it isn’t a hassle to do later on! Recolored stuff I changed the colors of the background to make it even more approachable and friendly! I like this cool toned version… that last version looked a little eerie Future additions I will be adding: hooking nanoKEY2 to the actual game actual pot cooking mechanic pan cooking mechanic cutting vegetables mechanic (maybe I’ll start with a carrot first) a bunch of graphics to support those features Challenges Not many challenges this time but I keep forgetting to record my aseprite using lapse…I need to remember! Stay tuned!"}, {"post_id": 39116, "ts": "2026-08-01T20:30:00Z", "hours": 0.8281, "text": "Main background drawn! Aseprite I drew the main background for the game’s kitchen area with Aseprite! There’s a stove and cutting board so far. Future additions Soon, I’ll be adding the following: Stove cooking mechanic Cutting board mechanic So mainly I’ll be establishing gameplay with the nanoKEY2! Challenges faced Choosing the right color and vibe for this cozy game was pretty difficult, but I think I’m happy with the colors I have currently. I can change it anytime I want anyway! :D Stay tuned!"}]...
|
Title: Keytchen by @-Sophie- | Stardance
Devlogs: Title: Keytchen by @-Sophie- | Stardance
Devlogs:
Main background drawn! Aseprite I drew the main background for the game’s kitchen area with Aseprite! There’s a stove and cutting board so far. Future additions Soon, I’ll be adding the following: Stove cooking mechanic Cutting board mechanic So mainly I’ll be establishing gameplay with the nanoKEY2! Challenges faced Choosing the right color and vibe for this cozy game was pretty difficult, but I think I’m happy with the colors I have currently. I can change it anytime I want anyway! :D Stay tuned!
Added some basic game functionality! + recolored background You can select a pot or pan for each stovetop now Through a ton of pressed() signals and booleans we have made this happen Focus To pair this with my nanoKEY2, I’m starting game development with keyboard focus features early so that it isn’t a hassle to do later on! Recolored stuff I changed the colors of the background to make it even more approachable and friendly! I like this cool toned version… that last version looked a little eerie Future additions I will be adding: hooking nanoKEY2 to the actual game actual pot cooking mechanic pan cooking mechanic cutting vegetables mechanic (maybe I’ll start with a carrot first) a bunch of graphics to support those features Challenges Not many challenges this time but I keep forgetting to record my aseprite using lapse…I need to remember! Stay tuned!
Carrot cutting animation + hooked to nanoKEY2!! Art / animations I used Aseprite to make the cutting board and the carrot graphics! I made each cut of the carrot a different image to make this work. Now there is a visible cutting animation for carrots! I timed position changes, rotations, and modulation using AnimationPlayer. Currently, the animation steps are triggered by a ui_accept input. I’ll change it to be musical chords that the player has to time perfectly as my next update. Hooked controls to nanoKEY2 I looked into how MIDI inputs are controlled by Godot, and it doesn’t natively detect MIDI inputs from the Input Map in Project Settings, so I had to create a script that detects MIDI input and maps it onto a default Godot input like ui_accept and ui_left etc! But now it’s working really well :DDDD Challenges It was incredibly time consuming to key frame each individual position but hopefully I can just reuse these frames now and just replace the textures because I left the names generic for modularity I didn’t understand how MIDI inputs worked and matching them to other native inputs in Godot so it was tough understanding how to do it (so many diff things like MIDI_MESSAGE_NOTE_OFF/ON that I had to learn) Next Steps I’m going to be adding the chords timing feature so that cutting is actually hard and not just a matter of ui_accept lol Stay tuned!
Cutting mechanism almost done Notes autoload Now the player knows what notes to hit based on the note shown on screen! I’m going to add a note guide so that it’s also more obvious which note to hit if they’re not familiar with cdefgabc keys! Different vegetable settings Though there aren’t any graphics to match at the moment, there are different vegetables that call for different mini-games! I finished the carrot, zucchini, and potato mini-games. Music added I added some plain beat in the background that the player needs to match with the notes accordingly. It won’t work unless the player matches the beat well enough. Challenges It’s hard to match up the switch of the note; i’m still working on this. sometimes the note even though switches in game logic doesn’t show up and the game remembers the last note as the one to show on screen (u can actually see it in the vid) I had to learn a bit about rhythm and bpm in order to set my variables for next beat and secs per beat stuff like that correctly 😭 Next additions graphics for different veggies the note showing on screen will have flawless timing sfx for notes there will be a note guide added for players who aren’t familiar with cdefgabc notes! sorry my updates have slowed down…i’ve started school again D:
Keytchen - More visual feedback and debugging! Had to backtrack w/debugging I debugged the entire timing system of beats because the gameplay was just not fun, it was not registering beats sometimes and the visual beat feedback wouldn’t update when it was supposed to. I fixed this by separating the visual beat updating system with the input tracking of beats for gameplay and it worked out well 😭 Visual feedback Error for wrong timing red key Error for wrong key red key Key you’re supposed to press is highlighted green The beats pulse whenever a beat happens to help the player feel the beat in the game better Miscellaneous You can access the minigame through the main screen’s cutting board now! Challenges Debugging my beat system was so painful and a nightmare because my code was so messy and I confused myself with it. I solved this by commenting out all my code so now there’s no way I get confused LOL Future additions As you can tell, I still haven’t added the new potato / zucchini textures so i will have to do that :’). The next time you see a post it will have different textures not just a carrot i promise!! I’ll need to create some kind of inventory system so that the cut up vegetables can be stored somewhere so when the player wants to cook something using those ingredients they have it on hand and can add it to a pot or pan or something That’s all folks! see ya in the next update! ;D
Finally about to ship!! Title Screen Created a title screen + keyboard tutorial instructions so that players know what keys to press + their keyboard equivalents if they don’t have a nanoKEY2 Everything was drawn by me in Aseprite, except the nanoKEY2 base image was taken from the internet Digital experience More than a game, I’ve decided that this game should be more like an experimental digital experience. It features a cutting experience and just pan/pot placing/removing. It doesn’t feature a storyline, almost just like a little aimless simulator. Audio Added some pixel + lofi bg music and satisfying SFX! Keyboard compatibility Added keyboard compatibility Mapped keys 1, 2, 3, 4, 5, 6, 7, 8 with corresponding MIDI pitch values (like an intermediary value switch) using event.get_keycode (it’s really neat and the transfer over was p smooth) Added navigation buttons Way to go back to start screen or exit cutting vegetables mode Challenges Finding satisfying audio :’) It was just a lot of little content to add so it was just time consuming It took a bit of decision-making to decide whether to keep going with Keytchen (because honestly I could keep adding content forever) or move onto another project. I decided to move on because at this point I’ve hurdled over all the foreign technicalities that I’ve sought out to learn (the MIDI mapping and beat timing.) Any new additions would just be things I already know (but I want to actively learn more.) I hope to ship this very soon; I’m going to quickly playtest it one more time!
Cleaned game up for shipping! Export files added I exported this into an HTML file so that I could have players access it on their browser really easily! I also updated the godot loading screen and icon to be my own custom screens for more cohesiveness! Fixed minor bug There was a minor bug with the MIDI where it wasn’t escaping the cutting vegetables minigame, found the problem. It was only detecting the escape if it was pressed from the keyboard, not the MIDI. Art Drew assets for: Itch.io banner Stardance screenshot That’s pretty much it! yayy I’m so glad this has come to a wrap! I learned so much honestly from creating just this little digital experience. I hope you all enjoy exploring it as much as I enjoyed making it!
Ships:
Keytchen is a digital experience where you get to explore a kitchen using eccentric controls, whether on your NanoKEY2 (what this game is intended for) or just your computer keyboard (which works just as well!) This was just a fun project to work on because I wanted to created a game that went beyond the standard WASD/arrow key controls. Controls are in the title screen instructions preface thing. It’s hard to explain with words but I have a picture in-game that helps a TON. My Github README also features the nanoKEY2 map guide + keyboard equivalent inputs. Challenges: This was my first time working with MIDI inputs in Godot and also working with music/timing in Godot. I had to learn a bit about rhythm and BPM actually because of this project, and also scoured upon Godot docs about getting playback positions and whatnot, which made me realize that Godot’s way of timing music is actually very inaccurate and you need to put a lot of safeguards to make sure that you’re not getting a late/older version of your playback position. That it’s up to speed as much as possible. There was also a lot of decision-making that I had to do. I could’ve chosen to add more content to this game (I mean imagine the possibilities) but I’ve basically answered my question of what a game would be like if the controls weren’t just WASD/arrow keys, and I’ve basically learned what I sought out to learn (MIDI input mapping and rhythm game mechanics) with this project. More content would just be adding onto the principles I’ve learned rather than learning more, which made me realize that it’s probably better to move on and experiment with another project! Proud of: I’m just proud that my beats are on time and that it’s not rage-quit inducing. I’m also proud of the assets I drew in this game because I drew everything and I’m glad it turned out pretty pleasing to look at. Also proud of my sfx + audio choices; I feel like they fit really well and just make everything feel so much more complete....
|
1793670760.4068496
|
1793757160.4068496
|
|
291
|
YouTweaks by @kanavv | Stardance
|
kanavv
|
2
|
36.0
|
646
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T15:48:19Z", "hours": 8.0, "multiplier": 14.56, "payout": 113, "blessing": "neutral", "text": "YouTweaks is a quality of life extension made to improve your experience on youtube. I decided to build this project because I was super frustrated with how youtube has become. With this extension I made the youtube experience less annoying and also added some features so you are more mindful while choosing what to watch. For this Ship I added the color themes feature fixed a LOT of bugs and I also created a custom playback speed feature which im super proud of and finally I incorporated feedback from the first ship (fixing the readme). This project has been super fun and this is going to be my last ship for stardance but I will probably keep working on this! Also im super happy my extension got approved to be on the firefox store so if you like it you can add it here: https://addons.mozilla.org/en-US/firefox/addon/youtweaks/", "repo": "https://github.com/KanAvR/YouTweaks", "demo": "https://github.com/KanAvR/YouTweaks/releases"}, {"ship_num": 2, "ts": "2026-09-19T14:15:30Z", "hours": 28.0, "multiplier": 18.99, "payout": 533, "blessing": "neutral", "text": "YouTweaks is a quality of life extension made to improve your experience on youtube. I decided to build this project because I was super frustrated with how youtube has become. With this extension I made the youtube experience less annoying and also added some features so you are more mindful while choosing what to watch. Overall this has been a really fun project to work on. I never thought I would have fun coding in javascript.", "repo": "https://github.com/KanAvR/YouTweaks", "demo": "https://github.com/KanAvR/YouTweaks/releases"}]...
|
[{"post_id": 75193, "ts": "202 [{"post_id": 75193, "ts": "2026-09-29T13:29:09Z", "hours": 1.3944, "text": "Bug Fixes I fixed another bug with the stop hover effects feature that used to show the effect if you hovered over the title of the video. Blur Slider I added a blur slider so people can adjust the amount of thumbnail blur. Feedback I incorporated the better readme feedback from the first ship where many people said I should explain why each feature is added. Sry for the camera photo I just reinstalled linux."}, {"post_id": 72184, "ts": "2026-09-22T12:40:55Z", "hours": 2.1672, "text": "Custom themes fixes I fixed some parts of the website that were not changing colors. I should have thought of this earlier but its going to be such a pain to keep the themes feature up to date with youtubes ui hence I am going to mark it as an experimental feature until I figure out how to change the themes in a better way. Playback speed controls without premium I am super happy with how this feature turned out it looks exactly like youtubes ui."}, {"post_id": 71663, "ts": "2026-09-21T08:21:31Z", "hours": 4.2158, "text": "Whole lotta bugs I thought I was done with everything but I found so many bugs. The shorts blocker was broken, the blocking youtube games dint work, and there was a bug where the video you were watching just stopped playing when you went into full screen. Shorts and game blocker So first the shorts bug would just delete the whole fyp if it found a short. This was was quite an easy fix since I just had to change what got deleted. Next the youtube games blocker was searching for text with “youtube games” which I changed to work the same way as the shorts blocker and then it started working properly. Full screen bug I fixed the full screen bug by only stopping the effects on objects we know are video tiles and nothing else. Themes Finally I also started working on a themes feature which looks so cool!! but its such a pain to work on. Theres so many tiny things I need to sit and edit so it looks right."}, {"post_id": 70604, "ts": "2026-09-19T13:15:26Z", "hours": 0.7297, "text": "Made the final commit before shipping Soo now the hide shorts feature works without bugs and I also finished adding the hide merch store feature. Now I just need to figure out how to publish my extension to the firefox and chrome store. Oh I also made a readme."}, {"post_id": 52261, "ts": "2026-08-22T11:20:45Z", "hours": 1.0539, "text": "View count and Publish date I moved the view count and publish dates to be next to the like button instead of the stupid tiny text it was before. To do this I made a new file called videometa.js it uses two functions one to extract the abbreviated views/ publish date and another one to extract the full views/ publish date which shows up when you hover over the information. Additionally I also fixed some Issues with the stop autoplay on hover and stop effects on hover functions, which I merged into one function earlier."}, {"post_id": 47509, "ts": "2026-08-15T13:57:57Z", "hours": 1.5306, "text": "Finished the time tracking feature!!! I haven’t gotten any time to update the project since my summer break ended. But I finally got some time to work on the project because of the time constraints I used AI to write code for this feature :( Im not proud of it but at least the feature works with no dumb bugs (for now at least) Daily limit So I added a daily limit and a bed time cut off so people dont waste the whole day on YouTube. I also added a snooze feature that appears when the YouTube limit has been reached since I often need YouTube for school work and it would become an issue if there was no way to bypass the limit. Time counter badge The concept time counter I made in a previous devlog works now and changes colors based on how much of the daily limit you have used. Stats And finally I also added a stats feature for fun since I love looking at my stats on leech block and wanted something similar for this project."}, {"post_id": 33955, "ts": "2026-07-24T09:42:36Z", "hours": 2.2917, "text": "Everything is such a mess right now I’m working on so many features at once its getting to much too handle. And I dint even make separate branches or make commits per feature so its getting so messy . I’m working on Refactoring all the code to change the deleting elements code to use css instead of JS so it has better performance hopefully . A time tracking feature. Moving the view count and date of upload up to the like button. This feature has had so many random unexpected issues its pmo. hiding the annoying red little bar below videos on the homescreen. some good progress: I merged the stopAutoPlayOnHover and stopHoverEffects into one function and I also fixed all the bugs with the function such as it not working on pages other then the homepage. Next time I should work on things in order AND AT LEAST MAKE BRANCHES ALSO MY COMMITS RN ARE HUGE I SHOULD MAKE THEM SMALLER; ONE FOR EACH FEATURE."}, {"post_id": 32345, "ts": "2026-07-21T13:35:52Z", "hours": 2.7347, "text": "Fixed Blur Again Instead of sitting and excluding things from the thumbnail blur I changed the code to only blur thumbnails. This is so stupid idk how I came up with that nonsense earlier. Stopped auto play when you hover over videos This feature works along with the other hover feature to make you a little more mindful while choosing a video to watch. Time tracking Im working on a whole new set of features to actually add something new for once since this project has just been removing stuff till now. The feature will track your time on youtube and allow you to set limits so you don’t waste your whole day on youtube. The feature will look something like the image. The current image is just a mock up ."}, {"post_id": 24678, "ts": "2026-07-08T12:58:53Z", "hours": 2.5467, "text": "Bugs The hide notification toggle worked visually but if you clicked in that spot the panel still opened so for now I came up with a temporary fix of using a new function to stop the button form working. Also the thumbnail blur still has issues 😭 . For some reason it blurs emojis now. I will fix that later. New Feature I added a feature so when you hover on video you don’t get that distracting ambient color around the thumbnail. This helps because the glow acts like a tiny visual reward before you’ve actually decided anything; it makes a thumbnail feel “chosen” the moment you hover over it. Without that glow, your judgement has to do the work the color was doing for them; so you can be a little more mindful about what you click on. Popup ui Added a background, added the logo, aligned all the elements, and tested out a few fonts before finally choosing Geist . I used this Article to understand css."}, {"post_id": 24303, "ts": "2026-07-07T19:46:42Z", "hours": 2.9003, "text": "First time features actually work as intended!! The blur had a lot of bugs as mentioned in the first devlog I slowly managed to fix all of them in different ways and now its complete. The hardest issue was if you scrolled too fast then you would still get a glimpse of the thumbnail. I fixed this by creating a <style> element which applies the blur before the thumbnails load. So now there’s no need of a mutation or scroll observer either. Logo I created the logo for this project using free form on my ipad then I used claude to make different versions of it for all the resolutions (16,32,48,128) and for the project banner. New Features I added two new features to hide the create button and the notifications button because who ever clicks those. At first I made to separate functions for this but that was really stupid so then I made a generic function that just removes any element. Also I used el.style.display = hidden instead of el.remove since the element can instantly be unhidden if the user wants without needing a refresh."}, {"post_id": 22143, "ts": "2026-07-04T13:28:00Z", "hours": 4.3089, "text": "Major Progress Okay so a lot happened since the last devlog. I paused my progress on the auto play feature and instead moved on to some small changes. I also made a lot of random commits for testing small things which was kinda tedious to revert later (Image shows the graph after all the random stuff was removed). Hide Shorts This feature was pretty simple to implement as I just used querySelectorAll to select the elements with the youtube shorts buttons then I just checked for the text “shorts” so the function doesn’t accidentally delete something else. Finally I used element.remove() to delete the buttons. Also added a mutation observer so the button stays deleted. Hiding unnecessary buttons I basically just did the same thing as above to hide other buttons that clutter up the screen like the create button and the voice search button. Branches This is the first time I learnt how to properly use branches in git. I made two separate branches for the two features I worked on so the variable names are not an issue for now."}, {"post_id": 16405, "ts": "2026-06-26T18:04:27Z", "hours": 2.8767, "text": "Improving file structure First off I fixed the mess of files that were just dropped into the project folder; this would become an issue in the future as I kept on creating new files. Creating the popup I stared off by creating popup.html popup.css and popup.js files after which I went back to the manifest.json to link the popup files but here I realized that the whole JSON file was broken because all the items were inside \"action\" this had not caused any issues so far but it could have led to many problems in the future. After fixing the JSON file I linked the popup files and added storage and scripting permissions to the extension which will be needed later. Next I read a blog post of how to write HTML. Then I created a toggle switch for which I borrowed copied the css from w3schools . Now for the toggle switch to work I had to make a few changes to youtweaks.js . Now it checks the browser storage to see if thumbnail blur is toggled on/off and also continuous checks to see if the toggle switch has been changed which accordingly turns on/off the blur. Other changes I started working on the next feature to stop the auto play of videos when you hover over them as the only purpose of this is to get you hooked onto a video before you even click on it. Which often results in wasted time. While working on that feature I also managed to fix the blur so now it works everywhere on youtube but as a side effect it also blurs youtubers profile pictures which ill fix later."}, {"post_id": 12135, "ts": "2026-06-19T20:37:08Z", "hours": 3.2972, "text": "Fixing the three issues: I first implemented a mutation observer which reapplies the blur every time something on the page changes, this solved issues 1 and 3 but did so in a very sloppy way as a “mutation” was only detected when you hover the mouse on a thumbnail. To fix the problems in a more optimal way I tried a lot of things: I started learning about intersection observers, scroll observers, and started a 3 hour crash course on js to understand what in the world I was doing. I spent a lot of time tinkering and then my problem was solved with a simple search on Mozilla’s developer docs . I used a scroll event listener which fixed the scrolling issue but the other issues still remain. At this point I was so tired I started setting up the gui for the extension which involved making some changes to the manifest.json file."}, {"post_id": 3002, "ts": "2026-06-05T22:40:05Z", "hours": 3.8056, "text": "So the aim of this project is to improve youtube’s usage experience through small tweaks. This is my first time doing anything related to websites I know nothing 😭 So I started off the project by creating a manifest.json file which contains all the data required to run the extension. For this the Mozilla docs were a huge help. Next, I started by creating the first feature of blurring thumbnails. I somehow managed to inspect element the youtube website and select the correct element id to select the thumbnails ig. But this came with three issues: The blur stops working after a refresh The blur only works on the home page The blur stops working after scrolling a lot To fix these Issues I first searched for the issue on w3schools but I dint understand anything I found; so after a bit more digging I came across someone facing a similar issue on stack overflow and after a very long while of trying to understand his code I managed to modify it to work for my extension. This fixed the third issue but not the other 2."}]...
|
Title: YouTweaks by @kanavv | Stardance
Devlogs:
Title: YouTweaks by @kanavv | Stardance
Devlogs:
So the aim of this project is to improve youtube’s usage experience through small tweaks. This is my first time doing anything related to websites I know nothing 😭 So I started off the project by creating a manifest.json file which contains all the data required to run the extension. For this the Mozilla docs were a huge help. Next, I started by creating the first feature of blurring thumbnails. I somehow managed to inspect element the youtube website and select the correct element id to select the thumbnails ig. But this came with three issues: The blur stops working after a refresh The blur only works on the home page The blur stops working after scrolling a lot To fix these Issues I first searched for the issue on w3schools but I dint understand anything I found; so after a bit more digging I came across someone facing a similar issue on stack overflow and after a very long while of trying to understand his code I managed to modify it to work for my extension. This fixed the third issue but not the other 2.
Fixing the three issues: I first implemented a mutation observer which reapplies the blur every time something on the page changes, this solved issues 1 and 3 but did so in a very sloppy way as a “mutation” was only detected when you hover the mouse on a thumbnail. To fix the problems in a more optimal way I tried a lot of things: I started learning about intersection observers, scroll observers, and started a 3 hour crash course on js to understand what in the world I was doing. I spent a lot of time tinkering and then my problem was solved with a simple search on Mozilla’s developer docs . I used a scroll event listener which fixed the scrolling issue but the other issues still remain. At this point I was so tired I started setting up the gui for the extension which involved making some changes to the manifest.json file.
Improving file structure First off I fixed the mess of files that were just dropped into the project folder; this would become an issue in the future as I kept on creating new files. Creating the popup I stared off by creating popup.html popup.css and popup.js files after which I went back to the manifest.json to link the popup files but here I realized that the whole JSON file was broken because all the items were inside "action" this had not caused any issues so far but it could have led to many problems in the future. After fixing the JSON file I linked the popup files and added storage and scripting permissions to the extension which will be needed later. Next I read a blog post of how to write HTML. Then I created a toggle switch for which I borrowed copied the css from w3schools . Now for the toggle switch to work I had to make a few changes to youtweaks.js . Now it checks the browser storage to see if thumbnail blur is toggled on/off and also continuous checks to see if the toggle switch has been changed which accordingly turns on/off the blur. Other changes I started working on the next feature to stop the auto play of videos when you hover over them as the only purpose of this is to get you hooked onto a video before you even click on it. Which often results in wasted time. While working on that feature I also managed to fix the blur so now it works everywhere on youtube but as a side effect it also blurs youtubers profile pictures which ill fix later.
Major Progress Okay so a lot happened since the last devlog. I paused my progress on the auto play feature and instead moved on to some small changes. I also made a lot of random commits for testing small things which was kinda tedious to revert later (Image shows the graph after all the random stuff was removed). Hide Shorts This feature was pretty simple to implement as I just used querySelectorAll to select the elements with the youtube shorts buttons then I just checked for the text “shorts” so the function doesn’t accidentally delete something else. Finally I used element.remove() to delete the buttons. Also added a mutation observer so the button stays deleted. Hiding unnecessary buttons I basically just did the same thing as above to hide other buttons that clutter up the screen like the create button and the voice search button. Branches This is the first time I learnt how to properly use branches in git. I made two separate branches for the two features I worked on so the variable names are not an issue for now.
First time features actually work as intended!! The blur had a lot of bugs as mentioned in the first devlog I slowly managed to fix all of them in different ways and now its complete. The hardest issue was if you scrolled too fast then you would still get a glimpse of the thumbnail. I fixed this by creating a <style> element which applies the blur before the thumbnails load. So now there’s no need of a mutation or scroll observer either. Logo I created the logo for this project using free form on my ipad then I used claude to make different versions of it for all the resolutions (16,32,48,128) and for the project banner. New Features I added two new features to hide the create button and the notifications button because who ever clicks those. At first I made to separate functions for this but that was really stupid so then I made a generic function that just removes any element. Also I used el.style.display = hidden instead of el.remove since the element can instantly be unhidden if the user wants without needing a refresh.
Bugs The hide notification toggle worked visually but if you clicked in that spot the panel still opened so for now I came up with a temporary fix of using a new function to stop the button form working. Also the thumbnail blur still has issues 😭 . For some reason it blurs emojis now. I will fix that later. New Feature I added a feature so when you hover on video you don’t get that distracting ambient color around the thumbnail. This helps because the glow acts like a tiny visual reward before you’ve actually decided anything; it makes a thumbnail feel “chosen” the moment you hover over it. Without that glow, your judgement has to do the work the color was doing for them; so you can be a little more mindful about what you click on. Popup ui Added a background, added the logo, aligned all the elements, and tested out a few fonts before finally choosing Geist . I used this Article to understand css.
Fixed Blur Again Instead of sitting and excluding things from the thumbnail blur I changed the code to only blur thumbnails. This is so stupid idk how I came up with that nonsense earlier. Stopped auto play when you hover over videos This feature works along with the other hover feature to make you a little more mindful while choosing a video to watch. Time tracking Im working on a whole new set of features to actually add something new for once since this project has just been removing stuff till now. The feature will track your time on youtube and allow you to set limits so you don’t waste your whole day on youtube. The feature will look something like the image. The current image is just a mock up .
Everything is such a mess right now I’m working on so many features at once its getting to much too handle. And I dint even make separate branches or make commits per feature so its getting so messy . I’m working on Refactoring all the code to change the deleting elements code to use css instead of JS so it has better performance hopefully . A time tracking feature. Moving the view count and date of upload up to the like button. This feature has had so many random unexpected issues its pmo. hiding the annoying red little bar below videos on the homescreen. some good progress: I merged the stopAutoPlayOnHover and stopHoverEffects into one function and I also fixed all the bugs with the function such as it not working on pages other then the homepage. Next time I should work on things in order AND AT LEAST MAKE BRANCHES ALSO MY COMMITS RN ARE HUGE I SHOULD MAKE THEM SMALLER; ONE FOR EACH FEATURE.
Finished the time tracking feature!!! I haven’t gotten any time to update the project since my summer break ended. But I finally got some time to work on the project because of the time constraints I used AI to write code for this feature :( Im not proud of it but at least the feature works with no dumb bugs (for now at least) Daily limit So I added a daily limit and a bed time cut off so people dont waste the whole day on YouTube. I also added a snooze feature that appears when the YouTube limit has been reached since I often need YouTube for school work and it would become an issue if there was no way to bypass the limit. Time counter badge The concept time counter I made in a previous devlog works now and changes colors based on how much of the daily limit you have used. Stats And finally I also added a stats feature for fun since I love looking at my stats on leech block and wanted something similar for this project.
View count and Publish date I moved the view count and publish dates to be next to the like button instead of the stupid tiny text it was before. To do this I made a new file called videometa.js it uses two functions one to extract the abbreviated views/ publish date and another one to extract the full views/ publish date which shows up when you hover over the information. Additionally I also fixed some Issues with the stop autoplay on hover and stop effects on hover functions, which I merged into one function earlier.
Made the final commit before shipping Soo now the hide shorts feature works without bugs and I also finished adding the hide merch store feature. Now I just need to figure out how to publish my extension to the firefox and chrome store. Oh I also made a readme.
Whole lotta bugs I thought I was done with everything but I found so many bugs. The shorts blocker was broken, the blocking youtube games dint work, and there was a bug where the video you were watching just stopped playing when you went into full screen. Shorts and game blocker So first the shorts bug would just delete the whole fyp if it found a short. This was was quite an easy fix since I just had to change what got deleted. Next the youtube games blocker was searching for text with “youtube games” which I changed to work the same way as the shorts blocker and then it started working properly. Full screen bug I fixed the full screen bug by only stopping the effects on objects we know are video tiles and nothing else. Themes Finally I also started working on a themes feature which looks so cool!! but its such a pain to work on. Theres so many tiny things I need to sit and edit so it looks right.
Custom themes fixes I fixed some parts of the website that were not changing colors. I should have thought of this earlier but its going to be such a pain to keep the themes feature up to date with youtubes ui hence I am going to mark it as an experimental feature until I figure out how to change the themes in a better way. Playback speed controls without premium I am super happy with how this feature turned out it looks exactly like youtubes ui.
Bug Fixes I fixed another bug with the stop hover effects feature that used to show the effect if you hovered over the title of the video. Blur Slider I added a blur slider so people can adjust the amount of thumbnail blur. Feedback I incorporated the better readme feedback from the first ship where many people said I should explain why each feature is added. Sry for the camera photo I just reinstalled linux.
Ships:
YouTweaks is a quality of life extension made to improve your experience on youtube. I decided to build this project because I was super frustrated with how youtube has become. With this extension I made the youtube experience less annoying and also added some features so you are more mindful while choosing what to watch. Overall this has been a really fun project to work on. I never thought I would have fun coding in javascript.
YouTweaks is a quality of life extension made to improve your experience on youtube. I decided to build this project because I was super frustrated with how youtube has become. With this extension I made the youtube experience less annoying and also added some features so you are more mindful while choosing what to watch. For this Ship I added the color themes feature fixed a LOT of bugs and I also created a custom playback speed feature which im super proud of and finally I incorporated feedback from the first ship (fixing the readme). This project has been super fun and this is going to be my last ship for stardance but I will probably keep working on this! Also im super happy my extension got approved to be on the firefox store so if you like it you can add it here: https://addons.mozilla.org/en-US/firefox/addon/youtweaks/...
|
1793670761.7082953
|
1793757161.7082953
|
|
7084
|
ALL of the board games I like or Invented by @Nezr ALL of the board games I like or Invented by @Nezruceuil | Stardance...
|
Nezruceuil
|
1
|
151.0
|
1265
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T19:52:05Z", "hours": 151.0, "multiplier": 8.44, "payout": 1265, "blessing": "neutral", "text": "I coded a Game in which you can play all of my favorite board games and the games that I invented. I deepened my Godot coding knowledge by recreating complicated games like: Chess, Reversi, Go, Tafl and Shōgi. I really enjoyed doing this project and now you can enjoy it too! hey, if you write **Stardance** in the background texture you can get this amazing background ↓. ✨", "repo": "https://github.com/Nezruceuil/my-board-games", "demo": "https://nezruceuil.itch.io/cool-board-games"}]...
|
[{"post_id": 75686, "ts": "202 [{"post_id": 75686, "ts": "2026-09-30T19:11:44Z", "hours": 1.1744, "text": "Fixed Bugs and added new secrets panels."}, {"post_id": 71414, "ts": "2026-09-20T19:42:26Z", "hours": 9.54, "text": "Fixed bugs, improved my game, added recommendation, added a way to order the games however you want, added art for amazons game fire and added a Chess panel."}, {"post_id": 61656, "ts": "2026-09-04T17:57:46Z", "hours": 5.3467, "text": "Improve my board game, fixed bugs, added a texture for the walls, added a play time estimation for every games, added Amazons and added Gomoku."}, {"post_id": 58882, "ts": "2026-08-31T13:38:25Z", "hours": 1.7225, "text": "Fixed more bugs (tafl and text in wrong place.) and improved Castle War and added some art to it."}, {"post_id": 58076, "ts": "2026-08-30T12:49:31Z", "hours": 10.0364, "text": "Fixed Bugs (tafl,drawback chess,ect…), Added a Spring panel, Added Amazons and Added Castle War (my own strategy game)."}, {"post_id": 48101, "ts": "2026-08-16T12:03:28Z", "hours": 9.0517, "text": "fixed Bugs, added 2 new chess variants and Added 15 unique drawbacks to drawback chess!"}, {"post_id": 46333, "ts": "2026-08-13T14:07:53Z", "hours": 9.0744, "text": "Fixed bugs, added a Hazelnut fight ai (not entirely done) and added more drawbacks to drawback chess."}, {"post_id": 43342, "ts": "2026-08-08T15:20:23Z", "hours": 8.5814, "text": "Added better panel for the main page (added a Summer panel a Winter panel that you can get by being on the game at the right season. and a star dance panel that you can get by typing “Stardance”. (I drew all of the panels myself.)) , added a Save and Load function, change all of the text font to be better and added a script to see the panel (control/option space)."}, {"post_id": 40696, "ts": "2026-08-04T11:49:37Z", "hours": 1.2158, "text": "fixed bugs, improved design and added a delete drawings and arrows function win delete. (a lot of arrows + delete button = no more arrows)"}, {"post_id": 39671, "ts": "2026-08-02T20:01:01Z", "hours": 4.1125, "text": "added an arrow drawing ability and fixed bugs."}, {"post_id": 38699, "ts": "2026-08-01T06:56:05Z", "hours": 1.4872, "text": "added an explanation for every games and fixed bugs with the lines of action game."}, {"post_id": 38178, "ts": "2026-07-31T13:20:17Z", "hours": 1.7389, "text": "fixed a bug with chess and added lines of action!"}, {"post_id": 37562, "ts": "2026-07-30T11:46:29Z", "hours": 3.5211, "text": "fixed bugs and added Go!"}, {"post_id": 37224, "ts": "2026-07-29T19:30:53Z", "hours": 1.4664, "text": "finished making talf games (added the king suffocation mechanic) !"}, {"post_id": 36562, "ts": "2026-07-28T19:20:19Z", "hours": 3.0928, "text": "started added talf game( ≈ 85% done) still need to add the king capture feature"}, {"post_id": 35321, "ts": "2026-07-26T17:18:12Z", "hours": 1.8692, "text": "fixed bugs and added more chess variants"}, {"post_id": 35080, "ts": "2026-07-26T08:26:26Z", "hours": 4.0767, "text": "Fixed bugs and added Reversi!"}, {"post_id": 34274, "ts": "2026-07-24T20:51:45Z", "hours": 2.0453, "text": "added bigger tic tac toe and fixed bugs."}, {"post_id": 33662, "ts": "2026-07-23T19:17:40Z", "hours": 2.0328, "text": "added 4 player Chess, fixed bugs and added a boat for Chaturaji."}, {"post_id": 33528, "ts": "2026-07-23T15:39:08Z", "hours": 2.0022, "text": "added an explanation for every game."}, {"post_id": 33148, "ts": "2026-07-22T19:53:27Z", "hours": 4.4092, "text": "fixed bugs and added Chaturaji"}, {"post_id": 31461, "ts": "2026-07-19T20:45:54Z", "hours": 4.3989, "text": "fixed a bug with duck chess and added Shōgi."}, {"post_id": 30822, "ts": "2026-07-18T19:09:14Z", "hours": 6.975, "text": "added every variants( Atomic,Duck Chess,Fog Of War,Giveaway,King Of The Hill,Capture Anything,Torpedo,No Castling,Ghost Board,Sideways ) and added Connect 4"}, {"post_id": 30297, "ts": "2026-07-17T19:08:42Z", "hours": 7.4939, "text": "Started adding an AI for Hazelnut Fight, fixed bugs with castling in the chess games, added a page to play classic chess variants, and a page where you can see all the chess variants coming in the next devlog. I also added an autofill that checks for similarity to fill in variant names (for example: aTuMyk -> Atomic .)"}, {"post_id": 27888, "ts": "2026-07-13T20:03:40Z", "hours": 0.7567, "text": "added color pickers to the options menu."}, {"post_id": 27847, "ts": "2026-07-13T18:47:36Z", "hours": 1.3992, "text": "added a classic version to pieces fit!"}, {"post_id": 24673, "ts": "2026-07-08T12:50:10Z", "hours": 4.3453, "text": "Added ‘Pieces Fit,’ a game where everyone is given the same randomly generated custom piece and must place as many copies of it as possible without any of them attacking each other."}, {"post_id": 24151, "ts": "2026-07-07T15:08:03Z", "hours": 3.4447, "text": "fixed bugs with some drawbacks and added 5 more uniques drawbacks"}, {"post_id": 22245, "ts": "2026-07-04T16:41:55Z", "hours": 2.2403, "text": "added a resign button 5 more unique drawback and fixed bugs"}, {"post_id": 22065, "ts": "2026-07-04T09:47:55Z", "hours": 3.5369, "text": "added Drawback Chess with 15 drawbacks!"}, {"post_id": 20990, "ts": "2026-07-02T18:48:12Z", "hours": 3.8056, "text": "added draw to the chess games and a options menu (that doesn’t do anything yet)"}, {"post_id": 19446, "ts": "2026-06-30T19:25:45Z", "hours": 0.8839, "text": "added normal chess"}, {"post_id": 19383, "ts": "2026-06-30T17:58:23Z", "hours": 0.91, "text": "added a drawing ability , added color to see the last movement of your enemy and it now turn 180° every turn."}, {"post_id": 19112, "ts": "2026-06-30T11:00:58Z", "hours": 2.1864, "text": "added game mode and additional rule for pizza chess (for example this one makes all pieces looks like pizza ( Kings opening vs King Indian defense ) and you can’t even tell what is what piece)"}, {"post_id": 19057, "ts": "2026-06-30T07:37:39Z", "hours": 8.1514, "text": "added pizza chess (my own version of chess where the left knight is replace by a pizza)"}, {"post_id": 8544, "ts": "2026-06-14T06:27:46Z", "hours": 3.6144, "text": "added a new game with gambling (not real money!)"}, {"post_id": 3536, "ts": "2026-06-06T14:59:28Z", "hours": 1.145, "text": "added a indicator for the player turn and fixed a bug with the golden hazelnut. Added visual to hazelnut fight page in the menu."}, {"post_id": 3391, "ts": "2026-06-06T09:11:28Z", "hours": 0.5789, "text": "Finished the game ! and Fixed some bugs"}, {"post_id": 3377, "ts": "2026-06-06T08:32:40Z", "hours": 0.45, "text": "polished and added texture for this game!"}, {"post_id": 3355, "ts": "2026-06-06T07:38:18Z", "hours": 1.9031, "text": "added a settings for my games that work and finished the gameplay of the game !"}, {"post_id": 3315, "ts": "2026-06-06T05:39:18Z", "hours": 1.3564, "text": "fixed hiding, look around and added a win condition and a win screen!"}, {"post_id": 2792, "ts": "2026-06-05T16:34:28Z", "hours": 1.0958, "text": "added a Hazelnut limit for the inventory, added the possibility of hiding you hazelnuts and added the number of turns"}, {"post_id": 2319, "ts": "2026-06-04T19:05:43Z", "hours": 0.7481, "text": "added movement, look around button with how many hazelnuts you found on your position!"}, {"post_id": 2258, "ts": "2026-06-04T17:29:03Z", "hours": 0.6908, "text": "added a next player button, player turn and player with controlled position!"}, {"post_id": 2137, "ts": "2026-06-04T13:52:30Z", "hours": 0.6044, "text": "added a tile map with random tile (forest, plain or lake) for one of the game"}, {"post_id": 2037, "ts": "2026-06-04T10:08:21Z", "hours": 0.5872, "text": "Added the main page with buttons and a scroll bar"}]...
|
Title: ALL of the board games I like or Invented b Title: ALL of the board games I like or Invented by @Nezruceuil | Stardance
Devlogs:
Added the main page with buttons and a scroll bar
added a tile map with random tile (forest, plain or lake) for one of the game
added a next player button, player turn and player with controlled position!
added movement, look around button with how many hazelnuts you found on your position!
added a Hazelnut limit for the inventory, added the possibility of hiding you hazelnuts and added the number of turns
fixed hiding, look around and added a win condition and a win screen!
added a settings for my games that work and finished the gameplay of the game !
polished and added texture for this game!
Finished the game ! and Fixed some bugs
added a indicator for the player turn and fixed a bug with the golden hazelnut. Added visual to hazelnut fight page in the menu.
added a new game with gambling (not real money!)
added pizza chess (my own version of chess where the left knight is replace by a pizza)
added game mode and additional rule for pizza chess (for example this one makes all pieces looks like pizza ( Kings opening vs King Indian defense ) and you can’t even tell what is what piece)
added a drawing ability , added color to see the last movement of your enemy and it now turn 180° every turn.
added normal chess
added draw to the chess games and a options menu (that doesn’t do anything yet)
added Drawback Chess with 15 drawbacks!
added a resign button 5 more unique drawback and fixed bugs
fixed bugs with some drawbacks and added 5 more uniques drawbacks
Added ‘Pieces Fit,’ a game where everyone is given the same randomly generated custom piece and must place as many copies of it as possible without any of them attacking each other.
added a classic version to pieces fit!
added color pickers to the options menu.
Started adding an AI for Hazelnut Fight, fixed bugs with castling in the chess games, added a page to play classic chess variants, and a page where you can see all the chess variants coming in the next devlog. I also added an autofill that checks for similarity to fill in variant names (for example: aTuMyk -> Atomic .)
added every variants( Atomic,Duck Chess,Fog Of War,Giveaway,King Of The Hill,Capture Anything,Torpedo,No Castling,Ghost Board,Sideways ) and added Connect 4
fixed a bug with duck chess and added Shōgi.
fixed bugs and added Chaturaji
added an explanation for every game.
added 4 player Chess, fixed bugs and added a boat for Chaturaji.
added bigger tic tac toe and fixed bugs.
Fixed bugs and added Reversi!
fixed bugs and added more chess variants
started added talf game( ≈ 85% done) still need to add the king capture feature
finished making talf games (added the king suffocation mechanic) !
fixed bugs and added Go!
fixed a bug with chess and added lines of action!
added an explanation for every games and fixed bugs with the lines of action game.
added an arrow drawing ability and fixed bugs.
fixed bugs, improved design and added a delete drawings and arrows function win delete. (a lot of arrows + delete button = no more arrows)
Added better panel for the main page (added a Summer panel a Winter panel that you can get by being on the game at the right season. and a star dance panel that you can get by typing “Stardance”. (I drew all of the panels myself.)) , added a Save and Load function, change all of the text font to be better and added a script to see the panel (control/option space).
Fixed bugs, added a Hazelnut fight ai (not entirely done) and added more drawbacks to drawback chess.
fixed Bugs, added 2 new chess variants and Added 15 unique drawbacks to drawback chess!
Fixed Bugs (tafl,drawback chess,ect…), Added a Spring panel, Added Amazons and Added Castle War (my own strategy game).
Fixed more bugs (tafl and text in wrong place.) and improved Castle War and added some art to it.
Improve my board game, fixed bugs, added a texture for the walls, added a play time estimation for every games, added Amazons and added Gomoku.
Fixed bugs, improved my game, added recommendation, added a way to order the games however you want, added art for amazons game fire and added a Chess panel.
Fixed Bugs and added new secrets panels.
Ships:
I coded a Game in which you can play all of my favorite board games and the games that I invented. I deepened my Godot coding knowledge by recreating complicated games like: Chess, Reversi, Go, Tafl and Shōgi. I really enjoyed doing this project and now you can enjoy it too! hey, if you write **Stardance** in the background texture you can get this amazing background ↓. ✨...
|
1793670763.2987049
|
1793757163.2987049
|
|
42856
|
Focus Manager by @CatOwlDev | Stardance
|
CatOwlDev
|
1
|
44.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T23:33:16Z", "hours": 44.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created FocusManager, which includes a to-do list, a timer (Pomodoro by default) and a programme blocker. The aim was to help myself (and others) avoid being distracted by external factors. In terms of the code, the most challenging part was creating the user interface and doing a bit of work with JSON files. As for publishing the project on GitHub, GitHub Actions was probably the most difficult part for me, as this is the first time I’ve created a project with the aim of allowing others to install and try it out. In fact, this is all a first for me. I’ll try to take all these mistakes into account in future. I’m proud that I managed to see the project through to the end. What do people need to know to be able to test my project? To be honest, I don’t know where you can host console programmes, so I’ve included a GIF as a demo video. I don’t think ordinary users need any particular programming skills.", "repo": "https://github.com/CatOwlDev/FocusManager", "demo": "https://github.com/CatOwlDev/FocusManager/releases"}]...
|
[{"post_id": 75750, "ts": "202 [{"post_id": 75750, "ts": "2026-09-30T23:12:43Z", "hours": 5.4956, "text": "Those five hours were spent fixing bugs, testing the code to ensure it worked properly, and doing a bit of code refactoring. And then publishing it on GitHub."}, {"post_id": 62124, "ts": "2026-09-05T11:44:59Z", "hours": 11.9847, "text": "I’ve written almost the entire user interface; all that’s left is to remove the unnecessary bits, tweak the design, and it’ll be ready soon"}, {"post_id": 55474, "ts": "2026-08-27T10:47:49Z", "hours": 9.5528, "text": "Having finished writing the Timer and Blocker, I’m now starting to build the UI using the FTXUI library. The documentation and AI are proving helpful"}, {"post_id": 49565, "ts": "2026-08-18T13:22:33Z", "hours": 7.3856, "text": "I reckon I’ve almost finished the second part of the project – the Timer, that is. I’ll need to tweak it to fit the UI in future"}, {"post_id": 45157, "ts": "2026-08-11T13:49:26Z", "hours": 9.2492, "text": "I’ve outlined roughly what the first part of the project itself (ToDoList) should look like. I’ve also noted what I need to save to a JSON file and how to log error reports should any errors occur whilst the programme is running"}]...
|
Title: Focus Manager by @CatOwlDev | Stardance
De Title: Focus Manager by @CatOwlDev | Stardance
Devlogs:
I’ve outlined roughly what the first part of the project itself (ToDoList) should look like. I’ve also noted what I need to save to a JSON file and how to log error reports should any errors occur whilst the programme is running
I reckon I’ve almost finished the second part of the project – the Timer, that is. I’ll need to tweak it to fit the UI in future
Having finished writing the Timer and Blocker, I’m now starting to build the UI using the FTXUI library. The documentation and AI are proving helpful
I’ve written almost the entire user interface; all that’s left is to remove the unnecessary bits, tweak the design, and it’ll be ready soon
Those five hours were spent fixing bugs, testing the code to ensure it worked properly, and doing a bit of code refactoring. And then publishing it on GitHub.
Ships:
I created FocusManager, which includes a to-do list, a timer (Pomodoro by default) and a programme blocker. The aim was to help myself (and others) avoid being distracted by external factors. In terms of the code, the most challenging part was creating the user interface and doing a bit of work with JSON files. As for publishing the project on GitHub, GitHub Actions was probably the most difficult part for me, as this is the first time I’ve created a project with the aim of allowing others to install and try it out. In fact, this is all a first for me. I’ll try to take all these mistakes into account in future. I’m proud that I managed to see the project through to the end. What do people need to know to be able to test my project? To be honest, I don’t know where you can host console programmes, so I’ve included a GIF as a demo video. I don’t think ordinary users need any particular programming skills....
|
1793670764.7216191
|
1793757164.7216191
|
|
64258
|
My first slack bot! by @USL | Stardance
|
USL
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @USL | Stardance
|
1793670765.8716586
|
1794275565.8716586
|
|
42886
|
Resumight by @ABN | Stardance
|
ABN
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T20:10:05Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Resumight: a resume-building tool specifically catered towards early job seekers and students. For anyone testing it out, make sure to be using a Chromium browser to use the voice feature, and be patient with the AI analysis of inputted PDF’s or resumes (it might take a bit). Now for features. There’s the resume maker, which easily formats your experience into appropriate categories, and can even use AI to smartly sort your spoken experience. Then there’s the tailor, which takes your resume and makes it perfect for any job description you paste in. Finally, the coach helps turn your resume into notes that can be used in an interview. The most challenging part of this was getting the AI integration to work; even with AI Studio being made by the same company as Gemini AI, there were a lot of problems with the way it analyzed and especially generated resume PDF’s. I am most proud of getting the voice integration to work so intelligently, since it can automatically sort things and even understand abbreviations.", "repo": "https://github.com/abn3000/Resumight", "demo": "https://resumight.ai.studio/"}]...
|
[{"post_id": 64425, "ts": "202 [{"post_id": 64425, "ts": "2026-09-08T19:54:23Z", "hours": 0.7389, "text": "#5: Final Tool A problem I think a lot of people face with job applications is actually putting their resume stuff into words in an interview. Even if you have all the qualifications, you can’t exactly list them bullet-point style when face-to-face with someone. The new Coach feature solves this issue with direct integration between Resumight and Tailor. Basically, it tells you how you can best present your unique skills to the hiring team. The End With that, I believe the crux of the project is complete. There’s obviously more stuff I could add, and I still haven’t figured out how to speed up the AI integration, but I’ve also noticed that I’m reaching the end of the line for what I actually know how to make, and have been relying on AI Studio suggestions a bit more."}, {"post_id": 59795, "ts": "2026-09-01T18:45:42Z", "hours": 0.5925, "text": "#4: Back Up It’s been a while since I’ve made changes to Resumight, so I want to take things slow for a bit to make sure nothing breaks. After all, I’m really proud of the tools it has so far! Running from my problems API keys don’t last forever, so my solution was to add a section for a backup API key that only gets used once the first one comes up empty. I couldn’t think of anything else. In case you’re wondering, since the app is hosted using Google AI Studio, I can integrate the keys without having them directly in code or anything. That way this can stay open source and have a GitHub. Adding on I realised that the most useful thing for me to do with Resumight would actually be to update my old resume. Adding the PDF upload feature to Resumaker was very easy, but this does require token usage again. I’m also a bit concerned about how long it took to parse my one page resume, but it does work for now. Next The website really feels like a one and done sort of thing right now. I want to have some sort of multi-resume management system: nothing fancy, but it would use cookies and help people stay organised. Also, voice recognition really does not like any browser other than Chrome."}, {"post_id": 40424, "ts": "2026-08-03T22:42:47Z", "hours": 1.5378, "text": "#3: It lives! I cleaned up the layout and created my Resumaker and Tailor sections. One makes your resume, and the other gears it up for any possible job listing. AI Integration (Misery) Resumight sort of needs AI to function. Without an AI parsing and sorting your speech, the Resumaker is a glorified document editor. Without an AI to tailor your resume to a job listing, the best I can do is match keywords Solution Google has an awesome free tool called AI Studio which lets you get an API key, which I was able to hook up directly to Resumight. Now, Google’s Gemini automatically sorts everything you say into where it needs to go! It’s pretty smart, too (see images). No master list necessary! The Tailor uses AI to specifically let you know what to update about your bullet points, and then makes a downloadable version for you. It’s not just buzzwords this time, since Gemini can actually explain what it wants to delete. Next Time API sustainability is at a critical point."}, {"post_id": 39686, "ts": "2026-08-02T20:28:21Z", "hours": 0.9136, "text": "#2: Spoken Language is Hard It’s kind of a hassle to have to input all your information into a website every time, right? I decided to start making a speech parsing thing that directly translates microphone input to words. I found an open-source base script online, which I was able to use to create my own speech-to-text which works with just code. Just to see how far it would go, I even tried seeing if I could get it to recognize shorthands and list them accordingly. I found a list of popular majors and schools, and just went from there. Categorization is still messy. Solution(?) Yeah, I’m probably going to have to use AI integration for this part, but we’ll cross the bridge of token limits once we get there."}, {"post_id": 39207, "ts": "2026-08-02T00:38:12Z", "hours": 0.7419, "text": "#1: Warm regards from BPT Figured out the color palette for my project; a crisp white and soft green are pretty nice to look at. This has been coded in HTML, CSS (so much CSS) and JS. An app might be more functional, but I like GitHub Pages too much for that. This image should give you a hint as to what we’ll be moving into. Let the suspense eat away at you. Main order of business : I’m working on getting that cool scrolling effect you see on Apple websites working now, just to make the website seem more legit."}]...
|
Title: Resumight by @ABN | Stardance
Devlogs:
#1: Title: Resumight by @ABN | Stardance
Devlogs:
#1: Warm regards from BPT Figured out the color palette for my project; a crisp white and soft green are pretty nice to look at. This has been coded in HTML, CSS (so much CSS) and JS. An app might be more functional, but I like GitHub Pages too much for that. This image should give you a hint as to what we’ll be moving into. Let the suspense eat away at you. Main order of business : I’m working on getting that cool scrolling effect you see on Apple websites working now, just to make the website seem more legit.
#2: Spoken Language is Hard It’s kind of a hassle to have to input all your information into a website every time, right? I decided to start making a speech parsing thing that directly translates microphone input to words. I found an open-source base script online, which I was able to use to create my own speech-to-text which works with just code. Just to see how far it would go, I even tried seeing if I could get it to recognize shorthands and list them accordingly. I found a list of popular majors and schools, and just went from there. Categorization is still messy. Solution(?) Yeah, I’m probably going to have to use AI integration for this part, but we’ll cross the bridge of token limits once we get there.
#3: It lives! I cleaned up the layout and created my Resumaker and Tailor sections. One makes your resume, and the other gears it up for any possible job listing. AI Integration (Misery) Resumight sort of needs AI to function. Without an AI parsing and sorting your speech, the Resumaker is a glorified document editor. Without an AI to tailor your resume to a job listing, the best I can do is match keywords Solution Google has an awesome free tool called AI Studio which lets you get an API key, which I was able to hook up directly to Resumight. Now, Google’s Gemini automatically sorts everything you say into where it needs to go! It’s pretty smart, too (see images). No master list necessary! The Tailor uses AI to specifically let you know what to update about your bullet points, and then makes a downloadable version for you. It’s not just buzzwords this time, since Gemini can actually explain what it wants to delete. Next Time API sustainability is at a critical point.
#4: Back Up It’s been a while since I’ve made changes to Resumight, so I want to take things slow for a bit to make sure nothing breaks. After all, I’m really proud of the tools it has so far! Running from my problems API keys don’t last forever, so my solution was to add a section for a backup API key that only gets used once the first one comes up empty. I couldn’t think of anything else. In case you’re wondering, since the app is hosted using Google AI Studio, I can integrate the keys without having them directly in code or anything. That way this can stay open source and have a GitHub. Adding on I realised that the most useful thing for me to do with Resumight would actually be to update my old resume. Adding the PDF upload feature to Resumaker was very easy, but this does require token usage again. I’m also a bit concerned about how long it took to parse my one page resume, but it does work for now. Next The website really feels like a one and done sort of thing right now. I want to have some sort of multi-resume management system: nothing fancy, but it would use cookies and help people stay organised. Also, voice recognition really does not like any browser other than Chrome.
#5: Final Tool A problem I think a lot of people face with job applications is actually putting their resume stuff into words in an interview. Even if you have all the qualifications, you can’t exactly list them bullet-point style when face-to-face with someone. The new Coach feature solves this issue with direct integration between Resumight and Tailor. Basically, it tells you how you can best present your unique skills to the hiring team. The End With that, I believe the crux of the project is complete. There’s obviously more stuff I could add, and I still haven’t figured out how to speed up the AI integration, but I’ve also noticed that I’m reaching the end of the line for what I actually know how to make, and have been relying on AI Studio suggestions a bit more.
Ships:
I made Resumight: a resume-building tool specifically catered towards early job seekers and students. For anyone testing it out, make sure to be using a Chromium browser to use the voice feature, and be patient with the AI analysis of inputted PDF’s or resumes (it might take a bit). Now for features. There’s the resume maker, which easily formats your experience into appropriate categories, and can even use AI to smartly sort your spoken experience. Then there’s the tailor, which takes your resume and makes it perfect for any job description you paste in. Finally, the coach helps turn your resume into notes that can be used in an interview. The most challenging part of this was getting the AI integration to work; even with AI Studio being made by the same company as Gemini AI, there were a lot of problems with the way it analyzed and especially generated resume PDF’s. I am most proud of getting the voice integration to work so intelligently, since it can automatically sort things and even understand abbreviations....
|
1793670766.754439
|
1793757166.754439
|
|
47715
|
MailOnAPI by @Drew_Fitzgerald | Stardance
|
Drew_Fitzgerald
|
1
|
46.14
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T02:16:59Z", "hours": 29.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve made an email server, email client and an IMAP server to allow it to be used in external email clients. The IMAP server is quite feature ful to 2003 standards, um not recent standards it is a custom implementation of RFC3501 which is from 2003 but it was only made obsolete in 2022 and is still used by gmail for it’s IMAP so it’s still very well supported. Right now I’m using Resend as the email service to send out emails but the implementation makes it very easy to support more.", "repo": "https://github.com/Sheep26/MailOnAPI", "demo": "https://mail.drewfitzgerald.co.nz"}]...
|
[{"post_id": 86109, "ts": "202 [{"post_id": 86109, "ts": "2026-11-01T02:01:40Z", "hours": 7.3556, "text": "So many improvements. We improved IMAP so much and added so many features to IMAP. We added custom headers (the big one this allows us to do spam checking) proper MIME and multipart handling, (work in progress) fetching BODYSTRUCTURE and fetching parts of an email. We fixed our server side searching allowing support for more and more email clients and instead of using multiple regex’s for the fetching the email body we now use one big regex which sends the server arguments for what was requested. All of this simply allows for: spam detection, better support, supporting more email clients, proper search and faster code. In the screenshots section there is a screenshot of my emails working on my phone which didn’t work in the past."}, {"post_id": 76982, "ts": "2026-10-05T08:08:31Z", "hours": 2.9119, "text": "Many improvements to the code and WE GOT ATTACHMENTS WORKING IN IMAP."}, {"post_id": 75043, "ts": "2026-09-28T23:50:28Z", "hours": 6.8733, "text": "We added the search command and improved the code quite signifigantly."}, {"post_id": 68380, "ts": "2026-09-15T01:06:50Z", "hours": 0.3844, "text": "Today we finished TLS WOOO. Now we actually have a secure IMAP server."}, {"post_id": 68002, "ts": "2026-09-14T11:09:28Z", "hours": 0.9003, "text": "We’ve pretty much finished our IMAP integration, we’ve added copy and expunge today and fixed our idle handler."}, {"post_id": 67889, "ts": "2026-09-14T05:57:27Z", "hours": 5.5586, "text": "I reworked the way we manage things listening in to the socket to add a proper listener module instead of having it all in the handle command function. The handle command function worked until now but now that we want commands that expect more data than just one line we do need to expand it to something more streamlined. Commands can now register listeners on the feed from the socket and remove them as they please in order for them to get the required data. We also added a few commands and Idling which allows email clients to idle instead of just sit and poll the server for new mail. I kinda changed the process buffer function so that it can dynamicly figure out if the newline is crlf or lf instead of guess and so it includes that in it’s output. Because we now have listeners we can now add the append command and it will recieve a stream of data from the listener."}, {"post_id": 66332, "ts": "2026-09-12T03:17:30Z", "hours": 1.1906, "text": "I allowed our IMAP parser to be able to understand parenthasis WOO, i had to change a little bit with our fetch function because it didn’t expect that and I added some more IMAP commands our command repertoire now looks like this."}, {"post_id": 65220, "ts": "2026-09-10T06:12:50Z", "hours": 2.4739, "text": "Users can now change their username, we also made many changes to the fetch function in the IMAP server to make it work properly. haha"}, {"post_id": 62680, "ts": "2026-09-06T05:13:18Z", "hours": 2.9642, "text": "IMAP Server WOOOOO! Today I made an IMAP server for the email server/client so it can be used with say Thunderbird. Now there’s a very very basic implementation but it’s there and you can read emails. WOO."}, {"post_id": 62050, "ts": "2026-09-05T08:47:23Z", "hours": 2.3347, "text": "I significantly improved the code for mailboxes. Now we have table for mailboxes and I also made it more clear which mailbox you’re currently in. This makes it easier for me to eventually implement IMAP."}, {"post_id": 61913, "ts": "2026-09-05T02:45:11Z", "hours": 1.6956, "text": "We have mailboxes now, you can move mail there and yeah."}, {"post_id": 55453, "ts": "2026-08-27T09:38:18Z", "hours": 1.2, "text": "We added custom mailboxes, you can now add and remove maliboxes but we can’t move emails there or setup filters."}, {"post_id": 53642, "ts": "2026-08-24T09:33:11Z", "hours": 1.5769, "text": "Today I completely revamped the way emails are stored in the database to make it better. I also added seen checking to mark emails as read. I added mail boxes as well instead of just inbox and sent so users can have custom mailboxes."}, {"post_id": 48724, "ts": "2026-08-17T07:52:59Z", "hours": 0.6217, "text": "We got replies working WOO, we can send emails, reply, recieve replies and continue on reply chains."}, {"post_id": 48056, "ts": "2026-08-16T10:34:05Z", "hours": 0.9753, "text": "We got attachments working WOOO"}, {"post_id": 47918, "ts": "2026-08-16T05:57:14Z", "hours": 0.6972, "text": "We got viewing our sent emails working"}, {"post_id": 47403, "ts": "2026-08-15T09:57:02Z", "hours": 1.4622, "text": "We can send emails from a ui now WOOO"}, {"post_id": 47337, "ts": "2026-08-15T06:53:01Z", "hours": 0.6708, "text": "We can read our emails now."}, {"post_id": 47304, "ts": "2026-08-15T05:25:04Z", "hours": 1.8989, "text": "We’ve started building the inbox, we can view our emails and see when they were sent to us."}, {"post_id": 46833, "ts": "2026-08-14T11:05:59Z", "hours": 1.3553, "text": "We added the Database, AND GOT RECIEVING EMAILS WORKING WOOOO"}, {"post_id": 46799, "ts": "2026-08-14T09:39:53Z", "hours": 1.11, "text": "We got sending emails, WOOO. No accounts yet but we can send emails over stmp."}]...
|
Title: MailOnAPI by @Drew_Fitzgerald | Stardance
Title: MailOnAPI by @Drew_Fitzgerald | Stardance
Devlogs:
We got sending emails, WOOO. No accounts yet but we can send emails over stmp.
We added the Database, AND GOT RECIEVING EMAILS WORKING WOOOO
We’ve started building the inbox, we can view our emails and see when they were sent to us.
We can read our emails now.
We can send emails from a ui now WOOO
We got viewing our sent emails working
We got attachments working WOOO
We got replies working WOO, we can send emails, reply, recieve replies and continue on reply chains.
Today I completely revamped the way emails are stored in the database to make it better. I also added seen checking to mark emails as read. I added mail boxes as well instead of just inbox and sent so users can have custom mailboxes.
We added custom mailboxes, you can now add and remove maliboxes but we can’t move emails there or setup filters.
We have mailboxes now, you can move mail there and yeah.
I significantly improved the code for mailboxes. Now we have table for mailboxes and I also made it more clear which mailbox you’re currently in. This makes it easier for me to eventually implement IMAP.
IMAP Server WOOOOO! Today I made an IMAP server for the email server/client so it can be used with say Thunderbird. Now there’s a very very basic implementation but it’s there and you can read emails. WOO.
Users can now change their username, we also made many changes to the fetch function in the IMAP server to make it work properly. haha
I allowed our IMAP parser to be able to understand parenthasis WOO, i had to change a little bit with our fetch function because it didn’t expect that and I added some more IMAP commands our command repertoire now looks like this.
I reworked the way we manage things listening in to the socket to add a proper listener module instead of having it all in the handle command function. The handle command function worked until now but now that we want commands that expect more data than just one line we do need to expand it to something more streamlined. Commands can now register listeners on the feed from the socket and remove them as they please in order for them to get the required data. We also added a few commands and Idling which allows email clients to idle instead of just sit and poll the server for new mail. I kinda changed the process buffer function so that it can dynamicly figure out if the newline is crlf or lf instead of guess and so it includes that in it’s output. Because we now have listeners we can now add the append command and it will recieve a stream of data from the listener.
We’ve pretty much finished our IMAP integration, we’ve added copy and expunge today and fixed our idle handler.
Today we finished TLS WOOO. Now we actually have a secure IMAP server.
We added the search command and improved the code quite signifigantly.
Many improvements to the code and WE GOT ATTACHMENTS WORKING IN IMAP.
So many improvements. We improved IMAP so much and added so many features to IMAP. We added custom headers (the big one this allows us to do spam checking) proper MIME and multipart handling, (work in progress) fetching BODYSTRUCTURE and fetching parts of an email. We fixed our server side searching allowing support for more and more email clients and instead of using multiple regex’s for the fetching the email body we now use one big regex which sends the server arguments for what was requested. All of this simply allows for: spam detection, better support, supporting more email clients, proper search and faster code. In the screenshots section there is a screenshot of my emails working on my phone which didn’t work in the past.
Ships:
I’ve made an email server, email client and an IMAP server to allow it to be used in external email clients. The IMAP server is quite feature ful to 2003 standards, um not recent standards it is a custom implementation of RFC3501 which is from 2003 but it was only made obsolete in 2022 and is still used by gmail for it’s IMAP so it’s still very well supported. Right now I’m using Resend as the email service to send out emails but the implementation makes it very easy to support more....
|
1793670767.9306269
|
1793757167.9306269
|
|
64259
|
OrbitBot by @eliziv027 | Stardance
|
eliziv027
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: OrbitBot by @eliziv027 | Stardance
|
1793670769.1673934
|
1794275569.1673934
|
|
17783
|
PepperPeople by @ThatFairyFijia | Stardance
|
ThatFairyFijia
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T00:39:39Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first blog– PepperPeople! I’m really proud of this being my first fully fleshed out ship, and while it may not look the prettiest sometimes, it’s something I’ve poured heart, soul, and interest into and finished until the end. Maybe I’ll even keep up the project later on. Though please note, the gardening tips sections are still works in progress for later on. This ship is primarily for the work I’ve done on the home page and pepper species.", "repo": "https://github.com/ZoomingLightningbugGirl/PepperBlog", "demo": "https://zoominglightningbuggirl.github.io/PepperBlog/"}]...
|
[{"post_id": 75410, "ts": "202 [{"post_id": 75410, "ts": "2026-09-30T00:35:41Z", "hours": 0.9111, "text": "Primarily quality of life fixes, as I’ve been working on improving my home page and landing page"}, {"post_id": 22573, "ts": "2026-07-05T03:05:09Z", "hours": 3.3794, "text": "Essentially, this is a website I made while I was still fresh as a developer. I’ve primarily been going through this old site and debugging it and replacing it with more sophisticated coding practices. I also intend to make it more robust and styled better (my color palette picking was NOT the best, back then). I anticipate I will also apply some JavaScript into this project. So far, I’ve replaced non-semantic elements like with more semantic elements like to help with screen readers and SEO. I also have been deleting all the elements I put in while I didn’t know what the margin attribute was… yikes O.O I also coded an image carousel that I’ll be implementing on some of the variety pages soon, and I’m looking to code a new feature that creates a drop-down on the maintenance page for each topic. This would be mainly organizational."}]...
|
Title: PepperPeople by @ThatFairyFijia | Stardance Title: PepperPeople by @ThatFairyFijia | Stardance
Devlogs:
Essentially, this is a website I made while I was still fresh as a developer. I’ve primarily been going through this old site and debugging it and replacing it with more sophisticated coding practices. I also intend to make it more robust and styled better (my color palette picking was NOT the best, back then). I anticipate I will also apply some JavaScript into this project. So far, I’ve replaced non-semantic elements like with more semantic elements like to help with screen readers and SEO. I also have been deleting all the elements I put in while I didn’t know what the margin attribute was… yikes O.O I also coded an image carousel that I’ll be implementing on some of the variety pages soon, and I’m looking to code a new feature that creates a drop-down on the maintenance page for each topic. This would be mainly organizational.
Primarily quality of life fixes, as I’ve been working on improving my home page and landing page
Ships:
I made my first blog– PepperPeople! I’m really proud of this being my first fully fleshed out ship, and while it may not look the prettiest sometimes, it’s something I’ve poured heart, soul, and interest into and finished until the end. Maybe I’ll even keep up the project later on. Though please note, the gardening tips sections are still works in progress for later on. This ship is primarily for the work I’ve done on the home page and pepper species....
|
1793670770.0440493
|
1793757170.0440493
|
|
64260
|
My own site! by @flavioadrian2023 | Stardance
|
flavioadrian2023
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @flavioadrian2023 | Stardan Title: My own site! by @flavioadrian2023 | Stardance...
|
1793670771.2069952
|
1794275571.2069952
|
|
42916
|
willie and lue :D by @lueyun | Stardance
|
lueyun
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T06:50:31Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "hello guys! i present to you my personal website!! this project introduced me to many things, and some of them include how much variety there is to the world of coding. there is so much you can do, and also many places to start. i hope you like this (boring-ish) personal website about my characters and me!!", "repo": "https://github.com/lueyun0110/willie-and-lue-website", "demo": "https://lueyun0110.github.io/willie-and-lue-website/website/"}]...
|
[{"post_id": 74347, "ts": "202 [{"post_id": 74347, "ts": "2026-09-27T06:47:02Z", "hours": 0.6217, "text": "day 6? HIII i finally figured out my dilemma with my shipping issue!! even though this personalized website isn’t that extraordinary, i hope you get to understand my ocs (+ me)!"}, {"post_id": 72103, "ts": "2026-09-22T05:28:08Z", "hours": 0.7317, "text": "day 5 haha short update- i just added the final touch-ups: new page to show you guys their latest adventures new button to direct you to it now i need to figure out how to ship this 🥲🥲"}, {"post_id": 72081, "ts": "2026-09-22T04:06:24Z", "hours": 2.6869, "text": "day 4 hello!! im back 😎😎 ive been very off lately due to school but its alright. i really wanted to keep on doing this, so here i am! heres what i did: added CSS (color, font, sizing, etc) added gifs to make this website have personality lol changed the instagram link to just instagram username i’m planning on making final touches as this is close to being finished (imo lol)"}, {"post_id": 65225, "ts": "2026-09-10T06:35:56Z", "hours": 1.1033, "text": "day 3 hi guys!! long time no see…. ive been recently busy with many things. i have no clue what to do so this project will take longer than expected. 😓😓 anyways, i added: -more for their backstory -added a NEW page about myself since this website is a personal one to introduce the world to yourself hahaa…. -finally using css to format this website i hope to continue more on the format because rn, this looks so bright 😭"}, {"post_id": 39892, "ts": "2026-08-03T05:31:21Z", "hours": 0.8778, "text": "day 2 heh this is where i wanted to add more, but i truly didn’t know how, so i decided to go with some lore/background info about them. i added a new page with buttons to go back and forth with so everything can be kept organized. the lore is currently incomplete as i made them all in the spot (💀) so im planning on updating them soon (not very soon though). as for the visuals, i plan on doing them later since i want to get the main stuff done :D"}, {"post_id": 39838, "ts": "2026-08-03T02:57:15Z", "hours": 0.4386, "text": "starting a personal website for willie and lue! its my first time coding html btw ahah but heres a simple introduction of my two adventurous ocs!! i want to expand on this by documenting more about their adventures than posting on insta 😅 as for right now, i added a title, brief introduction, image to see who they are, and outside links if you want to check out some of their adventures im planning on (well attempting to) create something interactive that will bring both characters alive… idk when that will be so we shall seee 👀✨"}]...
|
Title: willie and lue :D by @lueyun | Stardance
D Title: willie and lue :D by @lueyun | Stardance
Devlogs:
starting a personal website for willie and lue! its my first time coding html btw ahah but heres a simple introduction of my two adventurous ocs!! i want to expand on this by documenting more about their adventures than posting on insta 😅 as for right now, i added a title, brief introduction, image to see who they are, and outside links if you want to check out some of their adventures im planning on (well attempting to) create something interactive that will bring both characters alive… idk when that will be so we shall seee 👀✨
day 2 heh this is where i wanted to add more, but i truly didn’t know how, so i decided to go with some lore/background info about them. i added a new page with buttons to go back and forth with so everything can be kept organized. the lore is currently incomplete as i made them all in the spot (💀) so im planning on updating them soon (not very soon though). as for the visuals, i plan on doing them later since i want to get the main stuff done :D
day 3 hi guys!! long time no see…. ive been recently busy with many things. i have no clue what to do so this project will take longer than expected. 😓😓 anyways, i added: -more for their backstory -added a NEW page about myself since this website is a personal one to introduce the world to yourself hahaa…. -finally using css to format this website i hope to continue more on the format because rn, this looks so bright 😭
day 4 hello!! im back 😎😎 ive been very off lately due to school but its alright. i really wanted to keep on doing this, so here i am! heres what i did: added CSS (color, font, sizing, etc) added gifs to make this website have personality lol changed the instagram link to just instagram username i’m planning on making final touches as this is close to being finished (imo lol)
day 5 haha short update- i just added the final touch-ups: new page to show you guys their latest adventures new button to direct you to it now i need to figure out how to ship this 🥲🥲
day 6? HIII i finally figured out my dilemma with my shipping issue!! even though this personalized website isn’t that extraordinary, i hope you get to understand my ocs (+ me)!
Ships:
hello guys! i present to you my personal website!! this project introduced me to many things, and some of them include how much variety there is to the world of coding. there is so much you can do, and also many places to start. i hope you like this (boring-ish) personal website about my characters and me!!...
|
1793670772.1728601
|
1793757172.1728601
|
|
42920
|
Personal Portfolio Website by @self-taught-scribe Personal Portfolio Website by @self-taught-scribe | Stardance...
|
self-taught-scribe
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T01:09:23Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This started as a school web dev assessment and passion project I’ve been meaning to do for a while, but quickly grew way past that. I built a full portfolio site with a Catppuccin based light/dark theme, Home/About/Blog/Projects/Contact pages, and a system that auto-generates cards for blog posts and projects from JSON data. Along the way I fixed a bunch of bugs, such as my broken image fallback logic (was checking .ok on an unresolved fetch Promise), an undiscoverable native multi-select filter (replaced with clickable pill buttons), a missing closing that broke my page layout, and hardcoded NZ date formatting. The part I’m proudest of is three live data widgets. They’re a GitHub commit tracker, a GitHub contribution graph matching my profile heatmap, and a Hackatime coding time dashboard. All three needed lots of debugging. I finished by adding responsive breakpoints, since none of my layouts adapted to mobile at all. Most of this project was debugging, not writing new code, which taught me more than the actual building did.", "repo": "https://github.com/Astral-Scribe/Personal-Portfolio-Site", "demo": "https://owhitedevportfolio.ddns.net/"}]...
|
[{"post_id": 61892, "ts": "202 [{"post_id": 61892, "ts": "2026-09-05T01:53:12Z", "hours": 6.1092, "text": "This started as a school web dev assessment and passion project I’ve been meaning to do for a while, but quickly grew way past that. I built a full portfolio site with a Catppuccin based light/dark theme, Home/About/Blog/Projects/Contact pages, and a system that auto-generates cards for blog posts and projects from JSON data. Along the way I fixed a bunch of bugs, such as my broken image fallback logic (was checking .ok on an unresolved fetch Promise), an undiscoverable native multi-select filter (replaced with clickable pill buttons), a missing closing that broke my page layout, and hardcoded NZ date formatting. The part I’m proudest of is three live data widgets. They’re a GitHub commit tracker, a GitHub contribution graph matching my profile heatmap, and a Hackatime coding time dashboard. All three needed lots of debugging. I finished by adding responsive breakpoints, since none of my layouts adapted to mobile at all. Most of this project was debugging, not writing new code, which taught me more than the actual building did."}]...
|
Title: Personal Portfolio Website by @self-taught- Title: Personal Portfolio Website by @self-taught-scribe | Stardance
Devlogs:
This started as a school web dev assessment and passion project I’ve been meaning to do for a while, but quickly grew way past that. I built a full portfolio site with a Catppuccin based light/dark theme, Home/About/Blog/Projects/Contact pages, and a system that auto-generates cards for blog posts and projects from JSON data. Along the way I fixed a bunch of bugs, such as my broken image fallback logic (was checking .ok on an unresolved fetch Promise), an undiscoverable native multi-select filter (replaced with clickable pill buttons), a missing closing that broke my page layout, and hardcoded NZ date formatting. The part I’m proudest of is three live data widgets. They’re a GitHub commit tracker, a GitHub contribution graph matching my profile heatmap, and a Hackatime coding time dashboard. All three needed lots of debugging. I finished by adding responsive breakpoints, since none of my layouts adapted to mobile at all. Most of this project was debugging, not writing new code, which taught me more than the actual building did.
Ships:
This started as a school web dev assessment and passion project I’ve been meaning to do for a while, but quickly grew way past that. I built a full portfolio site with a Catppuccin based light/dark theme, Home/About/Blog/Projects/Contact pages, and a system that auto-generates cards for blog posts and projects from JSON data. Along the way I fixed a bunch of bugs, such as my broken image fallback logic (was checking .ok on an unresolved fetch Promise), an undiscoverable native multi-select filter (replaced with clickable pill buttons), a missing closing that broke my page layout, and hardcoded NZ date formatting. The part I’m proudest of is three live data widgets. They’re a GitHub commit tracker, a GitHub contribution graph matching my profile heatmap, and a Hackatime coding time dashboard. All three needed lots of debugging. I finished by adding responsive breakpoints, since none of my layouts adapted to mobile at all. Most of this project was debugging, not writing new code, which taught me more than the actual building did....
|
1793670773.353501
|
1793757173.353501
|
|
64261
|
My own site! by @mehanth | Stardance
|
mehanth
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @mehanth | Stardance
|
1793670774.4922762
|
1794275574.4922762
|
|
47789
|
Whats-the-tea by @Zemra | Stardance
|
Zemra
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T13:46:38Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Slack bot called “What’s the Tea?” ☕️ I originally wanted it to fetch news and this is the first version of that idea. The challenging part was setting up the Slack app and figuring out how everything worked. This was also my first time working with JavaScript, so there was definitely a lot of learning and figuring things out along the way. I’m most proud of actually getting something to work and shipping my first project. This is my first ship and even though it’s a small project, going from an idea to something I could actually run in Slack feels really good. The current version is a prototype, so the news-fetching feature isn’t implemented yet though you can still try it on Slack.", "repo": "https://github.com/av-arch-bit/Whats-the-tea", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 63827, "ts": "202 [{"post_id": 63827, "ts": "2026-09-07T19:59:27Z", "hours": 0.4058, "text": "A bot that gives you news so you stay updated"}]...
|
Title: Whats-the-tea by @Zemra | Stardance
Devlog Title: Whats-the-tea by @Zemra | Stardance
Devlogs:
A bot that gives you news so you stay updated
Ships:
I made a Slack bot called “What’s the Tea?” ☕️ I originally wanted it to fetch news and this is the first version of that idea. The challenging part was setting up the Slack app and figuring out how everything worked. This was also my first time working with JavaScript, so there was definitely a lot of learning and figuring things out along the way. I’m most proud of actually getting something to work and shipping my first project. This is my first ship and even though it’s a small project, going from an idea to something I could actually run in Slack feels really good. The current version is a prototype, so the news-fetching feature isn’t implemented yet though you can still try it on Slack....
|
1793670775.388036
|
1793757175.388036
|
|
42942
|
PikaOS by @notvedansh | Stardance
|
notvedansh
|
1
|
29.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T08:32:02Z", "hours": 29.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The main idea behind this project was to make an operating system with a virtual assistant, so I chose Pikachu as the main theme. Now, for the cool features: the Pikachu assistant can move on your screen. Clicking it will make it stop, and it will open a panel where you can type things from a selected range of inputs that will make Pikachu do the certain things I have written about in my devlogs; you can see those. Well, it also has a terminal and a file manager which are fully functional. The main thing I see from this project is a base for version 2 of the project. I have a set of goals which I would complete in the next version. I think I learned a lot from handling the CMake errors; at least, I think almost every time I compiled the code, I had at least atleast one error. And yh i think that’s it.", "repo": "https://github.com/vedansh201/PikaOS", "demo": "https://github.com/vedansh201/PikaOS/releases/tag/Version-1"}]...
|
[{"post_id": 74985, "ts": "202 [{"post_id": 74985, "ts": "2026-09-28T19:35:22Z", "hours": 1.5372, "text": "#Final Devlog Alright so yeah you all haven’t heard from me in a while now, and I am very,, very sorry for that like I couldn’t manage a project of this level with my daily life and there were some family complications. But long story short, I created version 1 of this operating system. Now it’s not fancy and does not have all the desired features i promised it would have, but it’s version 1 so yeah. There will be new versions of this, and I think the next version will be the final version of it. I am proud of it what i have made, like, most of my time was wasted in handling the cmake errors so yeah, but still I think it has the perfect base for upcoming features. And for what i did to complete it - i did all the wiring of the system like i completed the main base and did the panel work so like now when we click the start button it opens a panel with two options file manager and terminal. So yeah, that’s it, guys: version 1 of PikaOS is finally complete."}, {"post_id": 60166, "ts": "2026-09-02T11:43:24Z", "hours": 8.6597, "text": "Devlog 6 Well, every Operating system needs a file manager, so I completed one. It now has folder navigation, sidebar locations, creating files and folders, renaming, deleting, properties, right-click menus, multi-selection, and multi-file copy/cut/paste. I have added it to the assistant so that typing “open files” will open the file manager. Now I will add more features to this, but I want to complete the base of the whole O.S. first. I had to handle so many CMake errors; handling them took most of my time."}, {"post_id": 52281, "ts": "2026-08-22T12:01:52Z", "hours": 5.48, "text": "Devlog 5 Well sorry for the late devlog i was little busy with my school life. The good thing is the terminal is now finally ready in the operating system. I initially had the terminal running Bash through QProcess, which worked for simple commands, but it had limitations. Things like Ctrl+C, interactive programs, terminal formatting, and commands such as ping weren’t behaving like they would in a real terminal. So I switched to a PTY (pseudo-terminal) approach using Linux’s forkpty(). Last time u saw the assistant working, I also connected my assistant to this terminal, not the Konsole which I was using earlier. Also sorry for the vid quality and voice"}, {"post_id": 44732, "ts": "2026-08-10T17:52:16Z", "hours": 3.9169, "text": "Devlog 4 So I don’t think I have mentioned why I’m tinkering with a Pikachu image. So I think it’s time to reveal to you my plan for this operating system. I wanted my operating system to have an assistant that would help with small tasks such as creating folders open terminal. So, like now, when you click Pikachu, you will open a dialogue box in which you can type things. ** FEW FUNCTIONS IT CAN DO RIGHT NOW ** –> It can open the terminal. –> It can tell the battery status. –> It can tell the date and time. –> It can create files and folders. –> It has a help command too, so that if you want to know what things it can do. Now, what happens when you type something it doesn’t understand? It says, “I don’t know this command”. I will be improving the assistant more in the upcoming days, but setting up the logic for this much part only is exhausting."}, {"post_id": 42787, "ts": "2026-08-07T17:52:08Z", "hours": 3.2186, "text": "Devlog 3 So, over the last two days, I spent making Pikachu move left to right; I mean, now Pikachu can move a random distance in a random time. He can move 50 pixels in the left direction and then wait for some random time and then start moving again in random directions. Also, it flips the image, so if it moves left, the image gets flipped, and up and down motion is as it is. Now this may seem very little, but trust me, the level of errors I have encountered is crazy. Here is a video attached. ignore the vid quality."}, {"post_id": 41232, "ts": "2026-08-05T09:40:04Z", "hours": 2.2336, "text": "Devlog 2 So after spending a considerable amount of time thinking about which thing to start from, I went with polishing the Pikachu transparent image I have on the desktop. So now it is draggable!! And you can drag it from one place to another. I also added a simple up-and-down animation to it. So now the image moves up and down, and once you drag it to some other place, it will do the same at that place too. My plan for it is that after this, I will add walking, sleeping and idle motion. PS - sorry for the video quality."}, {"post_id": 40806, "ts": "2026-08-04T15:53:23Z", "hours": 3.6608, "text": "#Devlog 1 So I planned to build an operating system that is built around my favourite Pokémon, Pikachu. I am building it in Oracle VirtualBox. I will mainly use C++ for this because they are faster and also because I want to build something using my C++ skills. So what I did is not that interesting: I set up my vbox, installed git and connected hackatime to it. What I actually coded: Created a dedicated Pikachuwidget Loaded the sprite through Qt’s resource system Fixed resource loading issues and CMake errors I downloaded an image from browser that is transparent and added it to the desktop layer of pikashell. I also added functions so that it shows the time in the panel. Now I know it sounds simple, but it took me lots of time to figure out why the image is not showing up on the desktop layer."}]...
|
Title: PikaOS by @notvedansh | Stardance
Devlogs: Title: PikaOS by @notvedansh | Stardance
Devlogs:
#Devlog 1 So I planned to build an operating system that is built around my favourite Pokémon, Pikachu. I am building it in Oracle VirtualBox. I will mainly use C++ for this because they are faster and also because I want to build something using my C++ skills. So what I did is not that interesting: I set up my vbox, installed git and connected hackatime to it. What I actually coded: Created a dedicated Pikachuwidget Loaded the sprite through Qt’s resource system Fixed resource loading issues and CMake errors I downloaded an image from browser that is transparent and added it to the desktop layer of pikashell. I also added functions so that it shows the time in the panel. Now I know it sounds simple, but it took me lots of time to figure out why the image is not showing up on the desktop layer.
Devlog 2 So after spending a considerable amount of time thinking about which thing to start from, I went with polishing the Pikachu transparent image I have on the desktop. So now it is draggable!! And you can drag it from one place to another. I also added a simple up-and-down animation to it. So now the image moves up and down, and once you drag it to some other place, it will do the same at that place too. My plan for it is that after this, I will add walking, sleeping and idle motion. PS - sorry for the video quality.
Devlog 3 So, over the last two days, I spent making Pikachu move left to right; I mean, now Pikachu can move a random distance in a random time. He can move 50 pixels in the left direction and then wait for some random time and then start moving again in random directions. Also, it flips the image, so if it moves left, the image gets flipped, and up and down motion is as it is. Now this may seem very little, but trust me, the level of errors I have encountered is crazy. Here is a video attached. ignore the vid quality.
Devlog 4 So I don’t think I have mentioned why I’m tinkering with a Pikachu image. So I think it’s time to reveal to you my plan for this operating system. I wanted my operating system to have an assistant that would help with small tasks such as creating folders open terminal. So, like now, when you click Pikachu, you will open a dialogue box in which you can type things. ** FEW FUNCTIONS IT CAN DO RIGHT NOW ** –> It can open the terminal. –> It can tell the battery status. –> It can tell the date and time. –> It can create files and folders. –> It has a help command too, so that if you want to know what things it can do. Now, what happens when you type something it doesn’t understand? It says, “I don’t know this command”. I will be improving the assistant more in the upcoming days, but setting up the logic for this much part only is exhausting.
Devlog 5 Well sorry for the late devlog i was little busy with my school life. The good thing is the terminal is now finally ready in the operating system. I initially had the terminal running Bash through QProcess, which worked for simple commands, but it had limitations. Things like Ctrl+C, interactive programs, terminal formatting, and commands such as ping weren’t behaving like they would in a real terminal. So I switched to a PTY (pseudo-terminal) approach using Linux’s forkpty(). Last time u saw the assistant working, I also connected my assistant to this terminal, not the Konsole which I was using earlier. Also sorry for the vid quality and voice
Devlog 6 Well, every Operating system needs a file manager, so I completed one. It now has folder navigation, sidebar locations, creating files and folders, renaming, deleting, properties, right-click menus, multi-selection, and multi-file copy/cut/paste. I have added it to the assistant so that typing “open files” will open the file manager. Now I will add more features to this, but I want to complete the base of the whole O.S. first. I had to handle so many CMake errors; handling them took most of my time.
#Final Devlog Alright so yeah you all haven’t heard from me in a while now, and I am very,, very sorry for that like I couldn’t manage a project of this level with my daily life and there were some family complications. But long story short, I created version 1 of this operating system. Now it’s not fancy and does not have all the desired features i promised it would have, but it’s version 1 so yeah. There will be new versions of this, and I think the next version will be the final version of it. I am proud of it what i have made, like, most of my time was wasted in handling the cmake errors so yeah, but still I think it has the perfect base for upcoming features. And for what i did to complete it - i did all the wiring of the system like i completed the main base and did the panel work so like now when we click the start button it opens a panel with two options file manager and terminal. So yeah, that’s it, guys: version 1 of PikaOS is finally complete.
Ships:
The main idea behind this project was to make an operating system with a virtual assistant, so I chose Pikachu as the main theme. Now, for the cool features: the Pikachu assistant can move on your screen. Clicking it will make it stop, and it will open a panel where you can type things from a selected range of inputs that will make Pikachu do the certain things I have written about in my devlogs; you can see those. Well, it also has a terminal and a file manager which are fully functional. The main thing I see from this project is a base for version 2 of the project. I have a set of goals which I would complete in the next version. I think I learned a lot from handling the CMake errors; at least, I think almost every time I compiled the code, I had at least atleast one error. And yh i think that’s it....
|
1793670776.5247478
|
1793757176.5247478
|
|
64262
|
Self landing model rocket by @Theotqqz | Stardance
|
Theotqqz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Self landing model rocket by @Theotqqz | St Title: Self landing model rocket by @Theotqqz | Stardance...
|
1793670777.757715
|
1794275577.757715
|
|
64263
|
My very own WebOS by @temptest1 | Stardance
|
temptest1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @temptest1 | Stardance
|
1793670778.6579297
|
1794275578.6579297
|
|
42948
|
Space-Os by @joelj | Stardance
|
joelj
|
2
|
35.0
|
179
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T15:59:16Z", "hours": 25.0, "multiplier": 7.2, "payout": 179, "blessing": "neutral", "text": "I made Space Os , the better version of my WebOs 1 project . IT includes these new features : 1. Local storage : stores data inside browser - Space notes : new logs will be stored inside local storage and the next time u open it the same notes will be present - Login page : Added a login page , it uses local storage to store username and password and the nxt time u log in , it makes sure ur things are the same 2. Theme changer: Uses custom variables to change the color and glow after pressing the button . 3. Music : There is a music button which plays the mp3 music😁 4. Calculator : Added a custom scientific calculator , with all complex functions😭 Problems : i keep making spelling mistakes while typing fast . - Local storage was extermly complex(atleast for me ) and was a completly new topic for me - Calculator : too many buttons , too many functions Learning : other than learning how to make these . i learned abt persistence , how to keep working even though nothing works and discipline , on how to work each day", "repo": "https://github.com/Johan-jim123/JJ-OS", "demo": "https://johan-jim123.github.io/Space-Os/"}, {"ship_num": 2, "ts": "2026-09-07T03:25:53Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Space themed Operating system .(or aleast tried to 😅) It features a : - Welcome page : introduces the os -Space notes : a notes app based on actual nasa apollo framework - Orbital rader: a visual representation of our dear solar system with a small description for each planet - Custom cursor : a small cute rocket Main problems : The hacktime setup : this was the problem that took the longest . The standard WakaTime extension out of the box was attempting to sync with official WakaTime proprietary servers rather than the specialized Hackatime endpoints, resulting in broke communication loops. Small bugs for each feature : Its always there , its expected and we can solve them -The curser problem : The custom cursor was only apearng in the main html and not the iframes Things i learned : -How to use html and code a site Mastered divs -Used css a lot Most importantly : Persistence and determination", "repo": "https://github.com/Johan-jim123/JJ-OS", "demo": "https://johan-jim123.github.io/Space-Os/"}]...
|
[{"post_id": 84375, "ts": "202 [{"post_id": 84375, "ts": "2026-10-29T15:54:09Z", "hours": 0.4969, "text": "#Final devlog: New features (from WebOs1): 1. Local storage : stores data inside browser - Space notes : new logs will be stored inside local storage and the next time u open it the same notes will be present - Login page : Added a login page , it uses local storage to store username and password and the nxt time u log in , it makes sure ur things are the same 2. Theme changer: Uses custom variables to change the color and glow after pressing the button . 3. Music : There is a music button which plays the mp3 music😁 4. Calculator : Added a custom scientific calculator , with all complex functions😭"}, {"post_id": 84326, "ts": "2026-10-29T13:45:54Z", "hours": 8.2817, "text": "Devlog#6 : -Made a scienctific calculator has the core funcitons Addition , Subtraction , MUltiplication , Division Has the more complex funciton like log , trigo and factorials . Most of which i had to write a new function for 😭 -credits to CodeExplained for the tutorial"}, {"post_id": 76617, "ts": "2026-10-04T06:01:35Z", "hours": 2.1844, "text": "Devlog#5😁: -Added the music feature ( now you will be able to listenspace ambience) -Added a button to activate it -My codespace is back to copied my code from pycharm to there🥳🥳"}, {"post_id": 74339, "ts": "2026-09-27T06:16:59Z", "hours": 0.6183, "text": "Devlog #4😎😎 : -Made different themes : Using css variables theme-color and theme-glow , changed the look of all elemtns based on the theme . Added the Mode//button to change the theme -Added a special theme button to the notes app so u can miss-match theme combos"}, {"post_id": 73835, "ts": "2026-09-26T03:46:58Z", "hours": 3.56, "text": "Devlog#3 : -added a login-page 😁😁 -my free codespaces ended , so switched to pycharmm used the localstorage to save ur username and password"}, {"post_id": 69711, "ts": "2026-09-17T16:56:22Z", "hours": 4.4192, "text": "Devlog#2: -added localStorage: Bascially u store ur data locally so that when u refresh ur window or clsoe it it doesnt dissapear Added this feature to my Space notes , now u guys r able to add more logs TOO MUCH DEBUGING😭😭"}, {"post_id": 66586, "ts": "2026-09-12T13:05:32Z", "hours": 5.2986, "text": "Rewrote the entire css and made base for the new apps"}, {"post_id": 63321, "ts": "2026-09-07T02:36:26Z", "hours": 0.8678, "text": "Devlog#8: Made a visual representation of our solar system added all our planets (srry pluto) -visualised them with the glowing circle -Made a CUSTOM curser (the little rocket) -with particles that follow it Guys this marks the end of my WebOS 1. thanks for all your support that pushed me this far . See you on WebOs2"}, {"post_id": 62705, "ts": "2026-09-06T06:08:41Z", "hours": 1.4828, "text": "Devlog#7🥳: worked on my space notes app designed it based on real nasa notes and framework😎 -added 4 logs containing actual notes from the apollo and other renowned missions -Made the new log button , helping the user to create their own logs"}, {"post_id": 62025, "ts": "2026-09-05T07:34:54Z", "hours": 1.8303, "text": "Devlog#6👍: Made a new app ( Space notes)😎 -Added it to the desktop with a animated icon -Created a window for the app -Created functions to make the selected window come front -Solved bugs that came with it😭"}, {"post_id": 61361, "ts": "2026-09-04T07:29:35Z", "hours": 1.5322, "text": "Devlog#5😁:(spend a lot more time than i expected) Made the window draggable (by the heading) -Added the close and open buttons ( nasa themed😎 Made the class for those buttons -solved the bugs that came with each step"}, {"post_id": 60919, "ts": "2026-09-03T16:05:51Z", "hours": 0.9767, "text": "Devlog #4 😎: Make the destop of the Os and added my welcome page to it -customized the welcome page by finding this cool bg and added different styles to my div (8 to be precise 😭 ) and solved the bugs that came with it Make the clock and customized it with the Courier New font"}, {"post_id": 60323, "ts": "2026-09-02T16:35:01Z", "hours": 0.3964, "text": "Devlog #4 : - Made a working demo link , started with the Live Server extension by Ritwick Dey. But the link doesn’t work when the codespace is offline 😭. - Then i decided to make a github page which provided as a vaiable solution and allowed to run the website even without the codespace being online 😎."}, {"post_id": 59603, "ts": "2026-09-01T14:52:17Z", "hours": 0.9997, "text": "Worked on these neon pop up texts and found a good bg . Solved many bugs (that’s why it took soo loong 😭)"}, {"post_id": 59018, "ts": "2026-08-31T16:30:05Z", "hours": 0.4831, "text": "Added a coulourful bg , and worked wiht different fonts and colours 😎😎"}, {"post_id": 58182, "ts": "2026-08-30T15:18:00Z", "hours": 1.7658, "text": "Yoo started working on the project 😎. Finally figured out the hacktime in codespace😅. hope to create something speciall!"}]...
|
Title: Space-Os by @joelj | Stardance
Devlogs:
Yo Title: Space-Os by @joelj | Stardance
Devlogs:
Yoo started working on the project 😎. Finally figured out the hacktime in codespace😅. hope to create something speciall!
Added a coulourful bg , and worked wiht different fonts and colours 😎😎
Worked on these neon pop up texts and found a good bg . Solved many bugs (that’s why it took soo loong 😭)
Devlog #4 : - Made a working demo link , started with the Live Server extension by Ritwick Dey. But the link doesn’t work when the codespace is offline 😭. - Then i decided to make a github page which provided as a vaiable solution and allowed to run the website even without the codespace being online 😎.
Devlog #4 😎: Make the destop of the Os and added my welcome page to it -customized the welcome page by finding this cool bg and added different styles to my div (8 to be precise 😭 ) and solved the bugs that came with it Make the clock and customized it with the Courier New font
Devlog#5😁:(spend a lot more time than i expected) Made the window draggable (by the heading) -Added the close and open buttons ( nasa themed😎 Made the class for those buttons -solved the bugs that came with each step
Devlog#6👍: Made a new app ( Space notes)😎 -Added it to the desktop with a animated icon -Created a window for the app -Created functions to make the selected window come front -Solved bugs that came with it😭
Devlog#7🥳: worked on my space notes app designed it based on real nasa notes and framework😎 -added 4 logs containing actual notes from the apollo and other renowned missions -Made the new log button , helping the user to create their own logs
Devlog#8: Made a visual representation of our solar system added all our planets (srry pluto) -visualised them with the glowing circle -Made a CUSTOM curser (the little rocket) -with particles that follow it Guys this marks the end of my WebOS 1. thanks for all your support that pushed me this far . See you on WebOs2
Rewrote the entire css and made base for the new apps
Devlog#2: -added localStorage: Bascially u store ur data locally so that when u refresh ur window or clsoe it it doesnt dissapear Added this feature to my Space notes , now u guys r able to add more logs TOO MUCH DEBUGING😭😭
Devlog#3 : -added a login-page 😁😁 -my free codespaces ended , so switched to pycharmm used the localstorage to save ur username and password
Devlog #4😎😎 : -Made different themes : Using css variables theme-color and theme-glow , changed the look of all elemtns based on the theme . Added the Mode//button to change the theme -Added a special theme button to the notes app so u can miss-match theme combos
Devlog#5😁: -Added the music feature ( now you will be able to listenspace ambience) -Added a button to activate it -My codespace is back to copied my code from pycharm to there🥳🥳
Devlog#6 : -Made a scienctific calculator has the core funcitons Addition , Subtraction , MUltiplication , Division Has the more complex funciton like log , trigo and factorials . Most of which i had to write a new function for 😭 -credits to CodeExplained for the tutorial
#Final devlog: New features (from WebOs1): 1. Local storage : stores data inside browser - Space notes : new logs will be stored inside local storage and the next time u open it the same notes will be present - Login page : Added a login page , it uses local storage to store username and password and the nxt time u log in , it makes sure ur things are the same 2. Theme changer: Uses custom variables to change the color and glow after pressing the button . 3. Music : There is a music button which plays the mp3 music😁 4. Calculator : Added a custom scientific calculator , with all complex functions😭
Ships:
I made a Space themed Operating system .(or aleast tried to 😅) It features a : - Welcome page : introduces the os -Space notes : a notes app based on actual nasa apollo framework - Orbital rader: a visual representation of our dear solar system with a small description for each planet - Custom cursor : a small cute rocket Main problems : The hacktime setup : this was the problem that took the longest . The standard WakaTime extension out of the box was attempting to sync with official WakaTime proprietary servers rather than the specialized Hackatime endpoints, resulting in broke communication loops. Small bugs for each feature : Its always there , its expected and we can solve them -The curser problem : The custom cursor was only apearng in the main html and not the iframes Things i learned : -How to use html and code a site Mastered divs -Used css a lot Most importantly : Persistence and determination
I made Space Os , the better version of my WebOs 1 project . IT includes these new features : 1. Local storage : stores data inside browser - Space notes : new logs will be stored inside local storage and the next time u open it the same notes will be present - Login page : Added a login page , it uses local storage to store username and password and the nxt time u log in , it makes sure ur things are the same 2. Theme changer: Uses custom variables to change the color and glow after pressing the button . 3. Music : There is a music button which plays the mp3 music😁 4. Calculator : Added a custom scientific calculator , with all complex functions😭 Problems : i keep making spelling mistakes while typing fast . - Local storage was extermly complex(atleast for me ) and was a completly new topic for me - Calculator : too many buttons , too many functions Learning : other than learning how to make these . i learned abt persistence , how to keep working even though nothing works and discipline , on how to work each day...
|
1793670779.5596027
|
1793757179.5596027
|
|
36389
|
Cyberdeck by @sn3ak | Stardance
|
sn3ak
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T19:01:42Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my cyberdeck. Its powered by a raspberry pi 5 and has a 5 inch touchscreen. it is also equipped with a touch pad and keyboard (yes the keyboard says keyboard on it). This is my first hardware project, I have learnt many new things like how to 3d design and how to use a 3d printer. Stardance has really motivated me to complete this project as before it was just an idea in my head that would probably never see the light of day.", "repo": "https://github.com/sn3ak14/Cyberdeck", "demo": ""}]...
|
[{"post_id": 74960, "ts": "202 [{"post_id": 74960, "ts": "2026-09-28T18:13:56Z", "hours": 2.6008, "text": "I finished! After a lot of work and tears a I have finished my cyberdeck! I am ready to ship my project thank you all for the support and good luck with your projects."}, {"post_id": 65499, "ts": "2026-09-10T18:01:27Z", "hours": 2.0503, "text": "New prototype design. I took a break from the project but I’m back now and have decided to take a different approach to the design, rather than putting it inside of a pelican case I’m making its own outer shell this new design should be a lot smaller and easier to work with it is currently a very crude and basic design but this will change, don’t worry. I plan on printing it very soon."}, {"post_id": 37751, "ts": "2026-07-30T17:42:09Z", "hours": 0.5, "text": "Printed the base for my Cyberdeck. I finely was able to print the bottom half of the deck and it went well! the keyboard hole was to small and I haven’t ordered the trackpad yet so I don’t know if it fits. My biggest problem right now is I cant 3d print parts all the time and usually have to wait days between designs this is because I have to travel to use the 3D printer and it also is a shared printer so I cant always use it making time between prints take ages hopefully when I ship my project I will be able to get a 3d printer it would make all of my future projects so much easier to do. Next I plan on printing MK2 for the top half of the design and after I iron out all of the problems I can start to make the deck look amazing."}, {"post_id": 34777, "ts": "2026-07-25T19:24:27Z", "hours": 0.2836, "text": "MK2 Cyberdeck panel. I re-model MK1 to have a better fit for all of the components and rearranged them a bit however the Cyberdeck is looking empty and boring I am thinking of adding switches or possibly another screen but can think of what they will do, my plan is by the next model to decide what the theme should be by making some kind of mood board and then add things accordingly if you have any ideas please let me know in the comments."}, {"post_id": 34201, "ts": "2026-07-24T18:36:07Z", "hours": 0.3325, "text": "Fixing old keyboard. the wires were broken near the connection points I performed a temporary twist and splice on the exposed wired I plan to solder a new cable later but for now it works!"}, {"post_id": 34148, "ts": "2026-07-24T17:25:45Z", "hours": 0.2844, "text": "2 updates to the project, I 3d printed the MK1 top piece with varying success and modelled the MK1 base panel. after ages of waiting for the 3d printer I rent to be free I printed it, it fits the case and the components well (although the screen hole was a lot bigger than it needed to be) however I encountered 2 major errors 1. the dowels I used to connect the two half’s were to big and made gaps in the model, and 2. I may or may not have forgotten to turn supports on witched caused the model to sag a bit but it turned out ok in the end. Next I plan on printing the base panel and re-modelling the top panel."}, {"post_id": 30752, "ts": "2026-07-18T16:10:06Z", "hours": 0.2533, "text": "Cut the panel in half, added dowels to connect them. next I plan on printing it and seeing what i can do to improve it"}, {"post_id": 30099, "ts": "2026-07-17T12:30:05Z", "hours": 0.5225, "text": "MK1 the first test design for the top panel of my cyber deck very early design and will be subject to change. one problem I’m facing is the 3d printer that is available to me (its not mine its kinda like a rental) is to small to fit the whole panel so I will have to print it in separate parts and figure out a way to connect them."}]...
|
Title: Cyberdeck by @sn3ak | Stardance
Devlogs:
M Title: Cyberdeck by @sn3ak | Stardance
Devlogs:
MK1 the first test design for the top panel of my cyber deck very early design and will be subject to change. one problem I’m facing is the 3d printer that is available to me (its not mine its kinda like a rental) is to small to fit the whole panel so I will have to print it in separate parts and figure out a way to connect them.
Cut the panel in half, added dowels to connect them. next I plan on printing it and seeing what i can do to improve it
2 updates to the project, I 3d printed the MK1 top piece with varying success and modelled the MK1 base panel. after ages of waiting for the 3d printer I rent to be free I printed it, it fits the case and the components well (although the screen hole was a lot bigger than it needed to be) however I encountered 2 major errors 1. the dowels I used to connect the two half’s were to big and made gaps in the model, and 2. I may or may not have forgotten to turn supports on witched caused the model to sag a bit but it turned out ok in the end. Next I plan on printing the base panel and re-modelling the top panel.
Fixing old keyboard. the wires were broken near the connection points I performed a temporary twist and splice on the exposed wired I plan to solder a new cable later but for now it works!
MK2 Cyberdeck panel. I re-model MK1 to have a better fit for all of the components and rearranged them a bit however the Cyberdeck is looking empty and boring I am thinking of adding switches or possibly another screen but can think of what they will do, my plan is by the next model to decide what the theme should be by making some kind of mood board and then add things accordingly if you have any ideas please let me know in the comments.
Printed the base for my Cyberdeck. I finely was able to print the bottom half of the deck and it went well! the keyboard hole was to small and I haven’t ordered the trackpad yet so I don’t know if it fits. My biggest problem right now is I cant 3d print parts all the time and usually have to wait days between designs this is because I have to travel to use the 3D printer and it also is a shared printer so I cant always use it making time between prints take ages hopefully when I ship my project I will be able to get a 3d printer it would make all of my future projects so much easier to do. Next I plan on printing MK2 for the top half of the design and after I iron out all of the problems I can start to make the deck look amazing.
New prototype design. I took a break from the project but I’m back now and have decided to take a different approach to the design, rather than putting it inside of a pelican case I’m making its own outer shell this new design should be a lot smaller and easier to work with it is currently a very crude and basic design but this will change, don’t worry. I plan on printing it very soon.
I finished! After a lot of work and tears a I have finished my cyberdeck! I am ready to ship my project thank you all for the support and good luck with your projects.
Ships:
This is my cyberdeck. Its powered by a raspberry pi 5 and has a 5 inch touchscreen. it is also equipped with a touch pad and keyboard (yes the keyboard says keyboard on it). This is my first hardware project, I have learnt many new things like how to 3d design and how to use a 3d printer. Stardance has really motivated me to complete this project as before it was just an idea in my head that would probably never see the light of day....
|
1793670780.8035188
|
1793757180.8035188
|
|
64264
|
Ricordare-si by @rok-dejak | Stardance
|
rok-dejak
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Ricordare-si by @rok-dejak | Stardance
|
1793670781.9558108
|
1794275581.9558108
|
|
15258
|
My Website About my life by @citunek22 | Stardance
|
citunek22
|
1
|
2.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-11T18:08:40Z", "hours": 2.0, "multiplier": 1.11, "payout": 2, "blessing": "neutral", "text": "So like i said before it is a website but more of a linktree website instead of a portfolio. I have my tiktok, two of my instagrams and Youtube there so i would be grateful if you would follow me also its hosted on vercel and this is how it looks like", "repo": "https://github.com/citunek22/Raise-Your-Builder-Page", "demo": "https://raise-your-builder-page.vercel.app/"}]...
|
[{"post_id": 66101, "ts": "202 [{"post_id": 66101, "ts": "2026-09-11T18:04:44Z", "hours": 0.5967, "text": "ok so i remade the whole website because i dont like it as much as before and now i added links instead of something and i actually hosted this site trough vercel. This is how it looks like"}, {"post_id": 12677, "ts": "2026-06-20T18:26:47Z", "hours": 0.6553, "text": "Today i was quite lazy and i still dont know which tutorials to use but still i added a background and font color"}, {"post_id": 12117, "ts": "2026-06-19T19:53:10Z", "hours": 0.5567, "text": "Like i said a website about the info i can and want to share like today instead of i wrote which is snake in czech and my mistakes are mistyping z and y because they are switched on czech and english. And if somebody understands czech they know what i wrote. Dont worry its not anything vulgar or explicit."}]...
|
Title: My Website About my life by @citunek22 | St Title: My Website About my life by @citunek22 | Stardance
Devlogs:
Like i said a website about the info i can and want to share like today instead of i wrote which is snake in czech and my mistakes are mistyping z and y because they are switched on czech and english. And if somebody understands czech they know what i wrote. Dont worry its not anything vulgar or explicit.
Today i was quite lazy and i still dont know which tutorials to use but still i added a background and font color
ok so i remade the whole website because i dont like it as much as before and now i added links instead of something and i actually hosted this site trough vercel. This is how it looks like
Ships:
So like i said before it is a website but more of a linktree website instead of a portfolio. I have my tiktok, two of my instagrams and Youtube there so i would be grateful if you would follow me also its hosted on vercel and this is how it looks like...
|
1793670785.1909735
|
1793757185.1909735
|
|
16472
|
DuckyPaste by @ZiggyZonko | Stardance
|
ZiggyZonko
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T04:34:16Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple clipboard tool that is backed up by a .json file to prevent loss of entries. The app features a pinning, searching and deleting system to not only store pasted content, but manage them. I created this to categorise and sort my pasted content rather than the usual windows / linux clipboard ( which I actually didn’t know existed prior 😿 ). The sorting by topic is coming in a future update…. The Qol improvements I created: Pinning of entries to help hold on to important content. Deletion of entries, I’m unsure if there is a simple way to delete clipboard entries within the built-in clipboards. Easy to find (as I had no idea about Windows+V). All backed up in a stored .json file in the /db folder, meaning you can easily sort through that if data the application stops. Additionally, the searching of entries helps be organised with your entries, locating important content quickly.", "repo": "https://github.com/ZiggyZonko/DuckyPaste", "demo": "https://github.com/ZiggyZonko/DuckyPaste/releases/tag/v1.0.0-alpha"}]...
|
[{"post_id": 8642, "ts": "2026 [{"post_id": 8642, "ts": "2026-06-14T11:22:05Z", "hours": 0.5542, "text": "Implemented a tray icon with a show and quit button, so it runs in the background and picks up on your clipboard when it’s merely running as a task. I also fixed the pinning button, so when pinned, the entry adds a pin emoji 📌 and places it at the top of the list. Release 1.0 is being shipped soon…."}, {"post_id": 8019, "ts": "2026-06-13T11:45:29Z", "hours": 0.555, "text": "Added a working delete button and fixed a few bugs associated with the search bar and the history array, soon to be finalised"}, {"post_id": 7452, "ts": "2026-06-12T12:46:53Z", "hours": 1.0428, "text": "Created a json saving and loading system so you can close down the application and still have the clipboard saved. Added a search bar and pinning button, search bar functionality is added while pinning is not. More to come!"}, {"post_id": 6773, "ts": "2026-06-11T10:50:23Z", "hours": 1.0197, "text": "I created the basis of the clipboard, overiding duplicates, adding a nice aesthetic and consolidating the foundation of DuckyPaste."}]...
|
Title: DuckyPaste by @ZiggyZonko | Stardance
Devl Title: DuckyPaste by @ZiggyZonko | Stardance
Devlogs:
I created the basis of the clipboard, overiding duplicates, adding a nice aesthetic and consolidating the foundation of DuckyPaste.
Created a json saving and loading system so you can close down the application and still have the clipboard saved. Added a search bar and pinning button, search bar functionality is added while pinning is not. More to come!
Added a working delete button and fixed a few bugs associated with the search bar and the history array, soon to be finalised
Implemented a tray icon with a show and quit button, so it runs in the background and picks up on your clipboard when it’s merely running as a task. I also fixed the pinning button, so when pinned, the entry adds a pin emoji 📌 and places it at the top of the list. Release 1.0 is being shipped soon….
Ships:
I made a simple clipboard tool that is backed up by a .json file to prevent loss of entries. The app features a pinning, searching and deleting system to not only store pasted content, but manage them. I created this to categorise and sort my pasted content rather than the usual windows / linux clipboard ( which I actually didn’t know existed prior 😿 ). The sorting by topic is coming in a future update…. The Qol improvements I created: Pinning of entries to help hold on to important content. Deletion of entries, I’m unsure if there is a simple way to delete clipboard entries within the built-in clipboards. Easy to find (as I had no idea about Windows+V). All backed up in a stored .json file in the /db folder, meaning you can easily sort through that if data the application stops. Additionally, the searching of entries helps be organised with your entries, locating important content quickly....
|
1793670786.3748226
|
1793757186.3748226
|
|
64267
|
My awesome macropad! by @haytam | Stardance
|
haytam
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @haytam | Stardance
|
1793670787.5620298
|
1794275587.5620298
|
|
47841
|
EpicSquirrelWare by @Epicninja3 | Stardance
|
Epicninja3
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T22:48:49Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a WarioWare-style videogame featuring a squirrel collecting acorns on Godot! There are 3 levels, a platformer, a clicker, and a custom game where you dodge asteroids! I also added my own death and win screens and created my own sprites for the character and a few other features.", "repo": "https://github.com/epicninja3/EpicWare", "demo": "https://epicninja3.itch.io/epicsquirrelware"}]...
|
[{"post_id": 63848, "ts": "202 [{"post_id": 63848, "ts": "2026-09-07T20:34:16Z", "hours": 0.9986, "text": "Finished the last level!!! Space Squirrel got himself a spaceship (don’t ask) and has to navigate through asteroids to collect acorns! Use W/Up and S/Down to move up and down to collect the acorns! I animated the spaceship booster and drew out the asteroids. I’m planning on making the asteroids rotate as they move across the screen. Next Steps: I’m going to make it look a bit cooler, maybe change a few backgrounds. Refine some of the code Ship it!"}, {"post_id": 63263, "ts": "2026-09-07T00:06:04Z", "hours": 7.1731, "text": "Mostly finished working on the Platformer Minigame and the Clicker minigame! Our amazing Space Squirrel is collecting acorns floating in space! I am now going to work on the third minigame as well as the title and ending screens."}]...
|
Title: EpicSquirrelWare by @Epicninja3 | Stardance Title: EpicSquirrelWare by @Epicninja3 | Stardance
Devlogs:
Mostly finished working on the Platformer Minigame and the Clicker minigame! Our amazing Space Squirrel is collecting acorns floating in space! I am now going to work on the third minigame as well as the title and ending screens.
Finished the last level!!! Space Squirrel got himself a spaceship (don’t ask) and has to navigate through asteroids to collect acorns! Use W/Up and S/Down to move up and down to collect the acorns! I animated the spaceship booster and drew out the asteroids. I’m planning on making the asteroids rotate as they move across the screen. Next Steps: I’m going to make it look a bit cooler, maybe change a few backgrounds. Refine some of the code Ship it!
Ships:
I made a WarioWare-style videogame featuring a squirrel collecting acorns on Godot! There are 3 levels, a platformer, a clicker, and a custom game where you dodge asteroids! I also added my own death and win screens and created my own sprites for the character and a few other features....
|
1793670788.4604306
|
1793757188.4604306
|
|
64268
|
owel_hunter by @iku_dev | Stardance
|
iku_dev
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: owel_hunter by @iku_dev | Stardance
|
1793670790.163566
|
1794275590.163566
|
|
64270
|
Godot Platformer - Haven Jumpstart by @Shreyansh | Godot Platformer - Haven Jumpstart by @Shreyansh | Stardance...
|
Shreyansh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Godot Platformer - Haven Jumpstart by @Shre Title: Godot Platformer - Haven Jumpstart by @Shreyansh | Stardance...
|
1793670792.4598706
|
1794275592.4598706
|
|
64271
|
first website by @haytam | Stardance
|
haytam
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: first website by @haytam | Stardance
|
1793670793.7038507
|
1794275593.7038507
|
|
4906
|
spot-electricity-display by @viivi | Stardance
|
viivi
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T11:25:22Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "spot-electricity-display It’s a small ESP-8266 project for displaying the current spot electricity price. I used Arduino IDE for coding the code to fetch and update the data displayed on the screen. I also 3D modelled a case for it with Tinkercad but I haven’t tried to actually print or build it because I don’t have a 3D printer or materials for it. The first photo is an edited demonstration photo how it could look like (perspectives failed). The second photo shows what I actually have. I made this because it could make life easier. Instead of opening an app it would be much easier to check this to see the price. It wasn’t easy to make this because I felt like everything was against me. Libraries weren’t the easiest to use, the screen tweaked all the time and there isn’t many guides for this specific board because it’s quite rare.", "repo": "https://github.com/ViLP357/spot-electricity-display", "demo": ""}]...
|
[{"post_id": 70552, "ts": "202 [{"post_id": 70552, "ts": "2026-09-19T11:11:43Z", "hours": 0.4169, "text": "#4 devlog I guessed it rght, on the next day it worked again. One possible reason it didn’t work then was that the text wasn’t set to white, though it should be white as default. I finished readme and filmed a short demo video."}, {"post_id": 55666, "ts": "2026-08-27T17:01:57Z", "hours": 1.4514, "text": "#3 devlog Today I… tried to add timing for API requests, and I think it works but now my oled screen won’t display anything. There’s 50/50 chance it works tomorrow with exact same code :(. Finished 3D modelling by making a back plate for the case. Wrote something to the README"}, {"post_id": 33636, "ts": "2026-07-23T18:27:06Z", "hours": 2.0792, "text": "#2 devlog Coding Lot of time, no progress. I spent quite a long time trying to make buttons on my board work with my code. I couldn’t make them work :) . Instead of buttons I might make text change with specific a frequence. 3D-modelling I started making box case for simple electronics (the board and battery case). I used Tinkercad for modelling. I had used Tinkercad before but it’s been long time since I used it last time. I really liked that Tinkercad has ready models of electronics even though it didn’t have the ones I’m using. That’s why I had to use components as close as possible to my actual components."}, {"post_id": 9143, "ts": "2026-06-15T09:47:02Z", "hours": 0.9778, "text": "#1 devlog, days 1-2 This project has now officially started. Git and github are set up and the core feature works! Currently the arduino (it’s actually Wemos, not arduino) is able to show current price. I use free API to get spot electricity price (it’s price in Finland). https://api.spot-hinta.fi/JustNow The board I use is Lolin D1 mini Pro V2.0.0 My plan for this project: make the screen display current spot electricity price design and maybe build box/casing for electronics add leds to indicate how cheap or expensive electricity is now add buttons for scrolling future prices"}]...
|
Title: spot-electricity-display by @viivi | Starda Title: spot-electricity-display by @viivi | Stardance
Devlogs:
#1 devlog, days 1-2 This project has now officially started. Git and github are set up and the core feature works! Currently the arduino (it’s actually Wemos, not arduino) is able to show current price. I use free API to get spot electricity price (it’s price in Finland). https://api.spot-hinta.fi/JustNow The board I use is Lolin D1 mini Pro V2.0.0 My plan for this project: make the screen display current spot electricity price design and maybe build box/casing for electronics add leds to indicate how cheap or expensive electricity is now add buttons for scrolling future prices
#2 devlog Coding Lot of time, no progress. I spent quite a long time trying to make buttons on my board work with my code. I couldn’t make them work :) . Instead of buttons I might make text change with specific a frequence. 3D-modelling I started making box case for simple electronics (the board and battery case). I used Tinkercad for modelling. I had used Tinkercad before but it’s been long time since I used it last time. I really liked that Tinkercad has ready models of electronics even though it didn’t have the ones I’m using. That’s why I had to use components as close as possible to my actual components.
#3 devlog Today I… tried to add timing for API requests, and I think it works but now my oled screen won’t display anything. There’s 50/50 chance it works tomorrow with exact same code :(. Finished 3D modelling by making a back plate for the case. Wrote something to the README
#4 devlog I guessed it rght, on the next day it worked again. One possible reason it didn’t work then was that the text wasn’t set to white, though it should be white as default. I finished readme and filmed a short demo video.
Ships:
spot-electricity-display It’s a small ESP-8266 project for displaying the current spot electricity price. I used Arduino IDE for coding the code to fetch and update the data displayed on the screen. I also 3D modelled a case for it with Tinkercad but I haven’t tried to actually print or build it because I don’t have a 3D printer or materials for it. The first photo is an edited demonstration photo how it could look like (perspectives failed). The second photo shows what I actually have. I made this because it could make life easier. Instead of opening an app it would be much easier to check this to see the price. It wasn’t easy to make this because I felt like everything was against me. Libraries weren’t the easiest to use, the screen tweaked all the time and there isn’t many guides for this specific board because it’s quite rare....
|
1793670794.5679064
|
1793757194.5679064
|
|
43023
|
Worlds Unbound - Terrain Engine by @alpeka | Stard Worlds Unbound - Terrain Engine by @alpeka | Stardance...
|
alpeka
|
1
|
125.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T01:05:30Z", "hours": 125.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "— SHIP No.1 — I spent the last couple of months making a model terrain, which I will use for my game that I will continue to build after this competition. My game idea is quite ambitious, and given how long it took for me to get this basic terrain to work properly and well, that won’t even be coming with the extra month added one. I lot of you may be thinking though, what on earth were you doing for 125 hours, when all you came up with is a glorified green and grey piece of paper you could walk on. Well, not only was I learning and using Godot for the first time, it was the first time I learnt anything as complicated as this. I had to wrap my head around complex (at least for me) maths and computer science topics, like vectors and cross product, noise and FBM, TBN model, and UVs, not to mention just the sheer amount of logic I had to get through. It was so tiring to keep getting bugs for the chunking system I had, or the collisions. But thankfully, all that is behind me 😼. I’ll give you a more indepth look into what I’ve done over the past couple months. Devlogs 1-12: This period was the general beginning of my project. Not only was I learning Godot, and watching tutorials on it, I was also spending time on the player character, the camera system, and the world environment. Devlogs 13-15: I tried to implement LODs into my chunks, since the performance was simply too bad. Somehow this made it worse, possibly because of more chunks (the ones at the broder of LOD borders) being forced to be unloaded and loaded back in. Devlogs 16-21: I used my current technique, heavily based from devmars video on youtube about procedural terrain during this period. School had also started, so I spent less and less time on it, being significantly burnt out and tired. So I basically went through 3 iterations of terrain for my game, so that is why it took so long to get to this point.", "repo": "https://github.com/jona-mtw/Celestial", "demo": "https://alpeka.itch.io/worlds-unbound-terrain-engine"}]...
|
[{"post_id": 73370, "ts": "202 [{"post_id": 73370, "ts": "2026-09-25T00:42:51Z", "hours": 2.2056, "text": "Devlog 21 - Ship Prep!!! Colours I added colours to the terrain depending on how high the vertex is. This does create a very harsh border between the two colours, but I didn’t want to learn lerping, ik how to larp enough. Cleaned up my commits My commits were, and probably are still messy, and when I went ahead to revert some changes it said there were errors, but now thankfully that’s all fixed. :) I also updated quite small normals and some technical stuff."}, {"post_id": 72564, "ts": "2026-09-23T07:21:06Z", "hours": 3.9622, "text": "Devlog 20: GPU noise I found a way to make noise using a Godot addon called FastNoiseLite Runtime Shader . It was apparently identical to the FastNoiseLite in GDScript. So I gave it a try. I knew it was a gamble, given how much time I got left to ship an decent project, but I gave it a try since it seemed interesting. It wasn’t that hard to get the noise working, but to get it to sync with the collisions was a nightmare. In the end, I decided that even though the README stated it was 99.9% the same, the output seed by seed was different. So I decided to scrap it and now I’m going back to the old version with heightmaps. Why did I really want to switch? Because of the limited colour depth in images (has to be 8-bit for GDShader to read), theres not enough heights for each vertex to be at, so every so often, there’s this massive wall. It looks fine from afar, but thats probably because my terrain is 20km x 20km, so of course an 8m tall wall would look fine. (the image is from the addon readme)"}, {"post_id": 70779, "ts": "2026-09-19T19:04:39Z", "hours": 6.5594, "text": "Devlog 19 - Main Menu Added (and other things)! I spent quite a lot of time making the background for the main menu in Blender. After just copy and pasting the player model used in the game, I went ahead and made the main attraction: ✨ the planet in the background ✨ . My knowledge of noise that I gained from my previous attempts at the terrain generation helped me create the stars in the background, and the texture for the actual planet in the shader editor. I also added a slight atmosphere, which is (somewhat?) noticeable. I also went ahead and updated the shader code. Before, I used to use the visual shaders, since it was quite similar to the shader editor in Blender, which I was familiar with. But then I realised there’s just more flexibility with using GLSL . I can group uniforms in the inspector, making it clearer and less cluttered if I want to add textures in the future, including different images for the same texture (like Ambient Occlusion, Normals, Colours, and Roughness). Thus being able to group those different types images for the same texture was very important for future usability. Thankfully, Godot allows you to see the shader code that is generated from the visual shaders. Unfortunately, it was not readable at all. The generated code used a random(ish) collection of numbers and letters, and it was too long. Look below for the comparision for just the vertex shader, but it was something like 84 lines that was shruken down to 10 for the vertex shader. Even if you account for spaces in the generated code (which then it might be like 50-60 lines) thats a huge difference. So it took quite some time to get it to a readable state. edit: idk why the actual background looks so bumcheeks compared to the banner, hopefully itll be fixed by then 🤞"}, {"post_id": 67802, "ts": "2026-09-14T01:51:22Z", "hours": 4.0497, "text": "Devlog 18 - I am happy once again!! I FINALLY got the collisions to work!! Basically, it looks at the terrain model that is imported into Godot, and aligns the vertices of the CollisionShape3D with it. It also updates its position every time the player moves 1 unit (whatever the size of a quad of the mesh is). Then it looks at the heightmap, looks up the height of its coresponding pixel, multiplies that by the height shader param (2000, like in the vertex shaders), and thats the collision shape done. I noticed while walking around the world, that there were these massive ridges on the terrain. This is due to the lack of precision in the heightmap. The heightmap only has 256 shades of grey, and I need 2000 values. It is quite impossible to make a image file with that much precision, so instead, I’ll make it so that the CPU will just send an array to the vertex shader. Also, I’ve rebranded my project to Worlds Unbound, and this specific Stardance project will just be handling the terrain stuff for the game. p.s, it never goes above 16ms, i think thats probably because i was recording"}, {"post_id": 65723, "ts": "2026-09-11T02:05:18Z", "hours": 6.0086, "text": "Devlog 17 - I am incredibly frustrated. No matter what I do it feels like I just can’t get the collisions to work. Basically, I’m trying to fetch the heights from the height map to input into the CollisionShape3D, but the coordinates are always offset in some way or the other. I even used AI my friend to basically rewrite the entire script over and over again, but that didn’t work either. Maybe it’s cos school has started now, and I haven’t been able to spend that much time on this project than I would like to As you can see in the photo, the collision mesh (in blue) is offset from the normal terrain (in white)"}, {"post_id": 63142, "ts": "2026-09-06T19:41:46Z", "hours": 7.2203, "text": "Devlog 16 - AMAZING PROGRESS!! I’ve managed to get a massive 20km render distance with huge mountains and ridges using FastNoiseLite and vertex shaders. I used devmar ’s terrain technique, which he named the “Wandering Clipmap Terrain Technique”. The reason why the technique is called the “ Wandering Clipmap Terrain Technique” is because a flat plane that is subdivided a bunch (to make varrying levels of detail (LODs)) that follows the player. The vertex shaders then offset the heightmap so it gives off the illusions that your moving about in a massive world. All the displacement is done by the vertex shaders, which looks at a heightmap. In the future, I might make this heightmap be generated in gdscript instead of in the inspector, to deal with texture resolutions. Currently, from afar, the terrain looks amazing (except from the fact its not textured) but upclose, you can see rings in the terrain, which is caused by the heightmap’s resolution being too low. In fact each ring is about 8m tall so I really need to fix that 😭 The normals are calculated by just copying the heightmap and setting it ‘as normals’ in the inspector. They also are multiplied by a normal basis matrix, which allows me to configure the specific normal settings. I’ll need to calculate the normals in the fragment shader as well in the future for more convincing shadows, but for the mean time, the vertex shaders should do just fine. I’m planning on adding collisions, then maybe textures, biomes and vegetation soon!!"}, {"post_id": 61230, "ts": "2026-09-04T01:57:24Z", "hours": 4.8533, "text": "Devlog 15 - I’m an Idiot For the past 95ish hours, I’ve been working on a way to make procedural terrain for my game. I tried 2 main methods, one centred round the CPU, and one I was building centred around the GPU. The endless chunk seam bugs caused me to burnout/get tired of the entire project, and there was so many stuff (that I won’t really be explaining for the sake of my poor reader’s sanity) leading to me ✨ youtube ✨ I saw this AMAZINGLY smart video by devmar, showing an alternate way of generating terrain. I urge you to watch the video as well, the whole technique is very very clever, and he even goes on to make further videos on making collisions, recalculating normals and adding vegetation, especially if your interested in procedural generation. After watching this video however, I became incredibly frustrated. I spent nearly 100hrs of my summer making this procedural terrain which I know hadn’t gotten anywhere and theres this incredibly smart video from 4yrs ago that pops up on my feed. Welp, now ig i gotta try out this way, and quick cos my parents are on my tail talking about me finishing this project before school starts 🙏 (its my gcse year so ig its valid but still ) Now what I actually did that counted to my time Experimented with vertex shaders, and sending heightmaps to vertex shaders to displace. This however caused immense lag and caused VERY ANNOYING chunk seams. #epicfails"}, {"post_id": 59673, "ts": "2026-09-01T16:27:07Z", "hours": 9.5572, "text": "Devlog 14 - LOD chunks ——— OPTIMISATION IS SOO HARDD 10hrs to do practically do something I’ve already done? (i had already made a chunk system in previous devlogs) Well, whilst some of that time was transferring code from my old commits to the current one and making sure it works, most of the time I spent on this devlog was spent on ✨ “optimisation” ✨ Optimisation First of all, I added LODs into the chunk mesh. What this means is that since further away chunks take up less of your screen, the level of detail (LOD) is reduced the further away it is. I had already made the script that handled the creation of those different meshes with different LODs, so in this devlog, I added it to the main terrain generation script, and assigned each LOD to a certain distance, so that any chunk with a certain distance has a certain LOD. In my last version of the terrain generation, I relied on the name of the MeshInstance3d nodes created to identify what chunk they were. I realised when making this updated version that it was prone to failure, since if the node did not exist or a node with the same name were some how added to the scene tree, errors would be raised or at the very least, a logic error would occur. To recetify this, I switched to using dictionaries to house all the information of all the chunks: chunks : Dictionary [ Vector2i , int ] = { Vector2i ( 0 , 0 ): 0 , Vector2i ( 0 , 1 ): 0 , #etc } The key is chunk coordinate, and the value is the LOD (0 being the highest, 4 being the lowest) Every time I wanted to update the terrain, I would search the scene tree if a particular node was unwanted (again, by looking at the name) and then generating the rest of the ones wanted. This way would not work with LODs, since some chunks may still exist, but may have to change LOD depending on where the player is. So I made use of the dictionary and also created a new one that would store the chunks that I want created. It would loop through the dictionarys, checking certain conditions, and the terrain would be updated. All this looping is somewhat inefficient, and did cause some lag spikes, so I will try to fix that next devlog by only checking the chunks that would be affected based on which way the player moved. To help with the looping, I created chunk and lod lookup tables, that can be offset based on the players_position. These lookup tables are only changed when the render distance is changed, so the same calculation doesn’t have to run hundreds of times in 16ms (60 fps)."}, {"post_id": 57389, "ts": "2026-08-29T15:03:50Z", "hours": 3.8103, "text": "Devlog 13 - LOD template I basically deleted all the old code, and started over, by making a function where the noise will be given to the vertex shader, and one that will generate the actual flat mesh for it (which is going to be changed by the vertex shader). I made the template for making flat planes with different levels of detail (LOD), which will be changed by the vertex shaders, applying the noise to the mesh. I created a new script called lod.gd and gave it a class name, so that I can call multiple instances of it in the main terrain generation program. Every time the program wants to make another chunk, I have to pass the arguements: resolution - what ive defined as a synoymn of LOD chunk_pos - where the chunk is The function then loads an ArrayMesh from a pre-generated list of possible meshes and creates a new MeshInstance3D node to display it. Extra stuff I also added player coords and chunk position in the debug_screen :)"}, {"post_id": 56938, "ts": "2026-08-28T23:24:46Z", "hours": 4.2589, "text": "Devlog 12 - General updates 3.0 I PROMISE THIS IS THE LAST ONE GUYS 🙏 Performance Stats I added a little HUD showing the FPS, the time it takes to make one frame (has to be below 16.67ms (60fps) or there will be noticeable lag), and the memory usage. Lighting, Shadows, and World Environment I slightly changed the shadow bias and normal bias so that shadow artifacts are to a minimum. On top of that, I set it so that shadows aren’t cast for the terrain, which unintentionally handles with some of the artifacts, whilst keeping the “shadows” by illuminating the terrain depending on where the DirectionalLight3d is, making the “shadows” reponsive to a future day-night cycle. Also the volumetric fog and lighting looks better Camera Issues 2.0 So previously I had the player hide() when you go into first person, but that also effects the shadows. So instead I made the visor disappear when you go into first person. But then there was another problem. The head would move during the idle and walking animations, which is quite distracting and could be problematic for some players. So I stopped the animtions whilst in first person. It is a very rudimentary fix, since players can look at their shadows and see the lack of animation. Furthermore if I want to add multiplayer in the future, it’ll look very weird. Performance checks In preparation of the biome generation, I wanted to make sure the performance is fine. It takes a bit for the terrain to generate at the start, but thats common across nearly every game. And this will be lightened a bit when I implement LODs. Once the game is running, it runs relatively fine, except with (very quick) lag spikes when the chunks update. To address this, I’m planning of offloading some of the terrain generation to the GPU, which can calculate normals a LOT more effeciently and quicker than the CPU. Current, the CPU calculates all the vertices, indices, normals, and then compiles it into an ArrayMesh , which is given to the GPU for rendering. This can put a lot of strain on the CPU, especially later down the line, so it’s better and more effiecient if the GPU does the very repetetive calculations, by making it do all the normal calculations, including other stuff."}, {"post_id": 56302, "ts": "2026-08-28T01:02:37Z", "hours": 5.1292, "text": "Devlog 11 - General updates 2.0 Editor Tools!! - (to see the terrain in the editor) So in a previous devlog, I think I talked about how I added @tool in my terrain generation program to be able to see it in the editor. Once I made it dependent on the player position, it didn’t generate in the editor because the player wasn’t loaded in. So now I made it so that if the script was running while the editor (not the game) is open, the terrain would generate around (0, 0) based on how ever big the render distance is. Also I made it so that if you tweak the value of any of the primary noise settings in the editor, it updates in the editor. On top of that, I set the viewport to display wireframe so that I can see the triangles at different resolutions, which is where I came across:…. FLOATING POINT ERRORS!!! (yay ) I noticed that if I set the resolution to a decimal value that was not a power of 2, the triangles would be off by some amount, causing neighbouring triangles to overlap each other, causing normal and collision problems. The resolution variable is going to be eventually used for LODs, so since I’ll be the only setting it, I’ll just make sure to use a value thats a power of 2 The reason why this happens is because 16 (my chunk size) can be multplied and divided by 0.125 (2^-3) evenly to create an integer, compared to 0.1 which results in 1.6. Any smaller power of two is rounded it to the nearest 3dp, so 0.0625 (2^-4) doesn’t work. Camera Issues So I made functionality with the camera where you can scroll to zoom the camera in and out, and if you scroll far enough in, you’ll be in first person, much like how it works in Roblox. There was one problem though. Since the material for the visor on the player model was somewhat transluscent, your view would get darker. Also, you could free look inside the helmet, looking at the areas I wasn’t bothered to model and texture hadn’t modelled. So I disabled that in first person. The biggest timewaste of my life In an attempt to offload some of the generation to the GPU for more effecient parallel processing, I tried to figure out which parts of the algorthim were going to be handled by the CPU and GPU. There were some that had to be handled by the CPU, and there was no choice about those, and they were: collisions and figuring out what chunks should be rendered. At first I thought, how about I offload nearly everything to the GPU, including the noise function. Then I learnt that FastNoiseLite didn’t exist in .gdshader . So I did what any normal person would do, and CODE PERLIN NOISE BY HAND. I spent HOURS learning everything my dumbass could about it: vectors, normals, gradients, deviation, erosional generation, and finite difference approximation. At least I probably learnt something useful for FSMQ 🤷 (a British maths exam most students do in yr11 along with their other GCSEs)."}, {"post_id": 55266, "ts": "2026-08-26T23:25:21Z", "hours": 4.5936, "text": "Devlog 10 - General updates Alright, so ik I said I would work on the procedural terrain, but instead I worked on:… Debugging Tools!! (yayy! ) When tab is pressed, it toggles on debug mode, where all meshes turn into wireframes (to check LOD) and chunk boudaries are shown. There are problems with chunk boundaries not despawning when the terrain its on is gone, but that’s fixed when you toggle debug mode again :). I could fix it but icba I have other stuff that needs to be prioritsed. Resizabile UI So before, if you resized the window, the pause menu and settings menu would be offset from the centre and wouldn’t scale with the window. Now when you scale it, the pause and settings menu stay in the centre and scale accordingly. (the flickering in the video is just an artifact created by the godot editor, and will apparently be fixed once exported)"}, {"post_id": 55025, "ts": "2026-08-26T13:34:07Z", "hours": 7.725, "text": "Devlog 9 - Player Animation!! Walking and Idle Animations I finished a basic walking and idle animation for the player. The walking animation is also somewhat inspired from the kerbals from KSP. Both the animations are kinda choppy, especially when the animation loops round, but frankly icba I didn’t have enough time to fix them rn (mbmb 😭 ). Thankfully the walking animation is timed properly so that the player doesn’t look like its sliding around. Camera updates I added functionality to the camera where you can freelook around the player when holding the right mouse button. Once released, it goes back to the normal position (motion is lerped). Prepartions for next steps For the next steps, I want to go back to the terrain_generation program and start to add variation across the world (like biomes, mountains, etc.). I’m also looking to optimise it, making it generate terrain and collisions faster in prepartion for any future implementation of faster travel. So I added functionality that can allow me to make LODs, which will likely be implemented next devlog."}, {"post_id": 53506, "ts": "2026-08-24T02:34:01Z", "hours": 9.7758, "text": "Devlog 8 - Player Model and other assets! Player Model I finished with texturing, rigging and weight painting. Next Step is to make the walking and jumping animations. Worked on the settings menu I updated the setting menu layout to account for different settings I’ll add in the future Stupid Bugs So when trying to break the terrain generation, I set the speed of the player to like 300 (which it will never be in the game except when in a space ship) but when I tried to do that, the game kept crashing, spitting out an error saying that something didn’t exist. It was coming from my unload_terrain() function. Basically how it works is it checks for all the instances of the MeshInstance3D node, and checks the name of it. For every chunk that is created, I assigned a unique name to it on creation based on the x and y coordinates of it. The function would checking all the nodes, and seeing which ones were out of the “ collision_chunk_size ” radius, and then would delete them. But when going super fast, the processing of things got all weird, meaning that when it tried to delete a chunk, and if it didn’t exist, it would crash. So I added a simple if statement if len(child_name_array) > 2: (basically it would check if the length of the name was long enough to see if there was the coord data). Stupidly I wrote the greater than sign the wrong way round, which led to me being stumped for SO long on why the terrain was just not unloading. tldr: > was the wrong way round and cost me hours."}, {"post_id": 48656, "ts": "2026-08-17T04:20:08Z", "hours": 6.7203, "text": "Devlog 7 - Chunks # 2: PROCEDURAL GENERATION DONE (mostly) Bugs Managed to fix all the bugs related to this part of terrain generation. Weird chunk errors There was an if statement (I changed it out for something else that’s more efficient) that was like: if abs(player_position.x - chunk_pos.x) > collision_chunk_size or abs(player_position.y - chunk_pos.y) > collision_chunk_size This logic error create weird stuttering issues and lag. The fix was to switch or with and . Normals DEFINITELY the bane of my existence. I know roughly what normals are due to me doing 3D modelling/rendering, but I have no clue how it actually works. And plus, I’ve barely covered the maths I need for this in school, so I spent sooo much time (much of which wasn’t recorded) just researching about normals and how they work. I think that definitely helped me find a solution to the annoying chunk borders and random artifacts found inside each chunk. Chunk Sizing I stupidly and randomly changed the chunk size from 16 to 10, which worked completely fine, except for the fact that the player script was still using the 16x16 chunk system, causing the generation to lag behind, eventually leading to the player falling off the map. New Features There were also some ✨ features ✨ that I added. Colour I added colour to the world, and if I match it to the fog and sky, I think it would look AMAZING I will make it so that the colour does vary across the planet. Player I added the rig and refined the topology for animation."}, {"post_id": 47230, "ts": "2026-08-15T00:41:31Z", "hours": 7.1208, "text": "Devlog 6 - Chunks # 1 Previously, I had it so that the entire world was one big mesh, that could not be expanded without unloading and reloading the whole thing and more. This is obviously very inefficient, especially if I want the terrain to load in and out based on where the player is. Chunks is the answer to that. Split the world into chunks of your choice (I chose 16x16), and load/unload just the chunks you need to, not the whole thing. It seemed easy for me at first, clearly it wasn’t (the #1 for the header, ik this isnt gonna be the only devlog on this 😭 ). Bug 1 - The Normals aren’t normal Last devlog, I talked about calculating the normals, which went smoothly… For the old mesh… You see, to calculate normals, you need the vertices surrounding the vertex your trying to find out, and with chunks, that meant every 16 vertices, the normals were being calculated incorrectly, causing seams to be found in the terrain. However, since we did calculate the normals (for the most part) some pretty nice shadows have been cast on our terrain. Despite it being a bug, it is useful to find out where the chunk boundaries are, which is EXTREMELY useful for debugging, so I haven’t tried fixing it just yet. Bug 2 - Not so Good Performance After dividing the terrain into chunks, and making new chunks generate when the player moved into a new chunk, I tested it out. And every time I tried to cross a chunk border, there would be a huge lag spike. This would be caused by the fact the game prioritised the generation of chunks instead of the game. Thankfully I was able to make it so that the chunks would load whenever the processor was ready, to make sure not to overload it too much. Bug 3 - (Lack of) Collisions Another reason why chunks are useful is for limiting the area with active collisions. When the terrain was one big mesh, the entire mesh had active collisions, which would all be checking if something hit it, which is very resource intensive. Which is why I limited the area with collisions to a small radius around the player. While coding it, many logic erros came up, such as one that caused the collisions to just not work."}, {"post_id": 46583, "ts": "2026-08-13T22:19:41Z", "hours": 8.0178, "text": "Devlog 5 - Procedural Terrain (FINALLY!!) I made a start at making the procedural terrain, made some progress with the player model, and with configuring the basic shaders of the game. Elephant in the Room - Procedural Terrain Technically calling it procedural terrain is cheating a bit, cos really all it is right now is perlin noise applied to each vertex’s height. And with that, you can change the shape of the terrain by changing the values of some variables, like the seed, frequency, and octaves. I exported these variables so I could change them in the editor, and added @tool at the start so I can see it in the editor. I’m starting to work on a chunk system at the moment, which will load and unload chunks of the world as the player moves about. Player Model I finished modelling the player (added this version to the game) and added the bones for rigging, except when I move the arm bone, the helmet deforms, so next time I will be doing some weight painting Thankfully UV unwrapping is done as well so I should be able to texture everything before the next devlog. Also, addressing my last devlog, I said Lapse wasn’t syncing with hackatime. Turns out, if I just told it to create a new project called Celestial (which is what my project is called on hackatime), it’ll just add the time to it, so thats amazing!!! The WorldEnvironment Node I accidentally deleted my old configuration of this node while experimenting with stuff, and so I made some changes to the shading of the world. Next up is to recalculate all the normals of each triangle so shadows can be cast properly. I tried using SSAO, but every time I used that to make some sort of shadow, it changed depending on where the camera was and it made the terrain very pixelated. As you can see in the video, you can see the outlines of the terrain. That is because of the volumetric fog added. It sounds resource intensive, so if it starts to lag out my game I might remove it, which is a shame cos it looks really nice."}, {"post_id": 45513, "ts": "2026-08-12T01:47:27Z", "hours": 6.4792, "text": "Devlog 4 - A little bit of a few things I mostly did a combination of small bits, which is probably bad in terms of github commits and actual progress, but at least it’s not burning me out because I’m doing whatever part of the project I fancy at the time. UI I spent most of the time making a (hopefully) futuristic(?) looking pause menu that can also redirect you to a settings page, where I’m planning to hold the settings for terrain generation for the player to manipulate. Much of this time was spent experimenting with different Control nodes, finding out what they do and what they’re helpful for and manipulating the styles of them. I ended up with a style shown below 👇👇👇 Player Model I think I’ve finalised on a particular style, now I basically just have to make it and then texture it. The sad thing is that for some reason lapse doesn’t recognise my hackclub project anymore (already logged 5+ hrs on lapse), so all the time I spent on Blender wasn’t actually logged. If someone could please tell me how to fix this or if theres an extension for blender that would be SO helpful 🙏. Extras I also added the devlogs to my repository, it should appear there when I next commit, which should be soon!! I realise that the popular devlogs have assets from the get-go, so I probably might focus more on that, despite lapse not working if I wanna record time on Blender or Affinity. Again, if someone could please tell me if something is up with lapse or if there’s an extension that I can download for Blender or Affinity, that would be SOO helpful!! 🙏"}, {"post_id": 44908, "ts": "2026-08-10T23:37:53Z", "hours": 2.1228, "text": "Devlog 3 - Flat Plane I know this sounds INCREDIBLY trivial, but I finally figured out how to make a flat plane in Godot, that can be used to make an actual terrain. There were 2 main ways that I could have used to make this: Method 1: I can use a PlaneMesh and then subdivide it down into triangles. Then use vertex shaders or custom scripts to displace the plane as a whole based on noise. It is faster to make the flat plane using this method since you give Godot most of the control over the tessellation, and the individual vertex placement. This means however that it is a lot harder to load and unload certain parts of the terrain, and it is generally harder to add noise to the terrain since you do not have control over each vertex. Method 2: I can use an ArrayMesh , where I create the grid from scratch, telling Godot how to connect every single vertex to create triangles. The downside to this is how long this took. I know it seems short compared to my first devlog (I think the main reason I took so long in that one was not only because I was learning Godot, but it was also because I was experimenting with player models on Blender but hopefully now I’ll be more time efficient) but it is still more time consuming to tell Godot how to connect each and every vertex. I was in fact so stumped on how to go about doing this that it suddenly came to me when I was playing with my little cousin. I even noted down how to do it on my phones notes app (excuse my bad handwriting I was in the car writing with my finger) :/ Despite it being longer to setup, it is overall better for the needs of my game, since I’ll not only need to be able to change the height of each vertex based on a heightmap, but it can also aid with making biomes, by adding custom values to each vertex, which is simply not possible with PlaneMesh . It is also easier to load and unload certain parts of the mesh, and it is better for larger maps, since your CPU isnt doing all the hard work of choosing all the vertices and indexing them. In order to make the actually interesting part of the terrain (which btw I haven’t done in this devlog, I guess this is just like a future plans part) I can use either vertex shaders or custom scripts to make noise in the terrain. Both of these have their respective use cases, and I wouldn’t be able to say one is better than the other for my case. Vertex Shaders: GPU based no collisions (purely visual) written in Godot Shader Language (which is written in C, which is terrifying for me who practically only knows Python ( GDScript and Python are similar enough for me)) Custom Scripts: CPU based can create collisions (actually changes the vertex’s height) written in GDScript (happy days (ik I can write it in C# , but I’m staying far away from that)) Despite my fear of anything not similar to Python , I will still need to use vertex shaders. And I will explain that in my next devlog because this is getting too long. Now onto my struggles incredible skill when making a.. flat plane in Godot. I chose to do Method 2, because of it’s functionality later down the line. But that means I have to tell Godot what vertices to make, and how to connect them up. Obviously that was as simple as could be.. (you can see my failures in the screen recordings below)"}, {"post_id": 44630, "ts": "2026-08-10T15:03:15Z", "hours": 1.7508, "text": "Devlog 2 - One Lone Triangle I spent 2ish hours trying to make a triangle. In GDScript.. Absoutely terrible progress. I see people on Stardance making whole ass projects in 2 hours, and I’m spending those 2 hours making a simple triangle. I have no idea why decided to do a game with procedural terrain generation as my FIRST Godot project. I somewhat understand the theory behind procedural generation, mainly from watching a video on the breakdown of Minecraft’s code when I was like 10, but yeah 🤷 Unfortunately, I have no clue how to do it in practise.. so I guess hours of looking through the Godot docs awaits me yay -_-. (jk the docs are extremely helpful tysm godot 🙏)"}, {"post_id": 43355, "ts": "2026-08-08T15:43:46Z", "hours": 12.8333, "text": "Devlog 1 - Player Movement Okay I know what your thinking. 12 hours for just player movement. Surely you must be wasting time just to get as much stardust as possible. The thing is.. I’ve never used Godot before. Everything from the node tree, to project settings was all pretty much new to me. I should have honestly done the WarioWave Godot mission thingy, so that I would have at least been fimilarised with how Godot worked in 3D. And here I am thinking about making a game where you explore a procedurally generated world. Never before have I touched Godot, and I’m dreaming of making a game with procedural terrain, like in Minecraft or No Mans Sky. Time Waste No. 1 - Learning Godot I had to look through the docs just to figure out how to assign a key to going forwards, mind you all the code needed is given to you when you use the PlayerCharacter3D class. This is on of the many things I struggled with in Godot. 😭 Time Waste No. 2 - Experimenting with player models in blender I experiemented with different styles of player models to use in the game, and I landed on one inspired from the infamous space game Kerbal Space Program. Time Waste No. 3 - Being petty about a camera system 📷 I think this is what took up most of my time. As soon as I made a moveable player that doesn’t fall through the ground (a very quickly made glorified cube in blender), I thought about adding a third person camera. I initially thought of making it toggleable, like in Minecraft, where you press F5, it toggles between first, second(?) and third person. But you can’t change the distance away the camera is from the player in third person. Besides, my stupid ass made it so that each time you pressed F, the camera would keep zooming out endlessly instead of toggling between first and third person. So instead I made it zoomable, like in Roblox. First I tried to manually change the offset based on the scroll wheel (that took me so much time because I had no clue how to get inputs from the scroll wheel). But that posed a problem, which was that the player could clip through walls. Then I found there was a literal node called SpringArm3D to do all of this for me 😭 And its so useful, like I can change how much it zoom’s out by my just changing one variable, and it automatically detects collisions an stops clipping through them. This may seem like somehting that is really basic to some of you who have actually cared to read this far (ty btw :)) but this was crazy for me. And now, I realised you can’t orbit around the camera without the player moving. But that’s something to add next time 🤷 lmao this feels like smth to convince ppl that i wasnt afk or smth to farm stardust. i PROMISE im not trying to farm them, although i would love to get some, im not trying to cheat the system guys 😭"}]...
|
Title: Worlds Unbound - Terrain Engine by @alpeka Title: Worlds Unbound - Terrain Engine by @alpeka | Stardance
Devlogs:
Devlog 1 - Player Movement Okay I know what your thinking. 12 hours for just player movement. Surely you must be wasting time just to get as much stardust as possible. The thing is.. I’ve never used Godot before. Everything from the node tree, to project settings was all pretty much new to me. I should have honestly done the WarioWave Godot mission thingy, so that I would have at least been fimilarised with how Godot worked in 3D. And here I am thinking about making a game where you explore a procedurally generated world. Never before have I touched Godot, and I’m dreaming of making a game with procedural terrain, like in Minecraft or No Mans Sky. Time Waste No. 1 - Learning Godot I had to look through the docs just to figure out how to assign a key to going forwards, mind you all the code needed is given to you when you use the PlayerCharacter3D class. This is on of the many things I struggled with in Godot. 😭 Time Waste No. 2 - Experimenting with player models in blender I experiemented with different styles of player models to use in the game, and I landed on one inspired from the infamous space game Kerbal Space Program. Time Waste No. 3 - Being petty about a camera system 📷 I think this is what took up most of my time. As soon as I made a moveable player that doesn’t fall through the ground (a very quickly made glorified cube in blender), I thought about adding a third person camera. I initially thought of making it toggleable, like in Minecraft, where you press F5, it toggles between first, second(?) and third person. But you can’t change the distance away the camera is from the player in third person. Besides, my stupid ass made it so that each time you pressed F, the camera would keep zooming out endlessly instead of toggling between first and third person. So instead I made it zoomable, like in Roblox. First I tried to manually change the offset based on the scroll wheel (that took me so much time because I had no clue how to get inputs from the scroll wheel). But that posed a problem, which was that the player could clip through walls. Then I found there was a literal node called SpringArm3D to do all of this for me 😭 And its so useful, like I can change how much it zoom’s out by my just changing one variable, and it automatically detects collisions an stops clipping through them. This may seem like somehting that is really basic to some of you who have actually cared to read this far (ty btw :)) but this was crazy for me. And now, I realised you can’t orbit around the camera without the player moving. But that’s something to add next time 🤷 lmao this feels like smth to convince ppl that i wasnt afk or smth to farm stardust. i PROMISE im not trying to farm them, although i would love to get some, im not trying to cheat the system guys 😭
Devlog 2 - One Lone Triangle I spent 2ish hours trying to make a triangle. In GDScript.. Absoutely terrible progress. I see people on Stardance making whole ass projects in 2 hours, and I’m spending those 2 hours making a simple triangle. I have no idea why decided to do a game with procedural terrain generation as my FIRST Godot project. I somewhat understand the theory behind procedural generation, mainly from watching a video on the breakdown of Minecraft’s code when I was like 10, but yeah 🤷 Unfortunately, I have no clue how to do it in practise.. so I guess hours of looking through the Godot docs awaits me yay -_-. (jk the docs are extremely helpful tysm godot 🙏)
Devlog 3 - Flat Plane I know this sounds INCREDIBLY trivial, but I finally figured out how to make a flat plane in Godot, that can be used to make an actual terrain. There were 2 main ways that I could have used to make this: Method 1: I can use a PlaneMesh and then subdivide it down into triangles. Then use vertex shaders or custom scripts to displace the plane as a whole based on noise. It is faster to make the flat plane using this method since you give Godot most of the control over the tessellation, and the individual vertex placement. This means however that it is a lot harder to load and unload certain parts of the terrain, and it is generally harder to add noise to the terrain since you do not have control over each vertex. Method 2: I can use an ArrayMesh , where I create the grid from scratch, telling Godot how to connect every single vertex to create triangles. The downside to this is how long this took. I know it seems short compared to my first devlog (I think the main reason I took so long in that one was not only because I was learning Godot, but it was also because I was experimenting with player models on Blender but hopefully now I’ll be more time efficient) but it is still more time consuming to tell Godot how to connect each and every vertex. I was in fact so stumped on how to go about doing this that it suddenly came to me when I was playing with my little cousin. I even noted down how to do it on my phones notes app (excuse my bad handwriting I was in the car writing with my finger) :/ Despite it being longer to setup, it is overall better for the needs of my game, since I’ll not only need to be able to change the height of each vertex based on a heightmap, but it can also aid with making biomes, by adding custom values to each vertex, which is simply not possible with PlaneMesh . It is also easier to load and unload certain parts of the mesh, and it is better for larger maps, since your CPU isnt doing all the hard work of choosing all the vertices and indexing them. In order to make the actually interesting part of the terrain (which btw I haven’t done in this devlog, I guess this is just like a future plans part) I can use either vertex shaders or custom scripts to make noise in the terrain. Both of these have their respective use cases, and I wouldn’t be able to say one is better than the other for my case. Vertex Shaders: GPU based no collisions (purely visual) written in Godot Shader Language (which is written in C, which is terrifying for me who practically only knows Python ( GDScript and Python are similar enough for me)) Custom Scripts: CPU based can create collisions (actually changes the vertex’s height) written in GDScript (happy days (ik I can write it in C# , but I’m staying far away from that)) Despite my fear of anything not similar to Python , I will still need to use vertex shaders. And I will explain that in my next devlog because this is getting too long. Now onto my struggles incredible skill when making a.. flat plane in Godot. I chose to do Method 2, because of it’s functionality later down the line. But that means I have to tell Godot what vertices to make, and how to connect them up. Obviously that was as simple as could be.. (you can see my failures in the screen recordings below)
Devlog 4 - A little bit of a few things I mostly did a combination of small bits, which is probably bad in terms of github commits and actual progress, but at least it’s not burning me out because I’m doing whatever part of the project I fancy at the time. UI I spent most of the time making a (hopefully) futuristic(?) looking pause menu that can also redirect you to a settings page, where I’m planning to hold the settings for terrain generation for the player to manipulate. Much of this time was spent experimenting with different Control nodes, finding out what they do and what they’re helpful for and manipulating the styles of them. I ended up with a style shown below 👇👇👇 Player Model I think I’ve finalised on a particular style, now I basically just have to make it and then texture it. The sad thing is that for some reason lapse doesn’t recognise my hackclub project anymore (already logged 5+ hrs on lapse), so all the time I spent on Blender wasn’t actually logged. If someone could please tell me how to fix this or if theres an extension for blender that would be SO helpful 🙏. Extras I also added the devlogs to my repository, it should appear there when I next commit, which should be soon!! I realise that the popular devlogs have assets from the get-go, so I probably might focus more on that, despite lapse not working if I wanna record time on Blender or Affinity. Again, if someone could please tell me if something is up with lapse or if there’s an extension that I can download for Blender or Affinity, that would be SOO helpful!! 🙏
Devlog 5 - Procedural Terrain (FINALLY!!) I made a start at making the procedural terrain, made some progress with the player model, and with configuring the basic shaders of the game. Elephant in the Room - Procedural Terrain Technically calling it procedural terrain is cheating a bit, cos really all it is right now is perlin noise applied to each vertex’s height. And with that, you can change the shape of the terrain by changing the values of some variables, like the seed, frequency, and octaves. I exported these variables so I could change them in the editor, and added @tool at the start so I can see it in the editor. I’m starting to work on a chunk system at the moment, which will load and unload chunks of the world as the player moves about. Player Model I finished modelling the player (added this version to the game) and added the bones for rigging, except when I move the arm bone, the helmet deforms, so next time I will be doing some weight painting Thankfully UV unwrapping is done as well so I should be able to texture everything before the next devlog. Also, addressing my last devlog, I said Lapse wasn’t syncing with hackatime. Turns out, if I just told it to create a new project called Celestial (which is what my project is called on hackatime), it’ll just add the time to it, so thats amazing!!! The WorldEnvironment Node I accidentally deleted my old configuration of this node while experimenting with stuff, and so I made some changes to the shading of the world. Next up is to recalculate all the normals of each triangle so shadows can be cast properly. I tried using SSAO, but every time I used that to make some sort of shadow, it changed depending on where the camera was and it made the terrain very pixelated. As you can see in the video, you can see the outlines of the terrain. That is because of the volumetric fog added. It sounds resource intensive, so if it starts to lag out my game I might remove it, which is a shame cos it looks really nice.
Devlog 6 - Chunks # 1 Previously, I had it so that the entire world was one big mesh, that could not be expanded without unloading and reloading the whole thing and more. This is obviously very inefficient, especially if I want the terrain to load in and out based on where the player is. Chunks is the answer to that. Split the world into chunks of your choice (I chose 16x16), and load/unload just the chunks you need to, not the whole thing. It seemed easy for me at first, clearly it wasn’t (the #1 for the header, ik this isnt gonna be the only devlog on this 😭 ). Bug 1 - The Normals aren’t normal Last devlog, I talked about calculating the normals, which went smoothly… For the old mesh… You see, to calculate normals, you need the vertices surrounding the vertex your trying to find out, and with chunks, that meant every 16 vertices, the normals were being calculated incorrectly, causing seams to be found in the terrain. However, since we did calculate the normals (for the most part) some pretty nice shadows have been cast on our terrain. Despite it being a bug, it is useful to find out where the chunk boundaries are, which is EXTREMELY useful for debugging, so I haven’t tried fixing it just yet. Bug 2 - Not so Good Performance After dividing the terrain into chunks, and making new chunks generate when the player moved into a new chunk, I tested it out. And every time I tried to cross a chunk border, there would be a huge lag spike. This would be caused by the fact the game prioritised the generation of chunks instead of the game. Thankfully I was able to make it so that the chunks would load whenever the processor was ready, to make sure not to overload it too much. Bug 3 - (Lack of) Collisions Another reason why chunks are useful is for limiting the area with active collisions. When the terrain was one big mesh, the entire mesh had active collisions, which would all be checking if something hit it, which is very resource intensive. Which is why I limited the area with collisions to a small radius around the player. While coding it, many logic erros came up, such as one that caused the collisions to just not work.
Devlog 7 - Chunks # 2: PROCEDURAL GENERATION DONE (mostly) Bugs Managed to fix all the bugs related to this part of terrain generation. Weird chunk errors There was an if statement (I changed it out for something else that’s more efficient) that was like: if abs(player_position.x - chunk_pos.x) > collision_chunk_size or abs(player_position.y - chunk_pos.y) > collision_chunk_size This logic error create weird stuttering issues and lag. The fix was to switch or with and . Normals DEFINITELY the bane of my existence. I know roughly what normals are due to me doing 3D modelling/rendering, but I have no clue how it actually works. And plus, I’ve barely covered the maths I need for this in school, so I spent sooo much time (much of which wasn’t recorded) just researching about normals and how they work. I think that definitely helped me find a solution to the annoying chunk borders and random artifacts found inside each chunk. Chunk Sizing I stupidly and randomly changed the chunk size from 16 to 10, which worked completely fine, except for the fact that the player script was still using the 16x16 chunk system, causing the generation to lag behind, eventually leading to the player falling off the map. New Features There were also some ✨ features ✨ that I added. Colour I added colour to the world, and if I match it to the fog and sky, I think it would look AMAZING I will make it so that the colour does vary across the planet. Player I added the rig and refined the topology for animation.
Devlog 8 - Player Model and other assets! Player Model I finished with texturing, rigging and weight painting. Next Step is to make the walking and jumping animations. Worked on the settings menu I updated the setting menu layout to account for different settings I’ll add in the future Stupid Bugs So when trying to break the terrain generation, I set the speed of the player to like 300 (which it will never be in the game except when in a space ship) but when I tried to do that, the game kept crashing, spitting out an error saying that something didn’t exist. It was coming from my unload_terrain() function. Basically how it works is it checks for all the instances of the MeshInstance3D node, and checks the name of it. For every chunk that is created, I assigned a unique name to it on creation based on the x and y coordinates of it. The function would checking all the nodes, and seeing which ones were out of the “ collision_chunk_size ” radius, and then would delete them. But when going super fast, the processing of things got all weird, meaning that when it tried to delete a chunk, and if it didn’t exist, it would crash. So I added a simple if statement if len(child_name_array) > 2: (basically it would check if the length of the name was long enough to see if there was the coord data). Stupidly I wrote the greater than sign the wrong way round, which led to me being stumped for SO long on why the terrain was just not unloading. tldr: > was the wrong way round and cost me hours.
Devlog 9 - Player Animation!! Walking and Idle Animations I finished a basic walking and idle animation for the player. The walking animation is also somewhat inspired from the kerbals from KSP. Both the animations are kinda choppy, especially when the animation loops round, but frankly icba I didn’t have enough time to fix them rn (mbmb 😭 ). Thankfully the walking animation is timed properly so that the player doesn’t look like its sliding around. Camera updates I added functionality to the camera where you can freelook around the player when holding the right mouse button. Once released, it goes back to the normal position (motion is lerped). Prepartions for next steps For the next steps, I want to go back to the terrain_generation program and start to add variation across the world (like biomes, mountains, etc.). I’m also looking to optimise it, making it generate terrain and collisions faster in prepartion for any future implementation of faster travel. So I added functionality that can allow me to make LODs, which will likely be implemented next devlog.
Devlog 10 - General updates Alright, so ik I said I would work on the procedural terrain, but instead I worked on:… Debugging Tools!! (yayy! ) When tab is pressed, it toggles on debug mode, where all meshes turn into wireframes (to check LOD) and chunk boudaries are shown. There are problems with chunk boundaries not despawning when the terrain its on is gone, but that’s fixed when you toggle debug mode again :). I could fix it but icba I have other stuff that needs to be prioritsed. Resizabile UI So before, if you resized the window, the pause menu and settings menu would be offset from the centre and wouldn’t scale with the window. Now when you scale it, the pause and settings menu stay in the centre and scale accordingly. (the flickering in the video is just an artifact created by the godot editor, and will apparently be fixed once exported)
Devlog 11 - General updates 2.0 Editor Tools!! - (to see the terrain in the editor) So in a previous devlog, I think I talked about how I added @tool in my terrain generation program to be able to see it in the editor. Once I made it dependent on the player position, it didn’t generate in the editor because the player wasn’t loaded in. So now I made it so that if the script was running while the editor (not the game) is open, the terrain would generate around (0, 0) based on how ever big the render distance is. Also I made it so that if you tweak the value of any of the primary noise settings in the editor, it updates in the editor. On top of that, I set the viewport to display wireframe so that I can see the triangles at different resolutions, which is where I came across:…. FLOATING POINT ERRORS!!! (yay ) I noticed that if I set the resolution to a decimal value that was not a power of 2, the triangles would be off by some amount, causing neighbouring triangles to overlap each other, causing normal and collision problems. The resolution variable is going to be eventually used for LODs, so since I’ll be the only setting it, I’ll just make sure to use a value thats a power of 2 The reason why this happens is because 16 (my chunk size) can be multplied and divided by 0.125 (2^-3) evenly to create an integer, compared to 0.1 which results in 1.6. Any smaller power of two is rounded it to the nearest 3dp, so 0.0625 (2^-4) doesn’t work. Camera Issues So I made functionality with the camera where you can scroll to zoom the camera in and out, and if you scroll far enough in, you’ll be in first person, much like how it works in Roblox. There was one problem though. Since the material for the visor on the player model was somewhat transluscent, your view would get darker. Also, you could free look inside the helmet, looking at the areas I wasn’t bothered to model and texture hadn’t modelled. So I disabled that in first person. The biggest timewaste of my life In an attempt to offload some of the generation to the GPU for more effecient parallel processing, I tried to figure out which parts of the algorthim were going to be handled by the CPU and GPU. There were some that had to be handled by the CPU, and there was no choice about those, and they were: collisions and figuring out what chunks should be rendered. At first I thought, how about I offload nearly everything to the GPU, including the noise function. Then I learnt that FastNoiseLite didn’t exist in .gdshader . So I did what any normal person would do, and CODE PERLIN NOISE BY HAND. I spent HOURS learning everything my dumbass could about it: vectors, normals, gradients, deviation, erosional generation, and finite difference approximation. At least I probably learnt something useful for FSMQ 🤷 (a British maths exam most students do in yr11 along with their other GCSEs).
Devlog 12 - General updates 3.0 I PROMISE THIS IS THE LAST ONE GUYS 🙏 Performance Stats I added a little HUD showing the FPS, the time it takes to make one frame (has to be below 16.67ms (60fps) or there will be noticeable lag), and the memory usage. Lighting, Shadows, and World Environment I slightly changed the shadow bias and normal bias so that shadow artifacts are to a minimum. On top of that, I set it so that shadows aren’t cast for the terrain, which unintentionally handles with some of the artifacts, whilst keeping the “shadows” by illuminating the terrain depending on where the DirectionalLight3d is, making the “shadows” reponsive to a future day-night cycle. Also the volumetric fog and lighting looks better Camera Issues 2.0 So previously I had the player hide() when you go into first person, but that also effects the shadows. So instead I made the visor disappear when you go into first person. But then there was another problem. The head would move during the idle and walking animations, which is quite distracting and could be problematic for some players. So I stopped the animtions whilst in first person. It is a very rudimentary fix, since players can look at their shadows and see the lack of animation. Furthermore if I want to add multiplayer in the future, it’ll look very weird. Performance checks In preparation of the biome generation, I wanted to make sure the performance is fine. It takes a bit for the terrain to generate at the start, but thats common across nearly every game. And this will be lightened a bit when I implement LODs. Once the game is running, it runs relatively fine, except with (very quick) lag spikes when the chunks update. To address this, I’m planning of offloading some of the terrain generation to the GPU, which can calculate normals a LOT more effeciently and quicker than the CPU. Current, the CPU calculates all the vertices, indices, normals, and then compiles it into an ArrayMesh , which is given to the GPU for rendering. This can put a lot of strain on the CPU, especially later down the line, so it’s better and more effiecient if the GPU does the very repetetive calculations, by making it do all the normal calculations, including other stuff.
Devlog 13 - LOD template I basically deleted all the old code, and started over, by making a function where the noise will be given to the vertex shader, and one that will generate the actual flat mesh for it (which is going to be changed by the vertex shader). I made the template for making flat planes with different levels of detail (LOD), which will be changed by the vertex shaders, applying the noise to the mesh. I created a new script called lod.gd and gave it a class name, so that I can call multiple instances of it in the main terrain generation program. Every time the program wants to make another chunk, I have to pass the arguements: resolution - what ive defined as a synoymn of LOD chunk_pos - where the chunk is The function then loads an ArrayMesh from a pre-generated list of possible meshes and creates a new MeshInstance3D node to display it. Extra stuff I also added player coords and chunk position in the debug_screen :)
Devlog 14 - LOD chunks ——— OPTIMISATION IS SOO HARDD 10hrs to do practically do something I’ve already done? (i had already made a chunk system in previous devlogs) Well, whilst some of that time was transferring code from my old commits to the current one and making sure it works, most of the time I spent on this devlog was spent on ✨ “optimisation” ✨ Optimisation First of all, I added LODs into the chunk mesh. What this means is that since further away chunks take up less of your screen, the level of detail (LOD) is reduced the further away it is. I had already made the script that handled the creation of those different meshes with different LODs, so in this devlog, I added it to the main terrain generation script, and assigned each LOD to a certain distance, so that any chunk with a certain distance has a certain LOD. In my last version of the terrain generation, I relied on the name of the MeshInstance3d nodes created to identify what chunk they were. I realised when making this updated version that it was prone to failure, since if the node did not exist or a node with the same name were some how added to the scene tree, errors would be raised or at the very least, a logic error would occur. To recetify this, I switched to using dictionaries to house all the information of all the chunks: chunks : Dictionary [ Vector2i , int ] = { Vector2i ( 0 , 0 ): 0 , Vector2i ( 0 , 1 ): 0 , #etc } The key is chunk coordinate, and the value is the LOD (0 being the highest, 4 being the lowest) Every time I wanted to update the terrain, I would search the scene tree if a particular node was unwanted (again, by looking at the name) and then generating the rest of the ones wanted. This way would not work with LODs, since some chunks may still exist, but may have to change LOD depending on where the player is. So I made use of the dictionary and also created a new one that would store the chunks that I want created. It would loop through the dictionarys, checking certain conditions, and the terrain would be updated. All this looping is somewhat inefficient, and did cause some lag spikes, so I will try to fix that next devlog by only checking the chunks that would be affected based on which way the player moved. To help with the looping, I created chunk and lod lookup tables, that can be offset based on the players_position. These lookup tables are only changed when the render distance is changed, so the same calculation doesn’t have to run hundreds of times in 16ms (60 fps).
Devlog 15 - I’m an Idiot For the past 95ish hours, I’ve been working on a way to make procedural terrain for my game. I tried 2 main methods, one centred round the CPU, and one I was building centred around the GPU. The endless chunk seam bugs caused me to burnout/get tired of the entire project, and there was so many stuff (that I won’t really be explaining for the sake of my poor reader’s sanity) leading to me ✨ youtube ✨ I saw this AMAZINGLY smart video by devmar, showing an alternate way of generating terrain. I urge you to watch the video as well, the whole technique is very very clever, and he even goes on to make further videos on making collisions, recalculating normals and adding vegetation, especially if your interested in procedural generation. After watching this video however, I became incredibly frustrated. I spent nearly 100hrs of my summer making this procedural terrain which I know hadn’t gotten anywhere and theres this incredibly smart video from 4yrs ago that pops up on my feed. Welp, now ig i gotta try out this way, and quick cos my parents are on my tail talking about me finishing this project before school starts 🙏 (its my gcse year so ig its valid but still ) Now what I actually did that counted to my time Experimented with vertex shaders, and sending heightmaps to vertex shaders to displace. This however caused immense lag and caused VERY ANNOYING chunk seams. #epicfails
Devlog 16 - AMAZING PROGRESS!! I’ve managed to get a massive 20km render distance with huge mountains and ridges using FastNoiseLite and vertex shaders. I used devmar ’s terrain technique, which he named the “Wandering Clipmap Terrain Technique”. The reason why the technique is called the “ Wandering Clipmap Terrain Technique” is because a flat plane that is subdivided a bunch (to make varrying levels of detail (LODs)) that follows the player. The vertex shaders then offset the heightmap so it gives off the illusions that your moving about in a massive world. All the displacement is done by the vertex shaders, which looks at a heightmap. In the future, I might make this heightmap be generated in gdscript instead of in the inspector, to deal with texture resolutions. Currently, from afar, the terrain looks amazing (except from the fact its not textured) but upclose, you can see rings in the terrain, which is caused by the heightmap’s resolution being too low. In fact each ring is about 8m tall so I really need to fix that 😭 The normals are calculated by just copying the heightmap and setting it ‘as normals’ in the inspector. They also are multiplied by a normal basis matrix, which allows me to configure the specific normal settings. I’ll need to calculate the normals in the fragment shader as well in the future for more convincing shadows, but for the mean time, the vertex shaders should do just fine. I’m planning on adding collisions, then maybe textures, biomes and vegetation soon!!
Devlog 17 - I am incredibly frustrated. No matter what I do it feels like I just can’t get the collisions to work. Basically, I’m trying to fetch the heights from the height map to input into the CollisionShape3D, but the coordinates are always offset in some way or the other. I even used AI my friend to basically rewrite the entire script over and over again, but that didn’t work either. Maybe it’s cos school has started now, and I haven’t been able to spend that much time on this project than I would like to As you can see in the photo, the collision mesh (in blue) is offset from the normal terrain (in white)
Devlog 18 - I am happy once again!! I FINALLY got the collisions to work!! Basically, it looks at the terrain model that is imported into Godot, and aligns the vertices of the CollisionShape3D with it. It also updates its position every time the player moves 1 unit (whatever the size of a quad of the mesh is). Then it looks at the heightmap, looks up the height of its coresponding pixel, multiplies that by the height shader param (2000, like in the vertex shaders), and thats the collision shape done. I noticed while walking around the world, that there were these massive ridges on the terrain. This is due to the lack of precision in the heightmap. The heightmap only has 256 shades of grey, and I need 2000 values. It is quite impossible to make a image file with that much precision, so instead, I’ll make it so that the CPU will just send an array to the vertex shader. Also, I’ve rebranded my project to Worlds Unbound, and this specific Stardance project will just be handling the terrain stuff for the game. p.s, it never goes above 16ms, i think thats probably because i was recording
Devlog 19 - Main Menu Added (and other things)! I spent quite a lot of time making the background for the main menu in Blender. After just copy and pasting the player model used in the game, I went ahead and made the main attraction: ✨ the planet in the background ✨ . My knowledge of noise that I gained from my previous attempts at the terrain generation helped me create the stars in the background, and the texture for the actual planet in the shader editor. I also added a slight atmosphere, which is (somewhat?) noticeable. I also went ahead and updated the shader code. Before, I used to use the visual shaders, since it was quite similar to the shader editor in Blender, which I was familiar with. But then I realised there’s just more flexibility with using GLSL . I can group uniforms in the inspector, making it clearer and less cluttered if I want to add textures in the future, including different images for the same texture (like Ambient Occlusion, Normals, Colours, and Roughness). Thus being able to group those different types images for the same texture was very important for future usability. Thankfully, Godot allows you to see the shader code that is generated from the visual shaders. Unfortunately, it was not readable at all. The generated code used a random(ish) collection of numbers and letters, and it was too long. Look below for the comparision for just the vertex shader, but it was something like 84 lines that was shruken down to 10 for the vertex shader. Even if you account for spaces in the generated code (which then it might be like 50-60 lines) thats a huge difference. So it took quite some time to get it to a readable state. edit: idk why the actual background looks so bumcheeks compared to the banner, hopefully itll be fixed by then 🤞
Devlog 20: GPU noise I found a way to make noise using a Godot addon called FastNoiseLite Runtime Shader . It was apparently identical to the FastNoiseLite in GDScript. So I gave it a try. I knew it was a gamble, given how much time I got left to ship an decent project, but I gave it a try since it seemed interesting. It wasn’t that hard to get the noise working, but to get it to sync with the collisions was a nightmare. In the end, I decided that even though the README stated it was 99.9% the same, the output seed by seed was different. So I decided to scrap it and now I’m going back to the old version with heightmaps. Why did I really want to switch? Because of the limited colour depth in images (has to be 8-bit for GDShader to read), theres not enough heights for each vertex to be at, so every so often, there’s this massive wall. It looks fine from afar, but thats probably because my terrain is 20km x 20km, so of course an 8m tall wall would look fine. (the image is from the addon readme)
Devlog 21 - Ship Prep!!! Colours I added colours to the terrain depending on how high the vertex is. This does create a very harsh border between the two colours, but I didn’t want to learn lerping, ik how to larp enough. Cleaned up my commits My commits were, and probably are still messy, and when I went ahead to revert some changes it said there were errors, but now thankfully that’s all fixed. :) I also updated quite small normals and some technical stuff.
Ships:
— SHIP No.1 — I spent the last couple of months making a model terrain, which I will use for my game that I will continue to build after this competition. My game idea is quite ambitious, and given how long it took for me to get this basic terrain to work properly and well, that won’t even be coming with the extra month added one. I lot of you may be thinking though, what on earth were you doing for 125 hours, when all you came up with is a glorified green and grey piece of paper you could walk on. Well, not only was I learning and using Godot for the first time, it was the first time I learnt anything as complicated as this. I had to wrap my head around complex (at least for me) maths and computer science topics, like vectors and cross product, noise and FBM, TBN model, and UVs, not to mention just the sheer amount of logic I had to get through. It was so tiring to keep getting bugs for the chunking system I had, or the collisions. But thankfully, all that is behind me 😼. I’ll give you a more indepth look into what I’ve done over the past couple months. Devlogs 1-12: This period was the general beginning of my project. Not only was I learning Godot, and watching tutorials on it, I was also spending time on the player character, the camera system, and the world environment. Devlogs 13-15: I tried to implement LODs into my chunks, since the performance was simply too bad. Somehow this made it worse, possibly because of more chunks (the ones at the broder of LOD borders) being forced to be unloaded and loaded back in. Devlogs 16-21: I used my current technique, heavily based from devmars video on youtube about procedural terrain during this period. School had also started, so I spent less and less time on it, being significantly burnt out and tired. So I basically went through 3 iterations of terrain for my game, so that is why it took so long to get to this point....
|
1793670795.7781034
|
1793757195.7781034
|
|
64272
|
My awesome macropad! by @Dycel | Stardance
|
Dycel
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Dycel | Stardance
|
1793670797.0958893
|
1794275597.0958893
|
|
43024
|
nwwm by @pinetree182 | Stardance
|
pinetree182
|
1
|
30.0
|
496
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T02:18:12Z", "hours": 30.0, "multiplier": 16.48, "payout": 496, "blessing": "neutral", "text": "I made nwwm, a simple tiling window manager for the X windowing system, a popular display server for Linux. Its job is basically to decide where windows go on the screen and how they should look, as well as listen to keypresses and decide what should happen. I ran into quite a few issues since I was using Rust which is not a language I’m 100% familiar with, and this was also my first proper systems-level project, but I managed to pull through and I’m really happy with where nwwm has gotten. Some features include: Tiling Multiple workspaces Support for docked windows, like statusbars Config loading from ~/.config/nwwm/config.toml Configurable keybinds (Barebones) EWMH support Since this is a Linux project, I know that most people won’t be able to test it so I’ve made a small video showing off some of the core features. You can view this video on the website, just scroll down to the “Demo” section and play the video.", "repo": "https://github.com/annaxiomm/nwwm", "demo": "https://annaxiomm.github.io/nwwm"}]...
|
[{"post_id": 72932, "ts": "202 [{"post_id": 72932, "ts": "2026-09-24T02:13:03Z", "hours": 5.9592, "text": "devlog #8 - the end is near stardance is coming to a close, the school holidays are nearing, and I’m running out of things to add to nwwm so I think I’m going to ship it here. I’m really happy with how far I’ve come in this project and I’ve learned a ton about X11, Rust, and myself. GAPS!! every good modern tiling window manager has gaps, so naturally I added them to nwwm. you can configure them in the config.toml through the gaps_inner and gaps_outer rules. gaps_inner controls the gaps between the windows themselves, and gaps_outer controls the gaps between the windows and the outer edge of the screen. other essentials I also added the ability to move windows between two workspaces. you can now set keybinds with the movetoworkspace <workspace> action to move the currently focused window to <workspace> . this was fairly easy to implement but I did run into a bug where the wm wasn’t correctly selecting a new window to focus after the focused window was moved to another workspace. I also finally added the ability to move focus backwards instead of just forwards, which you can do with the focus last action. promotional material I also sunk a few hours into making a cool little website for nwwm. it’s pretty generic but it gets the job done, and has a demo, config, screenshot, project description, and an example config file. you can see the website at annaxiomm.github.io/nwwm . finally, I made a simple logo in the form of a compass (because nwwm stands for N orth W est W indow M anager ) next steps ship it cash in my loot"}, {"post_id": 67018, "ts": "2026-09-13T01:49:32Z", "hours": 1.0403, "text": "devlog #7 - sanity check a bit of a short devlog here, but I decided to take a break from programming to make the repo look a bit more presentable (I’m planning to ship soon so it needs to look good for the camera!) README changes the existing README was quite barebones so I fully fleshed it out with a bunch of new stuff, including a proper testing tutorial, configuration help, and an entire section dedicated to what’s wrong with the project and what I’m going to fix when I decide to try and rewrite this bowl of spaghetti at some point next steps cleaning up the project, writting code comments, etc polishing up the project with some final features, like vanity gaps making a landing page for the wm because I know that when it comes time to ship, most people won’t be able to try out nwwm for themselves so I want to make a little showcase (so I don’t get a bad grade for usability!)"}, {"post_id": 66302, "ts": "2026-09-12T02:00:06Z", "hours": 3.9894, "text": "devlog #6 - CONFIGURATION!!! adding a config file has been in the next steps of just about every devlog i’ve made, and i finally got around to doing it! config.toml nwwm wouldn’t be a cliche rust project without a config.toml . but in all seriousness, i really like toml as a configuration language and it integrates really cleanly with rust anyway. so far, you can set parameters like window border, mod key, and default layout in $HOME/.config/nwwm/config.toml and nwwm will read those and apply them at runtime. unfortunately, config isn’t reloadable at the moment (next step?). you can also configure keybinds and even startup commands! i would really have liked to have lua scripting as a config but it’s just a bit too hard for a first wm project. the error handling is pretty hairy at the moment but i’ll fix that soon i promise other stuff i’ve changed not much else happened, but i added a feature where debug logging only happens if you run nwwm with -v or --verbose . next steps better error handling in config loading config re loading at runtime better documentation (maybe a website?)"}, {"post_id": 64645, "ts": "2026-09-09T06:37:27Z", "hours": 6.4375, "text": "devlog #5 - self hosted? ok it’s been quite a while since my last devlog but i’ve added a ton of new stuff - to the point where nwwm might become my main window manager soon! docks n’ struts “what even are those?” i hear you ask, and fear not because i am here to answer. a docked window is any kind of window that isn’t tiled, doesn’t belong to any workspace, and reserves space on the screen that other windows can’t take up. a really common example is a status bar: it persists between desktops, and reserves space on the screen. a strut is basically the space on the screen that it reserves. i implemented support for this so you can now use your favourite status bar with nwwm! i also spent like 3 hours debugging an error that happened sometimes when you closed a docked window, and ended up fixing it by complete accident workspaces 🧰 a window manager is basically useless without workspaces, so naturally i’ve added them to nwwm. they were actually quite easy to implement since i’ve technically supported them since day 1 i just never added workspace switching. basically when you switch a workspace it checks to see if the workspace exists, then it unfocuses the current window, unmaps (hides) all the windows in the current workspace, switches to the new workspace, maps (shows) all the windows in the new workspace, and focuses the first window in the new workspace. phew, try saying that in one breath! status bar compatibility as i mentioned earlier, i added struts and docks so that status bars can reserve space on the screen, but i also added some ewmh hints that allow status bars to see and change the current desktop. this was really easy, i just had to add some atoms and listen for ClientMessage events, and then connect those to my existing code next steps config file loading more ewmh 😭"}, {"post_id": 46047, "ts": "2026-08-12T23:48:13Z", "hours": 3.6097, "text": "devlog #4 - +10 usability! we’re now shifting from the realm of “experimental” to “experimental but usable ”. i’ve added a ton of new features recently and i’m really happy with how nwwm is coming together. actually good tiling i’ve added 2 new tiling layouts: monocle, and master/stack. monocle is the easiest to understand: all windows are the same size as the screen, and the currently focused window is brought to the front. master/stack is the traditional layout you see in wms like dwm, where there is a “master” window that takes up half of the screen and the rest split vertically (or “stack”) on the other half of the screen. i also added keybinds that switch between layouts revamped keybind system previously, the keybind system was just using raw x11 keycodes which were really annoying because they don’t match up with any other system (25 = w??) and are keymap-dependant. so, i switched to using xkbcommon and now keybinds are defined with more human-readable keysyms like KEY_w or KEY_Return . i also implemented a small command runner system so now you can launch commands with keybinds. so far i’ve set Mod+Enter to launch kitty and ofc these will all be configurable through the config file mysterious bugs i spent ages trying to debug some weird behaviour where bound keys wouldn’t register as keypresses if no windows had been opened in nwwm yet. after a lot of trial and error, and a few ChatGPT therapy sessions, i discovered that my error was one letter: i had keyboard_mode in the global mouse grab (which i need for click to focus) set to GrabMode::Sync instead of GrabMode::Async (fml) next steps more usability (moving windows, closing windows) better EWMH compliance support for temporary and permanent floating windows (i.e. tiled windows that you make float, and windows that only float like rofi) config file when?"}, {"post_id": 42968, "ts": "2026-08-07T23:32:08Z", "hours": 3.5736, "text": "devlog #3 - wow! visuals! how many times can i call conn.send_request() in one program?? config file i made a struct called Config which the wm owns, and it has values like border width, color, and keybinds. eventually it will read from a config.toml file but for now it’s all hard coded in the source code. window borders windows now have borders with color and width deriving from the Config (meaning they’ll be configurable through a config file at some point!). also, the currently focused window has a different border color (also configurable!) modular keybinds instead of hard-coding keybinds, i gave Config a child called Keybinds , which are hard coded in the source code… but eventually they’ll be part of the config file. when each keybind is called, it calls an Action which is linked to a function call in the wm. later there’ll be plenty of actions for anything you can think of, but for now theres only FocusNext which… focuses the next window! next steps config.toml loading better tiling (again) gaps EWMH compliance"}, {"post_id": 42307, "ts": "2026-08-06T23:15:26Z", "hours": 2.8794, "text": "devlog #2 - an actual window manager x11 is an ancient beast, full of mismatched types (screen height is a u16, window height is a u32, window position is an i32, etc), difficult protocols, and more double colons than you can shake a stick at, but i’m working through it. a (tiling) window manager i started off by storing a list of open workspaces in the main wm struct, and each workspace has a list of open windows (and a tiling layout). then, i made the wm listen for DestroyNotify events and remove them from their respective workspaces. soon after marvelling at my creation i realised that i could only see one window at a time, so i worked on implementing a basic tiling algorithm. so far, all i have is columns ( window_width = screen_width / num_of_windows ) but i’m working on adding master-stack tiling (what dwm uses) focus! i also realised that it’s no use having multiple windows if you can only use type on one, so i made each window grab the left click, and then listen for ButtonPress events, focusing the clicked window. next steps more tiling layouts cosmetic stuff (borders, gaps) keyboard shortcuts"}, {"post_id": 40452, "ts": "2026-08-03T23:38:06Z", "hours": 2.6114, "text": "devlog #1 - getting things started after working on tundra I decided that I wanted to make a window manager for an actual os instead, so I loaded arch onto an old macbook and got started. xlib woes I initially started by loosely following a tutorial that uses xlib for rust, but I soon realised that any direct mapping to C from rust is going to be an absolute horror to use (literally every function call had to be unsafe), so I switched to xcb. it has a slightly different API but it’s cleaner and i3 uses it so it must be good. current features: it runs it doesn’t crash you can open a window (by externally injecting it from a command prompt next steps: storing open windows in a struct / list basic tiling"}]...
|
Title: nwwm by @pinetree182 | Stardance
Devlogs:
Title: nwwm by @pinetree182 | Stardance
Devlogs:
devlog #1 - getting things started after working on tundra I decided that I wanted to make a window manager for an actual os instead, so I loaded arch onto an old macbook and got started. xlib woes I initially started by loosely following a tutorial that uses xlib for rust, but I soon realised that any direct mapping to C from rust is going to be an absolute horror to use (literally every function call had to be unsafe), so I switched to xcb. it has a slightly different API but it’s cleaner and i3 uses it so it must be good. current features: it runs it doesn’t crash you can open a window (by externally injecting it from a command prompt next steps: storing open windows in a struct / list basic tiling
devlog #2 - an actual window manager x11 is an ancient beast, full of mismatched types (screen height is a u16, window height is a u32, window position is an i32, etc), difficult protocols, and more double colons than you can shake a stick at, but i’m working through it. a (tiling) window manager i started off by storing a list of open workspaces in the main wm struct, and each workspace has a list of open windows (and a tiling layout). then, i made the wm listen for DestroyNotify events and remove them from their respective workspaces. soon after marvelling at my creation i realised that i could only see one window at a time, so i worked on implementing a basic tiling algorithm. so far, all i have is columns ( window_width = screen_width / num_of_windows ) but i’m working on adding master-stack tiling (what dwm uses) focus! i also realised that it’s no use having multiple windows if you can only use type on one, so i made each window grab the left click, and then listen for ButtonPress events, focusing the clicked window. next steps more tiling layouts cosmetic stuff (borders, gaps) keyboard shortcuts
devlog #3 - wow! visuals! how many times can i call conn.send_request() in one program?? config file i made a struct called Config which the wm owns, and it has values like border width, color, and keybinds. eventually it will read from a config.toml file but for now it’s all hard coded in the source code. window borders windows now have borders with color and width deriving from the Config (meaning they’ll be configurable through a config file at some point!). also, the currently focused window has a different border color (also configurable!) modular keybinds instead of hard-coding keybinds, i gave Config a child called Keybinds , which are hard coded in the source code… but eventually they’ll be part of the config file. when each keybind is called, it calls an Action which is linked to a function call in the wm. later there’ll be plenty of actions for anything you can think of, but for now theres only FocusNext which… focuses the next window! next steps config.toml loading better tiling (again) gaps EWMH compliance
devlog #4 - +10 usability! we’re now shifting from the realm of “experimental” to “experimental but usable ”. i’ve added a ton of new features recently and i’m really happy with how nwwm is coming together. actually good tiling i’ve added 2 new tiling layouts: monocle, and master/stack. monocle is the easiest to understand: all windows are the same size as the screen, and the currently focused window is brought to the front. master/stack is the traditional layout you see in wms like dwm, where there is a “master” window that takes up half of the screen and the rest split vertically (or “stack”) on the other half of the screen. i also added keybinds that switch between layouts revamped keybind system previously, the keybind system was just using raw x11 keycodes which were really annoying because they don’t match up with any other system (25 = w??) and are keymap-dependant. so, i switched to using xkbcommon and now keybinds are defined with more human-readable keysyms like KEY_w or KEY_Return . i also implemented a small command runner system so now you can launch commands with keybinds. so far i’ve set Mod+Enter to launch kitty and ofc these will all be configurable through the config file mysterious bugs i spent ages trying to debug some weird behaviour where bound keys wouldn’t register as keypresses if no windows had been opened in nwwm yet. after a lot of trial and error, and a few ChatGPT therapy sessions, i discovered that my error was one letter: i had keyboard_mode in the global mouse grab (which i need for click to focus) set to GrabMode::Sync instead of GrabMode::Async (fml) next steps more usability (moving windows, closing windows) better EWMH compliance support for temporary and permanent floating windows (i.e. tiled windows that you make float, and windows that only float like rofi) config file when?
devlog #5 - self hosted? ok it’s been quite a while since my last devlog but i’ve added a ton of new stuff - to the point where nwwm might become my main window manager soon! docks n’ struts “what even are those?” i hear you ask, and fear not because i am here to answer. a docked window is any kind of window that isn’t tiled, doesn’t belong to any workspace, and reserves space on the screen that other windows can’t take up. a really common example is a status bar: it persists between desktops, and reserves space on the screen. a strut is basically the space on the screen that it reserves. i implemented support for this so you can now use your favourite status bar with nwwm! i also spent like 3 hours debugging an error that happened sometimes when you closed a docked window, and ended up fixing it by complete accident workspaces 🧰 a window manager is basically useless without workspaces, so naturally i’ve added them to nwwm. they were actually quite easy to implement since i’ve technically supported them since day 1 i just never added workspace switching. basically when you switch a workspace it checks to see if the workspace exists, then it unfocuses the current window, unmaps (hides) all the windows in the current workspace, switches to the new workspace, maps (shows) all the windows in the new workspace, and focuses the first window in the new workspace. phew, try saying that in one breath! status bar compatibility as i mentioned earlier, i added struts and docks so that status bars can reserve space on the screen, but i also added some ewmh hints that allow status bars to see and change the current desktop. this was really easy, i just had to add some atoms and listen for ClientMessage events, and then connect those to my existing code next steps config file loading more ewmh 😭
devlog #6 - CONFIGURATION!!! adding a config file has been in the next steps of just about every devlog i’ve made, and i finally got around to doing it! config.toml nwwm wouldn’t be a cliche rust project without a config.toml . but in all seriousness, i really like toml as a configuration language and it integrates really cleanly with rust anyway. so far, you can set parameters like window border, mod key, and default layout in $HOME/.config/nwwm/config.toml and nwwm will read those and apply them at runtime. unfortunately, config isn’t reloadable at the moment (next step?). you can also configure keybinds and even startup commands! i would really have liked to have lua scripting as a config but it’s just a bit too hard for a first wm project. the error handling is pretty hairy at the moment but i’ll fix that soon i promise other stuff i’ve changed not much else happened, but i added a feature where debug logging only happens if you run nwwm with -v or --verbose . next steps better error handling in config loading config re loading at runtime better documentation (maybe a website?)
devlog #7 - sanity check a bit of a short devlog here, but I decided to take a break from programming to make the repo look a bit more presentable (I’m planning to ship soon so it needs to look good for the camera!) README changes the existing README was quite barebones so I fully fleshed it out with a bunch of new stuff, including a proper testing tutorial, configuration help, and an entire section dedicated to what’s wrong with the project and what I’m going to fix when I decide to try and rewrite this bowl of spaghetti at some point next steps cleaning up the project, writting code comments, etc polishing up the project with some final features, like vanity gaps making a landing page for the wm because I know that when it comes time to ship, most people won’t be able to try out nwwm for themselves so I want to make a little showcase (so I don’t get a bad grade for usability!)
devlog #8 - the end is near stardance is coming to a close, the school holidays are nearing, and I’m running out of things to add to nwwm so I think I’m going to ship it here. I’m really happy with how far I’ve come in this project and I’ve learned a ton about X11, Rust, and myself. GAPS!! every good modern tiling window manager has gaps, so naturally I added them to nwwm. you can configure them in the config.toml through the gaps_inner and gaps_outer rules. gaps_inner controls the gaps between the windows themselves, and gaps_outer controls the gaps between the windows and the outer edge of the screen. other essentials I also added the ability to move windows between two workspaces. you can now set keybinds with the movetoworkspace <workspace> action to move the currently focused window to <workspace> . this was fairly easy to implement but I did run into a bug where the wm wasn’t correctly selecting a new window to focus after the focused window was moved to another workspace. I also finally added the ability to move focus backwards instead of just forwards, which you can do with the focus last action. promotional material I also sunk a few hours into making a cool little website for nwwm. it’s pretty generic but it gets the job done, and has a demo, config, screenshot, project description, and an example config file. you can see the website at annaxiomm.github.io/nwwm . finally, I made a simple logo in the form of a compass (because nwwm stands for N orth W est W indow M anager ) next steps ship it cash in my loot
Ships:
I made nwwm, a simple tiling window manager for the X windowing system, a popular display server for Linux. Its job is basically to decide where windows go on the screen and how they should look, as well as listen to keypresses and decide what should happen. I ran into quite a few issues since I was using Rust which is not a language I’m 100% familiar with, and this was also my first proper systems-level project, but I managed to pull through and I’m really happy with where nwwm has gotten. Some features include: Tiling Multiple workspaces Support for docked windows, like statusbars Config loading from ~/.config/nwwm/config.toml Configurable keybinds (Barebones) EWMH support Since this is a Linux project, I know that most people won’t be able to test it so I’ve made a small video showing off some of the core features. You can view this video on the website, just scroll down to the “Demo” section and play the video....
|
1793670797.9802077
|
1793757197.9802077
|
|
47889
|
sorting algs by @Lumethra | Stardance
|
Lumethra
|
1
|
16.0
|
212
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T19:32:31Z", "hours": 16.0, "multiplier": 13.53, "payout": 212, "blessing": "neutral", "text": "A 3d sorting algorithm visualizer with NextJS and ThreeJS. Also its made with luve and happiness.", "repo": "https://github.com/Lumethra/sorting-algs", "demo": "https://lumethra-sorting-algs.vercel.app/"}]...
|
[{"post_id": 73291, "ts": "202 [{"post_id": 73291, "ts": "2026-09-24T19:30:47Z", "hours": 0.4911, "text": "I wrote my readme in this session, so nothing really to say. It was just typing typing typing and finishing this beautiful readme to be able to submit this project."}, {"post_id": 73279, "ts": "2026-09-24T18:57:15Z", "hours": 0.4069, "text": "Implemented pause logic. I implemented pause logic and added an indicator, which shows, which sorting algorithm is currently active. The pause logic was quite painful, cause it just didnt want to stop. Neither with break, nor with return. After a long long long trouble shooting session, I found out, that I forgot .current and it just wont detect correctly, what a stupid bug to troubleshoot 20 min for. Also I fixed an edge case in the demo vid xD"}, {"post_id": 73266, "ts": "2026-09-24T18:19:33Z", "hours": 2.58, "text": "FINALLYYYY Today was the final coding session. I finally got the UI right and am okay with it. Its not the best, but its acceptable. I decided to only use icons, to keep it clean, but I ran into the problem, that the icons arent clear enough to showcase the specific sorting algorithm. So I decided on making a tooltip. But the build in HTML tooltip is too ugly and the delay is annoying. I did some research and found a W3Schools tutorial, they are the goat ( here it is ). I didnt expect front end being so time intensive, but I did need to adjust every value so it looks good, which is very hard to do :(. Ah, I also fixed the bug that when there is the minimal amount of pillars, it will be weird while shuffling (that wasnt proper english). Also the icons changes depending if we are shuffling or sorting and the disables and reinables, which is cool. Uhh, I remembered sth, I need to implement canceling while sorting. Also the vid is one fix old, i did fix the typo in the sorting alg."}, {"post_id": 72326, "ts": "2026-09-22T17:49:27Z", "hours": 1.4453, "text": "Thats enough, Ima do CSS tomorrow. Today I added a slider style and 2 other sliders for the shuffling and sorting speed. Then I hid those 2 and the remove and adding pillar buttons. Also added some CSS for flex, justify content, space between, to seperate the drop down, which I added too. I tried to add a scrolling drop down thing, but failed, uhh, I also adjusted the pillar speed and camera angle. Also I found out, that I can call functions from an array, so I can store a function in an array and then call it like that, thats weird, but also huge. Dont wanna write too much today, cause I still have stuff to do. Ah, also added prevention of shuffling while sorting."}, {"post_id": 71209, "ts": "2026-09-20T13:27:14Z", "hours": 1.2819, "text": "Slider!! Today I added a slider that controls the adding and removing of pillars. I had some minor problems. (No, they were huge, but I feel better saying that they were minor ). First of all, I needed to figure out how to set default values. Normally its just value=””, but this doesnt work for a input type range. After some research I found out that its simply defaultValue, I feel dumb. Then I tried to add/remove pillars with useEffect and monitor the changes of the slider. This worked, but also didnt. I needed to manually update the pillars. It didnt do it automatically. Then my brain suggested something genius. Using onChange. But now I need to do an extra function for it. I thought, maybe I use a while loop once. While the number array is smaller run add function and while its bigger, the remove function. This was uhh, not that good, because it somehow resulted into an infinite while loop, because js is asynchronous. I also tried with a for loop. This threw the error, that I set the 2 useState too often. After some experimenting I ended up with my current solution. I also added 2 useState variables for the sorting delay and shuffling delay. I am still searching for a great mathematical, anti-proportional, linear function to adjust it corresponding to the pillars count. Ahh and I also updated the camera adjusting logic a bit."}, {"post_id": 70217, "ts": "2026-09-18T18:42:46Z", "hours": 1.0872, "text": "HOLY WAS THIS A STRUGGLE !! In this session I implemented adding and removing numbers for a slider in the future (hopefully tomorrow). THIS WAS A PAIN. Especially the camera handling. The very very basic adding and removing function was quite easy, since its only adding numbers or splicing numbers from the array (stack overflow my goat). The camera thing was quite hard though. When I add enough numbers it could make the pillars taller than the viewheight, making them sticking “off screen”. The fix was zooming out. But the fix on stack overflow needed to let it be a JSX element, which somehow didnt work. Finding the fix was one problem. The other problem is, that after finding the fix, it still didnt work and the camera “fell” down. After a long debugging session with various console.logs, I finally found the problem and it was one of the stupid ones. I used z, where it should have been y, thats dumb, but eyy, here we go. There were also a few other bugs, like having an infinite while loop when only having one pillar and shuffling. This was fixed by making the minimum number 2. The other bug was, weird camera behaviors happen, when reducing the number while its shuffled. Fixing it with an instant sort before reducing the number of pillars was my approach. Ya, that was about it. I am done for today."}, {"post_id": 70112, "ts": "2026-09-18T14:17:37Z", "hours": 1.1447, "text": "Better Shuffling logic!!! Before the refinement of the shuffling logic today I just simply randomized the numbers in the array, so that there are new numbers. That introduced one problem, actually two. Numbers could dupe!! I tried to fix it while using numbers with one decimal. The other problem was I could not add an animation anywhere. This is why I decided to make a brand new shuffling logic today. I first tried to fix the duping problem, by checking if this number already exists. This took a while, because I need to figure out how to only watch an array to a specific point, to ignore the upcoming numbers. This resulted in a growing or shrinking animation, which wasnt what I wanted. Then I thought, maybe I can shuffle in another way. Not by changing the value, rather by swapping numbers randomly. Just like in a deck of cards. So I loop through each digit and randomly choose a number in the whole array and then swapping those. This ensures every place got changed. Now there was another problem. It sometimes changed with it self causing it not to do anything. This was fixed by adding a while loop which generates new positions if the position is the own position. While writing this devlog I also thought of another problem. When the total count of numbers is very low, this shuffling method might not shuffle it enough, so I am looping it 2 times, if there are less then 10 numbers in it. Ya, thats about it. Now lets get to the slider which increases the blocks."}, {"post_id": 67381, "ts": "2026-09-13T14:07:06Z", "hours": 1.6225, "text": "Finally something after a long time. I was on vacation during that time, so I needed to use some time to understand what I have done before that. Then I implemented another sorting algorithm!! Selection Sort!! If you take a look inside my commits, you can see it being committed. After implementing selection sort I took a small break and didnt devlog, cause it didnt even took that long. After the break I decided to add a little highlighting animation, that changes the color of the pillars, that are being swapped. That took waay longer that expected, but was the easiest thing to do. I just had to save the 2 values being swapped and somehow pass it inside and get the colors changed. After the highlighting, I decided its time for another sorting alg. The Insertion Sort. That somehow took longer that selection sort. Due to it being almost the exact opposite of bubble sort, I always fell back to it. While researching for insertion sort, I found this great website and quite liked its finishing animation. I also felt that the selecting animation is kinda off for insertion sort. It shouldnt be 2 pillars that are selected. It should be 3 or 1, since one pillar is inserted between 2 other ones and not 2 pillars being swapped. So I made a highlighting version with only one pillar being highlighted and created an if statement of doom inside the meshStandartMaterial. I thought this version was also better for bubble sort than the selection one and switched it too. Ya, that was all of it, I think, Have a great day though :)"}, {"post_id": 48929, "ts": "2026-08-17T14:21:47Z", "hours": 1.9594, "text": "AHHHHHHHHHHHHHHHHHHHHHH Sorting algorithm was made today. I decided on the most basic bubble sort. It is basically just 2 nested for-loops. This wikipedia article ( https://en.wikipedia.org/wiki/Bubble_sort ) has a great code example for it. It was relative easy. But the hard part was to get the animation going. The second part of the vid shows how it was without the fix for the animation. Finding out what the error was, was the first major problem. Fixing it was also hard, because I needed to save the target position after the box was created. This doesnt work, because you cannot call things after a return. Then after a good half hour of struggling and no progress, I asked my father for help. He is a full time developer aaand I hoped, that we could fix this together. He did gave some good calls, but the coding is still done by myself. After some together struggling, that lasted around 30 to 40 min, he proposed something genius. Save a version of the array of numbers, before every sorting step. That meant we need to compare the 2 arrays to get the difference and how the numbers got moved. I then said we could use some complicated for loops and then comparing stuff. He smiled and let me do. After some programming it was finally done and worked. But it wasnt optimized at all and was a bit laggy. Then he couldnt hold on anymore, laughed and told me that there is a dedicated js function just for that. I almost crashed out . Ya, that was todays session. I only implemented the dedicated js function instead of that. Ahh and before asking my father I also found out that js async is weird and that we need to use useEffect, kinda an event listener to see when the useState value changes. Ya, now that was it. See u later or tmrw."}, {"post_id": 48190, "ts": "2026-08-16T14:16:24Z", "hours": 1.0175, "text": "Shuffle mechanism Today was very successful day. The two major breakthroughs are creating the boxes dynamically and shuffle the height by math.random. I am happy that I remembered, that I could use useState to make an array and use the Array.prototype.map() function to simultaneously create the different boxes. And I can change the order of the boxes with changing the order of the components in the array, sooooo, that should be quite easy to archive. The random shuffle thingi was also quite successful. I just Math.random’ed some value and floor it to 2 decimals. Then I do that for every place of the numbers array and set it as new numbers array. This will update the numbers array, because of useState and let React-Three-Fiber rerender the boxes, resulting in a shuffling. The sorting will need an async function though, or else it will be instant sorting, which isnt the goal of this sorting thing. Enough yap, back to coding, eventually, maybe."}, {"post_id": 47505, "ts": "2026-08-15T13:45:14Z", "hours": 1.2922, "text": "After messing around abit and finding out that it is possible to have multiple meshes, I finally started with the actual project and made a Box func. While making it I decided on doing it with an Interface to be able to learn that (the whole point of this proj was to learn ThreeJS and NextJS). This Box func can be reused and the properties of this box can also be parsed inside. Soo every Box is the same and makes animating easier. I also added a simple moving animation. Then the quest was to level the boxes on the bottom. After a whole 5 min of struggling, I found a random post saying I could do scale / 2, which also worked. The moving the box was the hard part, because NextJS requires me to use useState, or else it wont get updated. This took me very long, very very very long to get right. The moving seems abit laggy in the vid, but in real life its smooth, i dunno why, but ya. The last part, was centering this whole thing, because the camera always points to [0, 0, 0] which is strange, but whatever, so i needed to move the boxes collectively somewhere else. So I tried alot of stuff, but finally found out that groups have props too, so I can group them and move them to the left and down. This was great !! Later I need to find out how to do this automatically, but thats not present-me problem, its a future-me problem."}, {"post_id": 47096, "ts": "2026-08-14T18:50:47Z", "hours": 1.3286, "text": "First devlog My friend @Leon gave me this idea to work with ThreeJS in NextJS, so I can get familiar with both at the same time. And I said, fine whatever. I had the idea to do a sorting algorithm showcaser with pillars of different heights. And code different sorting methods to sort these pillars. Soo I created a Next instance like my personal site aaaand messed up. So I had to delete it and install again, WITHOUT TailwindCSS. Finally having a working NextJS instance I installed ThreeJS, but then I ran into the problem that ThreeJS didnt like pnpm, soo I reinstalled the whole shit with npm, which obviously didnt work. So I debugged the whole shit and every reddit post and stackoverflow post said to reinstall it again, so the installer cleanly installs the JSX module that was missing, which it didnt. So I decided to just paste the whole error message into google and there it was. The holy stackoverflow post that gave me a command to reinstall the dependencies and advised me to reload my vscode window to prevent cache. THIS WORKED!!! My next task was to read and follow the React Three Fiber docs, which is threejs but in better for react, so also for nextjs. I followed it (which was very hard, since its written unclearly, but I think when you know the normal threejs it should be fine, which I obviously am not familiar with) and after some time got an overall idea how this thing works. Then I found a task in this doc and it is to create a spinning cube. I took it seriously and made it todays goal. And here we are. To be fair, it was okay to finish, since there was already a sample code written in vite or whatever it was. I just needed to rewrite that for my nextjs instance. Ya that was todays progress. I think when I got the motivation to continue later, it will be waay easier to do, since I know the basics now. Holy yap, bye, see u later, maybe, well, bye"}]...
|
Title: sorting algs by @Lumethra | Stardance
Devl Title: sorting algs by @Lumethra | Stardance
Devlogs:
First devlog My friend @Leon gave me this idea to work with ThreeJS in NextJS, so I can get familiar with both at the same time. And I said, fine whatever. I had the idea to do a sorting algorithm showcaser with pillars of different heights. And code different sorting methods to sort these pillars. Soo I created a Next instance like my personal site aaaand messed up. So I had to delete it and install again, WITHOUT TailwindCSS. Finally having a working NextJS instance I installed ThreeJS, but then I ran into the problem that ThreeJS didnt like pnpm, soo I reinstalled the whole shit with npm, which obviously didnt work. So I debugged the whole shit and every reddit post and stackoverflow post said to reinstall it again, so the installer cleanly installs the JSX module that was missing, which it didnt. So I decided to just paste the whole error message into google and there it was. The holy stackoverflow post that gave me a command to reinstall the dependencies and advised me to reload my vscode window to prevent cache. THIS WORKED!!! My next task was to read and follow the React Three Fiber docs, which is threejs but in better for react, so also for nextjs. I followed it (which was very hard, since its written unclearly, but I think when you know the normal threejs it should be fine, which I obviously am not familiar with) and after some time got an overall idea how this thing works. Then I found a task in this doc and it is to create a spinning cube. I took it seriously and made it todays goal. And here we are. To be fair, it was okay to finish, since there was already a sample code written in vite or whatever it was. I just needed to rewrite that for my nextjs instance. Ya that was todays progress. I think when I got the motivation to continue later, it will be waay easier to do, since I know the basics now. Holy yap, bye, see u later, maybe, well, bye
After messing around abit and finding out that it is possible to have multiple meshes, I finally started with the actual project and made a Box func. While making it I decided on doing it with an Interface to be able to learn that (the whole point of this proj was to learn ThreeJS and NextJS). This Box func can be reused and the properties of this box can also be parsed inside. Soo every Box is the same and makes animating easier. I also added a simple moving animation. Then the quest was to level the boxes on the bottom. After a whole 5 min of struggling, I found a random post saying I could do scale / 2, which also worked. The moving the box was the hard part, because NextJS requires me to use useState, or else it wont get updated. This took me very long, very very very long to get right. The moving seems abit laggy in the vid, but in real life its smooth, i dunno why, but ya. The last part, was centering this whole thing, because the camera always points to [0, 0, 0] which is strange, but whatever, so i needed to move the boxes collectively somewhere else. So I tried alot of stuff, but finally found out that groups have props too, so I can group them and move them to the left and down. This was great !! Later I need to find out how to do this automatically, but thats not present-me problem, its a future-me problem.
Shuffle mechanism Today was very successful day. The two major breakthroughs are creating the boxes dynamically and shuffle the height by math.random. I am happy that I remembered, that I could use useState to make an array and use the Array.prototype.map() function to simultaneously create the different boxes. And I can change the order of the boxes with changing the order of the components in the array, sooooo, that should be quite easy to archive. The random shuffle thingi was also quite successful. I just Math.random’ed some value and floor it to 2 decimals. Then I do that for every place of the numbers array and set it as new numbers array. This will update the numbers array, because of useState and let React-Three-Fiber rerender the boxes, resulting in a shuffling. The sorting will need an async function though, or else it will be instant sorting, which isnt the goal of this sorting thing. Enough yap, back to coding, eventually, maybe.
AHHHHHHHHHHHHHHHHHHHHHH Sorting algorithm was made today. I decided on the most basic bubble sort. It is basically just 2 nested for-loops. This wikipedia article ( https://en.wikipedia.org/wiki/Bubble_sort ) has a great code example for it. It was relative easy. But the hard part was to get the animation going. The second part of the vid shows how it was without the fix for the animation. Finding out what the error was, was the first major problem. Fixing it was also hard, because I needed to save the target position after the box was created. This doesnt work, because you cannot call things after a return. Then after a good half hour of struggling and no progress, I asked my father for help. He is a full time developer aaand I hoped, that we could fix this together. He did gave some good calls, but the coding is still done by myself. After some together struggling, that lasted around 30 to 40 min, he proposed something genius. Save a version of the array of numbers, before every sorting step. That meant we need to compare the 2 arrays to get the difference and how the numbers got moved. I then said we could use some complicated for loops and then comparing stuff. He smiled and let me do. After some programming it was finally done and worked. But it wasnt optimized at all and was a bit laggy. Then he couldnt hold on anymore, laughed and told me that there is a dedicated js function just for that. I almost crashed out . Ya, that was todays session. I only implemented the dedicated js function instead of that. Ahh and before asking my father I also found out that js async is weird and that we need to use useEffect, kinda an event listener to see when the useState value changes. Ya, now that was it. See u later or tmrw.
Finally something after a long time. I was on vacation during that time, so I needed to use some time to understand what I have done before that. Then I implemented another sorting algorithm!! Selection Sort!! If you take a look inside my commits, you can see it being committed. After implementing selection sort I took a small break and didnt devlog, cause it didnt even took that long. After the break I decided to add a little highlighting animation, that changes the color of the pillars, that are being swapped. That took waay longer that expected, but was the easiest thing to do. I just had to save the 2 values being swapped and somehow pass it inside and get the colors changed. After the highlighting, I decided its time for another sorting alg. The Insertion Sort. That somehow took longer that selection sort. Due to it being almost the exact opposite of bubble sort, I always fell back to it. While researching for insertion sort, I found this great website and quite liked its finishing animation. I also felt that the selecting animation is kinda off for insertion sort. It shouldnt be 2 pillars that are selected. It should be 3 or 1, since one pillar is inserted between 2 other ones and not 2 pillars being swapped. So I made a highlighting version with only one pillar being highlighted and created an if statement of doom inside the meshStandartMaterial. I thought this version was also better for bubble sort than the selection one and switched it too. Ya, that was all of it, I think, Have a great day though :)
Better Shuffling logic!!! Before the refinement of the shuffling logic today I just simply randomized the numbers in the array, so that there are new numbers. That introduced one problem, actually two. Numbers could dupe!! I tried to fix it while using numbers with one decimal. The other problem was I could not add an animation anywhere. This is why I decided to make a brand new shuffling logic today. I first tried to fix the duping problem, by checking if this number already exists. This took a while, because I need to figure out how to only watch an array to a specific point, to ignore the upcoming numbers. This resulted in a growing or shrinking animation, which wasnt what I wanted. Then I thought, maybe I can shuffle in another way. Not by changing the value, rather by swapping numbers randomly. Just like in a deck of cards. So I loop through each digit and randomly choose a number in the whole array and then swapping those. This ensures every place got changed. Now there was another problem. It sometimes changed with it self causing it not to do anything. This was fixed by adding a while loop which generates new positions if the position is the own position. While writing this devlog I also thought of another problem. When the total count of numbers is very low, this shuffling method might not shuffle it enough, so I am looping it 2 times, if there are less then 10 numbers in it. Ya, thats about it. Now lets get to the slider which increases the blocks.
HOLY WAS THIS A STRUGGLE !! In this session I implemented adding and removing numbers for a slider in the future (hopefully tomorrow). THIS WAS A PAIN. Especially the camera handling. The very very basic adding and removing function was quite easy, since its only adding numbers or splicing numbers from the array (stack overflow my goat). The camera thing was quite hard though. When I add enough numbers it could make the pillars taller than the viewheight, making them sticking “off screen”. The fix was zooming out. But the fix on stack overflow needed to let it be a JSX element, which somehow didnt work. Finding the fix was one problem. The other problem is, that after finding the fix, it still didnt work and the camera “fell” down. After a long debugging session with various console.logs, I finally found the problem and it was one of the stupid ones. I used z, where it should have been y, thats dumb, but eyy, here we go. There were also a few other bugs, like having an infinite while loop when only having one pillar and shuffling. This was fixed by making the minimum number 2. The other bug was, weird camera behaviors happen, when reducing the number while its shuffled. Fixing it with an instant sort before reducing the number of pillars was my approach. Ya, that was about it. I am done for today.
Slider!! Today I added a slider that controls the adding and removing of pillars. I had some minor problems. (No, they were huge, but I feel better saying that they were minor ). First of all, I needed to figure out how to set default values. Normally its just value=””, but this doesnt work for a input type range. After some research I found out that its simply defaultValue, I feel dumb. Then I tried to add/remove pillars with useEffect and monitor the changes of the slider. This worked, but also didnt. I needed to manually update the pillars. It didnt do it automatically. Then my brain suggested something genius. Using onChange. But now I need to do an extra function for it. I thought, maybe I use a while loop once. While the number array is smaller run add function and while its bigger, the remove function. This was uhh, not that good, because it somehow resulted into an infinite while loop, because js is asynchronous. I also tried with a for loop. This threw the error, that I set the 2 useState too often. After some experimenting I ended up with my current solution. I also added 2 useState variables for the sorting delay and shuffling delay. I am still searching for a great mathematical, anti-proportional, linear function to adjust it corresponding to the pillars count. Ahh and I also updated the camera adjusting logic a bit.
Thats enough, Ima do CSS tomorrow. Today I added a slider style and 2 other sliders for the shuffling and sorting speed. Then I hid those 2 and the remove and adding pillar buttons. Also added some CSS for flex, justify content, space between, to seperate the drop down, which I added too. I tried to add a scrolling drop down thing, but failed, uhh, I also adjusted the pillar speed and camera angle. Also I found out, that I can call functions from an array, so I can store a function in an array and then call it like that, thats weird, but also huge. Dont wanna write too much today, cause I still have stuff to do. Ah, also added prevention of shuffling while sorting.
FINALLYYYY Today was the final coding session. I finally got the UI right and am okay with it. Its not the best, but its acceptable. I decided to only use icons, to keep it clean, but I ran into the problem, that the icons arent clear enough to showcase the specific sorting algorithm. So I decided on making a tooltip. But the build in HTML tooltip is too ugly and the delay is annoying. I did some research and found a W3Schools tutorial, they are the goat ( here it is ). I didnt expect front end being so time intensive, but I did need to adjust every value so it looks good, which is very hard to do :(. Ah, I also fixed the bug that when there is the minimal amount of pillars, it will be weird while shuffling (that wasnt proper english). Also the icons changes depending if we are shuffling or sorting and the disables and reinables, which is cool. Uhh, I remembered sth, I need to implement canceling while sorting. Also the vid is one fix old, i did fix the typo in the sorting alg.
Implemented pause logic. I implemented pause logic and added an indicator, which shows, which sorting algorithm is currently active. The pause logic was quite painful, cause it just didnt want to stop. Neither with break, nor with return. After a long long long trouble shooting session, I found out, that I forgot .current and it just wont detect correctly, what a stupid bug to troubleshoot 20 min for. Also I fixed an edge case in the demo vid xD
I wrote my readme in this session, so nothing really to say. It was just typing typing typing and finishing this beautiful readme to be able to submit this project.
Ships:
A 3d sorting algorithm visualizer with NextJS and ThreeJS. Also its made with luve and happiness....
|
1793670799.1628003
|
1793757199.1628003
|
|
37708
|
WinFlow by @Advay-CMD | Stardance
|
Advay-CMD
|
1
|
44.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T19:07:15Z", "hours": 44.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Windows is incomplete, incoherent, and Microslop copyrights every code and then doesn’t listen to their consumers. I am here to change this. Fix windows from the disasterous state, where you own the operating system, Microsoft doesn’t. Colors, textures - everything is just Microsoft’ed. Privacy doesn’t exist, it is like giving your life’s data to Microsoft to have convinence in return. I am here to prove that privacy and convinence can co-exist. Windows is long way, and STILL, Microsoft has to bring more SLOP. Let’s fix this. Lets fix it, how things should be… WinFlow is a massive productivity and beautified UI/UX app suite. It helps you have productivity, convenience and neat UI/UX all adapted for people who work a LOT and complain about simple things in comp and also for people who have a candyeye. It aims 4 fundmentals: Functionality: How well the users problem is solved? Polish: How good is the UI/UX of the app? Simplicity: How simple is the app to use? Speed: How FAST is it? All of them combine to create WinFlow!", "repo": "https://github.com/Advay-CMD/WinFlow/", "demo": "https://github.com/Advay-CMD/WinFlow/releases"}]...
|
[{"post_id": 67602, "ts": "202 [{"post_id": 67602, "ts": "2026-09-13T19:02:29Z", "hours": 0.7736, "text": "WinFlow -> Devlog 6 Finally done. Its DONE! I know, shipwrights would call this AI, maybe. But really, I can’t belive that I coded the whole UI, only learning concepts of css from Duckduckgo and Gemini. I always thought this project will have a lot of AI, but no. I have finally mastered my CSS, and HTML. I love it! I am at least proud of the app, and even though its a simple home screen, it shows a glimpse of a full app, that is usable, and loved by people! Any suggestions can be made to make this project better! Please do give suggestions! It will make this project better! Thanks for the attention."}, {"post_id": 67280, "ts": "2026-09-13T10:54:56Z", "hours": 10.0781, "text": "WinFlow -> Devlog 5 Finally, I am somewhere, my project is FINALLY usable!! I have File and Folder linked to the backend working independently, and it works. Somehow there is some errors in system, I have no idea why… But, it still creates the folder! Let’s go! Good right? And now I am just creating the readme, and after that I guess, I will be ready to publish my thing. Any suggestions you guys want to give, you can! I will try my best to improve my UI/backend. Until then, take care! Even after the release, the WinFlow Explorer will STILL be very experimental. Unusable for normal use, due to very less features. But, just wait. Just wait. Probably later I will make more UI elements, make it better!"}, {"post_id": 53925, "ts": "2026-08-24T17:02:50Z", "hours": 8.6008, "text": "WinFlow -> Devlog 4 Oh, yes, time = 8h 36min, which is ~516min, and, I don’t want to spam seconds. Let me be frank. It is a pain to devlop the simple-simple goody app WinFlow Explorer. It is a headache a little…. I still gotta do MORE AND MORE WIDGETS!!! HONEST! But I promise you they are not going to be microsoft ads and Xbox promotion and all that crap. In the UI part, I have GELLED major components, made it according to my set of rules for UI called TrueUI, and a LOT of components are liqidised(made in variables, ready to be changed). I still gotta make components more liquid tho, like for cards, tabs, almost everything, so that the user has UNLIMITED customizablity. Yes, for all of the people who are crazy meniacs like in my class boys, you can PINK AND BLACK and ASSIGN ANY COLOR TO COMPONENTS! YES!!! You can! Unlimited Customisability is one of the features… I am going to do pixel anim in the future, but future. Right now I have A LOOOOOTT of widgets to make. Oh btw, I have STILL NOT DONE MY OTHER FILES IN GENERAL UI STUFF . Anyway I will implement and don’t worry boys, or girls, we can black the ui, pink the ui, and (my fav color) blue the UI. It is kindda in testing so, it is not THAT pretty sight, but the amount of hardwork it takes…. I think it will take time to realise. I have to sit and finetune the values until perfect, and that IS NOT easy. It is immensly hard and feels very rubbish. But whatever. Part of software devlopment. I also hope I get a SuperStar, tho that somehow feels highly unlikely. Anyway, I don’t care if I get that or not, I just want user satisfaction. I want the user to be immensly pleased. And I swear if someone from the shipwrights say: “This is fully vibecoded”. I swear I will feel like choke them….. I hate people who have one glance and say “Extremely Likely Used AI”. Honestly, I have used AI 1%-2%, not for UI, but for the latter backend… I still gotta make UI better, somehow it feels plain and boring. idk why… If you have some UI ideas, tell me, I can then improve my app~ I would love if you follow me for more devlogs and keep up with my journey though: Dark and Difficult things lie ahead…"}, {"post_id": 40835, "ts": "2026-08-04T16:50:25Z", "hours": 7.7931, "text": "WinFlow -> Devlog 3 YES! YES!!!! *, I KNOW, you would be screaming WHY ADVAY?? WHY DON’T YOU POST ANOTHER DEVLOG!!?? IT IS 7H 44MIN DONE!!! I know. I know. Sorry, just get too carried away with the code… ehh So, what am I done with? Am I supossed to dance? NO! This is a very complex project. Honest. Even the home page, EVEN AFTER ~21H, is NOT YET completed. But look at the vid! neat result. My journey to making a software, so complex and so pleasing at same time is TOOO hard. And ppl, I am only 13y, a normal child studing in school, kind of sneaking time to code! 😭 Lets look at the different aspects that I coded Backend Yes, backend, I made lsa, “testmodel1” is the nickname. And it is sucessful, so I am merging with ls, and making current ls, lsa. TestModel1 has MFT(Master Boot Record) scan, which ofc requires admin permissions, but see the speed. You might not notice it, but when you have ~a LOT A LOT of files to list, TestModel1 cruises and litrally halves the time. In search model, this would be EXTREMELY USEFUL. Scan the MFT and then find the file. It is that simple. (Not at ALL simple to code. HONEST. It is a risk with the disk. One thing coded wrong, I am cooked. But don’t worry, it works, and AI also helped and tested.) Frontend You can see the vid for yourself(special bonus… pls watch) That’s it. Follow if you want me to keep working on this and give motivation. Also like, and YES! if you think this can be a super star project write “superstar” in comments(tho i am not making for the sake of earning superstar, it is to rectify windows.)"}, {"post_id": 35772, "ts": "2026-07-27T12:32:07Z", "hours": 10.2056, "text": "WinFlow -> Devlog 2 I was soooo into coding, I forgot all about my time. Now the 9min I coded are LOST. Sorry, Hackclub staff! 😭 Pls give me that! Anyway, I have coded WinFlow UI in tauri with html and css, an explorer -> I have also added gradients, fresh and unique to my explorer… What else? I have also implemented in the files area a drag selection box, neat animation wrapped in good color and border-radius. Honestly, this HAS been a BIG learning experience in css, I used to go away when I heard CSS, now, I kindda got the hang. Loving it! Anyway, here is the progress img > And PLS, some of you in the stardance said that it is created using AI, but PLEASE, believe me, I didn’t. Any proof, pls check the hackatime. Pls Follow, it will make me more motivated to complete this project(right now, to create this, I was on a emotional burnout😭) Any suggetions pls comment. (few bugs like , recents and fav is selected. and the 2,3,4. pls forgive me for that…)"}, {"post_id": 32477, "ts": "2026-07-21T17:59:38Z", "hours": 6.3036, "text": "WinFlow -> Devlog 1 I am making a project called WinFlow WinFlow => App that makes your workspace more fluent buttery with awsome UI. Tech stack: Tauri(RUST, html, css, js) C++(Rust IPC) I am building a litral file explorer called WinFlow Explorer , but for that I have to do CLI part. I implemented a prototype, well commented code, and here is the result. I will then begin by rust IPC and then start buiding the app and the UI. My app is also better and faster than microsoft, because the explorer is not made by microsoft, it’s made by me (secret: I use recursive method, while windows struggles to calculate the estimated time :))"}]...
|
Title: WinFlow by @Advay-CMD | Stardance
Devlogs: Title: WinFlow by @Advay-CMD | Stardance
Devlogs:
WinFlow -> Devlog 1 I am making a project called WinFlow WinFlow => App that makes your workspace more fluent buttery with awsome UI. Tech stack: Tauri(RUST, html, css, js) C++(Rust IPC) I am building a litral file explorer called WinFlow Explorer , but for that I have to do CLI part. I implemented a prototype, well commented code, and here is the result. I will then begin by rust IPC and then start buiding the app and the UI. My app is also better and faster than microsoft, because the explorer is not made by microsoft, it’s made by me (secret: I use recursive method, while windows struggles to calculate the estimated time :))
WinFlow -> Devlog 2 I was soooo into coding, I forgot all about my time. Now the 9min I coded are LOST. Sorry, Hackclub staff! 😭 Pls give me that! Anyway, I have coded WinFlow UI in tauri with html and css, an explorer -> I have also added gradients, fresh and unique to my explorer… What else? I have also implemented in the files area a drag selection box, neat animation wrapped in good color and border-radius. Honestly, this HAS been a BIG learning experience in css, I used to go away when I heard CSS, now, I kindda got the hang. Loving it! Anyway, here is the progress img > And PLS, some of you in the stardance said that it is created using AI, but PLEASE, believe me, I didn’t. Any proof, pls check the hackatime. Pls Follow, it will make me more motivated to complete this project(right now, to create this, I was on a emotional burnout😭) Any suggetions pls comment. (few bugs like , recents and fav is selected. and the 2,3,4. pls forgive me for that…)
WinFlow -> Devlog 3 YES! YES!!!! *, I KNOW, you would be screaming WHY ADVAY?? WHY DON’T YOU POST ANOTHER DEVLOG!!?? IT IS 7H 44MIN DONE!!! I know. I know. Sorry, just get too carried away with the code… ehh So, what am I done with? Am I supossed to dance? NO! This is a very complex project. Honest. Even the home page, EVEN AFTER ~21H, is NOT YET completed. But look at the vid! neat result. My journey to making a software, so complex and so pleasing at same time is TOOO hard. And ppl, I am only 13y, a normal child studing in school, kind of sneaking time to code! 😭 Lets look at the different aspects that I coded Backend Yes, backend, I made lsa, “testmodel1” is the nickname. And it is sucessful, so I am merging with ls, and making current ls, lsa. TestModel1 has MFT(Master Boot Record) scan, which ofc requires admin permissions, but see the speed. You might not notice it, but when you have ~a LOT A LOT of files to list, TestModel1 cruises and litrally halves the time. In search model, this would be EXTREMELY USEFUL. Scan the MFT and then find the file. It is that simple. (Not at ALL simple to code. HONEST. It is a risk with the disk. One thing coded wrong, I am cooked. But don’t worry, it works, and AI also helped and tested.) Frontend You can see the vid for yourself(special bonus… pls watch) That’s it. Follow if you want me to keep working on this and give motivation. Also like, and YES! if you think this can be a super star project write “superstar” in comments(tho i am not making for the sake of earning superstar, it is to rectify windows.)
WinFlow -> Devlog 4 Oh, yes, time = 8h 36min, which is ~516min, and, I don’t want to spam seconds. Let me be frank. It is a pain to devlop the simple-simple goody app WinFlow Explorer. It is a headache a little…. I still gotta do MORE AND MORE WIDGETS!!! HONEST! But I promise you they are not going to be microsoft ads and Xbox promotion and all that crap. In the UI part, I have GELLED major components, made it according to my set of rules for UI called TrueUI, and a LOT of components are liqidised(made in variables, ready to be changed). I still gotta make components more liquid tho, like for cards, tabs, almost everything, so that the user has UNLIMITED customizablity. Yes, for all of the people who are crazy meniacs like in my class boys, you can PINK AND BLACK and ASSIGN ANY COLOR TO COMPONENTS! YES!!! You can! Unlimited Customisability is one of the features… I am going to do pixel anim in the future, but future. Right now I have A LOOOOOTT of widgets to make. Oh btw, I have STILL NOT DONE MY OTHER FILES IN GENERAL UI STUFF . Anyway I will implement and don’t worry boys, or girls, we can black the ui, pink the ui, and (my fav color) blue the UI. It is kindda in testing so, it is not THAT pretty sight, but the amount of hardwork it takes…. I think it will take time to realise. I have to sit and finetune the values until perfect, and that IS NOT easy. It is immensly hard and feels very rubbish. But whatever. Part of software devlopment. I also hope I get a SuperStar, tho that somehow feels highly unlikely. Anyway, I don’t care if I get that or not, I just want user satisfaction. I want the user to be immensly pleased. And I swear if someone from the shipwrights say: “This is fully vibecoded”. I swear I will feel like choke them….. I hate people who have one glance and say “Extremely Likely Used AI”. Honestly, I have used AI 1%-2%, not for UI, but for the latter backend… I still gotta make UI better, somehow it feels plain and boring. idk why… If you have some UI ideas, tell me, I can then improve my app~ I would love if you follow me for more devlogs and keep up with my journey though: Dark and Difficult things lie ahead…
WinFlow -> Devlog 5 Finally, I am somewhere, my project is FINALLY usable!! I have File and Folder linked to the backend working independently, and it works. Somehow there is some errors in system, I have no idea why… But, it still creates the folder! Let’s go! Good right? And now I am just creating the readme, and after that I guess, I will be ready to publish my thing. Any suggestions you guys want to give, you can! I will try my best to improve my UI/backend. Until then, take care! Even after the release, the WinFlow Explorer will STILL be very experimental. Unusable for normal use, due to very less features. But, just wait. Just wait. Probably later I will make more UI elements, make it better!
WinFlow -> Devlog 6 Finally done. Its DONE! I know, shipwrights would call this AI, maybe. But really, I can’t belive that I coded the whole UI, only learning concepts of css from Duckduckgo and Gemini. I always thought this project will have a lot of AI, but no. I have finally mastered my CSS, and HTML. I love it! I am at least proud of the app, and even though its a simple home screen, it shows a glimpse of a full app, that is usable, and loved by people! Any suggestions can be made to make this project better! Please do give suggestions! It will make this project better! Thanks for the attention.
Ships:
Windows is incomplete, incoherent, and Microslop copyrights every code and then doesn’t listen to their consumers. I am here to change this. Fix windows from the disasterous state, where you own the operating system, Microsoft doesn’t. Colors, textures - everything is just Microsoft’ed. Privacy doesn’t exist, it is like giving your life’s data to Microsoft to have convinence in return. I am here to prove that privacy and convinence can co-exist. Windows is long way, and STILL, Microsoft has to bring more SLOP. Let’s fix this. Lets fix it, how things should be… WinFlow is a massive productivity and beautified UI/UX app suite. It helps you have productivity, convenience and neat UI/UX all adapted for people who work a LOT and complain about simple things in comp and also for people who have a candyeye. It aims 4 fundmentals: Functionality: How well the users problem is solved? Polish: How good is the UI/UX of the app? Simplicity: How simple is the app to use? Speed: How FAST is it? All of them combine to create WinFlow!...
|
1793670800.3357916
|
1793757200.3357916
|
|
64273
|
Test by @liam-newbill | Stardance
|
liam-newbill
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Test by @liam-newbill | Stardance
|
1793670801.5112407
|
1794275601.5112407
|
|
47907
|
Supra Tooler Custom Shortcut MacOS Application by Supra Tooler Custom Shortcut MacOS Application by @SaathvikSowmyanarayanan | Stardance...
|
SaathvikSowmyanarayanan
|
1
|
7.4
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-14T23:46:27Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a custom python shortcuts application. Using simple shortucts, this application is meant for those on MacOS devices who use a external keyboard. If you don’t know the function keys, and some others are glitched out and don’t properly work on external keyboards on mac. There for I created simple cursor-moving shortucts that give the function keys a use. Thanks so much for reviewing my project.", "repo": "https://github.com/SupraSilvr/Gold-Shell", "demo": "https://github.com/SupraSilvr/Gold-Shell/releases/tag/v2.1.0"}]...
|
[{"post_id": 72429, "ts": "202 [{"post_id": 72429, "ts": "2026-09-22T22:41:16Z", "hours": 0.4047, "text": "Fixed changes that the reviews asked me to do. I fixed the broken images in my github README file, and I changed the banner image of my project to the icon."}, {"post_id": 68340, "ts": "2026-09-14T23:43:00Z", "hours": 0.3264, "text": "Made the 3 shortcuts that my application was designed to run. After that, I packaged my python script as a MacOS Application using Pyinstaller. I tested if it works, it does :). Lastly I posted a release on github and updated all of the files. I’m so happy for the end of this project. It was so fun and I hoped you enjoyed watching my journey. I wasn’t able to focus on this project as much as I wanted to, but I finished it. With that, I saw thanks. Thank you so much, Stardance for giving me this opportunity. :)"}, {"post_id": 65147, "ts": "2026-09-10T02:46:43Z", "hours": 0.8206, "text": "I found out the error in the bug. It was the little piece of code, that was to try to run the shortcuts. It was not indented properly into a function. After fixing it, I created 3 working functions, one that goes to the top bar, to see the battery, the volume, and the time. The hotkey for this is the function 1 key. The second functions, goes to the bottom of your screen where you can easily chose an app. This is fun from pressing function 2. The third and last function moves your mouse to the area with the options to close, minimize, and go into the application. I am very happy with my work today. Also renamed the file to da1.9.py (development application 1.9) :)"}, {"post_id": 61226, "ts": "2026-09-04T01:51:57Z", "hours": 0.4469, "text": "Worked on dividing on the pynput syntax to test the bug. I had a lot of trouble with the yanking with vim. If you don’t know yanking is copying in vim. Vim told me that the yanking was successful, but it didn’t paste the correct lines. I managed to find the bug. It says keyboard is not defined, which indicates some missing definition for the class. I will fix this bug soon, now that I have found the error. :)"}, {"post_id": 60567, "ts": "2026-09-03T00:01:52Z", "hours": 0.2567, "text": "After much trouble shooting, I determined that the bug is not from pyautogui ( the library that moves your mouse). Its from the pynput input recognition. Thats about all of the work I did today. I do want to talk about my coding editor. I use a editor called vim. It’s a terminal based editor that is very fast and has many shortcuts to optimize your coding experience. I am not a experianced dev, but I’m practicing it. Hope you give it a try too. :) Link to Vim https://www.vim.org"}, {"post_id": 59911, "ts": "2026-09-01T22:52:35Z", "hours": 0.7111, "text": "I realized the SupraTooler1.0.py file didn’t actually work. It seems that the terminal lost the accesability permisions or the syntax was changed. I started debuging this and temporarily disabled the startup sequence function when I develop. I’m not going to update the github repo until I fixed this bug. I also created new line of code so that if i delete a line it removes disables the startup sequence. This can be useful in the future when bugs occur. the image below is the function and the code to disable it."}, {"post_id": 47124, "ts": "2026-08-14T19:42:53Z", "hours": 4.0639, "text": "Supra Tooler 1.0 has been released. This is the first version of the python script. It has keyboard shortcuts that move the mousecursor to useful locations like top info bar on Mac to check the time. Also has other life changing features. Must be run in terminal, since I haven’t packaged it with pyinstaller yet. It may or may not run, if this problem occurs, run with sudo access or check system settings. There go to input monitering and accessibility settings and approve both for the terminal. I didn’t package this version as an application because the starting screen was still in development and would not run in terminal if it was an app. The file to look at is SupraTooler1.0.py. The other supra.py file is the development stage of SupraTooler2.0. I’m planning on adding a popup when you start the application in customtkinter, but i found out that macos isn’t fully supporting it anymore and can remove it in any update so i want to use pygame. This is a lot more difficult and has unnecessary features but should still work. Also I am adding other shortcuts. So yeah, that wraps it up. Thanks for looking at my project, feel free to try it out. :)"}]...
|
Title: Supra Tooler Custom Shortcut MacOS Applicat Title: Supra Tooler Custom Shortcut MacOS Application by @SaathvikSowmyanarayanan | Stardance
Devlogs:
Supra Tooler 1.0 has been released. This is the first version of the python script. It has keyboard shortcuts that move the mousecursor to useful locations like top info bar on Mac to check the time. Also has other life changing features. Must be run in terminal, since I haven’t packaged it with pyinstaller yet. It may or may not run, if this problem occurs, run with sudo access or check system settings. There go to input monitering and accessibility settings and approve both for the terminal. I didn’t package this version as an application because the starting screen was still in development and would not run in terminal if it was an app. The file to look at is SupraTooler1.0.py. The other supra.py file is the development stage of SupraTooler2.0. I’m planning on adding a popup when you start the application in customtkinter, but i found out that macos isn’t fully supporting it anymore and can remove it in any update so i want to use pygame. This is a lot more difficult and has unnecessary features but should still work. Also I am adding other shortcuts. So yeah, that wraps it up. Thanks for looking at my project, feel free to try it out. :)
I realized the SupraTooler1.0.py file didn’t actually work. It seems that the terminal lost the accesability permisions or the syntax was changed. I started debuging this and temporarily disabled the startup sequence function when I develop. I’m not going to update the github repo until I fixed this bug. I also created new line of code so that if i delete a line it removes disables the startup sequence. This can be useful in the future when bugs occur. the image below is the function and the code to disable it.
After much trouble shooting, I determined that the bug is not from pyautogui ( the library that moves your mouse). Its from the pynput input recognition. Thats about all of the work I did today. I do want to talk about my coding editor. I use a editor called vim. It’s a terminal based editor that is very fast and has many shortcuts to optimize your coding experience. I am not a experianced dev, but I’m practicing it. Hope you give it a try too. :) Link to Vim https://www.vim.org
Worked on dividing on the pynput syntax to test the bug. I had a lot of trouble with the yanking with vim. If you don’t know yanking is copying in vim. Vim told me that the yanking was successful, but it didn’t paste the correct lines. I managed to find the bug. It says keyboard is not defined, which indicates some missing definition for the class. I will fix this bug soon, now that I have found the error. :)
I found out the error in the bug. It was the little piece of code, that was to try to run the shortcuts. It was not indented properly into a function. After fixing it, I created 3 working functions, one that goes to the top bar, to see the battery, the volume, and the time. The hotkey for this is the function 1 key. The second functions, goes to the bottom of your screen where you can easily chose an app. This is fun from pressing function 2. The third and last function moves your mouse to the area with the options to close, minimize, and go into the application. I am very happy with my work today. Also renamed the file to da1.9.py (development application 1.9) :)
Made the 3 shortcuts that my application was designed to run. After that, I packaged my python script as a MacOS Application using Pyinstaller. I tested if it works, it does :). Lastly I posted a release on github and updated all of the files. I’m so happy for the end of this project. It was so fun and I hoped you enjoyed watching my journey. I wasn’t able to focus on this project as much as I wanted to, but I finished it. With that, I saw thanks. Thank you so much, Stardance for giving me this opportunity. :)
Fixed changes that the reviews asked me to do. I fixed the broken images in my github README file, and I changed the banner image of my project to the icon.
Ships:
I made a custom python shortcuts application. Using simple shortucts, this application is meant for those on MacOS devices who use a external keyboard. If you don’t know the function keys, and some others are glitched out and don’t properly work on external keyboards on mac. There for I created simple cursor-moving shortucts that give the function keys a use. Thanks so much for reviewing my project....
|
1793670802.3827028
|
1793757202.3827028
|
|
64274
|
Test by @liam-newbill | Stardance
|
liam-newbill
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Test by @liam-newbill | Stardance
|
1793670803.5767524
|
1794275603.5767524
|
|
12432
|
SlackyssaLiu - Slack Bot by @AidenHammy | Stardanc SlackyssaLiu - Slack Bot by @AidenHammy | Stardance...
|
AidenHammy
|
2
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T12:46:13Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "SlackyssaLiu is a Slack bot that brings space data into your workspace through /skl- slash commands: /skl-apod: NASA’s Astronomy Picture of the Day, rendered natively in Slack. Images use Block Kit image blocks, YouTube links use video blocks and raw .mp4 files are streamed in via filesUploadV2 so they play inline. /skl-earth: Photos of Earth from the DSCOVR satellite (NASA EPIC), pulled from a random day in the full archive so it doesn’t repeat itself. ISS tracking and crew data: Live location and crew info with a fallback to wheretheiss.at when Open Notify is down. Scheduled announcements: Set up per channel with /skl-setup and /skl-unset, stored in SQLite so one bot can serve multiple workspaces without anyone touching a .env file. Built with Node.js, Slack Bolt, Axios, SQLite and cron jobs and hosted on Nest. WEll, most of the work wasn’t the commands, it was keeping them alive. dead community APIs, Slack silently dropping messages it didn’t like and Node’s IPv6 DNS defaulting breaking lookups on the host. So uh everything now has timeouts, fallbacks and streamed downloads so it fails less and recovers when it does!", "repo": "https://github.com/AidenHammy/SlackyssaLiu", "demo": "https://hackclub.enterprise.slack.com/archives/C0P5NE354"}, {"ship_num": 2, "ts": "2026-09-08T12:42:18Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Started as a standard “first Slack bot” with catfacts, jokes, quotes, the usual starter-project stuff. It was redesigned into something actually worth using. A space-themed bot that tracks the ISS in real time, counts down to the next rocket launch, posts NASA’s daily astronomy photo (with zero effort on your part) and pulls random Mars rover photos on demand. It also remembers things now. SQLite-backed mission logs per channel and custom callsigns per user and shows up uninvited with scheduled posts instead of only responding when poked. Built with Node.js + Slack Bolt (Socket Mode, no public URL needed), SQLite for persistence, node-cron for scheduling and free APIs (Open Notify, NASA, Launch Library 2) for the live data. Deployed and running 24/7 on Hack Club Nest.", "repo": "https://github.com/AidenHammy/SlackyssaLiu", "demo": "https://hackclub.enterprise.slack.com/archives/C0P5NE354"}]...
|
[{"post_id": 85486, "ts": "202 [{"post_id": 85486, "ts": "2026-10-31T12:19:13Z", "hours": 0.6356, "text": "Logging the leftover time"}, {"post_id": 67226, "ts": "2026-09-13T08:58:32Z", "hours": 3.3922, "text": "Devlog 3: Three Hours of My Life I’m Never Getting Back (And Slack’s Media Renderer Can Thank Me For It) The false confidence I thought the bot was done. I really did. The commands worked, the database was syncing, the cron jobs were firing. It was a fully functional space bot. I sat down to do what I thought would be a 15-min final polish before shipping. Three hours later, I was found questioning my reality and whether I should just delete the folder and take up farming. What started as a quick polish turned into a full-blown war against dead community APIs, Slack’s deeply picky Block Kit renderer and the absolute garbage fire that is Node.js DNS resolution on free hosting platforms. The dead API saga First, /skl-mars completely died. Not a graceful failure. Not a friendly JSON error. It just silently redirected to a GitHub Pages 404 HTML page. Axios, bless its optimistic little heart, tried to parse that HTML as JSON, choked and took the whole bot down with it. I made the executive decision to ditch that entirely. The rover is probably tired of taking photos anyway. I swapped it out for NASA’s EPIC API, which takes photos of Earth from the DSCOVR satellite. But EPIC had its own trap. If you just ask for the “most recent” photos, it returns a tiny array of about 13 photos from the last active day. The bot kept spamming the exact same image of Earth. I had to rewrite the endpoint to fetch the archive of all available dates, shuffle the entire history of the satellite and pull a random day from the past just to get some variety. Then, the Open Notify API (used for ISS location and crew data) went offline too. Same GitHub 404 redirect. I had to write nested try/catch fallbacks with 5-second timeouts to route requests to wheretheiss.at just to keep the telemetry commands alive. It was a war of attrition against community-run infrastructure. Slack Block Kit & the APOD nightmare Getting the APOD (/skl-apod) to actually render in the chat was an absolute nightmare. Originally, the bot just dropped a raw URL into the chat. Slack looked at it and said “Cool link, not displaying it” so I rebuilt the command using Slack’s Block Kit image block. That fixed images. But.. a video? Because of course, if you pass an .mp4 URL into an image block, Slack silently drops the message entirely. I had to write logic to check the media_type: if it was a YouTube link, I parsed the URL and rendered it using Slack’s native video block. If it was a raw .mp4, I had to stream the video file directly into Slack using filesUploadV2 so it would embed and play right in the chat. And to prevent the bot from OOM-crashing the server on large videos, I had to use responseType: \"stream\" so it chunked the download instead of loading a 50MB video into RAM all at once. The Nest hosting quirk Right when I thought I was victorious, APOD and Earth started failing with getaddrinfo ENOTFOUND api.nasa.gov . After staring at my screen wondering if I had forgotten how URLs work, I learned that Node.js 17+ defaults to IPv6 for DNS resolution and the hosting platform (Nest) doesn’t fully support IPv6 routing. The server literally couldn’t find NASA. Adding dns.setDefaultResultOrder('ipv4first') to the top of the service file fixed it instantly. Extremely normal behavior, I love computers. The actual architecture shift Amidst all the API firefighting, I also ripped out the hardcoded .env channel routing. Making someone edit a .env file just to move a bot to a new channel is a crime. I moved the scheduled announcements to a SQLite-backed system with /skl-setup and /skl-unset commands so the bot could support multiple servers dynamically without touching environment variables. What started as a simple script turned into a much more reliable bot with backup APIs, saved data, scheduled posts and the ability to handle images and videos directly in Slack. It was hella exhausting, my brain is completely fried but atleast it’s done."}, {"post_id": 64173, "ts": "2026-09-08T12:10:49Z", "hours": 2.9514, "text": "Devlog: SlackyssaLiu Went to Space (and I Forgot to Write Any of This Down) The itch SlackyssaLiu started as a pretty standard first Slack bot. Slash commands, a few API wrappers, the usual suspects: catfacts, jokes, quotes, echo, ping, some sneeze/wave filler commands for personality. It worked fine. It also looked exactly like every other “my first slackbot” project out there because it basically followed the same recipe everyone does. Integrate a joke API, integrate a weather-adjacent API, call it done. I wanted to know how to make it stand out so I asked around for ideas. The answer was pretty obvious in hindsight. Stop building the demo everyone builds and build something around an actual theme with actual state instead of a stateless command list wrapped around whatever free API came up first. I bounced between a few themes.. figure skating (RIP, no usable free API), medieval history (also no API, just Wikipedia scraping, hard pass) and space. Space won because it had exactly what I needed. Solid free APIs with no bureaucracy (Open Notify needs zero auth, NASA’s API just needs a free key) and enough surface area to build something that actually feels alive instead of just answering when poked. What actually changed This ended up being a full redesign not a patch job. Rough shape of it (RIP to /skl-achoo, you were doing your best). Killed the old command set! No more catfact/joke/quote/echo/achoo/wave. None of it fit the new direction and it was the generic stuff I was trying to get away from in the first place. A moment of silence for the bot that could sneeze but not tell you when a rocket was launching. New space-themed commands: /skl-iss and /skl-crew (Open Notify, no key needed), /skl-launch (Launch Library 2, with an actual countdown for maximum dramatic tension), /skl-apod and /skl-mars (NASA’s API, APOD + random Curiosity rover photos the rover did not consent to being featured but also cannot complain). Added actual persistence. SQLite via better-sqlite3. This was the real shift. The old bot had the memory of a goldfish with amnesia. It never remembered anything between requests. Now it tracks mission logs per channel, user callsigns and which launches it’s already announced (so it doesn’t spam the same countdown twice like an overeager intern). Added scheduled behavior. node-cron jobs that post NASA’s picture of the day every morning and ping the channel when a launch is within the hour. This is the part I think actually makes it feel like a running thing instead of a command list. It does stuff without being asked which is more initiative than I show most mornings. I gave it an actual personality module! pulled every joke/flavor line out of the command handlers and centralized them in personality.js. Went through two tone passes because apparently I couldn’t decide if the bot should sound like a stoic AI from a space movie or like it’s been on Twitter since 2019. It landed somewhere in between and honestly that’s a personality a lot of people have. Having it centralized meant the whole voice-swap was a single-file change instead of hunting through every command like a raccoon going through someone’s trash. Fixed real bugs from the original file along the way, typos that would’ve crashed the bot. cool, cool, very cool, glad I caught that before it caught me. Why I forgot to log any of this Short version, I was moving fast across a lot of files at once. db setup, service wrappers, command rewiring, personality, scheduler and treated it like “just get it working” instead of “document as I go”. I was working on a lot of projects at the same time and this was something I did just after finding about Stardance so I barely remembered to ship it. But I’m doing so now, several weeks late, riding in on a horse made of retroactive commit messages. I barely had any brainpower left for side projects at 1am because of my “awesome” uni."}, {"post_id": 5868, "ts": "2026-06-09T20:22:36Z", "hours": 1.3881, "text": "Devlog 1 — Building SlackyssaLiu (Slack Bot) What I set out to build: Create a simple Slack bot that can respond to slash commands in real time and make interactions inside a workspace more dynamic and useful. How I approached it: I started by following Stardance’s mission guide to understand how Slack apps connect to a backend and handle real-time events. After setting up the base bot with Socket Mode and environment variables, I focused on implementing slash commands and structuring them in a clean and scalable way. What I built: A deployed Slack bot running 24/7 with real-time command handling A working Slack bot using Node.js and the Bolt framework Multiple slash commands such as: /skl-ping for latency checking /skl-echo for message reflection /skl-time and /skl-date for utility /skl-help for command discovery API integrations: Cat facts using an external API Random jokes Inspirational quotes Basic error handling for API failures A consistent command-response structure using async functions Deployment: The bot is deployed and runs continuously 24/7, allowing it to respond to Slack commands in real time without requiring a local environment. This helped me understand how to keep services running beyond development and make the bot usable in a live workspace. What I learned: How Slack’s Bolt framework handles commands and events The importance of ack() in Slack interactions How to structure asynchronous command handlers How to integrate external APIs into a Node.js application How to handle failures gracefully using try-catch Challenges I faced: Understanding how Slack’s command lifecycle works Managing async responses correctly without breaking Slack’s timing requirements Debugging API responses and ensuring consistent formatting What I improved beyond the mission guide: While the initial setup followed Stardance’s mission guide, I expanded the bot by adding multiple custom commands and integrating external APIs to make it more interactive and useful. Future improvements: Add command history or logging Introduce smarter responses or context awareness Improve response formatting for better readability Expand the command set with more utility features Final thoughts: This project helped me understand how real-time systems work and how to build something that interacts with users in a live environment. It started with guided steps and evolved into a customizable and extendable Slack bot."}]...
|
Title: SlackyssaLiu - Slack Bot by @AidenHammy | S Title: SlackyssaLiu - Slack Bot by @AidenHammy | Stardance
Devlogs:
Devlog 1 — Building SlackyssaLiu (Slack Bot) What I set out to build: Create a simple Slack bot that can respond to slash commands in real time and make interactions inside a workspace more dynamic and useful. How I approached it: I started by following Stardance’s mission guide to understand how Slack apps connect to a backend and handle real-time events. After setting up the base bot with Socket Mode and environment variables, I focused on implementing slash commands and structuring them in a clean and scalable way. What I built: A deployed Slack bot running 24/7 with real-time command handling A working Slack bot using Node.js and the Bolt framework Multiple slash commands such as: /skl-ping for latency checking /skl-echo for message reflection /skl-time and /skl-date for utility /skl-help for command discovery API integrations: Cat facts using an external API Random jokes Inspirational quotes Basic error handling for API failures A consistent command-response structure using async functions Deployment: The bot is deployed and runs continuously 24/7, allowing it to respond to Slack commands in real time without requiring a local environment. This helped me understand how to keep services running beyond development and make the bot usable in a live workspace. What I learned: How Slack’s Bolt framework handles commands and events The importance of ack() in Slack interactions How to structure asynchronous command handlers How to integrate external APIs into a Node.js application How to handle failures gracefully using try-catch Challenges I faced: Understanding how Slack’s command lifecycle works Managing async responses correctly without breaking Slack’s timing requirements Debugging API responses and ensuring consistent formatting What I improved beyond the mission guide: While the initial setup followed Stardance’s mission guide, I expanded the bot by adding multiple custom commands and integrating external APIs to make it more interactive and useful. Future improvements: Add command history or logging Introduce smarter responses or context awareness Improve response formatting for better readability Expand the command set with more utility features Final thoughts: This project helped me understand how real-time systems work and how to build something that interacts with users in a live environment. It started with guided steps and evolved into a customizable and extendable Slack bot.
Devlog: SlackyssaLiu Went to Space (and I Forgot to Write Any of This Down) The itch SlackyssaLiu started as a pretty standard first Slack bot. Slash commands, a few API wrappers, the usual suspects: catfacts, jokes, quotes, echo, ping, some sneeze/wave filler commands for personality. It worked fine. It also looked exactly like every other “my first slackbot” project out there because it basically followed the same recipe everyone does. Integrate a joke API, integrate a weather-adjacent API, call it done. I wanted to know how to make it stand out so I asked around for ideas. The answer was pretty obvious in hindsight. Stop building the demo everyone builds and build something around an actual theme with actual state instead of a stateless command list wrapped around whatever free API came up first. I bounced between a few themes.. figure skating (RIP, no usable free API), medieval history (also no API, just Wikipedia scraping, hard pass) and space. Space won because it had exactly what I needed. Solid free APIs with no bureaucracy (Open Notify needs zero auth, NASA’s API just needs a free key) and enough surface area to build something that actually feels alive instead of just answering when poked. What actually changed This ended up being a full redesign not a patch job. Rough shape of it (RIP to /skl-achoo, you were doing your best). Killed the old command set! No more catfact/joke/quote/echo/achoo/wave. None of it fit the new direction and it was the generic stuff I was trying to get away from in the first place. A moment of silence for the bot that could sneeze but not tell you when a rocket was launching. New space-themed commands: /skl-iss and /skl-crew (Open Notify, no key needed), /skl-launch (Launch Library 2, with an actual countdown for maximum dramatic tension), /skl-apod and /skl-mars (NASA’s API, APOD + random Curiosity rover photos the rover did not consent to being featured but also cannot complain). Added actual persistence. SQLite via better-sqlite3. This was the real shift. The old bot had the memory of a goldfish with amnesia. It never remembered anything between requests. Now it tracks mission logs per channel, user callsigns and which launches it’s already announced (so it doesn’t spam the same countdown twice like an overeager intern). Added scheduled behavior. node-cron jobs that post NASA’s picture of the day every morning and ping the channel when a launch is within the hour. This is the part I think actually makes it feel like a running thing instead of a command list. It does stuff without being asked which is more initiative than I show most mornings. I gave it an actual personality module! pulled every joke/flavor line out of the command handlers and centralized them in personality.js. Went through two tone passes because apparently I couldn’t decide if the bot should sound like a stoic AI from a space movie or like it’s been on Twitter since 2019. It landed somewhere in between and honestly that’s a personality a lot of people have. Having it centralized meant the whole voice-swap was a single-file change instead of hunting through every command like a raccoon going through someone’s trash. Fixed real bugs from the original file along the way, typos that would’ve crashed the bot. cool, cool, very cool, glad I caught that before it caught me. Why I forgot to log any of this Short version, I was moving fast across a lot of files at once. db setup, service wrappers, command rewiring, personality, scheduler and treated it like “just get it working” instead of “document as I go”. I was working on a lot of projects at the same time and this was something I did just after finding about Stardance so I barely remembered to ship it. But I’m doing so now, several weeks late, riding in on a horse made of retroactive commit messages. I barely had any brainpower left for side projects at 1am because of my “awesome” uni.
Devlog 3: Three Hours of My Life I’m Never Getting Back (And Slack’s Media Renderer Can Thank Me For It) The false confidence I thought the bot was done. I really did. The commands worked, the database was syncing, the cron jobs were firing. It was a fully functional space bot. I sat down to do what I thought would be a 15-min final polish before shipping. Three hours later, I was found questioning my reality and whether I should just delete the folder and take up farming. What started as a quick polish turned into a full-blown war against dead community APIs, Slack’s deeply picky Block Kit renderer and the absolute garbage fire that is Node.js DNS resolution on free hosting platforms. The dead API saga First, /skl-mars completely died. Not a graceful failure. Not a friendly JSON error. It just silently redirected to a GitHub Pages 404 HTML page. Axios, bless its optimistic little heart, tried to parse that HTML as JSON, choked and took the whole bot down with it. I made the executive decision to ditch that entirely. The rover is probably tired of taking photos anyway. I swapped it out for NASA’s EPIC API, which takes photos of Earth from the DSCOVR satellite. But EPIC had its own trap. If you just ask for the “most recent” photos, it returns a tiny array of about 13 photos from the last active day. The bot kept spamming the exact same image of Earth. I had to rewrite the endpoint to fetch the archive of all available dates, shuffle the entire history of the satellite and pull a random day from the past just to get some variety. Then, the Open Notify API (used for ISS location and crew data) went offline too. Same GitHub 404 redirect. I had to write nested try/catch fallbacks with 5-second timeouts to route requests to wheretheiss.at just to keep the telemetry commands alive. It was a war of attrition against community-run infrastructure. Slack Block Kit & the APOD nightmare Getting the APOD (/skl-apod) to actually render in the chat was an absolute nightmare. Originally, the bot just dropped a raw URL into the chat. Slack looked at it and said “Cool link, not displaying it” so I rebuilt the command using Slack’s Block Kit image block. That fixed images. But.. a video? Because of course, if you pass an .mp4 URL into an image block, Slack silently drops the message entirely. I had to write logic to check the media_type: if it was a YouTube link, I parsed the URL and rendered it using Slack’s native video block. If it was a raw .mp4, I had to stream the video file directly into Slack using filesUploadV2 so it would embed and play right in the chat. And to prevent the bot from OOM-crashing the server on large videos, I had to use responseType: "stream" so it chunked the download instead of loading a 50MB video into RAM all at once. The Nest hosting quirk Right when I thought I was victorious, APOD and Earth started failing with getaddrinfo ENOTFOUND api.nasa.gov . After staring at my screen wondering if I had forgotten how URLs work, I learned that Node.js 17+ defaults to IPv6 for DNS resolution and the hosting platform (Nest) doesn’t fully support IPv6 routing. The server literally couldn’t find NASA. Adding dns.setDefaultResultOrder('ipv4first') to the top of the service file fixed it instantly. Extremely normal behavior, I love computers. The actual architecture shift Amidst all the API firefighting, I also ripped out the hardcoded .env channel routing. Making someone edit a .env file just to move a bot to a new channel is a crime. I moved the scheduled announcements to a SQLite-backed system with /skl-setup and /skl-unset commands so the bot could support multiple servers dynamically without touching environment variables. What started as a simple script turned into a much more reliable bot with backup APIs, saved data, scheduled posts and the ability to handle images and videos directly in Slack. It was hella exhausting, my brain is completely fried but atleast it’s done.
Logging the leftover time
Ships:
Started as a standard “first Slack bot” with catfacts, jokes, quotes, the usual starter-project stuff. It was redesigned into something actually worth using. A space-themed bot that tracks the ISS in real time, counts down to the next rocket launch, posts NASA’s daily astronomy photo (with zero effort on your part) and pulls random Mars rover photos on demand. It also remembers things now. SQLite-backed mission logs per channel and custom callsigns per user and shows up uninvited with scheduled posts instead of only responding when poked. Built with Node.js + Slack Bolt (Socket Mode, no public URL needed), SQLite for persistence, node-cron for scheduling and free APIs (Open Notify, NASA, Launch Library 2) for the live data. Deployed and running 24/7 on Hack Club Nest.
SlackyssaLiu is a Slack bot that brings space data into your workspace through /skl- slash commands: /skl-apod: NASA’s Astronomy Picture of the Day, rendered natively in Slack. Images use Block Kit image blocks, YouTube links use video blocks and raw .mp4 files are streamed in via filesUploadV2 so they play inline. /skl-earth: Photos of Earth from the DSCOVR satellite (NASA EPIC), pulled from a random day in the full archive so it doesn’t repeat itself. ISS tracking and crew data: Live location and crew info with a fallback to wheretheiss.at when Open Notify is down. Scheduled announcements: Set up per channel with /skl-setup and /skl-unset, stored in SQLite so one bot can serve multiple workspaces without anyone touching a .env file. Built with Node.js, Slack Bolt, Axios, SQLite and cron jobs and hosted on Nest. WEll, most of the work wasn’t the commands, it was keeping them alive. dead community APIs, Slack silently dropping messages it didn’t like and Node’s IPv6 DNS defaulting breaking lookups on the host. So uh everything now has timeouts, fallbacks and streamed downloads so it fails less and recovers when it does!...
|
1793670804.440175
|
1793757204.440175
|
|
19007
|
Storyrooms by @sinismylastname | Stardance
|
sinismylastname
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Storyrooms by @sinismylastname | Stardance
|
1793670805.6286902
|
1794534805.6286902
|
|
16233
|
See-TreePiO by @Aryana | Stardance
|
Aryana
|
1
|
142.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T06:32:43Z", "hours": 142.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a project that can detect tree/plant species and temperature to determine whether it is dead or not. It displays the result on an LCD in the back, and will start the process of scanning a tree/plant once a button is pressed. The wiring is enclosed in a 3D printed prototype. The most difficult thing I did in this project was likely trying to fit it all in the enclosure. There were a lot of wires here and there, and the button was also quite difficult to fit in, as I needed to solder it on. However, this project was really fun to do, as it helped me gain knowledge about the environment around me, and I got to practice my software and hardware skills. I am really proud of myself, as I completed this project from start to finish, and didn’t give up. To test my project, all you have to do is plug in the battery pack, wait for a minute or so, point the prototype at the tree you want to scan, press the button, and wait for the results. Sometimes, it will take a little longer to get the results, resulting from a difficulty figuring out either the temperature or species of that particular plant/tree.", "repo": "https://github.com/dawinner395/tree-health-scanner", "demo": ""}]...
|
[{"post_id": 69981, "ts": "202 [{"post_id": 69981, "ts": "2026-09-18T05:40:56Z", "hours": 0.35, "text": "I completed the prototype by combining the enclosure with the prototype. I encased the sensors and the LCD. The prototype is finally complete!"}, {"post_id": 69965, "ts": "2026-09-18T04:18:13Z", "hours": 1.5167, "text": "I combined the parts in the bottom half of the prototype, and fit it in the encolsure."}, {"post_id": 67575, "ts": "2026-09-13T18:30:05Z", "hours": 1.3167, "text": "I researched the different types of prevalent trees in California and their temperatures during different seasons. I plan to add this to my database, as I hadn’t previously done this. I used many websites, but Our City Forest was the most helpful."}, {"post_id": 66887, "ts": "2026-09-12T20:45:05Z", "hours": 0.9333, "text": "I fixed the issues that the prototype was facing. I also added a button. The main thing I did was make the prototype able to function without the computer nearby, which can make it so that anyone in the world can use it with a battery pack."}, {"post_id": 64447, "ts": "2026-09-08T20:39:44Z", "hours": 12.0014, "text": "I 3D printed the top half of the housing for the prototype. Next, I will print the bottom half."}, {"post_id": 48288, "ts": "2026-08-16T16:26:44Z", "hours": 10.6833, "text": "I build a CAD of the structure that will house the prototype. I left holes for all the different parts, and will print it later today."}, {"post_id": 36195, "ts": "2026-07-28T03:59:06Z", "hours": 1.7667, "text": "I connected the database to the Raspberry Pi, and tested it out using a house plant. It worked really well, and the next step is to test it outside with a real tree."}, {"post_id": 35375, "ts": "2026-07-26T18:41:48Z", "hours": 1.8333, "text": "I researched about how to use the specific PlantNet API database with the Raspberry Pi and hook that database to a Machine Learning algorthim. I am finally ready to actually make the Machine Learning algorithm and get my hands dirty now that I have the information I need to continue on with the project."}, {"post_id": 32105, "ts": "2026-07-21T01:22:30Z", "hours": 0.3333, "text": "I researched more about the tree datasets, and I found one that has plenty of accurate information: PlantNet API."}, {"post_id": 31560, "ts": "2026-07-20T02:06:06Z", "hours": 0.6333, "text": "I researched the different datasets I can use for the project, as well as the amount of tree data each have in them. I still need to do some more research, but as of now, creating a dataset is the best option if I want to get a wide, accurate range of data. I haven’t found any datasets that match the amount of data I can collect by myself in my neighborhood."}, {"post_id": 29878, "ts": "2026-07-17T01:24:55Z", "hours": 0.6, "text": "I tested the camera and battery pack that came. They both worked really well. Now, I can start inputting the ML algrothm."}, {"post_id": 28665, "ts": "2026-07-15T01:45:42Z", "hours": 3.7747, "text": "I fiinshed the Machine Learning book."}, {"post_id": 28079, "ts": "2026-07-14T03:24:59Z", "hours": 1.0333, "text": "I read Chapters 14 and 15 of the Machine Learning book. The parts will come tomorrow."}, {"post_id": 27961, "ts": "2026-07-13T22:13:23Z", "hours": 0.6833, "text": "I read Chapter 13 of the Machine Learning book."}, {"post_id": 27279, "ts": "2026-07-12T18:33:41Z", "hours": 1.65, "text": "I planned the way I am going to connect the ArduCam to the Raspberry Pi with the thermal sensor. I realized I might have to solder some wires together so that more than one wire can fit on one pin on the Pi. I planned the way the wires are going to connect to the Pi and how I am going to integrate ML into the Pi using the camera and thermal sensor."}, {"post_id": 26242, "ts": "2026-07-10T22:09:55Z", "hours": 1.7667, "text": "I researched more about using the ArduCam with the Raspberry Pi 5. I found troubleshooting techniques and what I need to do after I get the camera (the setup)."}, {"post_id": 25652, "ts": "2026-07-10T02:04:39Z", "hours": 1.6847, "text": "I read Chapters 11 and 12 of the Machine Learning book."}, {"post_id": 25543, "ts": "2026-07-09T21:16:12Z", "hours": 1.5167, "text": "I watched a video about using the ArduCam with the Raspberry Pi 5."}, {"post_id": 25481, "ts": "2026-07-09T19:38:18Z", "hours": 1.2369, "text": "I read Chapters 9 and 10 of the Machine Learning book."}, {"post_id": 25077, "ts": "2026-07-09T01:30:27Z", "hours": 0.4, "text": "I read Chapter 8 of the Machine Learning book. I will stop watching the AI on the Edge videos because they are not accessible on YouTube after Lesson 31. The parts will come day after tomorrow, so I plan to finish reading this book by then."}, {"post_id": 24895, "ts": "2026-07-08T19:02:48Z", "hours": 2.1167, "text": "I watched Lesson 31 of the AI on the Edge videos."}, {"post_id": 24517, "ts": "2026-07-08T03:43:40Z", "hours": 2.1914, "text": "I watched Lesson 30 of the AI on the Edge videos."}, {"post_id": 24471, "ts": "2026-07-08T01:31:47Z", "hours": 1.9167, "text": "I watched Lesson 29 of the AI on the Edge videos."}, {"post_id": 24422, "ts": "2026-07-07T23:28:04Z", "hours": 3.2, "text": "I watched Lesson 28 of the AI on the Edge videos."}, {"post_id": 24308, "ts": "2026-07-07T19:58:17Z", "hours": 2.1003, "text": "I watched Lesson 27 of the AI on the Edge videos."}, {"post_id": 23795, "ts": "2026-07-06T23:03:10Z", "hours": 2.7667, "text": "I watched Lesson 26 of the AI on the Edge videos."}, {"post_id": 23280, "ts": "2026-07-06T04:18:00Z", "hours": 2.3625, "text": "I watched Lesson 25 of the AI on the Edge videos."}, {"post_id": 23236, "ts": "2026-07-06T01:55:59Z", "hours": 3.1667, "text": "I watched Lesson 24 of the AI on the Edge videos."}, {"post_id": 23150, "ts": "2026-07-05T22:46:20Z", "hours": 0.9167, "text": "I read chapters 6 and 7 of the Machine Learning book. I’m just reading and watching the videos until the parts arrive in three or four days. Then, I will work on the technical aspect of the prototype. I have some free time now, so I thought I would learn about Machine Learning and using the Raspberry Pi in the time I have instead of wasting it."}, {"post_id": 22461, "ts": "2026-07-04T22:37:08Z", "hours": 2.0494, "text": "I watched Lesson 23 of the AI on the Edge videos."}, {"post_id": 22380, "ts": "2026-07-04T20:34:29Z", "hours": 3.2, "text": "I watched Lesson 22 of the AI on the Edge videos."}, {"post_id": 21779, "ts": "2026-07-03T21:41:25Z", "hours": 1.5, "text": "I watched Lesson 21 of the AI on the Edge videos."}, {"post_id": 21716, "ts": "2026-07-03T20:11:28Z", "hours": 1.9, "text": "I watched Lesson 20 of the AI on the Edge videos."}, {"post_id": 21285, "ts": "2026-07-03T04:02:15Z", "hours": 2.8383, "text": "I watched Lesson 19 of the AI on the Edge videos."}, {"post_id": 21215, "ts": "2026-07-03T01:11:38Z", "hours": 2.3, "text": "I watched Lesson 18 of the AI on the Edge videos."}, {"post_id": 21101, "ts": "2026-07-02T21:55:09Z", "hours": 3.7, "text": "I watched Lesson 17 of the AI on the Edge videos."}, {"post_id": 20495, "ts": "2026-07-02T03:07:09Z", "hours": 1.9072, "text": "I watched Lesson 16 of the AI on the Edge videos."}, {"post_id": 20442, "ts": "2026-07-02T01:11:45Z", "hours": 2.3333, "text": "I watched Lesson 15 of the AI on the Edge videos."}, {"post_id": 20318, "ts": "2026-07-01T21:43:50Z", "hours": 3.6667, "text": "I watched Lesson 14 of the AI on the Edge videos."}, {"post_id": 19770, "ts": "2026-07-01T04:50:30Z", "hours": 2.7167, "text": "I watched Lesson 13 of the AI on the Edge videos."}, {"post_id": 19679, "ts": "2026-07-01T02:07:59Z", "hours": 1.4167, "text": "I watched Lesson 12 of the AI on the Edge videos."}, {"post_id": 19634, "ts": "2026-07-01T00:35:15Z", "hours": 1.6167, "text": "I read chapters 5 and 6 of the Machine Learning book."}, {"post_id": 19586, "ts": "2026-06-30T22:40:26Z", "hours": 1.6167, "text": "I watched Lesson 11 of the AI on the Edge videos."}, {"post_id": 19523, "ts": "2026-06-30T21:02:23Z", "hours": 1.0494, "text": "I watched Lesson 10 of the AI on the Edge videos."}, {"post_id": 19468, "ts": "2026-06-30T19:58:25Z", "hours": 2.1, "text": "I watched Lesson 9 of the AI on the Edge videos."}, {"post_id": 19018, "ts": "2026-06-30T05:48:49Z", "hours": 2.7, "text": "I watched Lesson 8 of the AI on the Edge videos."}, {"post_id": 18914, "ts": "2026-06-30T03:06:50Z", "hours": 0.75, "text": "I finished reading Chapter 4 of the Machine Learning book. I am also taking more notes on the book now."}, {"post_id": 18878, "ts": "2026-06-30T02:18:01Z", "hours": 0.9, "text": "I sent an email to Ms. Mint (the one I met previosuly) asking if we could meet again for some feedback on my project idea. I also converted my paper plan onto a document and calendar so I can keep track of any deadlines I might have for the project."}, {"post_id": 18760, "ts": "2026-06-29T23:18:51Z", "hours": 4.0, "text": "I watched Lesson 7 of the AI on the Edge videos."}, {"post_id": 17910, "ts": "2026-06-28T20:55:18Z", "hours": 1.2, "text": "I watched Lesson 6 of the AI on the Edge videos."}, {"post_id": 17840, "ts": "2026-06-28T19:40:59Z", "hours": 1.0667, "text": "I watched Lesson 5 of AI on the Edge. In the previous DevLog about the AI on the Edge videos, I actually watched Lesson 4, not Lesson 3."}, {"post_id": 17786, "ts": "2026-06-28T18:35:28Z", "hours": 1.7667, "text": "I made a plan on how to spend my time during this summer, as a lot of time will be dedicated to the ML aspect of my project."}, {"post_id": 17345, "ts": "2026-06-28T02:58:04Z", "hours": 2.0833, "text": "I watched Lesson 3 of the AI on the Edge videos."}, {"post_id": 17217, "ts": "2026-06-27T22:37:39Z", "hours": 3.05, "text": "I finished the 3rd lesson of the AI on the Edge."}, {"post_id": 17106, "ts": "2026-06-27T19:33:57Z", "hours": 1.5667, "text": "I watched the Lesson 2 of the AI on the Edge Raspberry Pi videos."}, {"post_id": 16603, "ts": "2026-06-27T00:34:57Z", "hours": 1.5, "text": "I watched a video about using the Raspberry Pi 5 with ML. Though the Machine Learning book is helpful (and I will keep reading it), I felt that it was not enough to help me with this specific project."}, {"post_id": 16000, "ts": "2026-06-25T23:50:46Z", "hours": 0.9333, "text": "I researched exactly what camera and battery pack to buy (to power the Raspberry Pi). I added them to the cart and will buy it as soon as possible to further develop the prototype. I can’t wait to see how it works with the thermal sensor!"}, {"post_id": 15917, "ts": "2026-06-25T21:22:07Z", "hours": 1.0667, "text": "I just researched about how to combine a thermal sensor with a camera. I found a helpful video and took notes on that video. I also found the specific type of camera I can use, which is a standard Raspberry Pi Camera Module, as well as the connector."}, {"post_id": 15877, "ts": "2026-06-25T20:08:12Z", "hours": 0.6167, "text": "Instead of physically testing the prototypes out (because my dog accidentally stepped on the ultrasonic sensor prototype), I just researched a bit more about the two sensors. I researched the benefits and downsides of each sensor, as well as how accurae they are at specifcally detecting dead trees. I found that people have used ultrasonic sensors before to detect dead trees, but no one has used thermal sensors in the way that I am before to do so. Therefore, I will stick with using a thermal sensor for this prototype. I will have to do more research about the actual pairing between a thermal sensor, a camera, and ML, but the book will help me a lot in the coding of the ML portion."}, {"post_id": 15231, "ts": "2026-06-24T18:49:08Z", "hours": 0.5333, "text": "I compared the 2 prototypes to see which sensor is more accurate (with research, not actual testing). I found that the thermal sensor is more accurate, especially when paired with a camera and an ML algorithm. However, the pairing will be new to me because of the Raspberry Pi. I am more used to working with Aruinos, but through research and practice, I will be able to implement ML. Also, the book I am reading is going to help increase my knowledge on ML. In a future DevLog, I might just test this research just to be sure the thermal sensor is the right choice."}, {"post_id": 14069, "ts": "2026-06-23T01:29:08Z", "hours": 2.3667, "text": "I created the new prototype using the ultrasonic sensor. I coded it, and it successfully functions properly. However, when I tested it with a tree, it didn’t detect it correctly (it said it was dead, not healthy). When I tested it a few more times, it showed accurate readings. I still need to compare the two prototypes together."}, {"post_id": 13982, "ts": "2026-06-22T23:01:27Z", "hours": 0.7219, "text": "I started taking notes on how to work with a thermal sensor, a camera, and ML. I found that it might be hard to integrate all 3 of these things, so I started looking in a different path. I found that I could use ultrasonic distance sensors to detect the unique ultrasonic waves emitted from trees. Therefore, I will start creating a prototype using the ultrasonic sensor and compare the 2 prototypes together."}, {"post_id": 13915, "ts": "2026-06-22T20:24:35Z", "hours": 1.6833, "text": "I copied the code from Command Prompt to GitHub so I have a way to store it somewhere safe. I also double-checkked that the code was correct, and fixed any errors."}, {"post_id": 13555, "ts": "2026-06-22T06:01:12Z", "hours": 3.0333, "text": "I interviewed a tree expert, Ms. Mint, who works at a local farm. She brought up some interesting points, and helped me narrow down what sensors I want to use for my project. She said that using a thermal sensor would be a good idea becuase of its accuracy and easy use. However, when I interviewed her, I had to record the video on my phone instead of on this Hackatime. Therefore, I screen recorded the video and that is the video shown here on this Devlog. I was also with a few other people interested in Ms. Mint’s work, so it wasn’t a one-on-one session, more of a broader overview with a lot of Q-and-A. Overall, this experience was really nice because I got to meet a curator of a nature center, feel the nature all around me, see the difference between dead and healthy trees, and get feedback on my idea."}, {"post_id": 13494, "ts": "2026-06-22T02:51:43Z", "hours": 1.1878, "text": "I wired the thermal sensor, the LCD, the Raspberry Pi, and the LCD backpack. At first, the wiring was not working, so I switched to planning the wiring on paper. Once I finished that, I used a soldering iron to combine two wires to fit in one slot. This is the completed wiring."}, {"post_id": 13467, "ts": "2026-06-22T01:34:43Z", "hours": 0.4833, "text": "I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML."}, {"post_id": 13450, "ts": "2026-06-22T01:01:41Z", "hours": 2.55, "text": "I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML."}, {"post_id": 13342, "ts": "2026-06-21T21:15:14Z", "hours": 0.4833, "text": "I have started reading a book about Machine Learning, its history, and how to train/use it to the best of my ability. I have been taking some notes and answering some questions presented in the book. I have gotten through the first 2 chapters so far and plan to finish the book in the next few weeks. This book will really help me use ML in my project, as well as use it in other projects that I may decide to pursue."}, {"post_id": 12793, "ts": "2026-06-20T22:25:53Z", "hours": 0.8169, "text": "I created the code for the basic part of the prototype. The code makes the prototype able to detect the thermal signature of a Redwood Tree and determine whether it is dead or healthy. In the future, I wil re-make the code to incorporate a camera and a Machine Learning algorithm that can be used for more accurate and broader readings, not just for Redwood trees."}, {"post_id": 12756, "ts": "2026-06-20T21:19:55Z", "hours": 1.4667, "text": "Researched about the different techniques and sensors I could use for this project. I found that using a thermal sensor with Machine Learning algorithms and a camera would be the best for my project."}, {"post_id": 12708, "ts": "2026-06-20T19:07:36Z", "hours": 0.6164, "text": "Testing and editing the code and the wiring of the prototype"}]...
|
Title: See-TreePiO by @Aryana | Stardance
Devlogs Title: See-TreePiO by @Aryana | Stardance
Devlogs:
Testing and editing the code and the wiring of the prototype
Researched about the different techniques and sensors I could use for this project. I found that using a thermal sensor with Machine Learning algorithms and a camera would be the best for my project.
I created the code for the basic part of the prototype. The code makes the prototype able to detect the thermal signature of a Redwood Tree and determine whether it is dead or healthy. In the future, I wil re-make the code to incorporate a camera and a Machine Learning algorithm that can be used for more accurate and broader readings, not just for Redwood trees.
I have started reading a book about Machine Learning, its history, and how to train/use it to the best of my ability. I have been taking some notes and answering some questions presented in the book. I have gotten through the first 2 chapters so far and plan to finish the book in the next few weeks. This book will really help me use ML in my project, as well as use it in other projects that I may decide to pursue.
I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML.
I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML.
I wired the thermal sensor, the LCD, the Raspberry Pi, and the LCD backpack. At first, the wiring was not working, so I switched to planning the wiring on paper. Once I finished that, I used a soldering iron to combine two wires to fit in one slot. This is the completed wiring.
I interviewed a tree expert, Ms. Mint, who works at a local farm. She brought up some interesting points, and helped me narrow down what sensors I want to use for my project. She said that using a thermal sensor would be a good idea becuase of its accuracy and easy use. However, when I interviewed her, I had to record the video on my phone instead of on this Hackatime. Therefore, I screen recorded the video and that is the video shown here on this Devlog. I was also with a few other people interested in Ms. Mint’s work, so it wasn’t a one-on-one session, more of a broader overview with a lot of Q-and-A. Overall, this experience was really nice because I got to meet a curator of a nature center, feel the nature all around me, see the difference between dead and healthy trees, and get feedback on my idea.
I copied the code from Command Prompt to GitHub so I have a way to store it somewhere safe. I also double-checkked that the code was correct, and fixed any errors.
I started taking notes on how to work with a thermal sensor, a camera, and ML. I found that it might be hard to integrate all 3 of these things, so I started looking in a different path. I found that I could use ultrasonic distance sensors to detect the unique ultrasonic waves emitted from trees. Therefore, I will start creating a prototype using the ultrasonic sensor and compare the 2 prototypes together.
I created the new prototype using the ultrasonic sensor. I coded it, and it successfully functions properly. However, when I tested it with a tree, it didn’t detect it correctly (it said it was dead, not healthy). When I tested it a few more times, it showed accurate readings. I still need to compare the two prototypes together.
I compared the 2 prototypes to see which sensor is more accurate (with research, not actual testing). I found that the thermal sensor is more accurate, especially when paired with a camera and an ML algorithm. However, the pairing will be new to me because of the Raspberry Pi. I am more used to working with Aruinos, but through research and practice, I will be able to implement ML. Also, the book I am reading is going to help increase my knowledge on ML. In a future DevLog, I might just test this research just to be sure the thermal sensor is the right choice.
Instead of physically testing the prototypes out (because my dog accidentally stepped on the ultrasonic sensor prototype), I just researched a bit more about the two sensors. I researched the benefits and downsides of each sensor, as well as how accurae they are at specifcally detecting dead trees. I found that people have used ultrasonic sensors before to detect dead trees, but no one has used thermal sensors in the way that I am before to do so. Therefore, I will stick with using a thermal sensor for this prototype. I will have to do more research about the actual pairing between a thermal sensor, a camera, and ML, but the book will help me a lot in the coding of the ML portion.
I just researched about how to combine a thermal sensor with a camera. I found a helpful video and took notes on that video. I also found the specific type of camera I can use, which is a standard Raspberry Pi Camera Module, as well as the connector.
I researched exactly what camera and battery pack to buy (to power the Raspberry Pi). I added them to the cart and will buy it as soon as possible to further develop the prototype. I can’t wait to see how it works with the thermal sensor!
I watched a video about using the Raspberry Pi 5 with ML. Though the Machine Learning book is helpful (and I will keep reading it), I felt that it was not enough to help me with this specific project.
I watched the Lesson 2 of the AI on the Edge Raspberry Pi videos.
I finished the 3rd lesson of the AI on the Edge.
I watched Lesson 3 of the AI on the Edge videos.
I made a plan on how to spend my time during this summer, as a lot of time will be dedicated to the ML aspect of my project.
I watched Lesson 5 of AI on the Edge. In the previous DevLog about the AI on the Edge videos, I actually watched Lesson 4, not Lesson 3.
I watched Lesson 6 of the AI on the Edge videos.
I watched Lesson 7 of the AI on the Edge videos.
I sent an email to Ms. Mint (the one I met previosuly) asking if we could meet again for some feedback on my project idea. I also converted my paper plan onto a document and calendar so I can keep track of any deadlines I might have for the project.
I finished reading Chapter 4 of the Machine Learning book. I am also taking more notes on the book now.
I watched Lesson 8 of the AI on the Edge videos.
I watched Lesson 9 of the AI on the Edge videos.
I watched Lesson 10 of the AI on the Edge videos.
I watched Lesson 11 of the AI on the Edge videos.
I read chapters 5 and 6 of the Machine Learning book.
I watched Lesson 12 of the AI on the Edge videos.
I watched Lesson 13 of the AI on the Edge videos.
I watched Lesson 14 of the AI on the Edge videos.
I watched Lesson 15 of the AI on the Edge videos.
I watched Lesson 16 of the AI on the Edge videos.
I watched Lesson 17 of the AI on the Edge videos.
I watched Lesson 18 of the AI on the Edge videos.
I watched Lesson 19 of the AI on the Edge videos.
I watched Lesson 20 of the AI on the Edge videos.
I watched Lesson 21 of the AI on the Edge videos.
I watched Lesson 22 of the AI on the Edge videos.
I watched Lesson 23 of the AI on the Edge videos.
I read chapters 6 and 7 of the Machine Learning book. I’m just reading and watching the videos until the parts arrive in three or four days. Then, I will work on the technical aspect of the prototype. I have some free time now, so I thought I would learn about Machine Learning and using the Raspberry Pi in the time I have instead of wasting it.
I watched Lesson 24 of the AI on the Edge videos.
I watched Lesson 25 of the AI on the Edge videos.
I watched Lesson 26 of the AI on the Edge videos.
I watched Lesson 27 of the AI on the Edge videos.
I watched Lesson 28 of the AI on the Edge videos.
I watched Lesson 29 of the AI on the Edge videos.
I watched Lesson 30 of the AI on the Edge videos.
I watched Lesson 31 of the AI on the Edge videos.
I read Chapter 8 of the Machine Learning book. I will stop watching the AI on the Edge videos because they are not accessible on YouTube after Lesson 31. The parts will come day after tomorrow, so I plan to finish reading this book by then.
I read Chapters 9 and 10 of the Machine Learning book.
I watched a video about using the ArduCam with the Raspberry Pi 5.
I read Chapters 11 and 12 of the Machine Learning book.
I researched more about using the ArduCam with the Raspberry Pi 5. I found troubleshooting techniques and what I need to do after I get the camera (the setup).
I planned the way I am going to connect the ArduCam to the Raspberry Pi with the thermal sensor. I realized I might have to solder some wires together so that more than one wire can fit on one pin on the Pi. I planned the way the wires are going to connect to the Pi and how I am going to integrate ML into the Pi using the camera and thermal sensor.
I read Chapter 13 of the Machine Learning book.
I read Chapters 14 and 15 of the Machine Learning book. The parts will come tomorrow.
I fiinshed the Machine Learning book.
I tested the camera and battery pack that came. They both worked really well. Now, I can start inputting the ML algrothm.
I researched the different datasets I can use for the project, as well as the amount of tree data each have in them. I still need to do some more research, but as of now, creating a dataset is the best option if I want to get a wide, accurate range of data. I haven’t found any datasets that match the amount of data I can collect by myself in my neighborhood.
I researched more about the tree datasets, and I found one that has plenty of accurate information: PlantNet API.
I researched about how to use the specific PlantNet API database with the Raspberry Pi and hook that database to a Machine Learning algorthim. I am finally ready to actually make the Machine Learning algorithm and get my hands dirty now that I have the information I need to continue on with the project.
I connected the database to the Raspberry Pi, and tested it out using a house plant. It worked really well, and the next step is to test it outside with a real tree.
I build a CAD of the structure that will house the prototype. I left holes for all the different parts, and will print it later today.
I 3D printed the top half of the housing for the prototype. Next, I will print the bottom half.
I fixed the issues that the prototype was facing. I also added a button. The main thing I did was make the prototype able to function without the computer nearby, which can make it so that anyone in the world can use it with a battery pack.
I researched the different types of prevalent trees in California and their temperatures during different seasons. I plan to add this to my database, as I hadn’t previously done this. I used many websites, but Our City Forest was the most helpful.
I combined the parts in the bottom half of the prototype, and fit it in the encolsure.
I completed the prototype by combining the enclosure with the prototype. I encased the sensors and the LCD. The prototype is finally complete!
Ships:
I made a project that can detect tree/plant species and temperature to determine whether it is dead or not. It displays the result on an LCD in the back, and will start the process of scanning a tree/plant once a button is pressed. The wiring is enclosed in a 3D printed prototype. The most difficult thing I did in this project was likely trying to fit it all in the enclosure. There were a lot of wires here and there, and the button was also quite difficult to fit in, as I needed to solder it on. However, this project was really fun to do, as it helped me gain knowledge about the environment around me, and I got to practice my software and hardware skills. I am really proud of myself, as I completed this project from start to finish, and didn’t give up. To test my project, all you have to do is plug in the battery pack, wait for a minute or so, point the prototype at the tree you want to scan, press the button, and wait for the results. Sometimes, it will take a little longer to get the results, resulting from a difficulty figuring out either the temperature or species of that particular plant/tree....
|
1793670806.495283
|
1793757206.495283
|
|
64275
|
My own site! by @vasula08 | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @vasula08 | Stardance
|
1793670807.9500637
|
1794275607.9500637
|
|
64276
|
My first slack bot! by @filipauersperger11 | Stard My first slack bot! by @filipauersperger11 | Stardance...
|
filipauersperger11
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @filipauersperger11 Title: My first slack bot! by @filipauersperger11 | Stardance...
|
1793670808.8280842
|
1794275608.8280842
|
|
12938
|
PetTrack by @szabence | Stardance
|
szabence
|
1
|
72.63
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T14:24:17Z", "hours": 71.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PetTrack! A beautiful Pet Monitoring system that upcycles old smartphones into IP-cameras that you can use to see your small pet I made this project because I took in a Rabbit in May 2026 and I didn’t know what she was doing when i wasn’t home, so I decided to code this app that you can install on any Android 7+ / iPhone 6s or newer device, and use it to check on your pet, with a beautiful UI, Zone tracking, replays, medicine and vaccine tracking, and a lot more :) The hardest part was, getting used to writing Flutter. I have never used Flutter in the past, but I read about it and I liked the mentality and the mechanics of the code or how should I say, and I decided to give it a go. I love it. Simple but effective, and I can use this 1 codebase on the web, on my iPhone, on my Android and even on my WearOS smartwatch :) The project is working, and you can check it by the bottom below, select language, select Client and press Demo mode, it will show the UI. You can see it working in action on the screenshots. Check the README, and thank you for reading this!", "repo": "https://github.com/szbnce/PetTrack", "demo": "https://pettrackdemo.szabence.com"}]...
|
[{"post_id": 68851, "ts": "202 [{"post_id": 68851, "ts": "2026-09-15T21:18:20Z", "hours": 1.6314, "text": "PetTrack reship no.2 Hey guys, I have shipped the project last week, but I got rejected because I’ve used the project logo as banner and not a screenshot… Anyways, I fixed some bugs that Ive seen since shipping, which was the Notification, on both iOS and Android and Web, it wasn’t working correctly anywhere, but because of lack of time at the moment, I have removed the Notification option. on iOS it will never work self-hosted, because it requires apple dev account and the app to be on the app store or have a real backend behind it, or something like that I’ve read. I also removed the Sync with watch button from the iOS builds and Web builds, since there is only WearOS build. Google play! I have started the process to put the app on the Google Play. I was originally against this, as y’all have read in one of the first devlogs, but I thought, 25 bucks once isn’t that much, so PetTrack will be on the Play store soon, but by the looks of things, only after Stardance has already finished. WearOS I started school once again, and I couldn’t always get to my phone so I have made a minimalist app to use on the watch, it’s not that full, you can only see 1 frame / 5 seconds, and you can’t edit anything, only check the live feed, check the Monitors battery percentage and the last seen in X zone. I will ship my project once again, thank you for reading! EDIT: I did not know I just need recertification instead of a full reship lol"}, {"post_id": 62924, "ts": "2026-09-06T13:52:19Z", "hours": 5.8556, "text": "PetTrack has been released! Hello guys! I’m not going to mess around with Markdown for this last devlog, I have been testing the project for 2 weeks now, and it is working great. I fixed up minor bugs that I found, added 5 AI-translated languages for more multilang support, though Hungarian and English has been translated by me, so those are definetly correct :) I changed on the UI a bit, removed the last seen and most seen cards from the dashboard and changed it to a diagram about the Zone visits, and changed the Medical UI cards a bit. Also made the resolution in the app better, now you can make pictures from the app, and instantly share them, replays work now on both iOS and Android. The first release of PetTrack has been finally published on GitHub, so please go and check it out! https://github.com/szbnce/PetTrack/releases/tag/1.0.0 Thank you everybody who has been though this journey over 3 months with me. Thank you!"}, {"post_id": 53494, "ts": "2026-08-24T02:11:25Z", "hours": 5.7447, "text": "PetTrack Demo is finally here! I haven’t worked on PetTrack in the past 1,5 months, mostly because I just couldn’t bring myself to code, and I am going on vacation as I am writing this, and I figured, omg, if i come home, it will be already september, and besides school, i will definetly not finish this, and then, what was I working for for days on end? So, I got my sxit together, and started working on the project. Sadly, because of the time, I had to use AI so I will finish until I leave for vacation. I almost did not. It’s 3:45 AM, I left 2 hours ago, and I set up the server 15 whole minutes before leaving my house. So it was calculated, but I managed. Unified Flutter codebase: I merged the pettrack_client , pettrack_montior and pettrack_web , into one package, and is written in Flutter. The app is entirely in Flutter, I kept designs of the Client so it won’t look very different. Deployment & OS Support: The new one app method is Docker compatible, so the project will offer a Docker option, and a non-docker MacOS and Linux native installer, and a Windows installer aswell, without docker :) Branching: The one where I used AI has been moved to a new branch \"allFlutter\" . iOS Support: I initally did not want to make an iOS version because I don’t really agree with the yearly 100 usd developer program payment, and I don’t really agree with Google Play 25usd purchase aswell, but that’s very much more manageable than a yearly model, on a FOSS app. Anyways, I will publish the .ipa file, and do what you want with it :) If you have the courage and understanding, you can jailbreak and install it indefinetly, or you can sideload it, though you will have to renew it every week. If you don’t want to do that, you can of course use the Web version in a browser, it will work the exact same way, they are the same codebase under. Web support: This was my original plan to make PetTrack work on iOS devices, but then, I decided why not make it fully work on any browser? One codebase, the Webapp, the Android app and iOS app will work the EXACT SAME WAY! if you want to install a full app, you may, but if you don’t, you have all options. Medical panel: I think I have made a devlog about that, or mentioned that, but I will write it once again. We have a Medical tab now, where you will be able to track Medications and get notifications to give them to your pet, and the Vaccines tab, where you can track what the pet has gotten, when, and when its next Due. You can also set more colors. Replay: You can now replay movement. Currently for some reason, It does not work (I started implementing it at 0:30 AM, left at 1:30 so I could’ve expected that), or atleast it does not work from the browser. If i log into the server, and check it, the videos are there, and visible. It records a few seconds before and after the movement. Demo! Now you can check out PetTrack at: 👉 https://pettrackdemo.szabence.com How to access: Select language (colors are broken i know) Select Viewer For IP write asd or something, just dont leave it empty For password, write 8068 Press next, and you will see it asking if you want to go into Demo Press yes, and you are in! Its a quite basic demo, its the same codebase, just no server behind. You can add medications, test zones, etc. After you close the tab, everything will be deleted. I will test the project as I am going about my week, fix errors at night, and I will ship the project next week. Have a great week guys, and thank you for watching the project."}, {"post_id": 40217, "ts": "2026-08-03T16:58:52Z", "hours": 4.8564, "text": "Hey guys.. Its been 17 days since the last Devlog, I dont even know what I “upgraded” or didn’t. I wont’t try to make it a big devlog or anything, really i just want to get the hours logged so I can start fresh. I’ve decided to ditch all 3 (pettrack_monitor, pettrack_client and pettrack_web) codebases and rewrite everything as one flutter app. Making sure 4 sections of the app written in 3 different languages wasn’t easy on my level so I decided to ditch all and write one “pettrack_app” codebase. It will work on Android, iOS and Web, and for iOS users also PWA app, so you don’t have to install anything, and it will all work under one codebase, so everything will be the same across all devices. So. I don’t know when I will finish or anything, or write the next devlog, because I have so many things to do this month, soo…"}, {"post_id": 30037, "ts": "2026-07-17T09:22:29Z", "hours": 6.6725, "text": "The Flutter apps and the Server is 99% done until shipping! This is rather a bigger devlog, I didn’t make a more smaller ones, but let’s see what I’ve done: Easier pairing : Now instead of using a qr code (which in the Docker terminal is unreliable), you get a 4 number pairing code, which you can use to communicate the 64 char JWT token. It’s much easier, and much more reliable. Docker : I implemented Docker, but it seems like at the moment that it only really works on MacOS, i might phase Docker out and make setup commands for each, maybe a oneliner with curl, or something like that. Bugfixes : Lots of bugfixes in those 6,5 hours, I can’t even list all of them, connectivity issues, pairing issues, camera issues, UI Cleanup : I removed developer overlays from the web e.g Eruda mobile console overlay. I will be focusing a lot more on the Mock API for the demo site, and polishing for Shipping EXCEPT for one feature that I still want to add, and that would be insanely good. Bye guys!"}, {"post_id": 27994, "ts": "2026-07-13T23:20:55Z", "hours": 4.0786, "text": "🚀 WebClient is getting ready! I’ve done multiple things with the WebClient over the last 4 hours, and we are getting closer and closer to shipping! Here is a quick rundown of the progress: 🛠️ Key Features & Updates Unified Multi-Mode: You can now choose whether you want to use a device as a Client (Viewer) or a Monitor (Camera). Zone Management: Zone adding now works! (Showing current zones is still slightly broken, but we are getting there). Event Tracking: Zone enter/exit detection is fully functional. Dashboard Stats: Added panels to show “Last seen” and “Most seen” locations. Pet Profiles: You can now edit your pet’s profile directly from the Settings tab. Settings Reset: Added the ability to wipe all local settings if you want a fresh start. 🎨 UI & UX Polish Dark Mode: Synced theme with Client, dark and light mode aswell. Cleaned up the UI: Removed all unnecessary buttons. P.S. Berci got vaccinated today! 💉🐇 So now he’s immune to both physical viruses and mental breakdowns over JavaScript!"}, {"post_id": 27081, "ts": "2026-07-12T10:04:49Z", "hours": 5.1319, "text": "now i understand why web developers are all bald and angry… Okkkay so, little bit of a backgound here, I do not agree on the fact that I should pay for FOSS apps to be put on the play store and app store, that for one company i should pay 25 bucks once and then i can put my app on the app store and i have to pay 100 BUCKS YEARLY TO APPLE. So, instead of creating an app for iOS, since you can’t really sideload (there are ways for people in Europe and you can jailbreak bla bla bla…) and this app is made for ordinary people. Not developers. So, as a last resort, I am making a WebClient and WebMonitor, so the apps are able to run without even installing anything. Obviously the installed apps will run better and feel better, but then no iOS support, which I did not want. So, I started working with AI on a WebClient and WebMonitor and started learning JavaScript, but that…. Dart next to Javascript is a kids game honestly, very hard, I tried to make it easier for me by using TailwindCSS which I have some experience in, but it wasn’t that easy. To eliminate AI slop, I have a great Web developer friend (became bald at the bold age of 30), and he’ll monitor the code and check if it is alright for “prod”…"}, {"post_id": 25564, "ts": "2026-07-09T21:53:54Z", "hours": 4.0792, "text": "🛠️ BUGFIXES! BUGFIXES! I didn’t really add any new features this time, but rather focused on fixing and polishing already existing features. 🔒 Security and Stability Token Generation: I removed hardcoded “placeholder” tokens; the system now creates a new API token seamlessly. Storage Limits: Added a maximum 500 picture limit on the server, so it doesn’t fill up the storage if the cleanup task fails. Syntax Fixes: Fixed a broken dictionary on the server which threw garbage JSON. ✨ UI and Usability Notification Cooldown: Added a 1-minute cooldown between notifications to prevent spam. Better Statistics: Now the Activities tab shows 50 events instead of 5 for more accurate data. Dynamic Names: Removed fallback placeholder names (no more hardcoded fake names). 100% Localization: Removed all hardcoded UI strings and moved absolutely everything into l10n and .arb dictionaries. 🏗️ Architecture Hardware JPEG Streaming: Switched to native hardware JPEG streaming for faster picture taking, completely replacing the heavy RepaintBoundary method. 🚧 IN THE WORKS: WebSocket migration! I will tackle that tomorrow to achieve real-time streaming. Here is a picture showing git graph (lol) and Berci as I was fixing up issues. Bye guys!"}, {"post_id": 25297, "ts": "2026-07-09T14:26:21Z", "hours": 6.7308, "text": "More seamless Setup! I have edited the Setups, so now, it is more seamless: When you Install the server, it spits out a QR-code, which you have to scan while setting up the Client app, they connect, and you have to set up the profile of the pet, and a 4 digit pin code, which will be for the WebClient that I am planning to make. After that, the phone spits out another QR code, which you have to scan with the Monitor, and it will connect automatically, and only then will the app let you in. Also, I added E2EE to the server - client connection, to make it more secure, and I also did some bugfixes. I will start to Polish the apps, make it so easy to set up that even somebody who doesn’t use technology day-to-day would be able to set it up perfectly. Bye guys!"}, {"post_id": 24346, "ts": "2026-07-07T21:10:21Z", "hours": 4.4408, "text": "Monitor ready, server working, Client UI is mostly done, we are shipping soon! I made a few adjustments today: Monitor: Synced theme with Client Fixed alignment issues Added Auto reconnect and Auto capture Monitor is basically finished, I don’t think I will add anything to the monitor before shipping now. New README.md: I completly redesigned the README, now in my opinion its almost perfect. Tomorrow, I will start to make a webpage for the project, and I might make a WebUI before the project ships, and add some more tests, but I will sleep on that. Bye guys!"}, {"post_id": 22216, "ts": "2026-07-04T16:05:40Z", "hours": 3.8428, "text": "Frontend Changes to PetTrack! Today I worked a lot on PetTrack, and I made a few small but nice changes: Zone Notifications: You now get notified if a pet enters or exits a zone. Battery Alerts: Get notifications if the monitor’s battery is low (can be set between 5% and 50%). Camera Placeholder: Added a placeholder picture for when the camera is offline. Pet Types: You can now set the type of pet you have. I’ve added a few common ones, but I can add more if needed! Dynamic Live Badge: Fixed the hardcoded “Live” text on the dashboard. Now it shows exactly when the picture was taken (e.g., “30 seconds ago”), and if it’s under 10 seconds, it will say “Live”. “Continuous” Video: It’s still using pictures, but instead of updating every 30 seconds, it now updates roughly every 2 seconds. UI Cleanup: Removed the zoom buttons from the Zones screen since they were unnecessary. Custom Zones & Icons: When adding a new zone, you can now assign it a category (play area, toilet, food, water, bed) with matching icons. I’ll add a fully customizable option later! Bug Fixes: Fixed some minor layout issues. That’s all I think. Bye guys!"}, {"post_id": 21821, "ts": "2026-07-03T23:05:28Z", "hours": 3.5933, "text": "Miscellaneous Updates to PetTrack! Hey guys! I know I haven’t posted in almost 2 weeks at this point. I needed a break from coding and doing work at the PC/PetTrack. We have a few miscellaneous updates to share: Custom Monitor IDs : You can now set a custom Monitor ID, and it will show up properly in the PetTrack app as well, instead of just defaulting to “Main Monitor”. Battery Status : You can now see the battery percentage and whether it’s charging directly in the app! I plan to add a feature later that will send a notification to the PetTrack Client app when the monitor phone’s battery is running low. Backend Testing : Added testing to the PetTrack server for both the WebSocket and REST API, so you can easily check if the API and WS are working correctly. I will put more effort and hours into the project soon, but I have a lot of other things going on besides this project, and I don’t want to risk burning out. Bye! P.S: This is Berci from a few days ago and I pushed everything to GH!"}, {"post_id": 12162, "ts": "2026-06-19T21:23:36Z", "hours": 5.9286, "text": "Hey guys! I haven’t posted a devlog in a few days now, I have been working on some stuff here, and I have to say that I have some very good news! We finally have a Client app! It is a work in progress, but it is something! I don’t remember everything I have changed in the code, but: API adjusted, added a layer of security, because the API wasn’t secured. Added zones to pettrack_server, and added an API to edit it, Added Database (maybe mentioned in last devlog) Takes pictures every 2 seconds, only saves every 30 seconds for 12 hours (will add a replay mode or something like that) pettrack_monitor almost fully done, only need to add some stuff here and there. pettrack_server is in an MVP state now, it works beautifully but some features are still missing before shipping pettrack_client has been made (not pushed to GH yet), works well, though I am pretty fking shyt in UI design, so I made the UI with stitch.withgoogle.com and coded some of it with Gemini, though it still needs a lot of work. Live camera somewhat works (TODO: need to add when watching in the app to show the new pictures (that are taken every 2 seconds and not the 30 seconds saved)) Shows which zone was the most used- Shows last interaction (movement) Last 15 activities (entered zone, left zone, will add more later ? (NEED IDEAS!)) You can add zones (see the live camera and set it via adding points on the picture) You can set a picture and name for your pet in the client app- Always changing welcome greetings No logo / face for the program yet, and no website, will start working on that later The Client app seems very stable for now, no issues found, pettrack_monitor has issues with focusing, server seems stable aswell. I am soon looking for testers for the program, before shipping I want to make sure that this is functional and useful for small pet owners, and what might work for me in my use case, it might not for somebody else, and I want to make it as stable as I am able to. Everything is opensource, available on https://github.com/szbnce/PetTrack (will push everything to GH tomorrow!), DM me on Slack if interested, currently only available for Android. I will start working on the UI and fix the bugs, and get back to you guys soon! Here are some pictures of the UI!"}, {"post_id": 10248, "ts": "2026-06-16T21:39:22Z", "hours": 2.5683, "text": "Hey guys! It’s been a long day, once again, but I have some good news! I have started working on PetTrack Client, started writing the UI and the functions of the app, but that’s when I realised that I still have no way of storing the data, analyzing the data and I don’t have any API routes where I could check or see the NON EXISTENT DATA! so, I left pettrack_client and started working on the backend, it’s getting somewhere, but I have not pushed changes to GH yet, because I haven’t finished it yet and it would not run in this state. I will try to finish changes with the backend tomorrow so I can start working on the frontend / client with real, actual data. Until then, here is a picture of PetTrack Monitor running on a somewhat low end Android 8.0 device and my IDE :D"}, {"post_id": 8371, "ts": "2026-06-13T22:29:10Z", "hours": 2.42, "text": "Good day everybody! It’s been a long day. I have done a lot of things today, mainly with pettrack_monitor. Basically: Firstly, I did a git rebase and made my last few commits make a bit more sense. There were commits that weren’t that useful or had the wrong name; it’s always better to have a good commit history. Next, I finally installed the app on a real device, and let’s just say, there were some problems. The flashlight was on while taking pictures, which is what I fixed first. It was quite easy, just one line: await _controller.setFlashMode(FlashMode.off); Afterward, it dawned on me that most people (including me) will use this app in Landscape mode, not Portrait. I fixed that issue next, but that itself came with a batch of new problems. The layout broke, like, fully. I couldn’t use the app at all, so I had to rewrite the whole layout with flexes and SizedBoxes; it was a pain in the a**. After this issue, instead of showing the SetupScreen every time the app opens, I made it a one-time thing and added a Settings menu and an About page. There were some issues with overflowing, but I fixed that as well. Now the app is fully functional. However, there is an issue I haven’t gotten around to fixing yet: when I exit the SetupScreen and go into MonitorScreen, the Xiaomi Camera API kills itself for whatever reason. I tried fixing it, but to no avail. It’s currently 12:30 AM, and I am very tired now. Tomorrow, I hope I will fix all remaining issues with the Monitor app and move onto the Server-side logic, zones, database, etc. And while doing that, I will start working on the Client-side app (at least an MVP) so I can start testing the app and server together. Berci is also looking forward to testing the app! (And don’t ask why he is there he is there because he wants to I have no idea why that’s good for him) Peace out!"}, {"post_id": 7131, "ts": "2026-06-11T22:16:46Z", "hours": 1.8947, "text": "We finally have the server in Docker up and running! I haven’t had much time to work on the project yesterday and today, but I started working on the Docker and Dockerfile, and well this is still whichcraft for me :p But, we are developing and we are getting ahead, and I hope that after the MVP for the server is working, I can start working on the client side MVP of the app, and we can start implementing features from there. I am very tired, and I have a long day tomorrow. Until then, there is another picture of Berci! P.S: Tomorrow I hope I can show some of the actual project!"}, {"post_id": 5844, "ts": "2026-06-09T19:49:41Z", "hours": 3.1944, "text": "Hey! Welcome to my project, PetTrack, this is the first Devlog of the project. I just recently got a rabbit, and while in school, I don’t know what she’s doing. And I assume a lot of animal parents face the same issue, or not an issue but just an uncomfortable feeling, maybe she/he got out, maybe they are doing something wrong, maybe they are not doing well, etc. This is what PetTrack aims to solve, so this uncomfortable feeling goes away, and you can be sure that your pet is safe and sound, while you are away. It uses an old phone as a “Monitor”, which will be attached to for example the cage of a pet, and connected to external power. Originally I wanted to make it so that there is no “central” computing, but after thinking about this for some time, and figuring that most of the people who are going to use this are going to use a close to min requirement phone (assuming low range old phone, and not a new flagship/new anything basically) and the issues with if the monitor dies for some issue, I decided on using a “central server” and using FastAPI with WebSockets to make the usage more seamless. It will be a simple Docker image that you will need to compose and run on a RPI or your server. The Client will be the “main” app, the one you will use the most, the one you’ll use daily. This is my last priority at the moment, let’s get the data first (Monitor), analyze and make use of the data (Server/backend), and the last is to see the data (Client). I’m open to any and all feedback on the project, any tips, help with Py/Flutter, would appreciate! Thanks for reading! Pic Description: My rabbit, named Berci, and an MVP of the server and Monitor."}]...
|
Title: PetTrack by @szabence | Stardance
Devlogs: Title: PetTrack by @szabence | Stardance
Devlogs:
Hey! Welcome to my project, PetTrack, this is the first Devlog of the project. I just recently got a rabbit, and while in school, I don’t know what she’s doing. And I assume a lot of animal parents face the same issue, or not an issue but just an uncomfortable feeling, maybe she/he got out, maybe they are doing something wrong, maybe they are not doing well, etc. This is what PetTrack aims to solve, so this uncomfortable feeling goes away, and you can be sure that your pet is safe and sound, while you are away. It uses an old phone as a “Monitor”, which will be attached to for example the cage of a pet, and connected to external power. Originally I wanted to make it so that there is no “central” computing, but after thinking about this for some time, and figuring that most of the people who are going to use this are going to use a close to min requirement phone (assuming low range old phone, and not a new flagship/new anything basically) and the issues with if the monitor dies for some issue, I decided on using a “central server” and using FastAPI with WebSockets to make the usage more seamless. It will be a simple Docker image that you will need to compose and run on a RPI or your server. The Client will be the “main” app, the one you will use the most, the one you’ll use daily. This is my last priority at the moment, let’s get the data first (Monitor), analyze and make use of the data (Server/backend), and the last is to see the data (Client). I’m open to any and all feedback on the project, any tips, help with Py/Flutter, would appreciate! Thanks for reading! Pic Description: My rabbit, named Berci, and an MVP of the server and Monitor.
We finally have the server in Docker up and running! I haven’t had much time to work on the project yesterday and today, but I started working on the Docker and Dockerfile, and well this is still whichcraft for me :p But, we are developing and we are getting ahead, and I hope that after the MVP for the server is working, I can start working on the client side MVP of the app, and we can start implementing features from there. I am very tired, and I have a long day tomorrow. Until then, there is another picture of Berci! P.S: Tomorrow I hope I can show some of the actual project!
Good day everybody! It’s been a long day. I have done a lot of things today, mainly with pettrack_monitor. Basically: Firstly, I did a git rebase and made my last few commits make a bit more sense. There were commits that weren’t that useful or had the wrong name; it’s always better to have a good commit history. Next, I finally installed the app on a real device, and let’s just say, there were some problems. The flashlight was on while taking pictures, which is what I fixed first. It was quite easy, just one line: await _controller.setFlashMode(FlashMode.off); Afterward, it dawned on me that most people (including me) will use this app in Landscape mode, not Portrait. I fixed that issue next, but that itself came with a batch of new problems. The layout broke, like, fully. I couldn’t use the app at all, so I had to rewrite the whole layout with flexes and SizedBoxes; it was a pain in the a**. After this issue, instead of showing the SetupScreen every time the app opens, I made it a one-time thing and added a Settings menu and an About page. There were some issues with overflowing, but I fixed that as well. Now the app is fully functional. However, there is an issue I haven’t gotten around to fixing yet: when I exit the SetupScreen and go into MonitorScreen, the Xiaomi Camera API kills itself for whatever reason. I tried fixing it, but to no avail. It’s currently 12:30 AM, and I am very tired now. Tomorrow, I hope I will fix all remaining issues with the Monitor app and move onto the Server-side logic, zones, database, etc. And while doing that, I will start working on the Client-side app (at least an MVP) so I can start testing the app and server together. Berci is also looking forward to testing the app! (And don’t ask why he is there he is there because he wants to I have no idea why that’s good for him) Peace out!
Hey guys! It’s been a long day, once again, but I have some good news! I have started working on PetTrack Client, started writing the UI and the functions of the app, but that’s when I realised that I still have no way of storing the data, analyzing the data and I don’t have any API routes where I could check or see the NON EXISTENT DATA! so, I left pettrack_client and started working on the backend, it’s getting somewhere, but I have not pushed changes to GH yet, because I haven’t finished it yet and it would not run in this state. I will try to finish changes with the backend tomorrow so I can start working on the frontend / client with real, actual data. Until then, here is a picture of PetTrack Monitor running on a somewhat low end Android 8.0 device and my IDE :D
Hey guys! I haven’t posted a devlog in a few days now, I have been working on some stuff here, and I have to say that I have some very good news! We finally have a Client app! It is a work in progress, but it is something! I don’t remember everything I have changed in the code, but: API adjusted, added a layer of security, because the API wasn’t secured. Added zones to pettrack_server, and added an API to edit it, Added Database (maybe mentioned in last devlog) Takes pictures every 2 seconds, only saves every 30 seconds for 12 hours (will add a replay mode or something like that) pettrack_monitor almost fully done, only need to add some stuff here and there. pettrack_server is in an MVP state now, it works beautifully but some features are still missing before shipping pettrack_client has been made (not pushed to GH yet), works well, though I am pretty fking shyt in UI design, so I made the UI with stitch.withgoogle.com and coded some of it with Gemini, though it still needs a lot of work. Live camera somewhat works (TODO: need to add when watching in the app to show the new pictures (that are taken every 2 seconds and not the 30 seconds saved)) Shows which zone was the most used- Shows last interaction (movement) Last 15 activities (entered zone, left zone, will add more later ? (NEED IDEAS!)) You can add zones (see the live camera and set it via adding points on the picture) You can set a picture and name for your pet in the client app- Always changing welcome greetings No logo / face for the program yet, and no website, will start working on that later The Client app seems very stable for now, no issues found, pettrack_monitor has issues with focusing, server seems stable aswell. I am soon looking for testers for the program, before shipping I want to make sure that this is functional and useful for small pet owners, and what might work for me in my use case, it might not for somebody else, and I want to make it as stable as I am able to. Everything is opensource, available on https://github.com/szbnce/PetTrack (will push everything to GH tomorrow!), DM me on Slack if interested, currently only available for Android. I will start working on the UI and fix the bugs, and get back to you guys soon! Here are some pictures of the UI!
Miscellaneous Updates to PetTrack! Hey guys! I know I haven’t posted in almost 2 weeks at this point. I needed a break from coding and doing work at the PC/PetTrack. We have a few miscellaneous updates to share: Custom Monitor IDs : You can now set a custom Monitor ID, and it will show up properly in the PetTrack app as well, instead of just defaulting to “Main Monitor”. Battery Status : You can now see the battery percentage and whether it’s charging directly in the app! I plan to add a feature later that will send a notification to the PetTrack Client app when the monitor phone’s battery is running low. Backend Testing : Added testing to the PetTrack server for both the WebSocket and REST API, so you can easily check if the API and WS are working correctly. I will put more effort and hours into the project soon, but I have a lot of other things going on besides this project, and I don’t want to risk burning out. Bye! P.S: This is Berci from a few days ago and I pushed everything to GH!
Frontend Changes to PetTrack! Today I worked a lot on PetTrack, and I made a few small but nice changes: Zone Notifications: You now get notified if a pet enters or exits a zone. Battery Alerts: Get notifications if the monitor’s battery is low (can be set between 5% and 50%). Camera Placeholder: Added a placeholder picture for when the camera is offline. Pet Types: You can now set the type of pet you have. I’ve added a few common ones, but I can add more if needed! Dynamic Live Badge: Fixed the hardcoded “Live” text on the dashboard. Now it shows exactly when the picture was taken (e.g., “30 seconds ago”), and if it’s under 10 seconds, it will say “Live”. “Continuous” Video: It’s still using pictures, but instead of updating every 30 seconds, it now updates roughly every 2 seconds. UI Cleanup: Removed the zoom buttons from the Zones screen since they were unnecessary. Custom Zones & Icons: When adding a new zone, you can now assign it a category (play area, toilet, food, water, bed) with matching icons. I’ll add a fully customizable option later! Bug Fixes: Fixed some minor layout issues. That’s all I think. Bye guys!
Monitor ready, server working, Client UI is mostly done, we are shipping soon! I made a few adjustments today: Monitor: Synced theme with Client Fixed alignment issues Added Auto reconnect and Auto capture Monitor is basically finished, I don’t think I will add anything to the monitor before shipping now. New README.md: I completly redesigned the README, now in my opinion its almost perfect. Tomorrow, I will start to make a webpage for the project, and I might make a WebUI before the project ships, and add some more tests, but I will sleep on that. Bye guys!
More seamless Setup! I have edited the Setups, so now, it is more seamless: When you Install the server, it spits out a QR-code, which you have to scan while setting up the Client app, they connect, and you have to set up the profile of the pet, and a 4 digit pin code, which will be for the WebClient that I am planning to make. After that, the phone spits out another QR code, which you have to scan with the Monitor, and it will connect automatically, and only then will the app let you in. Also, I added E2EE to the server - client connection, to make it more secure, and I also did some bugfixes. I will start to Polish the apps, make it so easy to set up that even somebody who doesn’t use technology day-to-day would be able to set it up perfectly. Bye guys!
🛠️ BUGFIXES! BUGFIXES! I didn’t really add any new features this time, but rather focused on fixing and polishing already existing features. 🔒 Security and Stability Token Generation: I removed hardcoded “placeholder” tokens; the system now creates a new API token seamlessly. Storage Limits: Added a maximum 500 picture limit on the server, so it doesn’t fill up the storage if the cleanup task fails. Syntax Fixes: Fixed a broken dictionary on the server which threw garbage JSON. ✨ UI and Usability Notification Cooldown: Added a 1-minute cooldown between notifications to prevent spam. Better Statistics: Now the Activities tab shows 50 events instead of 5 for more accurate data. Dynamic Names: Removed fallback placeholder names (no more hardcoded fake names). 100% Localization: Removed all hardcoded UI strings and moved absolutely everything into l10n and .arb dictionaries. 🏗️ Architecture Hardware JPEG Streaming: Switched to native hardware JPEG streaming for faster picture taking, completely replacing the heavy RepaintBoundary method. 🚧 IN THE WORKS: WebSocket migration! I will tackle that tomorrow to achieve real-time streaming. Here is a picture showing git graph (lol) and Berci as I was fixing up issues. Bye guys!
now i understand why web developers are all bald and angry… Okkkay so, little bit of a backgound here, I do not agree on the fact that I should pay for FOSS apps to be put on the play store and app store, that for one company i should pay 25 bucks once and then i can put my app on the app store and i have to pay 100 BUCKS YEARLY TO APPLE. So, instead of creating an app for iOS, since you can’t really sideload (there are ways for people in Europe and you can jailbreak bla bla bla…) and this app is made for ordinary people. Not developers. So, as a last resort, I am making a WebClient and WebMonitor, so the apps are able to run without even installing anything. Obviously the installed apps will run better and feel better, but then no iOS support, which I did not want. So, I started working with AI on a WebClient and WebMonitor and started learning JavaScript, but that…. Dart next to Javascript is a kids game honestly, very hard, I tried to make it easier for me by using TailwindCSS which I have some experience in, but it wasn’t that easy. To eliminate AI slop, I have a great Web developer friend (became bald at the bold age of 30), and he’ll monitor the code and check if it is alright for “prod”…
🚀 WebClient is getting ready! I’ve done multiple things with the WebClient over the last 4 hours, and we are getting closer and closer to shipping! Here is a quick rundown of the progress: 🛠️ Key Features & Updates Unified Multi-Mode: You can now choose whether you want to use a device as a Client (Viewer) or a Monitor (Camera). Zone Management: Zone adding now works! (Showing current zones is still slightly broken, but we are getting there). Event Tracking: Zone enter/exit detection is fully functional. Dashboard Stats: Added panels to show “Last seen” and “Most seen” locations. Pet Profiles: You can now edit your pet’s profile directly from the Settings tab. Settings Reset: Added the ability to wipe all local settings if you want a fresh start. 🎨 UI & UX Polish Dark Mode: Synced theme with Client, dark and light mode aswell. Cleaned up the UI: Removed all unnecessary buttons. P.S. Berci got vaccinated today! 💉🐇 So now he’s immune to both physical viruses and mental breakdowns over JavaScript!
The Flutter apps and the Server is 99% done until shipping! This is rather a bigger devlog, I didn’t make a more smaller ones, but let’s see what I’ve done: Easier pairing : Now instead of using a qr code (which in the Docker terminal is unreliable), you get a 4 number pairing code, which you can use to communicate the 64 char JWT token. It’s much easier, and much more reliable. Docker : I implemented Docker, but it seems like at the moment that it only really works on MacOS, i might phase Docker out and make setup commands for each, maybe a oneliner with curl, or something like that. Bugfixes : Lots of bugfixes in those 6,5 hours, I can’t even list all of them, connectivity issues, pairing issues, camera issues, UI Cleanup : I removed developer overlays from the web e.g Eruda mobile console overlay. I will be focusing a lot more on the Mock API for the demo site, and polishing for Shipping EXCEPT for one feature that I still want to add, and that would be insanely good. Bye guys!
Hey guys.. Its been 17 days since the last Devlog, I dont even know what I “upgraded” or didn’t. I wont’t try to make it a big devlog or anything, really i just want to get the hours logged so I can start fresh. I’ve decided to ditch all 3 (pettrack_monitor, pettrack_client and pettrack_web) codebases and rewrite everything as one flutter app. Making sure 4 sections of the app written in 3 different languages wasn’t easy on my level so I decided to ditch all and write one “pettrack_app” codebase. It will work on Android, iOS and Web, and for iOS users also PWA app, so you don’t have to install anything, and it will all work under one codebase, so everything will be the same across all devices. So. I don’t know when I will finish or anything, or write the next devlog, because I have so many things to do this month, soo…
PetTrack Demo is finally here! I haven’t worked on PetTrack in the past 1,5 months, mostly because I just couldn’t bring myself to code, and I am going on vacation as I am writing this, and I figured, omg, if i come home, it will be already september, and besides school, i will definetly not finish this, and then, what was I working for for days on end? So, I got my sxit together, and started working on the project. Sadly, because of the time, I had to use AI so I will finish until I leave for vacation. I almost did not. It’s 3:45 AM, I left 2 hours ago, and I set up the server 15 whole minutes before leaving my house. So it was calculated, but I managed. Unified Flutter codebase: I merged the pettrack_client , pettrack_montior and pettrack_web , into one package, and is written in Flutter. The app is entirely in Flutter, I kept designs of the Client so it won’t look very different. Deployment & OS Support: The new one app method is Docker compatible, so the project will offer a Docker option, and a non-docker MacOS and Linux native installer, and a Windows installer aswell, without docker :) Branching: The one where I used AI has been moved to a new branch "allFlutter" . iOS Support: I initally did not want to make an iOS version because I don’t really agree with the yearly 100 usd developer program payment, and I don’t really agree with Google Play 25usd purchase aswell, but that’s very much more manageable than a yearly model, on a FOSS app. Anyways, I will publish the .ipa file, and do what you want with it :) If you have the courage and understanding, you can jailbreak and install it indefinetly, or you can sideload it, though you will have to renew it every week. If you don’t want to do that, you can of course use the Web version in a browser, it will work the exact same way, they are the same codebase under. Web support: This was my original plan to make PetTrack work on iOS devices, but then, I decided why not make it fully work on any browser? One codebase, the Webapp, the Android app and iOS app will work the EXACT SAME WAY! if you want to install a full app, you may, but if you don’t, you have all options. Medical panel: I think I have made a devlog about that, or mentioned that, but I will write it once again. We have a Medical tab now, where you will be able to track Medications and get notifications to give them to your pet, and the Vaccines tab, where you can track what the pet has gotten, when, and when its next Due. You can also set more colors. Replay: You can now replay movement. Currently for some reason, It does not work (I started implementing it at 0:30 AM, left at 1:30 so I could’ve expected that), or atleast it does not work from the browser. If i log into the server, and check it, the videos are there, and visible. It records a few seconds before and after the movement. Demo! Now you can check out PetTrack at: 👉 https://pettrackdemo.szabence.com How to access: Select language (colors are broken i know) Select Viewer For IP write asd or something, just dont leave it empty For password, write 8068 Press next, and you will see it asking if you want to go into Demo Press yes, and you are in! Its a quite basic demo, its the same codebase, just no server behind. You can add medications, test zones, etc. After you close the tab, everything will be deleted. I will test the project as I am going about my week, fix errors at night, and I will ship the project next week. Have a great week guys, and thank you for watching the project.
PetTrack has been released! Hello guys! I’m not going to mess around with Markdown for this last devlog, I have been testing the project for 2 weeks now, and it is working great. I fixed up minor bugs that I found, added 5 AI-translated languages for more multilang support, though Hungarian and English has been translated by me, so those are definetly correct :) I changed on the UI a bit, removed the last seen and most seen cards from the dashboard and changed it to a diagram about the Zone visits, and changed the Medical UI cards a bit. Also made the resolution in the app better, now you can make pictures from the app, and instantly share them, replays work now on both iOS and Android. The first release of PetTrack has been finally published on GitHub, so please go and check it out! https://github.com/szbnce/PetTrack/releases/tag/1.0.0 Thank you everybody who has been though this journey over 3 months with me. Thank you!
PetTrack reship no.2 Hey guys, I have shipped the project last week, but I got rejected because I’ve used the project logo as banner and not a screenshot… Anyways, I fixed some bugs that Ive seen since shipping, which was the Notification, on both iOS and Android and Web, it wasn’t working correctly anywhere, but because of lack of time at the moment, I have removed the Notification option. on iOS it will never work self-hosted, because it requires apple dev account and the app to be on the app store or have a real backend behind it, or something like that I’ve read. I also removed the Sync with watch button from the iOS builds and Web builds, since there is only WearOS build. Google play! I have started the process to put the app on the Google Play. I was originally against this, as y’all have read in one of the first devlogs, but I thought, 25 bucks once isn’t that much, so PetTrack will be on the Play store soon, but by the looks of things, only after Stardance has already finished. WearOS I started school once again, and I couldn’t always get to my phone so I have made a minimalist app to use on the watch, it’s not that full, you can only see 1 frame / 5 seconds, and you can’t edit anything, only check the live feed, check the Monitors battery percentage and the last seen in X zone. I will ship my project once again, thank you for reading! EDIT: I did not know I just need recertification instead of a full reship lol
Ships:
PetTrack! A beautiful Pet Monitoring system that upcycles old smartphones into IP-cameras that you can use to see your small pet I made this project because I took in a Rabbit in May 2026 and I didn’t know what she was doing when i wasn’t home, so I decided to code this app that you can install on any Android 7+ / iPhone 6s or newer device, and use it to check on your pet, with a beautiful UI, Zone tracking, replays, medicine and vaccine tracking, and a lot more :) The hardest part was, getting used to writing Flutter. I have never used Flutter in the past, but I read about it and I liked the mentality and the mechanics of the code or how should I say, and I decided to give it a go. I love it. Simple but effective, and I can use this 1 codebase on the web, on my iPhone, on my Android and even on my WearOS smartwatch :) The project is working, and you can check it by the bottom below, select language, select Client and press Demo mode, it will show the UI. You can see it working in action on the screenshots. Check the README, and thank you for reading this!...
|
1793670809.702115
|
1793757209.702115
|
|
64277
|
My very own WebOS by @mick_tg | Stardance
|
mick_tg
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @mick_tg | Stardance
|
1793670810.987323
|
1794275610.987323
|