|
42508
|
EyeMouse by @avycado13 | Stardance
|
avycado13
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-28T03:44:45Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a mouse you can control with your eyes. It uses openCV and your camera to detect where your ireses are and use where they are gazing to point your mouse.", "repo": "https://github.com/avycado13/eyemouse", "demo": "https://github.com/avycado13/eyemouse/blob/main/main.py"}]...
|
[{"post_id": 83507, "ts": "202 [{"post_id": 83507, "ts": "2026-10-28T02:34:34Z", "hours": 0.9675, "text": "added margins and error handling"}, {"post_id": 44929, "ts": "2026-08-11T00:24:31Z", "hours": 0.4411, "text": "I implemented a system to calibrate it by measuring your iris position when looking at a dot that renders"}, {"post_id": 41631, "ts": "2026-08-05T23:21:03Z", "hours": 0.675, "text": "tried using pyautogui for mouse control by directly mapping the avg of the iris positions to the mosuse position with a multiplier. didnt work will try a new solution based on speed of eye movement and direction"}, {"post_id": 39222, "ts": "2026-08-02T01:39:51Z", "hours": 1.005, "text": "I tried 2 iterations of eye tracking. i ended up going with one powered by mediapipe"}]...
|
Title: EyeMouse by @avycado13 | Stardance
Devlogs Title: EyeMouse by @avycado13 | Stardance
Devlogs:
I tried 2 iterations of eye tracking. i ended up going with one powered by mediapipe
tried using pyautogui for mouse control by directly mapping the avg of the iris positions to the mosuse position with a multiplier. didnt work will try a new solution based on speed of eye movement and direction
I implemented a system to calibrate it by measuring your iris position when looking at a dot that renders
added margins and error handling
Ships:
I made a mouse you can control with your eyes. It uses openCV and your camera to detect where your ireses are and use where they are gazing to point your mouse....
|
1793382557.355021
|
1793468957.355021
|
|
42518
|
Microbit V2 DAW by @jimmywithagunforaeye | Stardan Microbit V2 DAW by @jimmywithagunforaeye | Stardance...
|
jimmywithagunforaeye
|
1
|
15.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-04T17:27:00Z", "hours": 15.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made micro:midi a DAW that allows you to use the micro: bit V2 like a real sequencer machine, you are able to place down notes remove notes and play your combination of notes all within this tiny device. You are also able to control other pieces of professional software like Helm and or FL studio making the possibilities with micro:midi endless. Showcase Video: https://www.youtube.com/watch?v=TixwEtPhud4", "repo": "https://github.com/johnnywiththethinkpad/micromidi", "demo": "https://makecode.microbit.org/S57060-02624-29760-36286"}]...
|
[{"post_id": 42831, "ts": "202 [{"post_id": 42831, "ts": "2026-08-07T19:30:08Z", "hours": 0.3808, "text": "i have a new saving system that will allow me to use a combination of hard drive saving and code saving it will work via you saving it to the data log then you plug the microbit into your device then you read the code enter the code into the load feature and you have you song back"}, {"post_id": 42824, "ts": "2026-08-07T19:06:30Z", "hours": 0.6872, "text": "im trying to make the save feature so far but it multiplies itself I dont know why"}, {"post_id": 42779, "ts": "2026-08-07T17:37:27Z", "hours": 1.3503, "text": "im trying to find a reliable way for the user to save their song, the microbitV2 im pretty sure has 512kb of flash memory but the only way that I know of right now to use it is via the datalog extension which doesnt allow for reading just writing to the flash you can read more about datalogging on https://makecode.microbit.org/reference/datalogger"}, {"post_id": 42722, "ts": "2026-08-07T16:06:46Z", "hours": 1.1081, "text": "still trying to debug the error with hairless midi"}, {"post_id": 42233, "ts": "2026-08-06T21:00:35Z", "hours": 0.3681, "text": "im just gonna keep postin devlogs in block code so that anybody with any knowledge can understand it: ive added this feature that when ur in midi mode it plays the preview note through your DAW or whatever u have connected instead of the internal speaker"}, {"post_id": 42212, "ts": "2026-08-06T20:35:40Z", "hours": 0.7175, "text": "finished most of the menu thing so far still have yet to make the save and load feature"}, {"post_id": 42175, "ts": "2026-08-06T19:51:28Z", "hours": 1.1192, "text": "fixed a bug that had hairless midi giving out this error. When the microbit is playing the song in MIDIMODE it sends data way too fast for the microUSB cable to send so it comes out broken to solve this i added a timed delay that made sure every byte of data came through the cable clean. I also worked on the quick menu more"}, {"post_id": 42115, "ts": "2026-08-06T18:02:57Z", "hours": 0.5469, "text": "stiill working on the main menu sorta thing i put the code in blocks so its easier to visualize rather than text code"}, {"post_id": 42067, "ts": "2026-08-06T16:58:31Z", "hours": 1.01, "text": "working on a new menu system that makes changing playing modes, saving your songs and tilt logic to bend the synthesizer frequencies or modulate note volumes in real-time just by physically tilting your board left, right, forward, or backward possible in the future"}, {"post_id": 42003, "ts": "2026-08-06T15:27:39Z", "hours": 0.7275, "text": "trying to debug something that goes on only on real hardware but not the simulator"}, {"post_id": 41598, "ts": "2026-08-05T21:55:29Z", "hours": 1.7306, "text": "GIANT UPDATE 1.0 TOO MUCH TO LIST HERE https://github.com/johnnywiththethinkpad/micromidi/releases/tag/v1.0.0"}, {"post_id": 40351, "ts": "2026-08-03T19:59:51Z", "hours": 0.5475, "text": "this code here allows you to remove notes"}, {"post_id": 40287, "ts": "2026-08-03T18:31:31Z", "hours": 0.3686, "text": "this small if script saved the entire project, why you might ask its because before when you clicked a or b not only it would move your cursor but would also call for a function and that function would delete sprites that didnt exist yet which resulted in a null error this checks if there is scrolling and then it would call upon the function"}, {"post_id": 39766, "ts": "2026-08-02T23:04:17Z", "hours": 0.5486, "text": "Hello everybody, version 0.1.0 is out check it out here https://github.com/johnnywiththethinkpad/micromidi/releases/tag/v0.10"}, {"post_id": 39731, "ts": "2026-08-02T21:47:47Z", "hours": 0.3872, "text": "We are a little bit behind now: so I thought of using some AI to help me out on the note playing thing but what it actually did was give me faulty code that resulted in the software leaking memory, I have learned my lesson"}, {"post_id": 39595, "ts": "2026-08-02T18:00:42Z", "hours": 0.6878, "text": "I’ve gotten the scan line to finally work, its sorta complicated but it scans the line its on for any blocks and each individual block of the scan line is a specific row a notes for example all of the notes on 0x is middle C so the scan dot of the scanline on 0x checks if theres a block there and it doesn’t even need to know what note it is all it knows is all the notes there are a middle C so it plays a C my next thing to tackle is how to make it play chords as i said earlier the 65mhz CPU can only play a single tone at a time"}, {"post_id": 39567, "ts": "2026-08-02T16:55:46Z", "hours": 0.3503, "text": "a new sorta worse scrolling design but very simple"}, {"post_id": 39561, "ts": "2026-08-02T16:31:31Z", "hours": 1.0614, "text": "debugging ;("}, {"post_id": 39510, "ts": "2026-08-02T14:45:56Z", "hours": 0.3508, "text": "big problem i have no photos today but during testing on real hardware, the microbit can only make sound in one channel (monophonic) but i have a solution the gameboy by using fast arpeggios i can make it sound like its playing all 4 notes at once"}, {"post_id": 38565, "ts": "2026-08-01T01:24:41Z", "hours": 0.3425, "text": "Where did my cursor go? I added a system that when your cursor is over a note in the 5x5 screen that pixel flashes so it does not blend it with the others"}, {"post_id": 38548, "ts": "2026-08-01T00:52:27Z", "hours": 0.3292, "text": "Placing down notes - Just like in a real DAW! Ive come up with this code that allows the user to place down a note in the 5x5 grid square using the capacitive logo button on the microbit V2"}]...
|
Title: Microbit V2 DAW by @jimmywithagunforaeye | Title: Microbit V2 DAW by @jimmywithagunforaeye | Stardance
Devlogs:
Placing down notes - Just like in a real DAW! Ive come up with this code that allows the user to place down a note in the 5x5 grid square using the capacitive logo button on the microbit V2
Where did my cursor go? I added a system that when your cursor is over a note in the 5x5 screen that pixel flashes so it does not blend it with the others
big problem i have no photos today but during testing on real hardware, the microbit can only make sound in one channel (monophonic) but i have a solution the gameboy by using fast arpeggios i can make it sound like its playing all 4 notes at once
debugging ;(
a new sorta worse scrolling design but very simple
I’ve gotten the scan line to finally work, its sorta complicated but it scans the line its on for any blocks and each individual block of the scan line is a specific row a notes for example all of the notes on 0x is middle C so the scan dot of the scanline on 0x checks if theres a block there and it doesn’t even need to know what note it is all it knows is all the notes there are a middle C so it plays a C my next thing to tackle is how to make it play chords as i said earlier the 65mhz CPU can only play a single tone at a time
We are a little bit behind now: so I thought of using some AI to help me out on the note playing thing but what it actually did was give me faulty code that resulted in the software leaking memory, I have learned my lesson
Hello everybody, version 0.1.0 is out check it out here https://github.com/johnnywiththethinkpad/micromidi/releases/tag/v0.10
this small if script saved the entire project, why you might ask its because before when you clicked a or b not only it would move your cursor but would also call for a function and that function would delete sprites that didnt exist yet which resulted in a null error this checks if there is scrolling and then it would call upon the function
this code here allows you to remove notes
GIANT UPDATE 1.0 TOO MUCH TO LIST HERE https://github.com/johnnywiththethinkpad/micromidi/releases/tag/v1.0.0
trying to debug something that goes on only on real hardware but not the simulator
working on a new menu system that makes changing playing modes, saving your songs and tilt logic to bend the synthesizer frequencies or modulate note volumes in real-time just by physically tilting your board left, right, forward, or backward possible in the future
stiill working on the main menu sorta thing i put the code in blocks so its easier to visualize rather than text code
fixed a bug that had hairless midi giving out this error. When the microbit is playing the song in MIDIMODE it sends data way too fast for the microUSB cable to send so it comes out broken to solve this i added a timed delay that made sure every byte of data came through the cable clean. I also worked on the quick menu more
finished most of the menu thing so far still have yet to make the save and load feature
im just gonna keep postin devlogs in block code so that anybody with any knowledge can understand it: ive added this feature that when ur in midi mode it plays the preview note through your DAW or whatever u have connected instead of the internal speaker
still trying to debug the error with hairless midi
im trying to find a reliable way for the user to save their song, the microbitV2 im pretty sure has 512kb of flash memory but the only way that I know of right now to use it is via the datalog extension which doesnt allow for reading just writing to the flash you can read more about datalogging on https://makecode.microbit.org/reference/datalogger
im trying to make the save feature so far but it multiplies itself I dont know why
i have a new saving system that will allow me to use a combination of hard drive saving and code saving it will work via you saving it to the data log then you plug the microbit into your device then you read the code enter the code into the load feature and you have you song back
Ships:
I made micro:midi a DAW that allows you to use the micro: bit V2 like a real sequencer machine, you are able to place down notes remove notes and play your combination of notes all within this tiny device. You are also able to control other pieces of professional software like Helm and or FL studio making the possibilities with micro:midi endless. Showcase Video: https://www.youtube.com/watch?v=TixwEtPhud4...
|
1793577219.9457314
|
1793663619.9457314
|
|
42521
|
FrogOS by @exasperadou | Stardance
|
exasperadou
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T21:36:30Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Im really proud of my project FrogOS. It’s a small operating system built with HTML, CSS, JavaScript and Python. It has 2 different apps: Notes, and a built-in browser. The hardest part was definitely making the browser work because the making process was a little bit complex and i had to learn so much stuff. I hope you guys like it.", "repo": "https://github.com/exasperadou-max/FrogOS", "demo": "https://frog-os-weld.vercel.app/"}]...
|
[{"post_id": 54090, "ts": "202 [{"post_id": 54090, "ts": "2026-08-24T21:31:10Z", "hours": 4.5572, "text": "Im finally done!"}, {"post_id": 48597, "ts": "2026-08-17T01:48:28Z", "hours": 0.3253, "text": "When i was deploying the proxy to vercel and checking it i realized i have so much to fix this will take a lot more 😭😭😭😭"}, {"post_id": 48568, "ts": "2026-08-17T00:38:48Z", "hours": 2.0819, "text": "Im done! Im just checking everything before deploying"}, {"post_id": 45519, "ts": "2026-08-12T02:01:13Z", "hours": 3.0289, "text": "Im almost done but i had to do some weird stuff to get the browser to work. I had to learn so much stuff and I will probably be done in a few days"}, {"post_id": 44364, "ts": "2026-08-10T02:23:53Z", "hours": 3.085, "text": "I fixed a LOT of bugs and just optimized the code because it was kinda messy, also, i started working on the browser and added the icons on the desktop and dock c:"}, {"post_id": 40498, "ts": "2026-08-04T02:20:43Z", "hours": 1.1364, "text": "I didnt really do much today. I fixed some bugs and optimized the code and began to code the next app. I want to build a browser inside the OS but im realizing that is kinda complex to have an actual working browser that lets you use the internet so that will take a while :c"}, {"post_id": 39692, "ts": "2026-08-02T20:34:49Z", "hours": 2.8906, "text": "I finished creating the notes app. I added a dock too"}, {"post_id": 39215, "ts": "2026-08-02T01:10:52Z", "hours": 2.0225, "text": "I added a topbar bar and made the window system c:"}, {"post_id": 39100, "ts": "2026-08-01T20:08:28Z", "hours": 1.6689, "text": "I started with FrogOs, here is the first part, the welcome screen. I will improve it later on when im done with the other parts c:"}]...
|
Title: FrogOS by @exasperadou | Stardance
Devlogs Title: FrogOS by @exasperadou | Stardance
Devlogs:
I started with FrogOs, here is the first part, the welcome screen. I will improve it later on when im done with the other parts c:
I added a topbar bar and made the window system c:
I finished creating the notes app. I added a dock too
I didnt really do much today. I fixed some bugs and optimized the code and began to code the next app. I want to build a browser inside the OS but im realizing that is kinda complex to have an actual working browser that lets you use the internet so that will take a while :c
I fixed a LOT of bugs and just optimized the code because it was kinda messy, also, i started working on the browser and added the icons on the desktop and dock c:
Im almost done but i had to do some weird stuff to get the browser to work. I had to learn so much stuff and I will probably be done in a few days
Im done! Im just checking everything before deploying
When i was deploying the proxy to vercel and checking it i realized i have so much to fix this will take a lot more 😭😭😭😭
Im finally done!
Ships:
Im really proud of my project FrogOS. It’s a small operating system built with HTML, CSS, JavaScript and Python. It has 2 different apps: Notes, and a built-in browser. The hardest part was definitely making the browser work because the making process was a little bit complex and i had to learn so much stuff. I hope you guys like it....
|
1793570125.7162485
|
1793656525.7162485
|
|
42536
|
Web OS 1 (first project!!) by @nishy- | Stardance
|
nishy-
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T18:51:12Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ship #1 woohoo! anyways i finally got my first window simulating after 2 hours of trial and error, i’m gonna add a buncha more stuff in webOS2 bc if i don’t this OS is gonna just be poop Time to actually lock in! (if you have any good githubs i can look at or tutorials please send them my way!)", "repo": "https://github.com/nishyns/WebOS", "demo": "https://nishyns.github.io/WebOS/"}]...
|
[{"post_id": 56797, "ts": "202 [{"post_id": 56797, "ts": "2026-08-28T18:29:58Z", "hours": 4.1319, "text": "Ship #1? I was struggling with simulating a window for like two hours after trial and error and re writing my code a few times i finally simulated my gallery app! Sorry that the OS looks so poop rn and that there’s only one app, for webOS 2 I’m gonna lock in and redo the gallery app, add doomscroll, a calculator, a calendar app, snake mini game (maybe suika too ) add an embedded browser with youtube wikipedia neal.fun + sfx and background music (music player app) maybe editable wallpapers bc it sounds easy on paper but ik it wont be easy"}, {"post_id": 51739, "ts": "2026-08-21T15:57:10Z", "hours": 3.8753, "text": "After a long time i’ve finally completed tutorials 3 and 4! I added dragabble windows and my first app! (the notes app that SerenityUX showed in the tutorial) The reason I almost four hours is because my mind was boggled by tutorial three, so after looking at other projects code and the tutorial a few times and lots of troubleshooting I finally got it to work!"}, {"post_id": 42117, "ts": "2026-08-06T18:08:29Z", "hours": 1.8656, "text": "AeroOS Devlog 1 I’ve been working on my website for 2 hours (that didn’t count because I didn’t do wakatime correctly) and the time that’s showing here (1 hour 45ish minutes) So far I have followed tutorials 1 and 2 and my website looks like this (attached image) The current features are, Showing the live time (EST) Having a link that sends you to youtube A random rotating disc (hopefully i can later make this disc send you to a nice spotify playlist) some text and a top bar Features I want to add in the future are Background music (fruitger aero music) Minigames snake minigame Funny videos (like 50 videos that are from old youtube like funny 10 second videos) A calculator Ms paint? Dragabble shortcuts trash bin Notes app Radio? (Shows background musci playing or swtich to other channel for random songs I like) A good README Loading screen"}]...
|
Title: Web OS 1 (first project!!) by @nishy- | Sta Title: Web OS 1 (first project!!) by @nishy- | Stardance
Devlogs:
AeroOS Devlog 1 I’ve been working on my website for 2 hours (that didn’t count because I didn’t do wakatime correctly) and the time that’s showing here (1 hour 45ish minutes) So far I have followed tutorials 1 and 2 and my website looks like this (attached image) The current features are, Showing the live time (EST) Having a link that sends you to youtube A random rotating disc (hopefully i can later make this disc send you to a nice spotify playlist) some text and a top bar Features I want to add in the future are Background music (fruitger aero music) Minigames snake minigame Funny videos (like 50 videos that are from old youtube like funny 10 second videos) A calculator Ms paint? Dragabble shortcuts trash bin Notes app Radio? (Shows background musci playing or swtich to other channel for random songs I like) A good README Loading screen
After a long time i’ve finally completed tutorials 3 and 4! I added dragabble windows and my first app! (the notes app that SerenityUX showed in the tutorial) The reason I almost four hours is because my mind was boggled by tutorial three, so after looking at other projects code and the tutorial a few times and lots of troubleshooting I finally got it to work!
Ship #1? I was struggling with simulating a window for like two hours after trial and error and re writing my code a few times i finally simulated my gallery app! Sorry that the OS looks so poop rn and that there’s only one app, for webOS 2 I’m gonna lock in and redo the gallery app, add doomscroll, a calculator, a calendar app, snake mini game (maybe suika too ) add an embedded browser with youtube wikipedia neal.fun + sfx and background music (music player app) maybe editable wallpapers bc it sounds easy on paper but ik it wont be easy
Ships:
ship #1 woohoo! anyways i finally got my first window simulating after 2 hours of trial and error, i’m gonna add a buncha more stuff in webOS2 bc if i don’t this OS is gonna just be poop Time to actually lock in! (if you have any good githubs i can look at or tutorials please send them my way!)...
|
1793570134.1149058
|
1793656534.1149058
|
|
42540
|
PBM (Plasma Backup Manager) by @TomTTFB | Stardanc PBM (Plasma Backup Manager) by @TomTTFB | Stardance...
|
TomTTFB
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T17:45:23Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PBM is a bash script for backing up and restoring your entire KDE Plasma desktop config including panel layouts, shortcuts, themes, window rules, GTK settings. It also has named snapshots, category-based partial restores, a diff viewer, tarball export and import, and a CLI mode alongside the interactive menu.", "repo": "https://github.com/tomTTFB/pbm", "demo": "https://github.com/tomTTFB/pbm/releases/tag/v1.0.0"}]...
|
[{"post_id": 53946, "ts": "202 [{"post_id": 53946, "ts": "2026-08-24T17:29:05Z", "hours": 3.8053, "text": "Devlog #2 I added the last few features this session. you can Export and import as a tarball so you can move backups between machines or store them on a NAS, a diff view that compares any saved backup against your current config and tells you exactly which files have changed, and category-based partial restores (like appearance, panels, shortcuts, windows, and apps.) so you can pull back just your panel layout or just your shortcuts without touching anything else. The CLI mode is also fully working so you can run pbm backup [name] or pbm restore [name] without going through the UI. it also makes a pre-restore snapshot so if something goes wrong you have a backup of a backup"}, {"post_id": 52701, "ts": "2026-08-23T00:02:53Z", "hours": 1.4536, "text": "Devlog #1 I made a bash script for backup and restore KDE Plasma configs. It has one command to snapshot all your Plasma files and one to roll back to the latest. This will be super helpful for when i was to play around with my desktop layouts and stuff without breaking anything permanently"}]...
|
Title: PBM (Plasma Backup Manager) by @TomTTFB | S Title: PBM (Plasma Backup Manager) by @TomTTFB | Stardance
Devlogs:
Devlog #1 I made a bash script for backup and restore KDE Plasma configs. It has one command to snapshot all your Plasma files and one to roll back to the latest. This will be super helpful for when i was to play around with my desktop layouts and stuff without breaking anything permanently
Devlog #2 I added the last few features this session. you can Export and import as a tarball so you can move backups between machines or store them on a NAS, a diff view that compares any saved backup against your current config and tells you exactly which files have changed, and category-based partial restores (like appearance, panels, shortcuts, windows, and apps.) so you can pull back just your panel layout or just your shortcuts without touching anything else. The CLI mode is also fully working so you can run pbm backup [name] or pbm restore [name] without going through the UI. it also makes a pre-restore snapshot so if something goes wrong you have a backup of a backup
Ships:
PBM is a bash script for backing up and restoring your entire KDE Plasma desktop config including panel layouts, shortcuts, themes, window rules, GTK settings. It also has named snapshots, category-based partial restores, a diff viewer, tarball export and import, and a CLI mode alongside the interactive menu....
|
1792878707.6269753
|
1793742707.6269753
|
|
42541
|
Cardboard Fan by @Ash-ioL | Stardance
|
Ash-ioL
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T19:30:03Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a cardboard fan out of scraps I found in my house. My most notable challenge was fixing the switch and making sure it makes contact when locked. To really get my experience with this project I recommend looking through my devlog and github README. I’m most proud of how I consistently worked on this without stopping and I was able to get it done relatively quickly.", "repo": "https://github.com/Ash-ioL/stardance-cardboard-fan", "demo": ""}]...
|
[{"post_id": 39629, "ts": "202 [{"post_id": 39629, "ts": "2026-08-02T19:09:23Z", "hours": 4.9167, "text": "Started, Scrambled Something Up, Completed I initially thought of making this for my friend’s birthday. But I realized that it would be risky since it could easily break when put in a bag if dropped or swung around, and it would be hard to carry around for him. It would also need specific directions to use it the way I built it. So to save him the hassle, I decided to keep it and just give him a gift card. Features: Tall body - this wasn’t intended, I sort of just started building and it came out like this. A switch with a rubber band lock - this needed some really good adjustment so it isn’t too hard to activate and isn’t too easy to activate. A battery holder - it took me some time to brainstorm and come up with the idea to add a rubber band lock A door to access the battery with a rubber band lock A plastic propellor - I also considered cardboard and badminton feathers but I thought that plastic would meet in the middle and be simple but also lightweight. Honestly, rubber bands and hot glue really carried this and help me so much. Challenges Time constraint: since this originally intended for my friend’s birthday, it forced me to lock in and finish quick so this was nice. Switch headaches: a lot of the times when the fan wouldn’t spin, it had something to do with the switch not making contact when locked so I had to adjust that many times. Motor wire to foil detachment - the motor wire one time came out of the foil so I had to open up the thing and remove hot glue and stuff to fix that. I reinforced it with a ton of hot glue. I think the fact that I was able to make something cool and work on it without giving up is something to be proud of. It’ll be nice to have this nice sitting on my shelf to remind me of the little things I can do that build up over time."}]...
|
Title: Cardboard Fan by @Ash-ioL | Stardance
Devl Title: Cardboard Fan by @Ash-ioL | Stardance
Devlogs:
Started, Scrambled Something Up, Completed I initially thought of making this for my friend’s birthday. But I realized that it would be risky since it could easily break when put in a bag if dropped or swung around, and it would be hard to carry around for him. It would also need specific directions to use it the way I built it. So to save him the hassle, I decided to keep it and just give him a gift card. Features: Tall body - this wasn’t intended, I sort of just started building and it came out like this. A switch with a rubber band lock - this needed some really good adjustment so it isn’t too hard to activate and isn’t too easy to activate. A battery holder - it took me some time to brainstorm and come up with the idea to add a rubber band lock A door to access the battery with a rubber band lock A plastic propellor - I also considered cardboard and badminton feathers but I thought that plastic would meet in the middle and be simple but also lightweight. Honestly, rubber bands and hot glue really carried this and help me so much. Challenges Time constraint: since this originally intended for my friend’s birthday, it forced me to lock in and finish quick so this was nice. Switch headaches: a lot of the times when the fan wouldn’t spin, it had something to do with the switch not making contact when locked so I had to adjust that many times. Motor wire to foil detachment - the motor wire one time came out of the foil so I had to open up the thing and remove hot glue and stuff to fix that. I reinforced it with a ton of hot glue. I think the fact that I was able to make something cool and work on it without giving up is something to be proud of. It’ll be nice to have this nice sitting on my shelf to remind me of the little things I can do that build up over time.
Ships:
I made a cardboard fan out of scraps I found in my house. My most notable challenge was fixing the switch and making sure it makes contact when locked. To really get my experience with this project I recommend looking through my devlog and github README. I’m most proud of how I consistently worked on this without stopping and I was able to get it done relatively quickly....
|
1793540949.6651053
|
1793627349.6651053
|
|
42543
|
UwUConverter by @CherryMG | Stardance
|
CherryMG
|
1
|
94.31
|
236
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T20:42:34Z", "hours": 12.0, "multiplier": 19.47, "payout": 236, "blessing": "neutral", "text": "How UwUConverter meets the criteria Clear quality-of-life improvement UwUConverter makes file conversion much faster by adding conversion options directly to the Windows right-click menu. Instead of opening a website or separate program, users can right-click a file and choose an output format. Working and usable project The project is already functional and packaged with a Windows installer and uninstaller. It supports video, audio, images, RAW files, documents, and spreadsheets. Effort and thoughtful execution I built the conversion system, format-specific context menus, Windows Registry integration, icon installation, packaged executable, installer, uninstall cleanup, README, license, and automated GitHub builds. Clear problem being solved Most file converters require extra software, uploads, ads, or several manual steps. UwUConverter keeps the process local, private, and available directly in File Explorer. Minimum 3 hours spent The project took well over three hours as you may see due to testing formats, codecs, document libraries, packaging, Registry commands, installer behavior, and release automation. Three out of many major QoL improvements Right-click conversion Convert files without opening another program. Many formats in one tool Supports common media, image, document, and spreadsheet formats. Local and private Files stay on the user’s computer instead of being uploaded. Current release UwUConverter supports formats including MP4, MKV, WebM, MP3, WAV, FLAC, OPUS, PNG, JPG, PDF, DOCX, ODT, TXT, XLSX, XLS, ODS, CSV, and TSV. It also includes a Windows installer, uninstaller, automatic context-menu setup, command-line support, and GitHub release builds. This is only the first ship This is only the first ship. I will add: A GUI More extensions Settings and presets Compression options Video, audio, and image quality controls Batch conversion Better progress information Safer output naming Better format compatibility detection Improved document and spreadsheet support Linux support", "repo": "https://github.com/CherryMakesGames/uwuconverter", "demo": "https://github.com/CherryMakesGames/UwUConverter/releases"}]...
|
[{"post_id": 51924, "ts": "202 [{"post_id": 51924, "ts": "2026-08-21T20:56:53Z", "hours": 2.2078, "text": "Update 22 Modern Context Menu works now! I am going to work on making a better installer and more functionality related to archives"}, {"post_id": 51696, "ts": "2026-08-21T14:55:10Z", "hours": 8.8081, "text": "Update 21 I am about to finish the release as I realized the issue with windows comes with the weird way of creating app certificates and “trusting” them."}, {"post_id": 49845, "ts": "2026-08-18T19:56:43Z", "hours": 5.4158, "text": "Update 20 You know how Windows 11 has this new modern context menu? Yeah! I forgot about that because like any normal person I use the extended one as default:) I now found out that the tool in fact does not show up on the modern context menu, and that is because windows decided to make that a fancy shmancy system which I will let google overview explain: The modern context menu uses a different mechanism: an IExplorerCommand COM shell extension registered through package identity, usually via an MSIX/sparse package. So after reading through all the blabber and a lot of forum posts, I realize! I am fucked! I need to learn how to wrap up some small .dll that will do all the exposing of things to the modern menu. Please, can you all quit windows and go to linux instead so I don’t have to fuck with this?"}, {"post_id": 49235, "ts": "2026-08-17T22:09:57Z", "hours": 0.6669, "text": "Why does this cost money, let me publish my god damn extension"}, {"post_id": 49128, "ts": "2026-08-17T19:21:13Z", "hours": 7.5067, "text": "Update 19 Now, I can finally place my hand on your shoulder, and say I managed to “sort of” get the new feature working! The feature being, browser integration. Now, you may ask yourself, Cherry, what the fuck do you mean browser integration, what are you doing in my house? And to these I say, hear me out, and don’t worry about it. This has been suggested to me and long story short it is a feature that will detect the web browsers that are on your device and allow you to install a connection between them and the app via native messaging so as to be able to for example, right click any image in google images, whether a png, ico or webp, select “UwUConverter Download” and then select from the dropdown of fileformats to download as. This is to furthermore decrease the hassle in daily life file downloads. I plan to also just add a “quick download button” which will download the image as a png no matter what, and an option to set a filename before downloading."}, {"post_id": 47802, "ts": "2026-08-16T00:27:08Z", "hours": 8.6306, "text": "Update 18 I’m mostly writing this update so soon due to devlog limits. I am currently working on implementing browser integration via a browser extension that connects to the application via native messaging allowing you to download files directly in the format you want instead of that pescy .webp or .ico. The reason why I am doing this not “just as an extension” is the fact that this way you can already utilize the tool that you likely already have downloaded (UwUConverter) and support filetypes that are not natively supported by the browser view as that would be a limitation if I had done it without native messaging. I hope to push this soon!"}, {"post_id": 47027, "ts": "2026-08-14T16:54:17Z", "hours": 3.1928, "text": "Update 17 I added batch conversion without requiring to use the entire folder. It took surprisingly a long time to get working with filtering “accidental misselections” like having images and videos together for conversion."}, {"post_id": 46457, "ts": "2026-08-13T17:54:18Z", "hours": 9.1389, "text": "Update 16 I was about to yell and scream and say fuck this project however I finally got an autoupdater working along with support for right click decompression on linux. Added archive decompression to linux Added archive decompression to windows Added cli archive management including compression Added an autoupdater, and manual updates with cli Fixed multiple minor issues related to document conversion Fixed minor issue relating to cli archive management Fixed ssl errors Fixed install errors with certain network types New release avalaible on github in a few minutes Enjoy the product of my suffering:))"}, {"post_id": 45090, "ts": "2026-08-11T11:12:48Z", "hours": 3.2989, "text": "Update 15 Added full support for extraction of compressed archives in rclick menu."}, {"post_id": 44247, "ts": "2026-08-09T21:32:49Z", "hours": 4.1947, "text": "Update 14 I have added 7-zip support for the cli version of the tool, it comes bundled in with the project in their lightweight cli free to use for commercial use version. What is funny, I will not be able to support compressing into rar because: “the actual RAR compression/creation algorithm is controlled by RARLAB. Their license explicitly says the RAR compression algorithm is proprietary and may not be recreated from the UnRAR/WinRAR code without permission” It is such bullshit but okay ig, if that’s needed lol Luckily, I have never ran into someone willingly using .rar. Create + extract/list/test now supports: 7z zip tar gzip / gz bzip2 / bz2 xz wim Extraction/list/test additionally supports: rar cab iso arj lzh lzma rpm dmg xar"}, {"post_id": 43985, "ts": "2026-08-09T13:56:51Z", "hours": 7.2667, "text": "Update 13 Added early 3D model conversion support for OBJ, STL, PLY, and GLB, including CLI and batch conversion. One issue I ran into was that 3D formats don’t all represent the same information. Converting something like a GLB scene to STL can’t preserve materials, textures, object hierarchy, animations, etc. STL is basically just mesh geometry. For now, UwUConverter merges multi-object scenes when exporting to simpler single-mesh formats like STL/PLY and accepts that some scene data will be lost. I am also in the process of expanding the cli system for 7-zip integration with the goal of replacing winrar:)"}, {"post_id": 43332, "ts": "2026-08-08T15:09:27Z", "hours": 6.0364, "text": "Update 12 I am preparing to expand this project massively so I have created a cli version workin both on windows and linux which aims to: Give more freedom with conversion Allow the app to be used in professional workflows Simplify batch image processing And allow for more configuration Potentially implement this as an API"}, {"post_id": 42553, "ts": "2026-08-07T11:34:56Z", "hours": 0.9842, "text": "Update 11 As some people requested, I added .tif and .tiff file formats, it was very simple, just a small pillow library connection."}, {"post_id": 42322, "ts": "2026-08-07T00:08:16Z", "hours": 4.9922, "text": "Update 10 After a lot of struggle, I managed to make batch converting file folders possible. It is not yet multithreaded, however it will be in the future. Since batch conversion might require more arguments, pressing the Convert with UwUConverter button in the rclick menu opens a small UI that gives you a list of possible options. Furthermore, I plan to implement compressing to zips, decompressing etc. soon. Either way, what changed is: Added batch file conversion with custom settings including: File Format, if you are to Replace/Place new files beside/create a new folder, and Which category you convert from (also if you want logs) Fixed Linux issues, rclick menu was not resetting after updates. Created a UI for Batch Conversion."}, {"post_id": 41346, "ts": "2026-08-05T14:35:30Z", "hours": 6.5417, "text": "Update 9 Linux Was Not Just Another Build After getting the Windows version into a much better state, I started working on Linux support. I originally thought this would mostly mean running PyInstaller on Linux and uploading another executable. The actual problem was the right-click menu. On Windows, UwUConverter uses Registry entries to add actions to File Explorer. Linux does not have one equivalent system. The desktop matters, but the file manager matters even more, and different file managers expect completely different integrations. Nautilus, Nemo, and Caja can use executable scripts placed in their own script folders. Dolphin uses KDE service-menu .desktop files instead. Because of that, I could not simply replace winreg and call Linux support finished. The first job was stopping Linux from importing the Windows-only Registry code. I added a platform layer that selects make_key.py on Windows and linux_menu.py on Linux. The next thign was recreating the existing menu structure without maintaining a completely separate Linux conversion list. The Linux integration now reads the same file_types.py definitions and generates the correct scripts or Dolphin service menus from them. Nautilus, Nemo, and Caja were relatively straightforward once the script generator worked. Dolphin needed separate MIME-type mappings, executable .desktop files, KDE-specific submenu fields, and its own installation folder. Compression also caused more trouble than expected. My first presets used fixed quality values, so different options sometimes produced almost identical files. Some videos even became larger after compression because the original was already more efficiently encoded. I changed the system to offer: Lossless optimization Compress by 25% Compress by 50% Compress by 75% The percentage modes aim for a target size based on the source file. Video compression now estimates a bitrate from the source duration and size, while image compression searches for a suitable quality or palette level. What changed Added experimental Linux builds Added a platform-specific menu layer Added Nautilus support for GNOME Added Nemo support for Cinnamon Added Caja support for MATE Added Dolphin service menus for KDE Plasma Added lossless, 25%, 50%, and 75% compression options Expanded the README with Linux instructions Current state Windows is still the main and most tested version. It has the Inno Setup installer, automatic context-menu registration, and uninstall cleanup. Linux can now be built with PyInstaller and can generate integrations for Nautilus, Nemo, Caja, and Dolphin. The next step is testing it on Ubuntu, Linux Mint, Fedora, Arch-based systems such as CachyOS, and multiple desktop environments."}, {"post_id": 40751, "ts": "2026-08-04T14:13:14Z", "hours": 2.2033, "text": "Update 8 This update started because the right-click menu was getting crowded, and compression was one of the biggest missing features. While adding it, I ended up cleaning up a lot more than expected, reorganizing the menus, splitting parts of the converter into separate modules, and making the project easier to maintain. Something I did not mention earlier is that UwUConverter now has a full Windows installer built with Inno Setup. It installs the application into a permanent folder, registers the right-click menu, and includes proper uninstall support. Added four compression options: lossless, 25%, 50%, and 75% Reorganized the right-click menu into clearer conversion and compression categories Improved the README structure and readability Split more of the converter into separate modules Improved the installation and release process"}, {"post_id": 40507, "ts": "2026-08-04T02:50:33Z", "hours": 0.7094, "text": "Update 8 I am trying to get compressing files to work but atp I will have to spend an hour making an actual filetree instead of all in one python file"}, {"post_id": 40442, "ts": "2026-08-03T23:16:53Z", "hours": 0.5164, "text": "What is this project?"}, {"post_id": 40340, "ts": "2026-08-03T19:42:26Z", "hours": 3.7503, "text": "Update 7 Added support for a lot of types of data related to documents etc. .docx .txt .odt .pdf (for documents and sheets) .csv .ods .tsv .xls .xlsx"}, {"post_id": 39736, "ts": "2026-08-02T21:56:00Z", "hours": 0.9539, "text": "Update 6 First Pre-Release of UwUConverter Small summary I have wanted to learn how to do a proper github action automation and well, I’ve got it done! That means now I will periodically release versions of this app now:)"}, {"post_id": 39698, "ts": "2026-08-02T20:42:10Z", "hours": 2.4986, "text": "Update 5 To UwUConverter I added integration of a lot more file formats and conversions Added support for audio formats as .ogg .mp3 .wav .flac Allowed conversion from video to audio Added the ability to convert image formats as .png .jpg .jpeg .webp .ico Added the ability to convert from image to PDF"}, {"post_id": 39497, "ts": "2026-08-02T14:23:15Z", "hours": 0.3783, "text": "Update 4 UwU"}, {"post_id": 39482, "ts": "2026-08-02T13:38:10Z", "hours": 2.0897, "text": "Update 3 The new feature File converters have been added for: .mp4 .mov .kmv .webm .avi All work correctly now, and relatively fast except .webm, but let’s be real, who in their right mind uses .webm."}, {"post_id": 38974, "ts": "2026-08-01T16:24:13Z", "hours": 1.4639, "text": "Update 1 I’ve got some of my first file conversions working Completed my system for attaching path Started my ffmpeg (pyav to be specific) system"}, {"post_id": 38547, "ts": "2026-08-01T00:42:00Z", "hours": 1.0081, "text": "Update 0 Took me an hour to figure out 40 lines of code… I started on my system for creating regedit attachments so when I rclick my file proper conversions show up."}]...
|
Title: UwUConverter by @CherryMG | Stardance
Devl Title: UwUConverter by @CherryMG | Stardance
Devlogs:
Update 0 Took me an hour to figure out 40 lines of code… I started on my system for creating regedit attachments so when I rclick my file proper conversions show up.
Update 1 I’ve got some of my first file conversions working Completed my system for attaching path Started my ffmpeg (pyav to be specific) system
Update 3 The new feature File converters have been added for: .mp4 .mov .kmv .webm .avi All work correctly now, and relatively fast except .webm, but let’s be real, who in their right mind uses .webm.
Update 4 UwU
Update 5 To UwUConverter I added integration of a lot more file formats and conversions Added support for audio formats as .ogg .mp3 .wav .flac Allowed conversion from video to audio Added the ability to convert image formats as .png .jpg .jpeg .webp .ico Added the ability to convert from image to PDF
Update 6 First Pre-Release of UwUConverter Small summary I have wanted to learn how to do a proper github action automation and well, I’ve got it done! That means now I will periodically release versions of this app now:)
Update 7 Added support for a lot of types of data related to documents etc. .docx .txt .odt .pdf (for documents and sheets) .csv .ods .tsv .xls .xlsx
What is this project?
Update 8 I am trying to get compressing files to work but atp I will have to spend an hour making an actual filetree instead of all in one python file
Update 8 This update started because the right-click menu was getting crowded, and compression was one of the biggest missing features. While adding it, I ended up cleaning up a lot more than expected, reorganizing the menus, splitting parts of the converter into separate modules, and making the project easier to maintain. Something I did not mention earlier is that UwUConverter now has a full Windows installer built with Inno Setup. It installs the application into a permanent folder, registers the right-click menu, and includes proper uninstall support. Added four compression options: lossless, 25%, 50%, and 75% Reorganized the right-click menu into clearer conversion and compression categories Improved the README structure and readability Split more of the converter into separate modules Improved the installation and release process
Update 9 Linux Was Not Just Another Build After getting the Windows version into a much better state, I started working on Linux support. I originally thought this would mostly mean running PyInstaller on Linux and uploading another executable. The actual problem was the right-click menu. On Windows, UwUConverter uses Registry entries to add actions to File Explorer. Linux does not have one equivalent system. The desktop matters, but the file manager matters even more, and different file managers expect completely different integrations. Nautilus, Nemo, and Caja can use executable scripts placed in their own script folders. Dolphin uses KDE service-menu .desktop files instead. Because of that, I could not simply replace winreg and call Linux support finished. The first job was stopping Linux from importing the Windows-only Registry code. I added a platform layer that selects make_key.py on Windows and linux_menu.py on Linux. The next thign was recreating the existing menu structure without maintaining a completely separate Linux conversion list. The Linux integration now reads the same file_types.py definitions and generates the correct scripts or Dolphin service menus from them. Nautilus, Nemo, and Caja were relatively straightforward once the script generator worked. Dolphin needed separate MIME-type mappings, executable .desktop files, KDE-specific submenu fields, and its own installation folder. Compression also caused more trouble than expected. My first presets used fixed quality values, so different options sometimes produced almost identical files. Some videos even became larger after compression because the original was already more efficiently encoded. I changed the system to offer: Lossless optimization Compress by 25% Compress by 50% Compress by 75% The percentage modes aim for a target size based on the source file. Video compression now estimates a bitrate from the source duration and size, while image compression searches for a suitable quality or palette level. What changed Added experimental Linux builds Added a platform-specific menu layer Added Nautilus support for GNOME Added Nemo support for Cinnamon Added Caja support for MATE Added Dolphin service menus for KDE Plasma Added lossless, 25%, 50%, and 75% compression options Expanded the README with Linux instructions Current state Windows is still the main and most tested version. It has the Inno Setup installer, automatic context-menu registration, and uninstall cleanup. Linux can now be built with PyInstaller and can generate integrations for Nautilus, Nemo, Caja, and Dolphin. The next step is testing it on Ubuntu, Linux Mint, Fedora, Arch-based systems such as CachyOS, and multiple desktop environments.
Update 10 After a lot of struggle, I managed to make batch converting file folders possible. It is not yet multithreaded, however it will be in the future. Since batch conversion might require more arguments, pressing the Convert with UwUConverter button in the rclick menu opens a small UI that gives you a list of possible options. Furthermore, I plan to implement compressing to zips, decompressing etc. soon. Either way, what changed is: Added batch file conversion with custom settings including: File Format, if you are to Replace/Place new files beside/create a new folder, and Which category you convert from (also if you want logs) Fixed Linux issues, rclick menu was not resetting after updates. Created a UI for Batch Conversion.
Update 11 As some people requested, I added .tif and .tiff file formats, it was very simple, just a small pillow library connection.
Update 12 I am preparing to expand this project massively so I have created a cli version workin both on windows and linux which aims to: Give more freedom with conversion Allow the app to be used in professional workflows Simplify batch image processing And allow for more configuration Potentially implement this as an API
Update 13 Added early 3D model conversion support for OBJ, STL, PLY, and GLB, including CLI and batch conversion. One issue I ran into was that 3D formats don’t all represent the same information. Converting something like a GLB scene to STL can’t preserve materials, textures, object hierarchy, animations, etc. STL is basically just mesh geometry. For now, UwUConverter merges multi-object scenes when exporting to simpler single-mesh formats like STL/PLY and accepts that some scene data will be lost. I am also in the process of expanding the cli system for 7-zip integration with the goal of replacing winrar:)
Update 14 I have added 7-zip support for the cli version of the tool, it comes bundled in with the project in their lightweight cli free to use for commercial use version. What is funny, I will not be able to support compressing into rar because: “the actual RAR compression/creation algorithm is controlled by RARLAB. Their license explicitly says the RAR compression algorithm is proprietary and may not be recreated from the UnRAR/WinRAR code without permission” It is such bullshit but okay ig, if that’s needed lol Luckily, I have never ran into someone willingly using .rar. Create + extract/list/test now supports: 7z zip tar gzip / gz bzip2 / bz2 xz wim Extraction/list/test additionally supports: rar cab iso arj lzh lzma rpm dmg xar
Update 15 Added full support for extraction of compressed archives in rclick menu.
Update 16 I was about to yell and scream and say fuck this project however I finally got an autoupdater working along with support for right click decompression on linux. Added archive decompression to linux Added archive decompression to windows Added cli archive management including compression Added an autoupdater, and manual updates with cli Fixed multiple minor issues related to document conversion Fixed minor issue relating to cli archive management Fixed ssl errors Fixed install errors with certain network types New release avalaible on github in a few minutes Enjoy the product of my suffering:))
Update 17 I added batch conversion without requiring to use the entire folder. It took surprisingly a long time to get working with filtering “accidental misselections” like having images and videos together for conversion.
Update 18 I’m mostly writing this update so soon due to devlog limits. I am currently working on implementing browser integration via a browser extension that connects to the application via native messaging allowing you to download files directly in the format you want instead of that pescy .webp or .ico. The reason why I am doing this not “just as an extension” is the fact that this way you can already utilize the tool that you likely already have downloaded (UwUConverter) and support filetypes that are not natively supported by the browser view as that would be a limitation if I had done it without native messaging. I hope to push this soon!
Update 19 Now, I can finally place my hand on your shoulder, and say I managed to “sort of” get the new feature working! The feature being, browser integration. Now, you may ask yourself, Cherry, what the fuck do you mean browser integration, what are you doing in my house? And to these I say, hear me out, and don’t worry about it. This has been suggested to me and long story short it is a feature that will detect the web browsers that are on your device and allow you to install a connection between them and the app via native messaging so as to be able to for example, right click any image in google images, whether a png, ico or webp, select “UwUConverter Download” and then select from the dropdown of fileformats to download as. This is to furthermore decrease the hassle in daily life file downloads. I plan to also just add a “quick download button” which will download the image as a png no matter what, and an option to set a filename before downloading.
Why does this cost money, let me publish my god damn extension
Update 20 You know how Windows 11 has this new modern context menu? Yeah! I forgot about that because like any normal person I use the extended one as default:) I now found out that the tool in fact does not show up on the modern context menu, and that is because windows decided to make that a fancy shmancy system which I will let google overview explain: The modern context menu uses a different mechanism: an IExplorerCommand COM shell extension registered through package identity, usually via an MSIX/sparse package. So after reading through all the blabber and a lot of forum posts, I realize! I am fucked! I need to learn how to wrap up some small .dll that will do all the exposing of things to the modern menu. Please, can you all quit windows and go to linux instead so I don’t have to fuck with this?
Update 21 I am about to finish the release as I realized the issue with windows comes with the weird way of creating app certificates and “trusting” them.
Update 22 Modern Context Menu works now! I am going to work on making a better installer and more functionality related to archives
Ships:
How UwUConverter meets the criteria Clear quality-of-life improvement UwUConverter makes file conversion much faster by adding conversion options directly to the Windows right-click menu. Instead of opening a website or separate program, users can right-click a file and choose an output format. Working and usable project The project is already functional and packaged with a Windows installer and uninstaller. It supports video, audio, images, RAW files, documents, and spreadsheets. Effort and thoughtful execution I built the conversion system, format-specific context menus, Windows Registry integration, icon installation, packaged executable, installer, uninstall cleanup, README, license, and automated GitHub builds. Clear problem being solved Most file converters require extra software, uploads, ads, or several manual steps. UwUConverter keeps the process local, private, and available directly in File Explorer. Minimum 3 hours spent The project took well over three hours as you may see due to testing formats, codecs, document libraries, packaging, Registry commands, installer behavior, and release automation. Three out of many major QoL improvements Right-click conversion Convert files without opening another program. Many formats in one tool Supports common media, image, document, and spreadsheet formats. Local and private Files stay on the user’s computer instead of being uploaded. Current release UwUConverter supports formats including MP4, MKV, WebM, MP3, WAV, FLAC, OPUS, PNG, JPG, PDF, DOCX, ODT, TXT, XLSX, XLS, ODS, CSV, and TSV. It also includes a Windows installer, uninstaller, automatic context-menu setup, command-line support, and GitHub release builds. This is only the first ship This is only the first ship. I will add: A GUI More extensions Settings and presets Compression options Video, audio, and image quality controls Batch conversion Better progress information Safer output naming Better format compatibility detection Improved document and spreadsheet support Linux support...
|
1792878778.9386644
|
1793742778.9386644
|
|
42553
|
My Portfolio! (echo Portfolio) by @echoHelloWorld My Portfolio! (echo Portfolio) by @echoHelloWorld | Stardance...
|
echoHelloWorld
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-14T09:03:13Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hello! I’m echoHelloWorld, and this is my first ever website, which is my portfolio! It’s a simple website I made using basic html and CSS, showcasing a description of who I am and what projects I’ve made. Despite the basic look and quality of the website, I’ve learn alot from this project, and I’m hoping to make more prettier, functional websites in the future. To me, the most difficult challenge I had to overcome was to align the content centered and neat in an orderly manner. I should note that I have used AI to help learn CSS and html, and some debugging too, meaning that this project was mostly made by me, with the assisance of AI. I hope you enjoy my website and get to know me abit more with this portfolio!", "repo": "https://github.com/Hypersonicyunus/echo-MyPortfolio", "demo": "https://hypersonicyunus.github.io/echo-MyPortfolio/"}]...
|
[{"post_id": 67955, "ts": "202 [{"post_id": 67955, "ts": "2026-09-14T08:47:14Z", "hours": 5.2628, "text": "I managed to add a section that showcases my projects with a short description of what it is and the link to my github repository, pretty happy about it :D (though i dont know why the title background looks like that, lets just ignore it shhh )"}, {"post_id": 40683, "ts": "2026-08-04T11:32:23Z", "hours": 0.7331, "text": "I’m genuinley about to lose my sanity, I’ve been commiting and pushing so much to fix some visual issue with the font weights. Like, explain to me why in the vscode integrated browser, changing the font weight of the doesn’t do anything??? But in firefox it does change.. also, at the image carousel, i have this text that reads “cool photos I took”. In firefox, that text looks like it has a higher weight value than in brave, yet it still has the same actual value, I serriously dont understand whats happening.. I tried changing the way the font gets added, that didnt solve this issue, I made sure the browsers didn’t have the zoom level altered, and it wasn’t, so what the hell is happening?! I’m seriously confused, and I’d greatly appreciate it if anybody could help theorize on some reasons as to why this even happens at all, thanks! (firefox has the thicker, heavier text, brave has the ideal weight of the text)"}, {"post_id": 40334, "ts": "2026-08-03T19:33:44Z", "hours": 0.4139, "text": "bro my friend ✌️😂"}, {"post_id": 40309, "ts": "2026-08-03T18:58:01Z", "hours": 2.0736, "text": "Currently working on this animated strip of images that carousels and shows different images I’ve taken. I seriously hate myself for needing to use ai to help, but here I am… other than that, I’ve made some changes, notably making the heading really large to make it stand out. I honestly think it looks nice tho! Anyways, I’m going to continue working on the website. I’ve realised that I’ve been using ai alot less than when i first started programming, so I’m quite happy with that, but I sometimes still need help with certain things, so yeah.. alr enough rambling now, see you later!"}, {"post_id": 39679, "ts": "2026-08-02T20:17:12Z", "hours": 1.7956, "text": "And so it begins! Hi, this is my personal site I’m making, which I will be using for a portfolio. I originally was planning to have a classy, elegant design, but I decided that this monochrome, “Nothing” aesthetic would fit well with this project, and would relate well with my personality. I’m going to vastly improve on this later, and I plan to learn how to make hyperlinks that scroll to different parts of my website. Thanks alot for checking out my project! This is my first ever website that I’m making, so do expect some issues and rookie mistakes XD"}]...
|
Title: My Portfolio! (echo Portfolio) by @echoHell Title: My Portfolio! (echo Portfolio) by @echoHelloWorld | Stardance
Devlogs:
And so it begins! Hi, this is my personal site I’m making, which I will be using for a portfolio. I originally was planning to have a classy, elegant design, but I decided that this monochrome, “Nothing” aesthetic would fit well with this project, and would relate well with my personality. I’m going to vastly improve on this later, and I plan to learn how to make hyperlinks that scroll to different parts of my website. Thanks alot for checking out my project! This is my first ever website that I’m making, so do expect some issues and rookie mistakes XD
Currently working on this animated strip of images that carousels and shows different images I’ve taken. I seriously hate myself for needing to use ai to help, but here I am… other than that, I’ve made some changes, notably making the heading really large to make it stand out. I honestly think it looks nice tho! Anyways, I’m going to continue working on the website. I’ve realised that I’ve been using ai alot less than when i first started programming, so I’m quite happy with that, but I sometimes still need help with certain things, so yeah.. alr enough rambling now, see you later!
bro my friend ✌️😂
I’m genuinley about to lose my sanity, I’ve been commiting and pushing so much to fix some visual issue with the font weights. Like, explain to me why in the vscode integrated browser, changing the font weight of the doesn’t do anything??? But in firefox it does change.. also, at the image carousel, i have this text that reads “cool photos I took”. In firefox, that text looks like it has a higher weight value than in brave, yet it still has the same actual value, I serriously dont understand whats happening.. I tried changing the way the font gets added, that didnt solve this issue, I made sure the browsers didn’t have the zoom level altered, and it wasn’t, so what the hell is happening?! I’m seriously confused, and I’d greatly appreciate it if anybody could help theorize on some reasons as to why this even happens at all, thanks! (firefox has the thicker, heavier text, brave has the ideal weight of the text)
I managed to add a section that showcases my projects with a short description of what it is and the link to my github repository, pretty happy about it :D (though i dont know why the title background looks like that, lets just ignore it shhh )
Ships:
Hello! I’m echoHelloWorld, and this is my first ever website, which is my portfolio! It’s a simple website I made using basic html and CSS, showcasing a description of who I am and what projects I’ve made. Despite the basic look and quality of the website, I’ve learn alot from this project, and I’m hoping to make more prettier, functional websites in the future. To me, the most difficult challenge I had to overcome was to align the content centered and neat in an orderly manner. I should note that I have used AI to help learn CSS and html, and some debugging too, meaning that this project was mostly made by me, with the assisance of AI. I hope you enjoy my website and get to know me abit more with this portfolio!...
|
1793577227.1580343
|
1793663627.1580343
|
|
42559
|
My own site! by @jermybiju | Stardance
|
jermybiju
|
1
|
7.39
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-21T11:01:30Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I used HTML, CSS, and JavaScript to create my own portfolio website from the ground up. It displays my accomplishments, credentials, abilities, and Stardance adventure. Getting the Light Mode to function correctly without disrupting the dark theme was the most difficult aspect, particularly with regard to the skill tags and certificate cards. Additionally, it took some time to get the certificate zoom modal right. I’m pleased with its sleek, contemporary appearance and complete responsiveness (it functions on both desktop and mobile devices). The certificate lightbox function and the dark/light theme toggle worked quite well. It was also a wonderful sensation to finally see it live on GitHub Pages! Simply click the live URL to finish! To view all the areas (Projects, Skills, Stardance Journey, etc.), test the dark/light theme toggle (top right), click on any certificate to zoom in, then scroll down. You can also try it on a mobile device because it is responsive.", "repo": "https://github.com/jermybiju/Personal-site", "demo": "https://jermybiju.github.io/Personal-site/"}]...
|
[{"post_id": 51751, "ts": "202 [{"post_id": 51751, "ts": "2026-08-21T16:03:53Z", "hours": 0.3922, "text": "#Devlog 5 alright, final devlog for this project. if you saw my earlier devlogs, you might notice the site looks completely different now. yeah, i basically rewrote everything from scratch. stardance reviewer pointed out that the earlier version looked too generic / ai-generated, so i took that feedback seriously. i scrapped all the boxes, gradients, and dark-mode stuff. replaced it with a clean, flat design — no boxes, no shadows, just text, borders, and a simple layout. also added some custom js features like a random quote generator and a click counter. this is the version that got approved by the reviewer (they called it “awesome project” ). so if you’re checking out the live site, this is what you’ll see now. thanks to whoever rates this. feedback is always welcome. 🙌"}, {"post_id": 51529, "ts": "2026-08-21T09:12:17Z", "hours": 1.4939, "text": "Devlog #4 I eventually made time to address the minor issues that were bothering me. spent some time adjusting the light mode; I had to go through CSS to update the skill tags that were previously practically invisible in light mode. Furthermore, it included a floating back-to-top button that only appears when you scroll down a little (far more helpful than I anticipated, lol). Now that the certificate zoom feature is operational, clicking on any certificate causes it to appear large on the screen. Moreover, it made the entire thing responsive so that it no longer appears strange on phones. I’m generally pleased with the outcome. feels much more refined than it did before. I’ll deploy it somewhere and ship it shortly. ✌️"}, {"post_id": 51270, "ts": "2026-08-20T20:07:06Z", "hours": 2.98, "text": "Devlog 3—finally some progress lol. * * So today I kind of wrapped up the portfolio thing. Added my certificates finally—got 4 of them up (WHO long covid, UNICEF AI & Chat, and another one on digital health). It took me a while to get the screenshots cropped properly, but they’re there now. also added a zoom thingy for the certs—click on any certificate and it pops up big on the screen. Honestly, I spent way too much time trying to get the lightbox modal working, but it’s fine now, I guess. Light mode was giving me a headache, though. Everything looked great in dark mode, but the moment I switched to light mode The certificate texts just vanished into thin air lmao. had to mess around with CSS for a bit but finally fixed it. Anyways, I pushed everything to GitHub. Tomorrow I’ll probably deploy it somewhere and ship it on Stardance."}, {"post_id": 50810, "ts": "2026-08-20T07:07:34Z", "hours": 1.3725, "text": "Day 2: Personal Site – Interactive Modal & Bug Fixes Today was a productive day! I completed the core functionality of my personal site and made it more interactive. What I Accomplished Fixed CSS Animation Bug: Corrected the fade-in effect for the cards. Now the page loads smoothly with a nice fadeIn animation. Custom Modal Box (No Browser Alert!): Built a beautiful dark-themed modal pop-up using HTML, CSS, and JavaScript. Now when you click on About , Projects , or Contact , a stylish box opens with detailed information instead of a boring alert. Clickable Contact Links: Added live links to my GitHub and Email directly on the Contact card. GitHub: @jermybiju Email: [email protected] Dynamic Year in Footer: Used JavaScript to automatically update the copyright year. No more manual updates! Example: © 2026 → changes automatically."}, {"post_id": 50551, "ts": "2026-08-19T19:12:08Z", "hours": 0.9411, "text": "Day 1 - Personal Site Progress 🚀 What I did today:Set up VS Code, Git, and Hackatime for time tracking.Created the full HTML structure with 3 main sections: About Me, My Projects, and Contact.Styled the site with a dark theme, custom gradient colors, and smooth hover effects on the cards.Added a fade-in animation so the cards appear smoothly when the page loads.Added a new “My Interests” section (Space, Robotics, Web Dev, Gaming) to make it more personal.Fixed a CSS warning (background-clip) to keep the code clean.Pushed all the code to GitHub (Public repository). What I will do tomorrow (Next Steps): Deploy the website to Vercel to make it live on the internet.Add a live digital clock using JavaScript.Submit (Ship) the project on Stardance after deployment!Screenshot attached: My personal site homepage with all sections visible."}]...
|
Title: My own site! by @jermybiju | Stardance
Dev Title: My own site! by @jermybiju | Stardance
Devlogs:
Day 1 - Personal Site Progress 🚀 What I did today:Set up VS Code, Git, and Hackatime for time tracking.Created the full HTML structure with 3 main sections: About Me, My Projects, and Contact.Styled the site with a dark theme, custom gradient colors, and smooth hover effects on the cards.Added a fade-in animation so the cards appear smoothly when the page loads.Added a new “My Interests” section (Space, Robotics, Web Dev, Gaming) to make it more personal.Fixed a CSS warning (background-clip) to keep the code clean.Pushed all the code to GitHub (Public repository). What I will do tomorrow (Next Steps): Deploy the website to Vercel to make it live on the internet.Add a live digital clock using JavaScript.Submit (Ship) the project on Stardance after deployment!Screenshot attached: My personal site homepage with all sections visible.
Day 2: Personal Site – Interactive Modal & Bug Fixes Today was a productive day! I completed the core functionality of my personal site and made it more interactive. What I Accomplished Fixed CSS Animation Bug: Corrected the fade-in effect for the cards. Now the page loads smoothly with a nice fadeIn animation. Custom Modal Box (No Browser Alert!): Built a beautiful dark-themed modal pop-up using HTML, CSS, and JavaScript. Now when you click on About , Projects , or Contact , a stylish box opens with detailed information instead of a boring alert. Clickable Contact Links: Added live links to my GitHub and Email directly on the Contact card. GitHub: @jermybiju Email: [email protected] Dynamic Year in Footer: Used JavaScript to automatically update the copyright year. No more manual updates! Example: © 2026 → changes automatically.
Devlog 3—finally some progress lol. * * So today I kind of wrapped up the portfolio thing. Added my certificates finally—got 4 of them up (WHO long covid, UNICEF AI & Chat, and another one on digital health). It took me a while to get the screenshots cropped properly, but they’re there now. also added a zoom thingy for the certs—click on any certificate and it pops up big on the screen. Honestly, I spent way too much time trying to get the lightbox modal working, but it’s fine now, I guess. Light mode was giving me a headache, though. Everything looked great in dark mode, but the moment I switched to light mode The certificate texts just vanished into thin air lmao. had to mess around with CSS for a bit but finally fixed it. Anyways, I pushed everything to GitHub. Tomorrow I’ll probably deploy it somewhere and ship it on Stardance.
Devlog #4 I eventually made time to address the minor issues that were bothering me. spent some time adjusting the light mode; I had to go through CSS to update the skill tags that were previously practically invisible in light mode. Furthermore, it included a floating back-to-top button that only appears when you scroll down a little (far more helpful than I anticipated, lol). Now that the certificate zoom feature is operational, clicking on any certificate causes it to appear large on the screen. Moreover, it made the entire thing responsive so that it no longer appears strange on phones. I’m generally pleased with the outcome. feels much more refined than it did before. I’ll deploy it somewhere and ship it shortly. ✌️
#Devlog 5 alright, final devlog for this project. if you saw my earlier devlogs, you might notice the site looks completely different now. yeah, i basically rewrote everything from scratch. stardance reviewer pointed out that the earlier version looked too generic / ai-generated, so i took that feedback seriously. i scrapped all the boxes, gradients, and dark-mode stuff. replaced it with a clean, flat design — no boxes, no shadows, just text, borders, and a simple layout. also added some custom js features like a random quote generator and a click counter. this is the version that got approved by the reviewer (they called it “awesome project” ). so if you’re checking out the live site, this is what you’ll see now. thanks to whoever rates this. feedback is always welcome. 🙌
Ships:
I used HTML, CSS, and JavaScript to create my own portfolio website from the ground up. It displays my accomplishments, credentials, abilities, and Stardance adventure. Getting the Light Mode to function correctly without disrupting the dark theme was the most difficult aspect, particularly with regard to the skill tags and certificate cards. Additionally, it took some time to get the certificate zoom modal right. I’m pleased with its sleek, contemporary appearance and complete responsiveness (it functions on both desktop and mobile devices). The certificate lightbox function and the dark/light theme toggle worked quite well. It was also a wonderful sensation to finally see it live on GitHub Pages! Simply click the live URL to finish! To view all the areas (Projects, Skills, Stardance Journey, etc.), test the dark/light theme toggle (top right), click on any certificate to zoom in, then scroll down. You can also try it on a mobile device because it is responsive....
|
1793483241.9432178
|
1793569641.9432178
|
|
42564
|
Pomodoro timer by @estella | Stardance
|
estella
|
1
|
11.0
|
80
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T15:53:27Z", "hours": 11.0, "multiplier": 7.22, "payout": 80, "blessing": "neutral", "text": "My first application and Python project. This definitely took wayyyy longer than I anticipated. I hit some roadblocks due to my code being so unorganized; I probably learned the importance of planning out your program before you write it after this. However, I’m pretty proud I was able to see it through to the end (: and I actually like how it looks, which is a surprise to me. Download the exe from the dist to try it. (I hope it works from that, I have no other device to test it on!!!)", "repo": "https://github.com/Estella44/evil-pomodoro-timer", "demo": "https://github.com/Estella44/evil-pomodoro-timer/releases/download/v.1.0.2/timer.exe"}]...
|
[{"post_id": 39834, "ts": "202 [{"post_id": 39834, "ts": "2026-08-03T02:48:36Z", "hours": 1.06, "text": "Dev log number 2!!!! After adding the sun, I decided, why not make a day-night cycle for each pomodoro session? This proved harder than I thought, yet again. Originally, I was going to make the sun set and the moon rise from the bottom of the screen; however, the canvas would cover the entire screen, and you wouldn’t be able to see anything. I figured out how to arrange the widgets in layers, but to my dismay, the boxes underneath the widgets would cover the sun/moon. According to Google, I can’t make widgets transparent, so I opted to make the sun and moon switch places horizontally across the screen. After successfully setting up this system, I took on the challenge of changing the color of the background; however, that meant I would also need to change the background color of all the widgets and buttons too. I ended up going back and putting the hex color I used into a variable and creating another variable for the night color, then it was just a matter of switching whether the day/night color would be assigned to the skycolor variable."}, {"post_id": 39288, "ts": "2026-08-02T05:01:20Z", "hours": 10.0581, "text": "wow I’m really bad at coding! Ok so we are working on a fun pomodoro timer because all the ones I’ve seen are ugly, and unfortunately this one isn’t an exception, but its my baby so we love it anyway. Currently the freaking sun is in half, and we have about 60 if elif statments because I’m literally yan dev reincarnated (no im not that was a bad joke sorry) Anyway, my takeaway is plan first, then write your code, not the other way around!!!!!! Also— dont name important variables “meow” thinking you’ll remember what they mean, spoiler: you won’t. The most difficult part of this project so far has been, unironically, not the timer logic; rather, it was the graphics. And I thought that would be my strong suit… sigh…To be more specific I could not for the life of me figure out how to position labels and containers where I wanted. My next step is to figure out how to allow the user to change break times in the app, not just the work timer."}]...
|
Title: Pomodoro timer by @estella | Stardance
Dev Title: Pomodoro timer by @estella | Stardance
Devlogs:
wow I’m really bad at coding! Ok so we are working on a fun pomodoro timer because all the ones I’ve seen are ugly, and unfortunately this one isn’t an exception, but its my baby so we love it anyway. Currently the freaking sun is in half, and we have about 60 if elif statments because I’m literally yan dev reincarnated (no im not that was a bad joke sorry) Anyway, my takeaway is plan first, then write your code, not the other way around!!!!!! Also— dont name important variables “meow” thinking you’ll remember what they mean, spoiler: you won’t. The most difficult part of this project so far has been, unironically, not the timer logic; rather, it was the graphics. And I thought that would be my strong suit… sigh…To be more specific I could not for the life of me figure out how to position labels and containers where I wanted. My next step is to figure out how to allow the user to change break times in the app, not just the work timer.
Dev log number 2!!!! After adding the sun, I decided, why not make a day-night cycle for each pomodoro session? This proved harder than I thought, yet again. Originally, I was going to make the sun set and the moon rise from the bottom of the screen; however, the canvas would cover the entire screen, and you wouldn’t be able to see anything. I figured out how to arrange the widgets in layers, but to my dismay, the boxes underneath the widgets would cover the sun/moon. According to Google, I can’t make widgets transparent, so I opted to make the sun and moon switch places horizontally across the screen. After successfully setting up this system, I took on the challenge of changing the color of the background; however, that meant I would also need to change the background color of all the widgets and buttons too. I ended up going back and putting the hex color I used into a variable and creating another variable for the night color, then it was just a matter of switching whether the day/night color would be assigned to the skycolor variable.
Ships:
My first application and Python project. This definitely took wayyyy longer than I anticipated. I hit some roadblocks due to my code being so unorganized; I probably learned the importance of planning out your program before you write it after this. However, I’m pretty proud I was able to see it through to the end (: and I actually like how it looks, which is a surprise to me. Download the exe from the dist to try it. (I hope it works from that, I have no other device to test it on!!!)...
|
1793541153.916324
|
1793627553.916324
|
|
42565
|
Python webcam Motion tracker window switcher by @G Python webcam Motion tracker window switcher by @GTXPOFFIC | Stardance...
|
GTXPOFFIC
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T02:45:01Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Yooo! Devs, I made a Python Motion Sensor Camera Switcher that uses your webcam to detect motion and instantly switches tabs. It’s designed specifically for webcams, so detection is fast and responsive. Have fun with gamine :>", "repo": "https://github.com/GTXPOFFIC-developer/Python-Camera-tracker-and-Tab-switcher", "demo": "https://community.odsind.com"}]...
|
[{"post_id": 38603, "ts": "202 [{"post_id": 38603, "ts": "2026-08-01T02:39:43Z", "hours": 1.3517, "text": "Its DONE!! Devlog 1"}]...
|
Title: Python webcam Motion tracker window switche Title: Python webcam Motion tracker window switcher by @GTXPOFFIC | Stardance
Devlogs:
Its DONE!! Devlog 1
Ships:
Yooo! Devs, I made a Python Motion Sensor Camera Switcher that uses your webcam to detect motion and instantly switches tabs. It’s designed specifically for webcams, so detection is fast and responsive. Have fun with gamine :>...
|
1793541155.0730052
|
1793627555.0730052
|
|
42571
|
Space Exploration Program by @Ignacio | Stardance
|
Ignacio
|
1
|
22.34
|
87
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T04:04:38Z", "hours": 11.0, "multiplier": 8.02, "payout": 87, "blessing": "neutral", "text": "Hice SPEP, un simulador de exploración espacial en 3D estilo Kerbal Space Program, en Godot con C#. Se arma el cohete por piezas (cabina, tanque, motor) en un taller de ensamblado donde las arrastrás con el mouse y se pegan solas a los puntos de unión correctos. Después lo lanzás a un planeta con física real: gravedad, atmósfera con densidad variable según la altitud, y un mapa orbital que predice la trayectoria. Lo más difícil fue hacer que la física fuera consistente: que el empuje del motor siguiera la orientación real de la nave en vez de siempre “para arriba”, que la colisión de las piezas funcionara bien en un cuerpo armado dinámicamente, y un bug de temblor que apareció al usar un planeta a escala real (tuve que armar un sistema de “origen flotante” para mantener la precisión). Estoy orgulloso de que el VAB funcione con arrastre real (no botones fijos) y que toda la física esté simulada de verdad, no aproximada. Para probarlo: armá la nave en orden Cabina → Tanque → Motor, y en vuelo usá Espacio para el motor, Shift/Ctrl para el throttle, WASDQE para orientar la nave, y T para el SAS.", "repo": "https://github.com/Ignacio-KSp/SPEP", "demo": "https://github.com/Ignacio-KSp/SPEP/releases/tag/v0.2-demo"}]...
|
[{"post_id": 58658, "ts": "202 [{"post_id": 58658, "ts": "2026-08-31T04:40:46Z", "hours": 2.735, "text": "Update 7 Fixed a bug that caused debris to fall into the void; debris now correctly obeys the planet’s gravity, and related bugs have also been fixed. The MK1 module now functions as a cockpit. Improved the scaling system for new parts."}, {"post_id": 57003, "ts": "2026-08-29T02:19:42Z", "hours": 7.1683, "text": "7.- Update: New “Decoupler” part that separates stages Added a per-part selectable staging system Slightly improved the warp system by fixing some bugs Created the initial design for an “MK1 Module” capsule in Blender and integrated it into Godot. (An English language pack will be added)"}, {"post_id": 51307, "ts": "2026-08-20T21:40:48Z", "hours": 1.44, "text": "Update 5 - v0.2 Updated the README.md file (more specific and detailed) Bug fixes Implementation of markers indicating: . Periapsis (blue dot) . Apoapsis (yellow dot) . Spacecraft (orange dot) Implementation of a pause menu"}, {"post_id": 47390, "ts": "2026-08-15T09:36:48Z", "hours": 1.8494, "text": "5.- Actualizaciones: -Hice el rescaladodel planeta con su admosfera -Mejora del ensamble en el VAB -Corrección de errores (SAS, Fisicas, Bugs, y rescalado) -Implementacion de un mapa orbital que muestra la trayectoria en verde"}, {"post_id": 46705, "ts": "2026-08-14T04:38:03Z", "hours": 1.9508, "text": "4.-Lo que implemente al proyecto fue una especie de zona (VAB) en la cual podemos ensamblar cohetes y despues lanzarlos a el escenario principal en el cual podra despegar, por el momento es como un prototipo en el cual se agregaran mas piezas y funciones."}, {"post_id": 43685, "ts": "2026-08-09T02:48:42Z", "hours": 3.2397, "text": "3.-Hice la reescala de el planeta asi como mejorar las matematicas en el codigo para dejarlo listo para las texturas y despúes empezar con el diseño d las partes de cohetes."}, {"post_id": 39942, "ts": "2026-08-03T08:33:32Z", "hours": 2.4458, "text": "Se agrego una admosfera rudimentaria asi como la implemetacion de mejores controles de inclinacion y el SAS, asi como definir mas el cohete prototipo"}, {"post_id": 39315, "ts": "2026-08-02T06:46:37Z", "hours": 1.2997, "text": "Es la base basica de un sistema de lanzamiento de cohetes y exploracion espacial, por el momento es lo que voy"}]...
|
Title: Space Exploration Program by @Ignacio | Sta Title: Space Exploration Program by @Ignacio | Stardance
Devlogs:
Es la base basica de un sistema de lanzamiento de cohetes y exploracion espacial, por el momento es lo que voy
Se agrego una admosfera rudimentaria asi como la implemetacion de mejores controles de inclinacion y el SAS, asi como definir mas el cohete prototipo
3.-Hice la reescala de el planeta asi como mejorar las matematicas en el codigo para dejarlo listo para las texturas y despúes empezar con el diseño d las partes de cohetes.
4.-Lo que implemente al proyecto fue una especie de zona (VAB) en la cual podemos ensamblar cohetes y despues lanzarlos a el escenario principal en el cual podra despegar, por el momento es como un prototipo en el cual se agregaran mas piezas y funciones.
5.- Actualizaciones: -Hice el rescaladodel planeta con su admosfera -Mejora del ensamble en el VAB -Corrección de errores (SAS, Fisicas, Bugs, y rescalado) -Implementacion de un mapa orbital que muestra la trayectoria en verde
Update 5 - v0.2 Updated the README.md file (more specific and detailed) Bug fixes Implementation of markers indicating: . Periapsis (blue dot) . Apoapsis (yellow dot) . Spacecraft (orange dot) Implementation of a pause menu
7.- Update: New “Decoupler” part that separates stages Added a per-part selectable staging system Slightly improved the warp system by fixing some bugs Created the initial design for an “MK1 Module” capsule in Blender and integrated it into Godot. (An English language pack will be added)
Update 7 Fixed a bug that caused debris to fall into the void; debris now correctly obeys the planet’s gravity, and related bugs have also been fixed. The MK1 module now functions as a cockpit. Improved the scaling system for new parts.
Ships:
Hice SPEP, un simulador de exploración espacial en 3D estilo Kerbal Space Program, en Godot con C#. Se arma el cohete por piezas (cabina, tanque, motor) en un taller de ensamblado donde las arrastrás con el mouse y se pegan solas a los puntos de unión correctos. Después lo lanzás a un planeta con física real: gravedad, atmósfera con densidad variable según la altitud, y un mapa orbital que predice la trayectoria. Lo más difícil fue hacer que la física fuera consistente: que el empuje del motor siguiera la orientación real de la nave en vez de siempre “para arriba”, que la colisión de las piezas funcionara bien en un cuerpo armado dinámicamente, y un bug de temblor que apareció al usar un planeta a escala real (tuve que armar un sistema de “origen flotante” para mantener la precisión). Estoy orgulloso de que el VAB funcione con arrastre real (no botones fijos) y que toda la física esté simulada de verdad, no aproximada. Para probarlo: armá la nave en orden Cabina → Tanque → Motor, y en vuelo usá Espacio para el motor, Shift/Ctrl para el throttle, WASDQE para orientar la nave, y T para el SAS....
|
1793483294.069595
|
1793569694.069595
|
|
42581
|
A simple html song website by @Dxed21234 | Stardan A simple html song website by @Dxed21234 | Stardance...
|
Dxed21234
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-14T01:16:35Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I worked pretty hard on this it was my website that I decided to make when I first heard about star dance. And it’s called dxed2016 or my personal website… And what was challenging was figuring out a new language as a beginner and as well as not having a lot of knowledge on CSS and JS But I didn’t use JS since I’m not really a computer nerd and don’t really understand it… But I did use Bulma CSS which helped me along the way a lot and the slack community helped me a lot as well…….. This is the link to my website https://dxed2016.hackclub.app/index.html I have a Song Lyrics Page and a photography page as well as a songs page that has songs that I like… And this is my GitHub to it https://github.com/Dexter5000000/My-own-personal-website", "repo": "https://github.com/Dexter5000000/My-own-personal-website", "demo": "https://dxed2016.hackclub.app/index.html"}]...
|
[{"post_id": 53387, "ts": "202 [{"post_id": 53387, "ts": "2026-08-23T22:20:17Z", "hours": 0.4842, "text": "I just updated my Github Website…"}, {"post_id": 50698, "ts": "2026-08-20T00:53:26Z", "hours": 0.7411, "text": "This is a different type of video that I’m doing right now but I’m showing how I nested my HTML and made my code more readable… And next time I will try to make my titles have certain buttons or my buttons radius much better in the future but this what I did today…"}, {"post_id": 49820, "ts": "2026-08-18T19:23:51Z", "hours": 0.9653, "text": "Sorry I’m not feeling good today… But I tried to get a local timezone thing on my website… But it’s so hard to do so, And I can’t figure out how to do it but I will soon."}, {"post_id": 46692, "ts": "2026-08-14T04:05:22Z", "hours": 0.2506, "text": "I decided to change the color of my navbar and make it look like an actual navbar. I hope you like it… I don’t have much to write for this change although I’m a bit tired right now since I went to bed at 5 AM in the morning."}, {"post_id": 46536, "ts": "2026-08-13T20:36:39Z", "hours": 0.4006, "text": "I worked a bit with Bulma and finally got my website buttons to be a bit better."}, {"post_id": 46137, "ts": "2026-08-13T04:41:57Z", "hours": 2.3572, "text": "I took pretty long trying my best to get the website to look better and to make it more interactive and responsive as well as so that people don’t have to strain their eyes but I decided to update my CSS library with Bulma and the website looks way better than it did and I really like the website."}, {"post_id": 44427, "ts": "2026-08-10T05:44:34Z", "hours": 1.6156, "text": "I worked pretty hard on this trying to get the navbar to work and sat outside for a bit but it was pretty nerveracking trying to finish the project and I tried to make it good for viewer use so other’s don’t have a hard time on the website and changed a lot of things as you can see in the video."}, {"post_id": 44275, "ts": "2026-08-09T22:25:41Z", "hours": 0.6625, "text": "I have added a home Icon, I’ve been working on this for a pretty long time trying to figure out how to get a navbar and now it’s slowly coming into place But I want to design it a bit more though in the future it’ll be a bit better."}, {"post_id": 44185, "ts": "2026-08-09T19:37:54Z", "hours": 0.8303, "text": "I’m working on adding a new navbar or something to click so the website becomes more interactive and then later I’ll include some JavaScript or get to it."}, {"post_id": 43589, "ts": "2026-08-08T22:49:18Z", "hours": 0.5686, "text": "I’m feeling pretty good about this! I’m thinking of adding new boxes so I can list my hobbies or other things or even just interesting things to keep track of."}, {"post_id": 43572, "ts": "2026-08-08T22:01:31Z", "hours": 0.33, "text": "Decided to do some more work on the website because in my opinion it looked pretty ugly to be here… So here’s a better look for your eyes (:"}, {"post_id": 43524, "ts": "2026-08-08T20:58:41Z", "hours": 0.6844, "text": "Update:Learning CSS inline and internal CSS not yet External CSS though. But the Website is a continued Work in Progress and I am pretty pleased and happy with it. It is not yet on Github or Hosted anywhere yet though but it will be soon. I am going to eat Now But here is a look at the website and sorry for your eyes since I am still experimenting with certain colors and fonts and making the website look pretty and such."}, {"post_id": 43014, "ts": "2026-08-08T01:31:45Z", "hours": 0.2614, "text": "I’m still working on the website and I’m thinking of adding CSS, and JavaScript… Although JavaScript is pretty hard for me to get used to. Although I really wish I could just get my mind focused on learning it I’ll maybe add some CSS later when I learn how to but my first coding language that I learned is Python and HTML or two first languages… and if you click the blue link it will take you to the song which is this link: https://www.youtube.com/watch?v=8j741TUIET0 Oh yeah and Sorry for my writing I recently passed out and got put into a wheelchair because of a reaction to my toe getting treated and I’m experiencing some pain so yeah my bad."}]...
|
Title: A simple html song website by @Dxed21234 | Title: A simple html song website by @Dxed21234 | Stardance
Devlogs:
I’m still working on the website and I’m thinking of adding CSS, and JavaScript… Although JavaScript is pretty hard for me to get used to. Although I really wish I could just get my mind focused on learning it I’ll maybe add some CSS later when I learn how to but my first coding language that I learned is Python and HTML or two first languages… and if you click the blue link it will take you to the song which is this link: https://www.youtube.com/watch?v=8j741TUIET0 Oh yeah and Sorry for my writing I recently passed out and got put into a wheelchair because of a reaction to my toe getting treated and I’m experiencing some pain so yeah my bad.
Update:Learning CSS inline and internal CSS not yet External CSS though. But the Website is a continued Work in Progress and I am pretty pleased and happy with it. It is not yet on Github or Hosted anywhere yet though but it will be soon. I am going to eat Now But here is a look at the website and sorry for your eyes since I am still experimenting with certain colors and fonts and making the website look pretty and such.
Decided to do some more work on the website because in my opinion it looked pretty ugly to be here… So here’s a better look for your eyes (:
I’m feeling pretty good about this! I’m thinking of adding new boxes so I can list my hobbies or other things or even just interesting things to keep track of.
I’m working on adding a new navbar or something to click so the website becomes more interactive and then later I’ll include some JavaScript or get to it.
I have added a home Icon, I’ve been working on this for a pretty long time trying to figure out how to get a navbar and now it’s slowly coming into place But I want to design it a bit more though in the future it’ll be a bit better.
I worked pretty hard on this trying to get the navbar to work and sat outside for a bit but it was pretty nerveracking trying to finish the project and I tried to make it good for viewer use so other’s don’t have a hard time on the website and changed a lot of things as you can see in the video.
I took pretty long trying my best to get the website to look better and to make it more interactive and responsive as well as so that people don’t have to strain their eyes but I decided to update my CSS library with Bulma and the website looks way better than it did and I really like the website.
I worked a bit with Bulma and finally got my website buttons to be a bit better.
I decided to change the color of my navbar and make it look like an actual navbar. I hope you like it… I don’t have much to write for this change although I’m a bit tired right now since I went to bed at 5 AM in the morning.
Sorry I’m not feeling good today… But I tried to get a local timezone thing on my website… But it’s so hard to do so, And I can’t figure out how to do it but I will soon.
This is a different type of video that I’m doing right now but I’m showing how I nested my HTML and made my code more readable… And next time I will try to make my titles have certain buttons or my buttons radius much better in the future but this what I did today…
I just updated my Github Website…
Ships:
I worked pretty hard on this it was my website that I decided to make when I first heard about star dance. And it’s called dxed2016 or my personal website… And what was challenging was figuring out a new language as a beginner and as well as not having a lot of knowledge on CSS and JS But I didn’t use JS since I’m not really a computer nerd and don’t really understand it… But I did use Bulma CSS which helped me along the way a lot and the slack community helped me a lot as well…….. This is the link to my website https://dxed2016.hackclub.app/index.html I have a Song Lyrics Page and a photography page as well as a songs page that has songs that I like… And this is my GitHub to it https://github.com/Dexter5000000/My-own-personal-website...
|
1793577228.343883
|
1793663628.343883
|
|
42592
|
My very own WebOS by @Umar0 | Stardance
|
Umar0
|
1
|
14.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T11:46:41Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Shipped my first Stardance project! I built OrbitOS, a space-themed web operating system from scratch. It features draggable windows, a boot sequence, animated starfield and meteors, Flight Log with persistent local storage, Mission Logs, Comms, a live clock, and several other custom UI interactions. I went beyond the base requirements and added my own features and visual design to make OrbitOS feel like an actual spacecraft operating system rather than just a basic WebOS.", "repo": "https://github.com/ethanhunt7876-ops/OrbitOS", "demo": "https://ethanhunt7876-ops.github.io/OrbitOS/"}]...
|
[{"post_id": 48087, "ts": "202 [{"post_id": 48087, "ts": "2026-08-16T11:39:02Z", "hours": 1.2242, "text": "Shipped the last app, Comms, a terminal styled contact hub with a GitHub link and a click-to-copy email channel (skipped mailto: since it silently fails without a mail client set up), squashed a few typos along the way and fixed a drag-lag issue caused by backdrop blur fighting the animated starfield, that’s all five WebOS1 guides done. OrbitOS now runs five apps:- Welcome, Flight Log, Mission Logs, About, Comms on one shared window system. Submitting this as my Stardance project."}, {"post_id": 47539, "ts": "2026-08-15T14:47:53Z", "hours": 6.4897, "text": "Shipped Mission Logs, a journal app with a sidebar of entries that swap the content pane on click, following Guide 4’s array-of-posts pattern, fourth window now, alongside Welcome, Flight Log, and About, also fixed the top bar so it always stays above focused windows, no more menu getting buried, hit a nasty bug along the way: a stray comma in document.addEventListener(‘DOMContentLoaded’), () => {…} meant the listener never actually attached, and an extra } closed the scope early, so the whole script silently died before the boot screen could ever finish, leaving the desktop stuck forever on “BOOT SUCCESSFUL.” one character, whole OS down, desktop’s also running a live canvas starfield with drifting stars and the occasional shooting meteor in the background, small touch but it makes the thing feel alive rather than static."}, {"post_id": 43343, "ts": "2026-08-08T15:24:39Z", "hours": 1.4178, "text": "Made the welcome window draggable by its header, added working close/reopen buttons, and organized styles into reusable CSS classes. Ran into a layout bug where the header lost its flex-direction and started rendering content side by side instead of stacked, fixed by restoring flex-direction:- column on the window, also resized the header for better readability and spacing"}, {"post_id": 41790, "ts": "2026-08-06T06:10:04Z", "hours": 3.9378, "text": "Rebuilt the OS shell with a boot sequence, styled top bar with a live clock, and a glowing welcome window. Split the code into separate HTML/CSS/JS files. Hit and fixed several real bugs along the way, a missing closing div tag that was silently hiding my entire desktop, a backwards logical condition (if (!clockElement)) that broke the clock, a missing # in an SVG gradient that turned my logo black, and a conflicting overflow: hidden that killed my scrollbar. All fixed now and working smoothly"}, {"post_id": 39503, "ts": "2026-08-02T14:34:17Z", "hours": 0.5283, "text": "finished my welcome screen, custom Orbit OS logo, dark theme with blue accents, and a typewriter effect that types out my intro text letter by letter, hit a few real bugs along the way:- broken image paths, a malformed tag that silently killed the script, and had to get Hackatime + GitHub properly linked, all fixed now and working smoothly."}]...
|
Title: My very own WebOS by @Umar0 | Stardance
De Title: My very own WebOS by @Umar0 | Stardance
Devlogs:
finished my welcome screen, custom Orbit OS logo, dark theme with blue accents, and a typewriter effect that types out my intro text letter by letter, hit a few real bugs along the way:- broken image paths, a malformed tag that silently killed the script, and had to get Hackatime + GitHub properly linked, all fixed now and working smoothly.
Rebuilt the OS shell with a boot sequence, styled top bar with a live clock, and a glowing welcome window. Split the code into separate HTML/CSS/JS files. Hit and fixed several real bugs along the way, a missing closing div tag that was silently hiding my entire desktop, a backwards logical condition (if (!clockElement)) that broke the clock, a missing # in an SVG gradient that turned my logo black, and a conflicting overflow: hidden that killed my scrollbar. All fixed now and working smoothly
Made the welcome window draggable by its header, added working close/reopen buttons, and organized styles into reusable CSS classes. Ran into a layout bug where the header lost its flex-direction and started rendering content side by side instead of stacked, fixed by restoring flex-direction:- column on the window, also resized the header for better readability and spacing
Shipped Mission Logs, a journal app with a sidebar of entries that swap the content pane on click, following Guide 4’s array-of-posts pattern, fourth window now, alongside Welcome, Flight Log, and About, also fixed the top bar so it always stays above focused windows, no more menu getting buried, hit a nasty bug along the way: a stray comma in document.addEventListener(‘DOMContentLoaded’), () => {…} meant the listener never actually attached, and an extra } closed the scope early, so the whole script silently died before the boot screen could ever finish, leaving the desktop stuck forever on “BOOT SUCCESSFUL.” one character, whole OS down, desktop’s also running a live canvas starfield with drifting stars and the occasional shooting meteor in the background, small touch but it makes the thing feel alive rather than static.
Shipped the last app, Comms, a terminal styled contact hub with a GitHub link and a click-to-copy email channel (skipped mailto: since it silently fails without a mail client set up), squashed a few typos along the way and fixed a drag-lag issue caused by backdrop blur fighting the animated starfield, that’s all five WebOS1 guides done. OrbitOS now runs five apps:- Welcome, Flight Log, Mission Logs, About, Comms on one shared window system. Submitting this as my Stardance project.
Ships:
Shipped my first Stardance project! I built OrbitOS, a space-themed web operating system from scratch. It features draggable windows, a boot sequence, animated starfield and meteors, Flight Log with persistent local storage, Mission Logs, Comms, a live clock, and several other custom UI interactions. I went beyond the base requirements and added my own features and visual design to make OrbitOS feel like an actual spacecraft operating system rather than just a basic WebOS....
|
1793483422.6503265
|
1793569822.6503265
|
|
42598
|
MicroMania by @Dotdvn | Stardance
|
Dotdvn
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T13:26:33Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "MicroMania is a retro-inspired mini-game collection built with Godot. The game features fast-paced challenges including coin parkour, falling bread survival, and reach the chest, all tied together with a bread-life system and countdown-based progression. It was created as a small arcade-style experience that is easy to pick up, fun to replay, and designed for quick gaming sessions.", "repo": "https://github.com/dotdvn/MicroMania", "demo": "https://dotdvn.itch.io/micromania"}]...
|
[{"post_id": 40650, "ts": "202 [{"post_id": 40650, "ts": "2026-08-04T10:23:41Z", "hours": 1.2522, "text": "DevLoggggggggggg #3 Made 2 more minigames and implimented sound effects to this game."}, {"post_id": 38990, "ts": "2026-08-01T16:48:23Z", "hours": 3.0939, "text": "DevLoggggggggg #2 Made the game actually playable today. I built the first platformer mini-game where the goal is to reach the treasure chest before time runs out. I also added spikes that act as death zones, a bread-based lives system, and a HUD that shows the current level and remaining bread at the top of the screen."}, {"post_id": 38732, "ts": "2026-08-01T09:04:02Z", "hours": 0.3919, "text": "DevLogggggggggggg #1 I started building MicroMania, a WarioWare-inspired mini-game.Today I set up the project, created the title screen, and designed the basic menu with Start, Settings, and Quit buttons. Nxt stp is connecting the menu to the first minigame."}]...
|
Title: MicroMania by @Dotdvn | Stardance
Devlogs: Title: MicroMania by @Dotdvn | Stardance
Devlogs:
DevLogggggggggggg #1 I started building MicroMania, a WarioWare-inspired mini-game.Today I set up the project, created the title screen, and designed the basic menu with Start, Settings, and Quit buttons. Nxt stp is connecting the menu to the first minigame.
DevLoggggggggg #2 Made the game actually playable today. I built the first platformer mini-game where the goal is to reach the treasure chest before time runs out. I also added spikes that act as death zones, a bread-based lives system, and a HUD that shows the current level and remaining bread at the top of the screen.
DevLoggggggggggg #3 Made 2 more minigames and implimented sound effects to this game.
Ships:
MicroMania is a retro-inspired mini-game collection built with Godot. The game features fast-paced challenges including coin parkour, falling bread survival, and reach the chest, all tied together with a bread-life system and countdown-based progression. It was created as a small arcade-style experience that is easy to pick up, fun to replay, and designed for quick gaming sessions....
|
1793541166.5443952
|
1793627566.5443952
|
|
42603
|
Element IR by @rithwiknambiar | Stardance
|
rithwiknambiar
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T15:14:09Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I built a dual-purpose, smart touchscreen device that functions as a high-utility Universal Infrared (IR) Remote when in use and transitions into a desktop Live Weather Station and Clock when idle. Universal IR Tool: It features a custom touchscreen UI capable of capturing raw infrared signals from existing appliances, displaying their exact hex codes, and saving them with custom names using an on-screen QWERTY keyboard for later emulation (signal playback). Smart Power & Display: To maximize signal accuracy and power efficiency, the device automatically shuts down its Wi-Fi radio when entering active IR Mode, and instantly spins the wireless connection back up to fetch live weather data when docked or idle. What was challenging? The most significant challenge was hardware resource management and strict signal timing. Leaving the background Wi-Fi network stack active while trying to capture or transmit precise IR pulses caused microsecond delays and signal jitter. This resulted in corrupted hex codes. I resolved this hurdle by writing a strict power-management rule into the state machine: the system completely terminates the Wi-Fi radio connection the exact millisecond the user enters IR Mode, ensuring clean, interference-free hardware timers for precise signal emulation. What are you proud of? I am incredibly proud of the UI/UX integration and the custom QWERTY touchscreen keyboard. Designing a responsive UI on a small TFT screen that feels intuitive was a massive hurdle. Successfully implementing a dynamic naming system—where a user can tap an on-screen keyboard to instantly label a captured hex code as a human-readable string (like “OFF” or “VOL_UP”) rather than managing hardcoded array values—gives the project a highly polished, consumer-grade feel. What should people know so they can test your project? To successfully flash and test this project, reviewers and users need to know the following parameters: Required Libraries: Before compiling the Arduino sketch, ensure you have the TFT_eSPI library installed and properly configured for your specific display pinout in the User_Setup.h file. You will also need the IRremoteESP8266 library to handle signal decoding. Network Isolation: Keep in mind that when testing the IR Tool functions (CAPTURE/SEND), the device’s web and Wi-Fi features will consciously disconnect to safeguard timing accuracy. Testing Hardware: If testing without an existing television remote, you can target any standard consumer remote (such as an Light or AC controller) directly at your IR receiver module to verify that the hex protocols populate accurately in the display terminal.", "repo": "https://github.com/rithwik-nambiar/ESP8266-Smart-Weather-Station-and-Universal-IR-Remote", "demo": "https://github.com/rithwik-nambiar/ESP8266-Smart-Weather-Station-and-Universal-IR-Remote/tree/main/images"}]...
|
[{"post_id": 40129, "ts": "202 [{"post_id": 40129, "ts": "2026-08-03T15:06:02Z", "hours": 1.0344, "text": "DEVLOG #4 — Project Complete! 🎉 It is officially done! What started as a concept to merge a utility tool with a desktop display is now a fully polished, working piece of hardware. The universal remote and weather station project is officially 100% completed. A Quick Look Back The Desktop Mode: When sitting in its dock, the device serves as a live weather station and clock, blending perfectly into a desk setup rather than just sitting around as a blank piece of plastic. The IR Toolbelt: When picked up, it shifts into a dedicated infrared tool. It can seamlessly capture raw hex protocols from existing household remotes, save them, and emulate those signals back to control TVs, soundbars, or appliances. The Custom Keyboard UI: In the last update, I finalized the custom touchscreen QWERTY keyboard layout. Now, every single captured signal can be instantly named (e.g., “OFF”, “VOL_UP”) and saved directly to memory for quick, human-readable playback. Final Polish & Tweaks To cross the finish line, I spent the last few hours tightening up the UI transition animations and stress-testing the power-management loop (making sure the Wi-Fi shuts down reliably during IR capture and spins back up instantly for weather syncs when docked). Everything is running smoothly, responsively, and without timing glitches. The code is cleaned up, the hardware is rock solid, and the project is officially wrapped. Huge thanks to everyone who followed along with the builds and logs!"}, {"post_id": 39910, "ts": "2026-08-03T06:36:34Z", "hours": 1.0206, "text": "DEVLOG #3 What’s new today? We are officially entering the homestretch! Following up on yesterday’s breakthrough with catching raw infrared signals, I spent today building the file organization and naming logic. As you can see in the new screenshot, I successfully implemented a custom on-screen QWERTY touch keyboard directly into the IR Tool menu. The device now shifts into a purple “LISTENING..” state to grab a command, and then immediately pops up an intuitive text input field asking you to Name this signal:. Right now, I am testing saving a captured button as OFF. Being able to give captured hex codes human-readable names on the fly means no more guessing what random array entries do when it comes time to hit SEND. Project Status Update: With file naming, keyboard inputs, UI states, and the weather station system all completely built and integrated, this project is almost over! All that is left to do is run a few final hardware playback tests and wrap the electronics into a clean enclosure. Stay tuned for the final showcase video soon!"}, {"post_id": 39532, "ts": "2026-08-02T15:34:50Z", "hours": 1.0247, "text": "DEVLOG #2 Since my last update, the live weather station and clock functionalities are officially 100% complete and stable. With the idle state locked down, I shifted focus entirely to the core remote control hardware. Today, I successfully stood up the touchscreen interface for the IR Tool menu! As you can see in the screenshot, the UI is fully responsive. I managed to successfully catch and parse a raw signal from an ONN remote, pulling down the specific hex protocol code (0xE61C00A1)."}, {"post_id": 38967, "ts": "2026-08-01T16:15:28Z", "hours": 1.1358, "text": "DEVLOG #1 I am working on building a smart universal remote that emulates infrared signals to control entertainment systems, having already successfully completed and integrated the live weather station functionality for when the device is idle. Its with the use of an esp8266 and TFT DISPLAY now, will add other components later."}]...
|
Title: Element IR by @rithwiknambiar | Stardance
Title: Element IR by @rithwiknambiar | Stardance
Devlogs:
DEVLOG #1 I am working on building a smart universal remote that emulates infrared signals to control entertainment systems, having already successfully completed and integrated the live weather station functionality for when the device is idle. Its with the use of an esp8266 and TFT DISPLAY now, will add other components later.
DEVLOG #2 Since my last update, the live weather station and clock functionalities are officially 100% complete and stable. With the idle state locked down, I shifted focus entirely to the core remote control hardware. Today, I successfully stood up the touchscreen interface for the IR Tool menu! As you can see in the screenshot, the UI is fully responsive. I managed to successfully catch and parse a raw signal from an ONN remote, pulling down the specific hex protocol code (0xE61C00A1).
DEVLOG #3 What’s new today? We are officially entering the homestretch! Following up on yesterday’s breakthrough with catching raw infrared signals, I spent today building the file organization and naming logic. As you can see in the new screenshot, I successfully implemented a custom on-screen QWERTY touch keyboard directly into the IR Tool menu. The device now shifts into a purple “LISTENING..” state to grab a command, and then immediately pops up an intuitive text input field asking you to Name this signal:. Right now, I am testing saving a captured button as OFF. Being able to give captured hex codes human-readable names on the fly means no more guessing what random array entries do when it comes time to hit SEND. Project Status Update: With file naming, keyboard inputs, UI states, and the weather station system all completely built and integrated, this project is almost over! All that is left to do is run a few final hardware playback tests and wrap the electronics into a clean enclosure. Stay tuned for the final showcase video soon!
DEVLOG #4 — Project Complete! 🎉 It is officially done! What started as a concept to merge a utility tool with a desktop display is now a fully polished, working piece of hardware. The universal remote and weather station project is officially 100% completed. A Quick Look Back The Desktop Mode: When sitting in its dock, the device serves as a live weather station and clock, blending perfectly into a desk setup rather than just sitting around as a blank piece of plastic. The IR Toolbelt: When picked up, it shifts into a dedicated infrared tool. It can seamlessly capture raw hex protocols from existing household remotes, save them, and emulate those signals back to control TVs, soundbars, or appliances. The Custom Keyboard UI: In the last update, I finalized the custom touchscreen QWERTY keyboard layout. Now, every single captured signal can be instantly named (e.g., “OFF”, “VOL_UP”) and saved directly to memory for quick, human-readable playback. Final Polish & Tweaks To cross the finish line, I spent the last few hours tightening up the UI transition animations and stress-testing the power-management loop (making sure the Wi-Fi shuts down reliably during IR capture and spins back up instantly for weather syncs when docked). Everything is running smoothly, responsively, and without timing glitches. The code is cleaned up, the hardware is rock solid, and the project is officially wrapped. Huge thanks to everyone who followed along with the builds and logs!
Ships:
What did you make? I built a dual-purpose, smart touchscreen device that functions as a high-utility Universal Infrared (IR) Remote when in use and transitions into a desktop Live Weather Station and Clock when idle. Universal IR Tool: It features a custom touchscreen UI capable of capturing raw infrared signals from existing appliances, displaying their exact hex codes, and saving them with custom names using an on-screen QWERTY keyboard for later emulation (signal playback). Smart Power & Display: To maximize signal accuracy and power efficiency, the device automatically shuts down its Wi-Fi radio when entering active IR Mode, and instantly spins the wireless connection back up to fetch live weather data when docked or idle. What was challenging? The most significant challenge was hardware resource management and strict signal timing. Leaving the background Wi-Fi network stack active while trying to capture or transmit precise IR pulses caused microsecond delays and signal jitter. This resulted in corrupted hex codes. I resolved this hurdle by writing a strict power-management rule into the state machine: the system completely terminates the Wi-Fi radio connection the exact millisecond the user enters IR Mode, ensuring clean, interference-free hardware timers for precise signal emulation. What are you proud of? I am incredibly proud of the UI/UX integration and the custom QWERTY touchscreen keyboard. Designing a responsive UI on a small TFT screen that feels intuitive was a massive hurdle. Successfully implementing a dynamic naming system—where a user can tap an on-screen keyboard to instantly label a captured hex code as a human-readable string (like “OFF” or “VOL_UP”) rather than managing hardcoded array values—gives the project a highly polished, consumer-grade feel. What should people know so they can test your project? To successfully flash and test this project, reviewers and users need to know the following parameters: Required Libraries: Before compiling the Arduino sketch, ensure you have the TFT_eSPI library installed and properly configured for your specific display pinout in the User_Setup.h file. You will also need the IRremoteESP8266 library to handle signal decoding. Network Isolation: Keep in mind that when testing the IR Tool functions (CAPTURE/SEND), the device’s web and Wi-Fi features will consciously disconnect to safeguard timing accuracy. Testing Hardware: If testing without an existing television remote, you can target any standard consumer remote (such as an Light or AC controller) directly at your IR receiver module to verify that the hex protocols populate accurately in the display terminal....
|
1793555394.9199
|
1793641794.9199
|
|
42611
|
esp-32 Ipod by @krisander | Stardance
|
krisander
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T08:53:20Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this is a skeleton for a retro stye music player! the most challenging part was the logic of the code, and reachearching it. I’m proud of the 3hours spent on programming the structural base. This is only the base and not the finalized project. IT can be used as it is or edited!", "repo": "https://github.com/krisander11/epod-esp32", "demo": ""}]...
|
[{"post_id": 38712, "ts": "202 [{"post_id": 38712, "ts": "2026-08-01T08:01:05Z", "hours": 3.0181, "text": "I completed the skeleton of the project and i got a successful compile using platformio.ini! took me 3 hours though ;-("}]...
|
Title: esp-32 Ipod by @krisander | Stardance
Devl Title: esp-32 Ipod by @krisander | Stardance
Devlogs:
I completed the skeleton of the project and i got a successful compile using platformio.ini! took me 3 hours though ;-(
Ships:
this is a skeleton for a retro stye music player! the most challenging part was the logic of the code, and reachearching it. I’m proud of the 3hours spent on programming the structural base. This is only the base and not the finalized project. IT can be used as it is or edited!...
|
1793555396.1585047
|
1793641796.1585047
|
|
42613
|
Markovinator by @ritam | Stardance
|
ritam
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T07:54:43Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So I made a RPS game that uses the mechanism of markov chains. I shipped it on vercel. Its a simple RPS game with leaderboards that anyone on the internet can play at https://markovinator.vercel.app . It is themed on Dr. Heinz Doofenshmirtz hence the inator suffix. It also has a self destruct button. I used Redis for leaderboards and used Next.js for SSR and other stuff. You can get other info on my readme and source code. Till then, Curse you, Perry the Platypus", "repo": "", "demo": ""}]...
|
[{"post_id": 40594, "ts": "202 [{"post_id": 40594, "ts": "2026-08-04T07:48:36Z", "hours": 0.4844, "text": "Added a self destruct button today. Shipping it!"}, {"post_id": 40006, "ts": "2026-08-03T11:04:24Z", "hours": 1.8756, "text": "Devlog#1. So yesterday and the day before it i made the markov chain as 1 move, now it is 2 move. I used groq before but moved to mistral (best free LLM api). And i finally deployed it to vercel. Link: https://markovinator.vercel.app . Will add a self distruct button now. Bye"}]...
|
Title: Markovinator by @ritam | Stardance
Devlogs Title: Markovinator by @ritam | Stardance
Devlogs:
Devlog#1. So yesterday and the day before it i made the markov chain as 1 move, now it is 2 move. I used groq before but moved to mistral (best free LLM api). And i finally deployed it to vercel. Link: https://markovinator.vercel.app . Will add a self distruct button now. Bye
Added a self destruct button today. Shipping it!
Ships:
So I made a RPS game that uses the mechanism of markov chains. I shipped it on vercel. Its a simple RPS game with leaderboards that anyone on the internet can play at https://markovinator.vercel.app . It is themed on Dr. Heinz Doofenshmirtz hence the inator suffix. It also has a self destruct button. I used Redis for leaderboards and used Next.js for SSR and other stuff. You can get other info on my readme and source code. Till then, Curse you, Perry the Platypus...
|
1793555397.3365502
|
1793641797.3365502
|
|
42619
|
[placeholder] by @BoltyPlays | Stardance
|
BoltyPlays
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-01T04:40:18Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "First shipped item… [placeholder] uses NASA’s APOD API and fetches its picture, video, or YT vid based on the day you input. It was difficult to integrate the YouTube part, mostly because my brain shut off (it was 2 am), but re-learning JS and CSS was equally as difficult. Overall, this project helped me jump back into the cold trail of building websites. This certainly isn’t impressive, but shows that I at least know a bit of JS…", "repo": "https://github.com/BoltyPlays/placeholder", "demo": "https://boltyplays.github.io/placeholder/"}]...
|
[{"post_id": 59372, "ts": "202 [{"post_id": 59372, "ts": "2026-09-01T04:12:43Z", "hours": 2.5833, "text": "completely forgot to make devlogs for this. whoops so started this project and learnt that NASA gave free api keys which is pretty cool but then my brain stopped and so a bit of Googling was required to help me understand the JS part finished all that, took upon the challenge to embed the youtube video, but struggled, so threw that aside and did a bit of CSS, in the process found this cool stripe design from CSSTricks managed to get the YouTube part working (just grab the code from youtube) and yeah. [placeholder] works"}]...
|
Title: [placeholder] by @BoltyPlays | Stardance
D Title: [placeholder] by @BoltyPlays | Stardance
Devlogs:
completely forgot to make devlogs for this. whoops so started this project and learnt that NASA gave free api keys which is pretty cool but then my brain stopped and so a bit of Googling was required to help me understand the JS part finished all that, took upon the challenge to embed the youtube video, but struggled, so threw that aside and did a bit of CSS, in the process found this cool stripe design from CSSTricks managed to get the YouTube part working (just grab the code from youtube) and yeah. [placeholder] works
Ships:
First shipped item… [placeholder] uses NASA’s APOD API and fetches its picture, video, or YT vid based on the day you input. It was difficult to integrate the YouTube part, mostly because my brain shut off (it was 2 am), but re-learning JS and CSS was equally as difficult. Overall, this project helped me jump back into the cold trail of building websites. This certainly isn’t impressive, but shows that I at least know a bit of JS…...
|
1793444190.372068
|
1793530590.372068
|
|
42645
|
EthioFarm AI by @Hamerenoh | Stardance
|
Hamerenoh
|
1
|
10.0
|
61
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T09:16:09Z", "hours": 10.0, "multiplier": 6.15, "payout": 61, "blessing": "neutral", "text": "Built EthioFarm AI, a climate assistant that turns real-time weather data into practical farming advice for Ethiopian farmers. It shows live weather for any location (with a visual “horizon” that changes based on real sky conditions), gives an instant plant/irrigate/hold-off recommendation, and lets farmers ask questions like “should I plant this week?” through a chat interface. The most challenging part was the AI chat. I originally built it to call an external AI API directly from the browser, but that approach doesn’t actually work once hosted — it needs a securely-held API key and backend server I don’t have access to. I rebuilt it as a self-contained rule-based system instead: it detects what the farmer is asking about (planting, irrigation, or rain) and generates a specific answer using real live weather data — no external dependency, works the same whether local or hosted. I’m proud that I wrote the core logic myself — the keyword-detection and answer-generation functions — working through the conditional logic step by step instead of just pasting code. It’s a small thing, but it’s the first time I really understood what I was building rather than just shipping something that worked. To test it: enter a real Ethiopian town (like Bahir Dar or Hawassa)or whatever city , click “Check weather,” then ask a question like “will it rain tomorrow?” in the Field Journal chat — the answer will reflect that location’s real current weather data.", "repo": "https://github.com/hamerenohdemelash16-rgb/ethiofarm-ai", "demo": "https://hamerenohdemelash16-rgb.github.io/ethiofarm-ai/"}]...
|
[{"post_id": 41822, "ts": "202 [{"post_id": 41822, "ts": "2026-08-06T08:40:49Z", "hours": 1.0422, "text": "Solved the AI backend problem in EthioFarm AI. The chat previously called an external AI API directly from the browser, which isn’t realistic to deploy without a backend server and paid API key. I rebuilt it as a self-contained rule-based assistant instead: it detects what a farmer is asking about (planting, irrigation, or rain) via keyword matching, then combines that with real live weather data to generate a specific answer. No external dependency — works identically whether local or hosted. I wrote the core logic (detectIntent and generateAnswer functions) myself, working through conditional statements step by step rather than just pasting code. Tested it end-to-end — asked real questions and got correct answers based on live weather data for a real location. Also wrote a full README documenting the problem, solution, tech stack,"}, {"post_id": 41358, "ts": "2026-08-05T14:56:29Z", "hours": 1.7333, "text": "Built the dynamic weather horizon (updateHorizon) to switch sky gradients and cloud visuals in real time.Implemented the async loadWeather function to fetch forecasts and handle status updates.Coded event listeners for the AI chat so users can send messages via button clicks, the Enter key, or suggestion chips.Cleaned up script typos and DOM element references to make everything run smoothly."}, {"post_id": 40671, "ts": "2026-08-04T11:08:04Z", "hours": 1.5, "text": "Worked on the loadWeather(place) asynchronous function to manage fetching location data and updating current weather properties.Integrated fetchweather, updateHorizon, and recommendation building logic into the main loading sequence.Refined status message handling and location string formatting for the user interface."}, {"post_id": 40059, "ts": "2026-08-03T12:58:22Z", "hours": 1.6711, "text": "Worked inside index.html on the updateHorizon(mood) JavaScript function.Refined conditional checks for weather states like clear, partly cloudy, and overcast skies.Fixed a spelling typo in the mood condition check to ensure the dynamic sky gradients and SVG cloud elements render smoothly."}, {"post_id": 38736, "ts": "2026-08-01T09:07:37Z", "hours": 4.0028, "text": "Started EthioFarm AI — an AI climate assistant for Ethiopian farmers. So far I’ve built the core structure: a weather-fetching system using real location + forecast data, a visual “horizon” that changes based on actual weather conditions, and the beginning of an AI chat feature. Still debugging the weather display right now, and I’m working through."}]...
|
Title: EthioFarm AI by @Hamerenoh | Stardance
Dev Title: EthioFarm AI by @Hamerenoh | Stardance
Devlogs:
Started EthioFarm AI — an AI climate assistant for Ethiopian farmers. So far I’ve built the core structure: a weather-fetching system using real location + forecast data, a visual “horizon” that changes based on actual weather conditions, and the beginning of an AI chat feature. Still debugging the weather display right now, and I’m working through.
Worked inside index.html on the updateHorizon(mood) JavaScript function.Refined conditional checks for weather states like clear, partly cloudy, and overcast skies.Fixed a spelling typo in the mood condition check to ensure the dynamic sky gradients and SVG cloud elements render smoothly.
Worked on the loadWeather(place) asynchronous function to manage fetching location data and updating current weather properties.Integrated fetchweather, updateHorizon, and recommendation building logic into the main loading sequence.Refined status message handling and location string formatting for the user interface.
Built the dynamic weather horizon (updateHorizon) to switch sky gradients and cloud visuals in real time.Implemented the async loadWeather function to fetch forecasts and handle status updates.Coded event listeners for the AI chat so users can send messages via button clicks, the Enter key, or suggestion chips.Cleaned up script typos and DOM element references to make everything run smoothly.
Solved the AI backend problem in EthioFarm AI. The chat previously called an external AI API directly from the browser, which isn’t realistic to deploy without a backend server and paid API key. I rebuilt it as a self-contained rule-based assistant instead: it detects what a farmer is asking about (planting, irrigation, or rain) via keyword matching, then combines that with real live weather data to generate a specific answer. No external dependency — works identically whether local or hosted. I wrote the core logic (detectIntent and generateAnswer functions) myself, working through conditional statements step by step rather than just pasting code. Tested it end-to-end — asked real questions and got correct answers based on live weather data for a real location. Also wrote a full README documenting the problem, solution, tech stack,
Ships:
Built EthioFarm AI, a climate assistant that turns real-time weather data into practical farming advice for Ethiopian farmers. It shows live weather for any location (with a visual “horizon” that changes based on real sky conditions), gives an instant plant/irrigate/hold-off recommendation, and lets farmers ask questions like “should I plant this week?” through a chat interface. The most challenging part was the AI chat. I originally built it to call an external AI API directly from the browser, but that approach doesn’t actually work once hosted — it needs a securely-held API key and backend server I don’t have access to. I rebuilt it as a self-contained rule-based system instead: it detects what the farmer is asking about (planting, irrigation, or rain) and generates a specific answer using real live weather data — no external dependency, works the same whether local or hosted. I’m proud that I wrote the core logic myself — the keyword-detection and answer-generation functions — working through the conditional logic step by step instead of just pasting code. It’s a small thing, but it’s the first time I really understood what I was building rather than just shipping something that worked. To test it: enter a real Ethiopian town (like Bahir Dar or Hawassa)or whatever city , click “Check weather,” then ask a question like “will it rain tomorrow?” in the Field Journal chat — the answer will reflect that location’s real current weather data....
|
1792878671.1538298
|
1793742671.1538298
|
|
42647
|
My APOD OS! by @Wontonify | Stardance
|
Wontonify
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T11:52:26Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This project is a combination of one of my previous completed missions “Give Your Website a Pulse” and WebOS 1! The background of the OS is NASA’s Astronomy Picture of the Day with the weather on the right and time and the calendar on the left. Using the search bar opens up the page within the OS itself and you can have multiple of those at once and they are all draggable! Overall this wasn’t too challenging or time consuming mainly because I already had the design / theme with that sort of transparent look but I’m really happy how it turned out!", "repo": "https://github.com/Wontonify/Custom-OS", "demo": "https://wontonify.github.io/Custom-OS/"}]...
|
[{"post_id": 40032, "ts": "202 [{"post_id": 40032, "ts": "2026-08-03T11:49:27Z", "hours": 1.1078, "text": "Devlog #003 Turns out that chrome, youtube and duckduckgo doesn’t support framing so I had to swap them out for other search engines. You can now have multiple different search tabs open at once and they are all draggable!"}, {"post_id": 39430, "ts": "2026-08-02T11:53:32Z", "hours": 1.3519, "text": "Devlog #002 Finished the homepage and also started on getting apps inside my OS. So far not much luck but hopefully I’ll figure it out soon."}, {"post_id": 39385, "ts": "2026-08-02T10:20:38Z", "hours": 0.7403, "text": "Devlog #001 I want to incorporate Nasa’s Astronomy Picture of the Day with the OS and have the background as the picture. I started off by making a simple clock to show the time, alongside the pre-existing API call to reach the image as well as the search bar from a previous mission."}]...
|
Title: My APOD OS! by @Wontonify | Stardance
Devl Title: My APOD OS! by @Wontonify | Stardance
Devlogs:
Devlog #001 I want to incorporate Nasa’s Astronomy Picture of the Day with the OS and have the background as the picture. I started off by making a simple clock to show the time, alongside the pre-existing API call to reach the image as well as the search bar from a previous mission.
Devlog #002 Finished the homepage and also started on getting apps inside my OS. So far not much luck but hopefully I’ll figure it out soon.
Devlog #003 Turns out that chrome, youtube and duckduckgo doesn’t support framing so I had to swap them out for other search engines. You can now have multiple different search tabs open at once and they are all draggable!
Ships:
This project is a combination of one of my previous completed missions “Give Your Website a Pulse” and WebOS 1! The background of the OS is NASA’s Astronomy Picture of the Day with the weather on the right and time and the calendar on the left. Using the search bar opens up the page within the OS itself and you can have multiple of those at once and they are all draggable! Overall this wasn’t too challenging or time consuming mainly because I already had the design / theme with that sort of transparent look but I’m really happy how it turned out!...
|
1792878671.9839025
|
1793742671.9839025
|
|
42650
|
esp-pod by @krisander | Stardance
|
krisander
|
1
|
31.15
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-14T13:06:01Z", "hours": 23.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a retro themed mp3 player built around the esp32-wroom-1, this is version 1.3, this verson can play audio, browse through songs, add favorite songs, remane songs, artists and setsong duration. It has an inbuild keyboard wich makes it easy to type and save songs.", "repo": "https://github.com/krisander11/esp-pod", "demo": ""}]...
|
[{"post_id": 69104, "ts": "202 [{"post_id": 69104, "ts": "2026-09-16T11:39:39Z", "hours": 5.6508, "text": "i finished all the PCB Editing in about 5 hours!! I’m gonna put the PCB files on github soon. I”ll also send it for reshipping… hopefully it will be accepted."}, {"post_id": 68526, "ts": "2026-09-15T08:24:22Z", "hours": 0.7842, "text": "i fixed the schematics of the board. I added switches and labeled everything. I ran through the tests and it passed perfect."}, {"post_id": 68000, "ts": "2026-09-14T11:04:35Z", "hours": 1.7142, "text": "I found out i have to create a pcb so I’m doing it."}, {"post_id": 46367, "ts": "2026-08-13T15:19:17Z", "hours": 1.2575, "text": "I just dropped version 1.3 of the esp-pod on github , go check it out!"}, {"post_id": 45843, "ts": "2026-08-12T15:56:37Z", "hours": 1.5375, "text": "I’m currently fixing the keyboard navigation, and adding code to rename artists as well. I will update agian after fixing it."}, {"post_id": 45658, "ts": "2026-08-12T09:15:01Z", "hours": 2.0997, "text": "just uploaded build montage on lapse go check it out"}, {"post_id": 44706, "ts": "2026-08-10T17:23:29Z", "hours": 0.6858, "text": "I added code so that i can rename songs through the player but i have to clike abt 52 times per letter becaue the screen size and buttons are limited . If you have any ideas on optmizing the typing please feel free to suggest it in the comments!"}, {"post_id": 44670, "ts": "2026-08-10T16:17:09Z", "hours": 2.1997, "text": "I finished ver1.3, currenty debugging errors in ver1.3… Ill do a timlapse soon stay tuned for the hardware build montage!"}, {"post_id": 44073, "ts": "2026-08-09T16:25:57Z", "hours": 1.0806, "text": "ok so the project works but i complete forgt to add the logic part of renaming songs etc, i deleted about 200 lines of code to update it. ill will post a breadboard prototype after fixing this version of code"}, {"post_id": 43426, "ts": "2026-08-08T17:38:25Z", "hours": 1.0017, "text": "im fixing a few errors it the menu like not being able to rename songs and fixing ui freezing and audio glitches, I got the base working and will start on bluetooth soon!"}, {"post_id": 43266, "ts": "2026-08-08T12:59:00Z", "hours": 0.9897, "text": "I finally got all the errors fixed! I’m going to flash and test this version and then add bluetooth! I’ll publish this version on github after that. :-)"}, {"post_id": 43230, "ts": "2026-08-08T11:33:31Z", "hours": 3.3317, "text": "i started working on the settings part of the code . in getting hit with a lot of errors but im combing through the code and finding manyyy errors! ill update soon."}, {"post_id": 42690, "ts": "2026-08-07T15:28:31Z", "hours": 1.0631, "text": "currently writing the track selection code! Its throwing soooo many errors at me :-("}, {"post_id": 42598, "ts": "2026-08-07T12:41:23Z", "hours": 2.3325, "text": "The display of my laptop broke :-( I have been coding uisng an external 7 inch monitor… These curly brackets are confusing me so much! But ill never stop this project till im done. Currently am rewriting the code for the menu and how to interact with it, i will andd bluetooth once im done with this base model!"}, {"post_id": 42120, "ts": "2026-08-06T18:12:52Z", "hours": 1.3767, "text": "i started rewriting the code so i can use little fs to save song names to the esp32, as the sd card is going to be directly mounted to the dfplayer and there is no other way to save or read data form the sd using the dfplayermini. I created a new settings menu as wel."}, {"post_id": 40268, "ts": "2026-08-03T18:02:27Z", "hours": 4.2856, "text": "I spent so much time overthinking how to debug the 53 errors i got, turns out it was because of a semicolon…. btw this is a retro themed esp32 music play, because way too much stuff is digitalized and music shouldent be filled with ads!"}]...
|
Title: esp-pod by @krisander | Stardance
Devlogs: Title: esp-pod by @krisander | Stardance
Devlogs:
I spent so much time overthinking how to debug the 53 errors i got, turns out it was because of a semicolon…. btw this is a retro themed esp32 music play, because way too much stuff is digitalized and music shouldent be filled with ads!
i started rewriting the code so i can use little fs to save song names to the esp32, as the sd card is going to be directly mounted to the dfplayer and there is no other way to save or read data form the sd using the dfplayermini. I created a new settings menu as wel.
The display of my laptop broke :-( I have been coding uisng an external 7 inch monitor… These curly brackets are confusing me so much! But ill never stop this project till im done. Currently am rewriting the code for the menu and how to interact with it, i will andd bluetooth once im done with this base model!
currently writing the track selection code! Its throwing soooo many errors at me :-(
i started working on the settings part of the code . in getting hit with a lot of errors but im combing through the code and finding manyyy errors! ill update soon.
I finally got all the errors fixed! I’m going to flash and test this version and then add bluetooth! I’ll publish this version on github after that. :-)
im fixing a few errors it the menu like not being able to rename songs and fixing ui freezing and audio glitches, I got the base working and will start on bluetooth soon!
ok so the project works but i complete forgt to add the logic part of renaming songs etc, i deleted about 200 lines of code to update it. ill will post a breadboard prototype after fixing this version of code
I finished ver1.3, currenty debugging errors in ver1.3… Ill do a timlapse soon stay tuned for the hardware build montage!
I added code so that i can rename songs through the player but i have to clike abt 52 times per letter becaue the screen size and buttons are limited . If you have any ideas on optmizing the typing please feel free to suggest it in the comments!
just uploaded build montage on lapse go check it out
I’m currently fixing the keyboard navigation, and adding code to rename artists as well. I will update agian after fixing it.
I just dropped version 1.3 of the esp-pod on github , go check it out!
I found out i have to create a pcb so I’m doing it.
i fixed the schematics of the board. I added switches and labeled everything. I ran through the tests and it passed perfect.
i finished all the PCB Editing in about 5 hours!! I’m gonna put the PCB files on github soon. I”ll also send it for reshipping… hopefully it will be accepted.
Ships:
This is a retro themed mp3 player built around the esp32-wroom-1, this is version 1.3, this verson can play audio, browse through songs, add favorite songs, remane songs, artists and setsong duration. It has an inbuild keyboard wich makes it easy to type and save songs....
|
1793523306.2880082
|
1793609706.2880082
|
|
42654
|
multipad by @lukas_gye2 | Stardance
|
lukas_gye2
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T19:04:19Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A 3x4 Numpad witha second layer used for other controles", "repo": "https://github.com/luklab63/hack-pad", "demo": ""}]...
|
[{"post_id": 78842, "ts": "202 [{"post_id": 78842, "ts": "2026-10-11T19:03:07Z", "hours": 0.6164, "text": "Finished the Hackpad"}, {"post_id": 41556, "ts": "2026-08-05T20:55:10Z", "hours": 2.7006, "text": "finished working on the FIrmware today"}, {"post_id": 40418, "ts": "2026-08-03T22:10:53Z", "hours": 2.6167, "text": "finished 3D modeling"}, {"post_id": 38945, "ts": "2026-08-01T15:38:36Z", "hours": 1.7894, "text": "Finished working on the PCB"}, {"post_id": 38874, "ts": "2026-08-01T13:10:36Z", "hours": 2.5833, "text": "working on PCB. having some issues with the footprints for the LEDs"}]...
|
Title: multipad by @lukas_gye2 | Stardance
Devlog Title: multipad by @lukas_gye2 | Stardance
Devlogs:
working on PCB. having some issues with the footprints for the LEDs
Finished working on the PCB
finished 3D modeling
finished working on the FIrmware today
Finished the Hackpad
Ships:
A 3x4 Numpad witha second layer used for other controles...
|
1793577242.4055674
|
1793663642.4055674
|
|
42671
|
portfolio website by @shishir_khanal_153 | Stardan portfolio website by @shishir_khanal_153 | Stardance...
|
shishir_khanal_153
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T13:43:23Z", "hours": 7.0, "multiplier": 1.16, "payout": 0, "blessing": "neutral", "text": "I make a protfolio website of mine . Its my first project for hack club ysws .", "repo": "https://github.com/shishirkhanal66/portfolio", "demo": "https://shishirkhanal66.github.io/portfolio/"}]...
|
[{"post_id": 38797, "ts": "202 [{"post_id": 38797, "ts": "2026-08-01T11:15:53Z", "hours": 6.0, "text": "Finished building my personal website/portfolio"}]...
|
Title: portfolio website by @shishir_khanal_153 | Title: portfolio website by @shishir_khanal_153 | Stardance
Devlogs:
Finished building my personal website/portfolio
Ships:
I make a protfolio website of mine . Its my first project for hack club ysws ....
|
1792860546.144181
|
1793724546.144181
|
|
42680
|
a by @Kaorii | Stardance
|
Kaorii
|
1
|
34.3
|
51
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T11:06:55Z", "hours": 18.0, "multiplier": 5.08, "payout": 51, "blessing": "neutral", "text": "whyslow traces sched_switch, futex, and block I/O events via eBPF to show you the actual causal chain behind a slow Linux process, not just isolated symptoms. Built at a 48hr hackathon in my house!", "repo": "", "demo": ""}]...
|
[{"post_id": 39253, "ts": "202 [{"post_id": 39253, "ts": "2026-08-02T03:23:49Z", "hours": 16.3, "text": "okay so this one’s been in my head for a while. every time I’m debugging something slow on linux I end up with like 3 terminals open — strace in one, perf in another, sometimes py-spy if it’s python — and I’m just manually lining up timestamps trying to figure out what actually caused the slowdown. none of these tools talk to each other. they just dump their own little slice of the truth and leave you to do the detective work. so I built whyslow. it hooks into the kernel with eBPF and watches three things at once: scheduler switches, futex waits, and block I/O. instead of showing you three separate logs, it actually chains them together and tells you the story. like instead of thread stuck for 400ms (somewhere) you get thread A blocked on a futex which was held by thread B which was blocked on a disk read that’s the whole point. not “something was slow” but “here’s the chain of custody for why.” biggest pain building this was honestly not the eBPF part, it was figuring out how to correlate events that come from completely different sources without just guessing. had to build this whole interval-based matching thing to line up “thread went to sleep here” with “thread got woken up there” and make sure the causality actually holds up and isn’t just coincidence in timing. kept scope small on purpose for v1. only 3 event types, no fancy stack traces yet, x86_64 + arm64 only. figured getting 3 things exactly right beats having 8 things that are kind of right and kind of not. tested it by writing a little program that deliberately deadlocks itself with a futex and forces a disk read, so I’d have a known answer to check whyslow’s output against. felt really good when the chain it printed out actually matched what I knew was happening under the hood. still needs root to run since eBPF just doesn’t let you do this stuff unprivileged, that’s a permanent tradeoff not a bug. next up is probably symbol resolution so it can tell you actual function names instead of just thread ids, and getting it properly published so people can just cargo install it instead of pulling from git. repo’s here if anyone wants to poke at it: github.com/kaorii-ako/whyslow"}, {"post_id": 38788, "ts": "2026-08-01T11:05:43Z", "hours": 18.3075, "text": "Shipping whyslow v1 The problem Every Linux dev has hit “my program is slow” and reached for strace , perf , or py-spy — but each tool sees one layer. None of them tell you why across layers. You end up manually cross-referencing three terminal windows and timestamps by hand. What I built whyslow — a CLI that watches sched_switch , futex, and block I/O events via eBPF and stitches them into a single causal chain: $ sudo whyslow run -- ./my-slow-program 14:32:07.001 — tid 4821 blocked 412ms on futex 0x7f2a3c001000 ← woken by tid 4809 ← tid 4809 blocked 380ms on block I/O (dev nvme0n1p2, sector 88213) No manual correlation. It finds the root cause and walks you back to it. Stack Rust, aya for pure-Rust eBPF (no libbpf/C toolchain needed) Ring buffer for low-overhead event collection — can’t perturb the thing you’re measuring Interval tree + happens-before edge inference for the causal graph Workspace: whyslow-cli , whyslow-ebpf , whyslow-common Scope for v1 x86_64 + aarch64 Linux, kernel 5.8+ Three event sources: sched_switch, futex, block I/O No stack symbolication yet — tid/pid/comm only Needs root or CAP_BPF — no way around that, eBPF is privileged Kept scope narrow on purpose: three event sources done correctly beats eight done half right. Validated against a synthetic program that deliberately causes futex contention + a disk stall, so there’s ground truth to check the causal chain against, not just vibes. Distribution curl -sSf .../install.sh | sh Homebrew tap, APT repo, pip wrapper — see DISTRIBUTION.md crates.io publish still pending — cargo install works via --git for now What’s next Stack symbolication (native + interpreted languages) More event sources without losing causal-chain accuracy Actual crates.io publish so cargo install whyslow just works Repo github.com/kaorii-ako/whyslow"}]...
|
Title: a by @Kaorii | Stardance
Devlogs:
Shipping Title: a by @Kaorii | Stardance
Devlogs:
Shipping whyslow v1 The problem Every Linux dev has hit “my program is slow” and reached for strace , perf , or py-spy — but each tool sees one layer. None of them tell you why across layers. You end up manually cross-referencing three terminal windows and timestamps by hand. What I built whyslow — a CLI that watches sched_switch , futex, and block I/O events via eBPF and stitches them into a single causal chain: $ sudo whyslow run -- ./my-slow-program 14:32:07.001 — tid 4821 blocked 412ms on futex 0x7f2a3c001000 ← woken by tid 4809 ← tid 4809 blocked 380ms on block I/O (dev nvme0n1p2, sector 88213) No manual correlation. It finds the root cause and walks you back to it. Stack Rust, aya for pure-Rust eBPF (no libbpf/C toolchain needed) Ring buffer for low-overhead event collection — can’t perturb the thing you’re measuring Interval tree + happens-before edge inference for the causal graph Workspace: whyslow-cli , whyslow-ebpf , whyslow-common Scope for v1 x86_64 + aarch64 Linux, kernel 5.8+ Three event sources: sched_switch, futex, block I/O No stack symbolication yet — tid/pid/comm only Needs root or CAP_BPF — no way around that, eBPF is privileged Kept scope narrow on purpose: three event sources done correctly beats eight done half right. Validated against a synthetic program that deliberately causes futex contention + a disk stall, so there’s ground truth to check the causal chain against, not just vibes. Distribution curl -sSf .../install.sh | sh Homebrew tap, APT repo, pip wrapper — see DISTRIBUTION.md crates.io publish still pending — cargo install works via --git for now What’s next Stack symbolication (native + interpreted languages) More event sources without losing causal-chain accuracy Actual crates.io publish so cargo install whyslow just works Repo github.com/kaorii-ako/whyslow
okay so this one’s been in my head for a while. every time I’m debugging something slow on linux I end up with like 3 terminals open — strace in one, perf in another, sometimes py-spy if it’s python — and I’m just manually lining up timestamps trying to figure out what actually caused the slowdown. none of these tools talk to each other. they just dump their own little slice of the truth and leave you to do the detective work. so I built whyslow. it hooks into the kernel with eBPF and watches three things at once: scheduler switches, futex waits, and block I/O. instead of showing you three separate logs, it actually chains them together and tells you the story. like instead of thread stuck for 400ms (somewhere) you get thread A blocked on a futex which was held by thread B which was blocked on a disk read that’s the whole point. not “something was slow” but “here’s the chain of custody for why.” biggest pain building this was honestly not the eBPF part, it was figuring out how to correlate events that come from completely different sources without just guessing. had to build this whole interval-based matching thing to line up “thread went to sleep here” with “thread got woken up there” and make sure the causality actually holds up and isn’t just coincidence in timing. kept scope small on purpose for v1. only 3 event types, no fancy stack traces yet, x86_64 + arm64 only. figured getting 3 things exactly right beats having 8 things that are kind of right and kind of not. tested it by writing a little program that deliberately deadlocks itself with a futex and forces a disk read, so I’d have a known answer to check whyslow’s output against. felt really good when the chain it printed out actually matched what I knew was happening under the hood. still needs root to run since eBPF just doesn’t let you do this stuff unprivileged, that’s a permanent tradeoff not a bug. next up is probably symbol resolution so it can tell you actual function names instead of just thread ids, and getting it properly published so people can just cargo install it instead of pulling from git. repo’s here if anyone wants to poke at it: github.com/kaorii-ako/whyslow
Ships:
whyslow traces sched_switch, futex, and block I/O events via eBPF to show you the actual causal chain behind a slow Linux process, not just isolated symptoms. Built at a 48hr hackathon in my house!...
|
1793562713.3190985
|
1793649113.3190985
|
|
42691
|
My own site! by @George_David | Stardance
|
George_David
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T13:11:40Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this website shows that anyone can begin anything they want no matter what their background is", "repo": "https://github.com/gorg-cloud/my-new-site", "demo": "https://gorg-cloud.github.io/my-new-site/"}]...
|
[{"post_id": 38870, "ts": "202 [{"post_id": 38870, "ts": "2026-08-01T13:06:28Z", "hours": 0.4858, "text": "deploying ts shi is soooo complicated ,how the hell do I add new sections when it takes atleast 10mins for new stuff to load💔"}]...
|
Title: My own site! by @George_David | Stardance
Title: My own site! by @George_David | Stardance
Devlogs:
deploying ts shi is soooo complicated ,how the hell do I add new sections when it takes atleast 10mins for new stuff to load💔
Ships:
this website shows that anyone can begin anything they want no matter what their background is...
|
1793562715.381514
|
1793649115.381514
|
|
42698
|
clearfx by @satvikhardat | Stardance
|
satvikhardat
|
1
|
39.47
|
563
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T12:40:30Z", "hours": 37.0, "multiplier": 18.75, "payout": 563, "blessing": "neutral", "text": "A small CLI + website where people can upload TUI designs, and anyone can make those TUI animations show up whenever they type a specific command in their terminal like “clear” or “ls” while also doing the job of that command!!! Package Manager Install the core CLI globally via pip. pip install clearfx Shell Hooks Initialize shell integrations to wrap the clear command automatically. clearfx setup-shell Quick Wrap Want to animate a specific command? Wrap it directly (e.g., wrap ls with the Aurora Fold animation). clearfx wrap ls --anim aurora-fold Reload Shell Source your configuration file to apply the newly added shell hooks. source ~/.bashrc # or ~/.zshrc if you wanna stop the animation you can run clearfx reset", "repo": "https://github.com/random-unknown-username/clearfx/", "demo": "https://clearfx-zeta.vercel.app/"}]...
|
[{"post_id": 41926, "ts": "202 [{"post_id": 41926, "ts": "2026-08-06T13:29:40Z", "hours": 2.4739, "text": "Fixed vercel hosting hell, the whole thing js didnt want to work for soon long, small fix not much, not writing a huge devlog, because the ships already done, and probably wont be working on this again moving forward"}, {"post_id": 41330, "ts": "2026-08-05T14:06:46Z", "hours": 12.5803, "text": "devlog 3: debugging hell and nuking the UI bruh the last 10 hours were an absolute nightmare. the web UI preview was completely broken. you’d hit play, and it would just flash and disappear. i was losing my mind trying to figure out why the terminal was instantly clearing itself. turns out, the core engine’s TerminalSession was doing its job too well. when the animation finished, it sent the ANSI sequence to exit the alternate screen buffer, which is exactly what you want in a real terminal. but in xterm.js , exiting the alternate screen just leaves you with a blank black box! had to wire up a --keep-screen flag all the way through the CLI architecture to intercept that sequence when running inside the web preview. # src/clearfx/engine/terminal.py def __exit__ ( self , exc_type , exc_val , exc_tb ): if not self . keep_screen : # restore alternate screen self . write ( b \" \\033 [?1049l \" ) then there was the resizing bug. xterm.js was fitting to the container, but the PTY backend was hardcoded to 80x24. so it looked super misaligned. had to intercept term.cols and term.rows in React and pass them through the WebSocket JSON payload. wsRef . current . send ( JSON . stringify ({ type : ' run ' , code , width : termRef . current . cols , height : termRef . current . rows })); once the bugs were dead, i looked at the web UI and realized it looked like generic SaaS slop. huge glowing pills, purple gradients everywhere… it was dog shit. so i nuked index.css entirely. built a custom design system inspired by factory.ai. pure dark operations console vibes. strictly monochrome, 8px spacing grid, geist monospace fonts for technical labels, and tiny orange/green signal dots instead of giant colored backgrounds. /* replaced the generic slop with this */ :root { --bg-canvas : #101010 ; --bg-surface : #1D1A18 ; --border-hairline : #34312F ; --signal-orange : #EE6018 ; --font-mono : 'Geist Mono' , monospace ; } the hero section now has a literal UI-in-UI terminal preview embedded in a custom .product-frame . the whole app feels like a precision engineering tool now, not a marketing page. we finally shipped a safe, strictly declarative, gorgeous terminal engine."}, {"post_id": 39256, "ts": "2026-08-02T03:27:42Z", "hours": 10.2494, "text": "devlog 2: nuking the backend and building a safe package format so after the engine was running, i needed a marketplace. initially i spun up a whole fastAPI backend, but maintaining that sounded like a nightmare. so i ripped it all out and moved the entire catalog to firebase. but here’s the catch: if i’m letting randos upload python animations to a public marketplace, they could literally just inject os.system(\"rm -rf /\") inside their design.py and wipe everyone’s machines when they run clear . security was a massive issue. to fix this, i built a compiler that parses the python animation locally, extracts all the elements and keyframes, and bakes them into a purely declarative design.json . def pack ( self , directory : str | Path ) -> Path : # we literally run their code in an isolated builder # and dump the resulting state. no logic is saved. design_data = { \" elements \" : builder . _elements , \" keyframes \" : builder . _keyframes , \" config \" : builder . _config } with zipfile . ZipFile ( out_path , ' w ' ) as zf : zf . writestr ( \" manifest.toml \" , toml_content ) zf . writestr ( \" design.json \" , json . dumps ( design_data )) this means .clearfx packages are just dumb JSON files. the CLI’s DesignInterpreter reads the JSON and feeds it back into the engine safely. zero arbitrary code execution. then i had to build the web studio so people could preview their animations in the browser. getting a live terminal running in react is a pain. i used xterm.js on the frontend, and built a websocket server in python using pty.fork() to spin up a fake terminal session. @app.websocket ( \" /ws/studio \" ) async def websocket_studio ( websocket : WebSocket , width : int = 80 , height : int = 24 ): pid , fd = pty . fork () if pid == 0 : # child process - sets up the fake terminal size winsize = struct . pack ( \" HHHH \" , height , width , 0 , 0 ) fcntl . ioctl ( sys . stdout . fileno (), termios . TIOCSWINSZ , winsize ) os . execvpe ( \" python \" , [ \" python \" , \" -m \" , \" clearfx.cli.main \" , \" preview \" , temp_dir ], env ) so when you click “execute” in the web UI, it literally sends the python code over websockets, saves it to a temp dir, forks a new PTY, runs the engine natively, and pipes the raw ANSI output back to xterm.js . it’s basically magic. but the resize bugs were driving me insane."}, {"post_id": 38827, "ts": "2026-08-01T12:02:35Z", "hours": 14.2386, "text": "devlog 1: building a terminal engine from scratch because clear is boring bro i got so tired of just typing clear and seeing the terminal instantly snap to empty. it’s so boring. so i decided to build a full double-buffered animation engine in python just to replace the clear command. the idea was to make something that hooks into your .bashrc or .zshrc and intercepts clear , plays a sick terminal animation, and then actually clears the screen. first thing i realized: you can’t just print strings to the terminal and expect it to look like a smooth 60fps animation. the flickering is insane if you do that. so i had to build a double-buffered FrameBuffer system from scratch. class FrameBuffer : def diff ( self ) -> list [ tuple [ int , int , Cell ]]: \"\"\" returns only the cells that changed since last frame. \"\"\" changes = [] for i in range ( len ( self . front . cells )): if self . front . cells [ i ] != self . back . cells [ i ]: x = i % self . width y = i // self . width changes . append (( x , y , self . front . cells [ i ])) return changes this is the secret sauce. instead of redrawing 80x24 characters every frame, we only send ANSI escape codes for the exact pixels (cells) that changed. then i built a DiffRenderer that takes those changes and constructs the smallest possible ANSI sequence to move the cursor and update the colors. # snippet from renderer.py for x , y , cell in changes : # only move cursor if we aren't already there if not ( y == cy and x == cx ): out . append ( f \" \\033 [ { y + 1 } ; { x + 1 } H \" ) # write the actual character with truecolor out . append ( f \" \\033 [38;2; { cell . fg [ 0 ] } ; { cell . fg [ 1 ] } ; { cell . fg [ 2 ] } m { cell . char } \" ) after getting the engine running, i needed a way to safely inject it into the shell without destroying people’s configs. built a ShellIntegration class that detects zsh/bash/fish, backs up the config, and safely appends a wrapper. # >>> clearfx managed block >>> if command -v clearfx &>/dev/null ; then clear () { command clearfx play --clear-after } fi # <<< clearfx managed block <<< i spent like 10 hours just getting the core engine to hit 60fps consistently. python is slow, so minimizing string concatenations and using sys.stdout.buffer.write instead of print() was mandatory. next up was actually building out the animation formats and getting a marketplace running so people could share these."}]...
|
Title: clearfx by @satvikhardat | Stardance
Devlo Title: clearfx by @satvikhardat | Stardance
Devlogs:
devlog 1: building a terminal engine from scratch because clear is boring bro i got so tired of just typing clear and seeing the terminal instantly snap to empty. it’s so boring. so i decided to build a full double-buffered animation engine in python just to replace the clear command. the idea was to make something that hooks into your .bashrc or .zshrc and intercepts clear , plays a sick terminal animation, and then actually clears the screen. first thing i realized: you can’t just print strings to the terminal and expect it to look like a smooth 60fps animation. the flickering is insane if you do that. so i had to build a double-buffered FrameBuffer system from scratch. class FrameBuffer : def diff ( self ) -> list [ tuple [ int , int , Cell ]]: """ returns only the cells that changed since last frame. """ changes = [] for i in range ( len ( self . front . cells )): if self . front . cells [ i ] != self . back . cells [ i ]: x = i % self . width y = i // self . width changes . append (( x , y , self . front . cells [ i ])) return changes this is the secret sauce. instead of redrawing 80x24 characters every frame, we only send ANSI escape codes for the exact pixels (cells) that changed. then i built a DiffRenderer that takes those changes and constructs the smallest possible ANSI sequence to move the cursor and update the colors. # snippet from renderer.py for x , y , cell in changes : # only move cursor if we aren't already there if not ( y == cy and x == cx ): out . append ( f " \033 [ { y + 1 } ; { x + 1 } H " ) # write the actual character with truecolor out . append ( f " \033 [38;2; { cell . fg [ 0 ] } ; { cell . fg [ 1 ] } ; { cell . fg [ 2 ] } m { cell . char } " ) after getting the engine running, i needed a way to safely inject it into the shell without destroying people’s configs. built a ShellIntegration class that detects zsh/bash/fish, backs up the config, and safely appends a wrapper. # >>> clearfx managed block >>> if command -v clearfx &>/dev/null ; then clear () { command clearfx play --clear-after } fi # <<< clearfx managed block <<< i spent like 10 hours just getting the core engine to hit 60fps consistently. python is slow, so minimizing string concatenations and using sys.stdout.buffer.write instead of print() was mandatory. next up was actually building out the animation formats and getting a marketplace running so people could share these.
devlog 2: nuking the backend and building a safe package format so after the engine was running, i needed a marketplace. initially i spun up a whole fastAPI backend, but maintaining that sounded like a nightmare. so i ripped it all out and moved the entire catalog to firebase. but here’s the catch: if i’m letting randos upload python animations to a public marketplace, they could literally just inject os.system("rm -rf /") inside their design.py and wipe everyone’s machines when they run clear . security was a massive issue. to fix this, i built a compiler that parses the python animation locally, extracts all the elements and keyframes, and bakes them into a purely declarative design.json . def pack ( self , directory : str | Path ) -> Path : # we literally run their code in an isolated builder # and dump the resulting state. no logic is saved. design_data = { " elements " : builder . _elements , " keyframes " : builder . _keyframes , " config " : builder . _config } with zipfile . ZipFile ( out_path , ' w ' ) as zf : zf . writestr ( " manifest.toml " , toml_content ) zf . writestr ( " design.json " , json . dumps ( design_data )) this means .clearfx packages are just dumb JSON files. the CLI’s DesignInterpreter reads the JSON and feeds it back into the engine safely. zero arbitrary code execution. then i had to build the web studio so people could preview their animations in the browser. getting a live terminal running in react is a pain. i used xterm.js on the frontend, and built a websocket server in python using pty.fork() to spin up a fake terminal session. @app.websocket ( " /ws/studio " ) async def websocket_studio ( websocket : WebSocket , width : int = 80 , height : int = 24 ): pid , fd = pty . fork () if pid == 0 : # child process - sets up the fake terminal size winsize = struct . pack ( " HHHH " , height , width , 0 , 0 ) fcntl . ioctl ( sys . stdout . fileno (), termios . TIOCSWINSZ , winsize ) os . execvpe ( " python " , [ " python " , " -m " , " clearfx.cli.main " , " preview " , temp_dir ], env ) so when you click “execute” in the web UI, it literally sends the python code over websockets, saves it to a temp dir, forks a new PTY, runs the engine natively, and pipes the raw ANSI output back to xterm.js . it’s basically magic. but the resize bugs were driving me insane.
devlog 3: debugging hell and nuking the UI bruh the last 10 hours were an absolute nightmare. the web UI preview was completely broken. you’d hit play, and it would just flash and disappear. i was losing my mind trying to figure out why the terminal was instantly clearing itself. turns out, the core engine’s TerminalSession was doing its job too well. when the animation finished, it sent the ANSI sequence to exit the alternate screen buffer, which is exactly what you want in a real terminal. but in xterm.js , exiting the alternate screen just leaves you with a blank black box! had to wire up a --keep-screen flag all the way through the CLI architecture to intercept that sequence when running inside the web preview. # src/clearfx/engine/terminal.py def __exit__ ( self , exc_type , exc_val , exc_tb ): if not self . keep_screen : # restore alternate screen self . write ( b " \033 [?1049l " ) then there was the resizing bug. xterm.js was fitting to the container, but the PTY backend was hardcoded to 80x24. so it looked super misaligned. had to intercept term.cols and term.rows in React and pass them through the WebSocket JSON payload. wsRef . current . send ( JSON . stringify ({ type : ' run ' , code , width : termRef . current . cols , height : termRef . current . rows })); once the bugs were dead, i looked at the web UI and realized it looked like generic SaaS slop. huge glowing pills, purple gradients everywhere… it was dog shit. so i nuked index.css entirely. built a custom design system inspired by factory.ai. pure dark operations console vibes. strictly monochrome, 8px spacing grid, geist monospace fonts for technical labels, and tiny orange/green signal dots instead of giant colored backgrounds. /* replaced the generic slop with this */ :root { --bg-canvas : #101010 ; --bg-surface : #1D1A18 ; --border-hairline : #34312F ; --signal-orange : #EE6018 ; --font-mono : 'Geist Mono' , monospace ; } the hero section now has a literal UI-in-UI terminal preview embedded in a custom .product-frame . the whole app feels like a precision engineering tool now, not a marketing page. we finally shipped a safe, strictly declarative, gorgeous terminal engine.
Fixed vercel hosting hell, the whole thing js didnt want to work for soon long, small fix not much, not writing a huge devlog, because the ships already done, and probably wont be working on this again moving forward
Ships:
A small CLI + website where people can upload TUI designs, and anyone can make those TUI animations show up whenever they type a specific command in their terminal like “clear” or “ls” while also doing the job of that command!!! Package Manager Install the core CLI globally via pip. pip install clearfx Shell Hooks Initialize shell integrations to wrap the clear command automatically. clearfx setup-shell Quick Wrap Want to animate a specific command? Wrap it directly (e.g., wrap ls with the Aurora Fold animation). clearfx wrap ls --anim aurora-fold Reload Shell Source your configuration file to apply the newly added shell hooks. source ~/.bashrc # or ~/.zshrc if you wanna stop the animation you can run clearfx reset...
|
1792878689.518756
|
1793742689.518756
|
|
42701
|
OpenBrain by @Praknoor | Stardance
|
Praknoor
|
1
|
22.97
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T10:27:57Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "yoo gng so this is v1, it has some bugs, pls forgive me but other updates will be rolled out soon……..so this basicly is like a platform where u can create ai agents and finetune llm localy, i haven’t made it public since i would need a server😭😭 for the finetuning so it’s all local ………….also pls this video it shows all the functions https://youtu.be/tX9TiHpuJhE?is=FIUTSD5F6_O4ri6c", "repo": "https://github.com/GurnoorLog/OpenBrain", "demo": "https://hub.docker.com/r/praknoor/openbrain-runtime"}]...
|
[{"post_id": 50421, "ts": "202 [{"post_id": 50421, "ts": "2026-08-19T16:17:18Z", "hours": 1.9731, "text": "yoo gng just added a setup file, it will guuide u how to use it and all, also optimized the platform and improved a bit the ui……"}, {"post_id": 40358, "ts": "2026-08-03T20:10:05Z", "hours": 0.7589, "text": "Check-out this video gng … https://youtu.be/tX9TiHpuJhE?is=FIUTSD5F6_O4ri6c"}, {"post_id": 40153, "ts": "2026-08-03T15:36:20Z", "hours": 3.1997, "text": "added a tui……….this is where u will export ure .brain files"}, {"post_id": 40028, "ts": "2026-08-03T11:42:12Z", "hours": 2.8733, "text": "lol gng i am having some crazy ideas……so i am creating a cli, sdk…….. no spoilers gng 😭😭🤣🤣🤣🤣 i am cooking something great stay tuned"}, {"post_id": 39700, "ts": "2026-08-02T20:43:04Z", "hours": 5.0556, "text": "just polished the ui and the canva engine"}, {"post_id": 39366, "ts": "2026-08-02T09:32:56Z", "hours": 8.6433, "text": "yoo gng i have built this landing page… i have also built the core functions where u can create AI brain on a visual canvas, then fine-tune and ship it, soon it will be made public the site"}]...
|
Title: OpenBrain by @Praknoor | Stardance
Devlogs Title: OpenBrain by @Praknoor | Stardance
Devlogs:
yoo gng i have built this landing page… i have also built the core functions where u can create AI brain on a visual canvas, then fine-tune and ship it, soon it will be made public the site
just polished the ui and the canva engine
lol gng i am having some crazy ideas……so i am creating a cli, sdk…….. no spoilers gng 😭😭🤣🤣🤣🤣 i am cooking something great stay tuned
added a tui……….this is where u will export ure .brain files
Check-out this video gng … https://youtu.be/tX9TiHpuJhE?is=FIUTSD5F6_O4ri6c
yoo gng just added a setup file, it will guuide u how to use it and all, also optimized the platform and improved a bit the ui……
Ships:
yoo gng so this is v1, it has some bugs, pls forgive me but other updates will be rolled out soon……..so this basicly is like a platform where u can create ai agents and finetune llm localy, i haven’t made it public since i would need a server😭😭 for the finetuning so it’s all local ………….also pls this video it shows all the functions https://youtu.be/tX9TiHpuJhE?is=FIUTSD5F6_O4ri6c...
|
1793569834.0902424
|
1793656234.0902424
|
|
42749
|
WebOS1 by @kevinamir | Stardance
|
kevinamir
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T21:15:30Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an OS called Kevin OS it has draggable windows and a dark mode toggle which was kinda hard to make but I figured it out I faced some challenges such as the dark mode toggle and idk why but the devlogs weren’t tracking the time so I waited a day to post each devlog and then it worked and I hope you like it :D", "repo": "https://github.com/kevinamirr1/Kevin-OS", "demo": "https://kevinamirr1.github.io/Kevin-OS/"}]...
|
[{"post_id": 43533, "ts": "202 [{"post_id": 43533, "ts": "2026-08-08T21:07:09Z", "hours": 0.2667, "text": "I added a dark mode toggle"}, {"post_id": 42908, "ts": "2026-08-07T21:16:39Z", "hours": 0.4897, "text": "I added draggable windows to the Kevin OS"}, {"post_id": 39130, "ts": "2026-08-01T20:54:40Z", "hours": 1.115, "text": "Kevin OS"}]...
|
Title: WebOS1 by @kevinamir | Stardance
Devlogs:
Title: WebOS1 by @kevinamir | Stardance
Devlogs:
Kevin OS
I added draggable windows to the Kevin OS
I added a dark mode toggle
Ships:
I made an OS called Kevin OS it has draggable windows and a dark mode toggle which was kinda hard to make but I figured it out I faced some challenges such as the dark mode toggle and idk why but the devlogs weren’t tracking the time so I waited a day to post each devlog and then it worked and I hope you like it :D...
|
1793526512.5893452
|
1793612912.5893452
|
|
42785
|
Completing My Coursera Course by @abhi_lenkala | S Completing My Coursera Course by @abhi_lenkala | Stardance...
|
abhi_lenkala
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T18:21:33Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "there is a lot left im just trying to do this before i forget", "repo": "https://github.com/26lenkalaa/AI-ML-Models-and-Practice-", "demo": "https://github.com/26lenkalaa/AI-ML-Models-and-Practice-/issues"}]...
|
[{"post_id": 39607, "ts": "202 [{"post_id": 39607, "ts": "2026-08-02T18:17:00Z", "hours": 0.8339, "text": "I worked on completing my Coursera Microsoft AI/ML engineering course, learning how to build a convolutional neural network and a webscraper."}]...
|
Title: Completing My Coursera Course by @abhi_lenk Title: Completing My Coursera Course by @abhi_lenkala | Stardance
Devlogs:
I worked on completing my Coursera Microsoft AI/ML engineering course, learning how to build a convolutional neural network and a webscraper.
Ships:
there is a lot left im just trying to do this before i forget...
|
1793573701.418098
|
1793660101.418098
|
|
42787
|
Calculator in Assembly by @kingvon | Stardance
|
kingvon
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-17T19:40:05Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Basic Calc in x86_64 Assembly wanted to learn assembly so wrote this, its not a full fledged calc but it does support somethings supports + - * / only linux _ checks for invalid op, invalid digits, empty input, negative output, divide by zero, u64 overflow check readme and build from source", "repo": "https://github.com/pratiksingh94/calc-in-assembly", "demo": "https://github.com/pratiksingh94/calc-in-assembly/releases/tag/v0.1"}]...
|
[{"post_id": 80473, "ts": "202 [{"post_id": 80473, "ts": "2026-10-17T19:30:40Z", "hours": 1.9289, "text": "Multiple shi did a lot of lil things, just wanted to complete this and ship to get 3 stardust so i can get the buds _ things i did: added negative number guard added invalid number check added operation check added u64 overflow check"}, {"post_id": 39707, "ts": "2026-08-02T20:47:01Z", "hours": 0.5239, "text": "Added Subtraction, Multiplication, Division they were all easy, everything after itoa was easy so far. also made github repo and the readme has my todo stuff too."}, {"post_id": 39653, "ts": "2026-08-02T19:37:08Z", "hours": 1.4456, "text": "Addition yeah it can do addition now, but 1h 24m to make that? hell NO. most of the time went on a stupid Integer to ASCII conversion function it was so hard to implement but i did it at the end the calculator lacks hella checks tho, you can do “hi + hello” and get 620280 (yes literally idk how)"}, {"post_id": 39061, "ts": "2026-08-01T18:57:13Z", "hours": 0.9236, "text": "made atoi ASCII to integer conversion i am an idiot so i accidenttely said “itoa” in git commit T_T (integer to ASCII) yeah not much to show right now, just took almost an hour debugging and trying to fix the the loop screenshot shows i entered those values which is taken as ASCII and the output from reading the num1 and num2 bytes it prints those as numbers"}, {"post_id": 38973, "ts": "2026-08-01T16:23:54Z", "hours": 0.5319, "text": "made those CLI messages and input reading basic write and read syscalls"}]...
|
Title: Calculator in Assembly by @kingvon | Starda Title: Calculator in Assembly by @kingvon | Stardance
Devlogs:
made those CLI messages and input reading basic write and read syscalls
made atoi ASCII to integer conversion i am an idiot so i accidenttely said “itoa” in git commit T_T (integer to ASCII) yeah not much to show right now, just took almost an hour debugging and trying to fix the the loop screenshot shows i entered those values which is taken as ASCII and the output from reading the num1 and num2 bytes it prints those as numbers
Addition yeah it can do addition now, but 1h 24m to make that? hell NO. most of the time went on a stupid Integer to ASCII conversion function it was so hard to implement but i did it at the end the calculator lacks hella checks tho, you can do “hi + hello” and get 620280 (yes literally idk how)
Added Subtraction, Multiplication, Division they were all easy, everything after itoa was easy so far. also made github repo and the readme has my todo stuff too.
Multiple shi did a lot of lil things, just wanted to complete this and ship to get 3 stardust so i can get the buds _ things i did: added negative number guard added invalid number check added operation check added u64 overflow check
Ships:
Basic Calc in x86_64 Assembly wanted to learn assembly so wrote this, its not a full fledged calc but it does support somethings supports + - * / only linux _ checks for invalid op, invalid digits, empty input, negative output, divide by zero, u64 overflow check readme and build from source...
|
1793354192.327955
|
1793440592.327955
|
|
42806
|
Auto Music Metadata by @u9328009 | Stardance
|
u9328009
|
1
|
19.78
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T18:10:31Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made add metadata for music file It can change metadata or add album cover from deezer It has player and more I use AI to make many part but I don’t use to build AI all UI file is completely made by me you can use web demo on below link https://musicautometadata-nsb8temjdrd4mqh3v32m3a.streamlit.app/ I recommend download file and use all tools", "repo": "https://github.com/u9328009/Music_Auto_Metadata", "demo": "https://music-auto-metadata-ouid.vercel.app/?_vercel_share=zjyfNAlRKDOp70rXAcRFoHPpgsPgA2Ln/"}]...
|
[{"post_id": 42566, "ts": "202 [{"post_id": 42566, "ts": "2026-08-07T11:51:21Z", "hours": 1.7781, "text": "fix the problems change web demo to vercel change readme and add video guide!"}, {"post_id": 41464, "ts": "2026-08-05T18:03:21Z", "hours": 0.5114, "text": "Made web demo! https://musicautometadata-nsb8temjdrd4mqh3v32m3a.streamlit.app/ try on here! It only work add metadata"}, {"post_id": 41432, "ts": "2026-08-05T17:12:58Z", "hours": 9.1544, "text": "Made 1st build now can install from github very long time to made If you use share your what point is my program make uncomfortable to use Some day I will separate the player"}, {"post_id": 40315, "ts": "2026-08-03T19:05:11Z", "hours": 1.0636, "text": "Made all ui and and add more tool built in player and see metadata"}, {"post_id": 39616, "ts": "2026-08-02T18:32:07Z", "hours": 6.6169, "text": "Auto find album cover"}, {"post_id": 39020, "ts": "2026-08-01T17:55:48Z", "hours": 1.105, "text": "New Project Add Auto Metadata for Music I has many cd and tape but file only is hard to find so I make program for auto add metadata next day job list make first working version publish version alpha use my file and feedback my self"}]...
|
Title: Auto Music Metadata by @u9328009 | Stardanc Title: Auto Music Metadata by @u9328009 | Stardance
Devlogs:
New Project Add Auto Metadata for Music I has many cd and tape but file only is hard to find so I make program for auto add metadata next day job list make first working version publish version alpha use my file and feedback my self
Auto find album cover
Made all ui and and add more tool built in player and see metadata
Made 1st build now can install from github very long time to made If you use share your what point is my program make uncomfortable to use Some day I will separate the player
Made web demo! https://musicautometadata-nsb8temjdrd4mqh3v32m3a.streamlit.app/ try on here! It only work add metadata
fix the problems change web demo to vercel change readme and add video guide!
Ships:
I made add metadata for music file It can change metadata or add album cover from deezer It has player and more I use AI to make many part but I don’t use to build AI all UI file is completely made by me you can use web demo on below link https://musicautometadata-nsb8temjdrd4mqh3v32m3a.streamlit.app/ I recommend download file and use all tools...
|
1793577016.019742
|
1793663416.019742
|
|
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....
|
1793577250.8372037
|
1793663650.8372037
|
|
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....
|
1793577254.804506
|
1793663654.804506
|
|
42885
|
Slack Bot by @Dupl1c8 | Stardance
|
Dupl1c8
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-05T22:04:53Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a slack bot that has six basic commands and a blackjack game. The basic commands are help, ping, catfact, joke, quote, and myfavquote. The basic commands were quite simple to code, but blackjack took me the most time and it was the most complex. Thank you for testing out my bot!", "repo": "https://github.com/Duplic8/FirstSlackBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0P5NE354"}]...
|
[{"post_id": 40343, "ts": "202 [{"post_id": 40343, "ts": "2026-08-03T19:45:55Z", "hours": 1.6203, "text": "Added blackjack to my bot! This was a significantly bigger project compared to the simpler commands I had before. I also changed the commands to be shorter (from /pe21firstbot- to just /pe21- )so that they are easier to type. Hopefully I can host my bot on nest soon!"}, {"post_id": 39878, "ts": "2026-08-03T04:43:18Z", "hours": 0.6872, "text": "Worked on making a few slack commands that give the user various texts such as a quote, a cat fact, or a joke! Now I plan on adding a blackjack game."}]...
|
Title: Slack Bot by @Dupl1c8 | Stardance
Devlogs: Title: Slack Bot by @Dupl1c8 | Stardance
Devlogs:
Worked on making a few slack commands that give the user various texts such as a quote, a cat fact, or a joke! Now I plan on adding a blackjack game.
Added blackjack to my bot! This was a significantly bigger project compared to the simpler commands I had before. I also changed the commands to be shorter (from /pe21firstbot- to just /pe21- )so that they are easier to type. Hopefully I can host my bot on nest soon!
Ships:
I made a slack bot that has six basic commands and a blackjack game. The basic commands are help, ping, catfact, joke, quote, and myfavquote. The basic commands were quite simple to code, but blackjack took me the most time and it was the most complex. Thank you for testing out my bot!...
|
1793408123.7651253
|
1793494523.7651253
|
|
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....
|
1793577256.0422528
|
1793663656.0422528
|
|
42887
|
Stellar Gallery by @laurengracebroadbent | Stardan Stellar Gallery by @laurengracebroadbent | Stardance...
|
laurengracebroadbent
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T20:52:44Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created Stellar Gallery, a space-themed image gallery that utilizes NASA’s Astronomy Picture of the Day (APOD) API. The website allows users to explore astronomy images, view detailed descriptions, and save their favorite photos for later. One of the biggest challenges was working on the favorites page. I had trouble getting the saved images to display correctly, and I was not able to fully fix the issue yet. I am proud of the overall design and progress I made on Stellar Gallery.", "repo": "https://github.com/lambie93/stellar-gallery", "demo": "https://lambie93.github.io/stellar-gallery/"}]...
|
[{"post_id": 39701, "ts": "202 [{"post_id": 39701, "ts": "2026-08-02T20:43:15Z", "hours": 4.9217, "text": "I worked on improving Stellar Gallery by focusing on the main page styling and the favorites page. I spent time adjusting the layout, colors, fonts, and overall design to make the website feel more polished and organized. I also worked on the favorites page, but I ran into some issues with getting the saved images to appear correctly. I looked through my code and tried to figure out what was causing the problem, but I was not able to fully fix it yet. Next, I want to continue refining the main page and work on fixing the image display issues on the favorites page."}]...
|
Title: Stellar Gallery by @laurengracebroadbent | Title: Stellar Gallery by @laurengracebroadbent | Stardance
Devlogs:
I worked on improving Stellar Gallery by focusing on the main page styling and the favorites page. I spent time adjusting the layout, colors, fonts, and overall design to make the website feel more polished and organized. I also worked on the favorites page, but I ran into some issues with getting the saved images to appear correctly. I looked through my code and tried to figure out what was causing the problem, but I was not able to fully fix it yet. Next, I want to continue refining the main page and work on fixing the image display issues on the favorites page.
Ships:
I created Stellar Gallery, a space-themed image gallery that utilizes NASA’s Astronomy Picture of the Day (APOD) API. The website allows users to explore astronomy images, view detailed descriptions, and save their favorite photos for later. One of the biggest challenges was working on the favorites page. I had trouble getting the saved images to display correctly, and I was not able to fully fix the issue yet. I am proud of the overall design and progress I made on Stellar Gallery....
|
1793408127.7176218
|
1793494527.7176218
|
|
42890
|
CoordsCopy v2.0 by @MarioS271 | Stardance
|
MarioS271
|
1
|
6.0
|
65
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T15:42:42Z", "hours": 6.0, "multiplier": 8.65, "payout": 65, "blessing": "neutral", "text": "Hey there! :) Welcome to another one of my minecraft mods, ✨CoordsCopy v2.0 ✨. Why v2.0? Well, I’ve decided I want to boost availiability across versions and loaders to make it possible for everyone on forge (1.16.5 and 1.17.1-1.20.1), neoforge (1.20.4 and 1.20.6-latest) and fabric (1.16.5 and 1.17.1-latest) to use it. For that reason, decided to rewrite the mod using a tool called stonecutter to make that possible. Guide for trying the mod Disclaimer: If you do not own minecraft, I suggest you skip reviewing this (with the little skip button at the top of the page), as you won’t be able to try this properly. Press the “Try Project” button to go to the latest release of the mod Download the .jar file for the loader you want to use (i recommend fabric, also DONT download the sources jar) Install the mod somewhere 3.1) If you only have unmodded or normal minecraft consider skipping because it takes a bit of time to get modded minecraft set up. If you want to still do that, I’d really appreciate it tho! :) 3.2) Drop the jar in your launcher/mods folder. Done! Default Keybinds: [F9] Copy Player Position [f10] Copy Block Position (of block you’re currently looking at) [F12] Open Config Menu (also possible via the Mod Menu) I hope you have fun trying the mod! :)", "repo": "https://github.com/MarioS271/coords_copy", "demo": "https://www.curseforge.com/minecraft/mc-mods/coordscopy"}]...
|
[{"post_id": 39750, "ts": "202 [{"post_id": 39750, "ts": "2026-08-02T22:18:04Z", "hours": 1.8672, "text": "FINALLY got everything working again All versions are tested, but of course the maven servers the mod needs for building are NOT reliable. I’ve just had to cancel 10+ CI/CD runs just because maven servers timed out. Keep in mind, each run takes ~20min (which I actually also finally reduced down to ~5min). Only gotta build & publish everything now!"}, {"post_id": 39644, "ts": "2026-08-02T19:26:00Z", "hours": 2.4325, "text": "god DAMN it Well… I found out today that all the versions I had published up until that point had the config setting’s effect inverted. ADDITIONALLY, the forge version was just straight up broken. Turns out, it’s a stupid idea to not register KeyInputHandler.onKeyTick under Neoforge’s onClientTick event. Other Changes Instead of the setting in the config screen being a true/false value with “Show output in chat instead of actionbar”, the config value is now “Message Location” with a button that toggles between actionbar and chat for better UX."}, {"post_id": 39185, "ts": "2026-08-01T23:43:43Z", "hours": 1.8925, "text": "Just started refactoring another one of my mods, CoordsCopy! 1.16.5-fabric already works, now I’m just trying to get forge and CI/CD running for today. oh and look cool new logo :D"}]...
|
Title: CoordsCopy v2.0 by @MarioS271 | Stardance
Title: CoordsCopy v2.0 by @MarioS271 | Stardance
Devlogs:
Just started refactoring another one of my mods, CoordsCopy! 1.16.5-fabric already works, now I’m just trying to get forge and CI/CD running for today. oh and look cool new logo :D
god DAMN it Well… I found out today that all the versions I had published up until that point had the config setting’s effect inverted. ADDITIONALLY, the forge version was just straight up broken. Turns out, it’s a stupid idea to not register KeyInputHandler.onKeyTick under Neoforge’s onClientTick event. Other Changes Instead of the setting in the config screen being a true/false value with “Show output in chat instead of actionbar”, the config value is now “Message Location” with a button that toggles between actionbar and chat for better UX.
FINALLY got everything working again All versions are tested, but of course the maven servers the mod needs for building are NOT reliable. I’ve just had to cancel 10+ CI/CD runs just because maven servers timed out. Keep in mind, each run takes ~20min (which I actually also finally reduced down to ~5min). Only gotta build & publish everything now!
Ships:
Hey there! :) Welcome to another one of my minecraft mods, ✨CoordsCopy v2.0 ✨. Why v2.0? Well, I’ve decided I want to boost availiability across versions and loaders to make it possible for everyone on forge (1.16.5 and 1.17.1-1.20.1), neoforge (1.20.4 and 1.20.6-latest) and fabric (1.16.5 and 1.17.1-latest) to use it. For that reason, decided to rewrite the mod using a tool called stonecutter to make that possible. Guide for trying the mod Disclaimer: If you do not own minecraft, I suggest you skip reviewing this (with the little skip button at the top of the page), as you won’t be able to try this properly. Press the “Try Project” button to go to the latest release of the mod Download the .jar file for the loader you want to use (i recommend fabric, also DONT download the sources jar) Install the mod somewhere 3.1) If you only have unmodded or normal minecraft consider skipping because it takes a bit of time to get modded minecraft set up. If you want to still do that, I’d really appreciate it tho! :) 3.2) Drop the jar in your launcher/mods folder. Done! Default Keybinds: [F9] Copy Player Position [f10] Copy Block Position (of block you’re currently looking at) [F12] Open Config Menu (also possible via the Mod Menu) I hope you have fun trying the mod! :)...
|
1793408138.3876605
|
1793494538.3876605
|
|
42907
|
LifeTab by @CadenO | Stardance
|
CadenO
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T22:19:06Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a new tab webpage with Conway’s game of life running in the background. It can search google, follow web addresses, and look satisfying! I had the most trouble with using CSS to lay things out, as I haven’t done a lot of frontend in a while, but I am content with how it looks.", "repo": "https://github.com/Cesium72/LifeTab", "demo": "https://cesium72.github.io/LifeTab/"}]...
|
[{"post_id": 41455, "ts": "202 [{"post_id": 41455, "ts": "2026-08-05T17:47:33Z", "hours": 1.9761, "text": "I’ve been making LifeTab, a new tab page with John Conway’s game of life running in the background. So far, the image basically shows it all, as I haven’t done frontend in a while."}]...
|
Title: LifeTab by @CadenO | Stardance
Devlogs:
I’ Title: LifeTab by @CadenO | Stardance
Devlogs:
I’ve been making LifeTab, a new tab page with John Conway’s game of life running in the background. So far, the image basically shows it all, as I haven’t done frontend in a while.
Ships:
I made a new tab webpage with Conway’s game of life running in the background. It can search google, follow web addresses, and look satisfying! I had the most trouble with using CSS to lay things out, as I haven’t done a lot of frontend in a while, but I am content with how it looks....
|
1793436950.1819735
|
1793523350.1819735
|
|
42909
|
Patio Light Hooks by @cadencrouch88 | Stardance
|
cadencrouch88
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T06:55:48Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made patio light hooks that don’t require any drilling to attach. The design came after a problem I had with adhesive strip clips not holding well due to the tension in the string lights. With this clip, it should be able to bear the tension and hold up the string lights. The most difficult thing about this project was setting up GitHub for the first time and learning how to reference images and screenshots. This is my first ship, so I know that there will be problems that will need fixing. However, I’m glad that I was able to post a simple project that introduced me to the process of building on stardance and hopefully will lead to more complex projects. In the off-chance that someone wants to use this project, it should just be known that the dimensions will probably have to change for each component that you have (patio plank width and wire diameter). I found that a tolerance of 5 thou was about right for me and led to a near press fit for both the wire and the patio plank.", "repo": "https://github.com/CCrouch88/Patio-Light-Hooks", "demo": ""}]...
|
[{"post_id": 40571, "ts": "202 [{"post_id": 40571, "ts": "2026-08-04T06:47:38Z", "hours": 0.3067, "text": "First V1 test successful, the print failed about 75% through because of a spool error, but it didn’t affect the usability. Possible iterations for V2 might include tighter tolerance or shortening the clip width."}, {"post_id": 39259, "ts": "2026-08-02T03:37:19Z", "hours": 0.4744, "text": "Patio Light Hooks - In this devlog, being my first, I wanted to test out the lapse recording feature as well as make an initial design sketch and 3D CAD model. The sketch features some of the necessary dimensions I needed to consider when making the hook, and the CAD model reflects the design decisions. I accidentally recorded the wrong tab for the CAD model and couldn’t find a way to edit the footage or rerecord. So I’ll attach the progress I made so far and fix the error during the rest of the process."}]...
|
Title: Patio Light Hooks by @cadencrouch88 | Stard Title: Patio Light Hooks by @cadencrouch88 | Stardance
Devlogs:
Patio Light Hooks - In this devlog, being my first, I wanted to test out the lapse recording feature as well as make an initial design sketch and 3D CAD model. The sketch features some of the necessary dimensions I needed to consider when making the hook, and the CAD model reflects the design decisions. I accidentally recorded the wrong tab for the CAD model and couldn’t find a way to edit the footage or rerecord. So I’ll attach the progress I made so far and fix the error during the rest of the process.
First V1 test successful, the print failed about 75% through because of a spool error, but it didn’t affect the usability. Possible iterations for V2 might include tighter tolerance or shortening the clip width.
Ships:
I made patio light hooks that don’t require any drilling to attach. The design came after a problem I had with adhesive strip clips not holding well due to the tension in the string lights. With this clip, it should be able to bear the tension and hold up the string lights. The most difficult thing about this project was setting up GitHub for the first time and learning how to reference images and screenshots. This is my first ship, so I know that there will be problems that will need fixing. However, I’m glad that I was able to post a simple project that introduced me to the process of building on stardance and hopefully will lead to more complex projects. In the off-chance that someone wants to use this project, it should just be known that the dimensions will probably have to change for each component that you have (patio plank width and wire diameter). I found that a tolerance of 5 thou was about right for me and led to a near press fit for both the wire and the patio plank....
|
1793436952.3333707
|
1793523352.3333707
|
|
42911
|
MineAscii by @renanfartes | Stardance
|
renanfartes
|
1
|
43.35
|
359
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T16:11:23Z", "hours": 40.0, "multiplier": 9.06, "payout": 359, "blessing": "neutral", "text": "I made a OpenGL based voxel engine with a terminal Renderer in raw C! The game uses RGB TrueColors ansi scape codes in a buffer before printing it all ar once. It also compreses the RGB colors. The main problem i handled was developing hours without seeing something opn the screen in C. But i managed to got it working with block clulling, chunk and mesh generation logic.", "repo": "https://github.com/Renan-G-projec/MineAscii", "demo": "https://github.com/Renan-G-projec/MineAscii/releases/tag/v0.1.0"}]...
|
[{"post_id": 58747, "ts": "202 [{"post_id": 58747, "ts": "2026-08-31T09:43:02Z", "hours": 3.3486, "text": "Devlog 19 Tree shaking, RLE and terminal checking. I tried to implement a feature that would make the terminal scale accordingly with the users terminal. It was the hardest thing i would have to handle in C. I tried callbacks to resize, signals and so more and it didn’t work. The feature would detect any changes on the size and adapt itself. After hours i just deleted the branch and focused on developing the tree shaking (it is complete!) and now the game does not start when the terminal is not big enough. Next step is to change line breaks with move cursor instructions and move the syscalls to macros so i can add a windows version asap! Also, now the z key exits gracefully unloading everything. AMDG"}, {"post_id": 55540, "ts": "2026-08-27T13:44:47Z", "hours": 0.275, "text": "Devlog 18 Just imprved the readme and added demo video. I also improve the resolution!"}, {"post_id": 55531, "ts": "2026-08-27T13:22:01Z", "hours": 3.0394, "text": "Devlog 17 Finally got it to work!!!! I refactored the code so it supports easy tree shaking (yet is not fully implemented) The termios reads input nonblock and then the game can effectivelly be played (bu terminals reads only one key at a time. This issue i cannot fix right now and it if i try to take input another way the game shall not work on wayland by now.)"}, {"post_id": 54446, "ts": "2026-08-25T13:52:05Z", "hours": 2.9392, "text": "Devlog 16 Terminal Rendering and block placing changed to Stone I implemented a reallyh bad way of printing the terminal to the screen. It works by copyting the pixels from the opengl context, but the code is a mess and the line breaking is weird at dicfferent terminals (i’m using kitty) I will refactor and optimize this by making a component which is responsibgle from receivend the pixels, mounting a ultra optimized string and printing it in one single syscall. Also i may use unicode characters because this shall gave me a better resolutui9on and a better experience overall I"}, {"post_id": 51660, "ts": "2026-08-21T13:43:48Z", "hours": 1.4514, "text": "Devlog 15 Hitbox Interface and Infinite chunk generation I changed the sky color and finally added infinite chunk generation. I was getting weird bugs but it was all negative coordinates stuff, so i added a offset to the perlin noise calculation. It is alfuw and to big negative coordinates it will happen again. I may need to change the lib itself or come with another solution. I also removed a dynamic memory allocation on the chunk generation, it could be made static and now the OS handles the basic allocation. Now the game loads and unloads chunks dynamically. But the render distacne can’t be above 6 or my pc starts to cry. I need to optimize this. Next steps are to add collision and maybe aw few blocks. For the first ship i don’t think i need trees or clouds or complex illumination. AMDG!"}, {"post_id": 50367, "ts": "2026-08-19T15:19:30Z", "hours": 3.2514, "text": "Devlog 14 Chunk with hashmaps and big refactor I Had TONS of headaches with my current code. The mess was a lot more messy than i thought. I changed a lot of the old code and refactored the chunk rendering system. Now the chunks can be on negative coords, the world position unit is calculated in chunks. I implemented a hashmap to calculate the chunks and implemented chunk unloading. It is not performatic (i may have to use greedy culling or even frustum culling). The dynamic chunk loading is not implemented yet but it is easy with this refactor Also i think the code leaks memory because of the hashmap implmenentaiton. I will take a look on that later."}, {"post_id": 49972, "ts": "2026-08-18T23:58:21Z", "hours": 1.8006, "text": "Devlog 13 Block deleting and Block placing Just finished the core block manegment system. The raytracing engine determines which face it has touched and the player puts the block based on that. The code is a mess. I tried implementing a face culling between chunks but failed miserably. I tried making the chunk receive the world context and it didn’t work because of circular dependency (the world imports the chunk and then imports the chunk again), and forward definitions also wasn’t solving My next urgency is to refactor and turn this mess legible. AMDG"}, {"post_id": 48904, "ts": "2026-08-17T13:49:58Z", "hours": 0.8056, "text": "Devlog 12 Visual for the raytracing! So.. I hardcoded this cube so the player can clearly see what block he is looking at. I’m really surprised that this was a lot more fast than the raytracing itself. Deleting blocks will be the next step and will be easy this this help. Unfornatly i had to use gemini to help me debug some little strange issues, even that the code itself was written by me it makes me feel dependent. I wish someone makes an AI blocker lol AMDG"}, {"post_id": 47803, "ts": "2026-08-16T00:32:16Z", "hours": 3.8569, "text": "Devlog 11 Gravity, Jump, Refactor and Raycasting I implemented a very raw way of handling with gravity and a very messy snap logic. It still works but i really do not like the code quality for that. I also added the jump logiac and refactor a lot o the code of the engine itself. Also i implemented the bassic raycasting to the next steps, which are deleting and creating blocks. I think i will have a hard time with these since there’s all the logic of which face is the player looking etc. I used gemini to decide some architectural decisions and some debugging, i’m sad to use ai even for that. Ps: Writing this Devlog for the 3rd time because i didn’t notice that the video was over 50mb. AMDG"}, {"post_id": 47274, "ts": "2026-08-15T03:02:48Z", "hours": 1.0928, "text": "Devlog 10 World generation, stone and perlin noise fized! I fixed that weird bug and added the texture to the dirt, improved a little the terrain generation system and the movimentation. The code for that is still a mess but it works. I also do not know how i can turn this terrain more natural. Just seems so uniform and feels kinda weird. Next steps are making the chunks load and unload on RAM (They’re fixed at the moment) and making the world infinite. I also need to implement gravity and collision to the player. AMDG"}, {"post_id": 47217, "ts": "2026-08-14T23:57:54Z", "hours": 3.8075, "text": "Devlog 09 Raw Chunk generation! I refactored Tons of lines of code, improved the performance and readibility and added a random and undocumented perlin noise library to generate the chunk. I also made the camera and the player 2 separated entities, so in the future if i want to add another persapective a state machine would be more easy. I added the stone block (yet it still not visible on the video) and the chunk generation stills weird. I’m gonna fix that. Also, this perlin noise library is from 12 yearss ago. It is small so maybe i can improve the documentation by opening a pull request (it doesn’t even have a README or License… So i added a reference at external/perlin/LICENSE.md AMDG"}, {"post_id": 45872, "ts": "2026-08-12T16:38:22Z", "hours": 2.9658, "text": "Devlog 08 BLock culling. Finally added block clulling to my voxel engine game! I also refactored all teh mesh generation logic and made MANY refactors to the engine. The first was to break the code into smaller pieces with different responsabilities so i can think only on the problem i am handliing with. I added CubeFace and removed hardcoded pieces. As seen on the video, faces between 2 solid blocks are not generated anymore…. my code looks dangerous on the border btw but the getBlock returns air block when out-of-index."}, {"post_id": 44145, "ts": "2026-08-09T18:25:49Z", "hours": 2.905, "text": "Devlog 07 Chunk Rendering added! I added a lot of things since last devlog. I Encapsulated the textures, organized project structure and started working on the chunk logic. I really do not like the result, it is not optimized but the goal was to see something on the screen fast. I added a block interfacee with the chunk. But i used a lot of pointers and i might be in danger if i not refactor this later or take really care with malloc. I plan to refactor and optimize the logic (faces between solid blocks still being rendered) and i really wonder how i shall add the texture mapping to this. I also had a hard time debugging this because buffer underflows were being caused by premature optimization (yall can even see in the src/core/chunk.c the comment). I used Gemini to debug the logic, but i plan to refactor and using AI makes me kidna sad even for debugging"}, {"post_id": 43548, "ts": "2026-08-08T21:37:24Z", "hours": 2.4325, "text": "Devlog 06 Movimentation + sensitivity + textures added! I added some really simple textures based on the minecraf t classic ones. I created also a texture interface class and modded some shaders because i was troubleshotting to make the atlas work. I want now to work on the core logic as we have all the basic interfaces we need (I just need to put the texture encapsulated and everything shall be ready). Chunks and mesh building will be probably next. As this is a simple model for testing the texture atlas, i raw coded the vertices and this was kinda a headache. Not doing this again for a long time. Also my index buffer was not needed because the faces had shared vertcices but the UV was totally different PS: The texture of the top face is grey because the atlas expect me to color it, but i`m to tired to do this now.. XD"}, {"post_id": 42976, "ts": "2026-08-07T23:39:04Z", "hours": 1.2256, "text": "Devlog 05 Working camera! I was trying to make the camera workingh and i had hard times with it, because opengl does not warn about anything that goes wrong with the shader stuff so it just desapears. I also learned a lot about matrices and this beautiful opengl course is helping me a lot: OpenGL by Victor Gordan . I also added really basic movements for testing. It is not a 3d object yet, it is more like a paper. I need to work in textures and model matrices while making a renderer to organize and optimize the graphical pipeline. Also all the minecraft logic needs to initialize urgently."}, {"post_id": 42310, "ts": "2026-08-06T23:27:04Z", "hours": 2.3978, "text": "Devlog 04 Added matrices library and meshs Ok, so first i coded the mesh logics and it worked well. I do not remember but i have in my memory that it was successfully added, but when i opened vs code today i realised i’ve pushed a code that didn’t compile and even don’t display anything because i did not test the logic after encapsulated. I had to go to gemini and ask it about the bug. I feel bad fort that. I also added the cglm bind to C and it worked well, i even made the square rotates with some matrices (and that was in teh commit that couldn’t compile). I removed it to debug and i’m not likelly to code this again. Next steps is to add some more logic to the Mesh such as model matrices. I plan to make the camera and start going 3d next. Also as seen on the image i added input! I made a wrapper as the GLFW will after be hidden so i don’t need to rewrite input handling in 70 different files."}, {"post_id": 41054, "ts": "2026-08-05T00:27:58Z", "hours": 2.9536, "text": "Devlog 03 Added triangles and mini library! So i learned a little techniques in C while doing this code. I coded some helper functions to handle Shaders (w/ file reading), VAOs, EBOs and VBOs, which are kinda weird to look into the raw call to opengl The functions kinda look like POO but as these objects are just simple unsigned integers i didn’t made any cache miss on that, and no allocation was indeed made. I learned to make it work alos! I hard coded everything on main then refactored line by line commiting it. The result is just a square but the base is readdy!!!"}, {"post_id": 39468, "ts": "2026-08-02T13:09:14Z", "hours": 1.5714, "text": "Devlog 02 Added basic window and linked libraries! So i spent some time adding CMAKE to the project. I do not like the semantics of these metabuild system but it is necessary and useful. I downloaded the GLAD loader and put in a external/folder. I also put by FetchContent the GLFW module so it is not on the source tree. I now have a basic window. But yall may think that this is strange, if it is ascii why would i have a window? My objective is to use the GPU to process the pixels but instead of putting it on the screen, it writes to a buffer and then my code prints using these ANSI escape codes to do RGB. I will disable the window, that’s called offscreen rendering. But to my next tests i will do the framebuffer (i changed the previous class name to ascii buffer because it’s goal is to only print on the terminal. The framebuffer shall be the OpenGL target. The framebuffer functions shall also optimize the asciibuffer by compressing those ANSI scape codes) If it works i can develop the entire game into a big screen and at the last time try to put it on the terminal. Do not know if this is a good idea. Forever"}, {"post_id": 39236, "ts": "2026-08-02T02:11:38Z", "hours": 0.8919, "text": "Devlog 01 Just started the project! I wanna make a minecraft in C that runs on the terminal. I know that will be hard as terminals were not supposed to do that kind of work but this is exactly the reason i’m using C I started developing basic framebuffer functions and got the baaasic pixel rendering."}]...
|
Title: MineAscii by @renanfartes | Stardance
Devl Title: MineAscii by @renanfartes | Stardance
Devlogs:
Devlog 01 Just started the project! I wanna make a minecraft in C that runs on the terminal. I know that will be hard as terminals were not supposed to do that kind of work but this is exactly the reason i’m using C I started developing basic framebuffer functions and got the baaasic pixel rendering.
Devlog 02 Added basic window and linked libraries! So i spent some time adding CMAKE to the project. I do not like the semantics of these metabuild system but it is necessary and useful. I downloaded the GLAD loader and put in a external/folder. I also put by FetchContent the GLFW module so it is not on the source tree. I now have a basic window. But yall may think that this is strange, if it is ascii why would i have a window? My objective is to use the GPU to process the pixels but instead of putting it on the screen, it writes to a buffer and then my code prints using these ANSI escape codes to do RGB. I will disable the window, that’s called offscreen rendering. But to my next tests i will do the framebuffer (i changed the previous class name to ascii buffer because it’s goal is to only print on the terminal. The framebuffer shall be the OpenGL target. The framebuffer functions shall also optimize the asciibuffer by compressing those ANSI scape codes) If it works i can develop the entire game into a big screen and at the last time try to put it on the terminal. Do not know if this is a good idea. Forever
Devlog 03 Added triangles and mini library! So i learned a little techniques in C while doing this code. I coded some helper functions to handle Shaders (w/ file reading), VAOs, EBOs and VBOs, which are kinda weird to look into the raw call to opengl The functions kinda look like POO but as these objects are just simple unsigned integers i didn’t made any cache miss on that, and no allocation was indeed made. I learned to make it work alos! I hard coded everything on main then refactored line by line commiting it. The result is just a square but the base is readdy!!!
Devlog 04 Added matrices library and meshs Ok, so first i coded the mesh logics and it worked well. I do not remember but i have in my memory that it was successfully added, but when i opened vs code today i realised i’ve pushed a code that didn’t compile and even don’t display anything because i did not test the logic after encapsulated. I had to go to gemini and ask it about the bug. I feel bad fort that. I also added the cglm bind to C and it worked well, i even made the square rotates with some matrices (and that was in teh commit that couldn’t compile). I removed it to debug and i’m not likelly to code this again. Next steps is to add some more logic to the Mesh such as model matrices. I plan to make the camera and start going 3d next. Also as seen on the image i added input! I made a wrapper as the GLFW will after be hidden so i don’t need to rewrite input handling in 70 different files.
Devlog 05 Working camera! I was trying to make the camera workingh and i had hard times with it, because opengl does not warn about anything that goes wrong with the shader stuff so it just desapears. I also learned a lot about matrices and this beautiful opengl course is helping me a lot: OpenGL by Victor Gordan . I also added really basic movements for testing. It is not a 3d object yet, it is more like a paper. I need to work in textures and model matrices while making a renderer to organize and optimize the graphical pipeline. Also all the minecraft logic needs to initialize urgently.
Devlog 06 Movimentation + sensitivity + textures added! I added some really simple textures based on the minecraf t classic ones. I created also a texture interface class and modded some shaders because i was troubleshotting to make the atlas work. I want now to work on the core logic as we have all the basic interfaces we need (I just need to put the texture encapsulated and everything shall be ready). Chunks and mesh building will be probably next. As this is a simple model for testing the texture atlas, i raw coded the vertices and this was kinda a headache. Not doing this again for a long time. Also my index buffer was not needed because the faces had shared vertcices but the UV was totally different PS: The texture of the top face is grey because the atlas expect me to color it, but i`m to tired to do this now.. XD
Devlog 07 Chunk Rendering added! I added a lot of things since last devlog. I Encapsulated the textures, organized project structure and started working on the chunk logic. I really do not like the result, it is not optimized but the goal was to see something on the screen fast. I added a block interfacee with the chunk. But i used a lot of pointers and i might be in danger if i not refactor this later or take really care with malloc. I plan to refactor and optimize the logic (faces between solid blocks still being rendered) and i really wonder how i shall add the texture mapping to this. I also had a hard time debugging this because buffer underflows were being caused by premature optimization (yall can even see in the src/core/chunk.c the comment). I used Gemini to debug the logic, but i plan to refactor and using AI makes me kidna sad even for debugging
Devlog 08 BLock culling. Finally added block clulling to my voxel engine game! I also refactored all teh mesh generation logic and made MANY refactors to the engine. The first was to break the code into smaller pieces with different responsabilities so i can think only on the problem i am handliing with. I added CubeFace and removed hardcoded pieces. As seen on the video, faces between 2 solid blocks are not generated anymore…. my code looks dangerous on the border btw but the getBlock returns air block when out-of-index.
Devlog 09 Raw Chunk generation! I refactored Tons of lines of code, improved the performance and readibility and added a random and undocumented perlin noise library to generate the chunk. I also made the camera and the player 2 separated entities, so in the future if i want to add another persapective a state machine would be more easy. I added the stone block (yet it still not visible on the video) and the chunk generation stills weird. I’m gonna fix that. Also, this perlin noise library is from 12 yearss ago. It is small so maybe i can improve the documentation by opening a pull request (it doesn’t even have a README or License… So i added a reference at external/perlin/LICENSE.md AMDG
Devlog 10 World generation, stone and perlin noise fized! I fixed that weird bug and added the texture to the dirt, improved a little the terrain generation system and the movimentation. The code for that is still a mess but it works. I also do not know how i can turn this terrain more natural. Just seems so uniform and feels kinda weird. Next steps are making the chunks load and unload on RAM (They’re fixed at the moment) and making the world infinite. I also need to implement gravity and collision to the player. AMDG
Devlog 11 Gravity, Jump, Refactor and Raycasting I implemented a very raw way of handling with gravity and a very messy snap logic. It still works but i really do not like the code quality for that. I also added the jump logiac and refactor a lot o the code of the engine itself. Also i implemented the bassic raycasting to the next steps, which are deleting and creating blocks. I think i will have a hard time with these since there’s all the logic of which face is the player looking etc. I used gemini to decide some architectural decisions and some debugging, i’m sad to use ai even for that. Ps: Writing this Devlog for the 3rd time because i didn’t notice that the video was over 50mb. AMDG
Devlog 12 Visual for the raytracing! So.. I hardcoded this cube so the player can clearly see what block he is looking at. I’m really surprised that this was a lot more fast than the raytracing itself. Deleting blocks will be the next step and will be easy this this help. Unfornatly i had to use gemini to help me debug some little strange issues, even that the code itself was written by me it makes me feel dependent. I wish someone makes an AI blocker lol AMDG
Devlog 13 Block deleting and Block placing Just finished the core block manegment system. The raytracing engine determines which face it has touched and the player puts the block based on that. The code is a mess. I tried implementing a face culling between chunks but failed miserably. I tried making the chunk receive the world context and it didn’t work because of circular dependency (the world imports the chunk and then imports the chunk again), and forward definitions also wasn’t solving My next urgency is to refactor and turn this mess legible. AMDG
Devlog 14 Chunk with hashmaps and big refactor I Had TONS of headaches with my current code. The mess was a lot more messy than i thought. I changed a lot of the old code and refactored the chunk rendering system. Now the chunks can be on negative coords, the world position unit is calculated in chunks. I implemented a hashmap to calculate the chunks and implemented chunk unloading. It is not performatic (i may have to use greedy culling or even frustum culling). The dynamic chunk loading is not implemented yet but it is easy with this refactor Also i think the code leaks memory because of the hashmap implmenentaiton. I will take a look on that later.
Devlog 15 Hitbox Interface and Infinite chunk generation I changed the sky color and finally added infinite chunk generation. I was getting weird bugs but it was all negative coordinates stuff, so i added a offset to the perlin noise calculation. It is alfuw and to big negative coordinates it will happen again. I may need to change the lib itself or come with another solution. I also removed a dynamic memory allocation on the chunk generation, it could be made static and now the OS handles the basic allocation. Now the game loads and unloads chunks dynamically. But the render distacne can’t be above 6 or my pc starts to cry. I need to optimize this. Next steps are to add collision and maybe aw few blocks. For the first ship i don’t think i need trees or clouds or complex illumination. AMDG!
Devlog 16 Terminal Rendering and block placing changed to Stone I implemented a reallyh bad way of printing the terminal to the screen. It works by copyting the pixels from the opengl context, but the code is a mess and the line breaking is weird at dicfferent terminals (i’m using kitty) I will refactor and optimize this by making a component which is responsibgle from receivend the pixels, mounting a ultra optimized string and printing it in one single syscall. Also i may use unicode characters because this shall gave me a better resolutui9on and a better experience overall I
Devlog 17 Finally got it to work!!!! I refactored the code so it supports easy tree shaking (yet is not fully implemented) The termios reads input nonblock and then the game can effectivelly be played (bu terminals reads only one key at a time. This issue i cannot fix right now and it if i try to take input another way the game shall not work on wayland by now.)
Devlog 18 Just imprved the readme and added demo video. I also improve the resolution!
Devlog 19 Tree shaking, RLE and terminal checking. I tried to implement a feature that would make the terminal scale accordingly with the users terminal. It was the hardest thing i would have to handle in C. I tried callbacks to resize, signals and so more and it didn’t work. The feature would detect any changes on the size and adapt itself. After hours i just deleted the branch and focused on developing the tree shaking (it is complete!) and now the game does not start when the terminal is not big enough. Next step is to change line breaks with move cursor instructions and move the syscalls to macros so i can add a windows version asap! Also, now the z key exits gracefully unloading everything. AMDG
Ships:
I made a OpenGL based voxel engine with a terminal Renderer in raw C! The game uses RGB TrueColors ansi scape codes in a buffer before printing it all ar once. It also compreses the RGB colors. The main problem i handled was developing hours without seeing something opn the screen in C. But i managed to got it working with block clulling, chunk and mesh generation logic....
|
1793465816.0422733
|
1793552216.0422733
|
|
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!!...
|
1793577259.634267
|
1793663659.634267
|
|
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....
|
1793577260.792939
|
1793663660.792939
|
|
42931
|
inspireFlow by @Cret | Stardance
|
Cret
|
1
|
20.0
|
74
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-07T03:40:35Z", "hours": 20.0, "multiplier": 5.89, "payout": 74, "blessing": "neutral", "text": "Thank you to visit here. I am the frontend developer You can create a new account or use our demo account demo account: pawntest2026 password: test123456789abc", "repo": "https://github.com/AdvxPlora2026/inspire-flow-frontend", "demo": "https://testflight.apple.com/join/ezvT3SN9"}]...
|
[{"post_id": 42419, "ts": "202 [{"post_id": 42419, "ts": "2026-08-07T03:34:32Z", "hours": 0.4786, "text": "I want to add English support first. And then I give up"}, {"post_id": 40600, "ts": "2026-08-04T07:55:13Z", "hours": 19.1381, "text": "InspireFlow An AI-powered creative workflow assistant for creators. InspireFlow (升变) is a project built by a team of high school students during AdventureX 2026. It explores how AI can help creators manage the journey from an initial idea to a finished piece of content, while keeping their creative assets organized and under their control. What are we building? Creating content often involves scattered ideas, unfinished drafts, collaboration messages, brand requirements, and production plans across different tools. InspireFlow aims to provide a unified workflow where creators can: Capture and organize creative ideas Transform rough thoughts into structured content plans Assist with outlines, scripts, and production workflows using AI Keep track of creative assets and collaboration history Create verifiable records for important creative materials The goal is to make the creative process more organized, transparent, and easier to manage. Why InspireFlow? Many creators spend significant time developing ideas, writing drafts, and communicating with collaborators. However, these valuable creative assets are often stored across disconnected platforms, making it difficult to track ownership, changes, and the evolution of an idea. InspireFlow explores a different approach: creators should have better visibility and control over the creative process behind their work. How it works InspireFlow combines several technologies: AI assistance — helping creators structure ideas and improve workflows On-device processing — designed to keep sensitive creative information local whenever possible iOS application — providing a native experience for creators Hardware interaction — integrating with devices such as smart rings for easier idea capture Blockchain-based records — exploring ways to create verifiable records for creative assets Current Status InspireFlow is currently a prototype/demo developed during AdventureX 2026. The project was built within a short hackathon timeframe, including: A complete iOS demo application AI-assisted creative workflows Hardware integration experiments A prototype for creative asset verification There is still a lot to improve, and we are continuing to explore how AI can better support creators. Vision From the first spark of an idea to the final delivery, creators should have a clearer and more connected workflow. InspireFlow is an experiment toward building tools that help creators focus on creativity while maintaining better control over their creative process."}]...
|
Title: inspireFlow by @Cret | Stardance
Devlogs:
Title: inspireFlow by @Cret | Stardance
Devlogs:
InspireFlow An AI-powered creative workflow assistant for creators. InspireFlow (升变) is a project built by a team of high school students during AdventureX 2026. It explores how AI can help creators manage the journey from an initial idea to a finished piece of content, while keeping their creative assets organized and under their control. What are we building? Creating content often involves scattered ideas, unfinished drafts, collaboration messages, brand requirements, and production plans across different tools. InspireFlow aims to provide a unified workflow where creators can: Capture and organize creative ideas Transform rough thoughts into structured content plans Assist with outlines, scripts, and production workflows using AI Keep track of creative assets and collaboration history Create verifiable records for important creative materials The goal is to make the creative process more organized, transparent, and easier to manage. Why InspireFlow? Many creators spend significant time developing ideas, writing drafts, and communicating with collaborators. However, these valuable creative assets are often stored across disconnected platforms, making it difficult to track ownership, changes, and the evolution of an idea. InspireFlow explores a different approach: creators should have better visibility and control over the creative process behind their work. How it works InspireFlow combines several technologies: AI assistance — helping creators structure ideas and improve workflows On-device processing — designed to keep sensitive creative information local whenever possible iOS application — providing a native experience for creators Hardware interaction — integrating with devices such as smart rings for easier idea capture Blockchain-based records — exploring ways to create verifiable records for creative assets Current Status InspireFlow is currently a prototype/demo developed during AdventureX 2026. The project was built within a short hackathon timeframe, including: A complete iOS demo application AI-assisted creative workflows Hardware integration experiments A prototype for creative asset verification There is still a lot to improve, and we are continuing to explore how AI can better support creators. Vision From the first spark of an idea to the final delivery, creators should have a clearer and more connected workflow. InspireFlow is an experiment toward building tools that help creators focus on creativity while maintaining better control over their creative process.
I want to add English support first. And then I give up
Ships:
Thank you to visit here. I am the frontend developer You can create a new account or use our demo account demo account: pawntest2026 password: test123456789abc...
|
1793436953.4555
|
1793523353.4555
|
|
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....
|
1793577263.0504866
|
1793663663.0504866
|
|
42985
|
The Sun and Moon by @NOT_a_ZEBRA | Stardance
|
NOT_a_ZEBRA
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T07:31:50Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website that gives u random but new facts about space directly from NASA . It seemed easy at the beginning but i became hard when it came to JavaScript. I face a problem with the css file as it was not working along with the other files, i tried to link it several times but nothing happened , so i used AI to debug it and then it was workin!!", "repo": "https://github.com/zebraz567/GoodOne", "demo": "https://zebraz567.github.io/GoodOne/"}]...
|
[{"post_id": 43138, "ts": "202 [{"post_id": 43138, "ts": "2026-08-08T07:27:53Z", "hours": 1.2889, "text": "This is my first time working with APIs and stuff, but it was really fun to develop this website!!!"}]...
|
Title: The Sun and Moon by @NOT_a_ZEBRA | Stardanc Title: The Sun and Moon by @NOT_a_ZEBRA | Stardance
Devlogs:
This is my first time working with APIs and stuff, but it was really fun to develop this website!!!
Ships:
I made a website that gives u random but new facts about space directly from NASA . It seemed easy at the beginning but i became hard when it came to JavaScript. I face a problem with the css file as it was not working along with the other files, i tried to link it several times but nothing happened , so i used AI to debug it and then it was workin!!...
|
1793562513.2052772
|
1793648913.2052772
|
|
43000
|
My own site! by @Ng_Chang_Jack | Stardance
|
Ng_Chang_Jack
|
1
|
3.61
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T15:58:26Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I just finished making my own site! I am going to update it regularly I used AI for helping me solve problems when i am stuck and also for code correcting", "repo": "https://github.com/Chz3nex/WebOs", "demo": "https://chz3nex.github.io/WebOs/"}]...
|
[{"post_id": 41228, "ts": "202 [{"post_id": 41228, "ts": "2026-08-05T09:36:26Z", "hours": 0.6092, "text": "Devlog 05(probably the last/updated the design 1 last time)"}, {"post_id": 40803, "ts": "2026-08-04T15:42:09Z", "hours": 0.6719, "text": "Devlog 04 (added an interactive button!)"}, {"post_id": 40626, "ts": "2026-08-04T09:18:18Z", "hours": 0.4028, "text": "Devlog 03 (added hover animation!)"}, {"post_id": 39959, "ts": "2026-08-03T09:14:15Z", "hours": 0.4117, "text": "Devlog 02 (Improved the design)"}, {"post_id": 39398, "ts": "2026-08-02T10:40:54Z", "hours": 1.1422, "text": "Devlog 1(Basic Website Elements)"}]...
|
Title: My own site! by @Ng_Chang_Jack | Stardance
Title: My own site! by @Ng_Chang_Jack | Stardance
Devlogs:
Devlog 1(Basic Website Elements)
Devlog 02 (Improved the design)
Devlog 03 (added hover animation!)
Devlog 04 (added an interactive button!)
Devlog 05(probably the last/updated the design 1 last time)
Ships:
I just finished making my own site! I am going to update it regularly I used AI for helping me solve problems when i am stuck and also for code correcting...
|
1793458290.7876008
|
1793544690.7876008
|
|
43004
|
my APOD site by @Rayna_gupta | Stardance
|
Rayna_gupta
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-09T11:14:17Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a website in which NASA’s present day and past days pictures with explanation can be accessed using API keys, and learn facts about the SPACE and SOLAR SYSTEM, get to know a little bout the solar system and some of our moons.", "repo": "https://github.com/messdinge/NASA.Pictureoftheday", "demo": "https://messdinge.github.io/NASA.Pictureoftheday/"}]...
|
[{"post_id": 43909, "ts": "202 [{"post_id": 43909, "ts": "2026-08-09T11:06:20Z", "hours": 1.8292, "text": "I’ve been working on my APOD site, which will provide you with basic space information, and provide you with NASA’s present and past day picture, here are the results:"}]...
|
Title: my APOD site by @Rayna_gupta | Stardance
D Title: my APOD site by @Rayna_gupta | Stardance
Devlogs:
I’ve been working on my APOD site, which will provide you with basic space information, and provide you with NASA’s present and past day picture, here are the results:
Ships:
i made a website in which NASA’s present day and past days pictures with explanation can be accessed using API keys, and learn facts about the SPACE and SOLAR SYSTEM, get to know a little bout the solar system and some of our moons....
|
1793569815.0752466
|
1793656215.0752466
|
|
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....
|
1793577274.608192
|
1793663674.608192
|
|
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....
|
1793577275.8733115
|
1793663675.8733115
|